@@ -107,11 +107,6 @@ private void AddExpressions(ScriptFile result, IReadOnlyList<StatementSyntax> ex
107
107
108
108
private void AddPostfixUnaryStatement ( ScriptFile result , PostfixUnaryStatementSyntax postfixUnaryStatement )
109
109
{
110
- if ( postfixUnaryStatement . Expression . Value is not ValueExpressionSyntax { Value : VariableExpressionSyntax variable } )
111
- throw CreateException ( $ "Invalid expression { postfixUnaryStatement . Expression . Value . GetType ( ) . Name } ", postfixUnaryStatement . Expression . Value . Location ) ;
112
-
113
- int variableSlot = GetVariable ( variable ) ;
114
-
115
110
int instructionType ;
116
111
switch ( postfixUnaryStatement . Expression . Operation . RawKind )
117
112
{
@@ -126,10 +121,36 @@ private void AddPostfixUnaryStatement(ScriptFile result, PostfixUnaryStatementSy
126
121
default :
127
122
throw CreateException ( $ "Invalid operation { ( SyntaxTokenKind ) postfixUnaryStatement . Expression . Operation . RawKind } in postfix unary expression.", postfixUnaryStatement . Expression . Location ) ;
128
123
}
124
+
125
+ if ( postfixUnaryStatement . Expression . Value is ValueExpressionSyntax { Value : VariableExpressionSyntax variable } )
126
+ {
127
+ int variableSlot = GetVariable ( variable ) ;
128
+ AddVariablePostfixUnaryStatement ( result , instructionType , variableSlot ) ;
129
+ }
130
+ else if ( postfixUnaryStatement . Expression . Value is ArrayIndexExpressionSyntax { Value . Value : VariableExpressionSyntax variable1 } arrayValue )
131
+ {
132
+ int variableSlot = GetVariable ( variable1 ) ;
133
+ AddArrayPostfixUnaryVariableStatement ( result , arrayValue . Indexer , instructionType , variableSlot ) ;
134
+ }
135
+ else
136
+ throw CreateException ( $ "Invalid expression { postfixUnaryStatement . Expression . Value . GetType ( ) . Name } ", postfixUnaryStatement . Expression . Value . Location ) ;
137
+ }
129
138
139
+ private void AddVariablePostfixUnaryStatement ( ScriptFile result , int instructionType , int variableSlot )
140
+ {
130
141
AddInstruction ( result , result . Arguments . Count , 0 , instructionType , variableSlot ) ;
131
142
}
132
143
144
+ private void AddArrayPostfixUnaryVariableStatement ( ScriptFile result , IReadOnlyList < ArrayIndexerExpressionSyntax > indexer , int instructionType , int variableSlot )
145
+ {
146
+ int argumentIndex = result . Arguments . Count ;
147
+
148
+ foreach ( var index in indexer )
149
+ AddArgument ( result , index . Index ) ;
150
+
151
+ AddInstruction ( result , argumentIndex , indexer . Count , instructionType , variableSlot ) ;
152
+ }
153
+
133
154
private void AddIfGotoStatement ( ScriptFile result , IfGotoStatementSyntax ifGotoStatement )
134
155
{
135
156
var argumentStartIndex = ( short ) result . Arguments . Count ;
0 commit comments