Skip to content

Commit

Permalink
Merge branch 'develop' into wip/sergeigarin/storybook
Browse files Browse the repository at this point in the history
  • Loading branch information
mergify[bot] authored Nov 20, 2024
2 parents af95a0b + afe4203 commit 8355f83
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import com.oracle.truffle.api.instrumentation.TruffleInstrument;
import com.oracle.truffle.api.interop.ExceptionType;
import com.oracle.truffle.api.interop.InteropLibrary;
import com.oracle.truffle.api.interop.InvalidArrayIndexException;
import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.interop.UnsupportedMessageException;
import com.oracle.truffle.api.library.ExportLibrary;
Expand All @@ -41,12 +40,10 @@
import org.enso.interpreter.runtime.EnsoContext;
import org.enso.interpreter.runtime.callable.CallerInfo;
import org.enso.interpreter.runtime.callable.function.Function;
import org.enso.interpreter.runtime.data.hash.HashMapToVectorNode;
import org.enso.interpreter.runtime.data.text.Text;
import org.enso.interpreter.runtime.data.vector.ArrayLikeAtNode;
import org.enso.interpreter.runtime.data.vector.ArrayLikeLengthNode;
import org.enso.interpreter.runtime.state.State;
import org.enso.interpreter.runtime.warning.WarningsLibrary;
import org.enso.interpreter.runtime.warning.WithWarnings;
import org.graalvm.options.OptionDescriptor;
import org.graalvm.options.OptionDescriptors;
import org.graalvm.options.OptionKey;
Expand Down Expand Up @@ -222,26 +219,15 @@ public Either<Exception, String> showObject(Object object) {
}

private Object formatObject(Object raw) {
if (raw instanceof Text) {
return toJavaStringNode.execute((Text) raw);
if (raw instanceof Text txt) {
return toJavaStringNode.execute(txt);
}
if (WarningsLibrary.getUncached().hasWarnings(raw)) {
try {
var sb = new StringBuilder();
sb.append(WarningsLibrary.getUncached().removeWarnings(raw));
var value = Text.create(WarningsLibrary.getUncached().removeWarnings(raw).toString());
var mappedWarnings = WarningsLibrary.getUncached().getWarnings(raw, true);
var pairs = HashMapToVectorNode.getUncached().execute(mappedWarnings);
var size = ArrayLikeLengthNode.getUncached().executeLength(pairs);
for (var i = 0L; i < size; i++) {
try {
var pair = ArrayLikeAtNode.getUncached().executeAt(pairs, i);
var value = ArrayLikeAtNode.getUncached().executeAt(pair, 1);
sb.append("\n ! ").append(value);
} catch (InvalidArrayIndexException ex) {
// go on
}
}
return sb.toString();
var txt = WithWarnings.warningsToText(mappedWarnings, this, Text.create("\n ! "));
return value.add(txt);
} catch (UnsupportedMessageException e) {
// go on
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,33 @@ public void allWarningsAreExceptions() throws Exception {
}
}

@Test
public void toDisplayText() throws Exception {
var code =
"""
from Standard.Base import Integer, Warning, Error, Text
type My_Warning
private Value msg
to_display_text self -> Text = Error.throw "Don't call me!"
to_text self -> Text = "My_Warning to_text: "+self.msg
fn =
Warning.attach (My_Warning.Value "ONE") 1
""";

var module = ctx.eval(LanguageInfo.ID, code);
var ownWarning = module.invokeMember(MethodNames.Module.EVAL_EXPRESSION, "fn");

assertTrue("Warning is seen as exception", ownWarning.isException());
try {
throw ownWarning.throwException();
} catch (PolyglotException ex) {
assertEquals("My_Warning to_text: ONE", ex.getMessage());
}
}

private void assertWarningsForAType(Value v) {
var type = v.getMetaObject();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,37 @@ public void panicOnUnusedError() throws Exception {
err.toString(),
AllOf.allOf(containsString("d = Error:2"), not(containsString("j = 1"))));
}

@Test
public void toTextIsCalledForListings() throws Exception {
var code =
"""
from Standard.Base import all
type My_Warning
Value msg
to_text self -> Text = "Beware of "+self.msg
inspect =
one = Warning.attach (My_Warning.Value "ONE") 1
half = Warning.attach (My_Warning.Value "HALF") 2
two = Warning.attach (My_Warning.Value "TWO") half
[one, half, two]
""";
var r = ContextUtils.evalModule(ctx, code, "ScriptTest.enso", "inspect");
assertTrue("Got array back: " + r, r.hasArrayElements());
assertEquals("Got three elements", 3, r.getArraySize());
assertEquals("One", 1, r.getArrayElement(0).asInt());
assertEquals("Half", 2, r.getArrayElement(1).asInt());
assertEquals("Two", 2, r.getArrayElement(2).asInt());
assertEquals("No output printed", "", out.toString());
assertThat(
"Stderr contains some warnings",
err.toString(),
AllOf.allOf(
containsString("half = 2\n ! Beware of HALF"),
containsString("one = 1\n ! Beware of ONE"),
containsString("two = 2\n ! Beware of TWO\n ! Beware of HALF"),
containsString("two = 2")));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,25 +184,34 @@ private PanicException asException(Node where) {
WarningsLibrary.getUncached(),
ArrayLikeAtNodeGen.getUncached(),
ArrayLikeLengthNodeGen.getUncached());
var text = warningsToText(warnsMap, where, null);
return new PanicException(text, where);
}

@CompilerDirectives.TruffleBoundary
public static Text warningsToText(EnsoHashMap warnsMap, Node where, Text prefix)
throws PanicException {
var warns = Warning.fromMapToArray(warnsMap);
var ctx = EnsoContext.get(where);
var scopeOfAny = ctx.getBuiltins().any().getDefinitionScope();
var toText = UnresolvedSymbol.build("to_text", scopeOfAny);
var node = InteropMethodCallNode.getUncached();
var state = State.create(ctx);

var text = Text.empty();
for (var w : warns) {
try {
var wText = node.execute(toText, state, new Object[] {w});
var wText = node.execute(toText, state, new Object[] {w.getValue()});
if (wText instanceof Text t) {
if (prefix != null) {
text = text.add(prefix);
}
text = text.add(t);
}
} catch (ArityException e) {
throw ctx.raiseAssertionPanic(where, null, e);
}
}
return new PanicException(text, where);
return text;
}

@ExportMessage
Expand Down

0 comments on commit 8355f83

Please sign in to comment.