diff --git a/src/language.yacc b/src/language.yacc index 467df33fcd31d9adb85ab42ac6df56c07be1a4e2..b4c1a00949096b8f46d95e9b4e165e0d32ee16a4 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -3610,7 +3610,7 @@ expr4: string /* A?[X] to ((tmp=A) && tmp[X]) */ if( $1->token == F_LOCAL ) { - $$=mknode(F_LAND, $1, mknode(F_INDEX, $1, $4)); + $$=mknode(F_LAND, copy_node($1), mknode(F_INDEX, $1, $4)); } else { @@ -3642,7 +3642,7 @@ expr4: string node *range = mknode(':',$4,$6); if( $1->token == F_LOCAL ) { - $$ = mknode( F_LAND, $1, mknode(F_RANGE, $1, range) ); + $$ = mknode( F_LAND, copy_node($1), mknode(F_RANGE, $1, range) ); } else { @@ -3666,10 +3666,6 @@ expr4: string } COPY_LINE_NUMBER_INFO($$, $3); free_node ($3); - - - COPY_LINE_NUMBER_INFO($$, $3); - free_node ($3); } | expr4 open_bracket_with_line_info error ']' { @@ -3760,7 +3756,7 @@ expr4: string int temporary; if( $1->token == F_LOCAL ) { - $$=mknode(F_LAND, $1, mknode(F_ARROW, $1, $4)); + $$=mknode(F_LAND, copy_node($1), mknode(F_ARROW, $1, $4)); } else {