Ejemplo n.º 1
0
        //------------------------------------------------------------
        // シンボルノードを作成する。
        private bool onSymbolNodeCreate(VariableSymbolNode aNode)
        {
            // 重複チェック
            // ...

            // 追加
            mLocalVariableSymbolNodes.Add(aNode);

            return(true);
        }
Ejemplo n.º 2
0
        //------------------------------------------------------------
        // 意味解析。
        public bool SemanticAnalyze(SemanticAnalyzeComponent comp)
        {
            TypeInfo typeInfo = comp.CreateTypeInfo(mVariableDecl.TypePath);

            VariableSymbolNode newNode = new VariableSymbolNode(
                comp.PrevSymbolNode
                , mVariableDecl.Ident
                , typeInfo
                );

            if (!comp.OnSymbolNodeCreateMethod(newNode))
            {
                return(false);
            }
            comp.PrevSymbolNode = newNode;

            return(true);
        }
Ejemplo n.º 3
0
        //------------------------------------------------------------
        // シンボルを展開する。
        public bool SymbolExpand(SymbolTree.ErrorInfoHolder aHolder, SymbolExpandCmdKind aCmdKind)
        {
            if (aCmdKind != SymbolExpandCmdKind.FunctionNodeImpl)
            {// 関数実装以外なら何もしない
                return(true);
            }

            mLocalVariableSymbolNodes = new List <VariableSymbolNode>();
            ISymbolNode prevNode = this;

            {// 引数
                foreach (ArgTypeInfo argTypeInfo in mArgTypeInfos)
                {
                    VariableSymbolNode node = new VariableSymbolNode(
                        prevNode
                        , argTypeInfo.Ident
                        , argTypeInfo.TypeInfo
                        );
                    prevNode = node;
                    mLocalVariableSymbolNodes.Add(node);
                }
            }

            {// Statement解析
                SemanticAnalyzeComponent comp = new SemanticAnalyzeComponent(
                    aHolder
                    , mModuleContext
                    , mParent
                    , new SemanticAnalyzeComponent.OnSymbolNodeCreate(onSymbolNodeCreate)
                    , prevNode
                    );
                if (!mFunctionDecl.Statement().SemanticAnalyze(comp))
                {
                    return(false);
                }
            }

            return(true);
        }