From e6af654e514dda263fa1dd4c2c7c015874b1b67b Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Fri, 7 Feb 2025 09:38:41 +0100 Subject: [PATCH] Let SliceArrayVectorNode handle warnings on its own --- .../node/expression/builtin/BuiltinRootNode.java | 3 +-- .../builtin/immutable/SliceArrayVectorNode.java | 5 +++-- .../interpreter/runtime/warning/AppendWarningNode.java | 4 ++-- .../org/enso/interpreter/runtime/warning/Warning.java | 9 +++++++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java index a9323a97721a..86eaa3997ea7 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java @@ -22,7 +22,6 @@ import org.enso.interpreter.runtime.error.PanicSentinel; import org.enso.interpreter.runtime.warning.AppendWarningNode; import org.enso.interpreter.runtime.warning.WarningsLibrary; -import org.enso.interpreter.runtime.warning.WithWarnings; import org.enso.pkg.QualifiedName; /** Root node for use by all the builtin functions. */ @@ -138,7 +137,7 @@ public final T processArgument( throw sentinel; } if (warnings != null) { - if (value instanceof WithWarnings) { + if (warnings.hasWarnings(value)) { if (mapInsertAllNode == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); this.mapInsertAllNode = insert(HashMapInsertAllNode.build()); diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/immutable/SliceArrayVectorNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/immutable/SliceArrayVectorNode.java index fe6a78558bb0..f1247ae066c5 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/immutable/SliceArrayVectorNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/immutable/SliceArrayVectorNode.java @@ -1,6 +1,7 @@ package org.enso.interpreter.node.expression.builtin.immutable; import com.oracle.truffle.api.nodes.Node; +import org.enso.interpreter.dsl.AcceptsWarning; import org.enso.interpreter.dsl.BuiltinMethod; import org.enso.interpreter.runtime.data.vector.ArrayLikeHelpers; import org.enso.interpreter.runtime.data.vector.ArrayLikeLengthNode; @@ -14,11 +15,11 @@ public final class SliceArrayVectorNode extends Node { private SliceArrayVectorNode() {} - public static SliceArrayVectorNode build() { + static SliceArrayVectorNode build() { return new SliceArrayVectorNode(); } - Object execute(Object vector, long start, long end) { + Object execute(@AcceptsWarning Object vector, long start, long end) { var len = lengthNode.executeLength(vector); return ArrayLikeHelpers.slice(vector, start, end, len); } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/AppendWarningNode.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/AppendWarningNode.java index 92d8c7606a06..849e322033ca 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/AppendWarningNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/AppendWarningNode.java @@ -132,8 +132,8 @@ WithWarnings doWithWarnMultipleWarningsHashMap( return withWarnings; } var maxWarns = withWarnings.maxWarnings; - var warnsMap = withWarnings.warnings; - warnsMap = mapInsertAllNode.executeInsertAll(frame, warnsMap, newWarnsMap, maxWarns); + var warnsMap = + mapInsertAllNode.executeInsertAll(frame, withWarnings.warnings, newWarnsMap, maxWarns); var isLimitReached = mapSizeNode.execute(warnsMap) >= maxWarns; return new WithWarnings(withWarnings.value, withWarnings.maxWarnings, isLimitReached, warnsMap); } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/Warning.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/Warning.java index 14ede3705e1c..e96791077ed1 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/Warning.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/warning/Warning.java @@ -3,11 +3,14 @@ import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; +import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.interop.InteropLibrary; import com.oracle.truffle.api.interop.StopIterationException; import com.oracle.truffle.api.interop.UnsupportedMessageException; +import com.oracle.truffle.api.library.CachedLibrary; import com.oracle.truffle.api.library.ExportLibrary; import com.oracle.truffle.api.library.ExportMessage; +import org.enso.interpreter.dsl.AcceptsWarning; import org.enso.interpreter.dsl.Builtin; import org.enso.interpreter.runtime.EnsoContext; import org.enso.interpreter.runtime.builtin.BuiltinObject; @@ -61,12 +64,14 @@ public static Warning create(EnsoContext ctx, Object payload, Object origin) { @SuppressWarnings("generic-enso-builtin-type") public static Object attach( EnsoContext ctx, - Object value, + VirtualFrame frame, + @AcceptsWarning Object value, Object warning, Object origin, + @CachedLibrary WarningsLibrary warnings, @Cached AppendWarningNode appendWarningNode) { var warn = new Warning(warning, origin, ctx.nextSequenceId()); - return appendWarningNode.executeAppend(null, value, warn); + return appendWarningNode.executeAppend(frame, value, warn); } /** Slow version of {@link #fromMapToArray(EnsoHashMap, InteropLibrary)}. */