62
62
/**
63
63
* GR-51603 Once this snippet logic reaches a steady-state merge with {@link TypeSnippets}.
64
64
*/
65
- public final class OpenTypeWorldSnippets extends SubstrateTemplates implements Snippets {
65
+ public class OpenTypeWorldSnippets extends SubstrateTemplates implements Snippets {
66
66
67
67
@ Snippet
68
68
protected static SubstrateIntrinsics .Any typeEqualitySnippet (
@@ -156,7 +156,7 @@ protected static SubstrateIntrinsics.Any classIsAssignableFromSnippet(
156
156
}
157
157
158
158
@ DuplicatedInNativeCode
159
- private static SubstrateIntrinsics .Any classTypeCheck (
159
+ protected static SubstrateIntrinsics .Any classTypeCheck (
160
160
int typeID ,
161
161
int typeIDDepth ,
162
162
DynamicHub checkedHub ,
@@ -179,7 +179,7 @@ private static SubstrateIntrinsics.Any classTypeCheck(
179
179
}
180
180
181
181
@ DuplicatedInNativeCode
182
- private static SubstrateIntrinsics .Any interfaceTypeCheck (
182
+ protected static SubstrateIntrinsics .Any interfaceTypeCheck (
183
183
int typeID ,
184
184
DynamicHub checkedHub ,
185
185
SubstrateIntrinsics .Any trueValue ,
@@ -200,27 +200,25 @@ private static SubstrateIntrinsics.Any interfaceTypeCheck(
200
200
return falseValue ;
201
201
}
202
202
203
- @ SuppressWarnings ("unused" )
204
- public static void registerLowerings (OptionValues options , Providers providers , Map <Class <? extends Node >, NodeLoweringProvider <?>> lowerings ) {
205
- new OpenTypeWorldSnippets (options , providers , lowerings );
203
+ public void registerLowerings (Map <Class <? extends Node >, NodeLoweringProvider <?>> lowerings , Providers providers ) {
204
+ lowerings .put (InstanceOfNode .class , new InstanceOfLowering (options , providers ));
205
+ lowerings .put (InstanceOfDynamicNode .class , new InstanceOfDynamicLowering (options , providers ));
206
+ lowerings .put (ClassIsAssignableFromNode .class , new ClassIsAssignableFromLowering (options , providers ));
206
207
}
207
208
208
209
final SnippetTemplate .SnippetInfo instanceOf ;
209
210
final SnippetTemplate .SnippetInfo instanceOfDynamic ;
210
211
final SnippetTemplate .SnippetInfo typeEquality ;
211
212
final SnippetTemplate .SnippetInfo assignableTypeCheck ;
212
213
213
- private OpenTypeWorldSnippets (OptionValues options , Providers providers , Map <Class <? extends Node >, NodeLoweringProvider <?>> lowerings ) {
214
+ @ SuppressWarnings ("this-escape" )
215
+ protected OpenTypeWorldSnippets (OptionValues options , Providers providers ) {
214
216
super (options , providers );
215
217
216
218
this .instanceOf = snippet (providers , OpenTypeWorldSnippets .class , "instanceOfSnippet" );
217
219
this .instanceOfDynamic = snippet (providers , OpenTypeWorldSnippets .class , "instanceOfDynamicSnippet" );
218
220
this .typeEquality = snippet (providers , OpenTypeWorldSnippets .class , "typeEqualitySnippet" );
219
221
this .assignableTypeCheck = snippet (providers , OpenTypeWorldSnippets .class , "classIsAssignableFromSnippet" );
220
-
221
- lowerings .put (InstanceOfNode .class , new InstanceOfLowering (options , providers ));
222
- lowerings .put (InstanceOfDynamicNode .class , new InstanceOfDynamicLowering (options , providers ));
223
- lowerings .put (ClassIsAssignableFromNode .class , new ClassIsAssignableFromLowering (options , providers ));
224
222
}
225
223
226
224
protected class InstanceOfLowering extends InstanceOfSnippetsTemplates implements NodeLoweringProvider <FloatingNode > {
@@ -244,26 +242,30 @@ protected SnippetTemplate.Arguments makeArguments(InstanceOfUsageReplacer replac
244
242
SharedType type = (SharedType ) typeReference .getType ();
245
243
DynamicHub hub = type .getHub ();
246
244
245
+ SnippetTemplate .Arguments args ;
247
246
if (typeReference .isExact ()) {
248
- SnippetTemplate . Arguments args = new SnippetTemplate .Arguments (typeEquality , node .graph ().getGuardsStage (), tool .getLoweringStage ());
247
+ args = new SnippetTemplate .Arguments (typeEquality , node .graph ().getGuardsStage (), tool .getLoweringStage ());
249
248
args .add ("object" , node .getValue ());
250
249
args .add ("trueValue" , replacer .trueValue );
251
250
args .add ("falseValue" , replacer .falseValue );
252
251
args .add ("allowsNull" , node .allowsNull ());
253
252
args .add ("exactType" , hub );
254
- return args ;
255
-
256
253
} else {
257
- assert type .getSingleImplementor () == null : "Canonicalization of InstanceOfNode produces exact type for single implementor" ;
258
- SnippetTemplate .Arguments args = new SnippetTemplate .Arguments (instanceOf , node .graph ().getGuardsStage (), tool .getLoweringStage ());
259
- args .add ("object" , node .getValue ());
260
- args .add ("trueValue" , replacer .trueValue );
261
- args .add ("falseValue" , replacer .falseValue );
262
- args .add ("allowsNull" , node .allowsNull ());
263
- args .add ("typeID" , hub .getTypeID ());
264
- args .add ("typeIDDepth" , hub .getTypeIDDepth ());
265
- return args ;
254
+ args = makeArgumentsForInexactType (replacer , tool , node , type , hub );
266
255
}
256
+ return args ;
257
+ }
258
+
259
+ protected SnippetTemplate .Arguments makeArgumentsForInexactType (InstanceOfUsageReplacer replacer , LoweringTool tool , InstanceOfNode node , SharedType type , DynamicHub hub ) {
260
+ assert type .getSingleImplementor () == null : "Canonicalization of InstanceOfNode produces exact type for single implementor" ;
261
+ SnippetTemplate .Arguments args = new SnippetTemplate .Arguments (instanceOf , node .graph ().getGuardsStage (), tool .getLoweringStage ());
262
+ args .add ("object" , node .getValue ());
263
+ args .add ("trueValue" , replacer .trueValue );
264
+ args .add ("falseValue" , replacer .falseValue );
265
+ args .add ("allowsNull" , node .allowsNull ());
266
+ args .add ("typeID" , hub .getTypeID ());
267
+ args .add ("typeIDDepth" , hub .getTypeIDDepth ());
268
+ return args ;
267
269
}
268
270
}
269
271
0 commit comments