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: 1710f02fa61d
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 71599e9c53b5
Choose a head ref
  • 2 commits
  • 18 files changed
  • 1 contributor

Commits on Oct 7, 2015

  1. Copy the full SHA
    303c301 View commit details
  2. [Truffle] Pass the context explicitly for Module and Class methods r…

    …eading the context field directly.
    eregon committed Oct 7, 2015
    Copy the full SHA
    71599e9 View commit details
Showing with 197 additions and 195 deletions.
  1. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/constants/GetConstantNode.java
  2. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/constants/WriteConstantNode.java
  3. +17 −17 truffle/src/main/java/org/jruby/truffle/nodes/core/ClassNodes.java
  4. +7 −6 truffle/src/main/java/org/jruby/truffle/nodes/core/CoreMethodNodeManager.java
  5. +5 −5 truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
  6. +24 −24 truffle/src/main/java/org/jruby/truffle/nodes/core/ModuleNodes.java
  7. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/SetTopLevelBindingNode.java
  8. +3 −3 truffle/src/main/java/org/jruby/truffle/nodes/methods/AddMethodNode.java
  9. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/methods/AliasNode.java
  10. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/methods/UndefNode.java
  11. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/objects/DefineOrGetModuleNode.java
  12. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/objects/SingletonClassNode.java
  13. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/objects/WriteClassVariableNode.java
  14. +3 −3 truffle/src/main/java/org/jruby/truffle/runtime/ModuleOperations.java
  15. +71 −71 truffle/src/main/java/org/jruby/truffle/runtime/core/CoreLibrary.java
  16. +53 −52 truffle/src/main/java/org/jruby/truffle/runtime/core/ModuleFields.java
  17. +2 −2 truffle/src/main/java/org/jruby/truffle/runtime/loader/FeatureLoader.java
  18. +1 −1 truffle/src/main/java/org/jruby/truffle/translator/TranslatorDriver.java
Original file line number Diff line number Diff line change
@@ -54,12 +54,12 @@ protected Object autoloadConstant(VirtualFrame frame, DynamicObject module, Stri

// The autoload constant must only be removed if everything succeeds.
// We remove it first to allow lookup to ignore it and add it back if there was a failure.
Layouts.MODULE.getFields(constant.getDeclaringModule()).removeConstant(this, name);
Layouts.MODULE.getFields(constant.getDeclaringModule()).removeConstant(getContext(), this, name);
try {
requireNode.require(path);
return readConstantNode.readConstant(frame, module, name);
} catch (RaiseException e) {
Layouts.MODULE.getFields(constant.getDeclaringModule()).setAutoloadConstant(this, name, path);
Layouts.MODULE.getFields(constant.getDeclaringModule()).setAutoloadConstant(getContext(), this, name, path);
throw e;
}
}
Original file line number Diff line number Diff line change
@@ -51,7 +51,7 @@ public Object execute(VirtualFrame frame) {

final DynamicObject module = (DynamicObject) receiverObject;

Layouts.MODULE.getFields(module).setConstant(this, name, rhsValue);
Layouts.MODULE.getFields(module).setConstant(getContext(), this, name, rhsValue);

return rhsValue;
}
34 changes: 17 additions & 17 deletions truffle/src/main/java/org/jruby/truffle/nodes/core/ClassNodes.java
Original file line number Diff line number Diff line change
@@ -61,10 +61,10 @@ public static DynamicObject createClassClass(RubyContext context) {
* This constructor supports initialization and solves boot-order problems and should not
* normally be used from outside this class.
*/
public static DynamicObject createBootClass(DynamicObject classClass, DynamicObject superclass, String name) {
public static DynamicObject createBootClass(RubyContext context, DynamicObject classClass, DynamicObject superclass, String name) {
assert RubyGuards.isRubyClass(classClass);
assert superclass == null || RubyGuards.isRubyClass(superclass);
final ModuleFields model = new ModuleFields(Layouts.MODULE.getFields(Layouts.BASIC_OBJECT.getLogicalClass(classClass)).getContext(), null, name);
final ModuleFields model = new ModuleFields(context, null, name);

final DynamicObject rubyClass = Layouts.CLASS.createClass(Layouts.CLASS.getInstanceFactory(classClass), model, false, null, null);
assert RubyGuards.isRubyClass(rubyClass) : classClass.getShape().getObjectType().getClass();
@@ -75,7 +75,7 @@ public static DynamicObject createBootClass(DynamicObject classClass, DynamicObj
if (model.lexicalParent == null) { // bootstrap or anonymous module
Layouts.MODULE.getFields(rubyClass).name = Layouts.MODULE.getFields(rubyClass).givenBaseName;
} else {
Layouts.MODULE.getFields(rubyClass).getAdoptedByLexicalParent(model.lexicalParent, model.givenBaseName, null);
Layouts.MODULE.getFields(rubyClass).getAdoptedByLexicalParent(context, model.lexicalParent, model.givenBaseName, null);
}

if (superclass != null) {
@@ -97,12 +97,12 @@ public static DynamicObject createSingletonClassOfObject(RubyContext context, Dy
// Allocator is null here, we cannot create instances of singleton classes.
assert RubyGuards.isRubyClass(superclass);
assert attached == null || RubyGuards.isRubyModule(attached);
return ensureSingletonConsistency(createRubyClass(context, Layouts.BASIC_OBJECT.getLogicalClass(superclass), null, superclass, name, true, attached));
return ensureSingletonConsistency(context, createRubyClass(context, Layouts.BASIC_OBJECT.getLogicalClass(superclass), null, superclass, name, true, attached));
}

public static DynamicObject createRubyClass(RubyContext context, DynamicObject lexicalParent, DynamicObject superclass, String name) {
final DynamicObject rubyClass = createRubyClass(context, Layouts.BASIC_OBJECT.getLogicalClass(superclass), lexicalParent, superclass, name, false, null);
ensureSingletonConsistency(rubyClass);
ensureSingletonConsistency(context, rubyClass);
return rubyClass;
}

@@ -118,7 +118,7 @@ public static DynamicObject createRubyClass(RubyContext context, DynamicObject c
if (model.lexicalParent == null) { // bootstrap or anonymous module
Layouts.MODULE.getFields(rubyClass).name = Layouts.MODULE.getFields(rubyClass).givenBaseName;
} else {
Layouts.MODULE.getFields(rubyClass).getAdoptedByLexicalParent(model.lexicalParent, model.givenBaseName, null);
Layouts.MODULE.getFields(rubyClass).getAdoptedByLexicalParent(context, model.lexicalParent, model.givenBaseName, null);
}

if (superclass != null) {
@@ -140,33 +140,33 @@ public static DynamicObject createRubyClass(RubyContext context, DynamicObject c
}


public static void initialize(DynamicObject rubyClass, DynamicObject superclass) {
public static void initialize(RubyContext context, DynamicObject rubyClass, DynamicObject superclass) {
assert RubyGuards.isRubyClass(superclass);

Layouts.MODULE.getFields(rubyClass).parentModule = Layouts.MODULE.getFields(superclass).start;
Layouts.MODULE.getFields(superclass).addDependent(rubyClass);

Layouts.MODULE.getFields(rubyClass).newVersion();
ensureSingletonConsistency(rubyClass);
ensureSingletonConsistency(context, rubyClass);

DynamicObjectFactory factory = Layouts.CLASS.getInstanceFactory(superclass);
factory = Layouts.BASIC_OBJECT.setLogicalClass(factory, rubyClass);
factory = Layouts.BASIC_OBJECT.setMetaClass(factory, rubyClass);
Layouts.CLASS.setInstanceFactoryUnsafe(rubyClass, factory);
}

public static DynamicObject ensureSingletonConsistency(DynamicObject rubyClass) {
createOneSingletonClass(rubyClass);
public static DynamicObject ensureSingletonConsistency(RubyContext context, DynamicObject rubyClass) {
createOneSingletonClass(context, rubyClass);
return rubyClass;
}

public static DynamicObject getSingletonClass(DynamicObject rubyClass) {
public static DynamicObject getSingletonClass(RubyContext context, DynamicObject rubyClass) {
// We also need to create the singleton class of a singleton class for proper lookup and consistency.
// See rb_singleton_class() documentation in MRI.
return ensureSingletonConsistency(createOneSingletonClass(rubyClass));
return ensureSingletonConsistency(context, createOneSingletonClass(context, rubyClass));
}

public static DynamicObject createOneSingletonClass(DynamicObject rubyClass) {
public static DynamicObject createOneSingletonClass(RubyContext context, DynamicObject rubyClass) {
CompilerAsserts.neverPartOfCompilation();

if (Layouts.CLASS.getIsSingleton(Layouts.BASIC_OBJECT.getMetaClass(rubyClass))) {
@@ -177,11 +177,11 @@ public static DynamicObject createOneSingletonClass(DynamicObject rubyClass) {
if (getSuperClass(rubyClass) == null) {
singletonSuperclass = Layouts.BASIC_OBJECT.getLogicalClass(rubyClass);
} else {
singletonSuperclass = createOneSingletonClass(getSuperClass(rubyClass));
singletonSuperclass = createOneSingletonClass(context, getSuperClass(rubyClass));
}

String name = String.format("#<Class:%s>", Layouts.MODULE.getFields(rubyClass).getName());
Layouts.BASIC_OBJECT.setMetaClass(rubyClass, ClassNodes.createRubyClass(Layouts.MODULE.getFields(Layouts.BASIC_OBJECT.getLogicalClass(rubyClass)).getContext(), Layouts.BASIC_OBJECT.getLogicalClass(rubyClass), null, singletonSuperclass, name, true, rubyClass));
Layouts.BASIC_OBJECT.setMetaClass(rubyClass, ClassNodes.createRubyClass(context, Layouts.BASIC_OBJECT.getLogicalClass(rubyClass), null, singletonSuperclass, name, true, rubyClass));

return Layouts.BASIC_OBJECT.getMetaClass(rubyClass);
}
@@ -286,7 +286,7 @@ private DynamicObject initializeGeneralWithoutBlock(VirtualFrame frame, DynamicO
assert RubyGuards.isRubyClass(rubyClass);
assert RubyGuards.isRubyClass(superclass);

ClassNodes.initialize(rubyClass, superclass);
ClassNodes.initialize(getContext(), rubyClass, superclass);
triggerInheritedHook(frame, rubyClass, superclass);

return rubyClass;
@@ -297,7 +297,7 @@ private DynamicObject initializeGeneralWithBlock(VirtualFrame frame, DynamicObje
assert RubyGuards.isRubyClass(superclass);
assert RubyGuards.isRubyProc(block);

ClassNodes.initialize(rubyClass, superclass);
ClassNodes.initialize(getContext(), rubyClass, superclass);
triggerInheritedHook(frame, rubyClass, superclass);
moduleInitialize(frame, rubyClass, block);

Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.NodeUtil;
import com.oracle.truffle.api.object.DynamicObject;

import org.jruby.runtime.Visibility;
import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.RubyNode;
@@ -116,16 +117,16 @@ private void addCoreMethod(MethodDetails methodDetails) {
final RubyRootNode rootNode = makeGenericMethod(context, methodDetails);

if (method.isModuleFunction()) {
addMethod(module, rootNode, names, Visibility.PRIVATE);
addMethod(getSingletonClass(module), rootNode, names, Visibility.PUBLIC);
addMethod(context, module, rootNode, names, Visibility.PRIVATE);
addMethod(context, getSingletonClass(module), rootNode, names, Visibility.PUBLIC);
} else if (method.onSingleton() || method.constructor()) {
addMethod(getSingletonClass(module), rootNode, names, visibility);
addMethod(context, getSingletonClass(module), rootNode, names, visibility);
} else {
addMethod(module, rootNode, names, visibility);
addMethod(context, module, rootNode, names, visibility);
}
}

private static void addMethod(DynamicObject module, RubyRootNode rootNode, List<String> names, final Visibility originalVisibility) {
private static void addMethod(RubyContext context, DynamicObject module, RubyRootNode rootNode, List<String> names, final Visibility originalVisibility) {
assert RubyGuards.isRubyModule(module);

for (String name : names) {
@@ -139,7 +140,7 @@ private static void addMethod(DynamicObject module, RubyRootNode rootNode, List<
final InternalMethod method = new InternalMethod(rootNodeCopy.getSharedMethodInfo(), name, module, visibility, false,
Truffle.getRuntime().createCallTarget(rootNodeCopy), null);

Layouts.MODULE.getFields(module).addMethod(null, method.withVisibility(visibility).withName(name));
Layouts.MODULE.getFields(module).addMethod(context, null, method.withVisibility(visibility).withName(name));
}
}

Original file line number Diff line number Diff line change
@@ -1322,7 +1322,7 @@ public DynamicObject methodsRegular(VirtualFrame frame, Object self, boolean reg
final DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(regular, MethodFilter.PUBLIC_PROTECTED).toArray();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(getContext(), regular, MethodFilter.PUBLIC_PROTECTED).toArray();
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

@@ -1379,7 +1379,7 @@ public DynamicObject privateMethods(VirtualFrame frame, Object self, boolean inc
DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PRIVATE).toArray();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(getContext(), includeAncestors, MethodFilter.PRIVATE).toArray();
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

@@ -1426,7 +1426,7 @@ public DynamicObject protectedMethods(VirtualFrame frame, Object self, boolean i
final DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PROTECTED).toArray();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(getContext(), includeAncestors, MethodFilter.PROTECTED).toArray();
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

@@ -1456,7 +1456,7 @@ public DynamicObject publicMethods(VirtualFrame frame, Object self, boolean incl
final DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PUBLIC).toArray();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(getContext(), includeAncestors, MethodFilter.PUBLIC).toArray();
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

@@ -1799,7 +1799,7 @@ public DynamicObject singletonMethods(VirtualFrame frame, Object self, boolean i
}

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterSingletonMethods(includeAncestors, MethodFilter.PUBLIC_PROTECTED).toArray();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterSingletonMethods(getContext(), includeAncestors, MethodFilter.PUBLIC_PROTECTED).toArray();
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

Loading