Skip to content

Commit

Permalink
implement Type.enumEq and Type.allEnums
Browse files Browse the repository at this point in the history
see #21
  • Loading branch information
Simn committed Mar 30, 2019
1 parent d1b2bfd commit 7bbb2f2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
27 changes: 25 additions & 2 deletions std/jvm/_std/Type.hx
Expand Up @@ -229,7 +229,22 @@ class Type {
}

public static function enumEq<T>(a:T, b:T):Bool {
return false;
var a:jvm.Enum = cast a;
var b:jvm.Enum = cast b;
if (a._hx_index != b._hx_index) {
return false;
}
var params1 = enumParameters(cast a);
var params2 = enumParameters(cast b);
if (params1.length != params2.length) {
return false;
}
for (i in 0...params1.length) {
if (params1[i] != params2[i]) {
return false;
}
}
return true;
}

public static function enumConstructor(e:EnumValue):String {
Expand Down Expand Up @@ -259,6 +274,14 @@ class Type {
}

public static function allEnums<T>(e:Enum<T>):Array<T> {
return null;
var all = getEnumConstructs(e);
var ret = [];
for (name in all) {
var v = Jvm.readField(e, name);
if (Jvm.instanceof(v, jvm.Enum)) {
ret.push(v);
}
}
return ret;
}
}
16 changes: 16 additions & 0 deletions tests/genjvm/src/test/TestTypeApi.hx
Expand Up @@ -82,8 +82,10 @@ class TestTypeApi extends BaseTest {
testEnumConstructs();
testTypeof();
testEnumIndex();
testEnumEq();
testEnumConstructor();
testEnumParameters();
testAllEnums();
}

function testGetClass() {
Expand Down Expand Up @@ -216,6 +218,13 @@ class TestTypeApi extends BaseTest {
eq(0, Type.enumIndex(Some(12)));
}

function testEnumEq() {
t(Type.enumEq(Some(12), Some(12)));
t(Type.enumEq(None, None));
t(!Type.enumEq(Some(13), Some(12)));
t(!Type.enumEq(Some(13), None));
}

function testEnumConstructor() {
eq("None", Type.enumConstructor(None));
eq("Some", Type.enumConstructor(Some(12)));
Expand All @@ -225,4 +234,11 @@ class TestTypeApi extends BaseTest {
eq(0, Type.enumParameters(None).length);
eq(12, Type.enumParameters(Some(12))[0]);
}

function testAllEnums() {
var a = Type.allEnums(haxe.macro.Expr.ExprDef);
eq(2, a.length);
t(a[0] == EBreak || a[0] == EContinue);
t(a[1] == EBreak || a[1] == EContinue);
}
}

0 comments on commit 7bbb2f2

Please sign in to comment.