public IRTSDefine.Stack run(IRTSStack stack)
 {
     if (mVars != null)
     {
         IRTSEngine eng = stack.getThread().getEngine();
         for (int i = 0; i < mVars.length(); i++)
         {
             RTSVariableL vl = mVars.get(i);
             if (vl == null)
             {
                 continue;
             }
             bool var = vl.getId() == IRTSDefine.Linker.VARIABLE;
             if (!var)
             {
                 eng.removeFunction(vl.getSrc(), vl.getArgc());
             }
             else if ((vl.getProperty() & IRTSDefine.Property.GLOBAL) == 0)
             {
                 stack.removeVar(vl.getSrc());
             }
             else
             {
                 eng.removeVar(vl.getSrc());
             }
         }
     }
     return(0);
 }
Ejemplo n.º 2
0
        private void init()
        {
            mDefaultLinker = new RTSVariableL();

            IRTSLinker lin = null;

            mLinkers = new System.Collections.Generic.Dictionary <string, IRTSLinker>();

            lin = new RTSEndingL(IRTSDefine.Linker.SEMICOLON);
            mLinkers.Add(";", lin);
            //
            lin = new RTSExecL(IRTSDefine.Linker.BRACKET_FLOWER, IRTSDefine.Linker.BRACKET_FLOWER2);
            mLinkers.Add("{", lin);
            lin = new RTSEndingL(IRTSDefine.Linker.BRACKET_FLOWER2);
            mLinkers.Add("}", lin);
            //
            lin = new RTSIfL();
            mLinkers.Add("if", lin);
            lin = new RTSEndingL(IRTSDefine.Linker.THEN);
            mLinkers.Add("then", lin);
            lin = new RTSElseL();
            mLinkers.Add("else", lin);
            lin = new RTSForL();
            mLinkers.Add("for", lin);

            lin = new RTSDeleteL();
            mLinkers.Add("delete", lin);
            //
            lin = new RTSBracketL(IRTSDefine.Linker.BRACKET, IRTSDefine.Linker.BRACKET2);
            mLinkers.Add("(", lin);
            lin = new RTSEndingL(IRTSDefine.Linker.BRACKET2);
            mLinkers.Add(")", lin);

            lin = new RTSSquareL();
            mLinkers.Add("[", lin);
            lin = new RTSEndingL(IRTSDefine.Linker.BRACKET_SQUARE2);
            mLinkers.Add("]", lin);
            //
            lin = new RTSCommaL();
            mLinkers.Add(",", lin);

            lin = new RTSPropertyL(IRTSDefine.Property.GLOBAL);
            mLinkers.Add("global", lin);

            lin = new RTSEndingL(IRTSDefine.Linker.COLON);
            mLinkers.Add(":", lin);
            lin = new RTSQuestionL();
            mLinkers.Add("?", lin);

            lin = new RTSNotL();
            mLinkers.Add("!", lin);
            mLinkers.Add("not", lin);
            lin = new RTSSelfRaiseL(IRTSDefine.Linker.SELFADD);
            mLinkers.Add("++", lin);
            lin = new RTSSelfRaiseL(IRTSDefine.Linker.SELFSUB);
            mLinkers.Add("--", lin);
            //
            lin = new RTSArithmeticL(IRTSDefine.Linker.ADD);
            mLinkers.Add("+", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("+=", lin);
            lin = new RTSArithmeticL(IRTSDefine.Linker.SUB);
            mLinkers.Add("-", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("-=", lin);
            lin = new RTSArithmeticL(IRTSDefine.Linker.MUL);
            mLinkers.Add("*", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("*=", lin);
            lin = new RTSArithmeticL(IRTSDefine.Linker.DIV);
            mLinkers.Add("/", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("/=", lin);
            lin = new RTSArithmeticL(IRTSDefine.Linker.MOD);
            mLinkers.Add("%", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("%=", lin);
            lin = new RTSArithmeticL(IRTSDefine.Linker.BITAND);
            mLinkers.Add("&", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("&=", lin);
            lin = new RTSArithmeticL(IRTSDefine.Linker.BITOR);
            mLinkers.Add("|", lin);
            lin = new RTSEvaluateL((RTSBinaryL)lin);
            mLinkers.Add("|=", lin);

            lin = new RTSEvaluateL(null);
            mLinkers.Add("=", lin);

            lin = new RTSCompareL(IRTSDefine.Linker.MORE);
            mLinkers.Add(">", lin);
            lin = new RTSCompareL(IRTSDefine.Linker.MOREQU);
            mLinkers.Add(">=", lin);
            lin = new RTSCompareL(IRTSDefine.Linker.LESS);
            mLinkers.Add("<", lin);
            lin = new RTSCompareL(IRTSDefine.Linker.LESSEQU);
            mLinkers.Add("<=", lin);
            lin = new RTSCompareL(IRTSDefine.Linker.EQUAL);
            mLinkers.Add("==", lin);
            lin = new RTSCompareL(IRTSDefine.Linker.NOTEQU);
            mLinkers.Add("!=", lin);

            lin = new RTSLogicL(IRTSDefine.Linker.AND);
            mLinkers.Add("&&", lin);
            mLinkers.Add("and", lin);
            lin = new RTSLogicL(IRTSDefine.Linker.OR);
            mLinkers.Add("||", lin);
            mLinkers.Add("or", lin);
            lin = new RTSLogicL(IRTSDefine.Linker.XOR);
            mLinkers.Add("^", lin);
            mLinkers.Add("xor", lin);
            //
            lin = new RTSStackActL(IRTSDefine.Stack.ACTION_RETURN);
            mLinkers.Add("return", lin);
            lin = new RTSStackActL(IRTSDefine.Stack.ACTION_BREAK);
            mLinkers.Add("break", lin);
            lin = new RTSStackActL(IRTSDefine.Stack.ACTION_CONTINUE);
            mLinkers.Add("continue", lin);

            lin = new RTSVariableL(null);
            mLinkers.Add("null", lin);
            lin = new RTSVariableL(true);
            mLinkers.Add("true", lin);
            lin = new RTSVariableL(false);
            mLinkers.Add("false", lin);
            //
            lin = new RTSTypeL(RTSGeneral.TYPE);
            mLinkers.Add("var", lin);
            lin = new RTSTypeL(RTSString.TYPE);
            mLinkers.Add("string", lin);
            lin = new RTSTypeL(RTSInteger.TYPE);
            mLinkers.Add("int", lin);
            lin = new RTSTypeL(RTSLong.TYPE);
            mLinkers.Add("long", lin);
            lin = new RTSTypeL(RTSFloat.TYPE);
            mLinkers.Add("float", lin);
            lin = new RTSTypeL(RTSDouble.TYPE);
            mLinkers.Add("double", lin);
            lin = new RTSTypeL(RTSBool.TYPE);
            mLinkers.Add("bool", lin);
            lin = new RTSTypeL(RTSVoid.TYPE);
            mLinkers.Add("void", lin);
            lin = new RTSTypeL(RTSRegisterType.TYPE);
            mLinkers.Add("register", lin);

            mTypes = new RTSSortedMap <System.Type, IRTSType>(8);
            mTypes.add(typeof(bool), RTSBool.TYPE);
            mTypes.add(typeof(int), RTSInteger.TYPE);
            mTypes.add(typeof(long), RTSLong.TYPE);
            mTypes.add(typeof(float), RTSFloat.TYPE);
            mTypes.add(typeof(double), RTSDouble.TYPE);
            mTypes.add(typeof(string), RTSString.TYPE);
            mTypes.add(typeof(RTSRegister), RTSRegisterType.TYPE);
        }