} else if (sym is Delegate) {
ns.add_delegate ((Delegate) sym);
} else if (sym is Method) {
- var method = (Method) sym;
+ unowned Method method = (Method) sym;
if (method.binding == MemberBinding.INSTANCE) {
method.binding = MemberBinding.STATIC;
}
ns.add_method (method);
} else if (sym is Field) {
- var field = (Field) sym;
+ unowned Field field = (Field) sym;
if (field.binding == MemberBinding.INSTANCE) {
field.binding = MemberBinding.STATIC;
}
} else if (sym is ErrorDomain) {
ns.add_error_domain ((ErrorDomain) sym);
} else if (sym is Field) {
- ns.add_field ((Field) sym);
+ unowned Field field = (Field) sym;
+ if (field.binding == MemberBinding.INSTANCE) {
+ field.binding = MemberBinding.STATIC;
+ }
+ ns.add_field (field);
} else if (sym is Interface) {
ns.add_interface ((Interface) sym);
} else if (sym is Method) {
- ns.add_method ((Method) sym);
+ unowned Method method = (Method) sym;
+ if (method.binding == MemberBinding.INSTANCE) {
+ method.binding = MemberBinding.STATIC;
+ }
+ ns.add_method (method);
} else if (sym is Struct) {
ns.add_struct ((Struct) sym);
}
* @param f a field
*/
public override void add_field (Field f) {
- if (f.binding == MemberBinding.INSTANCE) {
- // default to static member binding
- f.binding = MemberBinding.STATIC;
- }
-
// namespaces do not support private memebers
if (f.access == SymbolAccessibility.PRIVATE) {
f.access = SymbolAccessibility.INTERNAL;
}
- if (f.binding == MemberBinding.INSTANCE) {
- Report.error (f.source_reference, "instance members are not allowed outside of data types");
- f.error = true;
- return;
- } else if (f.binding == MemberBinding.CLASS) {
- Report.error (f.source_reference, "class members are not allowed outside of classes");
- f.error = true;
- return;
- }
-
if (f.owner == null) {
f.source_reference.file.add_node (f);
}
* @param m a method
*/
public override void add_method (Method m) {
- if (m.binding == MemberBinding.INSTANCE) {
- // default to static member binding
- m.binding = MemberBinding.STATIC;
- }
-
// namespaces do not support private memebers
if (m.access == SymbolAccessibility.PRIVATE) {
m.access = SymbolAccessibility.INTERNAL;
}
- if (m is CreationMethod) {
- Report.error (m.source_reference, "construction methods may only be declared within classes and structs");
- m.error = true;
- return;
- }
- if (m.binding == MemberBinding.INSTANCE) {
- Report.error (m.source_reference, "instance members are not allowed outside of data types");
- m.error = true;
- return;
- } else if (m.binding == MemberBinding.CLASS) {
- Report.error (m.source_reference, "class members are not allowed outside of classes");
- m.error = true;
- return;
- }
if (!(m.return_type is VoidType) && m.get_postconditions ().size > 0) {
m.result_var = new LocalVariable (m.return_type.copy (), "result", null, source_reference);
m.result_var.is_result = true;
source_reference.file.gir_version = a.get_string ("gir_version");
}
+ foreach (Field f in fields) {
+ if (f.binding == MemberBinding.INSTANCE) {
+ Report.error (f.source_reference, "instance fields are not allowed outside of data types");
+ f.error = true;
+ error = true;
+ } else if (f.binding == MemberBinding.CLASS) {
+ Report.error (f.source_reference, "class fields are not allowed outside of classes");
+ f.error = true;
+ error = true;
+ }
+ }
+
+ foreach (Method m in methods) {
+ if (m is CreationMethod) {
+ Report.error (m.source_reference, "construction methods may only be declared within classes and structs");
+ m.error = true;
+ error = true;
+ }
+ if (m.binding == MemberBinding.INSTANCE) {
+ Report.error (m.source_reference, "instance methods are not allowed outside of data types");
+ m.error = true;
+ error = true;
+ } else if (m.binding == MemberBinding.CLASS) {
+ Report.error (m.source_reference, "class methods are not allowed outside of classes");
+ m.error = true;
+ error = true;
+ }
+ }
+
foreach (Namespace ns in namespaces) {
ns.check (context);
}
f.binding = MemberBinding.STATIC;
} else if (ModifierFlags.CLASS in flags) {
f.binding = MemberBinding.CLASS;
+ } else if (parent is Namespace) {
+ // default to static member binding in namespace
+ f.binding = MemberBinding.STATIC;
}
if (!parent.external_package && parent is Struct
method.binding = MemberBinding.STATIC;
} else if (ModifierFlags.CLASS in flags) {
method.binding = MemberBinding.CLASS;
+ } else if (parent is Namespace) {
+ // default to static member binding in namespace
+ method.binding = MemberBinding.STATIC;
}
if (ModifierFlags.ASYNC in flags) {
method.coroutine = true;
} else if (sym is ErrorDomain) {
ns.add_error_domain ((ErrorDomain) sym);
} else if (sym is Field) {
- ns.add_field ((Field) sym);
+ unowned Field field = (Field) sym;
+ if (field.binding == MemberBinding.INSTANCE) {
+ field.binding = MemberBinding.STATIC;
+ }
+ ns.add_field (field);
} else if (sym is Interface) {
ns.add_interface ((Interface) sym);
} else if (sym is Method) {
- ns.add_method ((Method) sym);
+ unowned Method method = (Method) sym;
+ if (method.binding == MemberBinding.INSTANCE) {
+ method.binding = MemberBinding.STATIC;
+ }
+ ns.add_method (method);
} else if (sym is Namespace) {
ns.add_namespace ((Namespace) sym);
} else if (sym is Struct) {