internal InternalStateMachine(StateMachineFactory <Operand, State, Eventtype, Event
                                                    > _enclosing, OPERAND operand, STATE initialState)
 {
     this._enclosing   = _enclosing;
     this.operand      = operand;
     this.currentState = initialState;
     if (!this._enclosing.optimized)
     {
         this._enclosing.MaybeMakeStateMachineTable();
     }
 }
Example #2
0
            internal void UpdateResult(bool p)
            {
                switch (OP)
                {
                case OPERAND.OR: Result |= p; break;

                case OPERAND.AND: Result &= p; break;

                default: throw new ResourceStaticAnalysisException("Wrong operand");
                }
                //Reset to default operand automatically
                OP = OPERAND.OR;
            }
Example #3
0
            internal void ParseNext(OutputItem oi)
            {
                switch (oi.ItemType)
                {
                case OPERAND.OR: OP = OPERAND.OR; break;

                case OPERAND.AND: OP = OPERAND.AND; break;

                default:     //Standard behavior
                    UpdateResult(oi.Result);
                    break;
                }
            }
        /// <summary>Effect a transition due to the effecting stimulus.</summary>
        /// <param name="state">current state</param>
        /// <param name="eventType">trigger to initiate the transition</param>
        /// <param name="cause">causal eventType context</param>
        /// <returns>transitioned state</returns>
        /// <exception cref="Org.Apache.Hadoop.Yarn.State.InvalidStateTransitonException"/>
        private STATE DoTransition(OPERAND operand, STATE oldState, EVENTTYPE eventType,
                                   EVENT @event)
        {
            // We can assume that stateMachineTable is non-null because we call
            //  maybeMakeStateMachineTable() when we build an InnerStateMachine ,
            //  and this code only gets called from inside a working InnerStateMachine .
            IDictionary <EVENTTYPE, StateMachineFactory.Transition <OPERAND, STATE, EVENTTYPE,
                                                                    EVENT> > transitionMap = stateMachineTable[oldState];

            if (transitionMap != null)
            {
                StateMachineFactory.Transition <OPERAND, STATE, EVENTTYPE, EVENT> transition = transitionMap
                                                                                               [eventType];
                if (transition != null)
                {
                    return(transition.DoTransition(operand, oldState, @event, eventType));
                }
            }
            throw new InvalidStateTransitonException(oldState, eventType);
        }
Example #5
0
 static string dump_addr(INSTRUCTION instr, OPERAND op)
 {
     string res = "[";
     if ((op.value.addr.mod & ADDR_MOD_BASE)!=0)
     {
     res += dump_reg_gen(op.value.addr.bas, instr.addrsize);
     }
     if ((op.value.addr.mod & ADDR_MOD_IDX)!=0)
     {
     if ((op.value.addr.mod & ADDR_MOD_BASE)!=0)
     {
     res += "+";
     }
     res += dump_reg_gen(op.value.addr.index, instr.addrsize);
     if (op.value.addr.scale != 0x1)
     {
     res += '*' + op.value.addr.scale.ToString("X");
     }
     }
     if ((op.value.addr.mod & ADDR_MOD_DISP)!=0)
     {
     if ((op.value.addr.mod & ~ADDR_MOD_DISP)!=0)
     {
        res += '+';
     }
     res += "0x"+instr.disp.value.d64.ToString("X");
     }
     res += ']';
     return res;
 }
Example #6
0
 internal Operand(InstructionCollection coll, Instruction inst, OPERAND op)
 {
     this.coll = coll; this.op = op; this.inst = inst;
 }
        public override bool ReturnOperator(ref TICInstruction _instruction, List <CToken> tokenlist)
        {
            OPERAND op;

            if (tblfunction.IsStandard)
            {
                // _instruction.Operator.ReturnType = tokenlist[0].GetTokenPinType();
                _instruction.Operator.ReturnType = this.OverloadedType;
                for (int i = 0; i < tblvariable.m_tblFInstanceVariableList.Count; i++)
                {
                    if (tblvariable.m_tblFInstanceVariableList[i].Class == (int)(VarClass.Output | VarClass.FunctionInstanse))
                    {
                        op       = new OPERAND();
                        op.Index = tblvariable.m_tblFInstanceVariableList[i].VarNameID;
                        op.Token = (byte)Token_Type.Token_FBDPin;
                        op.type  = _instruction.Operator.ReturnType;
                        //tblvariable.Type = _instruction.Operator.ReturnType;
                        op.PropertyNo = 0;
                        //op.type = _instruction.Operator.ReturnType;
                        _instruction.OperandList.Add(op);
                        break;
                    }
                }
                _instruction.Operator.NoOfArg = 1;
                for (int i = 0; i < tokenlist.Count; i++)
                {
                    _instruction.OperandList.Add(GetFinalOperator(tokenlist[i]));
                    _instruction.Operator.NoOfArg++;
                }
                if (tblfunction.Overloaded)
                {
                    switch (tblfunction.FunctionName.ToLower())
                    {
                        #region Selection


                        #region max
                    case "max":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_MAX_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_MAX_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_MAX_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_MAX_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_MAX_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_MAX_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_MAX_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_MAX_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_MAX_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_MAX_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_MAX_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_MAX_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region min
                    case "min":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_MIN_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_MIN_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode  = (int)OPCODES.WORD_MIN_WORD_WORD;
                            _instruction.Operator.NoOfArg = m_NoOfFunctionArguments;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_MIN_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_MIN_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_MIN_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_MIN_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_MIN_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_MIN_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_MIN_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_MIN_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_MIN_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #region mux
                    case "mux":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_MUX_USINT_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_MUX_USINT_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_MUX_USINT_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_MUX_USINT_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_MUX_USINT_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode  = (int)OPCODES.INT_MUX_USINT_INT_INT;
                            _instruction.Operator.NoOfArg = 3;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_MUX_USINT_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_MUX_USINT_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_MUX_USINT_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_MUX_USINT_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_MUX_USINT_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_MUX_USINT_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #endregion

                        #region Comparision
                        #region ge
                    case "ge":
                    {
                        switch ((VarType)ReturnType(tokenlist))
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GE_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region gt
                    case "gt":
                    {
                        switch ((VarType)ReturnType(tokenlist))
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_GT_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region eq
                    case "eq":
                    {
                        switch ((VarType)ReturnType(tokenlist))
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_EQ_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region le
                    case "le":
                    {
                        switch ((VarType)ReturnType(tokenlist))
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LE_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region lt
                    case "lt":
                    {
                        switch ((VarType)ReturnType(tokenlist))
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LT_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #endregion

                        #region Arithmetic

                        #region mul
                    case "mul":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_MUL_SINT_SINT;

                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_MUL_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_MUL_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_MUL_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_MUL_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_MUL_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_MUL_REAL_REAL;
                            break;

                        case VarType.TIME:
                            switch ((VarType)tokenlist[1].GetTokenPinType())
                            {
                            case VarType.SINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_SINT;
                                break;

                            case VarType.INT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_INT;
                                break;

                            case VarType.DINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_DINT;
                                break;

                            case VarType.USINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_USINT;
                                break;

                            case VarType.UINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_UINT;
                                break;

                            case VarType.UDINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_UDINT;
                                break;

                            case VarType.REAL:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_MUL_TIME_REAL;
                                break;
                            }
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #region add
                    case "add":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_ADD_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_ADD_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_ADD_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_ADD_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_ADD_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_ADD_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_ADD_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_ADD_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion
                        #endregion
                        #region Bitwise

                        #region and
                    case "and":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_AND_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_AND_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_AND_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_AND_DWORD_DWORD;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region or
                    case "or":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_OR_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_OR_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_OR_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_OR_DWORD_DWORD;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region xor
                    case "xor":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_XOR_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_XOR_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_XOR_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_XOR_DWORD_DWORD;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #endregion
                    }
                }
                else  // non overloaded function
                {
                    switch (tblfunction.FunctionName.ToLower())
                    {
                    case "bools2dint":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.BOOLS_TO_DINT;
                        return(true);
                    }
                    }
                }
            }
            else  // user defined function
            {
            }
            _instruction.Operator.OpCode = (int)OPCODES.UNKNOWN;

            return(true);
            //-----------------------------------------------------------------------------
        }
 /*
  * @return a {@link StateMachine} that starts in the default initial
  *          state and whose {@link Transition} s are applied to
  *          {@code operand} .
  *
  *         This is part of the API.
  *
  * @param operand the object upon which the returned
  *                {@link StateMachine} will operate.
  *
  */
 public StateMachine <STATE, EVENTTYPE, EVENT> Make(OPERAND operand)
 {
     return(new StateMachineFactory.InternalStateMachine(this, operand, defaultInitialState
                                                         ));
 }
Example #9
0
        public override bool ReturnOperator(ref TICInstruction _instruction, List <CToken> tokenlist)
        {
            OPERAND op;

            if (tblfunction.IsStandard)
            {
                _instruction.Operator.ReturnType = this.OverloadedType;
                op            = new OPERAND();
                op.Token      = (byte)Token_Type.Token_TempValue;
                op.type       = _instruction.Operator.ReturnType;
                op.Index      = Compiler.GetUnassignedTempVar(op.type);
                op.PropertyNo = 0;
                //op.type = _instruction.Operator.ReturnType;
                _instruction.OperandList.Add(op);

                _instruction.Operator.NoOfArg = 1;
                for (int i = 0; i < tokenlist.Count; i++)
                {
                    _instruction.OperandList.Add(GetFinalOperator(tokenlist[i]));
                    _instruction.Operator.NoOfArg++;
                }
                if (tblfunction.Overloaded)
                {
                    switch (tblfunction.FunctionName.ToLower())
                    {
                        #region Numerical
                        #region abs

                    case "abs":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_ABS_SINT;

                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_ABS_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_ABS_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_ABS_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_ABS_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_ABS_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_ABS_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region sqrt
                    case "sqrt":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_SQRT_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region ln
                    case "ln":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_LN_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region log
                    case "log":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_LOG_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region exp
                    case "exp":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_EXP_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region sin
                    case "sin":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_SIN_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region cos
                    case "cos":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_COS_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region tan
                    case "tan":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_TAN_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #region asin
                    case "asin":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_ASIN_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #region acos
                    case "acos":
                    {
                        switch ((VarType)tokenlist[0].GetTokenPinType())
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_ACOS_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region atan
                    case "atan":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_ATAN_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #endregion

                        #region Bit-shift
                        #region shl
                    case "shl":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_SHL_BYTE_UINT;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_SHL_WORD_UINT;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_SHL_DWORD_UINT;
                            break;
                        }

                        return(true);
                    }
                        #endregion

                        #region shr
                    case "shr":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_SHR_BYTE_UINT;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_SHR_WORD_UINT;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_SHR_DWORD_UINT;
                            break;
                        }

                        return(true);
                    }
                        #endregion

                        #region ror
                    case "ror":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_ROR_BYTE_UINT;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_ROR_WORD_UINT;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_ROR_DWORD_UINT;
                            break;
                        }

                        return(true);
                    }
                        #endregion

                        #region rol
                    case "rol":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_ROL_BYTE_UINT;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_ROL_WORD_UINT;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_ROL_DWORD_UINT;
                            break;
                        }

                        return(true);
                    }
                        #endregion

                        #endregion


                        #region Selection
                        #region sel
                    case "sel":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_SEL_BOOL_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_SEL_BOOL_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_SEL_BOOL_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_SEL_BOOL_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_SEL_BOOL_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_SEL_BOOL_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_SEL_BOOL_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_SEL_BOOL_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_SEL_BOOL_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_SEL_BOOL_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_SEL_BOOL_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_SEL_BOOL_TIME_TIME;
                            break;

                        default:
                            return(false);
                        }
                        return(true);
                    }
                        #endregion


                        #region limit
                    case "limit":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_LIMIT_BOOL_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_LIMIT_BYTE_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_LIMIT_WORD_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_LIMIT_DWORD_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_LIMIT_SINT_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_LIMIT_INT_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_LIMIT_DINT_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_LIMIT_USINT_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_LIMIT_UINT_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_LIMIT_UDINT_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_LIMIT_REAL_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.LREAL_LIMIT_LREAL_LREAL_LREAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #endregion

                        #region Comparision



                        #region ne
                    case "ne":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_BOOL_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_BYTE_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_WORD_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_DWORD_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NE_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #endregion

                        #region Arithmetic


                        #region div
                    case "div":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_DIV_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_DIV_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_DIV_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_DIV_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_DIV_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_DIV_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_DIV_REAL_REAL;
                            break;

                        case VarType.TIME:
                            switch ((VarType)tokenlist[1].GetTokenPinType())
                            {
                            case VarType.SINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_SINT;
                                break;

                            case VarType.INT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_INT;
                                break;

                            case VarType.DINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_DINT;
                                break;

                            case VarType.USINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_USINT;
                                break;

                            case VarType.UINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_UINT;
                                break;

                            case VarType.UDINT:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_UDINT;
                                break;

                            case VarType.REAL:
                                _instruction.Operator.OpCode = (int)OPCODES.TIME_DIV_TIME_REAL;
                                break;
                            }
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #region sub
                    case "sub":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_SUB_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_SUB_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_SUB_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_SUB_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_SUB_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_SUB_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_SUB_REAL_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_SUB_TIME_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region mod
                    case "mod":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_MOD_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_MOD_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_MOD_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_MOD_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_MOD_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_MOD_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_MOD_REAL_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region EXPT
                    case "expt":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_EXPT_SINT_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_EXPT_INT_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_EXPT_DINT_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_EXPT_USINT_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_EXPT_UINT_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_EXPT_UDINT_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_EXPT_REAL_REAL;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #region move
                    case "move":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_TO_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_TO_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_TO_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_TO_DWORD;
                            break;

                        case VarType.SINT:
                            _instruction.Operator.OpCode = (int)OPCODES.SINT_TO_SINT;
                            break;

                        case VarType.INT:
                            _instruction.Operator.OpCode = (int)OPCODES.INT_TO_INT;
                            break;

                        case VarType.DINT:
                            _instruction.Operator.OpCode = (int)OPCODES.DINT_TO_DINT;
                            break;

                        case VarType.USINT:
                            _instruction.Operator.OpCode = (int)OPCODES.USINT_TO_USINT;
                            break;

                        case VarType.UINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UINT_TO_UINT;
                            break;

                        case VarType.UDINT:
                            _instruction.Operator.OpCode = (int)OPCODES.UDINT_TO_UDINT;
                            break;

                        case VarType.REAL:
                            _instruction.Operator.OpCode = (int)OPCODES.REAL_TO_REAL;
                            break;

                        case VarType.TIME:
                            _instruction.Operator.OpCode = (int)OPCODES.TIME_TO_TIME;
                            break;
                        }
                        return(true);
                    }
                        #endregion

                        #endregion

                        #region Bitwise



                        #region not
                    case "not":
                    {
                        switch ((VarType)_instruction.Operator.ReturnType)
                        {
                        case VarType.BOOL:
                            _instruction.Operator.OpCode = (int)OPCODES.BOOL_NOT_BOOL;
                            break;

                        case VarType.BYTE:
                            _instruction.Operator.OpCode = (int)OPCODES.BYTE_NOT_BYTE;
                            break;

                        case VarType.WORD:
                            _instruction.Operator.OpCode = (int)OPCODES.WORD_NOT_WORD;
                            break;

                        case VarType.DWORD:
                            _instruction.Operator.OpCode = (int)OPCODES.DWORD_NOT_DWORD;
                            break;
                        }
                        return(true);
                    }
                        #endregion


                        #endregion
                    }
                }
                else
                {
                    switch (tblfunction.FunctionName.ToLower())
                    {
                        #region ENUM_KTC_DEFINED

                        #region rgb
                    case "rgb":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.UDINT_RGB_DINT_DINT_DINT;
                        return(true);
                    }

                        #endregion

                        #region formated

                    case "formated":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.FORMATED_STRING_REAL_UINT;
                        return(true);
                    }


                        #endregion

                        #region time
                    case "sub_time":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.TIME_SUB_TIME_TIME;
                        return(true);
                    }

                    case "getlocalyear":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETYEAR_DINT;

                        return(true);
                    }

                    case "getlocalmonth":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETMONTH_DINT;

                        return(true);
                    }

                    case "getlocalday":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETDAY_DINT;
                        return(true);
                    }

                    case "getlocalhour":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETHOUR_DINT;
                        return(true);
                    }

                    case "getlocalminute":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETMINUTE_DINT;
                        return(true);
                    }

                    case "getlocalsecond":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETSECOND_DINT;
                        return(true);
                    }

                    case "getlocalmilisecond":
                    {
                        _instruction.Operator.OpCode = (int)OPCODES.DINT_GETMILLSECOND_DINT;
                        return(true);
                    }
                        #endregion

                        #endregion
                    }
                }
            }
            else
            {
                _instruction.Operator.ReturnType = tblfunction.GetReturnType();
                _instruction.Operator.OpCode     = (int)OPCODES.CALLF;
                op            = new OPERAND();
                op.Token      = (byte)Token_Type.Token_TempValue;
                op.type       = _instruction.Operator.ReturnType;
                op.Index      = Compiler.GetUnassignedTempVar(op.type);
                op.PropertyNo = 0;
                //op.type = _instruction.Operator.ReturnType;
                _instruction.OperandList.Add(op);

                _instruction.Operator.NoOfArg = 1;

                op            = new OPERAND();
                op.Token      = (byte)Token_Type.Token_FBID;
                op.type       = (int)VarType.ULINT;
                op.Index      = tblfunction.UDPouID;
                op.PropertyNo = 0;
                //op.type = _instruction.Operator.ReturnType;
                _instruction.OperandList.Add(op);

                _instruction.Operator.NoOfArg++;

                for (int i = 0; i < tokenlist.Count; i++)
                {
                    _instruction.OperandList.Add(GetFinalOperator(tokenlist[i]));
                    _instruction.Operator.NoOfArg++;
                }
                return(true);
            }
            _instruction.Operator.OpCode = (int)OPCODES.UNKNOWN;

            return(true);
            //-----------------------------------------------------------------------------
        }
Example #10
0
 public INSTRUCTION()
 {
     ops = new OPERAND[3];//OPERAND[3];
 }
Example #11
0
        public void loadDrawExpressionCollection(byte[] _compiledexp)
        {
            int size  = 0;
            int size1 = 0;
            //drawexpressionCollection = new DrawExpressionCollection(this);
            DrawExpressionCollectionCode drawexpressioncollectioncode = new DrawExpressionCollectionCode();

            drawexpressioncollectioncode = (DrawExpressionCollectionCode)RawDeserialize(_compiledexp, 0, typeof(DrawExpressionCollectionCode));
            size = Marshal.SizeOf(drawexpressioncollectioncode);
            if (drawexpressioncollectioncode.IsValid == 1)
            {
                for (int i = 0; i < drawexpressioncollectioncode.NoOfDynamicProperties; i++)
                {
                    ExpressionCode expressioncode = new ExpressionCode();
                    expressioncode = (ExpressionCode)RawDeserialize(_compiledexp, size, typeof(ExpressionCode));
                    size          += Marshal.SizeOf(expressioncode);

                    DisplayObjectDynamicProperty displayobjectdynamicproperty = new DisplayObjectDynamicProperty();
                    displayobjectdynamicproperty.ObjectType = (enumDynamicGraphicalProperty)expressioncode.Property;
                    displayobjectdynamicproperty.Type       = (VarType)expressioncode.ReturnType;
                    //displayobjectdynamicproperty.IsValid = 1;
                    displayobjectdynamicproperty.IsColor  = Convert.ToBoolean(expressioncode.IsColor);
                    displayobjectdynamicproperty.IsString = Convert.ToBoolean(expressioncode.IsString);

                    for (int j = 0; j < expressioncode.NoOfConditions; j++)
                    {
                        ConditionCode conditioncode = new ConditionCode();
                        //conditioncode.StrValue = new STRINGOBJ();
                        conditioncode = (ConditionCode)RawDeserialize(_compiledexp, size, typeof(ConditionCode));
                        size         += Marshal.SizeOf(conditioncode);
                        DisplayObjectDynamicPropertyCondition displayobjectdynamicpropertycondition = new DisplayObjectDynamicPropertyCondition();
                        displayobjectdynamicpropertycondition.IsValid = true;
                        displayobjectdynamicpropertycondition.m_Value = conditioncode.Value;
                        //unsafe
                        {
                            displayobjectdynamicpropertycondition.ToCopySTRINGOBJ(conditioncode.StrValue);

                            //for (int k = 0; k < 16; k++)
                            //{
                            //    displayobjectdynamicpropertycondition.m_StrValue.Val[k] = conditioncode.Val[k];
                            //}
                        }
                        size1 = 0;
                        {
                            OPERATION _operation = new OPERATION();
                            _operation = (OPERATION)RawDeserialize(_compiledexp, size, typeof(OPERATION));

                            size1 = Marshal.SizeOf(_operation);
                            size += Marshal.SizeOf(_operation);
                            while (size1 < _operation.Size1)
                            {
                                TICInstruction instruction = new TICInstruction();
                                instruction.Operator = (OPERATOR)RawDeserialize(_compiledexp, size, typeof(OPERATOR));
                                size  += Marshal.SizeOf(instruction.Operator);
                                size1 += Marshal.SizeOf(instruction.Operator);
                                for (int k = 0; k < instruction.Operator.NoOfArg; k++)
                                {
                                    OPERAND operand = new OPERAND();
                                    operand = (OPERAND)RawDeserialize(_compiledexp, size, typeof(OPERAND));
                                    size   += Marshal.SizeOf(operand);
                                    size1  += Marshal.SizeOf(operand);
                                    instruction.OperandList.Add(operand);
                                }
                                displayobjectdynamicpropertycondition.SimpleOperation.instructionlist.Add(instruction);
                            }
                        }
                        displayobjectdynamicproperty.ConditionList.Add(displayobjectdynamicpropertycondition);
                    }
                    drawexpressionCollection.objDisplayObjectDynamicPropertys.list.Add(displayobjectdynamicproperty);
                }
            }
        }
Example #12
0
        public override bool ReturnOperator(ref TICInstruction _instruction, List <CToken> tokenlist)
        {
            OPERAND op = new OPERAND();

            //CToken tok;
            op.Index = this.tblvariable.VarNameID;
            _instruction.OperandList.Add(op);
            _instruction.Operator.NoOfArg = 1;

            if (!tblfunction.IsStandard)
            {
                op            = new OPERAND();
                op.Token      = (byte)Token_Type.Token_FBID;
                op.type       = (int)VarType.ULINT;
                op.Index      = tblfunction.UDPouID;
                op.PropertyNo = 0;
                //op.type = _instruction.Operator.ReturnType;
                _instruction.OperandList.Add(op);

                _instruction.Operator.NoOfArg++;
            }


            for (int i = 0; i < tokenlist.Count; i++)
            {
                _instruction.OperandList.Add(GetFinalOperator(tokenlist[i]));
                _instruction.Operator.NoOfArg++;
            }
            //_instruction.Operator.NoOfArg = (byte)(tokenlist.Count+1);
            switch (tblfunction.FunctionName.ToLower())
            {
            case "alarmanc":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_ALARMANC;
                break;

            case "blink":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_BLINK;
                break;

            case "cmp":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_CMP;
                break;

            case "ctd":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_CTD;
                break;

            case "ctu":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_CTU;
                break;

            case "ctud":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_CTUD;
                break;

            case "derivative":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_DERIVATIVE;
                break;

            case "f_trig":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_F_TRIG;
                break;

            case "hysteresis":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_HYSTERESIS;
                break;

            case "integral":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_INTEGRAL;
                break;

            case "lag":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_LAG;
                break;

            case "pid":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_PID;
                break;

            case "pidcas":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_PIDCAS;
                break;

            case "pidovr":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_PIDOVR;
                break;

            case "r_trig":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_R_TRIG;
                break;

            case "ramp":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_RAMP;
                break;

            case "rs":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_RS;
                break;

            case "rtc":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_RTC;
                break;

            case "selpri":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SELPRI;
                break;

            case "selread":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SELREAD;
                break;

            case "sema":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SEMA;
                break;

            case "setpri":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SETPRI;
                break;

            case "sig_gen":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SIG_GEN;
                break;

            case "split":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SPLIT;
                break;

            case "sr":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SR;
                break;

            case "stackin":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_STACKIN;
                break;

            case "swdout":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SWDOUT;
                break;

            case "swsout":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_SWSOUT;
                break;

            case "tof":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_TOF;
                break;

            case "ton":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_TON;
                break;

            case "tp":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_TP;
                break;

            case "tpls":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_TPLS;
                break;

            case "tstp":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_TSTP;
                break;

            case "wkhour":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_WKHOUR;
                break;

            case "totalizer":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_TOTALIZER;
                break;

            case "ramp_gen":
                _instruction.Operator.OpCode = (int)OPCODES.FBD_CALL_RAMP_GEN;
                break;

            default:
                _instruction.Operator.OpCode = (int)OPCODES.CALLFB;
                break;
            }



            return(true);
            //-----------------------------------------------------------------------------
        }
Example #13
0
        //    public CToken oprator( CToken param)
        //{
        //    return this;
        //}

        protected OPERAND GetFinalOperator(CToken _token)
        {
            OPERAND tempoperand = new OPERAND();

            switch (_token.m_token)
            {
            case Token_Type.Token_Constant:
                tempoperand.Index = ((CTokenOperand)_token).m_Index;
                tempoperand.Token = (byte)((CTokenOperand)_token).m_token;
                //tempoperand.type = ((CTokenOperand)_token).m_Type;
                break;

            case Token_Type.Token_String:
                tempoperand.Index = ((CTokenOperand)_token).m_Index;
                tempoperand.Token = (byte)((CTokenOperand)_token).m_token;
                //tempoperand.type = ((CTokenOperand)_token).m_Type;
                break;

            case Token_Type.Token_Variable:
                //_operand8[0].type = (VarType) ((CTokenVariable*)tok)->m_PropertyType ;
                tempoperand.Token = (byte)_token.m_token;
                //_operand8[0].Index = ((CTokenVariable*)tok)->m_Index;
                tblFunction tblfunction = tblSolution.m_tblSolution().GetFunctionbyType(((CTokenVariable)_token).tblvariable.Type);
                if (((CTokenVariable)_token).isrefernce)
                {
                    tempoperand.Index         = ((CTokenVariable)_token).tblvariable.VarNameID;
                    tempoperand.PropertyNo    = 0;
                    tempoperand.HasSubPropety = 0;
                    tempoperand.SubProperty   = 0;
                    tempoperand.IsReference   = 1;
                }
                else
                {
                    tempoperand.IsReference = 0;
                    if (Common.IsSimpleType(((CTokenVariable)_token).tblvariable.Type) ||
                        (tblfunction.IsStandard && !tblfunction.IsFunction))
                    {
                        tempoperand.Index         = ((CTokenVariable)_token).tblvariable.VarNameID;
                        tempoperand.PropertyNo    = (byte)((CTokenVariable)_token).tblformalparameter.oIndex;
                        tempoperand.HasSubPropety = ((CTokenVariable)_token).HasSubPropety;
                        tempoperand.SubProperty   = ((CTokenVariable)_token).SubProperty;
                    }
                    else
                    {
                        foreach (tblVariable _linktblvariable in ((CTokenVariable)_token).tblvariable.m_tblFInstanceVariableList)
                        {
                            if (_linktblvariable.ParentVarLinkName == ((CTokenVariable)_token).tblformalparameter.PinName)
                            {
                                tempoperand.Index      = _linktblvariable.VarNameID;
                                tempoperand.PropertyNo = 0;
                                break;
                            }
                        }
                    }
                }


                break;

            case Token_Type.Token_TempString:
            case Token_Type.Token_TempValue:
                tempoperand.Index = ((CTokenTempVariable)_token).m_Index;
                tempoperand.Token = (byte)((CTokenTempVariable)_token).m_token;
                tempoperand.type  = ((CTokenTempVariable)_token).m_Type;
                Compiler.FreeAssignedTempVar(tempoperand.type, (int)tempoperand.Index);
                break;

            case Token_Type.Token_FBDPin:
                tempoperand.Index         = ((CTokenFBDPin)_token).tblvariable.VarNameID;
                tempoperand.PinID         = ((CTokenFBDPin)_token).PinID;
                tempoperand.PropertyNo    = (byte)((CTokenFBDPin)_token).tblformalparameterVariable.oIndex;
                tempoperand.HasSubPropety = ((CTokenFBDPin)_token).HasSubPropety;
                tempoperand.SubProperty   = ((CTokenFBDPin)_token).SubProperty;
                tempoperand.PinNo         = (byte)((CTokenFBDPin)_token).tblformalparameterPin.oIndex;
                tempoperand.Token         = (byte)((CTokenOperand)_token).m_token;
                break;

            default:
                break;
            }
            return(tempoperand);
        }
Example #14
0
 static string dump_dir(OPERAND op)
 {
     switch ((OP_SIZE)op.size)
     {
     case OP_SIZE.OPERAND_SIZE_32:
     return op.value.far_addr.far_addr32.seg.ToString("X") + ":" + op.value.far_addr.far_addr32.offset.ToString("X");
     case OP_SIZE.OPERAND_SIZE_48:
     return op.value.far_addr.far_addr48.seg.ToString("X") + ":" + op.value.far_addr.far_addr48.offset.ToString("X");
     default:
     return "internal error";
     }
 }
Example #15
0
 public Instr()
 {
     ops = new OPERAND[3];//OPERAND[3];
 }
Example #16
0
 static string dump_imm(OPERAND op)
 {
     return "0x"+op.value.imm.imm64.ToString("X");
 }
Example #17
0
 public Instr()
 {
     ops = new OPERAND[3];//OPERAND[3];
 }