Pārlūkot izejas kodu

Fix access modifiers

Stan Hebben 6 gadus atpakaļ
vecāks
revīzija
b6aa875e42
38 mainītis faili ar 221 papildinājumiem un 93 dzēšanām
  1. 11
    11
      CodeFormatter/src/main/java/org/openzen/zenscript/formatter/MemberFormatter.java
  2. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/AccessScope.java
  3. 9
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java
  4. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallArguments.java
  5. 9
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java
  6. 7
    5
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java
  7. 8
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java
  8. 10
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CallerMember.java
  9. 9
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CasterMember.java
  10. 11
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstMember.java
  11. 7
    6
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstructorMember.java
  12. 8
    8
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/DefinitionMember.java
  13. 12
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java
  14. 11
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FunctionalMember.java
  15. 11
    2
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java
  16. 3
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/IDefinitionMember.java
  17. 12
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ImplementationMember.java
  18. 11
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/InnerDefinitionMember.java
  19. 12
    5
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/MethodMember.java
  20. 11
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java
  21. 6
    0
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/StaticInitializerMember.java
  22. 1
    1
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/CasterMemberRef.java
  23. 2
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/ImplementationMemberRef.java
  24. 3
    3
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMemberBuilder.java
  25. 4
    4
      CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMembers.java
  26. 3
    4
      JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java
  27. 2
    2
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java
  28. 1
    1
      JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java
  29. 2
    2
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaExpansionMemberCompiler.java
  30. 4
    4
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaMemberCompiler.java
  31. 4
    0
      JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceExpressionFormatter.java
  32. 1
    1
      ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/DefinitionSerializer.java
  33. 1
    1
      ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/MemberSerializer.java
  34. 0
    1
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedFunctionalMember.java
  35. 0
    1
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedGetter.java
  36. 0
    1
      Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedSetter.java
  37. 7
    6
      Validator/src/main/java/org/openzen/zenscript/validator/visitors/DefinitionMemberValidator.java
  38. 6
    5
      Validator/src/main/java/org/openzen/zenscript/validator/visitors/ExpressionValidator.java

+ 11
- 11
CodeFormatter/src/main/java/org/openzen/zenscript/formatter/MemberFormatter.java Parādīt failu

@@ -58,7 +58,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
58 58
 	@Override
59 59
 	public Void visitConst(ConstMember member) {
60 60
 		visit(true);
61
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
61
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
62 62
 		output.append("const")
63 63
 				.append(member.name)
64 64
 				.append(" as ")
@@ -72,7 +72,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
72 72
 	@Override
73 73
 	public Void visitField(FieldMember member) {
74 74
 		visit(true);
75
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
75
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
76 76
 		output.append(member.isFinal() ? "val " : "var ")
77 77
 				.append(member.name)
78 78
 				.append(" as ")
@@ -89,7 +89,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
89 89
 	@Override
90 90
 	public Void visitConstructor(ConstructorMember member) {
91 91
 		visit(false);
92
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
92
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
93 93
 		output.append("this");
94 94
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
95 95
 		formatBody(member.body);
@@ -99,7 +99,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
99 99
 	@Override
100 100
 	public Void visitDestructor(DestructorMember member) {
101 101
 		visit(false);
102
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
102
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
103 103
 		output.append("this");
104 104
 		formatBody(member.body);
105 105
 		return null;
@@ -108,7 +108,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
108 108
 	@Override
109 109
 	public Void visitMethod(MethodMember member) {
110 110
 		visit(false);
111
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
111
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
112 112
 		output.append(member.name);
113 113
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
114 114
 		formatBody(member.body);
@@ -118,7 +118,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
118 118
 	@Override
119 119
 	public Void visitGetter(GetterMember member) {
120 120
 		visit(false);
121
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
121
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
122 122
 		output.append("get ");
123 123
 		output.append(member.name);
124 124
 		output.append(" as ");
@@ -130,7 +130,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
130 130
 	@Override
131 131
 	public Void visitSetter(SetterMember member) {
132 132
 		visit(false);
133
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
133
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
134 134
 		output.append("set ");
135 135
 		output.append(member.name);
136 136
 		output.append(" as ");
@@ -142,7 +142,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
142 142
 	@Override
143 143
 	public Void visitOperator(OperatorMember member) {
144 144
 		visit(false);
145
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
145
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
146 146
 		switch (member.operator) {
147 147
 			case ADD: output.append("+"); break;
148 148
 			case SUB: output.append("-"); break;
@@ -184,7 +184,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
184 184
 	@Override
185 185
 	public Void visitCaster(CasterMember member) {
186 186
 		visit(false);
187
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
187
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
188 188
 		output.append(" as ");
189 189
 		output.append(typeFormatter.format(member.toType));
190 190
 		formatBody(member.body);
@@ -200,7 +200,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
200 200
 	@Override
201 201
 	public Void visitCaller(CallerMember member) {
202 202
 		visit(false);
203
-		FormattingUtils.formatModifiers(output, member.modifiers & ~Modifiers.FINAL);
203
+		FormattingUtils.formatModifiers(output, member.getSpecifiedModifiers());
204 204
 		FormattingUtils.formatHeader(output, settings, member.header, typeFormatter);
205 205
 		formatBody(member.body);
206 206
 		return null;
@@ -209,7 +209,7 @@ public class MemberFormatter implements MemberVisitor<Void> {
209 209
 	@Override
210 210
 	public Void visitImplementation(ImplementationMember implementation) {
211 211
 		visit(false);
212
-		FormattingUtils.formatModifiers(output, implementation.modifiers & ~Modifiers.FINAL);
212
+		FormattingUtils.formatModifiers(output, implementation.getSpecifiedModifiers());
213 213
 		output.append("implements ");
214 214
 		output.append(implementation.type.accept(typeFormatter));
215 215
 		if (settings.classBracketOnSameLine) {

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/AccessScope.java Parādīt failu

@@ -23,7 +23,7 @@ public final class AccessScope {
23 23
 	public boolean hasAccessTo(AccessScope other, int access) {
24 24
 		if (Modifiers.isPublic(access))
25 25
 			return true;
26
-		if (definition == other.definition)
26
+		if (definition == other.definition || definition.isOuterOf(other.definition) || other.definition.isOuterOf(definition))
27 27
 			return true;
28 28
 		if (Modifiers.isPrivate(access))
29 29
 			return false;

+ 9
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/HighLevelDefinition.java Parādīt failu

@@ -227,4 +227,13 @@ public abstract class HighLevelDefinition extends Taggable {
227 227
 		
228 228
 		return null;
229 229
 	}
230
+
231
+	public boolean isOuterOf(HighLevelDefinition definition) {
232
+		if (definition.outerDefinition == this)
233
+			return true;
234
+		if (definition.outerDefinition == null)
235
+			return false;
236
+		
237
+		return isOuterOf(definition.outerDefinition);
238
+	}
230 239
 }

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/CallArguments.java Parādīt failu

@@ -57,7 +57,7 @@ public class CallArguments {
57 57
 		CallArguments result = this;
58 58
 		
59 59
 		for (int i = 0; i < arguments.length; i++) {
60
-			arguments[i] = arguments[i].castImplicit(position, scope, header.parameters[i].type);
60
+			arguments[i] = arguments[i].normalize(scope).castImplicit(position, scope, header.parameters[i].type);
61 61
 		}
62 62
 		
63 63
 		if (arguments.length < header.parameters.length) {

+ 9
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/GetterExpression.java Parādīt failu

@@ -6,8 +6,10 @@
6 6
 package org.openzen.zenscript.codemodel.expression;
7 7
 
8 8
 import org.openzen.zencode.shared.CodePosition;
9
+import org.openzen.zencode.shared.CompileException;
9 10
 import org.openzen.zenscript.codemodel.member.ref.GetterMemberRef;
10 11
 import org.openzen.zenscript.codemodel.scope.TypeScope;
12
+import org.openzen.zenscript.codemodel.type.member.TypeMembers;
11 13
 
12 14
 /**
13 15
  *
@@ -44,4 +46,11 @@ public class GetterExpression extends Expression {
44 46
 	public Expression normalize(TypeScope scope) {
45 47
 		return new GetterExpression(position, target.normalize(scope), getter);
46 48
 	}
49
+	
50
+	@Override
51
+	public Expression assign(CodePosition position, TypeScope scope, Expression value) throws CompileException {
52
+		return scope.getTypeMembers(getter.getOwnerType())
53
+				.getOrCreateGroup(getter.member.name, false)
54
+				.setter(position, scope, target, value, false);
55
+	}
47 56
 }

+ 7
- 5
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/InterfaceCastExpression.java Parādīt failu

@@ -6,8 +6,8 @@
6 6
 package org.openzen.zenscript.codemodel.expression;
7 7
 
8 8
 import org.openzen.zencode.shared.CodePosition;
9
+import org.openzen.zenscript.codemodel.member.ref.ImplementationMemberRef;
9 10
 import org.openzen.zenscript.codemodel.scope.TypeScope;
10
-import org.openzen.zenscript.codemodel.type.StoredType;
11 11
 
12 12
 /**
13 13
  *
@@ -15,11 +15,13 @@ import org.openzen.zenscript.codemodel.type.StoredType;
15 15
  */
16 16
 public class InterfaceCastExpression extends Expression {
17 17
 	public final Expression value;
18
+	public final ImplementationMemberRef implementation;
18 19
 	
19
-	public InterfaceCastExpression(CodePosition position, Expression value, StoredType toType) {
20
-		super(position, toType, value.thrownType);
20
+	public InterfaceCastExpression(CodePosition position, Expression value, ImplementationMemberRef implementation) {
21
+		super(position, implementation.implementsType, value.thrownType);
21 22
 		
22 23
 		this.value = value;
24
+		this.implementation = implementation;
23 25
 	}
24 26
 
25 27
 	@Override
@@ -35,11 +37,11 @@ public class InterfaceCastExpression extends Expression {
35 37
 	@Override
36 38
 	public Expression transform(ExpressionTransformer transformer) {
37 39
 		Expression tValue = value.transform(transformer);
38
-		return value == tValue ? this : new InterfaceCastExpression(position, tValue, type);
40
+		return value == tValue ? this : new InterfaceCastExpression(position, tValue, implementation);
39 41
 	}
40 42
 
41 43
 	@Override
42 44
 	public Expression normalize(TypeScope scope) {
43
-		return new InterfaceCastExpression(position, value.normalize(scope), type.getNormalized());
45
+		return new InterfaceCastExpression(position, value.normalize(scope), implementation);
44 46
 	}
45 47
 }

+ 8
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/expression/StaticGetterExpression.java Parādīt failu

@@ -6,6 +6,7 @@
6 6
 package org.openzen.zenscript.codemodel.expression;
7 7
 
8 8
 import org.openzen.zencode.shared.CodePosition;
9
+import org.openzen.zencode.shared.CompileException;
9 10
 import org.openzen.zenscript.codemodel.member.ref.GetterMemberRef;
10 11
 import org.openzen.zenscript.codemodel.scope.TypeScope;
11 12
 
@@ -41,4 +42,11 @@ public class StaticGetterExpression extends Expression {
41 42
 	public Expression normalize(TypeScope scope) {
42 43
 		return this;
43 44
 	}
45
+	
46
+	@Override
47
+	public Expression assign(CodePosition position, TypeScope scope, Expression value) throws CompileException {
48
+		return scope.getTypeMembers(getter.getOwnerType())
49
+				.getOrCreateGroup(getter.member.name, false)
50
+				.staticSetter(position, scope, value);
51
+	}
44 52
 }

+ 10
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CallerMember.java Parādīt failu

@@ -9,6 +9,7 @@ import org.openzen.zencode.shared.CodePosition;
9 9
 import org.openzen.zenscript.codemodel.FunctionHeader;
10 10
 import org.openzen.zenscript.codemodel.GenericMapper;
11 11
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
12
+import org.openzen.zenscript.codemodel.Modifiers;
12 13
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
13 14
 import org.openzen.zenscript.codemodel.member.ref.FunctionalMemberRef;
14 15
 import org.openzen.zenscript.codemodel.type.GlobalTypeRegistry;
@@ -63,6 +64,15 @@ public class CallerMember extends FunctionalMember {
63 64
 		return visitor.visitCaller(context, this);
64 65
 	}
65 66
 	
67
+	@Override
68
+	public int getEffectiveModifiers() {
69
+		int result = super.getEffectiveModifiers();
70
+		if (overrides != null && overrides.getTarget().getDefinition().isInterface())
71
+			result |= Modifiers.PUBLIC;
72
+		
73
+		return result;
74
+	}
75
+	
66 76
 	public void setOverrides(GlobalTypeRegistry registry, FunctionalMemberRef overrides) {
67 77
 		this.overrides = overrides;
68 78
 		header = header.inferFromOverride(registry, overrides.getHeader());

+ 9
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/CasterMember.java Parādīt failu

@@ -76,6 +76,15 @@ public class CasterMember extends FunctionalMember {
76 76
 		return visitor.visitCaster(context, this);
77 77
 	}
78 78
 	
79
+	@Override
80
+	public int getEffectiveModifiers() {
81
+		int result = super.getEffectiveModifiers();
82
+		if (overrides != null && overrides.getTarget().getDefinition().isInterface())
83
+			result |= Modifiers.PUBLIC;
84
+		
85
+		return result;
86
+	}
87
+	
79 88
 	public void setOverrides(GlobalTypeRegistry registry, CasterMemberRef overrides) {
80 89
 		this.overrides = overrides;
81 90
 	}

+ 11
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstMember.java Parādīt failu

@@ -57,12 +57,20 @@ public class ConstMember extends PropertyMember {
57 57
 	public DefinitionMemberRef getOverrides() {
58 58
 		return null;
59 59
 	}
60
+	
61
+	@Override
62
+	public int getEffectiveModifiers() {
63
+		int result = modifiers;
64
+		if (definition.isInterface())
65
+			result |= Modifiers.PUBLIC;
66
+		if (!Modifiers.hasAccess(result))
67
+			result |= Modifiers.INTERNAL;
68
+		
69
+		return result;
70
+	}
60 71
 
61 72
 	@Override
62 73
 	public void normalize(TypeScope scope) {
63
-		if (!Modifiers.hasAccess(modifiers))
64
-			modifiers |= Modifiers.INTERNAL;
65
-		
66 74
 		type = type.getNormalized();
67 75
 		value = value.normalize(scope);
68 76
 	}

+ 7
- 6
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ConstructorMember.java Parādīt failu

@@ -92,14 +92,15 @@ public class ConstructorMember extends FunctionalMember {
92 92
 	public DefinitionMemberRef getOverrides() {
93 93
 		return null;
94 94
 	}
95
-
95
+	
96 96
 	@Override
97
-	public void normalize(TypeScope scope) {
97
+	public int getEffectiveModifiers() {
98
+		int result = modifiers;
98 99
 		if (definition instanceof EnumDefinition)
99
-			modifiers |= Modifiers.PRIVATE;
100
-		else if (!Modifiers.hasAccess(modifiers))
101
-			modifiers |= Modifiers.INTERNAL;
100
+			result |= Modifiers.PRIVATE;
101
+		else if (!Modifiers.hasAccess(result))
102
+			result |= Modifiers.INTERNAL;
102 103
 		
103
-		super.normalize(scope);
104
+		return result;
104 105
 	}
105 106
 }

+ 8
- 8
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/DefinitionMember.java Parādīt failu

@@ -18,7 +18,7 @@ import org.openzen.zenscript.codemodel.annotations.MemberAnnotation;
18 18
 public abstract class DefinitionMember extends Taggable implements IDefinitionMember {
19 19
 	public final CodePosition position;
20 20
 	public final HighLevelDefinition definition;
21
-	public int modifiers;
21
+	protected final int modifiers;
22 22
 	public MemberAnnotation[] annotations = MemberAnnotation.NONE;
23 23
 	
24 24
 	public DefinitionMember(CodePosition position, HighLevelDefinition definition, int modifiers) {
@@ -33,7 +33,7 @@ public abstract class DefinitionMember extends Taggable implements IDefinitionMe
33 33
 	}
34 34
 	
35 35
 	@Override
36
-	public int getModifiers() {
36
+	public int getSpecifiedModifiers() {
37 37
 		return modifiers;
38 38
 	}
39 39
 	
@@ -48,26 +48,26 @@ public abstract class DefinitionMember extends Taggable implements IDefinitionMe
48 48
 	}
49 49
 	
50 50
 	public boolean isStatic() {
51
-		return Modifiers.isStatic(modifiers);
51
+		return Modifiers.isStatic(getEffectiveModifiers());
52 52
 	}
53 53
 	
54 54
 	public boolean isFinal() {
55
-		return Modifiers.isFinal(modifiers);
55
+		return Modifiers.isFinal(getEffectiveModifiers());
56 56
 	}
57 57
 	
58 58
 	public boolean isExtern() {
59
-		return Modifiers.isExtern(modifiers);
59
+		return Modifiers.isExtern(getEffectiveModifiers());
60 60
 	}
61 61
 	
62 62
 	public boolean isPrivate() {
63
-		return Modifiers.isPrivate(modifiers);
63
+		return Modifiers.isPrivate(getEffectiveModifiers());
64 64
 	}
65 65
 	
66 66
 	public boolean isPublic() {
67
-		return Modifiers.isPublic(modifiers);
67
+		return Modifiers.isPublic(getEffectiveModifiers());
68 68
 	}
69 69
 	
70 70
 	public boolean isProtected() {
71
-		return Modifiers.isProtected(modifiers);
71
+		return Modifiers.isProtected(getEffectiveModifiers());
72 72
 	}
73 73
 }

+ 12
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FieldMember.java Parādīt failu

@@ -5,10 +5,12 @@
5 5
  */
6 6
 package org.openzen.zenscript.codemodel.member;
7 7
 
8
+import java.lang.reflect.Modifier;
8 9
 import org.openzen.zencode.shared.CodePosition;
9 10
 import org.openzen.zenscript.codemodel.FunctionHeader;
10 11
 import org.openzen.zenscript.codemodel.GenericMapper;
11 12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
+import org.openzen.zenscript.codemodel.Modifiers;
12 14
 import org.openzen.zenscript.codemodel.expression.Expression;
13 15
 import org.openzen.zenscript.codemodel.expression.GetFieldExpression;
14 16
 import org.openzen.zenscript.codemodel.expression.GetFunctionParameterExpression;
@@ -121,6 +123,11 @@ public class FieldMember extends PropertyMember {
121 123
 	@Override
122 124
 	public void registerTo(TypeMembers members, TypeMemberPriority priority, GenericMapper mapper) {
123 125
 		members.addField(new FieldMemberRef(members.type, this, mapper), priority);
126
+		
127
+		if (autoGetter != null)
128
+			autoGetter.registerTo(members, priority, mapper);
129
+		if (autoSetter != null)
130
+			autoSetter.registerTo(members, priority, mapper);
124 131
 	}
125 132
 	
126 133
 	@Override
@@ -147,6 +154,11 @@ public class FieldMember extends PropertyMember {
147 154
 	public DefinitionMemberRef getOverrides() {
148 155
 		return null;
149 156
 	}
157
+	
158
+	@Override
159
+	public int getEffectiveModifiers() {
160
+		return modifiers;
161
+	}
150 162
 
151 163
 	@Override
152 164
 	public void normalize(TypeScope scope) {

+ 11
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/FunctionalMember.java Parādīt failu

@@ -60,12 +60,20 @@ public abstract class FunctionalMember extends DefinitionMember {
60 60
 	public BuiltinID getBuiltin() {
61 61
 		return builtin;
62 62
 	}
63
+	
64
+	@Override
65
+	public int getEffectiveModifiers() {
66
+		int result = modifiers;
67
+		if (definition.isInterface())
68
+			result |= Modifiers.PUBLIC;
69
+		if (!Modifiers.hasAccess(result))
70
+			result |= Modifiers.INTERNAL;
71
+		
72
+		return result;
73
+	}
63 74
 
64 75
 	@Override
65 76
 	public void normalize(TypeScope scope) {
66
-		if (!Modifiers.hasAccess(modifiers))
67
-			modifiers |= Modifiers.INTERNAL;
68
-		
69 77
 		header = header.normalize(scope.getTypeRegistry());
70 78
 		if (body != null)
71 79
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));

+ 11
- 2
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/GetterMember.java Parādīt failu

@@ -79,11 +79,20 @@ public class GetterMember extends PropertyMember {
79 79
 	public GetterMemberRef getOverrides() {
80 80
 		return overrides;
81 81
 	}
82
+	
83
+	@Override
84
+	public int getEffectiveModifiers() {
85
+		int result = modifiers;
86
+		if (definition.isInterface() || (overrides != null && overrides.getTarget().getDefinition().isInterface()))
87
+			result |= Modifiers.PUBLIC;
88
+		if (!Modifiers.hasAccess(result))
89
+			result |= Modifiers.INTERNAL;
90
+		
91
+		return result;
92
+	}
82 93
 
83 94
 	@Override
84 95
 	public void normalize(TypeScope scope) {
85
-		if (!Modifiers.hasAccess(modifiers))
86
-			modifiers |= Modifiers.INTERNAL;
87 96
 		if (body != null)
88 97
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
89 98
 	}

+ 3
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/IDefinitionMember.java Parādīt failu

@@ -25,7 +25,9 @@ import org.openzen.zenscript.codemodel.type.member.TypeMembers;
25 25
 public interface IDefinitionMember {
26 26
 	public CodePosition getPosition();
27 27
 	
28
-	public int getModifiers();
28
+	public int getSpecifiedModifiers();
29
+	
30
+	public int getEffectiveModifiers();
29 31
 	
30 32
 	public MemberAnnotation[] getAnnotations();
31 33
 	

+ 12
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ImplementationMember.java Parādīt failu

@@ -42,7 +42,7 @@ public class ImplementationMember extends DefinitionMember {
42 42
 	@Override
43 43
 	public void registerTo(TypeMembers members, TypeMemberPriority priority, GenericMapper mapper) {
44 44
 		TypeID instancedType = mapper == null ? type : mapper.map(position, type.stored()).type;
45
-		members.addImplementation(new ImplementationMemberRef(this, members.type, instancedType), priority);
45
+		members.addImplementation(new ImplementationMemberRef(this, members.type, instancedType.stored(members.type.getSpecifiedStorage())), priority);
46 46
 		
47 47
 		TypeMembers interfaceTypeMembers = members.getMemberCache().get(instancedType.stored(members.type.getActualStorage()));
48 48
 		interfaceTypeMembers.copyMembersTo(position, members, TypeMemberPriority.INTERFACE);
@@ -72,12 +72,20 @@ public class ImplementationMember extends DefinitionMember {
72 72
 	public DefinitionMemberRef getOverrides() {
73 73
 		return null;
74 74
 	}
75
+	
76
+	@Override
77
+	public int getEffectiveModifiers() {
78
+		int result = modifiers;
79
+		if (definition.isInterface())
80
+			result |= Modifiers.PUBLIC;
81
+		if (!Modifiers.hasAccess(result))
82
+			result |= Modifiers.PUBLIC;
83
+		
84
+		return result;
85
+	}
75 86
 
76 87
 	@Override
77 88
 	public void normalize(TypeScope scope) {
78
-		if (!Modifiers.hasAccess(modifiers))
79
-			modifiers |= Modifiers.PUBLIC;
80
-		
81 89
 		for (IDefinitionMember member : members)
82 90
 			member.normalize(scope);
83 91
 	}

+ 11
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/InnerDefinitionMember.java Parādīt failu

@@ -64,6 +64,17 @@ public class InnerDefinitionMember extends DefinitionMember {
64 64
 	public DefinitionMemberRef getOverrides() {
65 65
 		return null;
66 66
 	}
67
+	
68
+	@Override
69
+	public int getEffectiveModifiers() {
70
+		int result = modifiers;
71
+		if (definition.isInterface())
72
+			result |= Modifiers.PUBLIC;
73
+		if (!Modifiers.hasAccess(result))
74
+			result |= Modifiers.INTERNAL;
75
+		
76
+		return result;
77
+	}
67 78
 
68 79
 	@Override
69 80
 	public void normalize(TypeScope scope) {

+ 12
- 5
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/MethodMember.java Parādīt failu

@@ -59,6 +59,18 @@ public class MethodMember extends FunctionalMember {
59 59
 	public <C, R> R accept(C context, MemberVisitorWithContext<C, R> visitor) {
60 60
 		return visitor.visitMethod(context, this);
61 61
 	}
62
+	
63
+	@Override
64
+	public int getEffectiveModifiers() {
65
+		int result = super.getEffectiveModifiers();
66
+		if (overrides != null) {
67
+			if (overrides.getTarget().isPublic())
68
+				result |= Modifiers.PUBLIC;
69
+			if (overrides.getTarget().isProtected())
70
+				result |= Modifiers.PROTECTED;
71
+		}
72
+		return result;
73
+	}
62 74
 
63 75
 	@Override
64 76
 	public FunctionalMemberRef getOverrides() {
@@ -68,10 +80,5 @@ public class MethodMember extends FunctionalMember {
68 80
 	public void setOverrides(GlobalTypeRegistry registry, FunctionalMemberRef overrides) {
69 81
 		this.overrides = overrides;
70 82
 		header = header.inferFromOverride(registry, overrides.getHeader());
71
-		
72
-		if (overrides.getTarget().isPublic())
73
-			modifiers |= Modifiers.PUBLIC;
74
-		if (overrides.getTarget().isProtected())
75
-			modifiers |= Modifiers.PROTECTED;
76 83
 	}
77 84
 }

+ 11
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/SetterMember.java Parādīt failu

@@ -79,12 +79,20 @@ public class SetterMember extends PropertyMember {
79 79
 	public SetterMemberRef getOverrides() {
80 80
 		return overrides;
81 81
 	}
82
+	
83
+	@Override
84
+	public int getEffectiveModifiers() {
85
+		int result = modifiers;
86
+		if (definition.isInterface() || (overrides != null && overrides.getTarget().getDefinition().isInterface()))
87
+			result |= Modifiers.PUBLIC;
88
+		if (!Modifiers.hasAccess(result))
89
+			result |= Modifiers.INTERNAL;
90
+		
91
+		return result;
92
+	}
82 93
 
83 94
 	@Override
84 95
 	public void normalize(TypeScope scope) {
85
-		if (!Modifiers.hasAccess(modifiers))
86
-			modifiers |= Modifiers.INTERNAL;
87
-		
88 96
 		if (body != null)
89 97
 			body = body.normalize(scope, ConcatMap.empty(LoopStatement.class, LoopStatement.class));
90 98
 	}

+ 6
- 0
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/StaticInitializerMember.java Parādīt failu

@@ -10,6 +10,7 @@ import org.openzen.zencode.shared.ConcatMap;
10 10
 import org.openzen.zenscript.codemodel.FunctionHeader;
11 11
 import org.openzen.zenscript.codemodel.GenericMapper;
12 12
 import org.openzen.zenscript.codemodel.HighLevelDefinition;
13
+import org.openzen.zenscript.codemodel.Modifiers;
13 14
 import org.openzen.zenscript.codemodel.member.ref.DefinitionMemberRef;
14 15
 import org.openzen.zenscript.codemodel.scope.TypeScope;
15 16
 import org.openzen.zenscript.codemodel.statement.LoopStatement;
@@ -60,6 +61,11 @@ public class StaticInitializerMember extends DefinitionMember {
60 61
 	public DefinitionMemberRef getOverrides() {
61 62
 		return null;
62 63
 	}
64
+	
65
+	@Override
66
+	public int getEffectiveModifiers() {
67
+		return modifiers;
68
+	}
63 69
 
64 70
 	@Override
65 71
 	public void normalize(TypeScope scope) {

+ 1
- 1
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/CasterMemberRef.java Parādīt failu

@@ -55,7 +55,7 @@ public class CasterMemberRef implements DefinitionMemberRef {
55 55
 	}
56 56
 	
57 57
 	public boolean isImplicit() {
58
-		return Modifiers.isImplicit(member.modifiers);
58
+		return Modifiers.isImplicit(member.getSpecifiedModifiers());
59 59
 	}
60 60
 
61 61
 	@Override

+ 2
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/member/ref/ImplementationMemberRef.java Parādīt failu

@@ -11,7 +11,6 @@ import org.openzen.zenscript.codemodel.annotations.MemberAnnotation;
11 11
 import org.openzen.zenscript.codemodel.member.IDefinitionMember;
12 12
 import org.openzen.zenscript.codemodel.member.ImplementationMember;
13 13
 import org.openzen.zenscript.codemodel.type.StoredType;
14
-import org.openzen.zenscript.codemodel.type.TypeID;
15 14
 
16 15
 /**
17 16
  *
@@ -20,9 +19,9 @@ import org.openzen.zenscript.codemodel.type.TypeID;
20 19
 public class ImplementationMemberRef implements DefinitionMemberRef {
21 20
 	public final ImplementationMember member;
22 21
 	private final StoredType type;
23
-	public final TypeID implementsType;
22
+	public final StoredType implementsType;
24 23
 	
25
-	public ImplementationMemberRef(ImplementationMember member, StoredType owner, TypeID implementsType) {
24
+	public ImplementationMemberRef(ImplementationMember member, StoredType owner, StoredType implementsType) {
26 25
 		this.member = member;
27 26
 		this.type = owner;
28 27
 		this.implementsType = implementsType;

+ 3
- 3
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMemberBuilder.java Parādīt failu

@@ -251,7 +251,7 @@ public class TypeMemberBuilder implements TypeVisitorWithContext<Void, Void, Run
251 251
 			members.addConstructor(new ConstructorMember(
252 252
 					BUILTIN,
253 253
 					definition,
254
-					0,
254
+					Modifiers.PUBLIC,
255 255
 					new FunctionHeader(VOID.stored, indexGetParameters),
256 256
 					ARRAY_CONSTRUCTOR_SIZED).ref(type));
257 257
 		}
@@ -264,7 +264,7 @@ public class TypeMemberBuilder implements TypeVisitorWithContext<Void, Void, Run
264 264
 		new ConstructorMember(
265 265
 				BUILTIN,
266 266
 				definition,
267
-				0,
267
+				Modifiers.PUBLIC,
268 268
 				initialValueConstructorHeader,
269 269
 				ARRAY_CONSTRUCTOR_INITIAL_VALUE)
270 270
 				.registerTo(members, TypeMemberPriority.SPECIFIED, null);
@@ -279,7 +279,7 @@ public class TypeMemberBuilder implements TypeVisitorWithContext<Void, Void, Run
279 279
 		members.addConstructor(new ConstructorMember(
280 280
 				BUILTIN,
281 281
 				definition,
282
-				0,
282
+				Modifiers.PUBLIC,
283 283
 				lambdaConstructorHeader,
284 284
 				ARRAY_CONSTRUCTOR_LAMBDA).ref(type));
285 285
 		

+ 4
- 4
CodeModel/src/main/java/org/openzen/zenscript/codemodel/type/member/TypeMembers.java Parādīt failu

@@ -94,9 +94,9 @@ public final class TypeMembers {
94 94
 		}
95 95
 		
96 96
 		for (TypeMember<ImplementationMemberRef> implementation : implementations) {
97
-			if (implementation.member.implementsType.equals(other)) // TODO: for some reason duplicate types are generated
97
+			if (implementation.member.implementsType.type == other)
98 98
 				return true;
99
-			if (cache.get(implementation.member.implementsType.stored(type.getActualStorage())).extendsOrImplements(other))
99
+			if (cache.get(implementation.member.implementsType).extendsOrImplements(other))
100 100
 				return true;
101 101
 		}
102 102
 		
@@ -487,8 +487,8 @@ public final class TypeMembers {
487 487
 				return castEquivalent(position, caster.member.cast(position, value, implicit), toType);
488 488
 		}
489 489
 		for (TypeMember<ImplementationMemberRef> implementation : implementations) {
490
-			if (implementation.member.implementsType.getNormalized() == toType.type)
491
-				return castEquivalent(position, new InterfaceCastExpression(position, value, toType.type.stored(type.getActualStorage())), toType);
490
+			if (implementation.member.implementsType.type.getNormalized() == toType.type)
491
+				return castEquivalent(position, new InterfaceCastExpression(position, value, implementation.member), toType);
492 492
 		}
493 493
 		if (extendsType(toType.type))
494 494
 			return new SupertypeCastExpression(position, value, toType);

+ 3
- 4
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/definitions/JavaMemberVisitor.java Parādīt failu

@@ -1,6 +1,5 @@
1 1
 package org.openzen.zenscript.javabytecode.compiler.definitions;
2 2
 
3
-import org.openzen.zenscript.javashared.JavaTypeGenericVisitor;
4 3
 import org.objectweb.asm.ClassWriter;
5 4
 import org.objectweb.asm.Label;
6 5
 import org.objectweb.asm.Opcodes;
@@ -43,14 +42,14 @@ public class JavaMemberVisitor implements MemberVisitor<Void> {
43 42
 	@Override
44 43
 	public Void visitConst(ConstMember member) {
45 44
 		JavaField field = member.getTag(JavaField.class);
46
-        writer.visitField(CompilerUtils.calcAccess(member.modifiers), field.name, field.descriptor, field.signature, null).visitEnd();
45
+        writer.visitField(CompilerUtils.calcAccess(member.getEffectiveModifiers()), field.name, field.descriptor, field.signature, null).visitEnd();
47 46
         return null;
48 47
 	}
49 48
 
50 49
 	@Override
51 50
 	public Void visitField(FieldMember member) {
52 51
 		JavaField field = member.getTag(JavaField.class);
53
-        writer.visitField(CompilerUtils.calcAccess(member.modifiers), field.name, field.descriptor, field.signature, null).visitEnd();
52
+        writer.visitField(CompilerUtils.calcAccess(member.getEffectiveModifiers()), field.name, field.descriptor, field.signature, null).visitEnd();
54 53
         return null;
55 54
     }
56 55
 
@@ -120,7 +119,7 @@ public class JavaMemberVisitor implements MemberVisitor<Void> {
120 119
     public Void visitMethod(MethodMember member) {
121 120
         CompilerUtils.tagMethodParameters(context, member.header, member.isStatic());
122 121
 
123
-        final boolean isAbstract = member.body == null || Modifiers.isAbstract(member.modifiers);
122
+        final boolean isAbstract = member.body == null || Modifiers.isAbstract(member.getEffectiveModifiers());
124 123
         final JavaMethod method = member.getTag(JavaMethod.class);
125 124
 
126 125
 		final Label methodStart = new Label();

+ 2
- 2
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareClassMethodVisitor.java Parādīt failu

@@ -303,7 +303,7 @@ public class JavaPrepareClassMethodVisitor implements MemberVisitor<Void> {
303 303
 					baseMethod.name,
304 304
 					true,
305 305
 					context.getMethodDescriptor(header),
306
-					JavaModifiers.getJavaModifiers(member.modifiers),
306
+					JavaModifiers.getJavaModifiers(member.getEffectiveModifiers()),
307 307
 					header.getReturnType().type instanceof GenericTypeID);
308 308
 		} else if (method == null) {
309 309
 			method = new JavaMethod(
@@ -312,7 +312,7 @@ public class JavaPrepareClassMethodVisitor implements MemberVisitor<Void> {
312 312
 					name,
313 313
 					true,
314 314
 					context.getMethodDescriptor(header),
315
-					JavaModifiers.getJavaModifiers(member.modifiers),
315
+					JavaModifiers.getJavaModifiers(member.getEffectiveModifiers()),
316 316
 					header.getReturnType().type instanceof GenericTypeID);
317 317
 		}
318 318
 		

+ 1
- 1
JavaShared/src/main/java/org/openzen/zenscript/javashared/prepare/JavaPrepareExpansionMethodVisitor.java Parādīt failu

@@ -161,7 +161,7 @@ public class JavaPrepareExpansionMethodVisitor implements MemberVisitor<Void> {
161 161
 		if (nativeTag != null && nativeClass != null)
162 162
 			method = nativeClass.getMethod(nativeTag.value);
163 163
 		if (method == null)
164
-			method = new JavaMethod(cls, getKind(member), name, true, context.getMethodDescriptor(header), JavaModifiers.getJavaModifiers(member.modifiers), header.getReturnType().type instanceof GenericTypeID); 
164
+			method = new JavaMethod(cls, getKind(member), name, true, context.getMethodDescriptor(header), JavaModifiers.getJavaModifiers(member.getEffectiveModifiers()), header.getReturnType().type instanceof GenericTypeID); 
165 165
 		
166 166
 		if (method.compile) {
167 167
 			if (DEBUG_EMPTY && cls.empty)

+ 2
- 2
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaExpansionMemberCompiler.java Parādīt failu

@@ -66,7 +66,7 @@ public class JavaExpansionMemberCompiler extends BaseMemberCompiler {
66 66
 		begin(ElementType.METHOD);
67 67
 		output.append(indent);
68 68
 		
69
-		modifiers(member.modifiers | Modifiers.STATIC);
69
+		modifiers(member.getEffectiveModifiers() | Modifiers.STATIC);
70 70
 		if (member.isStatic())
71 71
 			JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, header.typeParameters, true);
72 72
 		else
@@ -82,7 +82,7 @@ public class JavaExpansionMemberCompiler extends BaseMemberCompiler {
82 82
 	@Override
83 83
 	public Void visitConst(ConstMember member) {
84 84
 		begin(ElementType.FIELD);
85
-		modifiers(member.modifiers | Modifiers.STATIC | Modifiers.FINAL);
85
+		modifiers(member.getEffectiveModifiers() | Modifiers.STATIC | Modifiers.FINAL);
86 86
 		output.append(scope.type(member.type));
87 87
 		output.append(" ");
88 88
 		output.append(member.name);

+ 4
- 4
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaMemberCompiler.java Parādīt failu

@@ -92,7 +92,7 @@ public class JavaMemberCompiler extends BaseMemberCompiler {
92 92
 		if (isInterface && hasBody)
93 93
 			output.append("default ");
94 94
 		
95
-		modifiers(member.modifiers);
95
+		modifiers(member.getEffectiveModifiers());
96 96
 		JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, header.typeParameters, true);
97 97
 		output.append(scope.typeVisitor.process(header.getReturnType()));
98 98
 		output.append(" ");
@@ -110,7 +110,7 @@ public class JavaMemberCompiler extends BaseMemberCompiler {
110 110
 		begin(ElementType.FIELD);
111 111
 		
112 112
 		output.append(indent);
113
-		modifiers(member.modifiers | Modifiers.STATIC | Modifiers.FINAL);
113
+		modifiers(member.getEffectiveModifiers() | Modifiers.STATIC | Modifiers.FINAL);
114 114
 		output.append(scope.type(member.type));
115 115
 		output.append(" ");
116 116
 		output.append(member.name);
@@ -155,7 +155,7 @@ public class JavaMemberCompiler extends BaseMemberCompiler {
155 155
 		begin(ElementType.CONSTRUCTOR);
156 156
 		
157 157
 		output.append(indent);
158
-		modifiers(member.modifiers);
158
+		modifiers(member.getEffectiveModifiers());
159 159
 		JavaSourceUtils.formatTypeParameters(scope.typeVisitor, output, member.header.typeParameters, true);
160 160
 		output.append(scope.cls.getName());
161 161
 		formatParameters(member.isStatic(), member.header);
@@ -234,7 +234,7 @@ public class JavaMemberCompiler extends BaseMemberCompiler {
234 234
 			
235 235
 			begin(ElementType.FIELD);
236 236
 			output.append(indent);
237
-			modifiers(member.modifiers);
237
+			modifiers(member.getEffectiveModifiers());
238 238
 			output.append("final ").append(scope.type(member.type)).append(" as").append(interfaceName).append(" = new ").append(implementationName).append("();\n");
239 239
 			
240 240
 			begin(ElementType.INNERCLASS);

+ 4
- 0
JavaSourceCompiler/src/main/java/org/openzen/zenscript/javasource/JavaSourceExpressionFormatter.java Parādīt failu

@@ -462,6 +462,10 @@ public class JavaSourceExpressionFormatter implements ExpressionVisitor<Expressi
462 462
 	public ExpressionString visitGetter(GetterExpression expression) {
463 463
 		if (expression.getter.member.builtin != null)
464 464
 			return visitBuiltinGetter(expression, expression.getter.member.builtin);
465
+		if (expression.getter.member.hasTag(JavaField.class)) {
466
+			JavaField field = expression.getter.member.getTag(JavaField.class);
467
+			return expression.target.accept(this).unaryPostfix(JavaOperator.MEMBER, "." + field.name);
468
+		}
465 469
 		
466 470
 		JavaMethod method = expression.getter.getTag(JavaMethod.class);
467 471
 		StringBuilder result = new StringBuilder();

+ 1
- 1
ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/DefinitionSerializer.java Parādīt failu

@@ -84,7 +84,7 @@ public class DefinitionSerializer implements DefinitionVisitorWithContext<Module
84 84
 		for (InnerDefinitionMember innerDefinition : innerDefinitions) {
85 85
 			System.out.println("Inner definition: " + innerDefinition.definition.name);
86 86
 			output.serialize(innerDefinition.position);
87
-			output.writeUInt(innerDefinition.modifiers);
87
+			output.writeUInt(innerDefinition.getSpecifiedModifiers());
88 88
 			innerDefinition.innerDefinition.accept(moduleContext, this);
89 89
 		}
90 90
 		

+ 1
- 1
ModuleSerializer/src/main/java/org/openzen/zenscript/moduleserializer/encoder/MemberSerializer.java Parādīt failu

@@ -61,7 +61,7 @@ public class MemberSerializer implements MemberVisitorWithContext<TypeContext, V
61 61
 		if ((flags & MemberEncoding.FLAG_POSITION) > 0)
62 62
 			output.serialize(member.getPosition());
63 63
 		
64
-		output.writeUInt(member.getModifiers());
64
+		output.writeUInt(member.getSpecifiedModifiers());
65 65
 		
66 66
 		if (member.getAnnotations().length > 0) {
67 67
 			output.enqueueCode(output -> {

+ 0
- 1
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedFunctionalMember.java Parādīt failu

@@ -52,7 +52,6 @@ public abstract class ParsedFunctionalMember extends ParsedDefinitionMember {
52 52
 	protected void inferHeaders(BaseScope scope) throws CompileException {
53 53
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
54 54
 			fillOverride(scope, implementation.getCompiled().type.stored(BorrowStorageTag.THIS));
55
-			getCompiled().modifiers |= Modifiers.PUBLIC;
56 55
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
57 56
 			if (definition.getSuperType() == null)
58 57
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");

+ 0
- 1
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedGetter.java Parādīt failu

@@ -72,7 +72,6 @@ public class ParsedGetter extends ParsedDefinitionMember {
72 72
 	private void inferHeaders(BaseScope scope) throws CompileException {
73 73
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
74 74
 			fillOverride(scope, implementation.getCompiled().type.stored(BorrowStorageTag.THIS));
75
-			compiled.modifiers |= Modifiers.PUBLIC;
76 75
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
77 76
 			if (definition.getSuperType() == null)
78 77
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");

+ 0
- 1
Parser/src/main/java/org/openzen/zenscript/parser/member/ParsedSetter.java Parādīt failu

@@ -71,7 +71,6 @@ public class ParsedSetter extends ParsedDefinitionMember {
71 71
 	private void inferHeaders(BaseScope scope) throws CompileException {
72 72
 		if ((implementation != null && !Modifiers.isPrivate(modifiers))) {
73 73
 			fillOverride(scope, implementation.getCompiled().type.stored(scope.getThisType().getSpecifiedStorage()));
74
-			compiled.modifiers |= Modifiers.PUBLIC;
75 74
 		} else if (implementation == null && Modifiers.isOverride(modifiers)) {
76 75
 			if (definition.getSuperType() == null)
77 76
 				throw new CompileException(position, CompileExceptionCode.OVERRIDE_WITHOUT_BASE, "Override specified without base type");

+ 7
- 6
Validator/src/main/java/org/openzen/zenscript/validator/visitors/DefinitionMemberValidator.java Parādīt failu

@@ -77,7 +77,7 @@ public class DefinitionMemberValidator implements MemberVisitor<Void> {
77 77
 	public Void visitConst(ConstMember member) {
78 78
 		ValidationUtils.validateModifiers(
79 79
 				validator,
80
-				member.modifiers,
80
+				member.getEffectiveModifiers(),
81 81
 				Modifiers.PUBLIC | Modifiers.PROTECTED | Modifiers.PRIVATE,
82 82
 				member.position,
83 83
 				"Invalid modifier");
@@ -87,6 +87,7 @@ public class DefinitionMemberValidator implements MemberVisitor<Void> {
87 87
 					member.position,
88 88
 					"Expression type doesn't match const type");
89 89
 		}
90
+		member.value.accept(new ExpressionValidator(validator, new FieldInitializerScope(member)));
90 91
 		return null;
91 92
 	}
92 93
 	
@@ -294,7 +295,7 @@ public class DefinitionMemberValidator implements MemberVisitor<Void> {
294 295
 	}
295 296
 	
296 297
 	private void validateFunctional(FunctionalMember member, StatementScope scope) {
297
-		if (Modifiers.isOverride(member.modifiers) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
298
+		if (Modifiers.isOverride(member.getEffectiveModifiers()) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
298 299
 			if (member.getOverrides() == null) {
299 300
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
300 301
 			} else {
@@ -310,7 +311,7 @@ public class DefinitionMemberValidator implements MemberVisitor<Void> {
310 311
 	}
311 312
 	
312 313
 	private void validateGetter(GetterMember member, StatementScope scope) {
313
-		if (Modifiers.isOverride(member.modifiers) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
314
+		if (Modifiers.isOverride(member.getEffectiveModifiers()) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
314 315
 			if (member.getOverrides() == null) {
315 316
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
316 317
 			}
@@ -325,7 +326,7 @@ public class DefinitionMemberValidator implements MemberVisitor<Void> {
325 326
 	}
326 327
 	
327 328
 	private void validateSetter(SetterMember member, StatementScope scope) {
328
-		if (Modifiers.isOverride(member.modifiers) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
329
+		if (Modifiers.isOverride(member.getEffectiveModifiers()) || (context == DefinitionMemberContext.IMPLEMENTATION && !member.isPrivate())) {
329 330
 			if (member.getOverrides() == null) {
330 331
 				validator.logError(ValidationLogEntry.Code.OVERRIDE_MISSING_BASE, member.position, "Overridden method not identified");
331 332
 			}
@@ -339,9 +340,9 @@ public class DefinitionMemberValidator implements MemberVisitor<Void> {
339 340
 	}
340 341
 	
341 342
 	private class FieldInitializerScope implements ExpressionScope {
342
-		private final FieldMember field;
343
+		private final DefinitionMember field;
343 344
 		
344
-		public FieldInitializerScope(FieldMember field) {
345
+		public FieldInitializerScope(DefinitionMember field) {
345 346
 			this.field = field;
346 347
 		}
347 348
 		

+ 6
- 5
Validator/src/main/java/org/openzen/zenscript/validator/visitors/ExpressionValidator.java Parādīt failu

@@ -336,7 +336,7 @@ public class ExpressionValidator implements ExpressionVisitor<Void> {
336 336
 	@Override
337 337
 	public Void visitGetter(GetterExpression expression) {
338 338
 		checkMemberAccess(expression.position, expression.getter);
339
-		checkStatic(expression.position, expression.getter);
339
+		checkNotStatic(expression.position, expression.getter);
340 340
 		return expression.target.accept(this);
341 341
 	}
342 342
 	
@@ -725,22 +725,23 @@ public class ExpressionValidator implements ExpressionVisitor<Void> {
725 725
 	}
726 726
 	
727 727
 	private void checkMemberAccess(CodePosition position, DefinitionMemberRef member) {
728
-		if (!scope.getAccessScope().hasAccessTo(member.getTarget().getAccessScope(), member.getTarget().getModifiers()))
728
+		if (!scope.getAccessScope().hasAccessTo(member.getTarget().getAccessScope(), member.getTarget().getEffectiveModifiers())) {
729 729
 			validator.logError(ValidationLogEntry.Code.NO_ACCESS, position, "no access to " + member.describe());
730
+		}
730 731
 	}
731 732
 
732 733
 	private void checkFieldAccess(CodePosition position, FieldMemberRef field) {
733
-		if (!scope.getAccessScope().equals(field.getTarget().getAccessScope()))
734
+		if (!scope.getAccessScope().hasAccessTo(field.getTarget().getAccessScope(), Modifiers.PRIVATE))
734 735
 			validator.logError(ValidationLogEntry.Code.NO_ACCESS, position, "fields are private");
735 736
 	}
736 737
 	
737 738
 	private void checkStatic(CodePosition position, DefinitionMemberRef member) {
738
-		if (!Modifiers.isStatic(member.getTarget().getModifiers()))
739
+		if (!Modifiers.isStatic(member.getTarget().getSpecifiedModifiers()))
739 740
 			validator.logError(ValidationLogEntry.Code.MUST_BE_STATIC, position, "Member is not static");
740 741
 	}
741 742
 	
742 743
 	private void checkNotStatic(CodePosition position, DefinitionMemberRef member) {
743
-		if (Modifiers.isStatic(member.getTarget().getModifiers()))
744
+		if (Modifiers.isStatic(member.getTarget().getSpecifiedModifiers()))
744 745
 			validator.logError(ValidationLogEntry.Code.MUST_NOT_BE_STATIC, position, "Member must not be static");
745 746
 	}
746 747
 	

Notiek ielāde…
Atcelt
Saglabāt