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

Commits on Jun 11, 2016

  1. Copy the full SHA
    07fb196 View commit details
  2. Copy the full SHA
    4417df0 View commit details
22 changes: 4 additions & 18 deletions ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,5 @@
<!--
This is a simple template for filing JRuby isuses.
Please help us help you by providing the information below.
Text inside XML comment tags will not be shown in your report.
-->

### Environment

<!--
Provide at least:
* JRuby version (`jruby -v`) and command line (flags, JRUBY_OPTS, etc)
* Operating system and platform (e.g. `uname -a`)
@@ -17,18 +8,13 @@ Other relevant info you may wish to add:
* Installed or activated gems
* Application/framework version (e.g. Rails, Sinatra)
* Environment variables
-->

### Expected Behavior

<!--
Describe your expectation of how JRuby should behave.
Provide an executable Ruby script or a link to an example repository.
-->
* Describe your expectation of how JRuby should behave, perhaps by showing how CRuby/MRI behaves.
* Provide an executable Ruby script or a link to an example repository.

### Actual Behavior

<!--
Describe or show the actual behavior.
Provide text or screen capture showing the behavior.
-->
* Describe or show the actual behavior.
* Provide text or screen capture showing the behavior.
26 changes: 18 additions & 8 deletions core/src/main/java/org/jruby/ir/targets/IRBytecodeAdapter.java
Original file line number Diff line number Diff line change
@@ -366,7 +366,7 @@ public org.objectweb.asm.Label newLabel() {
* @param arity arity of the call
* @param hasClosure whether a closure will be on the stack for passing
*/
public abstract void invokeOther(String name, int arity, boolean hasClosure, boolean isPotentiallyRefined);
public abstract void invokeOther(String file, int line, String name, int arity, boolean hasClosure, boolean isPotentiallyRefined);

/**
* Invoke the array dereferencing method ([]) on an object other than self.
@@ -384,7 +384,7 @@ public org.objectweb.asm.Label newLabel() {
*
* @param name name of the method to invoke
*/
public abstract void invokeOtherOneFixnum(String name, long fixnum);
public abstract void invokeOtherOneFixnum(String file, int line, String name, long fixnum);

/**
* Invoke a float-receiving method on an object other than self.
@@ -393,68 +393,78 @@ public org.objectweb.asm.Label newLabel() {
*
* @param name name of the method to invoke
*/
public abstract void invokeOtherOneFloat(String name, double flote);
public abstract void invokeOtherOneFloat(String file, int line, String name, double flote);


/**
* Invoke a method on self.
*
* Stack required: context, caller, self, all arguments, optional block
*
* @param file the filename of the script making this call
* @param line the line number where this call appears
* @param name name of the method to invoke
* @param arity arity of the call
* @param hasClosure whether a closure will be on the stack for passing
* @param callType
*/
public abstract void invokeSelf(String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined);
public abstract void invokeSelf(String file, int line, String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined);

/**
* Invoke a superclass method from an instance context.
*
* Stack required: context, caller, self, start class, arguments[, block]
*
* @param file the filename of the script making this call
* @param line the line number where this call appears
* @param name name of the method to invoke
* @param arity arity of the arguments on the stack
* @param hasClosure whether a block is passed
* @param splatmap a map of arguments to be splatted back into arg list
*/
public abstract void invokeInstanceSuper(String name, int arity, boolean hasClosure, boolean[] splatmap);
public abstract void invokeInstanceSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap);

/**
* Invoke a superclass method from a class context.
*
* Stack required: context, caller, self, start class, arguments[, block]
*
* @param file the filename of the script making this call
* @param line the line number where this call appears
* @param name name of the method to invoke
* @param arity arity of the arguments on the stack
* @param hasClosure whether a block is passed
* @param splatmap a map of arguments to be splatted back into arg list
*/
public abstract void invokeClassSuper(String name, int arity, boolean hasClosure, boolean[] splatmap);
public abstract void invokeClassSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap);

/**
* Invoke a superclass method from an unresolved context.
*
* Stack required: context, caller, self, arguments[, block]
*
* @param file the filename of the script making this call
* @param line the line number where this call appears
* @param name name of the method to invoke
* @param arity arity of the arguments on the stack
* @param hasClosure whether a block is passed
* @param splatmap a map of arguments to be splatted back into arg list
*/
public abstract void invokeUnresolvedSuper(String name, int arity, boolean hasClosure, boolean[] splatmap);
public abstract void invokeUnresolvedSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap);

/**
* Invoke a superclass method from a zsuper in a block.
*
* Stack required: context, caller, self, arguments[, block]
*
* @param file the filename of the script making this call
* @param line the line number where this call appears
* @param name name of the method to invoke
* @param arity arity of the arguments on the stack
* @param hasClosure whether a block is passed
* @param splatmap a map of arguments to be splatted back into arg list
*/
public abstract void invokeZSuper(String name, int arity, boolean hasClosure, boolean[] splatmap);
public abstract void invokeZSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap);

/**
* Lookup a constant from current context.
44 changes: 26 additions & 18 deletions core/src/main/java/org/jruby/ir/targets/IRBytecodeAdapter6.java
Original file line number Diff line number Diff line change
@@ -385,8 +385,8 @@ public void run() {
});
}

public void invokeOther(String name, int arity, boolean hasClosure, boolean isPotentiallyRefined) {
invoke(name, arity, hasClosure, CallType.NORMAL, isPotentiallyRefined);
public void invokeOther(String file, int line, String name, int arity, boolean hasClosure, boolean isPotentiallyRefined) {
invoke(file, line, name, arity, hasClosure, CallType.NORMAL, isPotentiallyRefined);
}

public void invokeArrayDeref() {
@@ -413,7 +413,7 @@ public void invokeArrayDeref() {
adapter.invokestatic(getClassData().clsName, methodName, incomingSig);
}

public void invoke(String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined) {
public void invoke(String file, int lineNumber, String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + name + "' has more than " + MAX_ARGUMENTS + " arguments");

SkinnyMethodAdapter adapter2;
@@ -468,6 +468,8 @@ public void invoke(String name, int arity, boolean hasClosure, CallType callType
null,
null);

adapter2.line(lineNumber);

cacheCallSite(adapter2, getClassData().clsName, methodName, name, callType, isPotentiallyRefined);

// use call site to invoke
@@ -530,10 +532,10 @@ public static void buildArrayFromLocals(SkinnyMethodAdapter adapter2, int base,
}
}

public void invokeOtherOneFixnum(String name, long fixnum) {
public void invokeOtherOneFixnum(String file, int line, String name, long fixnum) {
if (!MethodIndex.hasFastFixnumOps(name)) {
pushFixnum(fixnum);
invokeOther(name, 1, false, false);
invokeOther(file, line, name, 1, false, false);
}
SkinnyMethodAdapter adapter2;
String incomingSig = sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT));
@@ -549,6 +551,8 @@ public void invokeOtherOneFixnum(String name, long fixnum) {
null,
null);

adapter2.line(line);

// call site object field
adapter.getClassVisitor().visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, methodName, ci(CallSite.class), null, null).visitEnd();

@@ -578,10 +582,10 @@ public void invokeOtherOneFixnum(String name, long fixnum) {
adapter.invokestatic(getClassData().clsName, methodName, incomingSig);
}

public void invokeOtherOneFloat(String name, double flote) {
public void invokeOtherOneFloat(String file, int line, String name, double flote) {
if (!MethodIndex.hasFastFloatOps(name)) {
pushFloat(flote);
invokeOther(name, 1, false, false);
invokeOther(file, line, name, 1, false, false);
}
SkinnyMethodAdapter adapter2;
String incomingSig = sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT));
@@ -597,6 +601,8 @@ public void invokeOtherOneFloat(String name, double flote) {
null,
null);

adapter2.line(line);

// call site object field
adapter.getClassVisitor().visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, methodName, ci(CallSite.class), null, null).visitEnd();

@@ -626,37 +632,37 @@ public void invokeOtherOneFloat(String name, double flote) {
adapter.invokestatic(getClassData().clsName, methodName, incomingSig);
}

public void invokeSelf(String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined) {
public void invokeSelf(String file, int line, String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + name + "' has more than " + MAX_ARGUMENTS + " arguments");

invoke(name, arity, hasClosure, callType, isPotentiallyRefined);
invoke(file, line, name, arity, hasClosure, callType, isPotentiallyRefined);
}

public void invokeInstanceSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeInstanceSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to instance super has more than " + MAX_ARGUMENTS + " arguments");

performSuper(name, arity, hasClosure, splatmap, "instanceSuper", "instanceSuperSplatArgs", false);
performSuper(file, line, name, arity, hasClosure, splatmap, "instanceSuper", "instanceSuperSplatArgs", false);
}

public void invokeClassSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeClassSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to class super has more than " + MAX_ARGUMENTS + " arguments");

performSuper(name, arity, hasClosure, splatmap, "classSuper", "classSuperSplatArgs", false);
performSuper(file, line, name, arity, hasClosure, splatmap, "classSuper", "classSuperSplatArgs", false);
}

public void invokeUnresolvedSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeUnresolvedSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to unresolved super has more than " + MAX_ARGUMENTS + " arguments");

performSuper(name, arity, hasClosure, splatmap, "unresolvedSuper", "unresolvedSuperSplatArgs", true);
performSuper(file, line, name, arity, hasClosure, splatmap, "unresolvedSuper", "unresolvedSuperSplatArgs", true);
}

public void invokeZSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeZSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to zsuper has more than " + MAX_ARGUMENTS + " arguments");

performSuper(name, arity, hasClosure, splatmap, "zSuper", "zSuperSplatArgs", true);
performSuper(file, line, name, arity, hasClosure, splatmap, "zSuper", "zSuperSplatArgs", true);
}

private void performSuper(String name, int arity, boolean hasClosure, boolean[] splatmap, String superHelper, String splatHelper, boolean unresolved) {
private void performSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap, String superHelper, String splatHelper, boolean unresolved) {
SkinnyMethodAdapter adapter2;
String incomingSig;
String outgoingSig;
@@ -692,6 +698,8 @@ private void performSuper(String name, int arity, boolean hasClosure, boolean[]
null,
null);

adapter2.line(line);

// CON FIXME: make these offsets programmatically determined
adapter2.aload(0);
adapter2.aload(2);
20 changes: 10 additions & 10 deletions core/src/main/java/org/jruby/ir/targets/IRBytecodeAdapter7.java
Original file line number Diff line number Diff line change
@@ -124,10 +124,10 @@ public void pushEncoding(Encoding encoding) {
adapter.invokedynamic("encoding", sig(RubyEncoding.class, ThreadContext.class), Bootstrap.contextValueString(), new String(encoding.getName()));
}

public void invokeOther(String name, int arity, boolean hasClosure, boolean isPotentiallyRefined) {
public void invokeOther(String file, int line, String name, int arity, boolean hasClosure, boolean isPotentiallyRefined) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + name + "' has more than " + MAX_ARGUMENTS + " arguments");
if (isPotentiallyRefined) {
super.invokeOther(name, arity, hasClosure, isPotentiallyRefined);
super.invokeOther(file, line, name, arity, hasClosure, isPotentiallyRefined);
return;
}

@@ -151,7 +151,7 @@ public void invokeArrayDeref() {
adapter.invokedynamic("aref", sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT, 1)), ArrayDerefInvokeSite.BOOTSTRAP);
}

public void invokeOtherOneFixnum(String name, long fixnum) {
public void invokeOtherOneFixnum(String file, int line, String name, long fixnum) {
String signature = sig(IRubyObject.class, params(ThreadContext.class, IRubyObject.class, IRubyObject.class));

adapter.invokedynamic(
@@ -163,7 +163,7 @@ public void invokeOtherOneFixnum(String name, long fixnum) {
0);
}

public void invokeOtherOneFloat(String name, double flote) {
public void invokeOtherOneFloat(String file, int line, String name, double flote) {
String signature = sig(IRubyObject.class, params(ThreadContext.class, IRubyObject.class, IRubyObject.class));

adapter.invokedynamic(
@@ -175,10 +175,10 @@ public void invokeOtherOneFloat(String name, double flote) {
0);
}

public void invokeSelf(String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined) {
public void invokeSelf(String file, int line, String name, int arity, boolean hasClosure, CallType callType, boolean isPotentiallyRefined) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + name + "' has more than " + MAX_ARGUMENTS + " arguments");
if (isPotentiallyRefined) {
super.invokeSelf(name, arity, hasClosure, callType, isPotentiallyRefined);
super.invokeSelf(file, line, name, arity, hasClosure, callType, isPotentiallyRefined);
return;
}

@@ -198,7 +198,7 @@ public void invokeSelf(String name, int arity, boolean hasClosure, CallType call
}
}

public void invokeInstanceSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeInstanceSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to instance super has more than " + MAX_ARGUMENTS + " arguments");

String splatmapString = IRRuntimeHelpers.encodeSplatmap(splatmap);
@@ -209,7 +209,7 @@ public void invokeInstanceSuper(String name, int arity, boolean hasClosure, bool
}
}

public void invokeClassSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeClassSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to class super has more than " + MAX_ARGUMENTS + " arguments");

String splatmapString = IRRuntimeHelpers.encodeSplatmap(splatmap);
@@ -220,7 +220,7 @@ public void invokeClassSuper(String name, int arity, boolean hasClosure, boolean
}
}

public void invokeUnresolvedSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeUnresolvedSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to unresolved super has more than " + MAX_ARGUMENTS + " arguments");

String splatmapString = IRRuntimeHelpers.encodeSplatmap(splatmap);
@@ -231,7 +231,7 @@ public void invokeUnresolvedSuper(String name, int arity, boolean hasClosure, bo
}
}

public void invokeZSuper(String name, int arity, boolean hasClosure, boolean[] splatmap) {
public void invokeZSuper(String file, int line, String name, int arity, boolean hasClosure, boolean[] splatmap) {
if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to zsuper has more than " + MAX_ARGUMENTS + " arguments");

String splatmapString = IRRuntimeHelpers.encodeSplatmap(splatmap);
Loading