aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler.d4
-rw-r--r--dbg.d3
-rw-r--r--vm.d34
3 files changed, 24 insertions, 17 deletions
diff --git a/compiler.d b/compiler.d
index 119414c..3b684d4 100644
--- a/compiler.d
+++ b/compiler.d
@@ -716,7 +716,9 @@ class Compiler {
Function finish() {
this.func.chunk.writeOp(OpCode.OP_RETURN, current.line);
- disassembleChunk(this.func.chunk, to!string(func));
+ if (DEBUG) {
+ disassembleChunk(this.func.chunk, to!string(func));
+ }
return this.func;
}
diff --git a/dbg.d b/dbg.d
index 5a98264..19e92b1 100644
--- a/dbg.d
+++ b/dbg.d
@@ -8,6 +8,9 @@ import parser;
//import dbg;
//import value;
+bool DEBUG = true;
+
+
void printForm(Form f, string prefix = "") {
switch (f.type) {
case FormType.EOF:
diff --git a/vm.d b/vm.d
index d2968a3..7e91de1 100644
--- a/vm.d
+++ b/vm.d
@@ -224,22 +224,25 @@ class VM {
InterpretResult run() {
writeln("== VM running ==");
while (true) {
- writeln(" Stacks:");
- write(" A> ");
- for (int i = 0; i < aTop; i++) {
- writef("[ %s ]", printableValue(aStack[i]));
+ if (DEBUG) {
+ writeln(" Stacks:");
+ write(" A> ");
+ for (int i = 0; i < aTop; i++) {
+ writef("[ %s ]", printableValue(aStack[i]));
+ }
+ write("\n B> ");
+ for (int i = 0; i < bTop; i++) {
+ //writef("[ %s ]", printableValue(bStack[i]));
+ writef("[ %s ]", printableValue(current.slots[i]));
+ }
+
+ write("\n constants> ");
+ for (int i = 0; i < current.func.chunk.constants.length; i++) {
+ writef("[ %s ]", printableValue(current.func.chunk.constants[i]));
+ }
+ writeln("\n--");
+ disassemble(current.func.chunk, current.ip);
}
- write("\n B> ");
- for (int i = 0; i < bTop; i++) {
- //writef("[ %s ]", printableValue(bStack[i]));
- writef("[ %s ]", printableValue(current.slots[i]));
- }
-
- write("\n constants> ");
- for (int i = 0; i < current.func.chunk.constants.length; i++) {
- writef("[ %s ]", printableValue(current.func.chunk.constants[i]));
- }
- writeln("\n--");
/*
write(" globals >");
@@ -250,7 +253,6 @@ class VM {
writeln("\n--");
*/
- disassemble(current.func.chunk, current.ip);
ubyte inst;
switch (inst = this.readByte()) {
case OpCode.OP_DEF_GLOBAL: