@@ -367,6 +367,10 @@ class Checker {
367
367
return globals ;
368
368
}
369
369
370
+ public dynamic function onTopDownEnum ( en : CEnum , field : String ) {
371
+ return false ;
372
+ }
373
+
370
374
function typeArgs ( args : Array <Argument >, pos : Expr ) {
371
375
return [for ( i in 0 ... args .length ) {
372
376
var a = args [i ];
@@ -956,7 +960,19 @@ class Checker {
956
960
case " trace" :
957
961
return TDynamic ;
958
962
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 ;
960
976
error (" Unknown identifier " + v , expr );
961
977
}
962
978
case EBlock (el ):
@@ -977,7 +993,10 @@ class Checker {
977
993
case EParent (e ):
978
994
return typeExpr (e ,withType );
979
995
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
+ });
981
1000
switch ( follow (ft ) ) {
982
1001
case TFun (args , ret ):
983
1002
for ( i in 0 ... params .length ) {
0 commit comments