From c6dd563766b0beba680839adfff6015811cf486b Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Thu, 25 May 2023 15:56:23 +0200 Subject: [PATCH 1/4] Append warnings extracted before tail call execution Throwing `TailCallException` meant that exceptions that were extracted from the expression before the call was made could not be appended. This change catches the `TailCallException`, adds warnings to it and propagates it further, thus ensuring that we don't loose the information. Closes #6765. --- .../node/callable/InvokeMethodNode.java | 9 ++++-- .../node/callable/dispatch/CurryNode.java | 3 +- .../dispatch/LoopingCallOptimiserNode.java | 14 +++++++++- .../dispatch/SimpleCallOptimiserNode.java | 11 ++++++-- .../runtime/control/TailCallException.java | 28 +++++++++++++++++++ test/Tests/src/Semantic/Warnings_Spec.enso | 18 ++++++++++++ 6 files changed, 77 insertions(+), 6 deletions(-) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java index 7949001e7852..785fe816ff41 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java @@ -27,6 +27,7 @@ import org.enso.interpreter.runtime.callable.argument.CallArgumentInfo; import org.enso.interpreter.runtime.callable.function.Function; import org.enso.interpreter.runtime.callable.function.FunctionSchema; +import org.enso.interpreter.runtime.control.TailCallException; import org.enso.interpreter.runtime.data.ArrayRope; import org.enso.interpreter.runtime.data.EnsoDate; import org.enso.interpreter.runtime.data.EnsoDateTime; @@ -339,8 +340,12 @@ Object doWarning( arguments[thisArgumentPosition] = selfWithoutWarnings; - Object result = childDispatch.execute(frame, state, symbol, selfWithoutWarnings, arguments); - return WithWarnings.appendTo(EnsoContext.get(this), result, arrOfWarnings); + try { + Object result = childDispatch.execute(frame, state, symbol, selfWithoutWarnings, arguments); + return WithWarnings.appendTo(EnsoContext.get(this), result, arrOfWarnings); + } catch (TailCallException e) { + throw new TailCallException(e, arrOfWarnings); + } } @ExplodeLoop diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java index 8803831db1c9..0df7b1a6b05c 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java @@ -153,7 +153,8 @@ private Object doCall( VirtualFrame frame, Function function, CallerInfo callerInfo, State state, Object[] arguments) { return switch (getTailStatus()) { case TAIL_DIRECT -> directCall.executeCall(frame, function, callerInfo, state, arguments); - case TAIL_LOOP -> throw new TailCallException(function, callerInfo, arguments); + case TAIL_LOOP -> + throw new TailCallException(function, callerInfo, arguments); default -> loopingCall.executeDispatch(frame, function, callerInfo, state, arguments); }; } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java index b78a94eb3a63..6713340db964 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java @@ -15,9 +15,12 @@ import com.oracle.truffle.api.nodes.RepeatingNode; import org.enso.interpreter.node.callable.ExecuteCallNode; import org.enso.interpreter.node.callable.ExecuteCallNodeGen; +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.control.TailCallException; +import org.enso.interpreter.runtime.error.Warning; +import org.enso.interpreter.runtime.error.WithWarnings; import org.enso.interpreter.runtime.state.State; /** @@ -79,13 +82,22 @@ public Object uncachedDispatch( State state, Object[] arguments, @Cached ExecuteCallNode executeCallNode) { + Warning[] warnings = null; while (true) { try { - return executeCallNode.executeCall(frame, function, callerInfo, state, arguments); + Object result = executeCallNode.executeCall(frame, function, callerInfo, state, arguments); + if (warnings != null) { + return WithWarnings.appendTo(EnsoContext.get(this), result, warnings); + } else { + return result; + } } catch (TailCallException e) { function = e.getFunction(); callerInfo = e.getCallerInfo(); arguments = e.getArguments(); + if (warnings == null) { + warnings = e.getWarnings(); + } } } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java index 877ff2bced9d..f2a942507b78 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java @@ -5,9 +5,11 @@ import com.oracle.truffle.api.nodes.NodeInfo; import org.enso.interpreter.node.callable.ExecuteCallNode; import org.enso.interpreter.node.callable.ExecuteCallNodeGen; +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.control.TailCallException; +import org.enso.interpreter.runtime.error.WithWarnings; import org.enso.interpreter.runtime.state.State; import java.util.concurrent.locks.Lock; @@ -65,8 +67,13 @@ public Object executeDispatch( lock.unlock(); } } - return next.executeDispatch( - frame, e.getFunction(), e.getCallerInfo(), state, e.getArguments()); + Object result = + next.executeDispatch(frame, e.getFunction(), e.getCallerInfo(), state, e.getArguments()); + if (e.getWarnings() != null) { + return WithWarnings.appendTo(EnsoContext.get(this), result, e.getWarnings()); + } else { + return result; + } } } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java index ced3e08028b5..921b730b72a1 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java @@ -3,6 +3,7 @@ import com.oracle.truffle.api.nodes.ControlFlowException; import org.enso.interpreter.runtime.callable.CallerInfo; import org.enso.interpreter.runtime.callable.function.Function; +import org.enso.interpreter.runtime.error.Warning; /** * Used to model the switch of control-flow from standard stack-based execution to looping. @@ -14,6 +15,8 @@ public class TailCallException extends ControlFlowException { private final CallerInfo callerInfo; private final Object[] arguments; + private final Warning[] warnings; + /** * Creates a new exception containing the necessary data to continue computation. * @@ -25,6 +28,21 @@ public TailCallException(Function function, CallerInfo callerInfo, Object[] argu this.function = function; this.callerInfo = callerInfo; this.arguments = arguments; + this.warnings = null; + } + + /** + * Creates a new tail exception from the original one and attach warnings. + * + * @param e the original TailCallException to be propagated + * @param warnings warnings to be associated with the given exception + */ + public TailCallException(TailCallException e, Warning[] warnings) { + assert e.getWarnings() == null; + this.function = e.getFunction(); + this.callerInfo = e.getCallerInfo(); + this.arguments = e.getArguments(); + this.warnings = warnings; } /** @@ -53,4 +71,14 @@ public Object[] getArguments() { public CallerInfo getCallerInfo() { return callerInfo; } + + /** + * Returns warnings that have been extracted before the function was invoked with the given + * arguments. + * + * @return warnings extracted from the expression or null, if none were found + */ + public Warning[] getWarnings() { + return warnings; + } } diff --git a/test/Tests/src/Semantic/Warnings_Spec.enso b/test/Tests/src/Semantic/Warnings_Spec.enso index 252bc9b3b94e..fd52d72289da 100644 --- a/test/Tests/src/Semantic/Warnings_Spec.enso +++ b/test/Tests/src/Semantic/Warnings_Spec.enso @@ -87,6 +87,13 @@ throw_a_bar = Any.is_static_nothing self x = x.is_nothing +do_fold_tail v = + v.fold 0 (+) + +do_fold_non_tail v = + res = v.fold 0 (+) + res + spec = Test.group "Dataflow Warnings" <| Test.specify "should allow to attach multiple warnings and read them back" <| x = 1233 @@ -419,4 +426,15 @@ spec = Test.group "Dataflow Warnings" <| Warning.get_all vec_2 . length . should_equal 31 Warning.limit_reached vec_2 . should_equal False + Test.specify "should preserve warnings in tail calls" <| + v = Warning.attach "Foo" [1, 2, 3] + + result_tail = do_fold_tail v + result_tail . should_equal 6 + Warning.get_all result_tail . map .value . should_equal ["Foo"] + + result_non_tail = do_fold_non_tail v + result_non_tail . should_equal 6 + Warning.get_all result_non_tail . map .value . should_equal ["Foo"] + main = Test_Suite.run_main spec From cf7cf2af6bd1f21ac689a2ac5c05c6cfc99dc560 Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Thu, 25 May 2023 16:09:12 +0200 Subject: [PATCH 2/4] Remove workarounds --- .../Standard/Database/0.0.0-dev/src/Data/Table.enso | 10 ++-------- .../lib/Standard/Table/0.0.0-dev/src/Data/Table.enso | 5 +---- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/distribution/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso b/distribution/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso index f9af21172093..3e0f457f573d 100644 --- a/distribution/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso +++ b/distribution/lib/Standard/Database/0.0.0-dev/src/Data/Table.enso @@ -1468,12 +1468,9 @@ type Table parse : Vector (Text | Integer | Column_Selector) | Text | Integer -> Value_Type | Auto -> Text | Data_Formatter | Nothing -> Boolean -> Problem_Behavior -> Table parse self columns=(self.columns . filter (c-> c.value_type.is_text) . map .name) type format=Nothing error_on_missing_columns=True on_problems=Report_Warning = selected = self.columns_helper.resolve_columns columns error_on_missing_columns=error_on_missing_columns on_problems=on_problems - result = selected.fold self table-> column_to_parse-> + selected.fold self table-> column_to_parse-> new_column = column_to_parse.parse type format on_problems table.set new_column new_name=column_to_parse.name set_mode=Set_Mode.Update - ## The temporary variable for result is added due to the #6765 bug. - It should be removed once it is fixed. - result ## Splits a column of text into a set of new columns. The original column will be removed from the table. @@ -1632,12 +1629,9 @@ type Table cast : Vector (Text | Integer | Column_Selector) | Text | Integer -> Value_Type -> Boolean -> Problem_Behavior -> Table ! Illegal_Argument | Inexact_Type_Coercion | Conversion_Failure cast self columns=[0] value_type error_on_missing_columns=True on_problems=Problem_Behavior.Report_Warning = selected = self.columns_helper.resolve_columns columns error_on_missing_columns=error_on_missing_columns on_problems=on_problems - result = selected.fold self table-> column_to_cast-> + selected.fold self table-> column_to_cast-> new_column = column_to_cast.cast value_type on_problems table.set new_column new_name=column_to_cast.name set_mode=Set_Mode.Update - ## The temporary variable for result is added due to the #6765 bug. - It should be removed once it is fixed. - result ## ALIAS dropna ALIAS drop_missing_rows diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Data/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Data/Table.enso index dd3f02627357..da9669f8464c 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Data/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Data/Table.enso @@ -929,12 +929,9 @@ type Table cast : Vector (Text | Integer | Column_Selector) | Text | Integer -> Value_Type -> Boolean -> Problem_Behavior -> Table ! Illegal_Argument | Inexact_Type_Coercion | Conversion_Failure cast self columns=[0] value_type error_on_missing_columns=True on_problems=Problem_Behavior.Report_Warning = selected = self.columns_helper.resolve_columns columns error_on_missing_columns=error_on_missing_columns on_problems=on_problems - result = selected.fold self table-> column_to_cast-> + selected.fold self table-> column_to_cast-> new_column = column_to_cast.cast value_type on_problems table.set new_column new_name=column_to_cast.name set_mode=Set_Mode.Update - ## The temporary variable for result is added due to the #6765 bug. - It should be removed once it is fixed. - result ## Splits a column of text into a set of new columns. The original column will be removed from the table. From 2aa35fcd684af70010231158e201bdee460c1d48 Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Mon, 29 May 2023 12:06:11 +0200 Subject: [PATCH 3/4] Simplify Always dispatch warnings in a non-tail position. Can't use `@Cached` because then the underlying function node is not recorded as the child and won't have its ID changed. --- .../node/callable/InvokeCallableNode.java | 3 +-- .../node/callable/InvokeConversionNode.java | 2 +- .../node/callable/InvokeMethodNode.java | 10 +++---- .../node/callable/dispatch/CurryNode.java | 3 +-- .../dispatch/LoopingCallOptimiserNode.java | 11 +------- .../dispatch/SimpleCallOptimiserNode.java | 9 ++----- .../runtime/control/TailCallException.java | 27 ------------------- 7 files changed, 9 insertions(+), 56 deletions(-) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeCallableNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeCallableNode.java index 4b7d95504b0b..967943b45509 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeCallableNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeCallableNode.java @@ -1,7 +1,6 @@ package org.enso.interpreter.node.callable; import com.oracle.truffle.api.CompilerDirectives; -import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; @@ -278,7 +277,7 @@ public Object invokeWarnings( invokeFunctionNode.getSchema(), invokeFunctionNode.getDefaultsExecutionMode(), invokeFunctionNode.getArgumentsExecutionMode())); - childDispatch.setTailStatus(getTailStatus()); + childDispatch.setTailStatus(TailStatus.NOT_TAIL); childDispatch.setId(invokeFunctionNode.getId()); notifyInserted(childDispatch); } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeConversionNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeConversionNode.java index e0ddccf44f09..86e9056084b4 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeConversionNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeConversionNode.java @@ -163,7 +163,7 @@ Object doWarning( invokeFunctionNode.getDefaultsExecutionMode(), invokeFunctionNode.getArgumentsExecutionMode(), thatArgumentPosition)); - childDispatch.setTailStatus(getTailStatus()); + childDispatch.setTailStatus(TailStatus.NOT_TAIL); childDispatch.setId(invokeFunctionNode.getId()); notifyInserted(childDispatch); } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java index 785fe816ff41..0c0aec3423e0 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java @@ -329,7 +329,7 @@ Object doWarning( invokeFunctionNode.getDefaultsExecutionMode(), invokeFunctionNode.getArgumentsExecutionMode(), thisArgumentPosition)); - childDispatch.setTailStatus(getTailStatus()); + childDispatch.setTailStatus(TailStatus.NOT_TAIL); childDispatch.setId(invokeFunctionNode.getId()); notifyInserted(childDispatch); } @@ -340,12 +340,8 @@ Object doWarning( arguments[thisArgumentPosition] = selfWithoutWarnings; - try { - Object result = childDispatch.execute(frame, state, symbol, selfWithoutWarnings, arguments); - return WithWarnings.appendTo(EnsoContext.get(this), result, arrOfWarnings); - } catch (TailCallException e) { - throw new TailCallException(e, arrOfWarnings); - } + Object result = childDispatch.execute(frame, state, symbol, selfWithoutWarnings, arguments); + return WithWarnings.appendTo(EnsoContext.get(this), result, arrOfWarnings); } @ExplodeLoop diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java index 0df7b1a6b05c..8803831db1c9 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/CurryNode.java @@ -153,8 +153,7 @@ private Object doCall( VirtualFrame frame, Function function, CallerInfo callerInfo, State state, Object[] arguments) { return switch (getTailStatus()) { case TAIL_DIRECT -> directCall.executeCall(frame, function, callerInfo, state, arguments); - case TAIL_LOOP -> - throw new TailCallException(function, callerInfo, arguments); + case TAIL_LOOP -> throw new TailCallException(function, callerInfo, arguments); default -> loopingCall.executeDispatch(frame, function, callerInfo, state, arguments); }; } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java index 6713340db964..4f268b04f3e0 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java @@ -82,22 +82,13 @@ public Object uncachedDispatch( State state, Object[] arguments, @Cached ExecuteCallNode executeCallNode) { - Warning[] warnings = null; while (true) { try { - Object result = executeCallNode.executeCall(frame, function, callerInfo, state, arguments); - if (warnings != null) { - return WithWarnings.appendTo(EnsoContext.get(this), result, warnings); - } else { - return result; - } + return executeCallNode.executeCall(frame, function, callerInfo, state, arguments); } catch (TailCallException e) { function = e.getFunction(); callerInfo = e.getCallerInfo(); arguments = e.getArguments(); - if (warnings == null) { - warnings = e.getWarnings(); - } } } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java index f2a942507b78..53c968dd2670 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java @@ -67,13 +67,8 @@ public Object executeDispatch( lock.unlock(); } } - Object result = - next.executeDispatch(frame, e.getFunction(), e.getCallerInfo(), state, e.getArguments()); - if (e.getWarnings() != null) { - return WithWarnings.appendTo(EnsoContext.get(this), result, e.getWarnings()); - } else { - return result; - } + return next.executeDispatch( + frame, e.getFunction(), e.getCallerInfo(), state, e.getArguments()); } } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java index 921b730b72a1..2ae35b3205ee 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java @@ -15,8 +15,6 @@ public class TailCallException extends ControlFlowException { private final CallerInfo callerInfo; private final Object[] arguments; - private final Warning[] warnings; - /** * Creates a new exception containing the necessary data to continue computation. * @@ -28,21 +26,6 @@ public TailCallException(Function function, CallerInfo callerInfo, Object[] argu this.function = function; this.callerInfo = callerInfo; this.arguments = arguments; - this.warnings = null; - } - - /** - * Creates a new tail exception from the original one and attach warnings. - * - * @param e the original TailCallException to be propagated - * @param warnings warnings to be associated with the given exception - */ - public TailCallException(TailCallException e, Warning[] warnings) { - assert e.getWarnings() == null; - this.function = e.getFunction(); - this.callerInfo = e.getCallerInfo(); - this.arguments = e.getArguments(); - this.warnings = warnings; } /** @@ -71,14 +54,4 @@ public Object[] getArguments() { public CallerInfo getCallerInfo() { return callerInfo; } - - /** - * Returns warnings that have been extracted before the function was invoked with the given - * arguments. - * - * @return warnings extracted from the expression or null, if none were found - */ - public Warning[] getWarnings() { - return warnings; - } } From 5628c711997ae3b0de0eb6f36e5ac4011660b15e Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Mon, 29 May 2023 12:11:17 +0200 Subject: [PATCH 4/4] nits --- .../org/enso/interpreter/node/callable/InvokeMethodNode.java | 1 - .../node/callable/dispatch/LoopingCallOptimiserNode.java | 3 --- .../node/callable/dispatch/SimpleCallOptimiserNode.java | 2 -- .../enso/interpreter/runtime/control/TailCallException.java | 1 - 4 files changed, 7 deletions(-) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java index 0c0aec3423e0..fd209e54b8e2 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/InvokeMethodNode.java @@ -27,7 +27,6 @@ import org.enso.interpreter.runtime.callable.argument.CallArgumentInfo; import org.enso.interpreter.runtime.callable.function.Function; import org.enso.interpreter.runtime.callable.function.FunctionSchema; -import org.enso.interpreter.runtime.control.TailCallException; import org.enso.interpreter.runtime.data.ArrayRope; import org.enso.interpreter.runtime.data.EnsoDate; import org.enso.interpreter.runtime.data.EnsoDateTime; diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java index 4f268b04f3e0..b78a94eb3a63 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/LoopingCallOptimiserNode.java @@ -15,12 +15,9 @@ import com.oracle.truffle.api.nodes.RepeatingNode; import org.enso.interpreter.node.callable.ExecuteCallNode; import org.enso.interpreter.node.callable.ExecuteCallNodeGen; -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.control.TailCallException; -import org.enso.interpreter.runtime.error.Warning; -import org.enso.interpreter.runtime.error.WithWarnings; import org.enso.interpreter.runtime.state.State; /** diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java index 53c968dd2670..877ff2bced9d 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/callable/dispatch/SimpleCallOptimiserNode.java @@ -5,11 +5,9 @@ import com.oracle.truffle.api.nodes.NodeInfo; import org.enso.interpreter.node.callable.ExecuteCallNode; import org.enso.interpreter.node.callable.ExecuteCallNodeGen; -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.control.TailCallException; -import org.enso.interpreter.runtime.error.WithWarnings; import org.enso.interpreter.runtime.state.State; import java.util.concurrent.locks.Lock; diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java index 2ae35b3205ee..ced3e08028b5 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/control/TailCallException.java @@ -3,7 +3,6 @@ import com.oracle.truffle.api.nodes.ControlFlowException; import org.enso.interpreter.runtime.callable.CallerInfo; import org.enso.interpreter.runtime.callable.function.Function; -import org.enso.interpreter.runtime.error.Warning; /** * Used to model the switch of control-flow from standard stack-based execution to looping.