Ticket #900 (closed bug: fixed)
NQP parses functions beginning with 'make' as keyword
Reported by: | Austin_Hastings | Owned by: | pmichaud |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | nqp | Version: | 1.4.0 |
Severity: | medium | Keywords: | token, nqp, make, keyword |
Cc: | Language: | ||
Patch status: | Platform: |
Description
The following code illustrates the problem:
# test.pm sub show_make_problem() { my $name := 'foo'; my $type := 'foo'; my $psym := 'foo'; #my $bug := make_new_symbol($name, $type, $psym); }
As it is, the 'make_new_symbol' is decomposed into 'make' + '_new_symbol', and a reference to lexical '$/' is generated. Pir code:
.namespace [] .sub "show_make_problem" :subid("11_1249326619") :outer("10_1249326619") .annotate "line", 1 new $P15, 'ExceptionHandler' set_addr $P15, control_14 $P15."handle_types"(58) push_eh $P15 .annotate "line", 2 new $P16, "String" assign $P16, "foo" .lex "$name", $P16 .annotate "line", 3 new $P17, "String" assign $P17, "foo" .lex "$type", $P17 .annotate "line", 4 new $P18, "String" assign $P18, "foo" .lex "$psym", $P18 find_lex $P19, "$/" #### Note $/ here .annotate "line", 6 find_lex $P20, "$name" unless_null $P20, vivify_12 new $P20, "Undef" vivify_12: find_lex $P21, "$type" unless_null $P21, vivify_13 new $P21, "Undef" vivify_13: find_lex $P22, "$psym" unless_null $P22, vivify_14 new $P22, "Undef" vivify_14: $P23 = "_new_symbol"($P20, $P21, $P22) #### Note '_new_symbol' $P24 = $P19."!make"($P23) .annotate "line", 1 .return ($P24) control_14: .local pmc exception .get_results (exception) getattribute $P25, exception, "payload" .return ($P25) rethrow exception .end
By uncommenting the my $bug := line above, the output changes to:
.namespace [] .sub "show_make_problem" :subid("11_1249326898") :outer("10_1249326898") .annotate "line", 1 new $P15, 'ExceptionHandler' set_addr $P15, control_14 $P15."handle_types"(58) push_eh $P15 .annotate "line", 2 new $P16, "String" assign $P16, "foo" .lex "$name", $P16 .annotate "line", 3 new $P17, "String" assign $P17, "foo" .lex "$type", $P17 .annotate "line", 4 new $P18, "String" assign $P18, "foo" .lex "$psym", $P18 .annotate "line", 6 find_lex $P19, "$name" unless_null $P19, vivify_12 new $P19, "Undef" vivify_12: find_lex $P20, "$type" unless_null $P20, vivify_13 new $P20, "Undef" vivify_13: find_lex $P21, "$psym" unless_null $P21, vivify_14 new $P21, "Undef" vivify_14: $P22 = "make_new_symbol"($P19, $P20, $P21) #### Note correct name .lex "$bug", $P22 .annotate "line", 1 .return ($P22) control_14: .local pmc exception .get_results (exception) getattribute $P23, exception, "payload" .return ($P23) rethrow exception .end
Pretty clearly the NQP grammar needs a '>>' end-of-word marker after the 'make' token.
Inserting the nonsense assignment statement makes for an effective work-around.
Change History
Note: See
TracTickets for help on using
tickets.