Skip to content

Commit 363b87a

Browse files
committed
fixed return unification when no return in function
1 parent c532624 commit 363b87a

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

hscript/Checker.hx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ class Checker {
327327
var currentFunType : TType;
328328
var isCompletion : Bool;
329329
var allowDefine : Bool;
330+
var hasReturn : Bool;
330331
public var allowAsync : Bool;
331332
public var allowReturn : Null<TType>;
332333
public var allowGlobalsDefine : Bool;
@@ -1088,6 +1089,7 @@ class Checker {
10881089
return TVoid;
10891090
case EReturn(v):
10901091
var et = v == null ? TVoid : typeExpr(v, allowReturn == null ? Value : WithType(allowReturn));
1092+
hasReturn = true;
10911093
if( allowReturn == null )
10921094
error("Return not allowed here", expr);
10931095
else
@@ -1130,8 +1132,10 @@ class Checker {
11301132
var locals = saveLocals();
11311133
var oldRet = allowReturn;
11321134
var oldGDef = allowDefine;
1135+
var oldHasRet = hasReturn;
11331136
allowReturn = tret;
11341137
allowDefine = false;
1138+
hasReturn = false;
11351139
var withArgs = null;
11361140
if( name != null && !withType.match(WithType(follow(_) => TFun(_))) ) {
11371141
var ev = events.get(name);
@@ -1156,8 +1160,11 @@ class Checker {
11561160
if( withArgs != null && targs.length < withArgs.length )
11571161
error("Missing "+(withArgs.length - targs.length)+" arguments ("+[for( i in targs.length...withArgs.length ) typeStr(withArgs[i].t)].join(",")+")", expr);
11581162
typeExpr(body,NoValue);
1163+
if( !hasReturn && !tryUnify(tret, TVoid) )
1164+
error("Missing return "+typeStr(tret), expr);
11591165
allowDefine = oldGDef;
11601166
allowReturn = oldRet;
1167+
hasReturn = oldHasRet;
11611168
this.locals = locals;
11621169
if( ft == null ) {
11631170
ft = TFun(targs, tret);

0 commit comments

Comments
 (0)