2
0
Эх сурвалжийг харах

add @:final to abstract implementation classes

it makes sense to do it on all targets
Dan Korostelev 9 жил өмнө
parent
commit
15e044f1a1

+ 3 - 6
src/generators/gencommon.ml

@@ -8662,12 +8662,9 @@ struct
 					match md with
 						| TClassDecl ( { cl_interface = true } as cl ) when cl.cl_path <> baseclass.cl_path && cl.cl_path <> baseinterface.cl_path && cl.cl_path <> basedynamic.cl_path ->
 							cl.cl_implements <- (baseinterface, []) :: cl.cl_implements
-						| TClassDecl ({ cl_kind = KAbstractImpl _ } as cl) ->
-							(*
-								TODO: probably here is not the best place to add @:final to KAbstractImpl, also:
-								Doesn't it make sense to add @:final to KAbstractImpls on all platforms?
-							*)
-							if not (Meta.has Meta.Final cl.cl_meta) then cl.cl_meta <- (Meta.Final, [], cl.cl_pos) :: cl.cl_meta
+						| TClassDecl ({ cl_kind = KAbstractImpl _ }) ->
+							(* don't add any base classes to abstract implementations *)
+							()
 						| TClassDecl ( { cl_super = None } as cl ) when cl.cl_path <> baseclass.cl_path && cl.cl_path <> baseinterface.cl_path && cl.cl_path <> basedynamic.cl_path ->
 							if is_some cl.cl_dynamic then
 								cl.cl_super <- Some (basedynamic,[])

+ 2 - 1
src/typing/typeload.ml

@@ -216,7 +216,8 @@ let module_pass_1 ctx m tdecls loadp =
 							()
 					) a.a_meta;
 					a.a_impl <- Some c;
-					c.cl_kind <- KAbstractImpl a
+					c.cl_kind <- KAbstractImpl a;
+					c.cl_meta <- (Meta.Final,[],c.cl_pos) :: c.cl_meta
 				| _ -> assert false);
 				acc
 		) in