Boolean IsSysAlaisType( /* [in] */ const CClsModule* clsModule, /* [in] */ UInt32 index) { Int32 base = clsModule->mBase; CLSModule* module = clsModule->mClsMod; AliasDirEntry* aliasDir = getAliasDirAddr(base, module->mAliasDirs, index); char* nameSpace = adjustNameAddr(base, aliasDir->mNameSpace); return (nameSpace) && !strcmp(nameSpace, "systypes"); }
void _GetOriginalType( /* [in] */ const CClsModule* clsModule, /* [in] */ const TypeDescriptor* src, /* [in] */ TypeDescriptor* dest) { dest->mPointer = src->mPointer; dest->mUnsigned = src->mUnsigned; AliasDirEntry* aliasDir = NULL; while (src->mType == Type_alias) { aliasDir = getAliasDirAddr(clsModule->mBase, clsModule->mClsMod->mAliasDirs, src->mIndex); src = &aliasDir->type; dest->mPointer += src->mPointer; dest->mUnsigned |= src->mUnsigned; } dest->mType = src->mType; dest->mIndex = src->mIndex; dest->mNestedType = src->mNestedType; }
ECode CClsModule::InitOrgType() { if (!mClsMod->mAliasCount) { return NOERROR; } Int32 i = 0; mTypeAliasList = new TypeAliasDesc[mClsMod->mAliasCount]; if (!mTypeAliasList) { return E_OUT_OF_MEMORY; } memset(mTypeAliasList, 0, sizeof(TypeAliasDesc) * mClsMod->mAliasCount); for (i = 0; i < mClsMod->mAliasCount; i++) { mTypeAliasList[i].mOrgTypeDesc = new TypeDescriptor; if (!mTypeAliasList[i].mOrgTypeDesc) goto EExit; mTypeAliasList[i].mTypeDesc = &(getAliasDirAddr(mBase, mClsMod->mAliasDirs, i)->mType); _GetOriginalType(this, mTypeAliasList[i].mTypeDesc, mTypeAliasList[i].mOrgTypeDesc); } return NOERROR; EExit: for (i = 0; i < mClsMod->mAliasCount; i++) { if (mTypeAliasList[i].mOrgTypeDesc) { delete mTypeAliasList[i].mOrgTypeDesc; } } delete[] mTypeAliasList; mTypeAliasList = NULL; return E_OUT_OF_MEMORY; }