diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-13 14:42:05 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-13 14:42:05 +0000 |
| commit | 6551d6b638bd4922fb1bd293f02474a48a6d92d9 (patch) | |
| tree | 20fff522daf40ee6d0eab4a9befe3248118f1820 /src/main/java | |
| parent | 2d24979f47af2027de780fc956fa37829edafe40 (diff) | |
Read instance field initializers
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java | 6 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 12 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java b/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java index 048ce73..381c521 100644 --- a/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java +++ b/src/main/java/org/zwobble/couscous/ast/sugar/TypeDeclarationBody.java @@ -6,6 +6,8 @@ import org.zwobble.couscous.util.ExtraLists; import java.util.List; +import static org.zwobble.couscous.util.ExtraLists.list; + public class TypeDeclarationBody { public static Builder builder() { return new Builder(); @@ -29,8 +31,8 @@ public class TypeDeclarationBody { (isStatic ? staticConstructor : instanceInitializers).addAll(statements); } - public void addInitializer(StatementNode statement) { - staticConstructor.add(statement); + public void addInitializer(boolean isStatic, StatementNode statement) { + addInitializer(isStatic, list(statement)); } public void constructor(ConstructorNode constructor) { diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 483ea24..c85b4fb 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -28,6 +28,8 @@ import static org.zwobble.couscous.ast.AssignmentNode.assignStatement; import static org.zwobble.couscous.ast.ConstructorNode.constructor; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FieldDeclarationNode.field; +import static org.zwobble.couscous.ast.InstanceReceiver.instanceReceiver; +import static org.zwobble.couscous.ast.StaticReceiver.staticReceiver; import static org.zwobble.couscous.ast.ThisReferenceNode.thisReference; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.frontends.java.FreeVariables.findFreeVariables; @@ -239,7 +241,6 @@ public class JavaReader { .ifPresent(method -> readMethod(body, scope, method)); Casts.tryCast(Initializer.class, declaration) - // TODO: handle instance initializer .ifPresent(initializer -> body.addInitializer( Modifier.isStatic(initializer.getModifiers()), readStatement(scope, initializer.getBody()))); @@ -256,11 +257,16 @@ public class JavaReader { TypeName type = typeOf(field.getType()); fragments.forEach(fragment -> { builder.field(field(Modifier.isStatic(field.getModifiers()), fragment.getName().getIdentifier(), type)); - // TODO: handle instance initializer if (fragment.getInitializer() != null) { ExpressionNode value = readExpression(scope, type, fragment.getInitializer()); String name = fragment.getName().getIdentifier(); - builder.addInitializer(assignStatement(fieldAccess(declaringType, name, type), value)); + boolean isStatic = Modifier.isStatic(field.getModifiers()); + Receiver receiver = isStatic + ? staticReceiver(declaringType) + : instanceReceiver(thisReference(declaringType)); + + StatementNode assignment = assignStatement(fieldAccess(receiver, name, type), value); + builder.addInitializer(isStatic,assignment); } }); |
