public int field;
}
-struct StructWithPrivateField {
- private int field;
-
- public void test () {
- field = 1;
- stdout.printf ("StructWithPrivateField: field = %d\n", field);
- }
-}
-
struct StructWithCreationMethod {
public StructWithCreationMethod () {
stdout.printf ("StructWithCreationMethod\n");
test_out_parameter (out simple_struct);
stdout.printf ("after test_out_parameter: st.field = %d\n", simple_struct.field);
- var struct_with_private_field = StructWithPrivateField ();
- struct_with_private_field.test ();
-
stdout.printf (".\n");
}
void parse_field_declaration (Symbol parent, List<Attribute>? attrs) throws ParseError {
var begin = get_location ();
- var access = parse_access_modifier ();
+ var access = parse_access_modifier ((parent is Struct) ? SymbolAccessibility.PUBLIC : SymbolAccessibility.PRIVATE);
var flags = parse_member_declaration_modifiers ();
var type = parse_type (true, true);
string id = parse_identifier ();
var f = new Field (id, type, null, get_src (begin), comment);
f.access = access;
+
+ if (parent is Struct && f.access != SymbolAccessibility.PUBLIC) {
+ Report.error (f.source_reference, "accessibility of struct fields can only be `public`");
+ }
+
set_attributes (f, attrs);
if (ModifierFlags.STATIC in flags) {
f.binding = MemberBinding.STATIC;
* @param f a field
*/
public override void add_field (Field f) {
- // TODO report error when `private' or `protected' has been specified
f.access = SymbolAccessibility.PUBLIC;
fields.add (f);