1
0

関数内でローカル変数やグローバル変数にアクセスできなかった問題を修正,BGFILL,SPCHK,SPVARなど実装

This commit is contained in:
otya128
2015-08-29 16:23:41 +09:00
parent d05166a3b9
commit 4525728dd5
8 changed files with 215 additions and 34 deletions

View File

@@ -213,6 +213,15 @@ class Compiler
}
void genCodePushVar(wstring name, Scope sc)
{
if(sc.func)
{
auto local = sc.func.hasLocalVarIndex(name);
if(local)
{
code ~= new PushL(local);
return;
}
}
auto global = hasGlobalVarIndex(name);
if(global)
{
@@ -233,6 +242,15 @@ class Compiler
}
void genCodePopVar(wstring name, Scope sc)
{
if(sc.func)
{
auto local = sc.func.hasLocalVarIndex(name);
if(local)
{
code ~= new PopL(local);
return;
}
}
auto global = hasGlobalVarIndex(name);
if(global)
{
@@ -821,7 +839,10 @@ class Compiler
auto assign = cast(ArrayAssign)i;
compileExpression(assign.assignExpression, s);
compileExpression(assign.indexExpression, s);
genCode(new PopArray(getGlobalVarIndex(assign.name), cast(int)assign.indexExpression.expressions.length, !(s.func is null)));
int index;
bool local;
getVarIndex(assign.name, s, index, local);
genCode(new PopArray(index, cast(int)assign.indexExpression.expressions.length, local));
}
break;
case NodeType.CallFunctionStatement: