Browse Source

add common decl_flag type for parsing common type flags instead of returning tuples of class+enum flag and then mapping it awkwardly

Dan Korostelev 8 years ago
parent
commit
f96d38b8fe
1 changed files with 22 additions and 6 deletions
  1. 22 6
      src/syntax/parser.mly

+ 22 - 6
src/syntax/parser.mly

@@ -45,6 +45,22 @@ let error_msg = function
 let error m p = raise (Error (m,p))
 let error m p = raise (Error (m,p))
 let display_error : (error_msg -> pos -> unit) ref = ref (fun _ _ -> assert false)
 let display_error : (error_msg -> pos -> unit) ref = ref (fun _ _ -> assert false)
 
 
+type decl_flag =
+	| DPrivate
+	| DExtern
+
+let decl_flag_to_class_flag = function
+	| DPrivate -> HPrivate
+	| DExtern -> HExtern
+
+let decl_flag_to_enum_flag = function
+	| DPrivate -> EPrivate
+	| DExtern -> EExtern
+
+let decl_flag_to_abstract_flag = function
+	| DPrivate -> APrivAbstract
+	| DExtern -> AExtern
+
 let special_identifier_files = Hashtbl.create 0
 let special_identifier_files = Hashtbl.create 0
 
 
 let quoted_ident_prefix = "@$__hx__"
 let quoted_ident_prefix = "@$__hx__"
@@ -651,7 +667,7 @@ and parse_type_decl s =
 				d_doc = doc;
 				d_doc = doc;
 				d_meta = meta;
 				d_meta = meta;
 				d_params = tl;
 				d_params = tl;
-				d_flags = List.map snd c @ n;
+				d_flags = List.map decl_flag_to_enum_flag c @ n;
 				d_data = l
 				d_data = l
 			}, punion p1 p2)
 			}, punion p1 p2)
 		| [< n , p1 = parse_class_flags; name = type_name; tl = parse_constraint_params; hl = plist parse_class_herit; '(BrOpen,_); fl, p2 = parse_class_fields false p1 >] ->
 		| [< n , p1 = parse_class_flags; name = type_name; tl = parse_constraint_params; hl = plist parse_class_herit; '(BrOpen,_); fl, p2 = parse_class_fields false p1 >] ->
@@ -660,7 +676,7 @@ and parse_type_decl s =
 				d_doc = doc;
 				d_doc = doc;
 				d_meta = meta;
 				d_meta = meta;
 				d_params = tl;
 				d_params = tl;
-				d_flags = List.map fst c @ n @ hl;
+				d_flags = List.map decl_flag_to_class_flag c @ n @ hl;
 				d_data = fl;
 				d_data = fl;
 			}, punion p1 p2)
 			}, punion p1 p2)
 		| [< '(Kwd Typedef,p1); name = type_name; tl = parse_constraint_params; '(Binop OpAssign,p2); t = parse_complex_type; s >] ->
 		| [< '(Kwd Typedef,p1); name = type_name; tl = parse_constraint_params; '(Binop OpAssign,p2); t = parse_complex_type; s >] ->
@@ -672,11 +688,11 @@ and parse_type_decl s =
 				d_doc = doc;
 				d_doc = doc;
 				d_meta = meta;
 				d_meta = meta;
 				d_params = tl;
 				d_params = tl;
-				d_flags = List.map snd c;
+				d_flags = List.map decl_flag_to_enum_flag c;
 				d_data = t;
 				d_data = t;
 			}, punion p1 (pos t))
 			}, punion p1 (pos t))
 		| [< '(Kwd Abstract,p1); name = type_name; tl = parse_constraint_params; st = parse_abstract_subtype; sl = plist parse_abstract_relations; '(BrOpen,_); fl, p2 = parse_class_fields false p1 >] ->
 		| [< '(Kwd Abstract,p1); name = type_name; tl = parse_constraint_params; st = parse_abstract_subtype; sl = plist parse_abstract_relations; '(BrOpen,_); fl, p2 = parse_class_fields false p1 >] ->
-			let flags = List.map (fun (_,c) -> match c with EPrivate -> APrivAbstract | EExtern -> AExtern) c in
+			let flags = List.map decl_flag_to_abstract_flag c in
 			let flags = (match st with None -> flags | Some t -> AIsType t :: flags) in
 			let flags = (match st with None -> flags | Some t -> AIsType t :: flags) in
 			(EAbstract {
 			(EAbstract {
 				d_name = name;
 				d_name = name;
@@ -850,8 +866,8 @@ and parse_class_field_resume tdecl s =
 		loop 1
 		loop 1
 
 
 and parse_common_flags = parser
 and parse_common_flags = parser
-	| [< '(Kwd Private,_); l = parse_common_flags >] -> (HPrivate, EPrivate) :: l
-	| [< '(Kwd Extern,_); l = parse_common_flags >] -> (HExtern, EExtern) :: l
+	| [< '(Kwd Private,_); l = parse_common_flags >] -> DPrivate :: l
+	| [< '(Kwd Extern,_); l = parse_common_flags >] -> DExtern :: l
 	| [< >] -> []
 	| [< >] -> []
 
 
 and parse_meta_argument_expr s =
 and parse_meta_argument_expr s =