@@ -710,12 +710,12 @@ expr({cons,L,H0,T0}, St0) ->
710
710
{annotate_cons (A , H1 , T1 , St1 ),Eps ,St1 };
711
711
expr ({lc ,L ,E ,Qs0 }, St0 ) ->
712
712
{Qs1 ,St1 } = preprocess_quals (L , Qs0 , St0 ),
713
- lc_tq (L , E , Qs1 , # c_literal {anno = lineno_anno (L , St1 ),val = []}, St1 );
713
+ lc_tq (L , wrap_list ( E ) , Qs1 , # c_literal {anno = lineno_anno (L , St1 ),val = []}, St1 );
714
714
expr ({bc ,L ,E ,Qs }, St ) ->
715
715
bc_tq (L , E , Qs , St );
716
716
expr ({mc ,L ,E ,Qs0 }, St0 ) ->
717
717
{Qs1 ,St1 } = preprocess_quals (L , Qs0 , St0 ),
718
- mc_tq (L , E , Qs1 , # c_literal {anno = lineno_anno (L , St1 ),val = []}, St1 );
718
+ mc_tq (L , wrap_list ( E ) , Qs1 , # c_literal {anno = lineno_anno (L , St1 ),val = []}, St1 );
719
719
expr ({tuple ,L ,Es0 }, St0 ) ->
720
720
{Es1 ,Eps ,St1 } = safe_list (Es0 , St0 ),
721
721
A = record_anno (L , St1 ),
@@ -967,7 +967,7 @@ expr({op,_,'++',{lc,Llc,E,Qs0},More}, St0) ->
967
967
% % number variables in the environment for letrec.
968
968
{Mc ,Mps ,St1 } = safe (More , St0 ),
969
969
{Qs ,St2 } = preprocess_quals (Llc , Qs0 , St1 ),
970
- {Y ,Yps ,St } = lc_tq (Llc , E , Qs , Mc , St2 ),
970
+ {Y ,Yps ,St } = lc_tq (Llc , wrap_list ( E ) , Qs , Mc , St2 ),
971
971
{Y ,Mps ++ Yps ,St };
972
972
expr ({op ,_ ,'andalso' ,_ ,_ }= E0 , St0 ) ->
973
973
{op ,L ,'andalso' ,E1 ,E2 } = right_assoc (E0 , 'andalso' ),
@@ -1623,21 +1623,29 @@ fun_tq(Cs0, L, St0, NameInfo) ->
1623
1623
vars = Args ,clauses = Cs1 ,fc = Fc ,name = NameInfo },
1624
1624
{Fun ,[],St4 }.
1625
1625
1626
- % % lc_tq(Line, Exp, [Qualifier], Mc, State) -> {LetRec,[PreExp],State}.
1626
+ wrap_list (List ) when is_list (List ) -> List ;
1627
+ wrap_list (Other ) -> [Other ].
1628
+
1629
+ % % lc_tq(Line, Exprs, [Qualifier], Mc, State) -> {LetRec,[PreExp],State}.
1627
1630
% % This TQ from Simon PJ pp 127-138.
1628
1631
1629
- lc_tq (Line , E , [# igen {}|_T ] = Qs , Mc , St ) ->
1630
- lc_tq1 (Line , E , Qs , Mc , St );
1631
- lc_tq (Line , E , [# izip {}= Zip |Qs ], Mc , St ) ->
1632
- zip_tq (Line , E , Zip , Mc , St , Qs );
1633
- lc_tq (Line , E , [# ifilter {}= Filter |Qs ], Mc , St ) ->
1634
- filter_tq (Line , E , Filter , Mc , St , Qs , fun lc_tq /5 );
1635
- lc_tq (Line , E0 , [], Mc0 , St0 ) ->
1636
- {H1 ,Hps ,St1 } = safe ( E0 , St0 ),
1632
+ lc_tq (Line , Es , [# igen {}|_T ] = Qs , Mc , St ) ->
1633
+ lc_tq1 (Line , Es , Qs , Mc , St );
1634
+ lc_tq (Line , Es , [# izip {}= Zip |Qs ], Mc , St ) ->
1635
+ zip_tq (Line , Es , Zip , Mc , St , Qs );
1636
+ lc_tq (Line , Es , [# ifilter {}= Filter |Qs ], Mc , St ) ->
1637
+ filter_tq (Line , Es , Filter , Mc , St , Qs , fun lc_tq /5 );
1638
+ lc_tq (Line , Es0 , [], Mc0 , St0 ) ->
1639
+ {Hs1 ,Hps ,St1 } = safe_list ( Es0 , St0 ),
1637
1640
{T1 ,Tps ,St } = force_safe (Mc0 , St1 ),
1638
- Anno = lineno_anno (Line , St ),
1639
- E = ann_c_cons (Anno , H1 , T1 ),
1640
- {set_anno (E , [compiler_generated |Anno ]),Hps ++ Tps ,St }.
1641
+ Anno = lineno_anno (erl_anno :set_generated (true , Line ), St ),
1642
+ E = ann_c_cons_all (Anno , Hs1 , T1 ),
1643
+ {E ,Hps ++ Tps ,St }.
1644
+
1645
+ ann_c_cons_all (Anno , [H | Hs ], T ) ->
1646
+ ann_c_cons (Anno , H , ann_c_cons_all (Anno , Hs , T ));
1647
+ ann_c_cons_all (_Anno , [], T ) ->
1648
+ T .
1641
1649
1642
1650
lc_tq1 (Line , E , [# igen {anno = # a {anno = GA }= GAnno ,
1643
1651
acc_pat = AccPat ,acc_guard = AccGuard ,
@@ -1924,9 +1932,9 @@ bzip_tq1(Line, E, #izip{anno=#a{anno=_GA}=GAnno,
1924
1932
body = append (Pres ) ++
1925
1933
[# iapply {anno = LAnno ,op = F ,args = Args ++ [Mc ]}]},[],St4 }.
1926
1934
1927
- mc_tq (Line , { map_field_assoc , Lf , K , V } , Qs , Mc , St0 ) ->
1928
- E = { tuple ,Lf ,[K ,V ]},
1929
- {Lc ,Pre0 ,St1 } = lc_tq (Line , E , Qs , Mc , St0 ),
1935
+ mc_tq (Line , Es0 , Qs , Mc , St0 ) ->
1936
+ Es = map ( fun ({ map_field_assoc , Lf , K , V }) -> { tuple ,Lf ,[K ,V ]} end , Es0 ) ,
1937
+ {Lc ,Pre0 ,St1 } = lc_tq (Line , Es , Qs , Mc , St0 ),
1930
1938
{LcVar ,St2 } = new_var (St1 ),
1931
1939
Pre = Pre0 ++ [# iset {var = LcVar ,arg = Lc }],
1932
1940
Call = # icall {module = # c_literal {val = maps },
0 commit comments