Skip to content

Commit 5c94a6a

Browse files
committed
[GR-15990] Move PrimitiveManager to RubyLanguage
PullRequest: truffleruby/2042
2 parents 617d290 + ab99f7f commit 5c94a6a

File tree

11 files changed

+202
-104
lines changed

11 files changed

+202
-104
lines changed

src/main/java/org/truffleruby/RubyContext.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.oracle.truffle.api.nodes.Node;
2727
import org.graalvm.options.OptionDescriptor;
2828
import org.joni.Regex;
29-
import org.truffleruby.builtins.PrimitiveManager;
3029
import org.truffleruby.cext.ValueWrapperManager;
3130
import org.truffleruby.collections.WeakValueCache;
3231
import org.truffleruby.core.CoreLibrary;
@@ -105,7 +104,6 @@ public class RubyContext {
105104
@CompilationFinal private TruffleFile rubyHomeTruffleFile;
106105
@CompilationFinal private boolean hadHome;
107106

108-
private final PrimitiveManager primitiveManager = new PrimitiveManager();
109107
private final SafepointManager safepointManager = new SafepointManager(this);
110108
private final InteropManager interopManager = new InteropManager(this);
111109
private final CodeLoader codeLoader = new CodeLoader(this);
@@ -232,7 +230,7 @@ public void initialize() {
232230
// Load the nodes
233231

234232
Metrics.printTime("before-load-nodes");
235-
coreLibrary.loadCoreNodes(primitiveManager);
233+
coreLibrary.loadCoreNodes();
236234
Metrics.printTime("after-load-nodes");
237235

238236
// Capture known builtin methods
@@ -595,10 +593,6 @@ public LexicalScope getRootLexicalScope() {
595593
return rootLexicalScope;
596594
}
597595

598-
public PrimitiveManager getPrimitiveManager() {
599-
return primitiveManager;
600-
}
601-
602596
public CoverageManager getCoverageManager() {
603597
return coverageManager;
604598
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.oracle.truffle.api.instrumentation.AllocationReporter;
1818
import com.oracle.truffle.api.object.Shape;
1919
import org.graalvm.options.OptionDescriptors;
20+
import org.truffleruby.builtins.PrimitiveManager;
2021
import org.truffleruby.core.RubyHandle;
2122
import org.truffleruby.core.array.RubyArray;
2223
import org.truffleruby.core.basicobject.RubyBasicObject;
@@ -145,6 +146,7 @@ public class RubyLanguage extends TruffleLanguage<RubyContext> {
145146
public final CoreMethodAssumptions coreMethodAssumptions;
146147
public final CoreStrings coreStrings;
147148
public final CoreSymbols coreSymbols;
149+
public final PrimitiveManager primitiveManager;
148150
public final RopeCache ropeCache;
149151
public final SymbolTable symbolTable;
150152
@CompilationFinal public LanguageOptions options;
@@ -205,6 +207,7 @@ public RubyLanguage() {
205207
coreMethodAssumptions = new CoreMethodAssumptions(this);
206208
coreStrings = new CoreStrings(this);
207209
coreSymbols = new CoreSymbols();
210+
primitiveManager = new PrimitiveManager();
208211
ropeCache = new RopeCache(coreSymbols);
209212
symbolTable = new SymbolTable(ropeCache, coreSymbols);
210213
}
@@ -247,6 +250,7 @@ public RubyContext createContext(Env env) {
247250
}
248251
if (this.options == null) {
249252
this.options = new LanguageOptions(env, env.getOptions());
253+
primitiveManager.loadCoreMethodNodes(this.options);
250254
}
251255
}
252256

src/main/java/org/truffleruby/builtins/BuiltinsClasses.java

Lines changed: 148 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -160,81 +160,156 @@
160160

161161
public abstract class BuiltinsClasses {
162162

163-
// These two lists need to be kept in sync
163+
// These three lists need to be kept in sync
164164

165165
// Sorted alphabetically to avoid duplicates
166-
public static void setupBuiltinsLazy(CoreMethodNodeManager coreManager, PrimitiveManager primitiveManager) {
167-
ArrayIndexNodesBuiltins.setup(coreManager, primitiveManager);
168-
ArrayNodesBuiltins.setup(coreManager, primitiveManager);
169-
AtomicReferenceNodesBuiltins.setup(coreManager, primitiveManager);
170-
BasicObjectNodesBuiltins.setup(coreManager, primitiveManager);
171-
BigDecimalNodesBuiltins.setup(coreManager, primitiveManager);
172-
BindingNodesBuiltins.setup(coreManager, primitiveManager);
173-
ByteArrayNodesBuiltins.setup(coreManager, primitiveManager);
174-
CExtNodesBuiltins.setup(coreManager, primitiveManager);
175-
ClassNodesBuiltins.setup(coreManager, primitiveManager);
176-
ConditionVariableNodesBuiltins.setup(coreManager, primitiveManager);
177-
CoverageNodesBuiltins.setup(coreManager, primitiveManager);
178-
DigestNodesBuiltins.setup(coreManager, primitiveManager);
179-
EncodingConverterNodesBuiltins.setup(coreManager, primitiveManager);
180-
EncodingNodesBuiltins.setup(coreManager, primitiveManager);
181-
ExceptionNodesBuiltins.setup(coreManager, primitiveManager);
182-
FalseClassNodesBuiltins.setup(coreManager, primitiveManager);
183-
FiberNodesBuiltins.setup(coreManager, primitiveManager);
184-
FloatNodesBuiltins.setup(coreManager, primitiveManager);
185-
GCNodesBuiltins.setup(coreManager, primitiveManager);
186-
HashNodesBuiltins.setup(coreManager, primitiveManager);
187-
IntegerNodesBuiltins.setup(coreManager, primitiveManager);
188-
InteropNodesBuiltins.setup(coreManager, primitiveManager);
189-
IONodesBuiltins.setup(coreManager, primitiveManager);
190-
KernelNodesBuiltins.setup(coreManager, primitiveManager);
191-
MainNodesBuiltins.setup(coreManager, primitiveManager);
192-
MatchDataNodesBuiltins.setup(coreManager, primitiveManager);
193-
MathNodesBuiltins.setup(coreManager, primitiveManager);
194-
MethodNodesBuiltins.setup(coreManager, primitiveManager);
195-
ModuleNodesBuiltins.setup(coreManager, primitiveManager);
196-
MutexNodesBuiltins.setup(coreManager, primitiveManager);
197-
NameErrorNodesBuiltins.setup(coreManager, primitiveManager);
198-
NilClassNodesBuiltins.setup(coreManager, primitiveManager);
199-
NoMethodErrorNodesBuiltins.setup(coreManager, primitiveManager);
200-
ObjectSpaceNodesBuiltins.setup(coreManager, primitiveManager);
201-
ObjSpaceNodesBuiltins.setup(coreManager, primitiveManager);
202-
PointerNodesBuiltins.setup(coreManager, primitiveManager);
203-
PolyglotNodesBuiltins.setup(coreManager, primitiveManager);
204-
ProcessNodesBuiltins.setup(coreManager, primitiveManager);
205-
ProcNodesBuiltins.setup(coreManager, primitiveManager);
206-
QueueNodesBuiltins.setup(coreManager, primitiveManager);
207-
RandomizerNodesBuiltins.setup(coreManager, primitiveManager);
208-
RangeNodesBuiltins.setup(coreManager, primitiveManager);
209-
ReadlineNodesBuiltins.setup(coreManager, primitiveManager);
210-
ReadlineHistoryNodesBuiltins.setup(coreManager, primitiveManager);
211-
RegexpNodesBuiltins.setup(coreManager, primitiveManager);
212-
SizedQueueNodesBuiltins.setup(coreManager, primitiveManager);
213-
StringNodesBuiltins.setup(coreManager, primitiveManager);
214-
SymbolNodesBuiltins.setup(coreManager, primitiveManager);
215-
SystemCallErrorNodesBuiltins.setup(coreManager, primitiveManager);
216-
ThreadBacktraceLocationNodesBuiltins.setup(coreManager, primitiveManager);
217-
ThreadNodesBuiltins.setup(coreManager, primitiveManager);
218-
TimeNodesBuiltins.setup(coreManager, primitiveManager);
219-
TracePointNodesBuiltins.setup(coreManager, primitiveManager);
220-
TrueClassNodesBuiltins.setup(coreManager, primitiveManager);
221-
TruffleBindingNodesBuiltins.setup(coreManager, primitiveManager);
222-
TruffleBootNodesBuiltins.setup(coreManager, primitiveManager);
223-
TruffleDebugNodesBuiltins.setup(coreManager, primitiveManager);
224-
TruffleGraalNodesBuiltins.setup(coreManager, primitiveManager);
225-
TruffleKernelNodesBuiltins.setup(coreManager, primitiveManager);
226-
TrufflePosixNodesBuiltins.setup(coreManager, primitiveManager);
227-
TruffleRegexpNodesBuiltins.setup(coreManager, primitiveManager);
228-
TruffleRopesNodesBuiltins.setup(coreManager, primitiveManager);
229-
TruffleRubyNodesBuiltins.setup(coreManager, primitiveManager);
230-
TruffleStringNodesBuiltins.setup(coreManager, primitiveManager);
231-
TruffleSystemNodesBuiltins.setup(coreManager, primitiveManager);
232-
TruffleThreadNodesBuiltins.setup(coreManager, primitiveManager);
233-
TypeNodesBuiltins.setup(coreManager, primitiveManager);
234-
UnboundMethodNodesBuiltins.setup(coreManager, primitiveManager);
235-
VMPrimitiveNodesBuiltins.setup(coreManager, primitiveManager);
236-
WeakMapNodesBuiltins.setup(coreManager, primitiveManager);
237-
WeakRefNodesBuiltins.setup(coreManager, primitiveManager);
166+
public static void setupBuiltinsLazy(CoreMethodNodeManager coreManager) {
167+
ArrayIndexNodesBuiltins.setup(coreManager);
168+
ArrayNodesBuiltins.setup(coreManager);
169+
AtomicReferenceNodesBuiltins.setup(coreManager);
170+
BasicObjectNodesBuiltins.setup(coreManager);
171+
BigDecimalNodesBuiltins.setup(coreManager);
172+
BindingNodesBuiltins.setup(coreManager);
173+
ByteArrayNodesBuiltins.setup(coreManager);
174+
CExtNodesBuiltins.setup(coreManager);
175+
ClassNodesBuiltins.setup(coreManager);
176+
ConditionVariableNodesBuiltins.setup(coreManager);
177+
CoverageNodesBuiltins.setup(coreManager);
178+
DigestNodesBuiltins.setup(coreManager);
179+
EncodingConverterNodesBuiltins.setup(coreManager);
180+
EncodingNodesBuiltins.setup(coreManager);
181+
ExceptionNodesBuiltins.setup(coreManager);
182+
FalseClassNodesBuiltins.setup(coreManager);
183+
FiberNodesBuiltins.setup(coreManager);
184+
FloatNodesBuiltins.setup(coreManager);
185+
GCNodesBuiltins.setup(coreManager);
186+
HashNodesBuiltins.setup(coreManager);
187+
IntegerNodesBuiltins.setup(coreManager);
188+
InteropNodesBuiltins.setup(coreManager);
189+
IONodesBuiltins.setup(coreManager);
190+
KernelNodesBuiltins.setup(coreManager);
191+
MainNodesBuiltins.setup(coreManager);
192+
MatchDataNodesBuiltins.setup(coreManager);
193+
MathNodesBuiltins.setup(coreManager);
194+
MethodNodesBuiltins.setup(coreManager);
195+
ModuleNodesBuiltins.setup(coreManager);
196+
MutexNodesBuiltins.setup(coreManager);
197+
NameErrorNodesBuiltins.setup(coreManager);
198+
NilClassNodesBuiltins.setup(coreManager);
199+
NoMethodErrorNodesBuiltins.setup(coreManager);
200+
ObjectSpaceNodesBuiltins.setup(coreManager);
201+
ObjSpaceNodesBuiltins.setup(coreManager);
202+
PointerNodesBuiltins.setup(coreManager);
203+
PolyglotNodesBuiltins.setup(coreManager);
204+
ProcessNodesBuiltins.setup(coreManager);
205+
ProcNodesBuiltins.setup(coreManager);
206+
QueueNodesBuiltins.setup(coreManager);
207+
RandomizerNodesBuiltins.setup(coreManager);
208+
RangeNodesBuiltins.setup(coreManager);
209+
ReadlineNodesBuiltins.setup(coreManager);
210+
ReadlineHistoryNodesBuiltins.setup(coreManager);
211+
RegexpNodesBuiltins.setup(coreManager);
212+
SizedQueueNodesBuiltins.setup(coreManager);
213+
StringNodesBuiltins.setup(coreManager);
214+
SymbolNodesBuiltins.setup(coreManager);
215+
SystemCallErrorNodesBuiltins.setup(coreManager);
216+
ThreadBacktraceLocationNodesBuiltins.setup(coreManager);
217+
ThreadNodesBuiltins.setup(coreManager);
218+
TimeNodesBuiltins.setup(coreManager);
219+
TracePointNodesBuiltins.setup(coreManager);
220+
TrueClassNodesBuiltins.setup(coreManager);
221+
TruffleBindingNodesBuiltins.setup(coreManager);
222+
TruffleBootNodesBuiltins.setup(coreManager);
223+
TruffleDebugNodesBuiltins.setup(coreManager);
224+
TruffleGraalNodesBuiltins.setup(coreManager);
225+
TruffleKernelNodesBuiltins.setup(coreManager);
226+
TrufflePosixNodesBuiltins.setup(coreManager);
227+
TruffleRegexpNodesBuiltins.setup(coreManager);
228+
TruffleRopesNodesBuiltins.setup(coreManager);
229+
TruffleRubyNodesBuiltins.setup(coreManager);
230+
TruffleStringNodesBuiltins.setup(coreManager);
231+
TruffleSystemNodesBuiltins.setup(coreManager);
232+
TruffleThreadNodesBuiltins.setup(coreManager);
233+
TypeNodesBuiltins.setup(coreManager);
234+
UnboundMethodNodesBuiltins.setup(coreManager);
235+
VMPrimitiveNodesBuiltins.setup(coreManager);
236+
WeakMapNodesBuiltins.setup(coreManager);
237+
WeakRefNodesBuiltins.setup(coreManager);
238+
}
239+
240+
// Sorted alphabetically to avoid duplicates
241+
public static void setupBuiltinsLazyPrimitives(PrimitiveManager primitiveManager) {
242+
ArrayIndexNodesBuiltins.setupPrimitives(primitiveManager);
243+
ArrayNodesBuiltins.setupPrimitives(primitiveManager);
244+
AtomicReferenceNodesBuiltins.setupPrimitives(primitiveManager);
245+
BasicObjectNodesBuiltins.setupPrimitives(primitiveManager);
246+
BigDecimalNodesBuiltins.setupPrimitives(primitiveManager);
247+
BindingNodesBuiltins.setupPrimitives(primitiveManager);
248+
ByteArrayNodesBuiltins.setupPrimitives(primitiveManager);
249+
CExtNodesBuiltins.setupPrimitives(primitiveManager);
250+
ClassNodesBuiltins.setupPrimitives(primitiveManager);
251+
ConditionVariableNodesBuiltins.setupPrimitives(primitiveManager);
252+
CoverageNodesBuiltins.setupPrimitives(primitiveManager);
253+
DigestNodesBuiltins.setupPrimitives(primitiveManager);
254+
EncodingConverterNodesBuiltins.setupPrimitives(primitiveManager);
255+
EncodingNodesBuiltins.setupPrimitives(primitiveManager);
256+
ExceptionNodesBuiltins.setupPrimitives(primitiveManager);
257+
FalseClassNodesBuiltins.setupPrimitives(primitiveManager);
258+
FiberNodesBuiltins.setupPrimitives(primitiveManager);
259+
FloatNodesBuiltins.setupPrimitives(primitiveManager);
260+
GCNodesBuiltins.setupPrimitives(primitiveManager);
261+
HashNodesBuiltins.setupPrimitives(primitiveManager);
262+
IntegerNodesBuiltins.setupPrimitives(primitiveManager);
263+
InteropNodesBuiltins.setupPrimitives(primitiveManager);
264+
IONodesBuiltins.setupPrimitives(primitiveManager);
265+
KernelNodesBuiltins.setupPrimitives(primitiveManager);
266+
MainNodesBuiltins.setupPrimitives(primitiveManager);
267+
MatchDataNodesBuiltins.setupPrimitives(primitiveManager);
268+
MathNodesBuiltins.setupPrimitives(primitiveManager);
269+
MethodNodesBuiltins.setupPrimitives(primitiveManager);
270+
ModuleNodesBuiltins.setupPrimitives(primitiveManager);
271+
MutexNodesBuiltins.setupPrimitives(primitiveManager);
272+
NameErrorNodesBuiltins.setupPrimitives(primitiveManager);
273+
NilClassNodesBuiltins.setupPrimitives(primitiveManager);
274+
NoMethodErrorNodesBuiltins.setupPrimitives(primitiveManager);
275+
ObjectSpaceNodesBuiltins.setupPrimitives(primitiveManager);
276+
ObjSpaceNodesBuiltins.setupPrimitives(primitiveManager);
277+
PointerNodesBuiltins.setupPrimitives(primitiveManager);
278+
PolyglotNodesBuiltins.setupPrimitives(primitiveManager);
279+
ProcessNodesBuiltins.setupPrimitives(primitiveManager);
280+
ProcNodesBuiltins.setupPrimitives(primitiveManager);
281+
QueueNodesBuiltins.setupPrimitives(primitiveManager);
282+
RandomizerNodesBuiltins.setupPrimitives(primitiveManager);
283+
RangeNodesBuiltins.setupPrimitives(primitiveManager);
284+
ReadlineNodesBuiltins.setupPrimitives(primitiveManager);
285+
ReadlineHistoryNodesBuiltins.setupPrimitives(primitiveManager);
286+
RegexpNodesBuiltins.setupPrimitives(primitiveManager);
287+
SizedQueueNodesBuiltins.setupPrimitives(primitiveManager);
288+
StringNodesBuiltins.setupPrimitives(primitiveManager);
289+
SymbolNodesBuiltins.setupPrimitives(primitiveManager);
290+
SystemCallErrorNodesBuiltins.setupPrimitives(primitiveManager);
291+
ThreadBacktraceLocationNodesBuiltins.setupPrimitives(primitiveManager);
292+
ThreadNodesBuiltins.setupPrimitives(primitiveManager);
293+
TimeNodesBuiltins.setupPrimitives(primitiveManager);
294+
TracePointNodesBuiltins.setupPrimitives(primitiveManager);
295+
TrueClassNodesBuiltins.setupPrimitives(primitiveManager);
296+
TruffleBindingNodesBuiltins.setupPrimitives(primitiveManager);
297+
TruffleBootNodesBuiltins.setupPrimitives(primitiveManager);
298+
TruffleDebugNodesBuiltins.setupPrimitives(primitiveManager);
299+
TruffleGraalNodesBuiltins.setupPrimitives(primitiveManager);
300+
TruffleKernelNodesBuiltins.setupPrimitives(primitiveManager);
301+
TrufflePosixNodesBuiltins.setupPrimitives(primitiveManager);
302+
TruffleRegexpNodesBuiltins.setupPrimitives(primitiveManager);
303+
TruffleRopesNodesBuiltins.setupPrimitives(primitiveManager);
304+
TruffleRubyNodesBuiltins.setupPrimitives(primitiveManager);
305+
TruffleStringNodesBuiltins.setupPrimitives(primitiveManager);
306+
TruffleSystemNodesBuiltins.setupPrimitives(primitiveManager);
307+
TruffleThreadNodesBuiltins.setupPrimitives(primitiveManager);
308+
TypeNodesBuiltins.setupPrimitives(primitiveManager);
309+
UnboundMethodNodesBuiltins.setupPrimitives(primitiveManager);
310+
VMPrimitiveNodesBuiltins.setupPrimitives(primitiveManager);
311+
WeakMapNodesBuiltins.setupPrimitives(primitiveManager);
312+
WeakRefNodesBuiltins.setupPrimitives(primitiveManager);
238313
}
239314

240315
// Sorted alphabetically to avoid duplicates

src/main/java/org/truffleruby/builtins/CoreMethodNodeManager.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,16 @@
5454
public class CoreMethodNodeManager {
5555

5656
private final RubyContext context;
57-
private final PrimitiveManager primitiveManager;
5857
private final RubyLanguage language;
5958

60-
public CoreMethodNodeManager(
61-
RubyContext context,
62-
PrimitiveManager primitiveManager) {
59+
public CoreMethodNodeManager(RubyContext context) {
6360
this.context = context;
6461
this.language = context.getLanguageSlow();
65-
this.primitiveManager = primitiveManager;
6662
}
6763

6864
public void loadCoreMethodNodes() {
69-
if (!TruffleOptions.AOT && context.getOptions().LAZY_BUILTINS) {
70-
BuiltinsClasses.setupBuiltinsLazy(this, primitiveManager);
65+
if (!TruffleOptions.AOT && language.options.LAZY_BUILTINS) {
66+
BuiltinsClasses.setupBuiltinsLazy(this);
7167
} else {
7268
for (List<? extends NodeFactory<? extends RubyNode>> factory : BuiltinsClasses.getCoreNodeFactories()) {
7369
addCoreMethodNodes(factory);
@@ -82,8 +78,6 @@ public void addCoreMethodNodes(List<? extends NodeFactory<? extends RubyNode>> n
8278
for (NodeFactory<? extends RubyNode> nodeFactory : nodeFactories) {
8379
final Class<?> nodeClass = nodeFactory.getNodeClass();
8480
final CoreMethod methodAnnotation = nodeClass.getAnnotation(CoreMethod.class);
85-
Primitive primitiveAnnotation;
86-
8781
if (methodAnnotation != null) {
8882
if (module == null) {
8983
CoreModule coreModule = nodeClass.getEnclosingClass().getAnnotation(CoreModule.class);
@@ -94,8 +88,6 @@ public void addCoreMethodNodes(List<? extends NodeFactory<? extends RubyNode>> n
9488
module = getModule(moduleName, coreModule.isClass());
9589
}
9690
addCoreMethod(module, new MethodDetails(moduleName, methodAnnotation, nodeFactory));
97-
} else if ((primitiveAnnotation = nodeClass.getAnnotation(Primitive.class)) != null) {
98-
primitiveManager.addPrimitive(nodeFactory, primitiveAnnotation);
9991
}
10092
}
10193
}

0 commit comments

Comments
 (0)