Browse Source

made stacktrace contain input file number

Kajetan Johannes Hammerle 4 years ago
parent
commit
a6412e8ff4

+ 2 - 2
src/me/hammerle/snuviscript/code/Script.java

@@ -149,7 +149,7 @@ public final class Script {
                     errorLine = -1;
                     continue;
                 }
-                sm.getLogger().print(null, ex, code[lineIndex].getName(), name, this, new StackTrace(code[lineIndex].getLine(), returnStack));
+                sm.getLogger().print(null, ex, code[lineIndex].getName(), name, this, new StackTrace(code[lineIndex].getLine(), returnStack, code));
                 break;
             }
 
@@ -181,7 +181,7 @@ public final class Script {
 
     public StackTrace getStackTrace() {
         if(lineIndex >= 0 && lineIndex < code.length) {
-            return new StackTrace(code[lineIndex].getLine(), returnStack);
+            return new StackTrace(code[lineIndex].getLine(), returnStack, code);
         }
         return null;
     }

+ 15 - 5
src/me/hammerle/snuviscript/exceptions/StackTrace.java

@@ -1,23 +1,33 @@
 package me.hammerle.snuviscript.exceptions;
 
 import java.util.Stack;
+import me.hammerle.snuviscript.instructions.Instruction;
 
 public class StackTrace {
     private final String stackTrace;
 
-    public StackTrace(int currentLine, Stack<Integer> stack) {
-        if(stack == null) {
+    public StackTrace(int currentLine, Stack<Integer> stack, Instruction[] code) {
+        if(stack == null || code == null) {
             stackTrace = String.valueOf(currentLine);
             return;
         }
         StringBuilder sb = new StringBuilder();
-        stack.forEach(line -> sb.append(line).append(" > "));
-        sb.append(currentLine);
+        stack.forEach(stackLine -> {
+            int line = code[stackLine].getLine();
+            int file = (line >> 24) & 0xFF;
+            line &= 0xFFFFFF;
+            sb.append(line).append("(").append(file).append(") > ");
+
+        });
+        int file = (currentLine >> 24) & 0xFF;
+        currentLine &= 0xFFFFFF;
+        sb.append(currentLine).append("(").append(file).append(")");
+
         stackTrace = sb.toString();
     }
 
     public StackTrace(int currentLine) {
-        this(currentLine, null);
+        this(currentLine, null, null);
     }
 
     @Override

+ 3 - 1
src/me/hammerle/snuviscript/tokenizer/Tokenizer.java

@@ -54,8 +54,10 @@ public class Tokenizer {
 
     public Token[] tokenize(InputStream... streams) {
         tokens.clear();
+        int fileCounter = 0;
         for(InputStream in : streams) {
-            line = 1;
+            fileCounter++;
+            line = (fileCounter << 24) | 1;
             stream = new StreamCharReader(in);
 
             int c;