示例#1
0
        //------------------------------------------------------------
        // 意味解析。
        public void SemanticAnalyze(SemanticAnalyzeComponent aComp)
        {
            // TypeInfo作成
            TypeInfo typeInfo = aComp.CreateTypeInfo(mVariableDecl.TypePath, mIsConst, false);

            // シンボルノードを作成
            VariableSymbolNode symbolNode = new VariableSymbolNode(
                aComp.PrevSymbolNode()
                , mVariableDecl.Ident
                , typeInfo
                );

            aComp.AddSymbolNode(symbolNode);

            // 評価ノードを作成
            var evaluateNode = new EvaluateNode(symbolNode, mVariableDecl.Expression());

            // 評価準備
            evaluateNode.SendEvent(aComp, EvaluateNodeEventKind.Analyze);

            // 評価実行
            evaluateNode.SendEvent(aComp, EvaluateNodeEventKind.Evaluate);

            // 親の評価終了
            evaluateNode.SendEvent(aComp, EvaluateNodeEventKind.Release);

            // 割り当て済みシンボルノードとして登録
            aComp.AddEvaluatedSymbolNode(new EvaluatedSymbolNode(symbolNode, evaluateNode));

            // Scope終了イベントのために追加
            aComp.AddEvaluateNode(evaluateNode);
        }