//------------------------------------------------------------ // 評価準備。 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); } }