多次元配列を実�
This commit is contained in:
@@ -569,7 +569,7 @@ class PushArray : Code
|
||||
override void execute(VM vm)
|
||||
{
|
||||
int[4] index;
|
||||
for(int i = dim - 1; i >= 0; i--)
|
||||
for(int i = 0; i < dim; i++)
|
||||
{
|
||||
Value v;
|
||||
vm.pop(v);
|
||||
@@ -636,7 +636,7 @@ class PopGArray : Code
|
||||
throw new TypeMismatch();
|
||||
}
|
||||
int[4] index;
|
||||
for(int i = 0; i < dim; i++)//for(int i = dim - 1; i >= 0; i--)
|
||||
for(int i = 0; i < dim; i++)
|
||||
{
|
||||
Value v;
|
||||
vm.pop(v);
|
||||
|
||||
@@ -274,14 +274,14 @@ class Compiler
|
||||
{
|
||||
DefineArray var = cast(DefineArray)v;
|
||||
int siz = 0;
|
||||
foreach_reverse(Expression expr; var.dim)
|
||||
foreach_reverse(Expression expr; var.dim.expressions)
|
||||
{
|
||||
compileExpression(expr);
|
||||
siz++;
|
||||
if(siz == 4)
|
||||
break;//4次元まで(パーサーで除去するけど万が一に備えて
|
||||
}
|
||||
genCode(new NewArray(getType(var.name), var.dim.length, defineGlobalVarIndex(var.name)));
|
||||
genCode(new NewArray(getType(var.name), var.dim.expressions.length, defineGlobalVarIndex(var.name)));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,9 +53,9 @@ FOR I=0 TO 10
|
||||
IF I==1 THEN CONTINUE
|
||||
?I
|
||||
NEXT
|
||||
VAR V[10]
|
||||
VAR V[10,10]
|
||||
V[0,1]=12
|
||||
?V[1]
|
||||
?V[0,1]
|
||||
?\"ABC\"[1][0]
|
||||
GOSUB @A
|
||||
END
|
||||
|
||||
@@ -325,8 +325,8 @@ class DefineVariable : Statement
|
||||
class DefineArray : Statement
|
||||
{
|
||||
wstring name;
|
||||
Expression[] dim;
|
||||
this(wstring name, Expression[] dim)
|
||||
IndexExpressions dim;
|
||||
this(wstring name, IndexExpressions dim)
|
||||
{
|
||||
this.type = NodeType.DefineArray;
|
||||
this.name = name;
|
||||
|
||||
@@ -649,20 +649,11 @@ class Parser
|
||||
if(token.type == TokenType.LBracket)
|
||||
{
|
||||
lex.popFront();
|
||||
Expression[] dim = new Expression[0];
|
||||
while(true)
|
||||
{
|
||||
expr = expression();
|
||||
auto dim = indexExpressions();
|
||||
token = lex.front();
|
||||
if(token.type != TokenType.RBracket)
|
||||
{
|
||||
syntaxError();
|
||||
break;
|
||||
}
|
||||
dim ~= expr;
|
||||
return null;
|
||||
lex.popFront();
|
||||
break;
|
||||
}
|
||||
DefineArray ary = new DefineArray(name, dim);
|
||||
return ary;
|
||||
}
|
||||
@@ -872,7 +863,7 @@ class Parser
|
||||
{
|
||||
op.item2 = indexExpressions();
|
||||
//[演算子
|
||||
if(lex.front().type != TokenType.RBracket) syntaxError();
|
||||
if(lex.front().type != TokenType.RBracket) return null;
|
||||
lex.popFront();
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user