diff --git a/Body.pm b/Body.pm index c576396f..752a0272 100644 --- a/Body.pm +++ b/Body.pm @@ -152,7 +152,7 @@ use CgOp (); } for my $c (@components) { - $pkgcg = CgOp::rawscall('Kernel.PackageLookup', CgOp::fetch($pkgcg), + $pkgcg = CgOp::rawsccall('Kernel.PackageLookup', CgOp::fetch($pkgcg), CgOp::clr_string($c)); } diff --git a/CgOp.pm b/CgOp.pm index c9e92406..0a2fe282 100644 --- a/CgOp.pm +++ b/CgOp.pm @@ -197,11 +197,11 @@ use warnings; } sub fetch { - rawscall("Kernel.Fetch", $_[0]); + rawsccall("Kernel.Fetch", $_[0]); } sub how { - rawcall($_[0], "HOW"); + rawccall($_[0], "HOW"); } sub getfield { @@ -275,12 +275,12 @@ use warnings; } sub bind { - rawscall('Kernel.Bind', $_[1], getfield('lv', $_[2]), + rawsccall('Kernel.Bind', $_[1], getfield('lv', $_[2]), bool($_[0]), bool(0)); } sub assign { - rawscall('Kernel.Assign', getfield('lv', $_[0]), + rawsccall('Kernel.Assign', getfield('lv', $_[0]), getfield('lv', $_[1])); } @@ -368,13 +368,25 @@ use warnings; sub rawscall { my ($name, @args) = @_; CgOp::Primitive->new(op => [ 'clr_call_direct', $name, scalar @args ], - zyg => [ @args ], is_cps_call => 1); #XXX + zyg => [ @args ]); } sub rawcall { my ($inv, $name, @args) = @_; CgOp::Primitive->new(op => [ 'clr_call_virt', $name, scalar @args ], - zyg => [ $inv, @args ], is_cps_call => 1); #XXX + zyg => [ $inv, @args ]); + } + + sub rawsccall { + my ($name, @args) = @_; + CgOp::Primitive->new(op => [ 'clr_call_direct', $name, scalar @args ], + zyg => [ @args ], is_cps_call => 1); + } + + sub rawccall { + my ($inv, $name, @args) = @_; + CgOp::Primitive->new(op => [ 'clr_call_virt', $name, scalar @args ], + zyg => [ $inv, @args ], is_cps_call => 1); } sub rawsget { diff --git a/Decl.pm b/Decl.pm index 4f522cb5..aa233818 100644 --- a/Decl.pm +++ b/Decl.pm @@ -481,7 +481,7 @@ use CgOp; my $first = CgOp::cast('Variable', CgOp::getindex(shift(@path), $lex)); for (@path) { - $first = CgOp::rawscall('Kernel.PackageLookup', + $first = CgOp::rawsccall('Kernel.PackageLookup', CgOp::fetch($first), CgOp::clr_string($_)); } diff --git a/Sig.pm b/Sig.pm index 452879bd..e4951687 100644 --- a/Sig.pm +++ b/Sig.pm @@ -57,7 +57,7 @@ use 5.010; CgOp::box('LLArray', CgOp::rawnew('List'))), CgOp::setindex('rest', CgOp::getfield('slots', $do), CgOp::box('LLArray', - CgOp::rawscall('Kernel.SlurpyHelper', + CgOp::rawsccall('Kernel.SlurpyHelper', CgOp::int($$ixp)))), CgOp::newscalar($do))})); } else {