Skip to content

Parse tuples in the expression #980

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Aug 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 65 additions & 67 deletions src/lpython/parser/parser.yy
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ void yyerror(YYLTYPE *yyloc, LFortran::Parser &p, const std::string &msg)
%type <key_val> dict
%type <vec_key_val> dict_list
%type <ast> slice_item
%type <ast> slice_items
%type <vec_ast> slice_item_list
%type <ast> with_statement
%type <vec_withitem> with_as_items
Expand Down Expand Up @@ -281,8 +282,6 @@ void yyerror(YYLTYPE *yyloc, LFortran::Parser &p, const std::string &msg)
%left "%" "//" "/" "@" "*"
%precedence UNARY
%right "**"
%precedence AWAIT
%precedence YIELD
%precedence "."

%start units
Expand Down Expand Up @@ -382,7 +381,11 @@ multi_line_statement
;

expression_statment
: expr { $$ = EXPR_01($1, @$); }
: tuple_list { $$ = EXPR_01($1, @$); }
| KW_AWAIT tuple_list { $$ = EXPR_01(AWAIT($2, @$), @$); }
| KW_YIELD { $$ = EXPR_01(YIELD_01(@$), @$); }
| KW_YIELD tuple_list { $$ = EXPR_01(YIELD_02($2, @$), @$); }
| KW_YIELD_FROM tuple_list { $$ = EXPR_01(YIELD_03($2, @$), @$); }
;

pass_statement
Expand All @@ -409,20 +412,12 @@ assert_statement
;

target_list
: target_list expr "=" { $$ = $1; LIST_ADD($$, $2); }
| expr "=" { LIST_NEW($$); LIST_ADD($$, $1); }
| target_list expr_list "," expr "=" {
$$ = $1; LIST_ADD($$, TUPLE_01(TUPLE_($2, $4), @$)); }
| expr_list "," expr "=" {
LIST_NEW($$); LIST_ADD($$, TUPLE_01(TUPLE_($1, $3), @$)); }
| target_list expr_list "," "=" { $$ = $1; LIST_ADD($$, TUPLE_03($2, @$)); }
| expr_list "," "=" { LIST_NEW($$); LIST_ADD($$, TUPLE_03($1, @$)); }
: target_list tuple_list "=" { $$ = $1; LIST_ADD($$, $2); }
| tuple_list "=" { LIST_NEW($$); LIST_ADD($$, $1); }
;

assignment_statement
: target_list expr { $$ = ASSIGNMENT($1, $2, @$); }
| target_list expr_list "," expr {
$$ = ASSIGNMENT($1, TUPLE_01(TUPLE_($2, $4), @$), @$); }
: target_list tuple_list { $$ = ASSIGNMENT($1, $2, @$); }
| target_list expr type_comment { $$ = ASSIGNMENT2($1, $2, $3, @$); }
;

Expand Down Expand Up @@ -457,10 +452,7 @@ delete_statement

return_statement
: KW_RETURN { $$ = RETURN_01(@$); }
| KW_RETURN expr { $$ = RETURN_02($2, @$); }
| KW_RETURN expr_list "," expr {
$$ = RETURN_02(TUPLE_01(TUPLE_($2, $4), @$), @$); }
| KW_RETURN expr_list "," { $$ = RETURN_02(TUPLE_03($2, @$), @$); }
| KW_RETURN tuple_list { $$ = RETURN_02($2, @$); }
;

module
Expand Down Expand Up @@ -535,18 +527,23 @@ if_statement
for_target_list
: expr %prec FOR { $$ = $1; }
| expr_list "," expr %prec FOR { $$ = TUPLE_01(TUPLE_($1, $3), @$); }
| expr_list "," %prec FOR { $$ = TUPLE_03($1, @$); }
;

tuple_list
: expr { $$ = $1; }
| expr_list "," expr { $$ = TUPLE_01(TUPLE_($1, $3), @$); }
| expr_list "," { $$ = TUPLE_03($1, @$); }
;

for_statement
: KW_FOR for_target_list KW_IN expr ":" body_stmts {
: KW_FOR for_target_list KW_IN tuple_list ":" body_stmts {
$$ = FOR_01($2, $4, $6, @$); }
| KW_FOR for_target_list KW_IN expr "," ":" body_stmts {
$$ = FOR_01($2, TUPLE_03(A2LIST(p.m_a, $4), @$), $7, @$); }
| KW_FOR for_target_list KW_IN expr ":" body_stmts KW_ELSE ":"
| KW_FOR for_target_list KW_IN tuple_list ":" body_stmts KW_ELSE ":"
body_stmts { $$ = FOR_02($2, $4, $6, $9, @$); }
| KW_FOR for_target_list KW_IN expr ":" type_comment TK_NEWLINE
| KW_FOR for_target_list KW_IN tuple_list ":" type_comment TK_NEWLINE
statements { $$ = FOR_03($2, $4, $6, $8, @$); }
| KW_FOR for_target_list KW_IN expr ":" type_comment TK_NEWLINE
| KW_FOR for_target_list KW_IN tuple_list ":" type_comment TK_NEWLINE
statements KW_ELSE ":" body_stmts {
$$ = FOR_04($2, $4, $8, $11, $6, @$); }
;
Expand Down Expand Up @@ -766,26 +763,6 @@ while_statement
$$ = WHILE_02($2, $4, $7, @$); }
;

slice_item_list
: slice_item_list "," slice_item { $$ = $1; LIST_ADD($$, $3); }
| slice_item { LIST_NEW($$); LIST_ADD($$, $1); }

slice_item
: ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
| expr ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
| ":" expr { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
| expr ":" expr { $$ = SLICE_01( $1, $3, nullptr, @$); }
| ":" ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
| ":" ":" expr { $$ = SLICE_01(nullptr, nullptr, $3, @$); }
| expr ":" ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
| ":" expr ":" { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
| expr ":" ":" expr { $$ = SLICE_01( $1, nullptr, $4, @$); }
| ":" expr ":" expr { $$ = SLICE_01(nullptr, $2, $4, @$); }
| expr ":" expr ":" { $$ = SLICE_01( $1, $3, nullptr, @$); }
| expr ":" expr ":" expr { $$ = SLICE_01( $1, $3, $5, @$); }
| expr { $$ = $1; }
;

expr_list_opt
: expr_list { $$ = $1; }
| %empty { LIST_NEW($$); }
Expand All @@ -806,21 +783,16 @@ dict_list
| dict { LIST_NEW($$); LIST_ADD($$, $1); }
;

tuple_list
: slice_item_list comma_opt { $$ = TUPLE($1, @$); }
;

id_list
: id_list "," id { $$ = $1; LIST_ADD($$, $3); }
| id { LIST_NEW($$); LIST_ADD($$, $1); }
: id_list "," id_item { $$ = $1; LIST_ADD($$, $3); }
| id_item { LIST_NEW($$); LIST_ADD($$, $1); }
;

id_item
: id_list { $$ = ID_TUPLE_01($1, @$); }
| id_list "," { $$ = ID_TUPLE_03($1, @$); }
: id { $$ = $1; }
| "(" id ")" { $$ = $2; }
| "(" id_list "," ")" { $$ = ID_TUPLE_03($2, @$); }
| "(" id_list "," id ")" { $$ = ID_TUPLE_01(TUPLE_($2, $4), @$); }
| "(" id_list "," id_item ")" { $$ = ID_TUPLE_01(TUPLE_($2, $4), @$); }
;

keyword_item
Expand All @@ -840,9 +812,14 @@ primary
;

comp_for
: KW_FOR id_item KW_IN expr { $$ = COMP_FOR_01($2, $4, @$); }
| KW_FOR id_item KW_IN expr KW_IF expr {
$$ = COMP_FOR_02($2, $4, $6, @$); }
: KW_FOR id_list KW_IN expr {
$$ = COMP_FOR_01(ID_TUPLE_01($2, @$), $4, @$); }
| KW_FOR id_list "," KW_IN expr {
$$ = COMP_FOR_01(ID_TUPLE_03($2, @$), $5, @$); }
| KW_FOR id_list KW_IN expr KW_IF expr {
$$ = COMP_FOR_02(ID_TUPLE_01($2, @$), $4, $6, @$); }
| KW_FOR id_list "," KW_IN expr KW_IF expr {
$$ = COMP_FOR_02(ID_TUPLE_03($2, @$), $5, $7, @$); }
;

comp_for_items
Expand Down Expand Up @@ -878,17 +855,42 @@ function_call
| "(" expr ")" "(" call_arguement_list ")" { $$ = CALL_01($2, $5, @$); }
;

slice_item_list
: slice_item_list "," slice_items { $$ = $1; LIST_ADD($$, $3); }
| slice_items { LIST_NEW($$); LIST_ADD($$, $1); }
;

slice_items
: ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
| expr ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
| ":" expr { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
| expr ":" expr { $$ = SLICE_01( $1, $3, nullptr, @$); }
| ":" ":" { $$ = SLICE_01(nullptr, nullptr, nullptr, @$); }
| ":" ":" expr { $$ = SLICE_01(nullptr, nullptr, $3, @$); }
| expr ":" ":" { $$ = SLICE_01( $1, nullptr, nullptr, @$); }
| ":" expr ":" { $$ = SLICE_01(nullptr, $2, nullptr, @$); }
| expr ":" ":" expr { $$ = SLICE_01( $1, nullptr, $4, @$); }
| ":" expr ":" expr { $$ = SLICE_01(nullptr, $2, $4, @$); }
| expr ":" expr ":" { $$ = SLICE_01( $1, $3, nullptr, @$); }
| expr ":" expr ":" expr { $$ = SLICE_01( $1, $3, $5, @$); }
| expr { $$ = $1; }
;

slice_item
: slice_item_list comma_opt { $$ = TUPLE($1, @$); }
;

subscript
: primary "[" tuple_list "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
| function_call "[" tuple_list "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
| "[" expr_list_opt "]" "[" tuple_list "]" {
: primary "[" slice_item "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
| function_call "[" slice_item "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
| "[" expr_list_opt "]" "[" slice_item "]" {
$$ = SUBSCRIPT_01(LIST($2, @$), $5, @$); }
| "{" expr_list "}" "[" tuple_list "]" {
| "{" expr_list "}" "[" slice_item "]" {
$$ = SUBSCRIPT_01(SET($2, @$), $5, @$); }
| "(" expr ")" "[" tuple_list "]" { $$ = SUBSCRIPT_01($2, $5, @$); }
| "{" dict_list comma_opt "}" "[" tuple_list "]" {
| "(" expr ")" "[" slice_item "]" { $$ = SUBSCRIPT_01($2, $5, @$); }
| "{" dict_list comma_opt "}" "[" slice_item "]" {
$$ = SUBSCRIPT_01(DICT_02($2, @$), $6, @$); }
| subscript "[" tuple_list "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
| subscript "[" slice_item "]" { $$ = SUBSCRIPT_01($1, $3, @$); }
;

string
Expand Down Expand Up @@ -972,10 +974,6 @@ expr

| "{" "}" { $$ = DICT_01(@$); }
| "{" dict_list comma_opt "}" { $$ = DICT_02($2, @$); }
| KW_AWAIT expr %prec AWAIT { $$ = AWAIT($2, @$); }
| KW_YIELD %prec YIELD { $$ = YIELD_01(@$); }
| KW_YIELD expr %prec YIELD { $$ = YIELD_02($2, @$); }
| KW_YIELD_FROM expr %prec YIELD { $$ = YIELD_03($2, @$); }
| id ":=" expr { $$ = NAMEDEXPR($1, $3, @$); }
| "*" expr { $$ = STARRED_ARG($2, @$); }

Expand Down
2 changes: 1 addition & 1 deletion src/lpython/parser/semantics.h
Original file line number Diff line number Diff line change
Expand Up @@ -820,7 +820,7 @@ static inline ast_t* ID_TUPLE_02(Allocator &al, Location &l, Vec<ast_t*> elts) {
#define ID_TUPLE_01(elts, l) ID_TUPLE_02(p.m_a, l, elts)
#define ID_TUPLE_03(elts, l) make_Tuple_t(p.m_a, l, \
EXPRS(SET_EXPR_CTX_02(SET_CTX_02(elts, Store), Store)), elts.size(), \
expr_contextType::Store);
expr_contextType::Store)

#define LIST_COMP_1(expr, generators, l) make_ListComp_t(p.m_a, l, \
EXPR(expr), generators.p, generators.n)
Expand Down
4 changes: 4 additions & 0 deletions tests/parser/comprehension1.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,7 @@
(string[i] for i in range(len(string)-1, -1, -1))

k = (j + k for j, k in range(10) if j > 0)

(left + size + right for size, (left, right) in zip(array.shape, pad_width))

viter = ((i, j) for ((i, _), (j, _)) in zip(newargs[1:], args[1:]))
5 changes: 5 additions & 0 deletions tests/parser/for2.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,8 @@ async def test():
for a in (b, c): a**2; pass;

async for a in range(5): print(a)

for like_function in np.zeros_like, np.ones_like, np.empty_like:
pass
for a, in t:
pass
1 change: 1 addition & 0 deletions tests/parser/statements1.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
(x, y, z) = t
x, = t
(x,) = t
obj = obj,

x += 1

Expand Down
6 changes: 3 additions & 3 deletions tests/parser/tuple1.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ def test():

_promotion_table = { (int8, int8): int8 }

# TODO
# 1, 2,
# 1, 2
x, y
x, y,
assert_(np.isnan(div)), 'dt: %s, rem: %s' % (dt, rem)
3 changes: 3 additions & 0 deletions tests/parser/yield.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ def func():
for _ in x:
yield

yield x, y
yield x, y,

def iterable1():
yield 1
yield 2
Expand Down
4 changes: 2 additions & 2 deletions tests/reference/ast_new-comprehension1-69cf2af.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"basename": "ast_new-comprehension1-69cf2af",
"cmd": "lpython --show-ast --new-parser --no-color {infile} -o {outfile}",
"infile": "tests/parser/comprehension1.py",
"infile_hash": "db1a35055ce4df698bffbd406fc34ab9fb183a91366f6289575b71d8",
"infile_hash": "86299dc3e7927f4d06bb55bce36c88a6833bb6e1801a3f1c758c6266",
"outfile": null,
"outfile_hash": null,
"stdout": "ast_new-comprehension1-69cf2af.stdout",
"stdout_hash": "965115c1326ba5d293a5e01ecd8b5d83bbd4392a7ba1eea0f08ef82f",
"stdout_hash": "2215f7cfded5c53e72d9f7768eb71be7d0514402ad2ec993ed1b577e",
"stderr": null,
"stderr_hash": null,
"returncode": 0
Expand Down
2 changes: 1 addition & 1 deletion tests/reference/ast_new-comprehension1-69cf2af.stdout
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(Module [(Assign [(Name fruits Store)] (ListComp (Name f Load) [((Name f Store) (Name fruit_list Load) [(Call (Attribute (Name f Load) startswith Load) [(ConstantStr "a" ())] [])] 0)]) ()) (Assign [(Name fruit_list Store)] (ListComp (Name fruit Load) [((Name fruit Store) (Name fruits Load) [] 0)]) ()) (Assign [(Name sum_cord Store)] (ListComp (BinOp (Name x Load) Add (Name y Load)) [((Tuple [(Name x Store) (Name y Store)] Store) (Name points Load) [(BoolOp And [(Compare (Name x Load) Gt [(ConstantInt 0 ())]) (Compare (Name y Load) Gt [(ConstantInt 0 ())])])] 0)]) ()) (Assign [(Name transform_1 Store)] (ListComp (BinOp (BinOp (ConstantInt 2 ()) Mult (Name x Load)) Add (ConstantInt 6 ())) [((Name x Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [] 0)]) ()) (Assign [(Name distance_orig Store)] (ListComp (BinOp (BinOp (BinOp (Name x Load) Pow (ConstantInt 2 ())) Add (BinOp (Name y Load) Pow (ConstantInt 2 ()))) Add (BinOp (Name z Load) Pow (ConstantInt 2 ()))) [((Tuple [(Name x Store) (Name y Store) (Name z Store)] Store) (Name points Load) [] 0)]) ()) (Assign [(Name odd_elements Store)] (ListComp (Name i Load) [((Name i Store) (Name main_list Load) [(BinOp (Name i Load) BitAnd (ConstantInt 1 ()))] 0)]) ()) (Assign [(Name first_ten_elements Store)] (ListComp (Name i Load) [((Name i Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [] 0)]) ()) (Assign [(Name another_ten_elements Store)] (ListComp (Name i Load) [((Name i Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [] 0)]) ()) (Assign [(Name comp Store)] (ListComp (BinOp (Name i Load) Pow (ConstantInt 2 ())) [((Name i Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [(BoolOp And [(Compare (Name i Load) NotIn [(List [(ConstantInt 3 ()) (ConstantInt 5 ()) (ConstantInt 7 ())] Load)]) (Compare (Name i Load) In [(Name list3 Load)])])] 0)]) ()) (Assign [(Name prm_tup Store)] (Call (Name tuple Load) [(GeneratorExp (Call (Name next Load) [(Name parameters Load)] []) [((Name _ Store) (Attribute (Name i Load) __parameters__ Load) [] 0)])] []) ()) (Assign [(Name args Store)] (Call (Attribute (ConstantStr ", " ()) join Load) [(GeneratorExp (Call (Name _to_str Load) [(Name i Load)] []) [((Name i Store) (Attribute (Name self Load) __args__ Load) [] 0)])] []) ()) (Assign [(Name rest Store)] (Call (Name tuple Load) [(GeneratorExp (Name i Load) [((Name i Store) (Call (Name range Load) [(Attribute (Name a Load) ndim Load)] []) [(Compare (Name i Load) NotIn [(Name axis Load)])] 0)])] []) ()) (Assign [(Name newSet Store)] (SetComp (BinOp (Name element Load) Mult (ConstantInt 3 ())) [((Name element Store) (Name myList Load) [] 0)]) ()) (Assign [(Name newSet Store)] (SetComp (BinOp (Name element Load) Mult (ConstantInt 3 ())) [((Name element Store) (Name myList Load) [(Compare (BinOp (Name element Load) Mod (ConstantInt 2 ())) Eq [(ConstantInt 0 ())])] 0)]) ()) (Expr (DictComp (Name x Load) (BinOp (Name x Load) Pow (ConstantInt 3 ())) [((Name x Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [(Compare (BinOp (BinOp (Name x Load) Pow (ConstantInt 3 ())) Mod (ConstantInt 4 ())) Eq [(ConstantInt 0 ())])] 0)])) (Assign [(Name square_dict Store)] (DictComp (Name num Load) (BinOp (Name num Load) Mult (Name num Load)) [((Name num Store) (Call (Name range Load) [(ConstantInt 1 ()) (ConstantInt 11 ())] []) [] 0)]) ()) (Expr (GeneratorExp (Subscript (Name string Load) (Name i Load) Load) [((Name i Store) (Call (Name range Load) [(BinOp (Call (Name len Load) [(Name string Load)] []) Sub (ConstantInt 1 ())) (UnaryOp USub (ConstantInt 1 ())) (UnaryOp USub (ConstantInt 1 ()))] []) [] 0)])) (Assign [(Name k Store)] (GeneratorExp (BinOp (Name j Load) Add (Name k Load)) [((Tuple [(Name j Store) (Name k Store)] Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [(Compare (Name j Load) Gt [(ConstantInt 0 ())])] 0)]) ())] [])
(Module [(Assign [(Name fruits Store)] (ListComp (Name f Load) [((Name f Store) (Name fruit_list Load) [(Call (Attribute (Name f Load) startswith Load) [(ConstantStr "a" ())] [])] 0)]) ()) (Assign [(Name fruit_list Store)] (ListComp (Name fruit Load) [((Name fruit Store) (Name fruits Load) [] 0)]) ()) (Assign [(Name sum_cord Store)] (ListComp (BinOp (Name x Load) Add (Name y Load)) [((Tuple [(Name x Store) (Name y Store)] Store) (Name points Load) [(BoolOp And [(Compare (Name x Load) Gt [(ConstantInt 0 ())]) (Compare (Name y Load) Gt [(ConstantInt 0 ())])])] 0)]) ()) (Assign [(Name transform_1 Store)] (ListComp (BinOp (BinOp (ConstantInt 2 ()) Mult (Name x Load)) Add (ConstantInt 6 ())) [((Name x Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [] 0)]) ()) (Assign [(Name distance_orig Store)] (ListComp (BinOp (BinOp (BinOp (Name x Load) Pow (ConstantInt 2 ())) Add (BinOp (Name y Load) Pow (ConstantInt 2 ()))) Add (BinOp (Name z Load) Pow (ConstantInt 2 ()))) [((Tuple [(Name x Store) (Name y Store) (Name z Store)] Store) (Name points Load) [] 0)]) ()) (Assign [(Name odd_elements Store)] (ListComp (Name i Load) [((Name i Store) (Name main_list Load) [(BinOp (Name i Load) BitAnd (ConstantInt 1 ()))] 0)]) ()) (Assign [(Name first_ten_elements Store)] (ListComp (Name i Load) [((Name i Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [] 0)]) ()) (Assign [(Name another_ten_elements Store)] (ListComp (Name i Load) [((Name i Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [] 0)]) ()) (Assign [(Name comp Store)] (ListComp (BinOp (Name i Load) Pow (ConstantInt 2 ())) [((Name i Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [(BoolOp And [(Compare (Name i Load) NotIn [(List [(ConstantInt 3 ()) (ConstantInt 5 ()) (ConstantInt 7 ())] Load)]) (Compare (Name i Load) In [(Name list3 Load)])])] 0)]) ()) (Assign [(Name prm_tup Store)] (Call (Name tuple Load) [(GeneratorExp (Call (Name next Load) [(Name parameters Load)] []) [((Name _ Store) (Attribute (Name i Load) __parameters__ Load) [] 0)])] []) ()) (Assign [(Name args Store)] (Call (Attribute (ConstantStr ", " ()) join Load) [(GeneratorExp (Call (Name _to_str Load) [(Name i Load)] []) [((Name i Store) (Attribute (Name self Load) __args__ Load) [] 0)])] []) ()) (Assign [(Name rest Store)] (Call (Name tuple Load) [(GeneratorExp (Name i Load) [((Name i Store) (Call (Name range Load) [(Attribute (Name a Load) ndim Load)] []) [(Compare (Name i Load) NotIn [(Name axis Load)])] 0)])] []) ()) (Assign [(Name newSet Store)] (SetComp (BinOp (Name element Load) Mult (ConstantInt 3 ())) [((Name element Store) (Name myList Load) [] 0)]) ()) (Assign [(Name newSet Store)] (SetComp (BinOp (Name element Load) Mult (ConstantInt 3 ())) [((Name element Store) (Name myList Load) [(Compare (BinOp (Name element Load) Mod (ConstantInt 2 ())) Eq [(ConstantInt 0 ())])] 0)]) ()) (Expr (DictComp (Name x Load) (BinOp (Name x Load) Pow (ConstantInt 3 ())) [((Name x Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [(Compare (BinOp (BinOp (Name x Load) Pow (ConstantInt 3 ())) Mod (ConstantInt 4 ())) Eq [(ConstantInt 0 ())])] 0)])) (Assign [(Name square_dict Store)] (DictComp (Name num Load) (BinOp (Name num Load) Mult (Name num Load)) [((Name num Store) (Call (Name range Load) [(ConstantInt 1 ()) (ConstantInt 11 ())] []) [] 0)]) ()) (Expr (GeneratorExp (Subscript (Name string Load) (Name i Load) Load) [((Name i Store) (Call (Name range Load) [(BinOp (Call (Name len Load) [(Name string Load)] []) Sub (ConstantInt 1 ())) (UnaryOp USub (ConstantInt 1 ())) (UnaryOp USub (ConstantInt 1 ()))] []) [] 0)])) (Assign [(Name k Store)] (GeneratorExp (BinOp (Name j Load) Add (Name k Load)) [((Tuple [(Name j Store) (Name k Store)] Store) (Call (Name range Load) [(ConstantInt 10 ())] []) [(Compare (Name j Load) Gt [(ConstantInt 0 ())])] 0)]) ()) (Expr (GeneratorExp (BinOp (BinOp (Name left Load) Add (Name size Load)) Add (Name right Load)) [((Tuple [(Name size Store) (Tuple [(Name left Store) (Name right Store)] Store)] Store) (Call (Name zip Load) [(Attribute (Name array Load) shape Load) (Name pad_width Load)] []) [] 0)])) (Assign [(Name viter Store)] (GeneratorExp (Tuple [(Name i Load) (Name j Load)] Load) [((Tuple [(Tuple [(Name i Store) (Name _ Store)] Store) (Tuple [(Name j Store) (Name _ Store)] Store)] Store) (Call (Name zip Load) [(Subscript (Name newargs Load) (Slice (ConstantInt 1 ()) () ()) Load) (Subscript (Name args Load) (Slice (ConstantInt 1 ()) () ()) Load)] []) [] 0)]) ())] [])
4 changes: 2 additions & 2 deletions tests/reference/ast_new-for2-af08901.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"basename": "ast_new-for2-af08901",
"cmd": "lpython --show-ast --new-parser --no-color {infile} -o {outfile}",
"infile": "tests/parser/for2.py",
"infile_hash": "5b2063381273e132aae18d9ba76c775c5743c66592fd42046b030543",
"infile_hash": "32c45d5c5edc44504a3fa5d24c6c1660977d2ceceeef311ee5a37410",
"outfile": null,
"outfile_hash": null,
"stdout": "ast_new-for2-af08901.stdout",
"stdout_hash": "a6ef674db9539591e9e5c0409f91b616ba70008d77b975d5074196fa",
"stdout_hash": "d8c03cf0ef7c1473ea457b1282da26a047e1b110c5fab6494cf434cd",
"stderr": null,
"stderr_hash": null,
"returncode": 0
Expand Down
Loading