diff --git a/parser.ml b/parser.ml index eacbe76f282..cd06851d2a8 100644 --- a/parser.ml +++ b/parser.ml @@ -643,7 +643,12 @@ and parse_import s p1 = let rec loop acc = match s with parser | [< '(Dot,p) >] -> - if is_resuming p then raise (TypePath (List.rev (List.map fst acc),None)); + let resume() = + match acc with + | (n,_) :: l when n.[0] >= 'A' && n.[0] <= 'Z' -> raise (TypePath (List.rev (List.map fst l),Some (n,false))); + | _ -> raise (TypePath (List.rev (List.map fst acc),None)); + in + if is_resuming p then resume(); (match s with parser | [< '(Const (Ident k),p) >] -> loop ((k,p) :: acc) @@ -653,7 +658,7 @@ and parse_import s p1 = p2, List.rev acc, IAll | [< '(Binop OpOr,_) when do_resume() >] -> set_resume p; - raise (TypePath (List.rev (List.map fst acc),None)) + resume() | [< >] -> serror()); | [< '(Semicolon,p2) >] ->