예제 #1
0
        //------------------------------------------------------------
        // 伝達されたEIを受け取り、NodeEIのSRを設定する。
        public void ReceiveAndSetSR(SemanticAnalyzeComponent aComp)
        {
            // 伝達されたEvaluateInfoを取得
            mTransferredEI = aComp.TransferredEvaluateInfoReceive();

            // レジスタ確保 
            mIsReceived = isNeedToReserveSR();
            mNodeEI.SR  = mIsReceived
                ? aComp.SRReserve()
                : mTransferredEI.SR;
        }
예제 #2
0
            //------------------------------------------------------------ 
            // 評価実行。 
            bool eventEvaluate(SemanticAnalyzeComponent aComp)
            {
                // 伝達された評価情報を取得
                mTransferredEI = aComp.TransferredEvaluateInfoReceive();

                // レジスタ確保 
                mEvaluateInfo.SR = mTransferredEI == null
                    ? aComp.SRReserve()
                    : mTransferredEI.SR;

                // ロードする
                switch (mExpr.mToken.Value)
                {
                case Token.Kind.NumSInt32:
                    aComp.BCFunction.AddOPCode_SReg_ConstantTableIndex(
                        BCOpCode.OpType.LDSRC4
                        , mEvaluateInfo.SR
                        , (int)mExpr.mToken.Int64Value
                        );
                    break;

                case Token.Kind.KeyTrue:
                    aComp.BCFunction.AddOPCode_SReg(
                        BCOpCode.OpType.LDSRBT
                        , mEvaluateInfo.SR
                        );
                    break;

                case Token.Kind.KeyFalse:
                    aComp.BCFunction.AddOPCode_SReg(
                        BCOpCode.OpType.LDSRZR
                        , mEvaluateInfo.SR
                        );
                    break;

                default:
                    // todo: いろんな型の対応
                    aComp.ThrowErrorException(SymbolTree.ErrorKind.NOT_SUPPORTED_EXPRESSION, mExpr.mToken);
                    return(false);
                }

                // 成功
                return(true);
            }