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: 19f22609218f
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4cd1fbc4b5ec
Choose a head ref
  • 4 commits
  • 26 files changed
  • 1 contributor

Commits on Jan 29, 2016

  1. Copy the full SHA
    2256dc2 View commit details
  2. Copy the full SHA
    472e6fb View commit details
  3. Restructure reified ivar classes.

    * Introduce common superclass.
    * Separate hierarchies to avoid VM issues and long constructor
      chains.
    * Fix up indy bootstrap logic to work with the new structure.
    headius committed Jan 29, 2016
    Copy the full SHA
    90454a2 View commit details
  4. Copy the full SHA
    4cd1fbc View commit details
Showing with 1,121 additions and 195 deletions.
  1. +127 −0 core/src/main/java/org/jruby/ReifiedRubyObject.java
  2. +26 −5 core/src/main/java/org/jruby/RubyObjectVar0.java
  3. +38 −6 core/src/main/java/org/jruby/RubyObjectVar1.java
  4. +50 −6 core/src/main/java/org/jruby/RubyObjectVar2.java
  5. +62 −6 core/src/main/java/org/jruby/RubyObjectVar3.java
  6. +74 −6 core/src/main/java/org/jruby/RubyObjectVar4.java
  7. +86 −6 core/src/main/java/org/jruby/RubyObjectVar5.java
  8. +98 −6 core/src/main/java/org/jruby/RubyObjectVar6.java
  9. +110 −6 core/src/main/java/org/jruby/RubyObjectVar7.java
  10. +122 −6 core/src/main/java/org/jruby/RubyObjectVar8.java
  11. +134 −6 core/src/main/java/org/jruby/RubyObjectVar9.java
  12. +127 −0 core/src/main/java/org/jruby/internal/runtime/AbstractIRMethod.java
  13. +16 −21 core/src/main/java/org/jruby/internal/runtime/methods/CompiledIRMethod.java
  14. +4 −38 core/src/main/java/org/jruby/internal/runtime/methods/InterpretedIRMethod.java
  15. +3 −53 core/src/main/java/org/jruby/internal/runtime/methods/MixedModeIRMethod.java
  16. +14 −4 core/src/main/java/org/jruby/ir/targets/Bootstrap.java
  17. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar0.java
  18. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar1.java
  19. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar2.java
  20. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar3.java
  21. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar4.java
  22. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar5.java
  23. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar6.java
  24. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar7.java
  25. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar8.java
  26. +3 −2 core/src/main/java/org/jruby/runtime/ivars/VariableAccessorVar9.java
127 changes: 127 additions & 0 deletions core/src/main/java/org/jruby/ReifiedRubyObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/*
***** BEGIN LICENSE BLOCK *****
* Version: EPL 1.0/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Eclipse Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.eclipse.org/legal/epl-v10.html
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the EPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the EPL, the GPL or the LGPL.
***** END LICENSE BLOCK *****/
package org.jruby;

/**
* A RubyObject that provides a direct field for up to ten stored variables, to avoid
* the overhead of creating and managing a separate array and reference.
*/
public abstract class ReifiedRubyObject extends RubyObject {
public ReifiedRubyObject(Ruby runtime, RubyClass metaClass) {
super(runtime, metaClass);
}

@Override
public Object getVariable(int i) {
return super.getVariable(i);
}

@Override
public void setVariable(int index, Object value) {
super.setVariable(index, value);
}

public Object getVariable0() {
return getVariable(0);
}

public Object getVariable1() {
return getVariable(1);
}

public Object getVariable2() {
return getVariable(2);
}

public Object getVariable3() {
return getVariable(3);
}

public Object getVariable4() {
return getVariable(4);
}

public Object getVariable5() {
return getVariable(5);
}

public Object getVariable6() {
return getVariable(6);
}

public Object getVariable7() {
return getVariable(7);
}

public Object getVariable8() {
return getVariable(8);
}

public Object getVariable9() {
return getVariable(9);
}

public void setVariable0(Object value) {
setVariable(0, value);
}

public void setVariable1(Object value) {
setVariable(1, value);
}

public void setVariable2(Object value) {
setVariable(2, value);
}

public void setVariable3(Object value) {
setVariable(3, value);
}

public void setVariable4(Object value) {
setVariable(4, value);
}

public void setVariable5(Object value) {
setVariable(5, value);
}

public void setVariable6(Object value) {
setVariable(6, value);
}

public void setVariable7(Object value) {
setVariable(7, value);
}

public void setVariable8(Object value) {
setVariable(8, value);
}

public void setVariable9(Object value) {
setVariable(9, value);
}
}
31 changes: 26 additions & 5 deletions core/src/main/java/org/jruby/RubyObjectVar0.java
Original file line number Diff line number Diff line change
@@ -30,18 +30,39 @@
* A RubyObject that provides a direct field for one stored variable, to avoid
* the overhead of creating and managing a separate array and reference.
*/
public class RubyObjectVar0 extends RubyObject {
public class RubyObjectVar0 extends ReifiedRubyObject {
/**
* Standard path for object creation. Objects are entered into ObjectSpace
* only if ObjectSpace is enabled.
*/
public RubyObjectVar0(Ruby runtime, RubyClass metaClass) {
super(runtime, metaClass);
}

public static void setVariableChecked(RubyObjectVar0 self, Object value) {
self.ensureInstanceVariablesSettable();
self.var0 = value;

@Override
public Object getVariable(int i) {
switch (i) {
case 0: return var0;
default: return super.getVariable(i);
}
}

@Override
public void setVariable(int index, Object value) {
ensureInstanceVariablesSettable();
switch (index) {
case 0: var0 = value; break;
default: super.setVariable(index, value);
}
}

public Object getVariable0() {
return var0;
}

public void setVariable0(Object value) {
ensureInstanceVariablesSettable();
var0 = value;
}

public Object var0;
44 changes: 38 additions & 6 deletions core/src/main/java/org/jruby/RubyObjectVar1.java
Original file line number Diff line number Diff line change
@@ -30,19 +30,51 @@
* A RubyObject that provides a direct field for two stored variables, to avoid
* the overhead of creating and managing a separate array and reference.
*/
public class RubyObjectVar1 extends RubyObjectVar0 {
public class RubyObjectVar1 extends ReifiedRubyObject {
/**
* Standard path for object creation. Objects are entered into ObjectSpace
* only if ObjectSpace is enabled.
*/
public RubyObjectVar1(Ruby runtime, RubyClass metaClass) {
super(runtime, metaClass);
}

public static void setVariableChecked(RubyObjectVar1 self, Object value) {
self.ensureInstanceVariablesSettable();
self.var1 = value;

public Object getVariable(int i) {
switch (i) {
case 0: return var0;
case 1: return var1;
default: return super.getVariable(i);
}
}

@Override
public void setVariable(int index, Object value) {
ensureInstanceVariablesSettable();
switch (index) {
case 0: var0 = value; break;
case 1: var1 = value; break;
default: super.setVariable(index, value);
}
}

public Object getVariable0() {
return var0;
}

public Object getVariable1() {
return var1;
}

public void setVariable0(Object value) {
ensureInstanceVariablesSettable();
var0 = value;
}


public void setVariable1(Object value) {
ensureInstanceVariablesSettable();
var1 = value;
}

public Object var0;
public Object var1;
}
56 changes: 50 additions & 6 deletions core/src/main/java/org/jruby/RubyObjectVar2.java
Original file line number Diff line number Diff line change
@@ -30,19 +30,63 @@
* A RubyObject that provides a direct field for three stored variables, to avoid
* the overhead of creating and managing a separate array and reference.
*/
public class RubyObjectVar2 extends RubyObjectVar1 {
public class RubyObjectVar2 extends ReifiedRubyObject {
/**
* Standard path for object creation. Objects are entered into ObjectSpace
* only if ObjectSpace is enabled.
*/
public RubyObjectVar2(Ruby runtime, RubyClass metaClass) {
super(runtime, metaClass);
}

public static void setVariableChecked(RubyObjectVar2 self, Object value) {
self.ensureInstanceVariablesSettable();
self.var2 = value;

public Object getVariable(int i) {
switch (i) {
case 0: return var0;
case 1: return var1;
case 2: return var2;
default: return super.getVariable(i);
}
}

@Override
public void setVariable(int index, Object value) {
ensureInstanceVariablesSettable();
switch (index) {
case 0: var0 = value; break;
case 1: var1 = value; break;
case 2: var2 = value; break;
default: super.setVariable(index, value);
}
}

public Object getVariable0() {
return var0;
}

public Object getVariable1() {
return var1;
}

public Object getVariable2() {
return var2;
}

public void setVariable0(Object value) {
ensureInstanceVariablesSettable();
var0 = value;
}

public void setVariable1(Object value) {
ensureInstanceVariablesSettable();
var1 = value;
}

public void setVariable2(Object value) {
ensureInstanceVariablesSettable();
var2 = value;
}


public Object var0;
public Object var1;
public Object var2;
}
68 changes: 62 additions & 6 deletions core/src/main/java/org/jruby/RubyObjectVar3.java
Original file line number Diff line number Diff line change
@@ -30,19 +30,75 @@
* A RubyObject that provides a direct field for four stored variables, to avoid
* the overhead of creating and managing a separate array and reference.
*/
public class RubyObjectVar3 extends RubyObjectVar2 {
public class RubyObjectVar3 extends ReifiedRubyObject {
/**
* Standard path for object creation. Objects are entered into ObjectSpace
* only if ObjectSpace is enabled.
*/
public RubyObjectVar3(Ruby runtime, RubyClass metaClass) {
super(runtime, metaClass);
}

public static void setVariableChecked(RubyObjectVar3 self, Object value) {
self.ensureInstanceVariablesSettable();
self.var3 = value;

public Object getVariable(int i) {
switch (i) {
case 0: return var0;
case 1: return var1;
case 2: return var2;
case 3: return var3;
default: return super.getVariable(i);
}
}

@Override
public void setVariable(int index, Object value) {
ensureInstanceVariablesSettable();
switch (index) {
case 0: var0 = value; break;
case 1: var1 = value; break;
case 2: var2 = value; break;
case 3: var3 = value; break;
default: super.setVariable(index, value);
}
}

public Object getVariable0() {
return var0;
}

public Object getVariable1() {
return var1;
}

public Object getVariable2() {
return var2;
}

public Object getVariable3() {
return var3;
}

public void setVariable0(Object value) {
ensureInstanceVariablesSettable();
var0 = value;
}

public void setVariable1(Object value) {
ensureInstanceVariablesSettable();
var1 = value;
}


public void setVariable2(Object value) {
ensureInstanceVariablesSettable();
var2 = value;
}

public void setVariable3(Object value) {
ensureInstanceVariablesSettable();
var3 = value;
}

public Object var0;
public Object var1;
public Object var2;
public Object var3;
}
Loading