-
-
Notifications
You must be signed in to change notification settings - Fork 924
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Block variants of push/pop frame/binding instructions
* These haven't been hooked up with the interpreter, JIT, or IR generation passes yet. * These instructions will very likely be added as part of the AddCallProtocolInstructions pass. * More specialized instructions are needed for getting the call protocol code to work for blocks.
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
- 9.0.5.0
Showing
5 changed files
with
119 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
core/src/main/java/org/jruby/ir/instructions/PopBlockFrameInstr.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package org.jruby.ir.instructions; | ||
|
||
import org.jruby.ir.IRVisitor; | ||
import org.jruby.ir.Operation; | ||
import org.jruby.ir.operands.Operand; | ||
import org.jruby.ir.persistence.IRReaderDecoder; | ||
import org.jruby.ir.persistence.IRWriterEncoder; | ||
import org.jruby.ir.transformations.inlining.CloneInfo; | ||
import org.jruby.ir.transformations.inlining.SimpleCloneInfo; | ||
|
||
public class PopBlockFrameInstr extends OneOperandInstr implements FixedArityInstr { | ||
public PopBlockFrameInstr(Operand frame) { | ||
super(Operation.POP_BLOCK_FRAME, frame); | ||
} | ||
|
||
public Operand getFrame() { | ||
return getOperand1(); | ||
} | ||
|
||
@Override | ||
public Instr clone(CloneInfo ii) { | ||
return ii instanceof SimpleCloneInfo ? this : NopInstr.NOP; // FIXME: Is this correct | ||
} | ||
|
||
@Override | ||
public void encode(IRWriterEncoder e) { | ||
super.encode(e); | ||
e.encode(getFrame()); | ||
} | ||
|
||
public static PopBlockFrameInstr decode(IRReaderDecoder d) { | ||
return new PopBlockFrameInstr(d.decodeOperand()); | ||
} | ||
|
||
@Override | ||
public void visit(IRVisitor visitor) { | ||
visitor.PopBlockFrameInstr(this); | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
core/src/main/java/org/jruby/ir/instructions/PushBlockBindingInstr.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package org.jruby.ir.instructions; | ||
|
||
import org.jruby.ir.IRVisitor; | ||
import org.jruby.ir.Operation; | ||
import org.jruby.ir.operands.Operand; | ||
import org.jruby.ir.persistence.IRWriterEncoder; | ||
import org.jruby.ir.persistence.IRReaderDecoder; | ||
import org.jruby.ir.transformations.inlining.CloneInfo; | ||
|
||
public class PushBlockBindingInstr extends NoOperandInstr implements FixedArityInstr { | ||
public PushBlockBindingInstr() { | ||
super(Operation.PUSH_BLOCK_BINDING); | ||
} | ||
|
||
@Override | ||
public Instr clone(CloneInfo ii) { | ||
return this; // FIXME: This has to be wrong if pop_binding is conditionally noop'ing on inline | ||
} | ||
|
||
public static PushBlockBindingInstr decode(IRReaderDecoder d) { | ||
return new PushBlockBindingInstr(); | ||
} | ||
|
||
@Override | ||
public void visit(IRVisitor visitor) { | ||
visitor.PushBlockBindingInstr(this); | ||
} | ||
} |
43 changes: 43 additions & 0 deletions
43
core/src/main/java/org/jruby/ir/instructions/PushBlockFrameInstr.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package org.jruby.ir.instructions; | ||
|
||
import org.jruby.ir.IRVisitor; | ||
import org.jruby.ir.Operation; | ||
import org.jruby.ir.operands.Operand; | ||
import org.jruby.ir.operands.Variable; | ||
import org.jruby.ir.persistence.IRReaderDecoder; | ||
import org.jruby.ir.persistence.IRWriterEncoder; | ||
import org.jruby.ir.transformations.inlining.CloneInfo; | ||
import org.jruby.ir.transformations.inlining.SimpleCloneInfo; | ||
|
||
public class PushBlockFrameInstr extends NoOperandResultBaseInstr implements FixedArityInstr { | ||
private final String frameName; | ||
|
||
public PushBlockFrameInstr(Variable result, String frameName) { | ||
super(Operation.PUSH_BLOCK_FRAME, result); | ||
this.frameName = frameName; | ||
} | ||
|
||
public String getFrameName() { | ||
return frameName; | ||
} | ||
|
||
@Override | ||
public Instr clone(CloneInfo ii) { | ||
return ii instanceof SimpleCloneInfo ? this : NopInstr.NOP; // FIXME: Is this correct? | ||
} | ||
|
||
public static PushBlockFrameInstr decode(IRReaderDecoder d) { | ||
return new PushBlockFrameInstr(d.decodeVariable(), d.decodeString()); | ||
} | ||
|
||
@Override | ||
public void encode(IRWriterEncoder e) { | ||
super.encode(e); | ||
e.encode(getFrameName()); | ||
} | ||
|
||
@Override | ||
public void visit(IRVisitor visitor) { | ||
visitor.PushBlockFrameInstr(this); | ||
} | ||
} |