Ver código fonte

[typer] check for dynamic iterators when kv-iterating

Simon Krajewski 7 anos atrás
pai
commit
6a625f9a5a
1 arquivos alterados com 4 adições e 0 exclusões
  1. 4 0
      src/typing/forLoop.ml

+ 4 - 0
src/typing/forLoop.ml

@@ -367,6 +367,10 @@ let type_for_loop ctx handle_display it e2 p =
 		end
 	| IKKeyValue((ikey,pkey,dkokey),(ivalue,pvalue,dkovalue)) ->
 		let e1,pt = IterationKind.check_iterator ctx "keyValueIterator" e1 e1.epos in
+		begin match follow e1.etype with
+		| TDynamic _ | TMono _ -> display_error ctx "You can't iterate on a Dynamic value, please specify Iterator or Iterable" e1.epos;
+		| _ -> ()
+		end;
 		let vtmp = gen_local ctx e1.etype e1.epos in
 		let etmp = make_local vtmp vtmp.v_pos in
 		let ehasnext = !build_call_ref ctx (type_field ctx etmp "hasNext" etmp.epos MCall) [] Value etmp.epos in