Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Start passing along CodeRef.
This is in preparation for moving CallFrame creation out of invoke.
  • Loading branch information
jnthn committed Mar 2, 2013
1 parent 2159682 commit d0c8319
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
7 changes: 6 additions & 1 deletion lib/QAST/JASTCompiler.nqp
Expand Up @@ -1984,10 +1984,14 @@ class QAST::CompilerJAST {
$cra.append(JAST::Instruction.new( :op('getstatic'),
'Ljava/lang/Void;', 'TYPE', $TYPE_CLASS ));
$cra.append(JAST::PushCVal.new( :value($TYPE_TC) ));
$cra.append(JAST::PushIndex.new( :value(1) ));
$cra.append(JAST::PushIndex.new( :value(2) ));
$cra.append(JAST::Instruction.new( :op('newarray'), $TYPE_CLASS ));
$cra.append(JAST::Instruction.new( :op('dup') ));
$cra.append(JAST::PushIndex.new( :value(0) ));
$cra.append(JAST::PushCVal.new( :value($TYPE_CR) ));
$cra.append(JAST::Instruction.new( :op('aastore') ));
$cra.append(JAST::Instruction.new( :op('dup') ));
$cra.append(JAST::PushIndex.new( :value(1) ));
$cra.append(JAST::PushCVal.new( :value($TYPE_CSD) ));
$cra.append(JAST::Instruction.new( :op('aastore') ));
$cra.append(JAST::Instruction.new( :op('invokestatic'),
Expand Down Expand Up @@ -2619,6 +2623,7 @@ class QAST::CompilerJAST {

# Always take ThreadContext and callsite descriptor as arguments.
$*JMETH.add_argument('tc', $TYPE_TC);
$*JMETH.add_argument('cr', $TYPE_CR);
$*JMETH.add_argument('csd', $TYPE_CSD);

# Set up temporaries allocator.
Expand Down
2 changes: 1 addition & 1 deletion src/org/perl6/nqp/runtime/Ops.java
Expand Up @@ -1265,7 +1265,7 @@ private static void invokeInternal(ThreadContext tc, SixModelObject invokee, Cal

try {
// Do the invocation.
cr.staticInfo.mh.invokeExact(tc, csd);
cr.staticInfo.mh.invokeExact(tc, cr, csd);
}
catch (UnwindException e) {
throw e;
Expand Down
27 changes: 14 additions & 13 deletions src/org/perl6/nqp/sixmodel/KnowHOWMethods.java
Expand Up @@ -15,7 +15,7 @@
* for code reference like things.
*/
public class KnowHOWMethods extends CompilationUnit {
public void new_type(ThreadContext tc, CallSiteDescriptor csd) {
public void new_type(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
/* Get arguments. */
csd = Ops.checkarity(tc.curFrame, csd, 1, 1);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
Expand Down Expand Up @@ -51,7 +51,7 @@ public void new_type(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void add_method(ThreadContext tc, CallSiteDescriptor csd) {
public void add_method(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 4, 4);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
String name = Ops.posparam_s(tc.curFrame, csd, 2);
Expand All @@ -66,7 +66,7 @@ public void add_method(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void add_attribute(ThreadContext tc, CallSiteDescriptor csd) {
public void add_attribute(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 3, 3);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
SixModelObject attribute = Ops.posparam_o(tc.curFrame, csd, 2);
Expand All @@ -82,7 +82,7 @@ public void add_attribute(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void compose(ThreadContext tc, CallSiteDescriptor csd) {
public void compose(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 2, 2);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
SixModelObject type_obj = Ops.posparam_o(tc.curFrame, csd, 1);
Expand Down Expand Up @@ -148,7 +148,7 @@ public void compose(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void attributes(ThreadContext tc, CallSiteDescriptor csd) {
public void attributes(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 2, 2);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);

Expand All @@ -167,7 +167,7 @@ public void attributes(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void methods(ThreadContext tc, CallSiteDescriptor csd) {
public void methods(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 2, 2);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);

Expand All @@ -186,7 +186,7 @@ public void methods(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void name(ThreadContext tc, CallSiteDescriptor csd) {
public void name(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 2, 2);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);

Expand All @@ -197,7 +197,7 @@ public void name(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void attr_new(ThreadContext tc, CallSiteDescriptor csd) {
public void attr_new(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
/* Process arguments. */
csd = Ops.checkarity(tc.curFrame, csd, 1, 1);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
Expand All @@ -220,28 +220,28 @@ public void attr_new(ThreadContext tc, CallSiteDescriptor csd) {
tc.curFrame.leave();
}

public void attr_compose(ThreadContext tc, CallSiteDescriptor csd) {
public void attr_compose(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 1, 1);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
Ops.return_o(self, tc.curFrame);
tc.curFrame.leave();
}

public void attr_name(ThreadContext tc, CallSiteDescriptor csd) {
public void attr_name(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 1, 1);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
Ops.return_s(((KnowHOWAttributeInstance)self).name, tc.curFrame);
tc.curFrame.leave();
}

public void attr_type(ThreadContext tc, CallSiteDescriptor csd) {
public void attr_type(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 1, 1);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
Ops.return_o(((KnowHOWAttributeInstance)self).type, tc.curFrame);
tc.curFrame.leave();
}

public void attr_box_target(ThreadContext tc, CallSiteDescriptor csd) {
public void attr_box_target(ThreadContext tc, CodeRef cr, CallSiteDescriptor csd) {
csd = Ops.checkarity(tc.curFrame, csd, 1, 1);
SixModelObject self = Ops.posparam_o(tc.curFrame, csd, 0);
Ops.return_i(((KnowHOWAttributeInstance)self).box_target, tc.curFrame);
Expand All @@ -253,7 +253,8 @@ public CodeRef[] getCodeRefs() {
String[] snull = null;
long[][] hnull = new long[0][];
short zero = 0;
MethodType mt = MethodType.methodType(void.class, ThreadContext.class, CallSiteDescriptor.class);
MethodType mt = MethodType.methodType(void.class, ThreadContext.class,
CodeRef.class, CallSiteDescriptor.class);
Lookup l = MethodHandles.lookup();
try {
refs[0] = new CodeRef(this, l.findVirtual(KnowHOWMethods.class, "new_type", mt).bindTo(this),
Expand Down

0 comments on commit d0c8319

Please sign in to comment.