//------------------------------------------------------------ // コンストラクタ。 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 ))); } } }
//------------------------------------------------------------ // 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); } } }
//------------------------------------------------------------ // ユーザー定義型を追加する。 public BCObjectType GenerateObjectType(TypeSymbolNode aTypeSymbolNode) { // 生成 var objectType = new BCObjectType(this, aTypeSymbolNode); // 追加 mObjectTypeList.Add(objectType); // 返す return(objectType); }
//------------------------------------------------------------ // 追加。 public void Add(BCObjectType aEntry) { mList.Add(aEntry); }