11package org .openzen .zenscript .codemodel .member ;
22
33import org .openzen .zencode .shared .CodePosition ;
4- import org .openzen .zenscript .codemodel .FunctionHeader ;
5- import org .openzen .zenscript .codemodel .GenericMapper ;
6- import org .openzen .zenscript .codemodel .HighLevelDefinition ;
7- import org .openzen .zenscript .codemodel .Modifiers ;
4+ import org .openzen .zenscript .codemodel .*;
85import org .openzen .zenscript .codemodel .constant .CompileTimeConstant ;
96import org .openzen .zenscript .codemodel .expression .*;
107import org .openzen .zenscript .codemodel .identifiers .FieldSymbol ;
118import org .openzen .zenscript .codemodel .identifiers .TypeSymbol ;
129import org .openzen .zenscript .codemodel .identifiers .instances .FieldInstance ;
1310import org .openzen .zenscript .codemodel .statement .ExpressionStatement ;
1411import org .openzen .zenscript .codemodel .statement .ReturnStatement ;
12+ import org .openzen .zenscript .codemodel .statement .Statement ;
1513import org .openzen .zenscript .codemodel .type .GenericTypeID ;
1614import org .openzen .zenscript .codemodel .type .TypeID ;
1715import org .openzen .zenscript .codemodel .type .member .MemberSet ;
@@ -25,6 +23,7 @@ public class FieldMember extends PropertyMember implements FieldSymbol {
2523 public final GetterMember autoGetter ;
2624 public final SetterMember autoSetter ;
2725 public Expression initializer ;
26+ private final TypeID thisType ;
2827
2928 public FieldMember (
3029 CodePosition position ,
@@ -40,6 +39,7 @@ public FieldMember(
4039 this .name = name ;
4140 this .autoGetterAccess = autoGetterAccess ;
4241 this .autoSetterAccess = autoSetterAccess ;
42+ this .thisType = thisType ;
4343
4444 // ToDo: This is never used?
4545 TypeID [] parameters = null ;
@@ -57,30 +57,37 @@ public FieldMember(
5757 private SetterMember constructAutoSetter (TypeID thisType , FieldInstance fieldInstance ) {
5858 Modifiers autoSetterModifiers = isStatic () ? autoSetterAccess .withStatic () : autoSetterAccess ;
5959 final SetterMember autoSetter = new SetterMember (position , definition , autoSetterModifiers , name , type );
60- final GetFunctionParameterExpression setValue = new GetFunctionParameterExpression (position , autoSetter .parameter );
60+ autoSetter .setBody (constructAutoSetterBody (thisType , fieldInstance , autoSetter .parameter ));
61+ return autoSetter ;
62+ }
63+
64+ private Statement constructAutoSetterBody (TypeID thisType , FieldInstance fieldInstance , FunctionParameter parameter ) {
65+ final GetFunctionParameterExpression setValue = new GetFunctionParameterExpression (position , parameter );
6166 final Expression setFieldExpression ;
6267 if (isStatic ()) {
6368 setFieldExpression = new SetStaticFieldExpression (position , fieldInstance , setValue );
6469 } else {
6570 setFieldExpression = new SetFieldExpression (position , new ThisExpression (position , thisType ), fieldInstance , setValue );
6671 }
67- autoSetter .setBody (new ExpressionStatement (position , setFieldExpression ));
68- return autoSetter ;
72+ return new ExpressionStatement (position , setFieldExpression );
6973 }
7074
7175 private GetterMember constructAutoGetter (TypeID thisType , FieldInstance fieldInstance ) {
7276 Modifiers autoGetterModifiers = isStatic () ? autoGetterAccess .withStatic () : autoGetterAccess ;
7377 final GetterMember autoGetter = new GetterMember (position , definition , autoGetterModifiers , name , type );
78+ autoGetter .setBody (constructAutoGetterBody (thisType , fieldInstance ));
79+ return autoGetter ;
80+ }
7481
82+ private Statement constructAutoGetterBody (TypeID thisType , FieldInstance fieldInstance ) {
7583 final Expression getFieldExpression ;
7684 if (isStatic ()) {
7785 getFieldExpression = new GetStaticFieldExpression (position , fieldInstance );
7886 } else {
7987 getFieldExpression = new GetFieldExpression (position , new ThisExpression (position , thisType ), fieldInstance );
8088 }
8189
82- autoGetter .setBody (new ReturnStatement (position , getFieldExpression ));
83- return autoGetter ;
90+ return new ReturnStatement (position , getFieldExpression );
8491 }
8592
8693 public boolean hasAutoGetter () {
@@ -156,10 +163,15 @@ public TypeID getType() {
156163 public void setType (TypeID type ) {
157164 super .setType (type );
158165
159- if (autoGetter != null )
166+ final FieldInstance fieldInstance = new FieldInstance (this , type );
167+ if (autoGetter != null ) {
160168 this .autoGetter .setType (type );
161- if (autoSetter != null )
169+ this .autoGetter .setBody (constructAutoGetterBody (thisType , fieldInstance ));
170+ }
171+ if (autoSetter != null ) {
162172 this .autoSetter .setType (type );
173+ this .autoSetter .setBody (constructAutoSetterBody (thisType , fieldInstance , autoSetter .parameter ));
174+ }
163175 }
164176
165177 @ Override
0 commit comments