Browse Source

error callback

Kajetan Johannes Hammerle 2 years ago
parent
commit
be98822a44
1 changed files with 19 additions and 2 deletions
  1. 19 2
      src/me/hammerle/snuviscript/code/Script.java

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

@@ -114,8 +114,25 @@ public final class Script {
                 // System.out.println("AFTER EXECUTE: " + dataStack);
                 lineIndex++;
             } catch(Exception ex) {
-                logException(ex, instr.getName(), instr.getLine());
-                break;
+                Integer errorCallback = labels.get("on_error");
+                if(errorCallback != null) {
+                    setVar("error_stacktrace",
+                            new StackTrace(instr.getLine(), returnStack, code).toString());
+                    setVar("error_function", instr.getName());
+                    setVar("error_name", ex.getClass().getSimpleName());
+                    setVar("error_message", ex.getMessage());
+                    lineIndex = errorCallback + 1;
+                    dataStack.clear();
+                    returnStack.clear();
+                    ifState.clear();
+                    ifState.push(true);
+                    localVars.clear();
+                    inFunction.clear();
+                    returnVarPop.clear();
+                } else {
+                    logException(ex, instr.getName(), instr.getLine());
+                    break;
+                }
             }
 
             if(System.nanoTime() > endTime) {