@@ -844,26 +844,38 @@ class Parser {
844
844
case TQuestionDot :
845
845
var field = getIdent ();
846
846
var tmp = " __a_" + (uid ++ );
847
+ var t = token ();
848
+ inline function pushBack () { push (t ); return null ; }
849
+ var eOp = switch (t ) {
850
+ case TOp (s ): if (! opRightAssoc .exists (s )) pushBack (); else s ;
851
+ case TPOpen : ' ' ;
852
+ default : pushBack ();
853
+ }
854
+
855
+ if (eOp != null && eOp .length > 0 ) {
856
+ var e2 = parseExpr ();
857
+ var e =
858
+ mk (EBlock ([
859
+ mk (EVar (tmp , null , e1 )),
860
+ mk (ETernary (
861
+ mk (EBinop (" !=" , mk (EIdent (tmp ), pmin (e1 ), pmax (e1 )), mk (EIdent (" null" ), pmin (e1 ), pmax (e1 ))), pmin (e1 ), pmax (e1 )),
862
+ mk (EBinop (eOp , mk (EField (mk (EIdent (tmp ), pmin (e1 ), pmax (e1 )),field ), pmin (e1 ), pmax (e1 )), e2 ), pmin (e1 ), pmax (e2 )),
863
+ mk (EIdent (" null" ), pmin (e2 ), pmax (e2 ))),
864
+ pmin (e1 ), pmax (e2 ))
865
+ ]), pmin (e1 ));
866
+ return parseExprNext (e );
867
+ }
868
+
847
869
var e = mk (EBlock ([
848
870
mk (EVar (tmp , null , e1 ), pmin (e1 ), pmax (e1 )),
849
871
mk (ETernary (
850
872
mk (EBinop (" ==" , mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )), mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )))),
851
873
mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )),
874
+ (eOp != null && eOp .length == 0 ) ? mk (ECall (mk (EField (mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )),field ),pmin (e1 )),parseExprList (TPClose )),pmin (e1 )) :
852
875
mk (EField (mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )),field ),pmin (e1 ))
853
876
))
854
877
]),pmin (e1 ));
855
878
856
- if ( maybe (TPOpen ) ) {
857
- e = mk (EBlock ([
858
- mk (EVar (tmp , null , e1 ), pmin (e1 ), pmax (e1 )),
859
- mk (ETernary (
860
- mk (EBinop (" ==" , mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )), mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )))),
861
- mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )),
862
- mk (ECall (mk (EField (mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )),field ),pmin (e1 )),parseExprList (TPClose )),pmin (e1 ))
863
- ))
864
- ]),pmin (e1 ));
865
- }
866
-
867
879
return parseExprNext (e );
868
880
case TPOpen :
869
881
return parseExprNext (mk (ECall (e1 ,parseExprList (TPClose )),pmin (e1 )));
0 commit comments