Browse Source

fixed import and catch.

Nicolas Cannasse 20 years ago
parent
commit
a1353bd44c
1 changed files with 6 additions and 3 deletions
  1. 6 3
      parser.ml

+ 6 - 3
parser.ml

@@ -113,7 +113,7 @@ let rec	parse_file = parser
 	| [< '(Const (Ident "package"),_); p = parse_package; '(BrOpen,_); l = psep Semicolon parse_type_decl; '(BrClose,_); '(Eof,_); >] -> p , l
 	| [< '(Const (Ident "package"),_); p = parse_package; '(BrOpen,_); l = psep Semicolon parse_type_decl; '(BrClose,_); '(Eof,_); >] -> p , l
 
 
 and parse_type_decl = parser
 and parse_type_decl = parser
-	| [< '(Kwd Import,p1); p = parse_package; '(Dot,_); '(Const (Type name),_) >] -> (EImport (p,name), p1)
+	| [< '(Kwd Import,p1); t = parse_type_path_normal >] -> (EImport (t.tpackage,t.tname), p1)
 	| [< '(Kwd Enum,p1); '(Const (Type name),_);  tl = parse_type_params; '(BrOpen,_); l = plist parse_enum; '(BrClose,p2) >] -> (EEnum (name,tl,l), punion p1 p2)
 	| [< '(Kwd Enum,p1); '(Const (Type name),_);  tl = parse_type_params; '(BrOpen,_); l = plist parse_enum; '(BrClose,p2) >] -> (EEnum (name,tl,l), punion p1 p2)
 	| [< n , p1 = parse_class_native; '(Const (Type name),_); tl = parse_type_params; hl = psep Comma parse_class_herit; '(BrOpen,_); fl = plist parse_class_field; '(BrClose,p2) >] -> (EClass (name,tl,n @ hl,fl), punion p1 p2)
 	| [< n , p1 = parse_class_native; '(Const (Type name),_); tl = parse_type_params; hl = psep Comma parse_class_herit; '(BrOpen,_); fl = plist parse_class_field; '(BrClose,p2) >] -> (EClass (name,tl,n @ hl,fl), punion p1 p2)
 
 
@@ -206,7 +206,10 @@ and parse_type_params = parser
 	| [< >] -> []
 	| [< >] -> []
 
 
 and parse_type_param = parser
 and parse_type_param = parser
-	| [< '(Const (Type name),_); h = psep Comma parse_class_herit >] -> (name,h)
+	| [< '(Const (Type name),_); s >] ->
+		match s with parser
+		| [< '(DblDot,_); l = psep Comma parse_type_path_normal >] -> (name,l)
+		| [< >] -> (name,[])
 
 
 and parse_class_herit = parser
 and parse_class_herit = parser
 	| [< '(Kwd Extends,_); t = parse_type_path_normal >] -> HExtends t
 	| [< '(Kwd Extends,_); t = parse_type_path_normal >] -> HExtends t
@@ -303,7 +306,7 @@ and parse_switch_cases = parser
 		[] , None
 		[] , None
 
 
 and parse_catch = parser
 and parse_catch = parser
-	| [< '(Kwd Catch,_); '(POpen,_); '(Const (Ident name),_); '(DblDot,_); t = parse_type_path; e = expr >] -> (name,t,e)
+	| [< '(Kwd Catch,_); '(POpen,_); '(Const (Ident name),_); '(DblDot,_); t = parse_type_path; '(PClose,_); e = expr >] -> (name,t,e)
 
 
 let parse code file =
 let parse code file =
 	let old = Lexer.save() in
 	let old = Lexer.save() in