Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions runtime/src/main/java/dev/ionfusion/fusion/BaseValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static dev.ionfusion.fusion.FusionBool.falseBool;
import static dev.ionfusion.fusion.FusionBool.makeBool;
import static dev.ionfusion.fusion.FusionBool.trueBool;
import static dev.ionfusion.fusion.FusionIo.makeIonizeError;
import static dev.ionfusion.fusion.FusionIo.safeWriteToString;
import static dev.ionfusion.fusion.FusionValue.sameAnnotations;

Expand Down Expand Up @@ -127,7 +128,7 @@ SyntaxValue datumToSyntaxMaybe(Evaluator eval, SourceLocation loc)
void ionize(Evaluator eval, IonWriter out)
throws IOException, IonException, FusionException
{
throw new IonizeFailure(this);
throw makeIonizeError(eval, this);
}


Expand Down Expand Up @@ -212,7 +213,7 @@ IonValue copyToIonValue(Evaluator eval, ValueFactory factory,
{
if (throwOnConversionFailure)
{
throw new IonizeFailure(this);
throw makeIonizeError(eval, this);
}

return null;
Expand Down
10 changes: 9 additions & 1 deletion runtime/src/main/java/dev/ionfusion/fusion/FusionIo.java
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static void dispatchIonize(Evaluator eval, IonWriter out, Object value)
}
catch (ClassCastException e)
{
throw new IonizeFailure(value);
throw makeIonizeError(eval, value);
}

fv.ionize(eval, out);
Expand Down Expand Up @@ -208,6 +208,14 @@ static Object read(Evaluator eval, IonReader reader)
// Basic output procedures


static ContractException makeIonizeError(Evaluator eval, Object unIonizableValue)
{
String message = "Cannot ionize non-Ionizable data: " +
safeWriteToString(eval, unIonizableValue);
return new IonizeFailure(message, unIonizableValue);
}


/**
* Writes an Ion representation of a value.
* An exception is thrown if the value contains any non-Ion data
Expand Down
5 changes: 3 additions & 2 deletions runtime/src/main/java/dev/ionfusion/fusion/FusionSexp.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import static dev.ionfusion.fusion.FusionCompare.EqualityTier.TIGHT_EQUAL;
import static dev.ionfusion.fusion.FusionIo.dispatchIonize;
import static dev.ionfusion.fusion.FusionIo.dispatchWrite;
import static dev.ionfusion.fusion.FusionIo.makeIonizeError;
import static dev.ionfusion.fusion.FusionSymbol.BaseSymbol.internSymbols;
import static dev.ionfusion.fusion.FusionVoid.voidValue;

Expand Down Expand Up @@ -991,7 +992,7 @@ else if (tail instanceof EmptySexp)
}
else if (throwOnConversionFailure)
{
throw new IonizeFailure(this);
throw makeIonizeError(eval, this);
}
else
{
Expand Down Expand Up @@ -1057,7 +1058,7 @@ else if (tail instanceof EmptySexp)
}
else
{
throw new IonizeFailure(this);
throw makeIonizeError(eval, this);
}
}
out.stepOut();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

package dev.ionfusion.fusion;

import static dev.ionfusion.fusion.FusionIo.makeIonizeError;
import static dev.ionfusion.fusion._private.FusionUtils.EMPTY_OBJECT_ARRAY;
import static dev.ionfusion.fusion._private.FusionUtils.EMPTY_STRING_ARRAY;

Expand Down Expand Up @@ -336,7 +337,7 @@ static IonValue copyToIonValue(Evaluator eval,

if (throwOnConversionFailure)
{
throw new IonizeFailure(value);
throw makeIonizeError(eval, value);
}

return null;
Expand Down
16 changes: 2 additions & 14 deletions runtime/src/main/java/dev/ionfusion/fusion/IonizeFailure.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@

package dev.ionfusion.fusion;

import static dev.ionfusion.fusion.FusionIo.safeWrite;
import java.io.IOException;

/**
* Indicates a failure to convert a Fusion value into Ion.
*/
Expand All @@ -15,19 +12,10 @@ final class IonizeFailure
{
private final Object myUnIonizableValue;

IonizeFailure(Object unIonizableValue)
IonizeFailure(String message, Object unIonizableValue)
{
super(null);
super(message);

myUnIonizableValue = unIonizableValue;
}


@Override
void displayMessage(Evaluator eval, Appendable out)
throws IOException, FusionException
{
out.append("Cannot ionize non-Ionizable data: ");
safeWrite(eval, out, myUnIonizableValue);
}
}