public void Define(CodeGen code_gen, PEAPI.ClassDef classdef) { if (!is_resolved) { Resolve(code_gen, classdef); } if (addon != null) { addon.Resolve(code_gen); event_def.AddAddon(AsMethodDef(addon.PeapiMethod, "addon")); } if (fire != null) { fire.Resolve(code_gen); event_def.AddFire(AsMethodDef(fire.PeapiMethod, "fire")); } if (other_list != null) { foreach (MethodRef otherm in other_list) { otherm.Resolve(code_gen); event_def.AddOther(AsMethodDef(otherm.PeapiMethod, "other")); } } if (removeon != null) { removeon.Resolve(code_gen); event_def.AddRemoveOn(AsMethodDef(removeon.PeapiMethod, "removeon")); } }
public PEAPI.MethodDef Resolve(CodeGen code_gen, PEAPI.ClassDef classdef) { if (is_resolved) { return(methoddef); } PEAPI.Param [] param_array = GenerateParams(code_gen); FixAttributes(); ret_param.Define(code_gen); if (classdef == null) { methoddef = code_gen.PEFile.AddMethod(meth_attr, impl_attr, name, ret_param.PeapiParam, param_array); } else { methoddef = classdef.AddMethod(meth_attr, impl_attr, name, ret_param.PeapiParam, param_array); } methoddef.AddCallConv(call_conv); is_resolved = true; return(methoddef); }
public PEAPI.Event Resolve(CodeGen code_gen, PEAPI.ClassDef classdef) { if (is_resolved) { return(event_def); } type.Resolve(code_gen); event_def = classdef.AddEvent(name, type.PeapiType); if ((attr & FeatureAttr.Rtspecialname) != 0) { event_def.SetRTSpecialName(); } if ((attr & FeatureAttr.Specialname) != 0) { event_def.SetSpecialName(); } if (customattr_list != null) { foreach (CustomAttr customattr in customattr_list) { customattr.AddTo(code_gen, event_def); } } is_resolved = true; return(event_def); }
public void Resolve(CodeGen code_gen, PEAPI.ClassDef classdef) { foreach (GenericParameter param in param_list) { param.Resolve(code_gen, classdef); } }
public void Define(CodeGen code_gen, PEAPI.ClassDef classdef) { if (!is_resolved) { Resolve(code_gen, classdef); } if (_get != null) { _get.Resolve(code_gen); prop_def.AddGetter(AsMethodDef(_get.PeapiMethod, "get")); } if (_set != null) { _set.Resolve(code_gen); prop_def.AddSetter(AsMethodDef(_set.PeapiMethod, "set")); } if (other_list != null) { foreach (MethodRef otherm in other_list) { otherm.Resolve(code_gen); prop_def.AddOther(AsMethodDef(otherm.PeapiMethod, "other")); } } if (init_value != null) { prop_def.AddInitValue(init_value); } }
public PEAPI.FieldDef Resolve(CodeGen code_gen, PEAPI.ClassDef classdef) { if (is_resolved) { return(field_def); } type.Resolve(code_gen); field_def = classdef.AddField(attr, name, type.PeapiType); if (customattr_list != null) { foreach (CustomAttr customattr in customattr_list) { customattr.AddTo(code_gen, field_def); } } if (native_type != null) { field_def.SetMarshalInfo(native_type); } is_resolved = true; return(field_def); }
public PEAPI.Property Resolve(CodeGen code_gen, PEAPI.ClassDef classdef) { if (is_resolved) { return(prop_def); } PEAPI.Type[] type_list = new PEAPI.Type[arg_list.Count]; for (int i = 0; i < type_list.Length; i++) { BaseTypeRef arg_type = (BaseTypeRef)arg_list[i]; arg_type.Resolve(code_gen); type_list[i] = arg_type.PeapiType; } type.Resolve(code_gen); prop_def = classdef.AddProperty(name, type.PeapiType, type_list); if ((attr & FeatureAttr.Rtspecialname) != 0) { prop_def.SetRTSpecialName(); } if ((attr & FeatureAttr.Specialname) != 0) { prop_def.SetSpecialName(); } prop_def.SetInstance((attr & FeatureAttr.Instance) != 0); if (customattr_list != null) { foreach (CustomAttr customattr in customattr_list) { customattr.AddTo(code_gen, prop_def); } } is_resolved = true; return(prop_def); }
public void Define(CodeGen code_gen) { if (is_defined) { return; } if (is_intransit) { // Circular definition Report.Error("Circular definition of class: " + FullName); } if (outer != null) { PEAPI.TypeAttr vis = attr & PEAPI.TypeAttr.VisibilityMask; if (vis == PEAPI.TypeAttr.Private || vis == PEAPI.TypeAttr.Public) { /* Nested class, but attr not set accordingly. */ Report.Warning(location, String.Format("Nested class '{0}' has non-nested visibility, set to such.", NestedFullName)); attr = attr ^ vis; attr |= (vis == PEAPI.TypeAttr.Public ? PEAPI.TypeAttr.NestedPublic : PEAPI.TypeAttr.NestedPrivate); } } if (parent != null) { is_intransit = true; parent.Resolve(code_gen); is_intransit = false; if (parent.PeapiClass == null) { Report.Error("this type can not be a base type: " + parent); } if (IsValueType(parent.PeapiClass.nameSpace, parent.PeapiClass.name)) { is_value_class = true; } else if (IsEnumType(parent.PeapiClass.nameSpace, parent.PeapiClass.name)) { is_enum_class = true; is_value_class = false; } if (!IsValueType(name_space, name) && !IsEnumType(name_space, name) && is_value_class && (attr & PEAPI.TypeAttr.Sealed) == 0) { attr |= PEAPI.TypeAttr.Sealed; } if (outer != null) { if (!outer.IsDefined) { outer.Define(code_gen); } classdef = outer.PeapiType.AddNestedClass(attr, name_space, name, parent.PeapiClass); } else { if (is_value_class || is_enum_class) { // Should probably confirm that the parent is System.ValueType classdef = code_gen.PEFile.AddValueClass(attr, name_space, name, is_value_class ? PEAPI.ValueClass.ValueType : PEAPI.ValueClass.Enum); } else { classdef = code_gen.PEFile.AddClass(attr, name_space, name, parent.PeapiClass); } } } else { if (outer != null) { if (!outer.IsDefined) { outer.Define(code_gen); } classdef = outer.PeapiType.AddNestedClass(attr, name_space, name); } else { if (is_value_class || is_enum_class) { classdef = code_gen.PEFile.AddValueClass(attr, name_space, name, is_value_class ? PEAPI.ValueClass.ValueType : PEAPI.ValueClass.Enum); } else { classdef = code_gen.PEFile.AddClass(attr, name_space, name); } } if (FullName == "System.Object") { classdef.SpecialNoSuper(); } } is_defined = true; if (size != -1 || pack != -1) { classdef.AddLayoutInfo((pack == -1) ? 1 : pack, (size == -1) ? 0 : size); } if (impl_list != null) { foreach (BaseClassRef impl in impl_list) { impl.Resolve(code_gen); classdef.AddImplementedInterface(impl.PeapiClass); } } if (gen_params != null) { gen_params.Resolve(code_gen, classdef); } is_intransit = false; code_gen.AddToDefineContentsList(this); }
public void Resolve(CodeGen code_gen, PEAPI.ClassDef classdef) { PEAPI.GenericParameter gp = classdef.AddGenericParameter((short)num, id, attr); Resolve(code_gen, gp); }
public void Define (CodeGen code_gen) { if (is_defined) return; if (is_intransit) { // Circular definition Report.Error ("Circular definition of class: " + FullName); } if (outer != null) { PEAPI.TypeAttr vis = attr & PEAPI.TypeAttr.VisibilityMask; if (vis == PEAPI.TypeAttr.Private || vis == PEAPI.TypeAttr.Public) { /* Nested class, but attr not set accordingly. */ Report.Warning (location, String.Format ("Nested class '{0}' has non-nested visibility, set to such.", NestedFullName)); attr = attr ^ vis; attr |= (vis == PEAPI.TypeAttr.Public ? PEAPI.TypeAttr.NestedPublic : PEAPI.TypeAttr.NestedPrivate); } } if (parent != null) { is_intransit = true; parent.Resolve (code_gen); is_intransit = false; if (parent.PeapiClass == null) { Report.Error ("this type can not be a base type: " + parent); } if (IsValueType (parent.PeapiClass.nameSpace, parent.PeapiClass.name)) is_value_class = true; else if (IsEnumType (parent.PeapiClass.nameSpace, parent.PeapiClass.name)) is_enum_class = true; if (!IsValueType (name_space, name) && !IsEnumType (name_space, name) && is_value_class && (attr & PEAPI.TypeAttr.Sealed) == 0) { attr |= PEAPI.TypeAttr.Sealed; } if (outer != null) { if (!outer.IsDefined) outer.Define (code_gen); classdef = outer.PeapiType.AddNestedClass (attr, name_space, name, parent.PeapiClass); } else { if (is_value_class || is_enum_class) { // Should probably confirm that the parent is System.ValueType classdef = code_gen.PEFile.AddValueClass (attr, name_space, name, is_value_class ? PEAPI.ValueClass.ValueType : PEAPI.ValueClass.Enum); } else { classdef = code_gen.PEFile.AddClass (attr, name_space, name, parent.PeapiClass); } } } else { if (outer != null) { if (!outer.IsDefined) outer.Define (code_gen); classdef = outer.PeapiType.AddNestedClass (attr, name_space, name); } else { if (is_value_class || is_enum_class) { classdef = code_gen.PEFile.AddValueClass (attr, name_space, name, is_value_class ? PEAPI.ValueClass.ValueType : PEAPI.ValueClass.Enum); } else { classdef = code_gen.PEFile.AddClass (attr, name_space, name); } } if (FullName == "System.Object") classdef.SpecialNoSuper (); } is_defined = true; if (size != -1 || pack != -1) classdef.AddLayoutInfo ( (pack == -1) ? 1 : pack, (size == -1) ? 0 : size); if (impl_list != null) { foreach (BaseClassRef impl in impl_list) { impl.Resolve (code_gen); classdef.AddImplementedInterface (impl.PeapiClass); } } if (gen_params != null) gen_params.Resolve (code_gen, classdef); is_intransit = false; code_gen.AddToDefineContentsList (this); }
/// <summary> /// Define a field member of the specified class /// </summary> public void Define(CodeGen code_gen, PEAPI.ClassDef class_def) { Resolve(code_gen, class_def); WriteCode(code_gen, field_def); }