Skip to content

Commit e488a1a

Browse files
committed
CoreSymbols need to be stored in the RubyLanguage
* RubySymbol now has language-dependent state through cachedProcs, and ImmutableRubyObject also has language-dependent state (a language object_id and a ValueWrapper).
1 parent b343ff7 commit e488a1a

File tree

17 files changed

+306
-256
lines changed

17 files changed

+306
-256
lines changed

src/main/java/org/truffleruby/RubyLanguage.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.truffleruby.core.rope.RopeCache;
2323
import org.truffleruby.core.string.CoreStrings;
2424
import org.truffleruby.core.string.StringUtils;
25+
import org.truffleruby.core.symbol.CoreSymbols;
2526
import org.truffleruby.core.symbol.RubySymbol;
2627
import org.truffleruby.core.symbol.SymbolTable;
2728
import org.truffleruby.core.thread.RubyThread;
@@ -94,6 +95,7 @@ public class RubyLanguage extends TruffleLanguage<RubyContext> {
9495
@CompilationFinal private volatile Assumption tracingAssumption = tracingCyclicAssumption.getAssumption();
9596

9697
public final CoreStrings coreStrings;
98+
public final CoreSymbols coreSymbols;
9799
public final RopeCache ropeCache;
98100
public final SymbolTable symbolTable;
99101

@@ -103,8 +105,9 @@ public class RubyLanguage extends TruffleLanguage<RubyContext> {
103105

104106
public RubyLanguage() {
105107
coreStrings = new CoreStrings(this);
106-
ropeCache = new RopeCache();
107-
symbolTable = new SymbolTable(ropeCache);
108+
coreSymbols = new CoreSymbols();
109+
ropeCache = new RopeCache(coreSymbols);
110+
symbolTable = new SymbolTable(ropeCache, coreSymbols);
108111
}
109112

110113
@TruffleBoundary

src/main/java/org/truffleruby/cext/IDToSymbolNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import static org.truffleruby.core.symbol.CoreSymbols.idToIndex;
1313

14+
import com.oracle.truffle.api.dsl.CachedLanguage;
1415
import org.truffleruby.RubyContext;
1516
import org.truffleruby.RubyLanguage;
1617
import org.truffleruby.core.string.StringUtils;
@@ -38,10 +39,11 @@ public static IDToSymbolNode create() {
3839

3940
@Specialization(guards = "isStaticSymbol(value)")
4041
protected Object unwrapStaticUncached(long value,
42+
@CachedLanguage RubyLanguage language,
4143
@CachedContext(RubyLanguage.class) RubyContext context,
4244
@Cached BranchProfile errorProfile) {
4345
final int index = idToIndex(value);
44-
final RubySymbol symbol = CoreSymbols.STATIC_SYMBOLS[index];
46+
final RubySymbol symbol = language.coreSymbols.STATIC_SYMBOLS[index];
4547
if (symbol == null) {
4648
errorProfile.enter();
4749
throw new RaiseException(

src/main/java/org/truffleruby/core/cast/SplatCastNode.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
*/
1010
package org.truffleruby.core.cast;
1111

12+
import org.truffleruby.RubyLanguage;
1213
import org.truffleruby.core.array.ArrayDupNode;
1314
import org.truffleruby.core.array.ArrayDupNodeGen;
1415
import org.truffleruby.core.array.ArrayHelpers;
1516
import org.truffleruby.core.array.RubyArray;
16-
import org.truffleruby.core.symbol.CoreSymbols;
1717
import org.truffleruby.core.symbol.RubySymbol;
1818
import org.truffleruby.language.Nil;
1919
import org.truffleruby.language.RubyContextSourceNode;
@@ -47,10 +47,10 @@ public enum NilBehavior {
4747
@Child private ArrayDupNode dup;
4848
@Child private DispatchNode toA;
4949

50-
public SplatCastNode(NilBehavior nilBehavior, boolean useToAry) {
50+
public SplatCastNode(RubyLanguage language, NilBehavior nilBehavior, boolean useToAry) {
5151
this.nilBehavior = nilBehavior;
5252
// Calling private #to_a is allowed for the *splat operator.
53-
conversionMethod = useToAry ? CoreSymbols.TO_ARY : CoreSymbols.TO_A;
53+
conversionMethod = useToAry ? language.coreSymbols.TO_ARY : language.coreSymbols.TO_A;
5454
}
5555

5656
public void doNotCopy() {

src/main/java/org/truffleruby/core/hash/HashNodes.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import java.util.Arrays;
1313

14+
import com.oracle.truffle.api.dsl.CachedLanguage;
15+
import org.truffleruby.RubyLanguage;
1416
import org.truffleruby.builtins.CoreMethod;
1517
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
1618
import org.truffleruby.builtins.CoreModule;
@@ -29,7 +31,6 @@
2931
import org.truffleruby.core.hash.HashNodesFactory.InternalRehashNodeGen;
3032
import org.truffleruby.core.klass.RubyClass;
3133
import org.truffleruby.core.proc.RubyProc;
32-
import org.truffleruby.core.symbol.CoreSymbols;
3334
import org.truffleruby.language.Nil;
3435
import org.truffleruby.language.NotProvided;
3536
import org.truffleruby.language.RubyContextNode;
@@ -639,14 +640,15 @@ protected RubyHash replaceBuckets(RubyHash self, RubyHash from) {
639640

640641
@Specialization(guards = "!isRubyHash(from)")
641642
protected RubyHash replaceCoerce(RubyHash self, Object from,
643+
@CachedLanguage RubyLanguage language,
642644
@Cached DispatchNode coerceNode,
643645
@Cached InitializeCopyNode initializeCopyNode) {
644646
final Object otherHash = coerceNode.call(
645647
coreLibrary().truffleTypeModule,
646648
"coerce_to",
647649
from,
648650
coreLibrary().hashClass,
649-
CoreSymbols.TO_HASH);
651+
language.coreSymbols.TO_HASH);
650652
return initializeCopyNode.executeReplace(self, (RubyHash) otherHash);
651653
}
652654

src/main/java/org/truffleruby/core/numeric/FloatNodes.java

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.oracle.truffle.api.CompilerDirectives;
1313
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
1414
import com.oracle.truffle.api.dsl.Cached;
15+
import com.oracle.truffle.api.dsl.CachedLanguage;
1516
import com.oracle.truffle.api.dsl.ImportStatic;
1617
import com.oracle.truffle.api.dsl.Specialization;
1718
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -20,6 +21,7 @@
2021
import com.oracle.truffle.api.profiles.ConditionProfile;
2122
import org.jcodings.specific.USASCIIEncoding;
2223
import org.jcodings.specific.UTF8Encoding;
24+
import org.truffleruby.RubyLanguage;
2325
import org.truffleruby.SuppressFBWarnings;
2426
import org.truffleruby.builtins.CoreMethod;
2527
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
@@ -33,7 +35,6 @@
3335
import org.truffleruby.core.string.RubyString;
3436
import org.truffleruby.core.string.StringNodes;
3537
import org.truffleruby.core.string.StringUtils;
36-
import org.truffleruby.core.symbol.CoreSymbols;
3738
import org.truffleruby.language.Nil;
3839
import org.truffleruby.language.RubyDynamicObject;
3940
import org.truffleruby.language.Visibility;
@@ -76,8 +77,9 @@ protected double add(double a, RubyBignum b) {
7677

7778
@Specialization(guards = "!isRubyNumber(b)")
7879
protected Object addCoerced(double a, Object b,
79-
@Cached DispatchNode redoCoerced) {
80-
return redoCoerced.call(a, "redo_coerced", CoreSymbols.PLUS, b);
80+
@Cached DispatchNode redoCoerced,
81+
@CachedLanguage RubyLanguage language) {
82+
return redoCoerced.call(a, "redo_coerced", language.coreSymbols.PLUS, b);
8183
}
8284
}
8385

@@ -101,8 +103,9 @@ protected double sub(double a, RubyBignum b) {
101103

102104
@Specialization(guards = "!isRubyNumber(b)")
103105
protected Object subCoerced(double a, Object b,
104-
@Cached DispatchNode redoCoerced) {
105-
return redoCoerced.call(a, "redo_coerced", CoreSymbols.MINUS, b);
106+
@Cached DispatchNode redoCoerced,
107+
@CachedLanguage RubyLanguage language) {
108+
return redoCoerced.call(a, "redo_coerced", language.coreSymbols.MINUS, b);
106109
}
107110

108111
}
@@ -127,8 +130,9 @@ protected double mul(double a, RubyBignum b) {
127130

128131
@Specialization(guards = "!isRubyNumber(b)")
129132
protected Object mulCoerced(double a, Object b,
130-
@Cached DispatchNode redoCoerced) {
131-
return redoCoerced.call(a, "redo_coerced", CoreSymbols.MULTIPLY, b);
133+
@Cached DispatchNode redoCoerced,
134+
@CachedLanguage RubyLanguage language) {
135+
return redoCoerced.call(a, "redo_coerced", language.coreSymbols.MULTIPLY, b);
132136
}
133137

134138
}
@@ -183,8 +187,9 @@ protected double pow(double base, RubyBignum exponent) {
183187

184188
@Specialization(guards = "!isRubyNumber(exponent)")
185189
protected Object powCoerced(double base, Object exponent,
186-
@Cached DispatchNode redoCoerced) {
187-
return redoCoerced.call(base, "redo_coerced", CoreSymbols.POW, exponent);
190+
@Cached DispatchNode redoCoerced,
191+
@CachedLanguage RubyLanguage language) {
192+
return redoCoerced.call(base, "redo_coerced", language.coreSymbols.POW, exponent);
188193
}
189194

190195
}
@@ -209,8 +214,9 @@ protected double div(double a, RubyBignum b) {
209214

210215
@Specialization(guards = "!isRubyNumber(b)")
211216
protected Object divCoerced(double a, Object b,
212-
@Cached DispatchNode redoCoerced) {
213-
return redoCoerced.call(a, "redo_coerced", CoreSymbols.DIVIDE, b);
217+
@Cached DispatchNode redoCoerced,
218+
@CachedLanguage RubyLanguage language) {
219+
return redoCoerced.call(a, "redo_coerced", language.coreSymbols.DIVIDE, b);
214220
}
215221

216222
}
@@ -255,8 +261,9 @@ protected double mod(double a, RubyBignum b) {
255261

256262
@Specialization(guards = "!isRubyNumber(b)")
257263
protected Object modCoerced(double a, Object b,
258-
@Cached DispatchNode redoCoerced) {
259-
return redoCoerced.call(a, "redo_coerced", CoreSymbols.MODULO, b);
264+
@Cached DispatchNode redoCoerced,
265+
@CachedLanguage RubyLanguage language) {
266+
return redoCoerced.call(a, "redo_coerced", language.coreSymbols.MODULO, b);
260267
}
261268

262269
}
@@ -283,8 +290,9 @@ protected RubyArray divMod(double a, RubyBignum b) {
283290

284291
@Specialization(guards = "!isRubyBignum(b)")
285292
protected Object divModCoerced(double a, RubyDynamicObject b,
286-
@Cached DispatchNode redoCoerced) {
287-
return redoCoerced.call(a, "redo_coerced", CoreSymbols.DIVMOD, b);
293+
@Cached DispatchNode redoCoerced,
294+
@CachedLanguage RubyLanguage language) {
295+
return redoCoerced.call(a, "redo_coerced", language.coreSymbols.DIVMOD, b);
288296
}
289297

290298
}
@@ -309,8 +317,9 @@ protected boolean lessBignum(double a, RubyBignum b) {
309317

310318
@Specialization(guards = "!isRubyNumber(b)")
311319
protected Object lessCoerced(double a, Object b,
312-
@Cached DispatchNode redoCompare) {
313-
return redoCompare.call(a, "redo_compare", CoreSymbols.LESS_THAN, b);
320+
@Cached DispatchNode redoCompare,
321+
@CachedLanguage RubyLanguage language) {
322+
return redoCompare.call(a, "redo_compare", language.coreSymbols.LESS_THAN, b);
314323
}
315324
}
316325

@@ -334,8 +343,9 @@ protected boolean lessEqual(double a, RubyBignum b) {
334343

335344
@Specialization(guards = "!isRubyNumber(b)")
336345
protected Object lessEqualCoerced(double a, Object b,
337-
@Cached DispatchNode redoCompare) {
338-
return redoCompare.call(a, "redo_compare", CoreSymbols.LEQ, b);
346+
@Cached DispatchNode redoCompare,
347+
@CachedLanguage RubyLanguage language) {
348+
return redoCompare.call(a, "redo_compare", language.coreSymbols.LEQ, b);
339349
}
340350
}
341351

@@ -451,8 +461,9 @@ protected boolean greaterEqual(double a, RubyBignum b) {
451461

452462
@Specialization(guards = "!isRubyNumber(b)")
453463
protected Object greaterEqualCoerced(double a, Object b,
454-
@Cached DispatchNode redoCompare) {
455-
return redoCompare.call(a, "redo_compare", CoreSymbols.GEQ, b);
464+
@Cached DispatchNode redoCompare,
465+
@CachedLanguage RubyLanguage language) {
466+
return redoCompare.call(a, "redo_compare", language.coreSymbols.GEQ, b);
456467
}
457468

458469
}
@@ -477,8 +488,9 @@ protected boolean greater(double a, RubyBignum b) {
477488

478489
@Specialization(guards = "!isRubyNumber(b)")
479490
protected Object greaterCoerced(double a, Object b,
480-
@Cached DispatchNode redoCompare) {
481-
return redoCompare.call(a, "redo_compare", CoreSymbols.GREATER_THAN, b);
491+
@Cached DispatchNode redoCompare,
492+
@CachedLanguage RubyLanguage language) {
493+
return redoCompare.call(a, "redo_compare", language.coreSymbols.GREATER_THAN, b);
482494
}
483495
}
484496

0 commit comments

Comments
 (0)