aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-06 15:14:19 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-06 15:14:19 +0000
commit651c531a85d23fb88cc810ac5cdd92f80f1c8a3a (patch)
treecc9b627bc663a9dc3c72d8adc3015eda8f183e3e /src
parentf97a917753b91b6f738593dc76cda98207f888d1 (diff)
Allow integers to boxed in C# backend
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java1
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java1
-rw-r--r--src/main/resources/csharp/runtime/java/lang/Integer.cs13
-rw-r--r--src/main/resources/csharp/runtime/java/lang/Object.cs11
-rw-r--r--src/test/java/org/zwobble/couscous/tests/CompilerTests.java3
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java5
6 files changed, 26 insertions, 8 deletions
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 6032da4..4ae7704 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
@@ -17,6 +17,7 @@ import static com.google.common.collect.Iterables.transform;
public class CsharpBackend implements Backend {
private static final List<String> RUNTIME_FILES = ImmutableList.of(
"java/lang/Integer.cs",
+ "java/lang/Object.cs",
"java/lang/String.cs",
"_couscous.cs");
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 5260797..3ac7363 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
@@ -16,7 +16,6 @@ public class CsharpCodeGenerator {
.put(IntegerValue.REF, TypeName.of("int"))
.put(StringValue.REF, TypeName.of("string"))
.put(BooleanValue.REF, TypeName.of("bool"))
- .put(ObjectValues.OBJECT, TypeName.of("object"))
.put(ObjectValues.CLASS, TypeName.of("System.Type"))
.put(UnitValue.REF, TypeName.of("void"))
.build();
diff --git a/src/main/resources/csharp/runtime/java/lang/Integer.cs b/src/main/resources/csharp/runtime/java/lang/Integer.cs
index 9a9f8f5..9e6ee08 100644
--- a/src/main/resources/csharp/runtime/java/lang/Integer.cs
+++ b/src/main/resources/csharp/runtime/java/lang/Integer.cs
@@ -1,7 +1,18 @@
namespace Couscous.java.lang {
- internal class Integer {
+ internal class Integer : Object {
internal static int valueOf__int(int value) {
return value;
}
+
+ private readonly int _value;
+
+ internal Integer(int value) {
+ _value = value;
+ }
+
+ internal override bool equals__java_lang_Object(Object other) {
+ var integer = other as Integer;
+ return integer != null && integer._value == _value;
+ }
}
}
diff --git a/src/main/resources/csharp/runtime/java/lang/Object.cs b/src/main/resources/csharp/runtime/java/lang/Object.cs
new file mode 100644
index 0000000..be76f7a
--- /dev/null
+++ b/src/main/resources/csharp/runtime/java/lang/Object.cs
@@ -0,0 +1,11 @@
+namespace Couscous.java.lang {
+ internal class Object {
+ internal virtual bool equals__java_lang_Object(Object other) {
+ return System.Object.ReferenceEquals(this, other);
+ }
+
+ public static implicit operator Object(int value) {
+ return new Integer(value);
+ }
+ }
+}
diff --git a/src/test/java/org/zwobble/couscous/tests/CompilerTests.java b/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
index 90df2ff..5b63a66 100644
--- a/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
@@ -20,7 +20,7 @@ import static org.zwobble.couscous.values.PrimitiveValues.value;
public abstract class CompilerTests {
@Test
public void canEvaluateLiterals() {
- assertEquals(value("hello"), evalObjectExpression("\"hello\""));
+ assertEquals(value("hello"), evalExpression("String", "\"hello\""));
assertEquals(value(42), evalIntExpression("42"));
}
@@ -44,6 +44,7 @@ public abstract class CompilerTests {
@Test
public void integersCanBeAssignedToObjectVariable() {
assertEquals(value(false), exec("boolean", "Object x = 1; return x.equals(new Object());"));
+ assertEquals(value(true), exec("boolean", "Object x = 1; return x.equals(1);"));
}
@Test
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 3030352..e578ef3 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
@@ -20,11 +20,6 @@ import static org.zwobble.couscous.util.ExtraLists.list;
public class JavaToCsharpTests extends CompilerTests {
@Test
@Ignore
- public void integersCanBeAssignedToObjectVariable() {
- }
-
- @Test
- @Ignore
public void anonymousClassesWithoutCapture() throws Exception {
}