コード例 #1
0
ファイル: DHJassExecutor.cs プロジェクト: sonygod/dotahit
        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);
        }
コード例 #2
0
ファイル: _Commands.cs プロジェクト: sonygod/dotahit
        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);
        }
コード例 #3
0
ファイル: DHJassExecutor.cs プロジェクト: sonygod/dotahit
        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);
        }
コード例 #4
0
ファイル: DHJassExecutor.cs プロジェクト: sonygod/dotahit
        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);
        }