//------------------------------------------------------------ // 伝達されたEIを受け取り、NodeEIのSRを設定する。 public void ReceiveAndSetSR(SemanticAnalyzeComponent aComp) { // 伝達されたEvaluateInfoを取得 mTransferredEI = aComp.TransferredEvaluateInfoReceive(); // レジスタ確保 mIsReceived = isNeedToReserveSR(); mNodeEI.SR = mIsReceived ? aComp.SRReserve() : mTransferredEI.SR; }
//------------------------------------------------------------ // 評価実行。 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); }