Skip to content

Commit c076314

Browse files
committed
added onTopDownEnum
1 parent 78d5cbd commit c076314

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

hscript/Checker.hx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,10 @@ class Checker {
367367
return globals;
368368
}
369369

370+
public dynamic function onTopDownEnum( en : CEnum, field : String ) {
371+
return false;
372+
}
373+
370374
function typeArgs( args : Array<Argument>, pos : Expr ) {
371375
return [for( i in 0...args.length ) {
372376
var a = args[i];
@@ -956,7 +960,19 @@ class Checker {
956960
case "trace":
957961
return TDynamic;
958962
default:
959-
if( isCompletion) return TDynamic;
963+
switch( withType ) {
964+
case WithType(et = TEnum(e, args)):
965+
for( c in e.constructors )
966+
if( c.name == v ) {
967+
if( onTopDownEnum(e,v) ) {
968+
var ct = c.args == null ? et : TFun(c.args, et);
969+
return apply(ct, e.params, args);
970+
}
971+
break;
972+
}
973+
default:
974+
}
975+
if( isCompletion ) return TDynamic;
960976
error("Unknown identifier "+v, expr);
961977
}
962978
case EBlock(el):
@@ -977,7 +993,10 @@ class Checker {
977993
case EParent(e):
978994
return typeExpr(e,withType);
979995
case ECall(e, params):
980-
var ft = typeExpr(e, Value);
996+
var ft = typeExpr(e, switch( [edef(e),withType] ) {
997+
case [EIdent(_),WithType(TEnum(_))]: withType;
998+
default: Value;
999+
});
9811000
switch( follow(ft) ) {
9821001
case TFun(args, ret):
9831002
for( i in 0...params.length ) {

0 commit comments

Comments
 (0)