Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java')
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java38
1 files changed, 26 insertions, 12 deletions
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java
index 2e5defb9..c48c0924 100644
--- a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java
@@ -12,6 +12,7 @@ package org.eclipse.xtend.middleend.old;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -48,12 +49,14 @@ import org.eclipse.xtend.backend.expr.InvocationOnObjectExpression;
import org.eclipse.xtend.backend.expr.LiteralExpression;
import org.eclipse.xtend.backend.expr.LocalVarEvalExpression;
import org.eclipse.xtend.backend.expr.NewLocalVarDefExpression;
+import org.eclipse.xtend.backend.expr.SequenceExpression;
import org.eclipse.xtend.backend.functions.FunctionDefContextImpl;
import org.eclipse.xtend.backend.functions.SourceDefinedFunction;
import org.eclipse.xtend.backend.syslib.FileIoOperations;
import org.eclipse.xtend.backend.syslib.SysLibNames;
import org.eclipse.xtend.backend.types.builtin.ObjectType;
import org.eclipse.xtend.backend.util.SyntaxConstants;
+import org.eclipse.xtend.backend.xtendlib.XpandIsDeleteLine;
import org.eclipse.xtend.backend.xtendlib.XtendIterator;
import org.eclipse.xtend.backend.xtendlib.XtendLibNames;
import org.eclipse.xtend.expression.AnalysationIssue;
@@ -122,21 +125,22 @@ final class OldDefinitionConverter {
paramTypes.add (_typeConverter.convertToBackendType (pt));
}
- return new SourceDefinedFunction (def.getName(), paramNames, paramTypes, fdc, convertStatmentSequence (def.getBody(), def, referencedDefinitions), false, null);
+ return new SourceDefinedFunction (def.getName(), paramNames, paramTypes, fdc, convertStatementSequence (def.getBody(), def, referencedDefinitions), false, null);
}
finally {
_ctx = oldCtx;
}
}
-
- private ExpressionBase convertStatmentSequence (Statement[] statements, SyntaxElement oldPos, Set<XpandDefinitionName> referencedDefinitions) {
+
+ private ExpressionBase convertStatementSequence (Statement[] statements, SyntaxElement oldPos, Set<XpandDefinitionName> referencedDefinitions) {
final List<ExpressionBase> parts = new ArrayList<ExpressionBase> ();
-
+
for (Statement stmt: statements)
parts.add (convertStatement (stmt, referencedDefinitions));
-
+
return new ConcatExpression (parts, getSourcePos(oldPos));
}
+
private ExpressionBase convertStatement (Statement stmt, Set<XpandDefinitionName> referencedDefinitions) {
if (stmt instanceof ErrorStatement)
@@ -245,7 +249,7 @@ final class OldDefinitionConverter {
// forEach without an iterator
_ctx = (XpandExecutionContext) _ctx.cloneWithVariable (new Variable (varName, eleType));
try {
- body = convertStatmentSequence (stmt.getBody(), stmt, referencedDefinitions);
+ body = convertStatementSequence (stmt.getBody(), stmt, referencedDefinitions);
}
finally {
_ctx = oldContext;
@@ -262,7 +266,7 @@ final class OldDefinitionConverter {
_ctx = (XpandExecutionContext) _ctx.cloneWithVariable (new Variable (varName, eleType));
_ctx = (XpandExecutionContext) _ctx.cloneWithVariable (new Variable (stmt.getIteratorName().getValue(), _ctx.getTypeForName (IteratorType.TYPE_NAME)));
try {
- body = convertStatmentSequence (stmt.getBody(), stmt, referencedDefinitions);
+ body = convertStatementSequence (stmt.getBody(), stmt, referencedDefinitions);
}
finally {
_ctx = oldContext;
@@ -290,7 +294,7 @@ final class OldDefinitionConverter {
}
else {
// the else part is an IfStatement with null condition
- return convertStatmentSequence (stmt.getBody(), stmt, referencedDefinitions);
+ return convertStatementSequence (stmt.getBody(), stmt, referencedDefinitions);
}
}
@@ -304,7 +308,7 @@ final class OldDefinitionConverter {
try {
final ExpressionBase def = convertExpression (stmt.getVarValue());
- final ExpressionBase body = convertStatmentSequence (stmt.getBody(), stmt, referencedDefinitions);
+ final ExpressionBase body = convertStatementSequence (stmt.getBody(), stmt, referencedDefinitions);
if (oldContext.getVisibleVariables().containsKey (varName))
return new HidingLocalVarDefExpression (varName, def, body, getSourcePos (stmt));
@@ -317,7 +321,7 @@ final class OldDefinitionConverter {
}
private ExpressionBase convertFileStatement (FileStatement stmt, Set<XpandDefinitionName> referencedDefinitions) {
- final ExpressionBase body = convertStatmentSequence (stmt.getBody(), stmt, referencedDefinitions);
+ final ExpressionBase body = convertStatementSequence (stmt.getBody(), stmt, referencedDefinitions);
final ExpressionBase filename = convertExpression (stmt.getTargetFileName());
final Outlet outlet = _ctx.getOutput().getOutlet (stmt.getOutletName());
@@ -340,8 +344,18 @@ final class OldDefinitionConverter {
}
private ExpressionBase convertTextStatement (TextStatement stmt) {
- //TODO isDeleteLine
- return new LiteralExpression (stmt.getValue(), getSourcePos(stmt));
+ if (stmt.isDeleteLine()) {
+ final List<ExpressionBase> emptyParamList = Collections.emptyList();
+ final ExpressionBase registerExpression = new InvocationOnObjectExpression (XtendLibNames.DELETE_LINE_REGISTER, emptyParamList, getSourcePos(stmt));
+
+ final ExpressionBase markerExpression = new LiteralExpression (XpandIsDeleteLine.MARKER_FOR_IS_DELETE_LINE, getSourcePos(stmt));
+ final ExpressionBase contentExpression = new LiteralExpression (stmt.getValue(), getSourcePos (stmt));
+ final ExpressionBase concatExpression = new ConcatExpression (Arrays.asList(markerExpression, contentExpression), getSourcePos (stmt));
+
+ return new SequenceExpression (Arrays.asList(registerExpression, concatExpression), getSourcePos (stmt));
+ }
+ else
+ return new LiteralExpression (stmt.getValue(), getSourcePos(stmt));
}

Back to the top