summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorahaase2008-02-22 11:06:49 (EST)
committer ahaase2008-02-22 11:06:49 (EST)
commit8fec858243ba5681c62e92519ed32739d765a87a (patch)
tree9bdcfca789a5412bd9c242a0468796971c527b69
parenta98619d269a5f5abb75acd5ec771a4c4b5d66d73 (diff)
downloadorg.eclipse.xpand-8fec858243ba5681c62e92519ed32739d765a87a.zip
org.eclipse.xpand-8fec858243ba5681c62e92519ed32739d765a87a.tar.gz
org.eclipse.xpand-8fec858243ba5681c62e92519ed32739d765a87a.tar.bz2
merged XtendLib into the middleend plugin
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldDefinitionConverter.java6
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldExpressionConverter.java2
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXpandRegistry.java2
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXtendRegistry.java2
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/XtendBackendFacade.java4
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XpandIsDeleteLine.java114
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendCollectionOperations.java91
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendGlobalVarOperations.java27
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendIterator.java51
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibContributor.java42
-rw-r--r--plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibNames.java27
12 files changed, 362 insertions, 10 deletions
diff --git a/plugins/org.eclipse.xtend.middleend.old/META-INF/MANIFEST.MF b/plugins/org.eclipse.xtend.middleend.old/META-INF/MANIFEST.MF
index 4f1096f..6d60ffa 100644
--- a/plugins/org.eclipse.xtend.middleend.old/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.xtend.middleend.old/META-INF/MANIFEST.MF
@@ -11,6 +11,6 @@ Require-Bundle: org.eclipse.xtend.backend,
org.eclipse.xpand,
org.eclipse.xtend.typesystem.emf,
org.eclipse.emf.mwe.core,
- org.eclipse.xtend.backend.xtendlib,
org.apache.commons.logging
-Export-Package: org.eclipse.xtend.middleend.old
+Export-Package: org.eclipse.xtend.middleend.old,
+ org.eclipse.xtend.middleend.old.internal.xtendlib;x-internal:=true
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 dd22cd4..06f6dbf 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
@@ -56,12 +56,12 @@ 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;
import org.eclipse.xtend.expression.ExecutionContext;
import org.eclipse.xtend.expression.Variable;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XpandIsDeleteLine;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendIterator;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendLibNames;
import org.eclipse.xtend.typesystem.ParameterizedType;
import org.eclipse.xtend.typesystem.Type;
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldExpressionConverter.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldExpressionConverter.java
index 6e474d3..f9e3db6 100644
--- a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldExpressionConverter.java
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldExpressionConverter.java
@@ -64,9 +64,9 @@ import org.eclipse.xtend.backend.types.builtin.CollectionType;
import org.eclipse.xtend.backend.types.builtin.ObjectType;
import org.eclipse.xtend.backend.util.CollectionHelper;
import org.eclipse.xtend.backend.util.Pair;
-import org.eclipse.xtend.backend.xtendlib.XtendLibNames;
import org.eclipse.xtend.expression.ExecutionContext;
import org.eclipse.xtend.expression.Variable;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendLibNames;
import org.eclipse.xtend.typesystem.StaticProperty;
import org.eclipse.xtend.typesystem.Type;
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXpandRegistry.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXpandRegistry.java
index 3aa71d8..881cb2d 100644
--- a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXpandRegistry.java
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXpandRegistry.java
@@ -27,7 +27,7 @@ import org.eclipse.xtend.backend.common.NamedFunction;
import org.eclipse.xtend.backend.functions.FunctionDefContextFactory;
import org.eclipse.xtend.backend.functions.FunctionDefContextInternal;
import org.eclipse.xtend.backend.util.Cache;
-import org.eclipse.xtend.backend.xtendlib.XtendLibContributor;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendLibContributor;
/**
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXtendRegistry.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXtendRegistry.java
index 2593ef4..e9ad6f9 100644
--- a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXtendRegistry.java
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/OldXtendRegistry.java
@@ -27,8 +27,8 @@ import org.eclipse.xtend.backend.common.NamedFunction;
import org.eclipse.xtend.backend.functions.FunctionDefContextFactory;
import org.eclipse.xtend.backend.functions.FunctionDefContextInternal;
import org.eclipse.xtend.backend.util.Cache;
-import org.eclipse.xtend.backend.xtendlib.XtendLibContributor;
import org.eclipse.xtend.expression.ExecutionContext;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendLibContributor;
/**
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/XtendBackendFacade.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/XtendBackendFacade.java
index bddf50f..cf0d081 100644
--- a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/XtendBackendFacade.java
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/XtendBackendFacade.java
@@ -27,10 +27,10 @@ import org.eclipse.xtend.backend.common.NamedFunction;
import org.eclipse.xtend.backend.functions.FunctionDefContextFactory;
import org.eclipse.xtend.backend.functions.FunctionDefContextInternal;
import org.eclipse.xtend.backend.functions.SourceDefinedFunction;
-import org.eclipse.xtend.backend.xtendlib.XtendGlobalVarOperations;
-import org.eclipse.xtend.backend.xtendlib.XtendLibContributor;
import org.eclipse.xtend.expression.ExecutionContextImpl;
import org.eclipse.xtend.expression.Variable;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendGlobalVarOperations;
+import org.eclipse.xtend.middleend.old.internal.xtendlib.XtendLibContributor;
import org.eclipse.xtend.typesystem.MetaModel;
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XpandIsDeleteLine.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XpandIsDeleteLine.java
new file mode 100644
index 0000000..88ad30f
--- /dev/null
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XpandIsDeleteLine.java
@@ -0,0 +1,114 @@
+/*
+Copyright (c) 2008 Arno Haase.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Arno Haase - initial API and implementation
+ */
+package org.eclipse.xtend.middleend.old.internal.xtendlib;
+
+
+/**
+ * This class supports the "isDeleteLine" feature of Xpand, i.e. the "-" at the end of a statement that deletes
+ * whitespace both backward and forward.<br>
+ *
+ * Since it is non-local functionality, it requires global postprocessing. For this purpose, a marker string is inserted wherever
+ * this deletion of whitespace should be performed.<br>
+ *
+ * Since this postprocessing requires transformation of the entire contents of a file into a flat string, this feature precludes
+ * streaming. Therefore a flag is introduced to indicate if the feature was actually used. This requires resetting at the beginning
+ * of each FILE statement.
+ *
+ * @author Arno Haase (http://www.haase-consulting.com)
+ */
+public class XpandIsDeleteLine {
+ public static final String MARKER_FOR_IS_DELETE_LINE = "MARKER_FOR_XPAND_ISDELETELINE_\ufa92\u9988\u7123\u9881\u5499\u9284\u9934\ufa92\u9988\u7123\u9882\u5499\u9284\u9934_ENDMARKER";
+
+ private boolean _isInScope = false;
+ private boolean _hasDeleteLine = false;
+
+
+ public void XpandInitNewScope () {
+ if (_isInScope)
+ throw new IllegalStateException ("nested FILE statements are not permitted");
+ _isInScope = true;
+ _hasDeleteLine = false;
+ }
+
+ public void XpandRegisterDeleteLine() {
+ _hasDeleteLine = true;
+ }
+
+ public CharSequence XpandPostprocess (CharSequence s) {
+ try {
+ if (! _hasDeleteLine)
+ return s;
+
+ String result = s.toString();
+ int indMarker = result.indexOf (MARKER_FOR_IS_DELETE_LINE);
+
+ while (indMarker >= 0) {
+ // if and only if there is nothing but whitespace between the marker and the previous newline, delete this whitespace (leaving the newline alone)
+ final int startOfDelete = indBeginDelete (result, indMarker);
+
+ // delete all whitespace after the marker up to, and including, the subsequent newline - or nothing, if there is anything but whitespace between the marker and the subsequent newline
+ final int endOfDelete = indEndDelete (result, indMarker);
+
+ result = result.substring(0, startOfDelete) + result.substring (endOfDelete);
+ indMarker = result.indexOf (MARKER_FOR_IS_DELETE_LINE);
+ }
+
+ return result;
+ }
+ finally {
+ _isInScope = false;
+ _hasDeleteLine = false;
+ }
+ }
+
+ private boolean isNewLine(char c) {
+ return c == '\n' || c == '\r';
+ }
+
+ private int indEndDelete (String buffer, int indMarker) {
+ boolean wsOnly = true;
+ int result = indMarker + MARKER_FOR_IS_DELETE_LINE.length();
+
+ while (result < buffer.length() && wsOnly) {
+ final char c = buffer.charAt (result);
+ wsOnly = Character.isWhitespace(c);
+ if (wsOnly && isNewLine(c)) {
+ if (c == '\r' && result + 1 < buffer.length() && buffer.charAt (result + 1) == '\n')
+ result++;
+ return result + 1;
+ }
+
+ result++;
+ }
+
+ return indMarker + MARKER_FOR_IS_DELETE_LINE.length();
+ }
+
+ private int indBeginDelete (String buffer, int indMarker) {
+ boolean wsOnly = true;
+ int result = indMarker;
+
+ while (result > 0 && wsOnly) {
+ final char c = buffer.charAt (result - 1);
+ wsOnly = Character.isWhitespace(c);
+ if (wsOnly && isNewLine (c))
+ return result;
+
+ result--;
+ }
+
+ if (wsOnly)
+ return 0;
+ else
+ return indMarker;
+ }
+}
+
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendCollectionOperations.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendCollectionOperations.java
new file mode 100644
index 0000000..a1a328a
--- /dev/null
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendCollectionOperations.java
@@ -0,0 +1,91 @@
+/*
+Copyright (c) 2008 Arno Haase.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Arno Haase - initial API and implementation
+ */
+package org.eclipse.xtend.middleend.old.internal.xtendlib;
+
+import java.util.Collection;
+
+import org.eclipse.xtend.backend.common.EfficientLazyString;
+import org.eclipse.xtend.backend.common.Function;
+import org.eclipse.xtend.backend.functions.java.AbstractExecutionContextAware;
+import org.eclipse.xtend.backend.syslib.StringOperations;
+
+
+/**
+ *
+ * @author Arno Haase (http://www.haase-consulting.com)
+ */
+public final class XtendCollectionOperations extends AbstractExecutionContextAware {
+
+ /**
+ * invokes the function for each element of the collection, concatenating the results.
+ */
+ public CharSequence XpandForEach (Collection<?> c, Function f) {
+ return XpandForEach (c, f, null);
+ }
+
+ /**
+ * invokes the function for each element of the collection, concatenating the results and
+ * adding the separator between them.
+ */
+ public CharSequence XpandForEach (Collection<?> c, Function f, CharSequence separator) {
+ EfficientLazyString result = new EfficientLazyString ();
+
+ boolean first = true;
+
+ for (Object o: c) {
+ if (first)
+ first = false;
+ else
+ result = EfficientLazyString.createAppendedString (result, separator);
+
+ final Object part = f.invoke (_ctx, new Object[] {o});
+ if (part != null)
+ result = EfficientLazyString.createAppendedString (result, StringOperations.overridableToString (_ctx, o));
+ }
+
+ return result;
+ }
+
+ /**
+ * invokes the function for each element of the collection, concatenating the results. The function
+ * is passed an "XtendIterator" instance as a second parameter.
+ */
+ public CharSequence XpandForEachWithIterator (Collection<?> c, Function f) {
+ return XpandForEachWithIterator (c, f, null);
+ }
+
+ /**
+ * invokes the function for each element of the collection, concatenating the results and
+ * adding the separator between themn. The function is passed an "XtendIterator" instance
+ * as a second parameter.
+ */
+ public CharSequence XpandForEachWithIterator (Collection<?> c, Function f, CharSequence separator) {
+ EfficientLazyString result = new EfficientLazyString ();
+
+ boolean first = true;
+
+ final XtendIterator iter = new XtendIterator (c.size());
+ for (Object o: c) {
+ if (first)
+ first = false;
+ else
+ result = EfficientLazyString.createAppendedString (result, separator);
+
+ final Object part = f.invoke (_ctx, new Object[] {o, iter});
+ if (part != null)
+ result = EfficientLazyString.createAppendedString (result, StringOperations.overridableToString (_ctx, o));
+
+ iter.increment();
+ }
+
+ return result;
+ }
+}
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendGlobalVarOperations.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendGlobalVarOperations.java
new file mode 100644
index 0000000..53cf394
--- /dev/null
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendGlobalVarOperations.java
@@ -0,0 +1,27 @@
+package org.eclipse.xtend.middleend.old.internal.xtendlib;
+
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.xtend.backend.functions.java.AbstractExecutionContextAware;
+
+
+public class XtendGlobalVarOperations extends AbstractExecutionContextAware {
+ public static final Class<?> GLOBAL_VAR_VALUES_KEY = new Object(){}.getClass ();
+ final Log _log = LogFactory.getLog(getClass());
+
+ public Object XtendGlobalVar (String varName) {
+ @SuppressWarnings("unchecked")
+ final Map<String, Object> globalParams = (Map<String, Object>) _ctx.getContributionStateContext().retrieveState (GLOBAL_VAR_VALUES_KEY);
+ if (globalParams == null)
+ return null;
+
+ final Object result = globalParams.get (varName);
+
+ if (_log.isDebugEnabled())
+ _log.debug ("retrieving global var " + varName + ": " + result);
+
+ return result;
+ }
+}
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendIterator.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendIterator.java
new file mode 100644
index 0000000..9472b7c
--- /dev/null
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendIterator.java
@@ -0,0 +1,51 @@
+/*
+Copyright (c) 2008 Arno Haase.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Arno Haase - initial API and implementation
+ */
+package org.eclipse.xtend.middleend.old.internal.xtendlib;
+
+
+/**
+ *
+ * @author Arno Haase (http://www.haase-consulting.com)
+ */
+public final class XtendIterator {
+ private long _counter = 0L;
+ private final long _elementCount;
+
+
+ public XtendIterator (long elementCount) {
+ _elementCount = elementCount;
+ }
+
+ public void increment() {
+ _counter++;
+ }
+
+ public boolean isLastIteration() {
+ return _counter + 1 == _elementCount;
+ }
+
+ public boolean isFirstIteration() {
+ return _counter == 0;
+ }
+
+ public long getCounter0() {
+ return _counter;
+ }
+
+ public long getCounter1() {
+ return _counter+1;
+ }
+
+ public long getElementCount() {
+ return _elementCount;
+ }
+}
+
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibContributor.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibContributor.java
new file mode 100644
index 0000000..a5a7ad8
--- /dev/null
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibContributor.java
@@ -0,0 +1,42 @@
+/*
+Copyright (c) 2008 Arno Haase.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Arno Haase - initial API and implementation
+ */
+package org.eclipse.xtend.middleend.old.internal.xtendlib;
+
+import java.util.Collection;
+
+import org.eclipse.xtend.backend.common.BackendTypesystem;
+import org.eclipse.xtend.backend.common.NamedFunction;
+import org.eclipse.xtend.backend.functions.DuplicateAwareNamedFunctionCollection;
+import org.eclipse.xtend.backend.functions.java.JavaFunctionClassContributor;
+
+
+/**
+ *
+ * @author Arno Haase (http://www.haase-consulting.com)
+ */
+public class XtendLibContributor {
+ private final DuplicateAwareNamedFunctionCollection _functions = new DuplicateAwareNamedFunctionCollection ();
+
+ public XtendLibContributor (BackendTypesystem ts) {
+ registerExtensionClass (ts, XtendCollectionOperations.class);
+ registerExtensionClass (ts, XpandIsDeleteLine.class);
+ registerExtensionClass (ts, XtendGlobalVarOperations.class);
+ }
+
+ private void registerExtensionClass (BackendTypesystem ts, Class<?> cls) {
+ for (NamedFunction f: new JavaFunctionClassContributor (cls, ts).getContributedFunctions())
+ _functions.register (f);
+ }
+
+ public Collection<NamedFunction> getContributedFunctions () {
+ return _functions.getFunctions();
+ }
+}
diff --git a/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibNames.java b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibNames.java
new file mode 100644
index 0000000..3e29cac
--- /dev/null
+++ b/plugins/org.eclipse.xtend.middleend.old/src/org/eclipse/xtend/middleend/old/internal/xtendlib/XtendLibNames.java
@@ -0,0 +1,27 @@
+/*
+Copyright (c) 2008 Arno Haase.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ Arno Haase - initial API and implementation
+ */
+package org.eclipse.xtend.middleend.old.internal.xtendlib;
+
+
+/**
+ *
+ * @author Arno Haase (http://www.haase-consulting.com)
+ */
+public interface XtendLibNames {
+ String FOREACH_WITHOUT_ITERATOR = "XpandForEach";
+ String FOREACH_WITH_ITERATOR = "XpandForEachWithIterator";
+
+ String DELETE_LINE_INIT = "XpandInitNewScope";
+ String DELETE_LINE_REGISTER = "XpandRegisterDeleteLine";
+ String DELETE_LINE_POSTPROCESS = "XpandPostprocess";
+
+ String GLOBAL_VAR_VALUE = "XtendGlobalVar";
+}