@@ -420,7 +420,11 @@ let apply_params ?stack cparams params t =
TFun (List.map (fun (s,o,t) -> s, o, loop t) tl,loop r)
| TAnon a ->
let fields = PMap.map (fun f -> { f with cf_type = loop f.cf_type }) a.a_fields in
- mk_anon ~fields a.a_status
+ let status = match !(a.a_status) with
+ | Extend tl -> ref (Extend (List.map loop tl))
+ | _ -> a.a_status
+ in
+ mk_anon ~fields status
| TLazy f ->
let ft = lazy_type f in
let ft2 = loop ft in
@@ -271,7 +271,12 @@ let make_extension_type ctx tl =
else fields
) a.a_fields fields
| TDynamic _ ->
- extends_dynamic := Some t;
+ begin match !extends_dynamic with
+ | None ->
+ extends_dynamic := Some t;
+ | Some _ ->
+ display_error ctx "Can only extend one Dynamic<T>" p
+ end;
fields
| _ ->
error "Can only extend structures" p
@@ -6,5 +6,10 @@ typedef KnownDynamic<T> = {known:T} &
class Issue9825 extends Test {
function test() {
var d:KnownDynamic<String> = {known: "foo", also: "bar"};
+ eq("foo", d.known);
+ eq("bar", d.also);
+ d.even = "even";
+ eq("even", d.even);
+ t(HelperMacros.typeError(d.no = 12));
}