Skip to content

Commit cd22fa9

Browse files
committed
Resolve a bunch of package names at compile time.
Cuts down on code output rather significantly in certain cases, of note in QAST::Compiler.
1 parent 30d5020 commit cd22fa9

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/NQP/Actions.pm

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,16 +1314,31 @@ class NQP::Actions is HLL::Actions {
13141314
# See if it's a lexical symbol (known in any outer scope).
13151315
my $var;
13161316
if $*W.is_lexical(~$<name>) {
1317-
try {
1318-
$var := QAST::WVal.new( :value($*W.find_sym([~$<name>])) );
1319-
CATCH {
1320-
$var := QAST::Var.new( :name(~$<name>), :scope('lexical') );
1317+
unless $<args> {
1318+
try {
1319+
my $sym := $*W.find_sym([~$<name>]);
1320+
unless nqp::isnull(nqp::getobjsc($sym)) {
1321+
$var := QAST::WVal.new( :value($sym) );
1322+
}
13211323
}
13221324
}
1325+
unless $var {
1326+
$var := QAST::Var.new( :name(~$<name>), :scope('lexical') );
1327+
}
13231328
}
13241329
else {
13251330
my @ns := nqp::clone($<name><identifier>);
1326-
$var := lexical_package_lookup(@ns, $/);
1331+
unless $<args> {
1332+
try {
1333+
my $sym := $*W.find_sym(@ns);
1334+
unless nqp::isnull(nqp::getobjsc($sym)) {
1335+
$var := QAST::WVal.new( :value($sym) );
1336+
}
1337+
}
1338+
}
1339+
unless $var {
1340+
$var := lexical_package_lookup(@ns, $/);
1341+
}
13271342
}
13281343

13291344
# If it's a call, add the arguments.

0 commit comments

Comments
 (0)