1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Added 'using' fields

This commit is contained in:
Brian Fiete 2022-07-10 07:50:08 -04:00
parent ff229f385d
commit 450d541292
13 changed files with 850 additions and 253 deletions

View file

@ -64,6 +64,125 @@ bool BfTypedValue::CanModify() const
//////////////////////////////////////////////////////////////////////////
BfProtection BfUsingFieldData::MemberRef::GetProtection() const
{
switch (mKind)
{
case Kind_Field:
return mTypeInstance->mTypeDef->mFields[mIdx]->mProtection;
case Kind_Property:
return mTypeInstance->mTypeDef->mProperties[mIdx]->mProtection;
case Kind_Method:
return mTypeInstance->mTypeDef->mMethods[mIdx]->mProtection;
}
return BfProtection_Public;
}
BfProtection BfUsingFieldData::MemberRef::GetUsingProtection() const
{
switch (mKind)
{
case Kind_Field:
return mTypeInstance->mTypeDef->mFields[mIdx]->mUsingProtection;
case Kind_Property:
return mTypeInstance->mTypeDef->mProperties[mIdx]->mUsingProtection;
case Kind_Method:
return mTypeInstance->mTypeDef->mMethods[mIdx]->mProtection;
}
return BfProtection_Public;
}
BfTypeDef* BfUsingFieldData::MemberRef::GetDeclaringType(BfModule* curModule) const
{
switch (mKind)
{
case Kind_Field:
return mTypeInstance->mTypeDef->mFields[mIdx]->mDeclaringType;
case Kind_Property:
return mTypeInstance->mTypeDef->mProperties[mIdx]->mDeclaringType;
case Kind_Method:
return mTypeInstance->mTypeDef->mMethods[mIdx]->mDeclaringType;
case Kind_Local:
return curModule->GetActiveTypeDef();
}
return NULL;
}
String BfUsingFieldData::MemberRef::GetFullName(BfModule* curModule) const
{
if (mKind == Kind_Local)
return curModule->mCurMethodState->mLocals[mIdx]->mName;
String result = curModule->TypeToString(mTypeInstance);
if (!result.IsEmpty())
result += ".";
switch (mKind)
{
case Kind_Field:
result += mTypeInstance->mTypeDef->mFields[mIdx]->mName;
break;
case Kind_Property:
result += mTypeInstance->mTypeDef->mProperties[mIdx]->mName;
break;
case Kind_Method:
result += mTypeInstance->mTypeDef->mMethods[mIdx]->mName;
break;
}
return result;
}
String BfUsingFieldData::MemberRef::GetName(BfModule* curModule) const
{
switch (mKind)
{
case Kind_Field:
return mTypeInstance->mTypeDef->mFields[mIdx]->mName;
case Kind_Property:
return mTypeInstance->mTypeDef->mProperties[mIdx]->mName;
case Kind_Method:
{
auto methodInstance = curModule->GetRawMethodInstance(mTypeInstance, mTypeInstance->mTypeDef->mMethods[mIdx]);
return curModule->MethodToString(methodInstance, BfMethodNameFlag_OmitTypeName);
}
case Kind_Local:
return curModule->mCurMethodState->mLocals[mIdx]->mName;
}
return "";
}
BfAstNode* BfUsingFieldData::MemberRef::GetRefNode(BfModule* curModule) const
{
switch (mKind)
{
case Kind_Field:
return mTypeInstance->mTypeDef->mFields[mIdx]->GetRefNode();
case Kind_Property:
return mTypeInstance->mTypeDef->mProperties[mIdx]->GetRefNode();
case Kind_Method:
return mTypeInstance->mTypeDef->mMethods[mIdx]->GetRefNode();
case Kind_Local:
return curModule->mCurMethodState->mLocals[mIdx]->mNameNode;
}
return NULL;
}
bool BfUsingFieldData::MemberRef::IsStatic() const
{
switch (mKind)
{
case Kind_Field:
return mTypeInstance->mTypeDef->mFields[mIdx]->mIsStatic;
case Kind_Property:
return mTypeInstance->mTypeDef->mProperties[mIdx]->mIsStatic;
case Kind_Method:
return mTypeInstance->mTypeDef->mMethods[mIdx]->mIsStatic;
}
return false;
}
//////////////////////////////////////////////////////////////////////////
bool BfGenericParamInstance::IsEnum()
{
if ((mGenericParamFlags & BfGenericParamFlag_Enum) != 0)