diff options
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 { } |
