aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java17
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java1
4 files changed, 18 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
index 23e3aaa..b28d823 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
@@ -69,7 +69,7 @@ public class FieldAccessNode implements AssignableExpressionNode {
public ExpressionNode transform(NodeTransformer transformer) {
return new FieldAccessNode(
transformer.transformReceiver(left),
- fieldName,
+ transformer.transformFieldName(fieldName),
transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
index 515045f..67f79c9 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldDeclarationNode.java
@@ -47,7 +47,7 @@ public class FieldDeclarationNode implements Node {
public FieldDeclarationNode transform(NodeTransformer transformer) {
return new FieldDeclarationNode(
isStatic,
- name,
+ transformer.transformFieldName(name),
transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
index 73d0919..f52bedc 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
@@ -176,6 +176,7 @@ public class NodeTransformer {
private Function<ExpressionNode, Optional<ExpressionNode>> transformExpression = expression -> Optional.empty();
private Function<Type, Type> transformType = type -> type;
private Function<MethodSignature, String> transformMethodName = MethodSignature::getName;
+ private Function<String, String> transformFieldName = name -> name;
public Builder transformExpression(
Function<ExpressionNode, Optional<ExpressionNode>> transformExpression)
@@ -196,23 +197,31 @@ public class NodeTransformer {
return this;
}
+ public Builder transformFieldName(Function<String, String> transformFieldName) {
+ this.transformFieldName = transformFieldName;
+ return this;
+ }
+
public NodeTransformer build() {
- return new NodeTransformer(transformExpression, transformType, transformMethodName);
+ return new NodeTransformer(transformExpression, transformType, transformMethodName, transformFieldName);
}
}
private final Function<ExpressionNode, Optional<ExpressionNode>> transformExpression;
private final Function<Type, Type> transformType;
private final Function<MethodSignature, String> transformMethodName;
+ private final Function<String, String> transformFieldName;
private NodeTransformer(
Function<ExpressionNode, Optional<ExpressionNode>> transformExpression,
Function<Type, Type> transformType,
- Function<MethodSignature, String> transformMethodName)
+ Function<MethodSignature, String> transformMethodName,
+ Function<String, String> transformFieldName)
{
this.transformExpression = transformExpression;
this.transformType = transformType;
this.transformMethodName = transformMethodName;
+ this.transformFieldName = transformFieldName;
}
public MethodSignature transform(MethodSignature signature) {
@@ -239,6 +248,10 @@ public class NodeTransformer {
return transformMethodName.apply(signature);
}
+ public String transformFieldName(String name) {
+ return transformFieldName.apply(name);
+ }
+
public ExpressionNode transformExpression(ExpressionNode expression) {
return transformExpression.apply(expression)
.orElseGet(() -> expression.transform(this));
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
index 00de205..cc6daef 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
@@ -40,6 +40,7 @@ public class CsharpCodeGenerator {
.transformType(this::transformType)
.transformExpression(this::transformExpression)
.transformMethodName(naming::methodName)
+ .transformFieldName(name -> "_" + name)
.build();
}