Kaynağa Gözat

[parser] parse overload for module statics

see #9791
Simon Krajewski 5 yıl önce
ebeveyn
işleme
41623c6b12

+ 1 - 0
src/syntax/grammar.mly

@@ -534,6 +534,7 @@ and parse_common_flags = parser
 	| [< '(Kwd Inline,p); l = parse_common_flags >] -> (DInline,p) :: l
 	| [< '(Kwd Public,p); l = parse_common_flags >] -> (DPublic,p) :: l
 	| [< '(Kwd Static,p); l = parse_common_flags >] -> (DStatic,p) :: l
+	| [< '(Kwd Overload,p); l = parse_common_flags >] -> (DOverload,p) :: l
 	| [< >] -> []
 
 and parse_meta_argument_expr s =

+ 6 - 3
src/syntax/parser.ml

@@ -43,6 +43,7 @@ type decl_flag =
 	| DInline
 	| DPublic
 	| DStatic
+	| DOverload
 
 type type_decl_completion_mode =
 	| TCBeforePackage
@@ -101,6 +102,7 @@ let s_decl_flag = function
 	| DInline -> "inline"
 	| DPublic -> "public"
 	| DStatic -> "static"
+	| DOverload -> "overload"
 
 let syntax_completion kind so p =
 	raise (SyntaxCompletion(kind,DisplayTypes.make_subject so p))
@@ -204,23 +206,24 @@ let decl_flag_to_class_flag (flag,p) = match flag with
 	| DPrivate -> Some HPrivate
 	| DExtern -> Some HExtern
 	| DFinal -> Some HFinal
-	| DMacro | DDynamic | DInline | DPublic | DStatic -> unsupported_decl_flag_class flag p
+	| DMacro | DDynamic | DInline | DPublic | DStatic | DOverload -> unsupported_decl_flag_class flag p
 
 let decl_flag_to_enum_flag (flag,p) = match flag with
 	| DPrivate -> Some EPrivate
 	| DExtern -> Some EExtern
-	| DFinal | DMacro | DDynamic | DInline | DPublic | DStatic -> unsupported_decl_flag_enum flag p
+	| DFinal | DMacro | DDynamic | DInline | DPublic | DStatic | DOverload -> unsupported_decl_flag_enum flag p
 
 let decl_flag_to_abstract_flag (flag,p) = match flag with
 	| DPrivate -> Some AbPrivate
 	| DExtern -> Some AbExtern
-	| DFinal | DMacro | DDynamic | DInline | DPublic | DStatic -> unsupported_decl_flag_abstract flag p
+	| DFinal | DMacro | DDynamic | DInline | DPublic | DStatic | DOverload -> unsupported_decl_flag_abstract flag p
 
 let decl_flag_to_module_field_flag (flag,p) = match flag with
 	| DPrivate -> Some (APrivate,p)
 	| DMacro -> Some (AMacro,p)
 	| DDynamic -> Some (ADynamic,p)
 	| DInline -> Some (AInline,p)
+	| DOverload -> Some (AOverload,p)
 	| DExtern | DFinal | DPublic | DStatic -> unsupported_decl_flag_module_field flag p
 
 let serror() = raise (Stream.Error "")

+ 22 - 0
tests/unit/src/unit/issues/Issue9791.hx

@@ -0,0 +1,22 @@
+package unit.issues;
+
+#if false
+
+overload function moduleOverload(i:Int) {
+	return "Int: " + i;
+}
+
+overload function moduleOverload(s:String) {
+	return "String: " + s;
+}
+
+#end
+
+class Issue9790 extends unit.Test {
+	#if false
+	function test() {
+		eq("Int: 12", moduleOverload(12));
+		eq("String: foo", moduleOverload("foo"));
+	}
+	#end
+}