@@ -775,7 +775,7 @@ enumValueReference ::= simpleQualifiedReferenceExpression
775
775
enumArgumentExtractor ::= enumValueReference '(' 'var'? enumExtractorArgumentList ')'
776
776
{extends="expression" mixin="com.intellij.plugins.haxe.lang.psi.impl.HaxeEnumArgumentExtractorMixinImpl" implements="com.intellij.plugins.haxe.model.HaxeModelTarget"}
777
777
778
- variableCaptureExpression ::= callOrArrayAccess ('=>' switchCaseExpr)+ {pin=2 extends="expression"}
778
+ variableCaptureExpression ::= valueReference ('=>' switchCaseExpr)+ {pin=2 extends="expression"}
779
779
private switchCaseCaptureInit ::= '=' (primitiveExtractedValue | expression) {extends = varInit }
780
780
switchCaseCapture ::= <<startWithLowercaseOrUnderscoreCheck>> componentName (("=" extractorMatchExpressionVariant ) | switchCaseCaptureInit)
781
781
{mixin="com.intellij.plugins.haxe.lang.psi.impl.HaxePsiFieldImpl" implements="com.intellij.plugins.haxe.lang.psi.HaxePsiField"}
@@ -882,7 +882,7 @@ fake unaryExpression ::= expression* operator {
882
882
methods=[expression="expression[0]" operator="operator"]
883
883
}
884
884
// might not be the best solution to add (| thisExpression | superExpression | abstractExpression) here but it solves issues with postfix stuff (like "this.size++;")
885
- private assignableValueExpression ::= (referenceExpression | thisExpression | superExpression | abstractExpression) (qualifiedNullSafeReferenceExpression)* arrayAccessExpression*
885
+ private assignableValueExpression ::= thisSuperAbstractOrReferenceExpression (qualifiedNullSafeReferenceExpression)* arrayAccessExpression*
886
886
887
887
888
888
// Be careful when changing the ordering of the 'or' clauses here. It matters!!
@@ -903,20 +903,14 @@ private value ::= ('untyped' expression)
903
903
| switchStatement
904
904
| throwStatement
905
905
| (castExpression qualifiedReferenceTail?)
906
- //
907
906
| callFunctionLiteral
908
907
| immediateArrayAccess
909
- | (macroExpressionReification (qualifiedReferenceTail | CallArrayOrReferenceExpression)?)
910
908
| (literalExpression qualifiedReferenceTail?)
911
909
| objectLiteral
912
- | callOrArrayAccess
913
- | parenthesizedExpressionOrCall // Seems redundant with callOrArrayAccess
910
+ | valueReference
914
911
| localVarDeclarationWithInit
915
- | referenceExpression
916
- | thisExpression
917
- | superExpression
918
- | abstractExpression
919
912
{pin=1 }
913
+ private valueReference ::= (macroExpressionReification | callOrArrayTail) (qualifiedReferenceTail | CallArrayOrReferenceExpression* qualifiedReferenceTail*)?;
920
914
921
915
literalExpression ::= LITINT | LITHEX | LITOCT | LITFLOAT
922
916
| 'null' | 'true' | 'false'
@@ -945,25 +939,20 @@ private long_template_entry_recover ::= !(';' | OPEN_QUOTE| CLOSING_QUOTE | REGU
945
939
regularExpressionLiteral ::= REG_EXP
946
940
{extends="literalExpression" mixin="com.intellij.plugins.haxe.lang.psi.impl.HaxeRegularExpressionImpl" implements="com.intellij.plugins.haxe.lang.psi.HaxeRegularExpression"}
947
941
948
- private parenthesizedExpressionOrCall ::= parenthesizedExpression qualifiedReferenceTail?
949
942
parenthesizedExpression ::= '(' (typeCheckExpr | macroTypeReification | expression | statement) ')' {name="expression"}
950
943
951
944
private typeCheckOperator ::= ':'
952
945
typeCheckExpr ::= expression typeCheckOperator typeWrapper
953
946
{mixin="com.intellij.plugins.haxe.lang.psi.impl.HaxeClassReferenceImpl" implements="com.intellij.plugins.haxe.lang.psi.HaxeReference"}
954
947
955
- private CallArrayOrReferenceExpression::= (callExpression | arrayAccessExpression |qualifiedReferenceExpression )
948
+ private CallArrayOrReferenceExpression::= (callExpression | arrayAccessExpression |qualifiedNullSafeReferenceExpression )
956
949
private newExpressionOrCall ::= newExpression qualifiedReferenceTail?
957
950
private qualifiedReferenceTail ::= qualifiedNullSafeReferenceExpression CallArrayOrReferenceExpression*
958
951
959
-
960
-
961
952
private callFunctionLiteral ::= functionLiteral callExpression
962
- private callOrArrayAccess ::= (callAccess | arrayAccess )
963
- private callOrArrayTail ::= (referenceExpression | thisExpression | superExpression | abstractExpression | parenthesizedExpression)
964
- private callAccess ::= 'inline'? callOrArrayTail ( callExpression | arrayAccessExpression | qualifiedNullSafeReferenceExpression)*? callExpression
965
- private arrayAccess ::= callOrArrayTail ( callExpression | arrayAccessExpression | qualifiedNullSafeReferenceExpression)*? arrayAccessExpression
953
+ private callOrArrayTail ::= ( thisSuperAbstractOrReferenceExpression | parenthesizedExpression)
966
954
private immediateArrayAccess ::= arrayLiteral arrayAccessExpression
955
+
967
956
// spread operator only allowed as last last argument in calls expressions
968
957
spreadExpression ::= (iteratorOperator (referenceExpression | arrayLiteral)) { extends = unaryExpression}
969
958
@@ -976,6 +965,8 @@ left arrayAccessExpression ::= '[' expression ']'
976
965
identifierOrReferenceAllowedKeyword ::= identifier | 'new'
977
966
{extends= identifier}
978
967
968
+ private thisSuperAbstractOrReferenceExpression ::= referenceExpression | thisExpression | superExpression | abstractExpression
969
+
979
970
referenceExpression ::= identifier
980
971
{mixin="com.intellij.plugins.haxe.lang.psi.impl.HaxeReferenceImpl" implements="com.intellij.plugins.haxe.lang.psi.HaxeReference"}
981
972
left qualifiedNullSafeReferenceExpression ::= ('?.'|'.') identifierOrReferenceAllowedKeyword {elementType="referenceExpression" pin=2}
0 commit comments