Skip to content

Instantly share code, notes, and snippets.

@lizmat
Created September 30, 2015 20:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lizmat/bc4111d25b34e52c5489 to your computer and use it in GitHub Desktop.
Save lizmat/bc4111d25b34e52c5489 to your computer and use it in GitHub Desktop.
Moving $!signature from Code to Block: cannot find method collisions while building CORE.settings
diff --git a/src/Perl6/Actions.nqp b/src/Perl6/Actions.nqp
index 957644c..46814de 100644
--- a/src/Perl6/Actions.nqp
+++ b/src/Perl6/Actions.nqp
@@ -7369,7 +7369,7 @@ Compilation unit '$file' contained the following violations:
:op('istrue'),
QAST::Op.new(
:op('callmethod'), :name('ACCEPTS'),
- nqp::istype($_, $*W.find_symbol(['Code']))
+ nqp::istype($_, $*W.find_symbol(['Block']))
?? QAST::Op.new( :op('p6capturelex'),
QAST::Op.new( :op('callmethod'), :name('clone'), $wval ) )
!! $wval,
@@ -7552,7 +7552,7 @@ Compilation unit '$file' contained the following violations:
$block.push(QAST::Stmts.new(autosink($to_thunk)));
$*W.pop_lexpad();
reference_to_code_object(
- $*W.create_simple_code_object($block, 'Code'),
+ $*W.create_simple_code_object($block, 'Block'),
$block);
}
diff --git a/src/Perl6/Metamodel/BOOTSTRAP.nqp b/src/Perl6/Metamodel/BOOTSTRAP.nqp
index 9ec6b24..37d788e 100644
--- a/src/Perl6/Metamodel/BOOTSTRAP.nqp
+++ b/src/Perl6/Metamodel/BOOTSTRAP.nqp
@@ -872,7 +872,7 @@ my class Binder {
method bind_sig($capture) {
# Get signature and lexpad.
my $caller := nqp::getcodeobj(nqp::callercode());
- my $sig := nqp::getattr($caller, Code, '$!signature');
+ my $sig := nqp::getattr($caller, Block, '$!signature');
my $lexpad := nqp::ctxcaller(nqp::ctx());
# Call binder.
@@ -1064,7 +1064,7 @@ my class Binder {
}
method get_return_type($code) {
- nqp::getattr(nqp::getattr($code, Code, '$!signature'), Signature, '$!returns')
+ nqp::getattr(nqp::getattr($code, Block, '$!signature'), Signature, '$!returns')
}
}
BEGIN { nqp::p6setbinder(Binder); } # We need it in for the next BEGIN block
@@ -1547,11 +1547,9 @@ BEGIN {
# class Code {
# has Mu $!do; # Low level code object
- # has Mu $!signature; # Signature object
# has Mu $!compstuff; # Place for the compiler to hang stuff
Code.HOW.add_parent(Code, Any);
Code.HOW.add_attribute(Code, BOOTSTRAPATTR.new(:name<$!do>, :type(Mu), :package(Code)));
- Code.HOW.add_attribute(Code, BOOTSTRAPATTR.new(:name<$!signature>, :type(Mu), :package(Code)));
Code.HOW.add_attribute(Code, BOOTSTRAPATTR.new(:name<$!compstuff>, :type(Mu), :package(Code)));
# Need clone in here, plus generics instantiation.
@@ -1608,9 +1606,11 @@ BEGIN {
Code.HOW.compose_invocation(Code);
# class Block is Code {
+ # has Mu $!signature; # Signature object
# has Mu $!phasers; # phasers for this block
# has Mu $!why;
Block.HOW.add_parent(Block, Code);
+ Block.HOW.add_attribute(Block, BOOTSTRAPATTR.new(:name<$!signature>, :type(Mu), :package(Block)));
Block.HOW.add_attribute(Block, BOOTSTRAPATTR.new(:name<$!phasers>, :type(Mu), :package(Block)));
Block.HOW.add_attribute(Block, BOOTSTRAPATTR.new(:name<$!why>, :type(Mu), :package(Block)));
Block.HOW.add_method(Block, 'clone', nqp::getstaticcode(sub ($self) {
@@ -1826,7 +1826,7 @@ BEGIN {
my @graph;
for @candidates -> $candidate {
# Get hold of signature.
- my $sig := nqp::getattr($candidate, Code, '$!signature');
+ my $sig := nqp::getattr($candidate, Block, '$!signature');
my @params := nqp::getattr($sig, Signature, '$!params');
# Create it an entry.
@@ -2197,7 +2197,7 @@ BEGIN {
# If we haven't got a possibles storage space, allocate it now.
$new_possibles := [] unless nqp::islist($new_possibles);
- my $sig := nqp::getattr($sub, Code, '$!signature');
+ my $sig := nqp::getattr($sub, Block, '$!signature');
unless $done_bind_check {
# Need a copy of the capture, as we may later do a
# multi-dispatch when evaluating the constraint.
@@ -3022,7 +3022,7 @@ nqp::sethllconfig('perl6', nqp::hash(
'bind_error', -> $capture {
# Get signature and lexpad.
my $caller := nqp::getcodeobj(nqp::callercode());
- my $sig := nqp::getattr($caller, Code, '$!signature');
+ my $sig := nqp::getattr($caller, Block, '$!signature');
my $lexpad := nqp::ctxcaller(nqp::ctx());
# Run full binder to produce an error.
diff --git a/src/Perl6/World.nqp b/src/Perl6/World.nqp
index ed1e967..78a69b9 100644
--- a/src/Perl6/World.nqp
+++ b/src/Perl6/World.nqp
@@ -1774,7 +1774,7 @@ class Perl6::World is HLL::World {
my $block := self.push_lexpad($/);
$block.push($to_thunk);
self.pop_lexpad();
- self.create_simple_code_object($block, 'Code');
+ self.create_simple_code_object($block, 'Block');
}
# Creates a simple code object with an empty signature
@@ -1806,7 +1806,7 @@ class Perl6::World is HLL::World {
# Attaches a signature to a code object, and gives the
# signature its backlink to the code object.
method attach_signature($code, $signature) {
- my $code_type := self.find_symbol(['Code']);
+ my $code_type := self.find_symbol(['Block']);
my $sig_type := self.find_symbol(['Signature']);
nqp::bindattr($code, $code_type, '$!signature', $signature);
nqp::bindattr($signature, $sig_type, '$!code', $code);
@@ -2068,7 +2068,7 @@ class Perl6::World is HLL::World {
# Add as phaser.
$block[0].push($phaser_block);
self.add_phaser($/, $phaser,
- self.create_code_object($phaser_block, 'Code',
+ self.create_code_object($phaser_block, 'Block',
self.create_signature(nqp::hash('parameter_objects', []))));
}
@@ -2696,7 +2696,7 @@ class Perl6::World is HLL::World {
# Set up capturing code.
my $capturer := self.cur_lexpad();
my $c_block := QAST::Block.new( :blocktype('declaration_static') );
- self.create_simple_code_object($c_block, 'Code');
+ self.create_simple_code_object($c_block, 'Block');
$capturer[0].push(QAST::Op.new(
:op('callmethod'), :name('resolve'),
QAST::WVal.new( :value($fixup_list) ),
diff --git a/src/core/Block.pm b/src/core/Block.pm
index 44d2d5f..0d140a2 100644
--- a/src/core/Block.pm
+++ b/src/core/Block.pm
@@ -1,8 +1,19 @@
my class Block { # declared in BOOTSTRAP
# class Block is Code {
+ # has Mu $!signature; # Signature object
# has Mu $!phasers;
# has Mu $!why;
+ multi method ACCEPTS(Code:D $self: Mu $topic) {
+ $self.count ?? $self($topic) !! $self()
+ }
+
+ method signature(Code:D:) { $!signature }
+ method arity(Code:D:) { $!signature.arity }
+ method count(Code:D:) { $!signature.count }
+ method of(Code:D:) { $!signature.returns }
+ method returns(Code:D:) { $!signature.returns }
+
method add_phaser(Str $name, &block) {
nqp::isnull($!phasers) &&
nqp::bindattr(self, Block, '$!phasers', nqp::hash());
diff --git a/src/core/Code.pm b/src/core/Code.pm
index e61b9c3..18743d9 100644
--- a/src/core/Code.pm
+++ b/src/core/Code.pm
@@ -1,19 +1,8 @@
my class Code does Callable { # declared in BOOTSTRAP
# class Code is Any {
# has Mu $!do; # Low level code object
- # has Mu $!signature; # Signature object
# has Mu $!compstuff; # Place for the compiler to hang stuff
- multi method ACCEPTS(Code:D $self: Mu $topic) {
- $self.count ?? $self($topic) !! $self()
- }
-
- method arity(Code:D:) { $!signature.arity }
-
- method count(Code:D:) { $!signature.count }
-
- method signature(Code:D:) { $!signature }
-
multi method Str(Code:D:) {
warn( self.WHAT.perl ~ " object coerced to string (please use .gist or .perl to do that)"); self.name
}
diff --git a/src/core/Routine.pm b/src/core/Routine.pm
index 2890fb1..9c4a3fe 100644
--- a/src/core/Routine.pm
+++ b/src/core/Routine.pm
@@ -20,8 +20,6 @@ my class Routine { # declared in BOOTSTRAP
# has Mu $!dispatch_order;
# has Mu $!dispatch_cache;
- method of() { self.signature.returns }
- method returns() { self.signature.returns }
method onlystar() { nqp::p6bool($!onlystar) }
method candidates() {
Stage parse : Cannot find method 'collisions'
at gen/moar/m-Metamodel.nqp:2635 (blib/Perl6/Metamodel.moarvm:apply:65)
from gen/moar/m-Metamodel.nqp:2812 (blib/Perl6/Metamodel.moarvm:compose:94)
from gen/moar/m-Metamodel.nqp:1296 (blib/Perl6/Metamodel.moarvm:generate_mixin:138)
from gen/moar/m-Metamodel.nqp:1252 (blib/Perl6/Metamodel.moarvm:mixin:54)
from gen/moar/m-CORE.setting:410 (<ephemeral file>:trait_mod:<is>:63)
from gen/moar/m-CORE.setting:66 (<ephemeral file>:trait_mod:<is>:25)
from src/Perl6/World.nqp:2616 (blib/Perl6/World.moarvm::10)
from src/Perl6/World.nqp:3705 (blib/Perl6/World.moarvm:ex-handle:0)
from src/Perl6/World.nqp:2637 (blib/Perl6/World.moarvm:apply_trait:70)
from gen/moar/m-Perl6-Actions.nqp:4483 (blib/Perl6/Actions.moarvm::37)
from gen/moar/m-Perl6-Actions.nqp:2943 (blib/Perl6/Actions.moarvm::13)
from src/Perl6/World.nqp:3705 (blib/Perl6/World.moarvm:ex-handle:0)
from gen/moar/m-Perl6-Actions.nqp:2943 (blib/Perl6/Actions.moarvm::44)
from gen/moar/m-Perl6-Actions.nqp:2942 (blib/Perl6/Actions.moarvm:routine_def:2387)
from gen/moar/stage2/QRegex.nqp:1313 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!reduce:25)
from gen/moar/stage2/QRegex.nqp:1267 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!cursor_pass:0)
from src/Perl6/Grammar.nqp:2538 (blib/Perl6/Grammar.moarvm:routine_def:1647)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:routine_declarator:sym<sub>:147)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:routine_declarator:10)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:term:sym<routine_declarator>:57)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from src/Perl6/Grammar.nqp:3638 (blib/Perl6/Grammar.moarvm:termish:0)
from gen/moar/stage2/NQPHLL.nqp:681 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:EXPR:74)
from src/Perl6/Grammar.nqp:3679 (blib/Perl6/Grammar.moarvm:EXPR:28)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:arglist:128)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:semiarglist:69)
from src/Perl6/Grammar.nqp:3218 (blib/Perl6/Grammar.moarvm:args:135)
from src/Perl6/Grammar.nqp:3112 (blib/Perl6/Grammar.moarvm:term:sym<identifier>:191)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from src/Perl6/Grammar.nqp:3638 (blib/Perl6/Grammar.moarvm:termish:0)
from gen/moar/stage2/NQPHLL.nqp:681 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:EXPR:74)
from src/Perl6/Grammar.nqp:3679 (blib/Perl6/Grammar.moarvm:EXPR:28)
from src/Perl6/Grammar.nqp:4131 (blib/Perl6/Grammar.moarvm:infix:sym<?? !!>:90)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from <unknown>:1 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:infix:10)
from src/Perl6/Grammar.nqp:3711 (blib/Perl6/Grammar.moarvm:infixish:714)
from gen/moar/stage2/NQPHLL.nqp:738 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:EXPR:304)
from src/Perl6/Grammar.nqp:3679 (blib/Perl6/Grammar.moarvm:EXPR:28)
from src/Perl6/Grammar.nqp:1209 (blib/Perl6/Grammar.moarvm:statement:395)
from src/Perl6/Grammar.nqp:1144 (blib/Perl6/Grammar.moarvm:statementlist:280)
from src/Perl6/Grammar.nqp:1325 (blib/Perl6/Grammar.moarvm:blockoid:246)
from src/Perl6/Grammar.nqp:1273 (blib/Perl6/Grammar.moarvm:pblock:675)
from src/Perl6/Grammar.nqp:1242 (blib/Perl6/Grammar.moarvm:xblock:136)
from src/Perl6/Grammar.nqp:1385 (blib/Perl6/Grammar.moarvm:statement_control:sym<if>:225)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:statement_control:10)
from src/Perl6/Grammar.nqp:1209 (blib/Perl6/Grammar.moarvm:statement:365)
from src/Perl6/Grammar.nqp:1144 (blib/Perl6/Grammar.moarvm:statementlist:280)
from src/Perl6/Grammar.nqp:1325 (blib/Perl6/Grammar.moarvm:blockoid:246)
from src/Perl6/Grammar.nqp:2592 (blib/Perl6/Grammar.moarvm:method_def:2112)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:routine_declarator:sym<method>:147)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:routine_declarator:10)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:term:sym<routine_declarator>:57)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from src/Perl6/Grammar.nqp:3638 (blib/Perl6/Grammar.moarvm:termish:0)
from gen/moar/stage2/NQPHLL.nqp:681 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:EXPR:74)
from src/Perl6/Grammar.nqp:3679 (blib/Perl6/Grammar.moarvm:EXPR:28)
from src/Perl6/Grammar.nqp:1209 (blib/Perl6/Grammar.moarvm:statement:395)
from src/Perl6/Grammar.nqp:1144 (blib/Perl6/Grammar.moarvm:statementlist:280)
from src/Perl6/Grammar.nqp:1325 (blib/Perl6/Grammar.moarvm:blockoid:246)
from src/Perl6/Grammar.nqp:2266 (blib/Perl6/Grammar.moarvm:package_def:2370)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:package_declarator:sym<class>:175)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:package_declarator:10)
from src/Perl6/Grammar.nqp:2383 (blib/Perl6/Grammar.moarvm:scoped:378)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:scope_declarator:sym<my>:107)
from gen/moar/stage2/QRegex.nqp:1350 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:!protoregex:109)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:scope_declarator:10)
from <unknown>:1 (blib/Perl6/Grammar.moarvm:term:sym<scope_declarator>:57)
re/nqp/lib/NQPHLL.moarvm:EXPR:74)
from src/Perl6/Grammar.nqp:3679 (blib/Perl6/Grammar.moarvm:EXPR:28)
from src/Perl6/Grammar.nqp:1209 (blib/Perl6/Grammar.moarvm:statement:395)
from src/Perl6/Grammar.nqp:1144 (blib/Perl6/Grammar.moarvm:statementlist:280)
from gen/moar/stage2/NQPHLL.nqp:898 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:LANG:146)
from src/Perl6/Grammar.nqp:1536 (blib/Perl6/Grammar.moarvm:FOREIGN_LANG:67)
from src/Perl6/Grammar.nqp:1121 (blib/Perl6/Grammar.moarvm:comp_unit:1048)
from src/Perl6/Grammar.nqp:416 (blib/Perl6/Grammar.moarvm:TOP:528)
from gen/moar/stage2/QRegex.nqp:2021 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/QRegex.moarvm:parse:44)
from gen/moar/stage2/NQPHLL.nqp:1585 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:parse:80)
from gen/moar/stage2/NQPHLL.nqp:1541 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:compile:202)
from gen/moar/stage2/NQPHLL.nqp:1277 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:eval:62)
from gen/moar/stage2/NQPHLL.nqp:1497 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:evalfiles:91)
from gen/moar/stage2/NQPHLL.nqp:1391 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:command_eval:214)
from src/Perl6/Compiler.nqp:65 (blib/Perl6/Compiler.moarvm:command_eval:93)
from gen/moar/stage2/NQPHLL.nqp:1365 (/Users/liz/Github/rakudo.moar/install/share/nqp/lib/NQPHLL.moarvm:command_line:114)
from gen/moar/m-main.nqp:39 (perl6.moarvm:MAIN:18)
from gen/moar/m-main.nqp:35 (perl6.moarvm:<mainline>:197)
from <unknown>:1 (perl6.moarvm:<main>:8)
from <unknown>:1 (perl6.moarvm:<entry>:9)
make: *** [CORE.setting.moarvm] Error 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment