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