Browse Source

changes for the mod

Kajetan Johannes Hammerle 6 years ago
parent
commit
715d0e5752

+ 1 - 2
src/me/hammerle/snuviscript/SnuviScript.java

@@ -61,8 +61,7 @@ public class SnuviScript
             }
         };
         SnuviParser parser = new SnuviParser(logger, scheduler);
-        parser.startScript(true, ".sbasic", "./test", "./test2");
-        
+        parser.startScript(true, ".sbasic", "./test");    
         parser.callEvent("testevent", null, null);
     }  
 }

+ 2 - 2
src/me/hammerle/snuviscript/array/DynamicArray.java

@@ -3,7 +3,7 @@ package me.hammerle.snuviscript.array;
 import me.hammerle.snuviscript.code.InputProvider;
 import me.hammerle.snuviscript.variable.Variable;
 import java.lang.reflect.Array;
-import me.hammerle.snuviscript.code.Utils;
+import me.hammerle.snuviscript.code.SnuviUtils;
 import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.variable.LocalVariable;
 import me.hammerle.snuviscript.math.Fraction;
@@ -97,7 +97,7 @@ public class DynamicArray extends InputProvider
         }
         catch(IllegalArgumentException ex)
         {
-            return Utils.getArrayString(Array.get(last, index));
+            return SnuviUtils.getArrayString(Array.get(last, index));
         }
     }
 

+ 10 - 10
src/me/hammerle/snuviscript/code/Compiler.java

@@ -331,12 +331,12 @@ public class Compiler
         //System.out.println("__________________________________");
         
         Instruction[] input = code.toArray(new Instruction[code.size()]);
-        
+        /*
         for(Instruction in : input)
         {
             System.out.println(in);
         }
-        System.out.println("__________________________________");
+        System.out.println("__________________________________");*/
         /*labels.entrySet().stream().forEach((e) -> 
         {
             System.out.println("LABEL " + e.getKey() + " " + e.getValue());
@@ -348,7 +348,7 @@ public class Compiler
     private void compileLine(String currentCode)
     {
         //System.out.println(">>>"  + currentCode);
-        String[] parts = Utils.split(strings, currentCode, line);
+        String[] parts = SnuviUtils.split(strings, currentCode, line);
         //System.out.println(">>> " + String.join("_", parts));
         if(tryState != null)
         {
@@ -401,7 +401,7 @@ public class Compiler
             if(bPos != -1)
             {
                 input = parts[0].substring(0, bPos);
-                parts = Utils.split(strings, parts[0].substring(bPos + 1, parts[0].length() - 1), line);
+                parts = SnuviUtils.split(strings, parts[0].substring(bPos + 1, parts[0].length() - 1), line);
             }
             else
             {
@@ -634,14 +634,14 @@ public class Compiler
         {
             return ConstantNull.NULL;
         }
-        else if(Utils.isNumber(input))
+        else if(SnuviUtils.isNumber(input))
         {
             return new ConstantFraction(Fraction.fromDouble(Double.parseDouble(input)));
         }
-        else if(Utils.isFunction(input))
+        else if(SnuviUtils.isFunction(input))
         {
             int bPos = input.indexOf('(');
-            String[] parts = Utils.split(strings, input.substring(bPos + 1, input.length() - 1), line);
+            String[] parts = SnuviUtils.split(strings, input.substring(bPos + 1, input.length() - 1), line);
             if(parts.length > 0)
             {
                 return new Function(FunctionLoader.getFunction(input.substring(0, bPos)), compileFunction(parts, false));
@@ -651,10 +651,10 @@ public class Compiler
                 return new Function(FunctionLoader.getFunction(input.substring(0, bPos)), new InputProvider[0]);
             }
         }
-        else if(Utils.isArray(input))
+        else if(SnuviUtils.isArray(input))
         {
             int bPos = input.indexOf('[');
-            String[] parts = Utils.split(strings, input.substring(bPos + 1, input.length() - 1), line);
+            String[] parts = SnuviUtils.split(strings, input.substring(bPos + 1, input.length() - 1), line);
             if(parts.length > 0)
             {
                 return createArray(input.substring(0, bPos), compileFunction(parts, false));
@@ -684,7 +684,7 @@ public class Compiler
         {
             return null;
         }
-        else if(Utils.isNumber(input))
+        else if(SnuviUtils.isNumber(input))
         {
             return Fraction.fromDouble(Double.parseDouble(input));
         }

+ 7 - 9
src/me/hammerle/snuviscript/code/FunctionLoader.java

@@ -158,7 +158,7 @@ public class FunctionLoader
         registerFunction("math.pi", (sc, in) -> Fraction.PI);
         registerFunction("math.ln", (sc, in) -> in[0].getFraction(sc).log());
         registerFunction("math.log", (sc, in) -> in[0].getFraction(sc).log10());
-        registerFunction("math.random", (sc, in) -> new Fraction(Utils.randomInt(in[0].getInt(sc), in[1].getInt(sc))));
+        registerFunction("math.random", (sc, in) -> new Fraction(SnuviUtils.randomInt(in[0].getInt(sc), in[1].getInt(sc))));
         registerFunction("math.round", (sc, in) -> in[0].getFraction(sc).round());
         registerFunction("math.rounddown", (sc, in) -> in[0].getFraction(sc).floor());
         registerFunction("math.roundup", (sc, in) -> in[0].getFraction(sc).ceil());
@@ -360,19 +360,19 @@ public class FunctionLoader
             return String.valueOf(f.doubleValue()); 
         });
         registerFunction("text.class", (sc, in) -> in[0].get(sc).getClass().getSimpleName());      
-        registerFunction("text.tolowercase", (sc, in) -> Utils.connect(sc, in, 0).toLowerCase());
+        registerFunction("text.tolowercase", (sc, in) -> SnuviUtils.connect(sc, in, 0).toLowerCase());
         registerAlias("tolowercase", "text.tolowercase");
-        registerFunction("text.touppercase", (sc, in) -> Utils.connect(sc, in, 0).toUpperCase());
+        registerFunction("text.touppercase", (sc, in) -> SnuviUtils.connect(sc, in, 0).toUpperCase());
         registerAlias("touppercase", "text.touppercase");
         registerFunction("text.split", (sc, in) ->      
         {
-            in[0].set(sc, Arrays.stream(Utils.connect(sc, in, 2).split(in[1].getString(sc))).map(s -> Compiler.convert(s)).collect(Collectors.toList()));
+            in[0].set(sc, Arrays.stream(SnuviUtils.connect(sc, in, 2).split(in[1].getString(sc))).map(s -> Compiler.convert(s)).collect(Collectors.toList()));
             return Void.TYPE;
         });  
         registerAlias("split", "text.split");
         registerFunction("text.concatlist", (sc, in) -> ((List<Object>) in[0].get(sc)).stream().limit(in[3].getInt(sc) + 1).skip(in[2].getInt(sc)).map(o -> String.valueOf(o)).collect(Collectors.joining(in[1].getString(sc))));       
         registerAlias("concatlist", "text.concatlist");
-        registerFunction("text.concat", (sc, in) -> Utils.connect(sc, in, 0)); 
+        registerFunction("text.concat", (sc, in) -> SnuviUtils.connect(sc, in, 0)); 
         registerAlias("concat", "text.concat");
         registerFunction("text", (sc, in) -> String.valueOf(in[0].get(sc)));       
         registerFunction("text.substring", (sc, in) -> in[0].getString(sc).substring(in[1].getInt(sc), in[2].getInt(sc))); 
@@ -763,10 +763,9 @@ public class FunctionLoader
         });
         registerFunction("print", (sc, in) -> 
         {
-            System.out.println(Utils.connect(sc, in, 0));
+            System.out.println(SnuviUtils.connect(sc, in, 0));
             return Void.TYPE;
         });
-        
         registerFunction("waitfor", (sc, in) ->    
         {
             if(sc.subScript)
@@ -794,8 +793,7 @@ public class FunctionLoader
         });
         registerFunction("term", (sc, in) -> 
         {
-            // TODO
-            // { termSafe(sc); throw new HoldCodeException(); }); 
+            sc.parser.termSafe(sc);
             return Void.TYPE;
         });
                 

+ 26 - 8
src/me/hammerle/snuviscript/code/Script.java

@@ -4,6 +4,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Stack;
+import java.util.function.Consumer;
 import me.hammerle.snuviscript.exceptions.CodeTooLongException;
 import me.hammerle.snuviscript.variable.LocalVariable;
 import me.hammerle.snuviscript.variable.Variable;
@@ -13,6 +14,7 @@ public final class Script
     protected final String name;
     protected final int id;
     
+    protected SnuviParser parser;
     protected ISnuviLogger logger;
     protected ISnuviScheduler scheduler;
     
@@ -46,14 +48,15 @@ public final class Script
     
     protected boolean printStackTrace;
     
-    private final Runnable onStart;
-    private final Runnable onTerm;
+    private final Consumer<Script> onStart;
+    private final Consumer<Script> onTerm;
     
-    public Script(ISnuviLogger logger, ISnuviScheduler scheduler, List<String> code, String name, 
-            int id, Runnable onStart, Runnable onTerm, boolean receiveEventBroadcast)
+    public Script(SnuviParser parser, List<String> code, String name,  int id, 
+            Consumer<Script> onStart, Consumer<Script> onTerm, boolean receiveEventBroadcast)
     {
-        this.logger = logger;
-        this.scheduler = scheduler;
+        this.parser = parser;
+        this.logger = parser.getLogger();
+        this.scheduler = parser.getScheduler();
         this.subScriptInput = null;
         this.subScripts = new HashMap<>();
         this.labels = new HashMap<>();
@@ -81,6 +84,7 @@ public final class Script
     
     public Script(List<String> code, String[] subScriptInput, Script sc, int lineOffset)
     {
+        this.parser = sc.parser;
         this.logger = sc.logger;
         this.scheduler = sc.scheduler;
         this.subScriptInput = subScriptInput;
@@ -172,6 +176,10 @@ public final class Script
                 return Void.TYPE;
             }
         }
+        if(currentLine >= length && !isWaiting)
+        {
+            parser.termSafe(this);
+        }
         return returnValue;
     }
     
@@ -180,6 +188,11 @@ public final class Script
         currentLine = code.length;
     }
     
+    public int getActiveRealLine()
+    {
+        return code[currentLine].getRealLine();
+    }
+    
     // -------------------------------------------------------------------------
     // general stuff
     // -------------------------------------------------------------------------
@@ -199,6 +212,11 @@ public final class Script
         return logger;
     }
     
+    public boolean isStackTracePrinted()
+    {
+        return printStackTrace;
+    }
+    
     public Variable getVar(String name)
     {
         HashMap<String, Variable> map;
@@ -257,7 +275,7 @@ public final class Script
     {
         if(onStart != null)
         {
-            onStart.run();
+            onStart.accept(this);
         }
     }
     
@@ -265,7 +283,7 @@ public final class Script
     {
         if(onTerm != null)
         {
-            onTerm.run();
+            onTerm.accept(this);
         }
     }
 }

+ 15 - 3
src/me/hammerle/snuviscript/code/SnuviParser.java

@@ -27,6 +27,16 @@ public class SnuviParser
         termQueue = new LinkedList<>();
         idCounter = 0;
     }
+
+    public ISnuviLogger getLogger() 
+    {
+        return logger;
+    }
+
+    public ISnuviScheduler getScheduler() 
+    {
+        return scheduler;
+    }
     
     // -----------------------------------------------------------------------------------
     // function registry
@@ -68,6 +78,8 @@ public class SnuviParser
         {
             return;
         }
+        sc.isHolded = true;
+        sc.isWaiting = true;
         sc.isValid = false;
         termQueue.add(sc.id);
     }
@@ -104,7 +116,7 @@ public class SnuviParser
         return scripts.values();
     }
     
-    private Script startScript(boolean rEventBroadcast, Runnable onStart, Runnable onTerm, String end, String... paths)
+    public Script startScript(boolean rEventBroadcast, Consumer<Script> onStart, Consumer<Script> onTerm, String end, String... paths)
     { 
         if(paths.length == 0)
         {
@@ -112,8 +124,8 @@ public class SnuviParser
         }
         try
         {            
-            List<String> code = Utils.readCode(end, paths);
-            Script sc = new Script(logger, scheduler, code, paths[0], idCounter++, onStart, onTerm, rEventBroadcast);
+            List<String> code = SnuviUtils.readCode(end, paths);
+            Script sc = new Script(this, code, paths[0], idCounter++, onStart, onTerm, rEventBroadcast);
             scripts.put(sc.id, sc);
             sc.onStart();
             sc.run();

+ 1 - 1
src/me/hammerle/snuviscript/code/Utils.java → src/me/hammerle/snuviscript/code/SnuviUtils.java

@@ -16,7 +16,7 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import me.hammerle.snuviscript.exceptions.PreScriptException;
 
-public class Utils 
+public class SnuviUtils 
 {
     private static final Random RANDOM = new Random();
     

+ 1 - 1
src/me/hammerle/snuviscript/config/SnuviConfig.java

@@ -45,7 +45,7 @@ public class SnuviConfig
     
     private void print(String message, Exception ex)
     {
-        logger.print(message, ex, null, sc == null ? null : sc.getName(), sc, -1);
+        logger.print(message, ex, null, sc == null ? null : sc.getName(), sc, sc == null ? -1 : sc.getActiveRealLine());
     }
     
     private void print(String message)

+ 2 - 2
src/me/hammerle/snuviscript/variable/ArrayVariable.java

@@ -1,6 +1,6 @@
 package me.hammerle.snuviscript.variable;
 
-import me.hammerle.snuviscript.code.Utils;
+import me.hammerle.snuviscript.code.SnuviUtils;
 import me.hammerle.snuviscript.code.Script;
 
 public class ArrayVariable extends Variable
@@ -13,7 +13,7 @@ public class ArrayVariable extends Variable
     @Override
     public String getString(Script sc) 
     {
-        return Utils.getArrayString(get(sc));
+        return SnuviUtils.getArrayString(get(sc));
     }
 
     @Override

+ 2 - 2
src/me/hammerle/snuviscript/variable/LocalArrayVariable.java

@@ -1,7 +1,7 @@
 package me.hammerle.snuviscript.variable;
 
 import java.util.HashMap;
-import me.hammerle.snuviscript.code.Utils;
+import me.hammerle.snuviscript.code.SnuviUtils;
 import me.hammerle.snuviscript.code.Script;
 
 public class LocalArrayVariable extends LocalVariable
@@ -14,7 +14,7 @@ public class LocalArrayVariable extends LocalVariable
     @Override
     public String getString(Script sc) 
     {
-        return Utils.getArrayString(get(sc));
+        return SnuviUtils.getArrayString(get(sc));
     }
     
     @Override

+ 7 - 10
test.sbasic

@@ -1,10 +1,7 @@
-waitfor(20);
-print("hallo");
-
-function hallo(n)
-{
-    print(20);
-}
-
-hallo("DICK");
-hallo("4354");
+a = 3;
+b_s = 7;
+event.load("testevent");
+print(b_s);
+print(b_s);
+print(b_s);
+wait();

+ 0 - 3
test2.sbasic

@@ -1,3 +0,0 @@
-hallo("1");
-hallo("2");
-hallo("3");