Example #1
0
            //------------------------------------------------------------ 
            // 評価準備。 
            void eventAnalyze(SemanticAnalyzeComponent aComp)
            {
                // 型情報取得
                TypeInfo typeInfo = mSymbol.GetTypeInfo();

                // todo: いろんな型の対応
                // - 現時点はint,boolのみ対応
                if (typeInfo.Symbol.GetKind() != TypeInfo.TypeSymbol.Kind.BuiltIn ||
                    (typeInfo.Symbol.GetBuiltInType() != BuiltInType.SInt32 && typeInfo.Symbol.GetBuiltInType() != BuiltInType.Bool)
                    )
                {
                    aComp.ThrowErrorException(SymbolTree.ErrorKind.NOT_SUPPORTED_TYPENAME, typeInfo.Symbol.GetToken());
                }

                // 評価情報作成
                mEvaluateInfo = EvaluateInfo.CreateAsValue(typeInfo);

                // 初期化式があるか
                if (mExpr != null)
                {// 初期化式の結果でロード命令を挟む
                    // 作成
                    mExprNode = mExpr.CreateEvaluateNode();

                    // 評価
                    mExprNode.SendEvent(aComp, EvaluateNodeEventKind.Analyze);
                }
            }
Example #2
0
 //------------------------------------------------------------
 // 式の結果がboolであることをチェックする。
 static public void CheckBoolExpression(
     SemanticAnalyzeComponent aComp
     , IEvaluateNode aExprEN
     , IExpression aExpr
     )
 {
     if (aExprEN.GetEvaluateInfo().Kind != EvaluateInfo.InfoKind.Value ||
         aExprEN.GetEvaluateInfo().TypeInfo.Symbol.GetBuiltInType() != BuiltInType.Bool)
     {
         throw new SymbolTree.ErrorException(new SymbolTree.ErrorInfo(
                                                 SymbolTree.ErrorKind.CANT_IMPLICIT_CAST_TYPEA_TO_TYPEB
                                                 , aComp.TypeSymbolNode.ModuleContext()
                                                 , aExpr.GetToken()
                                                 , aExprEN.GetEvaluateInfo().TypeInfo
                                                 , new TypeInfo(new TypeInfo.TypeSymbol(null, BuiltInType.Bool), new TypeInfo.TypeAttribute(true, false))
                                                 ));
     }
 }
Example #3
0
 //------------------------------------------------------------
 // 評価ノードを追加する。
 public void AddEvaluateNode(IEvaluateNode aNode)
 {
     mEvaluateNodeList.Add(aNode);
 }
Example #4
0
 //------------------------------------------------------------
 // コンストラクタ。
 public EvaluatedSymbolNode(ISymbolNode aSymbolNode, IEvaluateNode aEvaluateNode)
 {
     SymbolNode   = aSymbolNode;
     EvaluateNode = aEvaluateNode;
 }