public static bool TryGetVariable(string name, out DHJassValue variable) { bool OK = false; if (Stack.Count != 0 && Stack.Peek().TryGetValue(name, out variable)) { OK = true; } else if (Globals.TryGetValue(name, out variable)) { OK = true; } else { variable = new DHJassUnusedType(); if (ShowMissingVariables) { Console.WriteLine("Variable:'" + name + "' not found"); } OK = false; } if (OK && IsTracing && TraceName == name && (expressionDepth != 0)) { traceFound = true; } return(OK); }
public bool TryParseCode(string code, out DHJassCommand command) { if (code != "nothing") { string name = null; DHJassGetValueOnDemandCommand value = null; DHJassValue variable; List <string> args; if (DHJassValue.TryParseDeclaration(code, out variable, out args)) { name = args[0]; value = new DHJassGetValueOnDemandCommand(args.Count > 1 ? args[1] : string.Empty); } else { variable = new DHJassUnusedType(); name = "error!"; value = null; } command = new DHJassPassValueCopyCommand(variable, name, value); return(true); } command = null; return(false); }
public static bool TryCallFunction(string name, out DHJassValue returned) { DHJassFunction function; if (Functions.TryGetValue(name, out function)) { if (IsTracing && name.StartsWith(TraceName)) { Console.WriteLine("Called:" + name); } returned = function.Execute(); return(true); } else if (ShowMissingFunctions) { ReportMissingFunction(name); } returned = new DHJassUnusedType(); return(false); }
public static bool TryGetValue <T>(string code, out DHJassValue value) where T : DHJassValue, new() { if (String.IsNullOrEmpty(code)) { value = null; return(false); } unsafe { fixed(char *pStr = code) { char *ptr = DHJassSyntax.removeWsRbRecursive(pStr, pStr + code.Length); code = new string(ptr); if (code == "null") { value = new DHJassUnusedType(); return(true); } DHJassValue parser; if (DbJassTypeValueKnowledge.TypeValuePairs.TryGetValue(typeof(T), out parser)) { object parsedValue; if (parser.TryParseDirect(code, out parsedValue)) { value = new T(); value.Value = parsedValue; return(true); } } string name; string param; List <string> operands; List <string> operators; if (DHJassSyntax.checkLogicalExpressionsSyntaxFast(ptr, out operands, out operators)) { return(TryGetLogicalExpressionValueFast(operands, operators, out value)); } else if (DHJassSyntax.checkRelationalExpressionsSyntaxFast(ptr, out operands, out operators)) //, out match)) { return(TryGetRelationalExpressionValueFast(operands, operators, out value)); //match, out value); } else if (DHJassSyntax.checkArithmeticExpressionsSyntaxFast(ptr, out operands, out operators)) //, out match)) { return(TryGetArithmeticExpressionValueFast <T>(operands, operators, out value)); //match, out value); } else if (DHJassSyntax.checkTypeVariableUsageSyntaxFast(code, out name)) { return(TryGetVariable(name, out value)); } else if (DHJassSyntax.checkArrayVariableUsageSyntaxFast(ptr, out name, out param)) { DHJassValue array; if (TryGetVariable(name, out array) && array is DHJassArray) { int index; if (DHJassInt.TryParse(param, out index)) { value = (array as DHJassArray)[index]; return(true); } } } else if (DHJassSyntax.checkFunctionUsageSyntaxFast(ptr, out name, out operands)) { return(TryCallFunctionFast(name, operands, out value)); } else if (DHJassSyntax.checkFunctionPointerUsageSyntaxFast(ptr, out name)) { return(TryGetFunctionPointer(name, out value)); } } } value = null; return(false); }