Update Main.cpp

Disable for comment checking, make `ZS.` check safer, allow more variables to be initialized outside of functions (global), let people set the global builtin variable of `EXIT_WHEN_DONE` to true or false, depending if they are a developer and want to leave the console window open after the program finishes.
This commit is contained in:
sam-astro 2022-05-27 08:14:03 -04:00 committed by GitHub
parent bfc3c4d727
commit 89392bc34d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -391,9 +391,9 @@ int varOperation(const vector<string>& str, unordered_map<string, boost::any>& v
boost::any ProcessLine(const vector<vector<string>>& words, int& lineNum, unordered_map<string, boost::any>& variableValues) boost::any ProcessLine(const vector<vector<string>>& words, int& lineNum, unordered_map<string, boost::any>& variableValues)
{ {
// Check if the first two chars are '//', which would make it a comment //// Check if the first two chars are '//', which would make it a comment
if (startsWith(words.at(lineNum).at(0), "//")) //if (startsWith(words.at(lineNum).at(0), "//"))
return nullType; // return nullType;
// If print statement (deprecated, now use ZS.System.Print() function) // If print statement (deprecated, now use ZS.System.Print() function)
else if (words.at(lineNum).at(0) == "print") else if (words.at(lineNum).at(0) == "print")
@ -407,7 +407,7 @@ boost::any ProcessLine(const vector<vector<string>>& words, int& lineNum, unorde
return EvalExpression(unWrapVec(vector<string>(words.at(lineNum).begin() + 1, words.at(lineNum).end())), variableValues); return EvalExpression(unWrapVec(vector<string>(words.at(lineNum).begin() + 1, words.at(lineNum).end())), variableValues);
// Check if it is ZS Builtin function // Check if it is ZS Builtin function
else if (words.at(lineNum).at(0)[0] == 'Z' && words.at(lineNum).at(0)[1] == 'S' && words.at(lineNum).at(0)[2] == '.') else if (startsWith(words.at(lineNum).at(0), "ZS."))
return EvalExpression(unWrapVec(words.at(lineNum)), variableValues); return EvalExpression(unWrapVec(words.at(lineNum)), variableValues);
// Check if it is function // Check if it is function
@ -657,7 +657,7 @@ boost::any ExecuteFunction(const string& functionName, const vector<boost::any>&
{ {
variableValues[funcArgs[i]] = inputVarVals[i]; variableValues[funcArgs[i]] = inputVarVals[i];
#if DEVELOPER_MESSAGES == true #if DEVELOPER_MESSAGES == true
cout << functionName + " \x1B[33m" << funcArgs[i] << " == " << AnyAsString(inputVarVals[i]) << "\033[0m\t\t" << endl; cout << "in " << functionName + " " << funcArgs[i] << " == " << AnyAsString(inputVarVals[i]) << endl;
#endif #endif
} }
} }
@ -803,26 +803,34 @@ int parseZSharp(string script)
InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "..."); InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "...");
#endif #endif
} }
else if (words.at(lineNum).at(0) == "int") {
globalVariableValues[words.at(lineNum).at(1)] = stoi(words.at(lineNum).at(3)); // Iterate through all types to see if line inits or
#if DEVELOPER_MESSAGES == true // re-inits a variable then store it with it's value
InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "..."); else if (countInVector(types, trim(words.at(lineNum).at(0))) > 0)
#endif {
//cout << words.at(lineNum).at(1) << "=" << unWrapVec(slice(words.at(lineNum), 3, -1)) << "=" << AnyAsString(EvalExpression(unWrapVec(slice(words.at(lineNum), 3, -1)), variableValues)) << endl;
globalVariableValues[words.at(lineNum).at(1)] = EvalExpression(unWrapVec(slice(words.at(lineNum), 3, -1)), variableValues);
} }
else if (words.at(lineNum).at(0) == "float") { // else if (words.at(lineNum).at(0) == "int") {
globalVariableValues[words.at(lineNum).at(1)] = stof(words.at(lineNum).at(3)); // globalVariableValues[words.at(lineNum).at(1)] = stoi(words.at(lineNum).at(3));
#if DEVELOPER_MESSAGES == true //#if DEVELOPER_MESSAGES == true
InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "..."); // InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "...");
#endif //#endif
} // }
else if (words.at(lineNum).at(0) == "bool") { // else if (words.at(lineNum).at(0) == "float") {
globalVariableValues[words.at(lineNum).at(1)] = stob(words.at(lineNum).at(3)); // globalVariableValues[words.at(lineNum).at(1)] = stof(words.at(lineNum).at(3));
#if DEVELOPER_MESSAGES == true //#if DEVELOPER_MESSAGES == true
InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "..."); // InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "...");
#endif //#endif
} // }
/*else // else if (words.at(lineNum).at(0) == "bool") {
LogWarning("unrecognized type \'" + words.at(lineNum).at(0) + "\' on line: " + to_string(lineNum));*/ // globalVariableValues[words.at(lineNum).at(1)] = stob(words.at(lineNum).at(3));
//#if DEVELOPER_MESSAGES == true
// InterpreterLog("Load script variable " + words.at(lineNum).at(1) + "...");
//#endif
// }
else
LogWarning("unrecognized type \'" + words.at(lineNum).at(0) + "\' on line: " + to_string(lineNum));
} }
} }
@ -941,6 +949,12 @@ int main(int argc, char* argv[])
exit(1); exit(1);
} }
} }
else if (AnyAsBool(GetVariableValue("EXIT_WHEN_DONE", globalVariableValues)) == false)
{
cout << "Press Enter to Continue";
cin.ignore();
exit(1);
}
#endif // Else exit automatically #endif // Else exit automatically
return 0; return 0;
} }