Exemple #1
0
            //------------------------------------------------------------ 
            // 評価準備。 
            void eventAnalyze(SemanticAnalyzeComponent aComp)
            {
                // todo: Rootの対応
                Assert.Check(!mExpr.mIsNamespaceRoot);

                // シンボルの検索
                ISymbolNode symbolNode = aComp.FindSymbolNode(mExpr.mIdent);

                if (symbolNode == null)
                {// シンボルが見つからない
                    throw new SymbolTree.ErrorException(new SymbolTree.ErrorInfo(
                                                            SymbolTree.ErrorKind.NOT_DECLARATION_IDENT
                                                            , aComp.TypeSymbolNode.ModuleContext()
                                                            , mExpr.mIdent.Token
                                                            ));
                }

                // 評価情報作成
                if (symbolNode.GetNodeKind() == SymbolNodeKind.Variable)
                {// 変数
                    // 対応する評価済みノードを探す
                    EvaluatedSymbolNode evaluatedSymbolNode = aComp.FindEvaluatedSymbolNode(symbolNode);
                    if (evaluatedSymbolNode == null)
                    {// todo: ローカル変数以外の対応
                        Assert.NotReachHere();
                    }
                    // 作成
                    mEvaluateInfo = evaluatedSymbolNode.EvaluateNode.GetEvaluateInfo();
                }
                else
                {// シンボル
                    mEvaluateInfo = EvaluateInfo.CreateAsStaticSymbol(symbolNode);
                }
            }