Example #1
0
        //------------------------------------------------------------
        // コンストラクタ。
        public FunctionSymbolNode(
            TypeSymbolNode aParent
            , BCObjectType aBCObjectType
            , MemberFunctionDecl aFunctionDecl
            )
        {
            // メンバ初期化
            mParent       = aParent;
            mBCObjectType = aBCObjectType;
            mFunctionDecl = aFunctionDecl;

            // TypeInfo生成
            {// 戻り値
                FunctionReturnValueDecl retValDecl = aFunctionDecl.ReturnValueDecl;
                mReturnTypeInfo = createTypeInfo(
                    retValDecl.TypePath
                    , retValDecl.IsConst
                    , false // isIn
                    , retValDecl.IsRef
                    );
            }
            {// 引数
                mArgTypeInfos = new List <ArgTypeInfo>();
                foreach (FunctionArgumentDecl argDecl in aFunctionDecl.ArgDeclList)
                {
                    mArgTypeInfos.Add(new ArgTypeInfo(argDecl.Ident, createTypeInfo(
                                                          argDecl.TypePath
                                                          , argDecl.IsConst
                                                          , argDecl.IsIn
                                                          , argDecl.IsRef
                                                          )));
                }
            }
        }
Example #2
0
        //------------------------------------------------------------
        // TypeNode展開。
        private void expandTypeNode()
        {
            // メモ:この時点で子ノードは0なので子ノード展開要求は出さない
            Assert.Check(mNodeList.Count() == 0);

            // バイトコードオブジェクト作成
            mBCObjectType = mBCModule.GenerateObjectType(this);

            // 自分自身
            foreach (SymbolDef symbol in mStaticTypeDef.SymbolDefList)
            {
                if (symbol.StaticTypeDef != null)
                {
                    // 重複チェック
                    checkIdentDuplication(symbol.StaticTypeDef.Ident);

                    // ノード作成
                    var newNode = new TypeSymbolNode(this, mBCModule, symbol.StaticTypeDef);

                    // 更に展開
                    newNode.SymbolExpand(SymbolExpandCmdKind.TypeNode);

                    // 追加
                    addNode(newNode);
                }
            }
        }
Example #3
0
        //------------------------------------------------------------
        // ユーザー定義型を追加する。
        public BCObjectType GenerateObjectType(TypeSymbolNode aTypeSymbolNode)
        {
            // 生成
            var objectType = new BCObjectType(this, aTypeSymbolNode);

            // 追加
            mObjectTypeList.Add(objectType);

            // 返す
            return(objectType);
        }
Example #4
0
 //------------------------------------------------------------
 // コンストラクタ。
 public ModuleSymbolNode(ISymbolNode aParent, ModuleContext aModuleContext)
 {
     mModuleContext = aModuleContext;
     mBCModule      = new BCModule(this);
     mTypeNode      = new TypeSymbolNode(aParent, mBCModule, aModuleContext.ModuleDef.StaticTypeDef);
 }
Example #5
0
 //------------------------------------------------------------
 // コンストラクタ。 
 public TypeSymbol(TypeSymbolNode aNode)
 {
     mKind  = Kind.Symbol;
     mNode  = aNode;
     mToken = aNode.GetIdentifier().Token;
 }
Example #6
0
 //------------------------------------------------------------
 // コンストラクタ。
 public BCObjectType(BCModule aBCModule, TypeSymbolNode aTypeSymbolNode)
 {
     mBCModule       = aBCModule;
     mTypeSymbolNode = aTypeSymbolNode;
     mFunctionList   = new BCFunctionList();
 }