@@ -823,26 +823,38 @@ class Parser {
823
823
case TQuestionDot :
824
824
var field = getIdent ();
825
825
var tmp = " __a_" + (uid ++ );
826
+ var t = token ();
827
+ inline function pushBack () { push (t ); return null ; }
828
+ var eOp = switch (t ) {
829
+ case TOp (s ): if (! opRightAssoc .exists (s )) pushBack (); else s ;
830
+ case TPOpen : ' ' ;
831
+ default : pushBack ();
832
+ }
833
+
834
+ if (eOp != null && eOp .length > 0 ) {
835
+ var e2 = parseExpr ();
836
+ var e =
837
+ mk (EBlock ([
838
+ mk (EVar (tmp , null , e1 )),
839
+ mk (ETernary (
840
+ mk (EBinop (" !=" , mk (EIdent (tmp ), pmin (e1 ), pmax (e1 )), mk (EIdent (" null" ), pmin (e1 ), pmax (e1 ))), pmin (e1 ), pmax (e1 )),
841
+ mk (EBinop (eOp , mk (EField (mk (EIdent (tmp ), pmin (e1 ), pmax (e1 )),field ), pmin (e1 ), pmax (e1 )), e2 ), pmin (e1 ), pmax (e2 )),
842
+ mk (EIdent (" null" ), pmin (e2 ), pmax (e2 ))),
843
+ pmin (e1 ), pmax (e2 ))
844
+ ]), pmin (e1 ));
845
+ return parseExprNext (e );
846
+ }
847
+
826
848
var e = mk (EBlock ([
827
849
mk (EVar (tmp , null , e1 ), pmin (e1 ), pmax (e1 )),
828
850
mk (ETernary (
829
851
mk (EBinop (" ==" , mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )), mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )))),
830
852
mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )),
853
+ (eOp != null && eOp .length == 0 ) ? mk (ECall (mk (EField (mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )),field ),pmin (e1 )),parseExprList (TPClose )),pmin (e1 )) :
831
854
mk (EField (mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )),field ),pmin (e1 ))
832
855
))
833
856
]),pmin (e1 ));
834
857
835
- if ( maybe (TPOpen ) ) {
836
- e = mk (EBlock ([
837
- mk (EVar (tmp , null , e1 ), pmin (e1 ), pmax (e1 )),
838
- mk (ETernary (
839
- mk (EBinop (" ==" , mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )), mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )))),
840
- mk (EIdent (" null" ),pmin (e1 ),pmax (e1 )),
841
- mk (ECall (mk (EField (mk (EIdent (tmp ),pmin (e1 ),pmax (e1 )),field ),pmin (e1 )),parseExprList (TPClose )),pmin (e1 ))
842
- ))
843
- ]),pmin (e1 ));
844
- }
845
-
846
858
return parseExprNext (e );
847
859
case TPOpen :
848
860
return parseExprNext (mk (ECall (e1 ,parseExprList (TPClose )),pmin (e1 )));
0 commit comments