Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 5be7e53254e0
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 37dcc3bfcb1d
Choose a head ref
  • 2 commits
  • 2 files changed
  • 1 contributor

Commits on Jun 9, 2016

  1. Copy the full SHA
    15d4bfc View commit details
  2. Copy the full SHA
    37dcc3b View commit details
Showing with 94 additions and 67 deletions.
  1. +88 −64 truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
  2. +6 −3 truffle/src/main/java/org/jruby/truffle/core/module/ModuleFields.java
152 changes: 88 additions & 64 deletions truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
Original file line number Diff line number Diff line change
@@ -13,6 +13,7 @@
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.TruffleOptions;
import com.oracle.truffle.api.dsl.NodeFactory;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.interop.java.JavaInterop;
import com.oracle.truffle.api.object.DynamicObject;
@@ -118,7 +119,9 @@
import org.jruby.util.cli.OutputStrings;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
@@ -709,70 +712,87 @@ public void addCoreMethods() {
// Bring in core method nodes
CoreMethodNodeManager coreMethodNodeManager = new CoreMethodNodeManager(context, node.getSingletonClassNode());

coreMethodNodeManager.addCoreMethodNodes(ArrayNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BasicObjectNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BindingNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BignumNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ClassNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ConditionVariableNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ExceptionNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FalseClassNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FiberNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FixnumNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FloatNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(HashNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(IntegerNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(KernelNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MainNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MatchDataNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MathNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ModuleNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MutexNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ObjectSpaceNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ProcessNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ProcNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(QueueNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(RangeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(RegexpNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(SizedQueueNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(StringNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(SymbolNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ThreadNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TrueClassNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleGCNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleBootNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(AttachmentsInternalNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleGraalNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(EncodingNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(EncodingConverterNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(InteropNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(CExtNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MethodNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(UnboundMethodNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ByteArrayNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TimeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TrufflePosixNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(RubiniusTypeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ThreadBacktraceLocationNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(DigestNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BigDecimalNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ObjSpaceNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(EtcNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(PsychParserNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(PsychEmitterNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(AtomicReferenceNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TracePointNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(CoverageNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleRopesNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleFixnumNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleSafeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleSystemNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleKernelNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleProcessNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleDebugNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleBindingNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleArrayNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BCryptNodesFactory.getFactories());
ForkJoinPool.commonPool().invokeAll(Arrays.asList(() -> {
coreMethodNodeManager.addCoreMethodNodes(ArrayNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BasicObjectNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BindingNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BignumNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ClassNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ConditionVariableNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ExceptionNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FalseClassNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(FiberNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FixnumNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(FloatNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(HashNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(IntegerNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(KernelNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MainNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MatchDataNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(MathNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ModuleNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MutexNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ObjectSpaceNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ProcessNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ProcNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(QueueNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(RangeNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(RegexpNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(SizedQueueNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(StringNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(SymbolNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ThreadNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TrueClassNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleGCNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleBootNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(AttachmentsInternalNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleGraalNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(EncodingNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(EncodingConverterNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(InteropNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(CExtNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(MethodNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(UnboundMethodNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(ByteArrayNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TimeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TrufflePosixNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(RubiniusTypeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ThreadBacktraceLocationNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(DigestNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BigDecimalNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(ObjSpaceNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(EtcNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(PsychParserNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(PsychEmitterNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(AtomicReferenceNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TracePointNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(CoverageNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleRopesNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleFixnumNodesFactory.getFactories());
return null;
}, () -> {
coreMethodNodeManager.addCoreMethodNodes(TruffleSafeNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleSystemNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleKernelNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleProcessNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleDebugNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleBindingNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(TruffleArrayNodesFactory.getFactories());
coreMethodNodeManager.addCoreMethodNodes(BCryptNodesFactory.getFactories());
return null;
}));

coreMethodNodeManager.allMethodInstalled();

@@ -1339,6 +1359,10 @@ public DynamicObject getInternalBufferClass() {
return internalBufferClass;
}

public boolean isInitializing() {
return state == State.INITIALIZING;
}

public boolean isLoadingRubyCore() {
return state == State.LOADING_RUBY_CORE;
}
Original file line number Diff line number Diff line change
@@ -330,7 +330,10 @@ public void addMethod(RubyContext context, Node currentNode, InternalMethod meth

checkFrozen(context, currentNode);
methods.put(method.getName(), method);
newVersion();

if (!context.getCoreLibrary().isInitializing()) {
newVersion();
}

if (context.getCoreLibrary().isLoaded() && !method.isUndefined()) {
if (Layouts.CLASS.isClass(rubyModuleObject) && Layouts.CLASS.getIsSingleton(rubyModuleObject)) {
@@ -480,11 +483,11 @@ public String toString() {
}

public void newVersion() {
newVersion(new HashSet<DynamicObject>(), false);
newVersion(new HashSet<>(), false);
}

public void newLexicalVersion() {
newVersion(new HashSet<DynamicObject>(), true);
newVersion(new HashSet<>(), true);
}

public void newVersion(Set<DynamicObject> alreadyInvalidated, boolean considerLexicalDependents) {