diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Errors/Common.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Errors/Common.md index d9b0d929e549..2bab3e67c844 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Errors/Common.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Errors/Common.md @@ -45,6 +45,7 @@ - to_display_text self -> Standard.Base.Any.Any - type Invalid_Conversion_Target - Error target:Standard.Base.Any.Any + - to_display_text self -> Standard.Base.Data.Text.Text - type Length_Mismatch - to_display_text self -> Standard.Base.Any.Any - to_js_object self -> Standard.Base.Any.Any diff --git a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Panic.md b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Panic.md index d5f8dc3a2de2..05ab5bd2cecc 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Panic.md +++ b/distribution/lib/Standard/Base/0.0.0-dev/docs/api/Panic.md @@ -1,8 +1,8 @@ ## Enso Signatures 1.0 ## module Standard.Base.Panic - type Caught_Panic - - Panic payload:Standard.Base.Any.Any internal_original_exception:Standard.Base.Any.Any - convert_to_dataflow_error self -> Standard.Base.Any.Any + - payload self -> Standard.Base.Any.Any - stack_trace self -> Standard.Base.Any.Any - type Panic - catch panic_type:Standard.Base.Any.Any ~action:Standard.Base.Any.Any handler:Standard.Base.Any.Any -> Standard.Base.Any.Any diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso index 42b641047f0c..93ca311f4a5d 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso @@ -1798,7 +1798,6 @@ type Builder the sub-`Vector` within the outermost `Vector`, and so on. An error that is wrapped as a `Map_Error` can be caught as a `Map_Error`, or as itself. In the latter case, the `Map_Error` wrapper is stripped off. -@Builtin_Type type Map_Error ## --- private: true @@ -1816,7 +1815,6 @@ type Map_Error private: true --- Indicates that a method should not wrap thrown errors in `Map_Error`. -@Builtin_Type type No_Wrap ## --- private: true diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso index 76e74a045fdc..77c544dc9c7a 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso @@ -30,7 +30,6 @@ type Not_Found to_display_text self = "The target was not found." -@Builtin_Type type Index_Out_Of_Bounds ## --- private: true @@ -52,7 +51,6 @@ type Index_Out_Of_Bounds to_display_text self = "The index " + self.index.to_text + " is out of bounds in a collection of length " + self.length.to_text + "." -@Builtin_Type type Syntax_Error ## --- private: true @@ -70,7 +68,6 @@ type Syntax_Error to_display_text : Text to_display_text self = "Syntax error: "+self.message+"." -@Builtin_Type type Type_Error ## --- private: true @@ -135,7 +132,6 @@ type Type_Error to_js_object self = JS_Object.from_pairs [["type", "Type_Error"], ["expected", self.expected], ["actual", self.actual], ["comment", self.comment]] -@Builtin_Type type Compile_Error ## --- private: true @@ -153,7 +149,6 @@ type Compile_Error to_display_text : Text to_display_text self = "Compile error: "+self.message+"." -@Builtin_Type type Assertion_Error ## --- private: true @@ -167,7 +162,6 @@ type Assertion_Error to_display_text : Text to_display_text self = "Assertion Error: '" + self.message.to_text + "'" -@Builtin_Type type Inexhaustive_Pattern_Match ## --- private: true @@ -185,7 +179,6 @@ type Inexhaustive_Pattern_Match to_display_text : Text to_display_text self = "Inexhaustive pattern match: no branch matches "+self.scrutinee.to_display_text+"." -@Builtin_Type type Arity_Error ## --- private: true @@ -211,7 +204,6 @@ type Arity_Error "Wrong number of arguments. Expected "+expectedRange+", but got "+self.actual.to_text+"." -@Builtin_Type type Uninitialized_State ## --- private: true @@ -230,7 +222,6 @@ type Uninitialized_State to_display_text : Text to_display_text self = "State is not initialized for type "+self.key.to_display_text+"." -@Builtin_Type type No_Such_Method ## --- private: true @@ -277,7 +268,6 @@ type No_Such_Method "type " + (Meta.type_of self.target).to_display_text "Method `"+self.method_name+"` of "+target_name+" could not be found." -@Builtin_Type type No_Such_Field ## --- private: true @@ -299,7 +289,6 @@ type No_Such_Field value_type_name = if Meta.is_polyglot self.value then self.value.to_display_text else (Meta.type_of self.value).to_display_text "Field `"+self.field_name+"` of "+value_type_name+" could not be found." -@Builtin_Type type Module_Not_In_Package_Error ## An error that occurs when the enso_project function is called in a file that is not part of a project. @@ -312,7 +301,6 @@ type Module_Not_In_Package_Error to_display_text : Text to_display_text self = "Module is not a part of a package." -@Builtin_Type type Arithmetic_Error ## --- private: true @@ -338,7 +326,6 @@ type Arithmetic_Error handle_java_exception = Panic.catch ArithmeticException handler=(cause-> Error.throw (Arithmetic_Error.Error cause.payload.getMessage)) -@Builtin_Type type Incomparable_Values ## An error that indicates that the two values are not comparable. @@ -374,7 +361,6 @@ type Incomparable_Values handle Type_Error <| handle Unsupported_Argument_Types <| handle ClassCastException <| handle_cmp_exc <| function -@Builtin_Type type Invalid_Array_Index ## --- private: true @@ -394,7 +380,6 @@ type Invalid_Array_Index to_display_text : Text to_display_text self = "Invalid array index: "+self.index.to_text+"." -@Builtin_Type type Not_Invokable ## --- private: true @@ -418,7 +403,6 @@ type Not_Invokable _ -> " Caused by: "+self.cause.to_display_text "Type error: expected a function, but got "+self.target.to_display_text+"."+suffix -@Builtin_Type type No_Such_Argument ## --- private: true @@ -437,7 +421,6 @@ type No_Such_Argument to_display_text : Text to_display_text self = "The named argument `"+self.argument_name.to_text+"` did not match any argument names. Perhaps it is misspelled?" -@Builtin_Type type Private_Access ## --- private: true @@ -484,7 +467,6 @@ type Private_Access + this_proj + "." -@Builtin_Type type Unsupported_Argument_Types ## --- private: true @@ -504,7 +486,6 @@ type Unsupported_Argument_Types to_display_text : Text to_display_text self = self.message.to_text -@Builtin_Type type Module_Does_Not_Exist ## --- private: true @@ -522,7 +503,6 @@ type Module_Does_Not_Exist to_display_text : Text to_display_text self = "Module "+self.name+" does not exist." -@Builtin_Type type Invalid_Conversion_Target ## --- private: true @@ -534,7 +514,13 @@ type Invalid_Conversion_Target - `target`: the type trying to be converted to. Error target -@Builtin_Type + ## --- + private: true + --- + Convert to a human-readable format. + to_display_text self -> Text = + self.target.to_display_text + " is not a valid conversion target. Expected a type." + type No_Such_Conversion ## --- private: true @@ -555,7 +541,6 @@ type No_Such_Conversion to_display_text : Text to_display_text self = "Could not find a conversion from `"+self.that.to_display_text+"` to `"+self.target.to_display_text+"`." -@Builtin_Type type No_Conversion_Currying ## --- private: true @@ -585,7 +570,6 @@ type No_Conversion_Currying True -> "Conversion currying without `this` argument is not supported." False -> "Conversion currying without `this` and `that` arguments is not supported." -@Builtin_Type type Forbidden_Operation ## --- private: true @@ -646,7 +630,6 @@ type Out_Of_Memory ## Indicates that an expression cannot be evaluated because somewhere within it, a function does not have all required arguments provided. -@Builtin_Type type Missing_Argument ## --- private: true @@ -674,13 +657,13 @@ type Missing_Argument function_name = function_frame.name call_location = caller_frame.source_location - # FIXME: Default arguments do not appear to be applied to constructors of builtin types - error = if message_override.is_nothing then Missing_Argument.Error argument_name function_name call_location ("Provide a value for the argument `" + argument_name + "`.") else - Missing_Argument.Error argument_name function_name call_location message_override - Error.throw error + Error.throw <| + if message_override.is_nothing then + Missing_Argument.Error argument_name function_name call_location + else + Missing_Argument.Error argument_name function_name call_location message_override ## Warning when additional warnings occurred. -@Builtin_Type type Additional_Warnings ## --- private: true diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso index a9d296b88c52..ee03e39a495e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso @@ -2,7 +2,6 @@ import project.Data.Text.Text import project.Nothing.Nothing import project.Panic.Panic -@Builtin_Type type Unimplemented ## --- private: true diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso index 560c05cc3404..d1888ec85e41 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso @@ -297,7 +297,6 @@ type Panic ## --- private: true --- -@Builtin_Type type Caught_Panic ## --- private: true @@ -308,7 +307,7 @@ type Caught_Panic - `payload`: the payload carried by the error. - `internal_original_exception (private)`: the original Java exception that is the source of this panic. Only for internal use. - Panic payload internal_original_exception + private Panic internal_payload internal_original_exception ## --- icon: panic @@ -326,6 +325,13 @@ type Caught_Panic stack_trace self = Panic.get_attached_stack_trace self + ## --- + private: true + --- + Getter for the payload + + payload self = self.internal_payload + ## --- private: true --- diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java index 1d4c2eff22a0..24cec962661f 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/compiler/test/IfThenElseTest.java @@ -165,13 +165,13 @@ public void conditionMustBeBoolean() { var res = check.execute("Yes").asString(); fail("Expecting error, not: " + res); } catch (PolyglotException ex) { - assertThat(ex.getMessage(), Matchers.containsString(".Error")); + assertThat(ex.getMessage(), Matchers.containsString("no branch matches Yes")); } try { var res = check.execute((Object) null).asString(); fail("Expecting error, not: " + res); } catch (PolyglotException ex) { - assertThat(ex.getMessage(), Matchers.containsString(".Error")); + assertThat(ex.getMessage(), Matchers.containsString("no branch matches Nothing")); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java index 6ba437cfa942..ba6769159cf0 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNodeTest.java @@ -9,6 +9,7 @@ import org.enso.interpreter.runtime.callable.argument.ArgumentDefinition; import org.enso.interpreter.runtime.callable.function.Function; import org.enso.interpreter.runtime.callable.function.FunctionSchema; +import org.enso.interpreter.runtime.data.Type; import org.enso.interpreter.runtime.data.text.Text; import org.enso.interpreter.runtime.error.PanicException; import org.enso.interpreter.runtime.error.PanicSentinel; @@ -83,7 +84,7 @@ public void catchAnyPanic() { var args = Function.ArgumentsHelper.getPositionalArguments(frame.getArguments()); assertEquals("One argument expected", 1, args.length); var argType = TypeOfNode.getUncached().findTypeOrError(args[0]); - if (argType == ctx.getBuiltins().caughtPanic().getType()) { + if (argType == caughtPanic(ctx)) { assertThat(args[0].toString(), Matchers.containsString("Thrown")); return text; } else { @@ -114,7 +115,7 @@ public void catchAnyPanicSentinel() { var args = Function.ArgumentsHelper.getPositionalArguments(frame.getArguments()); assertEquals("One argument expected", 1, args.length); var argType = TypeOfNode.getUncached().findTypeOrError(args[0]); - if (argType == ctx.getBuiltins().caughtPanic().getType()) { + if (argType == caughtPanic(ctx)) { assertThat(args[0].toString(), Matchers.containsString("Thrown")); return text; } else { @@ -141,7 +142,7 @@ public void catchSpecificPanic() { var args = Function.ArgumentsHelper.getPositionalArguments(frame.getArguments()); assertEquals("One argument expected", 1, args.length); var argType = TypeOfNode.getUncached().findTypeOrError(args[0]); - if (argType == ctx.getBuiltins().caughtPanic().getType()) { + if (argType == caughtPanic(ctx)) { assertThat(args[0].toString(), Matchers.containsString("Thrown")); return text; } else { @@ -172,7 +173,7 @@ public void catchSpecificPanicSentinel() { var args = Function.ArgumentsHelper.getPositionalArguments(frame.getArguments()); assertEquals("One argument expected", 1, args.length); var argType = TypeOfNode.getUncached().findTypeOrError(args[0]); - if (argType == ctx.getBuiltins().caughtPanic().getType()) { + if (argType == caughtPanic(ctx)) { assertThat(args[0].toString(), Matchers.containsString("Thrown")); return text; } else { @@ -203,7 +204,7 @@ public void dontCatchSpecificPanic() { var args = Function.ArgumentsHelper.getPositionalArguments(frame.getArguments()); assertEquals("One argument expected", 1, args.length); var argType = TypeOfNode.getUncached().findTypeOrError(args[0]); - if (argType == ctx.getBuiltins().caughtPanic().getType()) { + if (argType == caughtPanic(ctx)) { assertThat(args[0].toString(), Matchers.containsString("Thrown")); return text; } else { @@ -239,7 +240,7 @@ public void dontCatchSpecificPanicSentinel() { var args = Function.ArgumentsHelper.getPositionalArguments(frame.getArguments()); assertEquals("One argument expected", 1, args.length); var argType = TypeOfNode.getUncached().findTypeOrError(args[0]); - if (argType == ctx.getBuiltins().caughtPanic().getType()) { + if (argType == caughtPanic(ctx)) { assertThat(args[0].toString(), Matchers.containsString("Thrown")); return text; } else { @@ -263,6 +264,10 @@ public void dontCatchSpecificPanicSentinel() { } } + private static Type caughtPanic(EnsoContext ctx) { + return ctx.getBuiltins().error().caughtPanic(); + } + private static FunctionSchema schema(String argName) { var def = new ArgumentDefinition(0, argName, null, null, ArgumentDefinition.ExecutionMode.EXECUTE); diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java index c8be5bd4f0b8..2eea40269e93 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/runtime/ModuleTest.java @@ -20,6 +20,7 @@ import org.enso.test.utils.ContextUtils; import org.graalvm.polyglot.PolyglotException; import org.graalvm.polyglot.Source; +import org.hamcrest.core.AllOf; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -52,7 +53,13 @@ public void noSuchModuleError() { var r = b.invokeMember(MethodNames.TopScope.GET_MODULE, "Does.Not.Exist.Module"); fail("Expecting failure, but got: " + r); } catch (PolyglotException ex) { - assertThat(ex.getMessage(), containsString("Module_Does_Not_Exist")); + assertThat( + ex.getMessage(), + AllOf.allOf( + containsString("Module"), + containsString("Does"), + containsString("Not"), + containsString("Exist"))); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java index db0c748ef7e2..524fbc9d6c68 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java @@ -156,23 +156,24 @@ private static void assertAtomFactory(String msg, Function factory) { + var arityErrorMatcher = containsString("Wrong number of arguments"); try { var zero = factory.apply(new Object[0]); fail("Expecting exception: " + zero); } catch (PanicException e) { - assertThat(msg + " no arguments", e.getMessage(), containsString("Arity_Error")); + assertThat(msg + " no arguments", e.getMessage(), arityErrorMatcher); } try { var one = factory.apply(new Object[] {"a"}); fail("Expecting exception: " + one); } catch (PanicException e) { - assertThat(msg + " one argument", e.getMessage(), containsString("Arity_Error")); + assertThat(msg + " one argument", e.getMessage(), arityErrorMatcher); } try { var two = factory.apply(new Object[] {"a", "b"}); fail("Expecting exception: " + two); } catch (PanicException e) { - assertThat(msg + " two arguments", e.getMessage(), containsString("Arity_Error")); + assertThat(msg + " two arguments", e.getMessage(), arityErrorMatcher); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java index 34ecc96e18cf..d50159ebef8a 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AutoscopedConstructorTest.java @@ -257,7 +257,7 @@ public void wrongConstructorNameYieldsTypeError() { } catch (PolyglotException e) { assertTrue( "Expecting type error, but got: " + e.getMessage(), - e.getMessage().contains("Type_Error")); + e.getMessage().contains("Cannot find constructor ..True among N")); } } diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java index f2b7348e9bf0..6bc26877d573 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/interop/TypeMembersTest.java @@ -86,7 +86,6 @@ public void ensureNonBuiltinMembersArePresent() throws Exception { Source.newBuilder( "enso", """ - @Builtin_Type type Compile_Error Error message diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/DebugServerTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/DebugServerTest.scala index 8f0e66a62059..728f68763a3e 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/DebugServerTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/DebugServerTest.scala @@ -132,9 +132,9 @@ class DebugServerTest executor.exit() } eval(code) - val errorMsg = - "Compile_Error.Error" - evalResult.left.value.getMessage shouldEqual errorMsg + val evalTxt = evalResult.left.value.getMessage.toLowerCase + evalTxt should include("compile") + evalTxt should include("error") } "handle errors gracefully (pretty print)" in { diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/InstrumentTestContext.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/InstrumentTestContext.scala index 396b6376879f..7e523355d813 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/InstrumentTestContext.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/InstrumentTestContext.scala @@ -56,7 +56,10 @@ abstract class InstrumentTestContext(packageName: String) { Option(messageQueue.poll(timeoutSeconds, TimeUnit.SECONDS)) } - def receiveN(n: Int, timeoutSeconds: Long = 60): List[Api.Response] = { + def receiveN( + n: Int, + timeoutSeconds: Long = InstrumentTestContext.DEFAULT_TIMEOUT + ): List[Api.Response] = { Iterator .continually(receiveWithTimeout(timeoutSeconds)) .take(n) @@ -66,7 +69,7 @@ abstract class InstrumentTestContext(packageName: String) { def receiveNIgnoreExpressionUpdates( n: Int, - timeoutSeconds: Long = 60 + timeoutSeconds: Long = InstrumentTestContext.DEFAULT_TIMEOUT ): List[Api.Response] = { receiveNWithFilter( n, @@ -82,7 +85,7 @@ abstract class InstrumentTestContext(packageName: String) { def receiveNIgnorePendingExpressionUpdates( n: Int, - timeoutSeconds: Long = 60, + timeoutSeconds: Long = InstrumentTestContext.DEFAULT_TIMEOUT, updatesOnlyFor: Set[Api.ExpressionId] = Set() ): List[Api.Response] = { receiveNWithFilter( @@ -108,7 +111,7 @@ abstract class InstrumentTestContext(packageName: String) { def receiveNIgnoreStdLib( n: Int, - timeoutSeconds: Long = 60 + timeoutSeconds: Long = InstrumentTestContext.DEFAULT_TIMEOUT ): List[Api.Response] = { receiveNWithFilter( n, @@ -190,4 +193,5 @@ abstract class InstrumentTestContext(packageName: String) { object InstrumentTestContext { val DISABLE_IR_CACHE = Option(System.getenv("ENSO_TEST_DISABLE_IR_CACHE")).getOrElse("true") + private val DEFAULT_TIMEOUT: Long = 60 } diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala index 623803609b35..b410baf9994d 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala @@ -295,7 +295,9 @@ class ReplTest executor.exit() } eval(code) - evalResult.left.value.getMessage should include("Compile_Error") + val evalTxt = evalResult.left.value.getMessage.toLowerCase + evalTxt should include("compile") + evalTxt should include("error") } "handle errors gracefully (pretty print)" in { diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala index 8eca67ed1f73..32162eb6200a 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeErrorsTest.scala @@ -173,7 +173,7 @@ class RuntimeErrorsTest contextId, xId, Api.ExpressionUpdate.Payload.Panic( - "Compile_Error.Error", + "Compile error: The name `undefined` could not be found.", Seq(xId) ), builtin = true @@ -182,7 +182,7 @@ class RuntimeErrorsTest contextId, yId, Api.ExpressionUpdate.Payload.Panic( - "Compile_Error.Error", + "Compile error: The name `undefined` could not be found.", Seq(xId) ), builtin = true @@ -191,7 +191,7 @@ class RuntimeErrorsTest contextId, mainResId, Api.ExpressionUpdate.Payload.Panic( - "Compile_Error.Error", + "Compile error: The name `undefined` could not be found.", Seq(xId) ), builtin = true @@ -367,7 +367,7 @@ class RuntimeErrorsTest Api.MethodPointer("Enso_Test.Test.Main", "Enso_Test.Test.Main", "foo") ), Api.ExpressionUpdate.Payload.Panic( - "Compile_Error.Error", + "Compile error: The name `x` could not be found.", Seq(mainBodyId) ), builtin = true @@ -2493,7 +2493,7 @@ class RuntimeErrorsTest contextId, xId, Api.ExpressionUpdate.Payload.Panic( - "Compile_Error.Error", + "Compile error: The name `IO` could not be found.", Seq(xId) ), builtin = true @@ -2502,7 +2502,7 @@ class RuntimeErrorsTest contextId, mainResId, Api.ExpressionUpdate.Payload.Panic( - "Compile_Error.Error", + "Compile error: The name `IO` could not be found.", Seq(xId) ), builtin = true @@ -2533,7 +2533,7 @@ class RuntimeErrorsTest TestMessages.update( contextId, x1Id, - ConstantsGen.NOTHING_BUILTIN, + ConstantsGen.NOTHING, Api.MethodCall( Api.MethodPointer( "Standard.Base.IO", @@ -2542,7 +2542,7 @@ class RuntimeErrorsTest ) ) ), - TestMessages.update(contextId, mainRes1Id, ConstantsGen.NOTHING_BUILTIN), + TestMessages.update(contextId, mainRes1Id, ConstantsGen.NOTHING), context.executionComplete(contextId) ) context.consumeOut shouldEqual List("MyError") diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala index 8656ad7c20d5..4e9d6d58721f 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeServerTest.scala @@ -320,16 +320,15 @@ class RuntimeServerTest ) ) ) - context.receiveN(4) should contain theSameElementsAs Seq( + context.receiveNIgnoreStdLib(3) should contain theSameElementsAs Seq( Api.Response(requestId, Api.PushContextResponse(contextId)), TestMessages .update( contextId, identityResultId, - ConstantsGen.ERROR_BUILTIN, + ConstantsGen.ERROR, payload = Api.ExpressionUpdate.Payload.DataflowError(Nil) ), - Api.Response(None, Api.ExecutionUpdate(contextId, Seq())), context.executionComplete(contextId) ) context.consumeOut shouldEqual List() @@ -1529,7 +1528,7 @@ class RuntimeServerTest ) ) ) - context.receiveN(4) should contain theSameElementsAs Seq( + context.receiveNIgnoreStdLib(3) should contain theSameElementsAs Seq( Api.Response(requestId, Api.PushContextResponse(contextId)), TestMessages.update( contextId, @@ -1550,12 +1549,11 @@ class RuntimeServerTest ) ) ), - Api.Response(None, Api.ExecutionUpdate(contextId, Seq())), Api.Response( Api.ExecutionFailed( contextId, Api.ExecutionResult.Diagnostic.error( - "Type_Error.Error", + "Type error: Expected `..A` to be T, but got Function.", Some(mainFile), Some(model.Range(model.Position(8, 0), model.Position(8, 12))), None, @@ -5175,7 +5173,7 @@ class RuntimeServerTest Api.ExecutionFailed( contextId, Api.ExecutionResult.Diagnostic.error( - "Not_Invokable.Error", + "Type error: expected a function, but got 42.", Some(mainFile), Some(model.Range(model.Position(1, 7), model.Position(1, 19))), None, @@ -5304,14 +5302,13 @@ class RuntimeServerTest ) ) ) - context.receiveN(3) should contain theSameElementsAs Seq( + context.receiveNIgnoreStdLib(2) should contain theSameElementsAs Seq( Api.Response(requestId, Api.PushContextResponse(contextId)), - Api.Response(None, Api.ExecutionUpdate(contextId, Seq())), Api.Response( Api.ExecutionFailed( contextId, Api.ExecutionResult.Diagnostic.error( - "No_Such_Method.Error", + "Method `+` of type Function could not be found.", Some(mainFile), Some(model.Range(model.Position(2, 14), model.Position(2, 23))), None, @@ -5456,14 +5453,13 @@ class RuntimeServerTest ) ) ) - context.receiveN(3) should contain theSameElementsAs Seq( + context.receiveNIgnoreStdLib(2) should contain theSameElementsAs Seq( Api.Response(requestId, Api.PushContextResponse(contextId)), - Api.Response(None, Api.ExecutionUpdate(contextId, Seq())), Api.Response( Api.ExecutionFailed( contextId, Api.ExecutionResult.Diagnostic.error( - "Type_Error.Error", + "Type error: Expected `str` to be Text, but got Integer.", Some(mainFile), Some(model.Range(model.Position(2, 10), model.Position(2, 15))), None, @@ -5615,7 +5611,7 @@ class RuntimeServerTest Api.ExecutionFailed( contextId, Api.ExecutionResult.Diagnostic.error( - "No_Such_Method.Error", + "Method `pi` of type Number.type could not be found.", Some(mainFile), Some(model.Range(model.Position(2, 7), model.Position(2, 16))), None, @@ -5761,7 +5757,7 @@ class RuntimeServerTest Api.ExecutionFailed( contextId, Api.ExecutionResult.Diagnostic.error( - "Type_Error.Error", + "Type error: Expected `that` to be Integer, but got Function.", None, Some(model.Range(model.Position(6, 18), model.Position(6, 43))), None, diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala index bb64f844b38a..f32d73b6e48c 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/RuntimeTypesTest.scala @@ -365,13 +365,15 @@ class RuntimeTypesTest TestMessages.panic( contextId, id_x, - Api.ExpressionUpdate.Payload.Panic("Compile_Error.Error", List(id_x)), + Api.ExpressionUpdate.Payload + .Panic("Compile error: The name `T` could not be found.", List(id_x)), builtin = true ), TestMessages.panic( contextId, id_y, - Api.ExpressionUpdate.Payload.Panic("Compile_Error.Error", List(id_x)), + Api.ExpressionUpdate.Payload + .Panic("Compile error: The name `T` could not be found.", List(id_x)), builtin = true ), context.executionComplete(contextId) @@ -500,7 +502,8 @@ class RuntimeTypesTest TestMessages.panic( contextId, id_x, - Api.ExpressionUpdate.Payload.Panic("Compile_Error.Error", List(id_x)), + Api.ExpressionUpdate.Payload + .Panic("Compile error: The name `T` could not be found.", List(id_x)), builtin = true ), context.executionComplete(contextId) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/AdditionalWarnings.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/AdditionalWarnings.java deleted file mode 100644 index 9ac272137c8d..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/AdditionalWarnings.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class AdditionalWarnings extends UniquelyConstructibleBuiltin { - - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("count"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ArithmeticError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ArithmeticError.java deleted file mode 100644 index 66b6482a8852..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ArithmeticError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class ArithmeticError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ArityError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ArityError.java deleted file mode 100644 index 8ef13cc48191..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ArityError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class ArityError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("expected_min", "expected_max", "actual"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/AssertionError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/AssertionError.java deleted file mode 100644 index 946bb9a6214a..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/AssertionError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public final class AssertionError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNode.java index c0cd2efde28d..c819a46c4a59 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CatchPanicNode.java @@ -19,7 +19,6 @@ import org.enso.interpreter.node.expression.builtin.meta.IsValueOfTypeNode; import org.enso.interpreter.runtime.EnsoContext; import org.enso.interpreter.runtime.callable.argument.CallArgumentInfo; -import org.enso.interpreter.runtime.data.atom.AtomNewInstanceNode; import org.enso.interpreter.runtime.error.PanicException; import org.enso.interpreter.runtime.error.PanicSentinel; @@ -90,7 +89,6 @@ private Object executeCallbackOrRethrow( var ctx = EnsoContext.get(this); var state = ctx.currentState(); var builtins = ctx.getBuiltins(); - var cons = builtins.caughtPanic().getUniqueConstructor(); if (originalException instanceof PanicException panic) { panic.assignCaughtLocation(this); } else { @@ -98,8 +96,7 @@ private Object executeCallbackOrRethrow( // exceptions in case it is needed by the handler TruffleStackTrace.fillIn(originalException); } - var caughtPanic = - AtomNewInstanceNode.getUncached().newInstance(cons, payload, originalException); + var caughtPanic = builtins.error().newCaughtPanic(payload, originalException); return invokeCallableNode.execute(handler, frame, state, new Object[] {caughtPanic}); } else { try { diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CaughtPanic.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CaughtPanic.java deleted file mode 100644 index bc57d962d0a0..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CaughtPanic.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class CaughtPanic extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Panic"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("payload", "internal_original_exception"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CompileError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CompileError.java deleted file mode 100644 index 7265ddacbd02..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/CompileError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class CompileError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ForbiddenOperation.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ForbiddenOperation.java deleted file mode 100644 index b0c0f648abda..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ForbiddenOperation.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class ForbiddenOperation extends UniquelyConstructibleBuiltin { - - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/IncomparableValues.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/IncomparableValues.java deleted file mode 100644 index b6f142665eb4..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/IncomparableValues.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class IncomparableValues extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("left", "right"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/IndexOutOfBounds.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/IndexOutOfBounds.java deleted file mode 100644 index d73c1ebdaad4..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/IndexOutOfBounds.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class IndexOutOfBounds extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("index", "length"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InexhaustivePatternMatch.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InexhaustivePatternMatch.java deleted file mode 100644 index 568b7006f44a..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InexhaustivePatternMatch.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class InexhaustivePatternMatch extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("scrutinee"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InvalidArrayIndex.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InvalidArrayIndex.java deleted file mode 100644 index 1f9fd3b5ee60..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InvalidArrayIndex.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class InvalidArrayIndex extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("array", "index"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InvalidConversionTarget.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InvalidConversionTarget.java deleted file mode 100644 index 5b7f42763615..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/InvalidConversionTarget.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class InvalidConversionTarget extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("target"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/MapError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/MapError.java deleted file mode 100644 index c9dc0cd6f246..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/MapError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class MapError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("index", "inner_error"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/MissingArgument.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/MissingArgument.java deleted file mode 100644 index 15bada4edd60..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/MissingArgument.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class MissingArgument extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("argument_name", "function_name", "call_location", "message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ModuleDoesNotExist.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ModuleDoesNotExist.java deleted file mode 100644 index 4ee4315782b1..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ModuleDoesNotExist.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class ModuleDoesNotExist extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("name"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ModuleNotInPackageError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ModuleNotInPackageError.java deleted file mode 100644 index 67dabd6ab4b4..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ModuleNotInPackageError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class ModuleNotInPackageError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of(); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoConversionCurrying.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoConversionCurrying.java deleted file mode 100644 index ad2f2af2face..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoConversionCurrying.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class NoConversionCurrying extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("has_this", "has_that", "conversion"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchArgument.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchArgument.java deleted file mode 100644 index a7c190ad33c3..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchArgument.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class NoSuchArgument extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("argument_name"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchConversion.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchConversion.java deleted file mode 100644 index 9a662cf9177d..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchConversion.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class NoSuchConversion extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("target", "that", "conversion"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchField.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchField.java deleted file mode 100644 index 511d9a93c6fc..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchField.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class NoSuchField extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("value", "field_name"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchMethod.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchMethod.java deleted file mode 100644 index 15a4f881378b..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoSuchMethod.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class NoSuchMethod extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("target", "symbol"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoWrap.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoWrap.java deleted file mode 100644 index 2b9d26a978cf..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NoWrap.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType(name = "Standard.Base.Data.Vector.No_Wrap") -public class NoWrap extends UniquelyConstructibleBuiltin { - - @Override - protected String getConstructorName() { - return "Value"; - } - - @Override - protected List getConstructorParamNames() { - return List.of(); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NotInvokable.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NotInvokable.java deleted file mode 100644 index 3abd8d23a898..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/NotInvokable.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class NotInvokable extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("target", "cause"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/PrivateAccess.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/PrivateAccess.java deleted file mode 100644 index c3a794c4c934..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/PrivateAccess.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public final class PrivateAccess extends UniquelyConstructibleBuiltin { - - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("this_project_name", "target_project_name", "target_method_name", "msg"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/SyntaxError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/SyntaxError.java deleted file mode 100644 index f4acfd0b2c12..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/SyntaxError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class SyntaxError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ThrowPanicNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ThrowPanicNode.java index 17d2cc4d71e9..c82644e361e8 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ThrowPanicNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/ThrowPanicNode.java @@ -34,7 +34,7 @@ EnsoContext getContext() { @Specialization( guards = { - "payload.getConstructor().getType() == getContext().getBuiltins().caughtPanic().getType()" + "payload.getConstructor().getType() == getContext().getBuiltins().error().caughtPanic()" }) Object doCaughtPanic( VirtualFrame frame, diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/TypeError.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/TypeError.java deleted file mode 100644 index 54c84a6ac19a..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/TypeError.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class TypeError extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("expected", "actual", "comment"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/Unimplemented.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/Unimplemented.java deleted file mode 100644 index dc17b863c675..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/Unimplemented.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class Unimplemented extends UniquelyConstructibleBuiltin { - - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/UninitializedState.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/UninitializedState.java deleted file mode 100644 index 80e3ff28d2f8..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/UninitializedState.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class UninitializedState extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("key"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/UnsupportedArgumentTypes.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/UnsupportedArgumentTypes.java deleted file mode 100644 index 42ae098138d3..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/UnsupportedArgumentTypes.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error; - -import java.util.List; -import org.enso.interpreter.dsl.BuiltinType; -import org.enso.interpreter.node.expression.builtin.UniquelyConstructibleBuiltin; - -@BuiltinType -public class UnsupportedArgumentTypes extends UniquelyConstructibleBuiltin { - @Override - protected String getConstructorName() { - return "Error"; - } - - @Override - protected List getConstructorParamNames() { - return List.of("arguments", "message"); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/displaytext/InvalidConversionTargetToDisplayTextNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/displaytext/InvalidConversionTargetToDisplayTextNode.java deleted file mode 100644 index d8f1e65bd0d5..000000000000 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/error/displaytext/InvalidConversionTargetToDisplayTextNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.enso.interpreter.node.expression.builtin.error.displaytext; - -import com.oracle.truffle.api.dsl.Cached; -import com.oracle.truffle.api.dsl.Specialization; -import com.oracle.truffle.api.interop.InteropLibrary; -import com.oracle.truffle.api.interop.UnsupportedMessageException; -import com.oracle.truffle.api.library.CachedLibrary; -import com.oracle.truffle.api.nodes.Node; -import org.enso.compiler.core.ConstantsNames; -import org.enso.interpreter.dsl.BuiltinMethod; -import org.enso.interpreter.node.expression.builtin.text.util.TypeToDisplayTextNode; -import org.enso.interpreter.runtime.data.atom.Atom; -import org.enso.interpreter.runtime.data.atom.AtomConstructor; -import org.enso.interpreter.runtime.data.atom.StructsLibrary; -import org.enso.interpreter.runtime.data.text.Text; - -@BuiltinMethod(type = "Invalid_Conversion_Target", name = ConstantsNames.TO_DISPLAY_TEXT) -public abstract class InvalidConversionTargetToDisplayTextNode extends Node { - static InvalidConversionTargetToDisplayTextNode build() { - return InvalidConversionTargetToDisplayTextNodeGen.create(); - } - - abstract Text execute(Object self); - - @Specialization - Text doAtom( - Atom self, - @CachedLibrary(limit = "10") InteropLibrary interopLibrary, - @CachedLibrary(limit = "3") StructsLibrary structs, - @Cached TypeToDisplayTextNode fallback) { - String fieldRep; - Object target = structs.getField(self, 0); - try { - fieldRep = interopLibrary.asString(interopLibrary.toDisplayString(target)); - } catch (UnsupportedMessageException e) { - fieldRep = fallback.execute(target); - } - return Text.create(fieldRep).add(" is not a valid conversion target. Expected a type."); - } - - @Specialization - Text doConstructor(AtomConstructor self) { - return Text.create("Invalid conversion target type."); - } -} diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/ThreadExecutors.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/ThreadExecutors.java index 4d332d3e6b93..d00b3fc5f0f3 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/ThreadExecutors.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/ThreadExecutors.java @@ -3,6 +3,7 @@ import com.oracle.truffle.api.ThreadLocalAction; import com.oracle.truffle.api.TruffleLanguage.Env; import com.oracle.truffle.api.TruffleLogger; +import java.time.Duration; import java.util.Collections; import java.util.Map; import java.util.WeakHashMap; @@ -53,10 +54,14 @@ public void shutdown() { synchronized (threads) { for (var t : threads.keySet()) { try { - t.join(); + // wait for threads, but don't deadlock + if (t.join(Duration.ofSeconds(10))) { + continue; + } } catch (InterruptedException ex) { - logger.log(Level.WARNING, "Cannot shutdown {0} thread", t.getName()); + logger.log(Level.FINEST, null, ex); } + logger.log(Level.WARNING, "Cannot shutdown {0} thread", t.getName()); } } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/TruffleCompilerContext.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/TruffleCompilerContext.java index 204f15135615..f5ce0776c125 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/TruffleCompilerContext.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/TruffleCompilerContext.java @@ -261,11 +261,16 @@ private static void generateStubs( TruffleCompilerModuleScopeBuilder compilerScope = scope.toCompilerBuilder(); types.foreach( tp -> { + Type registerConstructorsTo = null; if (tp.builtinType()) { Builtin builtinType = builtins.getBuiltinType(tp.name()); if (builtinType == null) { throw new CompilerError("Unknown @Builtin_Type " + tp.name()); } + var rtp = builtinType.getType(); + if (tp.toString().contains("Missing_Argument")) { + registerConstructorsTo = rtp; + } Set tpNames = tp.members().map(c -> c.name()).toSet(); Set exNames = ScalaConversions.set(builtinType.getConstructors()) @@ -275,8 +280,8 @@ private static void generateStubs( throw new CompilerError( "Wrong constructors declared in the builtin " + tp.name() + "."); } - scope.registerType(builtinType.getType()); - builtinType.getType().setShadowDefinitions(builtins.getLanguage(), compilerScope, true); + scope.registerType(rtp); + rtp.setShadowDefinitions(builtins.getLanguage(), compilerScope, true); } else { boolean hasAllConstructorsPrivate = tp.isPrivate() @@ -293,11 +298,14 @@ private static void generateStubs( hasAllConstructorsPrivate) : Type.createSingleton( tp.name(), compilerScope, builtins.any(), false, hasAllConstructorsPrivate); - Type rtp = scope.registerType(createdType); + registerConstructorsTo = scope.registerType(createdType); + } + if (registerConstructorsTo != null) { + var rtp = registerConstructorsTo; tp.members() .foreach( cons -> { - AtomConstructor constructor = + var constructor = new AtomConstructor(cons.name(), scope.getModule(), rtp, false); rtp.registerConstructor(constructor); return null; diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Builtins.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Builtins.java index af9102052c97..1b837cd70375 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Builtins.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Builtins.java @@ -16,9 +16,6 @@ import org.enso.interpreter.node.expression.builtin.Nothing; import org.enso.interpreter.node.expression.builtin.Polyglot; import org.enso.interpreter.node.expression.builtin.debug.Debug; -import org.enso.interpreter.node.expression.builtin.error.AdditionalWarnings; -import org.enso.interpreter.node.expression.builtin.error.CaughtPanic; -import org.enso.interpreter.node.expression.builtin.error.NoWrap; import org.enso.interpreter.node.expression.builtin.error.ProblemBehavior; import org.enso.interpreter.node.expression.builtin.error.Warning; import org.enso.interpreter.node.expression.builtin.immutable.Vector; @@ -35,6 +32,7 @@ import org.enso.interpreter.runtime.Module; import org.enso.interpreter.runtime.ModuleScopeBuilder; import org.enso.interpreter.runtime.data.Type; +import org.enso.interpreter.runtime.data.atom.AtomConstructor; import org.enso.pkg.QualifiedName; /** Container class for static predefined atoms, methods, and their containing scope. */ @@ -80,9 +78,7 @@ public final class Builtins { private final Builtin timeOfDay; private final Builtin timeZone; private final Builtin warning; - private final NoWrap noWrap; private final ProblemBehavior problemBehavior; - private final AdditionalWarnings additionalWarnings; private final Builtin instrumentor; /** Factory method to create the builtins. */ @@ -136,9 +132,7 @@ private Builtins(EnsoContext ctx, ModuleScopeBuilder sb) { timeOfDay = getBuiltinType(org.enso.interpreter.node.expression.builtin.date.TimeOfDay.class); timeZone = getBuiltinType(org.enso.interpreter.node.expression.builtin.date.TimeZone.class); warning = getBuiltinType(Warning.class); - noWrap = getBuiltinType(NoWrap.class); problemBehavior = getBuiltinType(ProblemBehavior.class); - additionalWarnings = getBuiltinType(AdditionalWarnings.class); instrumentor = getBuiltinType(org.enso.interpreter.node.expression.builtin.Instrumentor.class); error = new Error(this, ctx); @@ -319,14 +313,14 @@ public ProblemBehavior problemBehavior() { return problemBehavior; } - /** Returns the {@code No_Wrap} atom constructor. */ - public NoWrap noWrap() { - return noWrap; - } - - /** Returns the {@code Additional_Warnings} atom constructor. */ - public AdditionalWarnings additionalWarnings() { - return additionalWarnings; + /** + * Checks whether given atom represents {@code Vector.No_Wrap}. + * + * @param c constructor + * @return true if it is an constructor of that type, false otherwise + */ + public boolean isNoWrapBuiltin(AtomConstructor c) { + return error().isNoWrapBuiltin(c); } /** @@ -427,13 +421,6 @@ public Type polyglot() { return polyglot.getType(); } - /** - * @return the {@code Caught_Panic} atom constructor - */ - public CaughtPanic caughtPanic() { - return this.error.caughtPanic(); - } - /** * @return the {@code Panic} atom constructor */ diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Error.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Error.java index e2938641a190..f8c573a93cca 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Error.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/builtin/Error.java @@ -3,41 +3,15 @@ import static com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate; import com.oracle.truffle.api.CompilerDirectives; -import org.enso.interpreter.node.expression.builtin.error.ArithmeticError; -import org.enso.interpreter.node.expression.builtin.error.ArityError; -import org.enso.interpreter.node.expression.builtin.error.AssertionError; -import org.enso.interpreter.node.expression.builtin.error.CaughtPanic; -import org.enso.interpreter.node.expression.builtin.error.CompileError; -import org.enso.interpreter.node.expression.builtin.error.ForbiddenOperation; -import org.enso.interpreter.node.expression.builtin.error.IncomparableValues; -import org.enso.interpreter.node.expression.builtin.error.IndexOutOfBounds; -import org.enso.interpreter.node.expression.builtin.error.InexhaustivePatternMatch; -import org.enso.interpreter.node.expression.builtin.error.InvalidArrayIndex; -import org.enso.interpreter.node.expression.builtin.error.InvalidConversionTarget; -import org.enso.interpreter.node.expression.builtin.error.MapError; -import org.enso.interpreter.node.expression.builtin.error.MissingArgument; -import org.enso.interpreter.node.expression.builtin.error.ModuleDoesNotExist; -import org.enso.interpreter.node.expression.builtin.error.ModuleNotInPackageError; -import org.enso.interpreter.node.expression.builtin.error.NoConversionCurrying; -import org.enso.interpreter.node.expression.builtin.error.NoSuchArgument; -import org.enso.interpreter.node.expression.builtin.error.NoSuchConversion; -import org.enso.interpreter.node.expression.builtin.error.NoSuchField; -import org.enso.interpreter.node.expression.builtin.error.NoSuchMethod; -import org.enso.interpreter.node.expression.builtin.error.NotInvokable; -import org.enso.interpreter.node.expression.builtin.error.NumberParseError; -import org.enso.interpreter.node.expression.builtin.error.Panic; -import org.enso.interpreter.node.expression.builtin.error.PrivateAccess; -import org.enso.interpreter.node.expression.builtin.error.SyntaxError; -import org.enso.interpreter.node.expression.builtin.error.TypeError; -import org.enso.interpreter.node.expression.builtin.error.Unimplemented; -import org.enso.interpreter.node.expression.builtin.error.UninitializedState; -import org.enso.interpreter.node.expression.builtin.error.UnsupportedArgumentTypes; +import com.oracle.truffle.api.exception.AbstractTruffleException; +import org.enso.editions.LibraryName; import org.enso.interpreter.runtime.EnsoContext; import org.enso.interpreter.runtime.callable.UnresolvedConversion; import org.enso.interpreter.runtime.callable.UnresolvedSymbol; import org.enso.interpreter.runtime.data.EnsoObject; import org.enso.interpreter.runtime.data.Type; import org.enso.interpreter.runtime.data.atom.Atom; +import org.enso.interpreter.runtime.data.atom.AtomConstructor; import org.enso.interpreter.runtime.data.text.Text; import org.enso.interpreter.runtime.data.vector.ArrayLikeHelpers; import org.enso.interpreter.runtime.error.DataflowError; @@ -45,36 +19,37 @@ /** Container for builtin Error types */ public final class Error { private final EnsoContext context; - private final SyntaxError syntaxError; - private final TypeError typeError; - private final CompileError compileError; - private final AssertionError assertionError; - private final IndexOutOfBounds indexOutOfBounds; - private final InexhaustivePatternMatch inexhaustivePatternMatch; - private final UninitializedState uninitializedState; - private final NoSuchMethod noSuchMethod; - private final NoSuchConversion noSuchConversion; - private final NoConversionCurrying noConversionCurrying; - private final ModuleNotInPackageError moduleNotInPackageError; - private final ArithmeticError arithmeticError; - private final InvalidArrayIndex invalidArrayIndex; - private final ArityError arityError; - private final IncomparableValues incomparableValues; - private final UnsupportedArgumentTypes unsupportedArgumentsError; - private final ModuleDoesNotExist moduleDoesNotExistError; - private final NotInvokable notInvokable; - private final NoSuchArgument noSuchArgument; - private final MissingArgument missingArgument; - private final PrivateAccess privateAccessError; - private final InvalidConversionTarget invalidConversionTarget; - private final NoSuchField noSuchField; - private final NumberParseError numberParseError; - private final Panic panic; - private final CaughtPanic caughtPanic; - private final ForbiddenOperation forbiddenOperation; - private final MapError mapError; - - private final Unimplemented unimplemented; + private final AtomFactory syntaxError; + private final AtomFactory typeError; + private final AtomFactory compileError; + private final AtomFactory assertionError; + private final AtomFactory indexOutOfBounds; + private final AtomFactory inexhaustivePatternMatch; + private final AtomFactory uninitializedState; + private final AtomFactory noSuchMethod; + private final AtomFactory noSuchConversion; + private final AtomFactory noConversionCurrying; + private final AtomFactory moduleNotInPackageError; + private final AtomFactory arithmeticError; + private final AtomFactory invalidArrayIndex; + private final AtomFactory arityError; + private final AtomFactory incomparableValues; + private final AtomFactory unsupportedArgumentsError; + private final AtomFactory moduleDoesNotExistError; + private final AtomFactory notInvokable; + private final AtomFactory noSuchArgument; + private final AtomFactory missingArgument; + private final AtomFactory privateAccessError; + private final AtomFactory invalidConversionTarget; + private final AtomFactory noSuchField; + private final AtomFactory numberParseError; + private final org.enso.interpreter.node.expression.builtin.error.Panic panic; + private final AtomFactory caughtPanic; + private final AtomFactory forbiddenOperation; + private final AtomFactory additionalWarnings; + private final AtomFactory mapError; + private final AtomFactory unimplemented; + private final AtomFactory noWrap; @CompilerDirectives.CompilationFinal private Atom arithmeticErrorShiftTooBig; @@ -86,35 +61,38 @@ public final class Error { /** Creates builders for error Atom Constructors. */ Error(Builtins builtins, EnsoContext context) { this.context = context; - syntaxError = builtins.getBuiltinType(SyntaxError.class); - typeError = builtins.getBuiltinType(TypeError.class); - compileError = builtins.getBuiltinType(CompileError.class); - assertionError = builtins.getBuiltinType(AssertionError.class); - indexOutOfBounds = builtins.getBuiltinType(IndexOutOfBounds.class); - inexhaustivePatternMatch = builtins.getBuiltinType(InexhaustivePatternMatch.class); - uninitializedState = builtins.getBuiltinType(UninitializedState.class); - noSuchMethod = builtins.getBuiltinType(NoSuchMethod.class); - noSuchConversion = builtins.getBuiltinType(NoSuchConversion.class); - noConversionCurrying = builtins.getBuiltinType(NoConversionCurrying.class); - moduleNotInPackageError = builtins.getBuiltinType(ModuleNotInPackageError.class); - arithmeticError = builtins.getBuiltinType(ArithmeticError.class); - invalidArrayIndex = builtins.getBuiltinType(InvalidArrayIndex.class); - arityError = builtins.getBuiltinType(ArityError.class); - incomparableValues = builtins.getBuiltinType(IncomparableValues.class); - unsupportedArgumentsError = builtins.getBuiltinType(UnsupportedArgumentTypes.class); - moduleDoesNotExistError = builtins.getBuiltinType(ModuleDoesNotExist.class); - notInvokable = builtins.getBuiltinType(NotInvokable.class); - noSuchArgument = builtins.getBuiltinType(NoSuchArgument.class); - missingArgument = builtins.getBuiltinType(MissingArgument.class); - privateAccessError = builtins.getBuiltinType(PrivateAccess.class); - invalidConversionTarget = builtins.getBuiltinType(InvalidConversionTarget.class); - noSuchField = builtins.getBuiltinType(NoSuchField.class); - numberParseError = builtins.getBuiltinType(NumberParseError.class); - panic = builtins.getBuiltinType(Panic.class); - caughtPanic = builtins.getBuiltinType(CaughtPanic.class); - forbiddenOperation = builtins.getBuiltinType(ForbiddenOperation.class); - unimplemented = builtins.getBuiltinType(Unimplemented.class); - mapError = builtins.getBuiltinType(MapError.class); + syntaxError = createErrorsCommon("Syntax_Error"); + typeError = createErrorsCommon("Type_Error"); + compileError = createErrorsCommon("Compile_Error"); + assertionError = createErrorsCommon("Assertion_Error"); + indexOutOfBounds = createErrorsCommon("Index_Out_Of_Bounds"); + inexhaustivePatternMatch = createErrorsCommon("Inexhaustive_Pattern_Match"); + uninitializedState = createErrorsCommon("Uninitialized_State"); + noSuchMethod = createErrorsCommon("No_Such_Method"); + noSuchConversion = createErrorsCommon("No_Such_Conversion"); + noConversionCurrying = createErrorsCommon("No_Conversion_Currying"); + moduleNotInPackageError = createErrorsCommon("Module_Not_In_Package_Error"); + arithmeticError = createErrorsCommon("Arithmetic_Error"); + invalidArrayIndex = createErrorsCommon("Invalid_Array_Index"); + arityError = createErrorsCommon("Arity_Error"); + incomparableValues = createErrorsCommon("Incomparable_Values"); + unsupportedArgumentsError = createErrorsCommon("Unsupported_Argument_Types"); + moduleDoesNotExistError = createErrorsCommon("Module_Does_Not_Exist"); + notInvokable = createErrorsCommon("Not_Invokable"); + noSuchArgument = createErrorsCommon("No_Such_Argument"); + missingArgument = createErrorsCommon("Missing_Argument"); + privateAccessError = createErrorsCommon("Private_Access"); + invalidConversionTarget = createErrorsCommon("Invalid_Conversion_Target"); + noSuchField = createErrorsCommon("No_Such_Field"); + panic = builtins.getBuiltinType(org.enso.interpreter.node.expression.builtin.error.Panic.class); + forbiddenOperation = createErrorsCommon("Forbidden_Operation"); + additionalWarnings = createErrorsCommon("Additional_Warnings"); + + numberParseError = new AtomFactory("Data", "Numbers", "Number_Parse_Error"); + caughtPanic = new AtomFactory("Panic", "Caught_Panic"); + unimplemented = new AtomFactory("Errors", "Unimplemented", "Unimplemented"); + mapError = new AtomFactory("Data", "Vector", "Map_Error"); + noWrap = new AtomFactory("Data", "Vector", "No_Wrap"); } public Atom makeSyntaxError(String message) { @@ -153,8 +131,12 @@ public Type panic() { return panic.getType(); } - public CaughtPanic caughtPanic() { - return caughtPanic; + public Type caughtPanic() { + return caughtPanic.getType(); + } + + public Atom newCaughtPanic(Object payload, AbstractTruffleException originalException) { + return caughtPanic.newInstance(payload, originalException); } /** @@ -168,8 +150,8 @@ public Atom makeNoSuchMethod(Object target, UnresolvedSymbol symbol) { return noSuchMethod.newInstance(target, symbol); } - public NoSuchField getNoSuchFieldError() { - return noSuchField; + public Atom makeNoSuchFieldError(Atom atom, Text name) { + return noSuchField.newInstance(atom, name); } public Atom makeNoSuchConversion(Object target, Object that, UnresolvedConversion conversion) { @@ -280,10 +262,6 @@ public Atom makeInvalidArrayIndex(Object array, Object index) { return invalidArrayIndex.newInstance(array, index); } - public InvalidArrayIndex getInvalidArrayIndex() { - return invalidArrayIndex; - } - /** * @param expected_min the minimum expected arity * @param expected_max the maximum expected arity @@ -378,10 +356,6 @@ public Atom makePrivateAccessError( thisProjName, targetProjName, Text.create(targetMethodName), msgOrNothing); } - public ForbiddenOperation getForbiddenOperation() { - return forbiddenOperation; - } - public Atom makeUnimplemented(String operation) { return unimplemented.newInstance(operation); } @@ -410,4 +384,62 @@ public DataflowError makeMissingPolyglotImportError(String className) { var err = makeCompileError(msg); return DataflowError.withDefaultTrace(err, null); } + + public Atom makeAdditionalWarnings(long cnt) { + return additionalWarnings.newInstance(cnt); + } + + final boolean isNoWrapBuiltin(AtomConstructor cons) { + return noWrap.getUniqueConstructor() == cons; + } + + private AtomFactory createErrorsCommon(String typeName) { + return new AtomFactory("Errors", "Common", typeName); + } + + private final class AtomFactory { + private final String[] shortFqn; + private AtomConstructor uniqueAtomConstructor; + + private AtomFactory(String... shortFqn) { + this.shortFqn = shortFqn; + } + + final Atom newInstance(Object... args) { + return org.enso.interpreter.runtime.data.atom.AtomNewInstanceNode.getUncached() + .newInstance(getUniqueConstructor(), args); + } + + final Type getType() { + return getUniqueConstructor().getType(); + } + + final AtomConstructor getUniqueConstructor() { + if (uniqueAtomConstructor == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + var sb = new StringBuilder(); + sb.append("Standard.Base"); + var last = shortFqn.length - 1; + for (var i = 0; i < last; i++) { + var segment = shortFqn[i]; + sb.append(".").append(segment); + } + var moduleOpt = context.getTopScope().getModule(sb.toString()); + if (moduleOpt.isEmpty()) { + var stdBase = LibraryName.apply("Standard", "Base"); + context.getPackageRepository().ensurePackageIsLoaded(stdBase); + moduleOpt = context.getTopScope().getModule(sb.toString()); + } + assert moduleOpt.isPresent() : sb.toString(); + var module = moduleOpt.get(); + var scope = module.compileScope(context); + var type = scope.getType(shortFqn[last], true); + assert type != null : shortFqn[last] + " in " + sb; + assert type.getConstructors().size() == 1 + : "Only one constructor available: " + type.getConstructors(); + uniqueAtomConstructor = type.getConstructors().values().iterator().next(); + } + return uniqueAtomConstructor; + } + } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/atom/GetFieldBaseNode.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/atom/GetFieldBaseNode.java index e5f9b8b397fa..7a0687b78ffc 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/atom/GetFieldBaseNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/atom/GetFieldBaseNode.java @@ -35,11 +35,6 @@ public String getQualifiedName() { protected PanicException noSuchFieldPanic(Atom atom) { var nameText = Text.create(fieldName); return new PanicException( - EnsoContext.get(this) - .getBuiltins() - .error() - .getNoSuchFieldError() - .newInstance(atom, nameText), - this); + EnsoContext.get(this).getBuiltins().error().makeNoSuchFieldError(atom, nameText), this); } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/vector/VectorFromFunctionNode.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/vector/VectorFromFunctionNode.java index 8c26d4499987..adead6235ebf 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/vector/VectorFromFunctionNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/data/vector/VectorFromFunctionNode.java @@ -95,9 +95,8 @@ Object doItCached( } var vector = target.asVector(true); if (errorsEncountered >= MAX_MAP_WARNINGS) { - var additionalWarnsBuiltin = ctx.getBuiltins().additionalWarnings(); long additionalWarnsCnt = errorsEncountered - MAX_MAP_WARNINGS; - var additionalWarns = additionalWarnsBuiltin.newInstance(additionalWarnsCnt); + var additionalWarns = ctx.getBuiltins().error().makeAdditionalWarnings(additionalWarnsCnt); var vecWithAdditionalWarns = Warning.attach(ctx, frame, vector, additionalWarns, null, warnsLib, appendWarningNode); return vecWithAdditionalWarns; @@ -122,14 +121,13 @@ Object unreachable(VirtualFrame frame, long length, Function func, Object onProb protected OnProblems processOnProblemsArg(AtomConstructor onProblems) { var ctx = EnsoContext.get(this); var problemBehaviorBuiltin = ctx.getBuiltins().problemBehavior(); - var noWrapBuiltin = ctx.getBuiltins().noWrap(); if (onProblems == problemBehaviorBuiltin.getIgnore()) { return OnProblems.IGNORE; } else if (onProblems == problemBehaviorBuiltin.getReportError()) { return OnProblems.REPORT_ERROR; } else if (onProblems == problemBehaviorBuiltin.getReportWarning()) { return OnProblems.REPORT_WARNING; - } else if (onProblems == noWrapBuiltin.getUniqueConstructor()) { + } else if (ctx.getBuiltins().isNoWrapBuiltin(onProblems)) { return OnProblems.NO_WRAP; } throw makeTypeError(problemBehaviorBuiltin.getType(), onProblems, "onProblems"); diff --git a/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java b/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java index c914b684906f..bdac8b7bd49b 100644 --- a/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java +++ b/lib/java/test-utils/src/main/java/org/enso/test/utils/ContextUtils.java @@ -571,7 +571,8 @@ private static void log(Description descr) { private static final class FailureWithOutput extends RuntimeException { private FailureWithOutput(String out, Throwable cause) { - super(out, cause); + super(cause.getMessage() + "\n" + out); + setStackTrace(cause.getStackTrace()); } } diff --git a/test/Base_Tests/src/Semantic/Meta_Spec.enso b/test/Base_Tests/src/Semantic/Meta_Spec.enso index aa41f84a8a4a..726b94a2e13f 100644 --- a/test/Base_Tests/src/Semantic/Meta_Spec.enso +++ b/test/Base_Tests/src/Semantic/Meta_Spec.enso @@ -699,7 +699,9 @@ add_specs suite_builder = suite_builder.group "Meta.meta" group_builder-> group_builder.specify "should report private error on synthetic module" <| meta_type = Meta.meta Standard.Base.Network - meta_type.catch . should_equal (Private_Access.Error Nothing Nothing 'meta' 'No Meta.meta for private objects') + payload = meta_type.catch + payload.to_text . should_equal "(Private_Access.Error Nothing Nothing 'meta' 'No Meta.meta for private objects')" + payload.to_display_text . should_equal "No Meta.meta for private objects" group_builder.specify "function with argument" <| plus x by=1 = x+by diff --git a/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso b/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso index 337fb175588d..bebfd7c4d4f2 100644 --- a/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso +++ b/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Common.enso @@ -2,22 +2,20 @@ import project.Any.Any import project.Data.Text.Text import project.Error.Error import project.Meta +import project.Nothing.Nothing polyglot java import java.util.regex.Pattern as Java_Pattern -@Builtin_Type type Syntax_Error Error message to_display_text self = "Syntax error: "+self.message+"." -@Builtin_Type type Arithmetic_Error Error message to_display_text self = "Arithmetic error: "+self.message+"." -@Builtin_Type type Type_Error Error expected actual comment @@ -34,32 +32,27 @@ type Type_Error msg = replace_regex msg_1 "\{got\}" got "Type error: "+msg+"." -@Builtin_Type type Not_Invokable Error target cause to_display_text self = "Type error: expected a function, but got "+self.target.to_display_text+"." -@Builtin_Type type No_Such_Argument Error argument_name to_display_text self = "The named argument `"+self.argument_name.to_text+"` did not match any argument names. Perhaps it is misspelled?" -@Builtin_Type type Compile_Error Error message to_display_text self = "Compile error: "+self.message+"." -@Builtin_Type type Inexhaustive_Pattern_Match Error scrutinee to_display_text self = "Inexhaustive pattern match: no branch matches "+self.scrutinee.to_display_text+"." -@Builtin_Type type No_Such_Method Error target symbol @@ -69,13 +62,11 @@ type No_Such_Method target_type_name = if Meta.is_polyglot self.target then self.target.to_display_text else (Meta.type_of self.target).to_display_text "Method `"+self.method_name+"` of type "+target_type_name+" could not be found." -@Builtin_Type type Module_Not_In_Package_Error Error to_display_text self = "Module is not a part of a package." -@Builtin_Type type Arity_Error Error expected_min expected_max actual @@ -86,12 +77,20 @@ type Arity_Error "Wrong number of arguments. Expected "+expected_range+", but got "+self.actual.to_text+"." -@Builtin_Type type Forbidden_Operation Error message to_display_text self = self.message +type Index_Out_Of_Bounds + Error index length + + to_display_text self = + "The index " + self.index.to_text + " is out of bounds in a collection of length " + self.length.to_text + "." + +type Missing_Argument + Error argument_name function_name=Nothing call_location=Nothing message="Provide a value for the argument `"+argument_name+"`." + to_display_text self = self.message ## --- private: true diff --git a/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso b/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso new file mode 100644 index 000000000000..286daa9b34b6 --- /dev/null +++ b/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Errors/Unimplemented.enso @@ -0,0 +1,8 @@ +import project.Data.Text.Text +import project.Nothing.Nothing +import project.Panic.Panic + +type Unimplemented + Error message + to_display_text self = "An implementation is missing: " + self.message + throw message="" = Panic.throw (Unimplemented.Error message) diff --git a/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso b/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso index 4088ff473170..0e5ed7da260a 100644 --- a/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso +++ b/test/micro-distribution/lib/Standard/Base/0.0.0-dev/src/Panic.enso @@ -6,3 +6,10 @@ type Panic catch panic_type ~action handler = @Builtin_Method "Panic.catch" ## Remove once https://www.pivotaltracker.com/story/show/184054024 is fixed catch_primitive ~action handler = Panic.catch Any action handler + +type Caught_Panic + private Panic internal_payload internal_original_exception + + convert_to_dataflow_error self = @Builtin_Method "Caught_Panic.convert_to_dataflow_error" + stack_trace self = Panic.get_attached_stack_trace self + payload self = self.internal_payload