diff --git a/src/Raku/Actions.nqp b/src/Raku/Actions.nqp index 8415b87ebe5..07587be7ea3 100644 --- a/src/Raku/Actions.nqp +++ b/src/Raku/Actions.nqp @@ -1629,7 +1629,6 @@ class Raku::Actions is HLL::Actions does Raku::CommonActions { } else { $*PACKAGE := my $package := self.r('Package').new: :$declarator, :$how, :$name, :$scope; - $package.resolve-with($*R); } self.set-declarand($/, $*PACKAGE); } diff --git a/src/Raku/Grammar.nqp b/src/Raku/Grammar.nqp index 7a185e72172..0ea5c4e5a4b 100644 --- a/src/Raku/Grammar.nqp +++ b/src/Raku/Grammar.nqp @@ -458,7 +458,7 @@ role Raku::Common { method check_variable($var) { my $ast := $var.ast; if nqp::eqaddr($ast.WHAT,self.actions.r('Var', 'Lexical').WHAT) { - $ast.resolve-with($*R); + $ast.ensure-parse-performed($*R, $*CU.context); unless $ast.is-resolved { if $ast.sigil eq '&' { if $ast.IMPL-IS-META-OP { diff --git a/src/Raku/ast/base.rakumod b/src/Raku/ast/base.rakumod index 2628fb0ef58..23f620a280b 100644 --- a/src/Raku/ast/base.rakumod +++ b/src/Raku/ast/base.rakumod @@ -119,11 +119,6 @@ class RakuAST::Node { $is-parse-time := 0; } - # TODO Move all resolve-with into parse time or begin time - if nqp::istype(self, RakuAST::Lookup) && !self.is-resolved { - self.resolve-with($resolver); - } - # Visit children. my int $is-package := nqp::istype(self, RakuAST::Package); $resolver.push-scope(self) if $is-scope; @@ -161,15 +156,6 @@ class RakuAST::Node { $resolver.pop-scope() if $is-scope; $resolver.pop-package() if $is-package; - # Do resolution. - # TODO eliminate in favor of it happening at explicit parse/begin/check times - if nqp::istype(self, RakuAST::Lookup) && !self.is-resolved { - self.resolve-with($resolver); - if !$resolve-only && !self.is-resolved && self.needs-resolution { - $resolver.add-node-unresolved-after-check-time(self); - } - } - # Unless in resolve-only mode, do other check-time activities. # TODO eliminate resolve-only, since that's just check time. unless $resolve-only { @@ -183,6 +169,9 @@ class RakuAST::Node { $resolver.add-node-with-check-time-problems(self); } } + if nqp::istype(self, RakuAST::Lookup) && !self.is-resolved && self.needs-resolution { + $resolver.add-node-unresolved-after-check-time(self); + } } Nil diff --git a/src/Raku/ast/call.rakumod b/src/Raku/ast/call.rakumod index 35169df5cfb..26dba7cdf7e 100644 --- a/src/Raku/ast/call.rakumod +++ b/src/Raku/ast/call.rakumod @@ -196,6 +196,7 @@ class RakuAST::Call::Name is RakuAST::Term is RakuAST::Call is RakuAST::Lookup + is RakuAST::CheckTime { has RakuAST::Name $.name; has Mu $!package; @@ -214,7 +215,7 @@ class RakuAST::Call::Name method needs-resolution() { $!name.is-identifier } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-CHECK(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { nqp::bindattr(self, RakuAST::Call::Name, '$!package', $resolver.current-package); my $resolved := $resolver.resolve-name($!name, :sigil('&')); if $resolved { @@ -514,6 +515,7 @@ class RakuAST::Call::PrivateMethod is RakuAST::Call::Methodish is RakuAST::Lookup is RakuAST::ImplicitLookups + is RakuAST::ParseTime { has RakuAST::Name $.name; has Mu $!package; @@ -532,7 +534,7 @@ class RakuAST::Call::PrivateMethod method needs-resolution() { False } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { nqp::bindattr(self, RakuAST::Call::PrivateMethod, '$!package', $resolver.current-package); Nil } @@ -620,6 +622,7 @@ class RakuAST::Call::MaybeMethod class RakuAST::Call::VarMethod is RakuAST::Call::Methodish is RakuAST::Lookup + is RakuAST::CheckTime { has RakuAST::Name $.name; @@ -639,7 +642,7 @@ class RakuAST::Call::VarMethod method needs-resolution() { $!name.is-identifier } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-CHECK(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-name($!name, :sigil('&')); if $resolved { self.set-resolution($resolved); diff --git a/src/Raku/ast/circumfix.rakumod b/src/Raku/ast/circumfix.rakumod index 251872b60b5..bfc9a025490 100644 --- a/src/Raku/ast/circumfix.rakumod +++ b/src/Raku/ast/circumfix.rakumod @@ -36,6 +36,7 @@ class RakuAST::Circumfix::Parentheses class RakuAST::Circumfix::ArrayComposer is RakuAST::Circumfix is RakuAST::Lookup + is RakuAST::CheckTime is RakuAST::ColonPairish { has RakuAST::SemiList $.semilist; @@ -62,7 +63,7 @@ class RakuAST::Circumfix::ArrayComposer } } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-CHECK(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical('&circumfix:<[ ]>'); if $resolved { self.set-resolution($resolved); @@ -102,6 +103,7 @@ class RakuAST::Circumfix::ArrayComposer class RakuAST::Circumfix::HashComposer is RakuAST::Circumfix is RakuAST::Lookup + is RakuAST::CheckTime { has RakuAST::Expression $.expression; @@ -117,7 +119,7 @@ class RakuAST::Circumfix::HashComposer Nil } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-CHECK(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical('&circumfix:<{ }>'); if $resolved { self.set-resolution($resolved); diff --git a/src/Raku/ast/code.rakumod b/src/Raku/ast/code.rakumod index 99ce1be2381..db718f5098d 100644 --- a/src/Raku/ast/code.rakumod +++ b/src/Raku/ast/code.rakumod @@ -1765,7 +1765,6 @@ class RakuAST::Methodish $signature.set-is-on-method(True); $signature.set-is-on-named-method(True) if self.name; $signature.set-is-on-meta-method(True) if nqp::can(self, 'meta') && self.meta; - $signature.attach($resolver); $signature.IMPL-ENSURE-IMPLICITS; } diff --git a/src/Raku/ast/expressions.rakumod b/src/Raku/ast/expressions.rakumod index a82e9cc7908..b35cf833362 100644 --- a/src/Raku/ast/expressions.rakumod +++ b/src/Raku/ast/expressions.rakumod @@ -147,6 +147,7 @@ class RakuAST::Infixish class RakuAST::Infix is RakuAST::Infixish is RakuAST::Lookup + is RakuAST::ParseTime { has str $.operator; has OperatorProperties $.properties; @@ -169,7 +170,7 @@ class RakuAST::Infix ]) } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-infix($!operator); if $resolved { self.set-resolution($resolved); @@ -959,6 +960,7 @@ class RakuAST::Prefixish class RakuAST::Prefix is RakuAST::Prefixish is RakuAST::Lookup + is RakuAST::ParseTime { has str $.operator; @@ -968,7 +970,7 @@ class RakuAST::Prefix $obj } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-prefix($!operator); if $resolved { self.set-resolution($resolved); @@ -1032,9 +1034,9 @@ class RakuAST::ApplyPrefix method PERFORM-BEGIN(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { if nqp::bitand_i($!prefix.IMPL-CURRIES, 1) { if nqp::istype($!operand, RakuAST::Term::Whatever) { - nqp::bindattr(self, RakuAST::ApplyPrefix, '$!operand', RakuAST::Var::Lexical.new('$_')); + nqp::bindattr(self, RakuAST::ApplyPrefix, '$!operand', + RakuAST::Var::Lexical.new('$_').to-begin-time($resolver, $context)); self.IMPL-CURRY($resolver, $context, '$_'); - $!operand.resolve-with($resolver); } } if nqp::bitand_i($!prefix.IMPL-CURRIES, 2) { @@ -1092,6 +1094,7 @@ class RakuAST::Postfixish class RakuAST::Postfix is RakuAST::Postfixish is RakuAST::Lookup + is RakuAST::ParseTime { has str $.operator; @@ -1102,7 +1105,7 @@ class RakuAST::Postfix $obj } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-postfix($!operator); if $resolved { self.set-resolution($resolved); @@ -1131,6 +1134,7 @@ class RakuAST::Postfix class RakuAST::Postfix::Power is RakuAST::Postfixish is RakuAST::Lookup + is RakuAST::ParseTime { has Int $.power; @@ -1141,7 +1145,7 @@ class RakuAST::Postfix::Power $obj } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-postfix('ⁿ'); if $resolved { self.set-resolution($resolved); @@ -1172,6 +1176,7 @@ class RakuAST::Postcircumfix class RakuAST::Postcircumfix::ArrayIndex is RakuAST::Postcircumfix is RakuAST::Lookup + is RakuAST::ParseTime { has RakuAST::SemiList $.index; has RakuAST::Expression $.assignee; @@ -1192,7 +1197,7 @@ class RakuAST::Postcircumfix::ArrayIndex True } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical( nqp::elems($!index.code-statements) > 1 ?? '&postcircumfix:<[; ]>' @@ -1245,6 +1250,7 @@ class RakuAST::Postcircumfix::ArrayIndex class RakuAST::Postcircumfix::HashIndex is RakuAST::Postcircumfix is RakuAST::Lookup + is RakuAST::ParseTime { has RakuAST::SemiList $.index; @@ -1259,7 +1265,7 @@ class RakuAST::Postcircumfix::HashIndex True } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical( nqp::elems($!index.code-statements) > 1 ?? '&postcircumfix:<{; }>' @@ -1302,6 +1308,7 @@ class RakuAST::Postcircumfix::HashIndex class RakuAST::Postcircumfix::LiteralHashIndex is RakuAST::Postcircumfix is RakuAST::Lookup + is RakuAST::ParseTime { has RakuAST::QuotedString $.index; has RakuAST::Expression $.assignee; @@ -1322,7 +1329,7 @@ class RakuAST::Postcircumfix::LiteralHashIndex True } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical('&postcircumfix:<{ }>'); if $resolved { self.set-resolution($resolved); @@ -1429,9 +1436,9 @@ class RakuAST::ApplyPostfix method PERFORM-BEGIN(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { if nqp::bitand_i($!postfix.IMPL-CURRIES, 1) { if nqp::istype($!operand, RakuAST::Term::Whatever) { - nqp::bindattr(self, RakuAST::ApplyPostfix, '$!operand', RakuAST::Var::Lexical.new('$_')); + nqp::bindattr(self, RakuAST::ApplyPostfix, '$!operand', + RakuAST::Var::Lexical.new('$_').to-begin-time($resolver, $context)); self.IMPL-CURRY($resolver, $context, '$_'); - $!operand.resolve-with($resolver); } } if nqp::bitand_i($!postfix.IMPL-CURRIES, 2) { diff --git a/src/Raku/ast/package.rakumod b/src/Raku/ast/package.rakumod index 103720fc509..abcde93218c 100644 --- a/src/Raku/ast/package.rakumod +++ b/src/Raku/ast/package.rakumod @@ -102,22 +102,6 @@ class RakuAST::Package nqp::bindattr(self, RakuAST::Package, '$!is-stub', $is-stub ?? True !! False); } - method resolve-with(RakuAST::Resolver $resolver) { - if $!name { - my $resolved := $resolver.resolve-name-constant($!name); - if $resolved { - my $meta-object := $resolved.compile-time-value; - if $meta-object.HOW.HOW.name($meta-object.HOW) ne 'Perl6::Metamodel::PackageHOW' - && nqp::can($meta-object.HOW, 'is_composed') - && !$meta-object.HOW.is_composed($meta-object) - { - self.set-resolution($resolved); - } - } - } - Nil - } - method default-scope() { 'our' } method default-how() { @@ -178,10 +162,23 @@ class RakuAST::Package } method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { - # Note that this early return is actually not effective as the begin handler will - # already be run when the parser enters the package and we only know that it's a - # stub when we are done parsing the body. - return Nil if $!is-stub; + if $!name { + my $resolved := $resolver.resolve-name-constant($!name); + if $resolved { + my $meta-object := $resolved.compile-time-value; + if $meta-object.HOW.HOW.name($meta-object.HOW) ne 'Perl6::Metamodel::PackageHOW' + && nqp::can($meta-object.HOW, 'is_composed') + && !$meta-object.HOW.is_composed($meta-object) + { + self.set-resolution($resolved); + } + } + } + + # Note that this early return is actually not effective as the begin handler will + # already be run when the parser enters the package and we only know that it's a + # stub when we are done parsing the body. + return Nil if $!is-stub; # Install the symbol. my str $scope := self.scope; @@ -432,14 +429,6 @@ class RakuAST::Package class RakuAST::Package::Augmented is RakuAST::Package { - method resolve-with(RakuAST::Resolver $resolver) { - my $resolved := $resolver.resolve-name(self.name); - if $resolved { - self.set-resolution($resolved); - } - Nil - } - method PRODUCE-STUBBED-META-OBJECT() { self.resolution.compile-time-value } diff --git a/src/Raku/ast/scoping.rakumod b/src/Raku/ast/scoping.rakumod index 154256b6d91..0293082f5c0 100644 --- a/src/Raku/ast/scoping.rakumod +++ b/src/Raku/ast/scoping.rakumod @@ -721,10 +721,6 @@ class RakuAST::ImplicitLookups method implicit-lookups-to-begin-time(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { for self.IMPL-UNWRAP-LIST(self.get-implicit-lookups()) { $_.to-begin-time($resolver, $context); - # TODO Eliminate when resolve-with is gone - if nqp::can($_, 'resolve-with') { - $_.resolve-with($resolver); - } } } } diff --git a/src/Raku/ast/statements.rakumod b/src/Raku/ast/statements.rakumod index 392369be793..00ab10948a0 100644 --- a/src/Raku/ast/statements.rakumod +++ b/src/Raku/ast/statements.rakumod @@ -1528,6 +1528,7 @@ class RakuAST::Statement::Need # An import statement. class RakuAST::Statement::Import is RakuAST::Statement + is RakuAST::ParseTime is RakuAST::BeginTime is RakuAST::ProducesNil is RakuAST::ModuleLoading @@ -1547,20 +1548,19 @@ class RakuAST::Statement::Import $obj } - method resolve-with(RakuAST::Resolver $resolver) { - my $resolved := $resolver.resolve-name-constant($!module-name); - if $resolved { - self.set-resolution($resolved); - } - Nil - } - method PRODUCE-IMPLICIT-LOOKUPS() { self.IMPL-WRAP-LIST([ RakuAST::Type::Setting.new(RakuAST::Name.from-identifier-parts('CompUnit', 'Handle')), ]) } + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { + my $resolved := $resolver.resolve-name-constant($!module-name); + if $resolved { + self.set-resolution($resolved); + } + } + method PERFORM-BEGIN(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { # Evaluate the argument to the import, if any. my $arglist := $!argument diff --git a/src/Raku/ast/term.rakumod b/src/Raku/ast/term.rakumod index 1700750358c..13ee0e8c71c 100644 --- a/src/Raku/ast/term.rakumod +++ b/src/Raku/ast/term.rakumod @@ -4,6 +4,7 @@ class RakuAST::Term::Name is RakuAST::Term is RakuAST::Lookup + is RakuAST::ParseTime { has RakuAST::Name $.name; has Mu $!package; @@ -19,7 +20,7 @@ class RakuAST::Term::Name nqp::bindattr(self, RakuAST::Term::Name, '$!package', $package); } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-name($!name); if $resolved { self.set-resolution($resolved); @@ -88,16 +89,12 @@ class RakuAST::Term::Self nqp::create(self) } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-CHECK(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical('self'); if $resolved { self.set-resolution($resolved); } - Nil - } - - method PERFORM-CHECK(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { - unless self.is-resolved { + else { self.add-sorry($resolver.build-exception('X::Syntax::Self::WithoutObject')) } } @@ -142,6 +139,7 @@ class RakuAST::Term::TopicCall class RakuAST::Term::Named is RakuAST::Term is RakuAST::Lookup + is RakuAST::ParseTime { has str $.name; @@ -151,7 +149,7 @@ class RakuAST::Term::Named $obj } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-term($!name); if $resolved { self.set-resolution($resolved); @@ -168,12 +166,13 @@ class RakuAST::Term::Named class RakuAST::Term::EmptySet is RakuAST::Term is RakuAST::Lookup + is RakuAST::ParseTime { method new() { nqp::create(self) } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical('&set'); if $resolved { self.set-resolution($resolved); @@ -190,12 +189,13 @@ class RakuAST::Term::EmptySet class RakuAST::Term::Rand is RakuAST::Term is RakuAST::Lookup + is RakuAST::ParseTime { method new() { nqp::create(self) } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical('&rand'); if $resolved { self.set-resolution($resolved); diff --git a/src/Raku/ast/type.rakumod b/src/Raku/ast/type.rakumod index 80b49ae9428..c411b10540e 100644 --- a/src/Raku/ast/type.rakumod +++ b/src/Raku/ast/type.rakumod @@ -51,16 +51,8 @@ class RakuAST::Type::Simple $obj } - method resolve-with(RakuAST::Resolver $resolver) { - my $resolved := $resolver.resolve-name-constant($!name); - if $resolved { - self.set-resolution($resolved); - } - Nil - } - method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { - my $resolved := $resolver.resolve-name-constant-in-setting(self.name); + my $resolved := $resolver.resolve-name-constant(self.name); if $resolved { self.set-resolution($resolved); } @@ -99,27 +91,19 @@ class RakuAST::Type::Simple class RakuAST::Type::Setting is RakuAST::Type::Simple { - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-name-constant-in-setting(self.name); if $resolved { self.set-resolution($resolved); } - Nil } } class RakuAST::Type::Derived is RakuAST::Type - is RakuAST::Lookup { has RakuAST::Type $.base-type; - method resolve-with(RakuAST::Resolver $resolver) { - $!base-type.resolve-with($resolver); - self.set-resolution(self); - Nil - } - method IMPL-BASE-TYPE() { nqp::istype($!base-type, RakuAST::Type::Derived) ?? $!base-type.IMPL-BASE-TYPE !! $!base-type } @@ -127,7 +111,6 @@ class RakuAST::Type::Derived class RakuAST::Type::Coercion is RakuAST::Type::Derived - is RakuAST::Declaration { has RakuAST::Type $.constraint; @@ -181,7 +164,6 @@ class RakuAST::Type::Coercion class RakuAST::Type::Definedness is RakuAST::Type::Derived - is RakuAST::Declaration { has Bool $.definite; diff --git a/src/Raku/ast/variable-access.rakumod b/src/Raku/ast/variable-access.rakumod index 847fd7ac732..f1181cb2bbd 100644 --- a/src/Raku/ast/variable-access.rakumod +++ b/src/Raku/ast/variable-access.rakumod @@ -9,6 +9,7 @@ class RakuAST::Var class RakuAST::Var::Lexical is RakuAST::Var is RakuAST::Lookup + is RakuAST::ParseTime { has str $.sigil; has str $.twigil; @@ -40,12 +41,11 @@ class RakuAST::Var::Lexical self.is-resolved ?? self.resolution.can-be-bound-to !! False } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical(self.name); if $resolved { self.set-resolution($resolved); } - Nil } method undeclared-symbol-details() { @@ -82,12 +82,11 @@ class RakuAST::Var::Lexical class RakuAST::Var::Lexical::Constant is RakuAST::Var::Lexical { - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical-constant(self.name); if $resolved { self.set-resolution($resolved); } - Nil } } @@ -95,14 +94,12 @@ class RakuAST::Var::Lexical::Constant # version of a routine). class RakuAST::Var::Lexical::Setting is RakuAST::Var::Lexical - is RakuAST::Lookup { - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical-constant-in-setting(self.name); if $resolved { self.set-resolution($resolved); } - Nil } } @@ -110,6 +107,7 @@ class RakuAST::Var::Lexical::Setting class RakuAST::Var::Dynamic is RakuAST::Var is RakuAST::Lookup + is RakuAST::ParseTime is RakuAST::CheckTime { has str $.name; @@ -126,12 +124,11 @@ class RakuAST::Var::Dynamic method needs-resolution() { False } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical($!name, :current-scope-only); if $resolved { self.set-resolution($resolved); } - Nil } method postdeclaration-exception-name() { 'X::Dynamic::Postdeclaration' } @@ -344,7 +341,7 @@ class RakuAST::Var::Compiler::Block class RakuAST::Var::Compiler::Routine is RakuAST::Var::Compiler is RakuAST::Var::Lexical - is RakuAST::BeginTime + is RakuAST::ParseTime { method new() { my $obj := nqp::create(self); @@ -354,19 +351,16 @@ class RakuAST::Var::Compiler::Routine $obj } - method PERFORM-BEGIN(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $routine := $resolver.find-attach-target('routine'); if nqp::isconcrete($routine) { $routine.set-need-routine-variable(); } - } - method resolve-with(RakuAST::Resolver $resolver) { my $resolved := $resolver.resolve-lexical('&?ROUTINE'); if $resolved { self.set-resolution($resolved); } - Nil } method IMPL-EXPR-QAST(RakuAST::IMPL::QASTContext $context) { @@ -379,6 +373,7 @@ class RakuAST::Var::Compiler::Routine class RakuAST::Var::Compiler::Lookup is RakuAST::Var::Compiler is RakuAST::Lookup + is RakuAST::ParseTime { has str $.name; @@ -390,12 +385,11 @@ class RakuAST::Var::Compiler::Lookup method sigil() { nqp::substr($!name, 0, 1) } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my $resolved := $resolver.resolve-lexical($!name); if $resolved { self.set-resolution($resolved); } - Nil } method IMPL-EXPR-QAST(RakuAST::IMPL::QASTContext $context) { @@ -495,6 +489,7 @@ class RakuAST::Var::NamedCapture class RakuAST::Var::Package is RakuAST::Var is RakuAST::Lookup + is RakuAST::ParseTime { has str $.sigil; has RakuAST::Name $.name; @@ -512,7 +507,7 @@ class RakuAST::Var::Package self.is-resolved ?? self.resolution.can-be-bound-to !! $!name.is-pseudo-package } - method resolve-with(RakuAST::Resolver $resolver) { + method PERFORM-PARSE(RakuAST::Resolver $resolver, RakuAST::IMPL::QASTContext $context) { my @parts := self.IMPL-UNWRAP-LIST($!name.parts); my $resolved := $resolver.resolve-name(RakuAST::Name.new(@parts[0])); if $resolved {