From caa7e3a069fa0dfe81834d48850384c38594dd3a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 26 Apr 2016 20:54:03 +0100 Subject: Remove C# runtime from main, use for tests only --- .../couscous/backends/csharp/CsharpBackend.java | 31 ++----------- .../resources/csharp/runtime/java/lang/Integer.cs | 14 ------ .../resources/csharp/runtime/java/lang/Iterable.cs | 6 --- .../resources/csharp/runtime/java/lang/Object.cs | 11 ----- .../resources/csharp/runtime/java/util/Arrays.cs | 37 --------------- .../resources/csharp/runtime/java/util/Iterator.cs | 7 --- .../tests/backends/csharp/CsharpMethodRunner.java | 3 +- .../tests/backends/csharp/CsharpTestBackend.java | 52 ++++++++++++++++++++++ .../tests/backends/csharp/JavaToCsharpTests.java | 3 +- .../backends/csharp/runtime/java/lang/Integer.cs | 14 ++++++ .../backends/csharp/runtime/java/lang/Iterable.cs | 6 +++ .../backends/csharp/runtime/java/lang/Object.cs | 11 +++++ .../backends/csharp/runtime/java/util/Arrays.cs | 37 +++++++++++++++ .../backends/csharp/runtime/java/util/Iterator.cs | 7 +++ 14 files changed, 132 insertions(+), 107 deletions(-) delete mode 100644 src/main/resources/csharp/runtime/java/lang/Integer.cs delete mode 100644 src/main/resources/csharp/runtime/java/lang/Iterable.cs delete mode 100644 src/main/resources/csharp/runtime/java/lang/Object.cs delete mode 100644 src/main/resources/csharp/runtime/java/util/Arrays.cs delete mode 100644 src/main/resources/csharp/runtime/java/util/Iterator.cs create mode 100644 src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java create mode 100644 src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Integer.cs create mode 100644 src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Iterable.cs create mode 100644 src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Object.cs create mode 100644 src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Arrays.cs create mode 100644 src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Iterator.cs (limited to 'src') diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java index bccbe98..a086fe2 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java @@ -1,13 +1,9 @@ package org.zwobble.couscous.backends.csharp; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import com.google.common.io.Resources; import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.TypeNode; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -15,14 +11,6 @@ import java.util.List; import static com.google.common.collect.Iterables.transform; public class CsharpBackend implements Backend { - private static final List RUNTIME_FILES = ImmutableList.of( - "java/lang/Integer.cs", - "java/lang/Object.cs", - "java/util/Arrays.cs", - // TODO: implement Iterable/Iterator in Java - "java/lang/Iterable.cs", - "java/util/Iterator.cs"); - private final Path outputFilePath; private final String namespace; @@ -36,22 +24,9 @@ public class CsharpBackend implements Backend { outputFilePath.getParent().toFile().mkdirs(); Files.write( outputFilePath, - Iterables.concat( - transform( - classes, - classNode -> compileClass(classNode)), - transform( - RUNTIME_FILES, - runtimeFile -> readRuntimeFile(runtimeFile)))); - } - - private String readRuntimeFile(String runtimeFile) { - try { - return Resources.toString(Resources.getResource("csharp/runtime/" + runtimeFile), StandardCharsets.UTF_8) - .replace("namespace Couscous", "namespace " + namespace); - } catch (IOException exception) { - throw new RuntimeException(exception); - } + transform( + classes, + classNode -> compileClass(classNode))); } private String compileClass(TypeNode classNode) { diff --git a/src/main/resources/csharp/runtime/java/lang/Integer.cs b/src/main/resources/csharp/runtime/java/lang/Integer.cs deleted file mode 100644 index 6ed87db..0000000 --- a/src/main/resources/csharp/runtime/java/lang/Integer.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Couscous.java.lang { - internal class Integer : Object { - private readonly int _value; - - internal Integer(int value) { - _value = value; - } - - internal override bool equals(Object other) { - var integer = other as Integer; - return integer != null && integer._value == _value; - } - } -} diff --git a/src/main/resources/csharp/runtime/java/lang/Iterable.cs b/src/main/resources/csharp/runtime/java/lang/Iterable.cs deleted file mode 100644 index 314dbce..0000000 --- a/src/main/resources/csharp/runtime/java/lang/Iterable.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Couscous.java.lang { - // TODO: implement in Java - internal interface Iterable { - java.util.Iterator iterator(); - } -} diff --git a/src/main/resources/csharp/runtime/java/lang/Object.cs b/src/main/resources/csharp/runtime/java/lang/Object.cs deleted file mode 100644 index 14a8f44..0000000 --- a/src/main/resources/csharp/runtime/java/lang/Object.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Couscous.java.lang { - internal class Object { - internal virtual bool equals(Object other) { - return System.Object.ReferenceEquals(this, other); - } - - public static implicit operator Object(int value) { - return new Integer(value); - } - } -} diff --git a/src/main/resources/csharp/runtime/java/util/Arrays.cs b/src/main/resources/csharp/runtime/java/util/Arrays.cs deleted file mode 100644 index 96b31d4..0000000 --- a/src/main/resources/csharp/runtime/java/util/Arrays.cs +++ /dev/null @@ -1,37 +0,0 @@ -namespace Couscous.java.util { - internal static class Arrays { - internal static java.lang.Iterable asList(T[] values) { - return new _ArrayList(values); - } - } - - internal class _ArrayList : java.lang.Iterable { - private readonly T[] values; - - internal _ArrayList(T[] values) { - this.values = values; - } - - public java.util.Iterator iterator() { - return new _ArrayIterator(values); - } - } - - internal class _ArrayIterator : java.util.Iterator { - private readonly T[] values; - private int nextIndex; - - internal _ArrayIterator(T[] values) { - this.values = values; - this.nextIndex = 0; - } - - public bool hasNext() { - return nextIndex < values.Length; - } - - public T next() { - return values[nextIndex++]; - } - } -} diff --git a/src/main/resources/csharp/runtime/java/util/Iterator.cs b/src/main/resources/csharp/runtime/java/util/Iterator.cs deleted file mode 100644 index 9c0098a..0000000 --- a/src/main/resources/csharp/runtime/java/util/Iterator.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Couscous.java.util { - // TODO: implement in Java - internal interface Iterator { - bool hasNext(); - T next(); - } -} diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java index b9249aa..06e7987 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java @@ -7,7 +7,6 @@ import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.ast.TypeNode; -import org.zwobble.couscous.backends.csharp.CsharpBackend; import org.zwobble.couscous.backends.csharp.CsharpCodeGenerator; import org.zwobble.couscous.backends.csharp.CsharpSerializer; import org.zwobble.couscous.tests.MethodRunner; @@ -39,7 +38,7 @@ public class CsharpMethodRunner implements MethodRunner { public PrimitiveValue runMethod(List classNodes, ScalarType className, String methodName, List arguments, Type returnType) { try { Path directoryPath = Files.createTempDirectory(null); - Backend compiler = new CsharpBackend(directoryPath.resolve("Program.cs"), NAMESPACE); + Backend compiler = new CsharpTestBackend(directoryPath, NAMESPACE); try { compiler.compile(classNodes); return runFunction(directoryPath, className, methodName, arguments, returnType); diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java new file mode 100644 index 0000000..fcf7ab5 --- /dev/null +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpTestBackend.java @@ -0,0 +1,52 @@ +package org.zwobble.couscous.tests.backends.csharp; + +import com.google.common.collect.ImmutableList; +import com.google.common.io.Resources; +import org.zwobble.couscous.Backend; +import org.zwobble.couscous.ast.TypeNode; +import org.zwobble.couscous.backends.csharp.CsharpBackend; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import static com.google.common.collect.Iterables.transform; + +public class CsharpTestBackend implements Backend { + private static final List RUNTIME_FILES = ImmutableList.of( + "java/lang/Integer.cs", + "java/lang/Object.cs", + "java/util/Arrays.cs", + // TODO: implement Iterable/Iterator in Java + "java/lang/Iterable.cs", + "java/util/Iterator.cs"); + + private final Path outputDirectory; + private final String namespace; + + public CsharpTestBackend(Path outputDirectory, String namespace) { + this.outputDirectory = outputDirectory; + this.namespace = namespace; + } + + @Override + public void compile(List classes) throws IOException { + new CsharpBackend(outputDirectory.resolve("Program.cs"), namespace).compile(classes); + Files.write( + outputDirectory.resolve("Runtime.cs"), + transform( + RUNTIME_FILES, + runtimeFile -> readRuntimeFile(runtimeFile))); + } + + private String readRuntimeFile(String runtimeFile) { + try { + return Resources.toString(Resources.getResource("org/zwobble/couscous/tests/backends/csharp/runtime/" + runtimeFile), StandardCharsets.UTF_8) + .replace("namespace Couscous", "namespace " + namespace); + } catch (IOException exception) { + throw new RuntimeException(exception); + } + } +} diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java index 356b712..bcc44a8 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java @@ -1,7 +1,6 @@ package org.zwobble.couscous.tests.backends.csharp; import org.zwobble.couscous.CouscousCompiler; -import org.zwobble.couscous.backends.csharp.CsharpBackend; import org.zwobble.couscous.frontends.java.JavaFrontend; import org.zwobble.couscous.tests.CompilerTests; import org.zwobble.couscous.types.ScalarType; @@ -27,7 +26,7 @@ public class JavaToCsharpTests extends CompilerTests { try { CouscousCompiler compiler = new CouscousCompiler( new JavaFrontend(), - new CsharpBackend(directoryPath.resolve("Program.cs"), CsharpMethodRunner.NAMESPACE)); + new CsharpTestBackend(directoryPath, CsharpMethodRunner.NAMESPACE)); compiler.compileDirectory(list(directory), directory); return CsharpMethodRunner.runFunction(directoryPath, type, methodName, arguments, returnType); } finally { diff --git a/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Integer.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Integer.cs new file mode 100644 index 0000000..6ed87db --- /dev/null +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Integer.cs @@ -0,0 +1,14 @@ +namespace Couscous.java.lang { + internal class Integer : Object { + private readonly int _value; + + internal Integer(int value) { + _value = value; + } + + internal override bool equals(Object other) { + var integer = other as Integer; + return integer != null && integer._value == _value; + } + } +} diff --git a/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Iterable.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Iterable.cs new file mode 100644 index 0000000..314dbce --- /dev/null +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Iterable.cs @@ -0,0 +1,6 @@ +namespace Couscous.java.lang { + // TODO: implement in Java + internal interface Iterable { + java.util.Iterator iterator(); + } +} diff --git a/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Object.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Object.cs new file mode 100644 index 0000000..14a8f44 --- /dev/null +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/lang/Object.cs @@ -0,0 +1,11 @@ +namespace Couscous.java.lang { + internal class Object { + internal virtual bool equals(Object other) { + return System.Object.ReferenceEquals(this, other); + } + + public static implicit operator Object(int value) { + return new Integer(value); + } + } +} diff --git a/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Arrays.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Arrays.cs new file mode 100644 index 0000000..96b31d4 --- /dev/null +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Arrays.cs @@ -0,0 +1,37 @@ +namespace Couscous.java.util { + internal static class Arrays { + internal static java.lang.Iterable asList(T[] values) { + return new _ArrayList(values); + } + } + + internal class _ArrayList : java.lang.Iterable { + private readonly T[] values; + + internal _ArrayList(T[] values) { + this.values = values; + } + + public java.util.Iterator iterator() { + return new _ArrayIterator(values); + } + } + + internal class _ArrayIterator : java.util.Iterator { + private readonly T[] values; + private int nextIndex; + + internal _ArrayIterator(T[] values) { + this.values = values; + this.nextIndex = 0; + } + + public bool hasNext() { + return nextIndex < values.Length; + } + + public T next() { + return values[nextIndex++]; + } + } +} diff --git a/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Iterator.cs b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Iterator.cs new file mode 100644 index 0000000..9c0098a --- /dev/null +++ b/src/test/resources/org/zwobble/couscous/tests/backends/csharp/runtime/java/util/Iterator.cs @@ -0,0 +1,7 @@ +namespace Couscous.java.util { + // TODO: implement in Java + internal interface Iterator { + bool hasNext(); + T next(); + } +} -- cgit v1.2.3