From 2880d7e007e9ae8234984efa5cc957c1a194bc69 Mon Sep 17 00:00:00 2001 From: sam-astro <77079540+sam-astro@users.noreply.github.com> Date: Sun, 2 Jan 2022 15:59:30 -0500 Subject: [PATCH] Performance fix --- Slang/Main.cpp | 43 ++++++++++++++++++++++++------------------- Slang/builtin.slg | 1 + Slang/graphics.h | 2 +- Slang/main.h | 2 +- Slang/script.slg | 24 ++++++++++++++++++------ 5 files changed, 45 insertions(+), 27 deletions(-) diff --git a/Slang/Main.cpp b/Slang/Main.cpp index 9753657..968dbb7 100644 --- a/Slang/Main.cpp +++ b/Slang/Main.cpp @@ -176,14 +176,14 @@ vector VarValues(vector varNames, vector& variables, vec return realValues; } -bool IsFunction(string funcName) +int IsFunction(string funcName) { // Iterate through all functions for (int t = 0; t < (int)functions.size(); t++) if (trim(funcName) == split(functions[t], ' ')[0]) - return true; + return t; - return false; + return -1; } string EvalExpression(string expression, vector& variables, vector& variableVals) @@ -194,7 +194,8 @@ string EvalExpression(string expression, vector& variables, vector& variables, vector& variables, vector& variables, vector> words, int lineNum, vector& va { if (split(words[lineNum][0], '(')[0] == split(functions[t], ' ')[0]) { - ExecuteFunction(split(functions[t], ' ')[0], VarValues(split(RMParenthesis(replace(unWrapVec(words[lineNum]), split(functions[t], ' ')[0], "")), ','), variables, variableValues)); + ExecuteFunction(split(functions[t], ' ')[0], VarValues(split(RMParenthesis(replace(unWrapVec(words[lineNum]), split(functions[t], ' ')[0], "")), ','), variables, variableValues), t); return ""; } } @@ -575,20 +577,23 @@ string ProcessLine(vector> words, int lineNum, vector& va return ""; } -string ExecuteFunction(string functionName, vector inputVarVals) +string ExecuteFunction(string functionName, vector inputVarVals, int functionIndex) { //vector inputVarVals = split(replace(inVals, " ", ""), ','); - vector functionLines; - int functionIndex = 0; //Get index of function - for (int f = 0; f < (int)functions.size(); f++) - if (split(functions[f], ' ')[0] == functionName) - { - functionLines = functionValues[f]; - functionIndex = f; - break; - } + if (functionIndex == -1) + { + for (int f = 0; f < (int)functions.size(); f++) + if (split(functions[f], ' ')[0] == functionName) + { + functionLines = functionValues[f]; + functionIndex = f; + break; + } + } + else + functionLines = functionValues[functionIndex]; vector variables; vector variableValues; @@ -683,7 +688,7 @@ int parseSlang(string script) } // Executes main, which is the starting function - ExecuteFunction("Main", vector {"\"hi\"", "0"}); + ExecuteFunction("Main", vector {"\"hi\"", "0"}, -1); return 0; } diff --git a/Slang/builtin.slg b/Slang/builtin.slg index 1552e2c..8cb78e8 100644 --- a/Slang/builtin.slg +++ b/Slang/builtin.slg @@ -3,6 +3,7 @@ float EulersNumber = 2.71828183 float Sin(float input) { + print input float out = CPP.Math.Sin(input) return out } diff --git a/Slang/graphics.h b/Slang/graphics.h index 74b796d..0030841 100644 --- a/Slang/graphics.h +++ b/Slang/graphics.h @@ -34,7 +34,7 @@ public: bool OnUserUpdate(float fElapsedTime) override { - ExecuteFunction("Update", vector {""}); + ExecuteFunction("Update", vector {""}, -1); // Called once per frame //for (int x = 0; x < ScreenWidth(); x++) diff --git a/Slang/main.h b/Slang/main.h index 78a8caf..cf8006c 100644 --- a/Slang/main.h +++ b/Slang/main.h @@ -4,6 +4,6 @@ using namespace std; -string ExecuteFunction(string functionName, vector inputVarVals); +string ExecuteFunction(string functionName, vector inputVarVals, int functionIndex); #endif \ No newline at end of file diff --git a/Slang/script.slg b/Slang/script.slg index 8c922ed..3543223 100644 --- a/Slang/script.slg +++ b/Slang/script.slg @@ -4,12 +4,14 @@ void Main(string input, int in) { print "PI is: " + PI int x = 1 - + print x float k = 0 - + print k while x < 5 { + print x float s = Sin(x) + print s int k = Sigmoid(s) print k @@ -19,9 +21,19 @@ void Main(string input, int in) CPP.Graphics.Init(64, 64, 4) } -void Update(string x, string y) +void Update(string input) { - SetPixel(x, y, 255, 0, 0) - y += 1 - // print "updating" + int x = 0 + int y = 0 + while x < 64 + { + while y < 64 + { + SetPixel(x, y, 255, 0, 0) + y += 1 + } + y = 0 + x += 1 + } + print "updating" } \ No newline at end of file