@@ -280,10 +280,10 @@ private List<InlineFieldData> createInlineFields(boolean pruneInternalClasses) {
280
280
List <InlineFieldData > fields = new ArrayList <>();
281
281
282
282
for (BitSet bitSet : state .activeState .getSets ()) {
283
- String name = bitSet . getName () + "_" ;
284
- TypeMirror referenceType = types (). InlineSupport_StateField ;
285
- CodeVariableElement var = MultiStateBitSet . createCachedField ( bitSet );
286
- fields . add ( new InlineFieldData ( var , name , referenceType , bitSet . getBitCount (), null , 0 ));
283
+ CodeVariableElement var = createStateField ( bitSet ) ;
284
+ if ( var != null ) {
285
+ fields . add ( new InlineFieldData ( var , var . getName (), types . InlineSupport_StateField , bitSet . getBitCount (), null , 0 ) );
286
+ }
287
287
}
288
288
289
289
/*
@@ -465,10 +465,10 @@ BitStateList computeNodeState() {
465
465
}
466
466
}
467
467
468
- return new BitStateList (stateObjects );
468
+ return new BitStateList (this , stateObjects );
469
469
}
470
470
471
- private static BitStateList computeSpecializationState (SpecializationData specialization ) {
471
+ private BitStateList computeSpecializationState (SpecializationData specialization ) {
472
472
List <State <?>> stateObjects = new ArrayList <>();
473
473
if (useSpecializationClass (specialization )) {
474
474
@@ -498,7 +498,7 @@ private static BitStateList computeSpecializationState(SpecializationData specia
498
498
}
499
499
}
500
500
}
501
- return new BitStateList (stateObjects );
501
+ return new BitStateList (this , stateObjects );
502
502
}
503
503
504
504
@ SuppressWarnings ("hiding" )
@@ -6742,15 +6742,15 @@ private CodeTree createInsertNode(FrameState frameState, SpecializationData spec
6742
6742
return value ;
6743
6743
}
6744
6744
6745
- private static CodeTree createNodeAccess (FrameState frameState , SpecializationData specialization ) {
6745
+ private CodeTree createNodeAccess (FrameState frameState , SpecializationData specialization ) {
6746
6746
if (specialization != null && substituteNodeWithSpecializationClass (specialization ) && !frameState .getMode ().isUncached ()) {
6747
6747
return singleString (createSpecializationLocalName (specialization ));
6748
6748
} else {
6749
6749
return createNodeAccess (frameState );
6750
6750
}
6751
6751
}
6752
6752
6753
- private static CodeTree createNodeAccess (FrameState frameState ) {
6753
+ CodeTree createNodeAccess (FrameState frameState ) {
6754
6754
if (frameState .isInlinedNode ()) {
6755
6755
return frameState .getValue (INLINED_NODE_INDEX ).createReference ();
6756
6756
} else {
@@ -7336,8 +7336,7 @@ private CodeTree createCacheAccess(FrameState frameState, SpecializationData spe
7336
7336
if (useCacheClass (specialization , cache )) {
7337
7337
builder .string (".delegate" );
7338
7338
}
7339
- CodeTree nodeAccess = createNodeAccess (frameState );
7340
- return createInlinedAccess (frameState , specialization , builder .build (), value , nodeAccess );
7339
+ return createInlinedAccess (frameState , specialization , builder .build (), value );
7341
7340
}
7342
7341
} else {
7343
7342
String cacheFieldName = createLocalCachedInlinedName (specialization , cache );
@@ -7489,14 +7488,15 @@ private CodeVariableElement lookupEnumConstants(TypeMirror mirror) {
7489
7488
}
7490
7489
7491
7490
@ SuppressWarnings ("unused" )
7492
- static CodeTree createInlinedAccess (FrameState frameState , SpecializationData specialization , CodeTree reference , CodeTree value , CodeTree nodeReference ) {
7491
+ CodeTree createInlinedAccess (FrameState frameState , SpecializationData specialization , CodeTree reference , CodeTree value ) {
7493
7492
CodeTreeBuilder builder = CodeTreeBuilder .createBuilder ();
7494
7493
builder .tree (reference );
7495
- if (frameState != null && frameState .isInlinedNode ()) {
7494
+ if (frameState .isInlinedNode ()) {
7495
+ CodeTree nodeAccess = createNodeAccess (frameState , specialization );
7496
7496
if (value == null ) {
7497
- builder .startCall (".get" ).tree (nodeReference ).end ();
7497
+ builder .startCall (".get" ).tree (nodeAccess ).end ();
7498
7498
} else {
7499
- builder .startCall (".set" ).tree (nodeReference ).tree (value ).end ();
7499
+ builder .startCall (".set" ).tree (nodeAccess ).tree (value ).end ();
7500
7500
}
7501
7501
} else {
7502
7502
if (value != null ) {
@@ -7506,10 +7506,6 @@ static CodeTree createInlinedAccess(FrameState frameState, SpecializationData sp
7506
7506
return builder .build ();
7507
7507
}
7508
7508
7509
- static CodeTree createInlinedAccess (FrameState frameState , SpecializationData specialization , CodeTree reference , CodeTree value ) {
7510
- return createInlinedAccess (frameState , specialization , reference , value , createNodeAccess (frameState , specialization ));
7511
- }
7512
-
7513
7509
private CodeTree createAssumptionReference (FrameState frameState , SpecializationData s , AssumptionExpression a ) {
7514
7510
String assumptionFieldName = createAssumptionFieldName (s , a );
7515
7511
return createSpecializationFieldAccess (frameState , s , true , true , assumptionFieldName , null );
@@ -7846,26 +7842,12 @@ int getAllCapacity() {
7846
7842
List <CodeVariableElement > createCachedFields () {
7847
7843
List <CodeVariableElement > variables = new ArrayList <>();
7848
7844
for (BitSet bitSet : all ) {
7849
- variables .add (createCachedField (bitSet ));
7850
- }
7851
- return variables ;
7852
- }
7853
-
7854
- static CodeVariableElement createCachedField (BitSet bitSet ) {
7855
- CodeVariableElement var = FlatNodeGenFactory .createNodeField (PRIVATE , bitSet .getType (), bitSet .getName () + "_" ,
7856
- ProcessorContext .getInstance ().getTypes ().CompilerDirectives_CompilationFinal );
7857
- CodeTreeBuilder docBuilder = var .createDocBuilder ();
7858
-
7859
- for (BitRangedState state : bitSet .getStates ().getEntries ()) {
7860
- if (state .state .isInlined ()) {
7861
- GeneratorUtils .markUnsafeAccessed (var );
7845
+ CodeVariableElement v = bitSet .createField ();
7846
+ if (v != null ) {
7847
+ variables .add (v );
7862
7848
}
7863
7849
}
7864
-
7865
- docBuilder .startJavadoc ();
7866
- FlatNodeGenFactory .addStateDoc (docBuilder , bitSet );
7867
- docBuilder .end ();
7868
- return var ;
7850
+ return variables ;
7869
7851
}
7870
7852
7871
7853
void addParametersTo (FrameState frameState , CodeExecutableElement targetMethod ) {
@@ -8472,4 +8454,52 @@ public void loadQuickeningStateBitSets(CodeTreeBuilder b, FrameState frameState,
8472
8454
}
8473
8455
}
8474
8456
8457
+ CodeVariableElement createStateField (BitSet bitSet ) {
8458
+ CodeVariableElement var = plugs .createStateField (this , bitSet );
8459
+ if (var == null ) {
8460
+ return null ;
8461
+ }
8462
+ CodeTreeBuilder docBuilder = var .createDocBuilder ();
8463
+ for (BitRangedState s : bitSet .getStates ().getEntries ()) {
8464
+ if (s .state .isInlined ()) {
8465
+ GeneratorUtils .markUnsafeAccessed (var );
8466
+ }
8467
+ }
8468
+ docBuilder .startJavadoc ();
8469
+ FlatNodeGenFactory .addStateDoc (docBuilder , bitSet );
8470
+ docBuilder .end ();
8471
+ return var ;
8472
+ }
8473
+
8474
+ CodeTree createStatePersist (FrameState frameState , BitSet bitSet , CodeTree updateReference , CodeTree value ) {
8475
+ CodeTreeBuilder b = CodeTreeBuilder .createBuilder ();
8476
+ b .startStatement ();
8477
+ CodeTreeBuilder valueBuilder = CodeTreeBuilder .createBuilder ();
8478
+ if (updateReference != null ) {
8479
+ valueBuilder .tree (updateReference ).string (" = " );
8480
+ }
8481
+ valueBuilder .tree (value );
8482
+ CodeTree valueTree = valueBuilder .build ();
8483
+ b .tree (plugs .createStatePersist (this , frameState , bitSet , valueTree ));
8484
+ b .end (); // statement
8485
+ return b .build ();
8486
+ }
8487
+
8488
+ CodeTree createStateLoad (FrameState frameState , BitSet bitSet ) {
8489
+ String localName = bitSet .getName ();
8490
+ CodeTree inlinedAccess = plugs .createStateLoad (this , frameState , bitSet );
8491
+ LocalVariable var = frameState .get (localName );
8492
+ if (var == null ) {
8493
+ var = new LocalVariable (bitSet .getType (), localName , null );
8494
+ frameState .set (localName , var );
8495
+ return var .createDeclaration (inlinedAccess );
8496
+ } else {
8497
+ CodeTreeBuilder b = CodeTreeBuilder .createBuilder ();
8498
+ b .startStatement ();
8499
+ b .string (bitSet .getName ()).string (" = " ).tree (inlinedAccess );
8500
+ b .end ();
8501
+ return b .build ();
8502
+ }
8503
+ }
8504
+
8475
8505
}
0 commit comments