12
12
import com .oracle .truffle .api .nodes .Node ;
13
13
import com .oracle .truffle .api .profiles .ConditionProfile ;
14
14
import org .enso .interpreter .runtime .EnsoContext ;
15
+ import org .enso .interpreter .runtime .data .EnsoObject ;
15
16
import org .enso .interpreter .runtime .data .hash .EnsoHashMap ;
16
17
import org .enso .interpreter .runtime .data .hash .HashMapInsertAllNode ;
17
18
import org .enso .interpreter .runtime .data .hash .HashMapInsertNode ;
18
19
import org .enso .interpreter .runtime .data .hash .HashMapSizeNode ;
19
20
import org .enso .interpreter .runtime .data .vector .ArrayLikeAtNode ;
20
21
import org .enso .interpreter .runtime .data .vector .ArrayLikeLengthNode ;
22
+ import org .enso .interpreter .runtime .error .DataflowError ;
21
23
22
24
@ GenerateUncached
23
25
public abstract class AppendWarningNode extends Node {
@@ -38,9 +40,9 @@ public static AppendWarningNode getUncached() {
38
40
* It is expected that all the elements in the container are of {@link Warning} class.
39
41
* @return A wrapped object with warnings
40
42
*/
41
- public abstract WithWarnings executeAppend (VirtualFrame frame , Object object , Object warnings );
43
+ public abstract EnsoObject executeAppend (VirtualFrame frame , Object object , Object warnings );
42
44
43
- @ Specialization
45
+ @ Specialization ( guards = "!isError(object)" )
44
46
WithWarnings doSingleWarning (
45
47
VirtualFrame frame ,
46
48
Object object ,
@@ -70,7 +72,7 @@ WithWarnings doSingleWarning(
70
72
return new WithWarnings (value , warnsLimit , isLimitReached , warnsMap );
71
73
}
72
74
73
- @ Specialization
75
+ @ Specialization ( guards = "!isError(object)" )
74
76
WithWarnings doMultipleWarningsArray (
75
77
VirtualFrame frame ,
76
78
Object object ,
@@ -106,7 +108,7 @@ WithWarnings doMultipleWarningsArray(
106
108
* This specialization should be the most frequent - just wrapping the given {@code object} with
107
109
* warnings hash map
108
110
*/
109
- @ Specialization (guards = {"!isWithWarns(object)" })
111
+ @ Specialization (guards = {"!isError(object)" , "! isWithWarns(object)" })
110
112
WithWarnings doObjectMultipleWarningsHashMap (
111
113
VirtualFrame frame ,
112
114
Object object ,
@@ -138,7 +140,8 @@ WithWarnings doWithWarnMultipleWarningsHashMap(
138
140
return new WithWarnings (withWarnings .value , withWarnings .maxWarnings , isLimitReached , warnsMap );
139
141
}
140
142
141
- @ Specialization (guards = {"interop.hasArrayElements(warnings)" , "!isWarnArray(warnings)" })
143
+ @ Specialization (
144
+ guards = {"interop.hasArrayElements(warnings)" , "!isError(object)" , "!isWarnArray(warnings)" })
142
145
WithWarnings doMultipleWarningsInterop (
143
146
VirtualFrame frame ,
144
147
Object object ,
@@ -171,6 +174,11 @@ WithWarnings doMultipleWarningsInterop(
171
174
return new WithWarnings (value , warnsLimit , isLimitReached , resWarningMap );
172
175
}
173
176
177
+ @ Specialization (guards = "isError(object)" )
178
+ EnsoObject dontAnnotateError (Object object , Object ignoreWarnings ) {
179
+ return (EnsoObject ) object ;
180
+ }
181
+
174
182
/** Inserts all {@code warnings} to the {@code initialWarningMap}. */
175
183
private EnsoHashMap insertToWarningMap (
176
184
VirtualFrame frame ,
@@ -199,11 +207,15 @@ private EnsoHashMap insertToWarningMap(
199
207
return resWarningMap ;
200
208
}
201
209
202
- protected static boolean isWarnArray (Object obj ) {
210
+ static boolean isWarnArray (Object obj ) {
203
211
return obj instanceof Warning [];
204
212
}
205
213
206
- protected static boolean isWithWarns (Object obj ) {
214
+ static boolean isWithWarns (Object obj ) {
207
215
return obj instanceof WithWarnings ;
208
216
}
217
+
218
+ static boolean isError (Object obj ) {
219
+ return obj instanceof DataflowError ;
220
+ }
209
221
}
0 commit comments