Bläddra i källkod

don't forget original error on testing values against optional args (fixes #8488)

Aleksandr Kuzmenko 6 år sedan
förälder
incheckning
315eb2f90a

+ 4 - 2
src/typing/calls.ml

@@ -191,11 +191,13 @@ let rec unify_call_args' ctx el args r callp inline force_inline =
 				(e,opt) :: loop el args
 			with
 				WithTypeError (ul,p)->
-					if opt then
+					if opt && List.length el < List.length args then
 						let e_def = skip name ul t p in
 						(e_def,true) :: loop (e :: el) args
 					else
-						arg_error ul name false p
+						match List.rev !skipped with
+						| [] -> arg_error ul name opt p
+						| (s,ul,p) :: _ -> arg_error ul s true p
 			end
 	in
 	let el = try loop el args with exc -> ctx.in_call_args <- in_call_args; raise exc; in

+ 3 - 0
tests/misc/projects/Issue4803/compile-fail.hxml.stderr

@@ -4,4 +4,7 @@ Main.hx:16: lines 16-19 : Too many arguments
 Main.hx:16: lines 16-19 : Overload resolution failed for (handler : (Event -> Void)) -> JQuery
 Main.hx:18: characters 8-17 : Object requires field y
 Main.hx:18: characters 8-17 : For function argument 'handler'
+Main.hx:16: lines 16-19 : Overload resolution failed for (?eventData : Dynamic, handler : (Event -> Void)) -> JQuery
+Main.hx:18: characters 8-17 : Object requires field y
+Main.hx:18: characters 8-17 : For optional function argument 'eventData'
 Main.hx:16: lines 16-19 : End of overload failure reasons

+ 9 - 0
tests/misc/projects/Issue8488/Main.hx

@@ -0,0 +1,9 @@
+class Main {
+  public static function main():Void {
+    function foo(?a:haxe.ds.Option<Int>->Bool, b:Int):Void {}
+    foo(
+      o -> o.match(haxe.ds.Option.Some(_ => "3")),
+      1
+    );
+  }
+}

+ 1 - 0
tests/misc/projects/Issue8488/compile-fail.hxml

@@ -0,0 +1 @@
+-main Main

+ 4 - 0
tests/misc/projects/Issue8488/compile-fail.hxml.stderr

@@ -0,0 +1,4 @@
+Main.hx:5: characters 40-41 : Unknown identifier : _
+Main.hx:5: characters 40-41 : For function argument 'v'
+Main.hx:5: characters 45-48 : String should be Int
+Main.hx:5: characters 45-48 : For optional function argument 'a'