private FieldSymbol AddFieldToSymbolTable(FieldInfo fieldInfo, AggregateSymbol aggregate)
{
FieldSymbol field = _symbolTable.LookupSym(
GetName(fieldInfo.Name),
aggregate,
symbmask_t.MASK_FieldSymbol) as FieldSymbol;
if (field != null)
{
return field;
}
field = _symFactory.CreateMemberVar(GetName(fieldInfo.Name), aggregate, null, 0);
field.AssociatedFieldInfo = fieldInfo;
field.isStatic = fieldInfo.IsStatic;
ACCESS access;
if (fieldInfo.IsPublic)
{
access = ACCESS.ACC_PUBLIC;
}
else if (fieldInfo.IsPrivate)
{
access = ACCESS.ACC_PRIVATE;
}
else if (fieldInfo.IsFamily)
{
access = ACCESS.ACC_PROTECTED;
}
else if (fieldInfo.IsAssembly || fieldInfo.IsFamilyAndAssembly)
{
access = ACCESS.ACC_INTERNAL;
}
else
{
Debug.Assert(fieldInfo.IsFamilyOrAssembly);
access = ACCESS.ACC_INTERNALPROTECTED;
}
field.SetAccess(access);
field.isReadOnly = fieldInfo.IsInitOnly;
field.isEvent = false;
field.isAssigned = true;
field.SetType(GetCTypeFromType(fieldInfo.FieldType));
return field;
}
#endregion