From f1ecd08462b8652c7cf0aac154efb3dfbffa34d8 Mon Sep 17 00:00:00 2001 From: otya128 Date: Sat, 13 Jun 2015 20:34:19 +0900 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=81=82=E3=82=8A=E9=96=A2?= =?UTF-8?q?=E6=95=B0=E3=82=92=E5=91=BC=E3=81=B9=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/VM.d | 4 +++- SMILEBASIC/compiler.d | 2 +- SMILEBASIC/main.d | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 55e6553..2a818f0 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -710,6 +710,7 @@ class ReturnFunction : Code Value bp, pc; vm.pop(pc); vm.pop(bp); + vm.stacki -= func.argCount; if(func.returnExpr) { vm.push(retexpr); @@ -739,9 +740,10 @@ class CallFunctionCode : Code throw new IllegalFunctionCall(); } //TODO:args + auto bp = vm.stacki; vm.push(Value(vm.bp)); vm.push(Value(vm.pc)); - vm.bp = vm.stacki - 2; + vm.bp = bp; vm.pc = func.address - 1; } } diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d index 7d029f7..72417b9 100644 --- a/SMILEBASIC/compiler.d +++ b/SMILEBASIC/compiler.d @@ -71,7 +71,7 @@ class Function int var = this.variable.get(name, 0); if(var == 0) { - this.variable[name] = var = ++variableIndex; + this.variable[name] = var = --argumentIndex; } else { diff --git a/SMILEBASIC/main.d b/SMILEBASIC/main.d index a67ed1f..741288a 100644 --- a/SMILEBASIC/main.d +++ b/SMILEBASIC/main.d @@ -60,6 +60,7 @@ V[0,1]=12 ?1/2 GOSUB @A ?A() +?B(1,2,3) END @A ?\"SUBROUTINE TEST\" @@ -70,7 +71,7 @@ DEF A() END DEF B(A,B[],C) ?\"FUNCTION B\" - RETURN 0 + RETURN -1 END "); version(none) auto parser = new Parser(readText("FIZZBUZZ.TXT").to!wstring);