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

[jvm] make more things `final`

Simon Krajewski 5 жил өмнө
parent
commit
3f41cef2cc

+ 3 - 3
src/generators/genjvm.ml

@@ -474,7 +474,7 @@ class texpr_to_jvm gctx (jc : JvmClass.builder) (jm : JvmMethod.builder) (return
 
 	method make_static_closure_field (name : string) (jc_closure : JvmClass.builder) =
 		let jm_init = jc_closure#get_static_init_method in
-		let jf_closure = jc_closure#spawn_field name jc_closure#get_jsig [FdStatic;FdPublic] in
+		let jf_closure = jc_closure#spawn_field name jc_closure#get_jsig [FdStatic;FdPublic;FdFinal] in
 		jm_init#construct ConstructInit jc_closure#get_this_path (fun () -> []);
 		jm_init#putstatic jc_closure#get_this_path jf_closure#get_name jf_closure#get_jsig;
 
@@ -2588,7 +2588,7 @@ let generate_enum gctx en =
 			jm_ctor#string ef.ef_name;
 			jm_ctor#call_super_ctor ConstructInit jsig_enum_ctor;
 			List.iter (fun (n,jsig) ->
-				jm_ctor#add_argument_and_field n jsig
+				jm_ctor#add_argument_and_field n jsig [FdPublic;FdFinal]
 			) args;
 			jm_ctor#return;
 			jc_ctor#add_annotation (["haxe";"jvm";"annotation"],"EnumValueReflectionInformation") (["argumentNames",AArray (List.map (fun (name,_) -> AString name) args)]);
@@ -2692,7 +2692,7 @@ let generate_anons gctx =
 			jm_ctor#get_code#aconst_null haxe_empty_constructor_sig;
 			jm_ctor#call_super_ctor ConstructInit (method_sig [haxe_empty_constructor_sig] None);
 			List.iter (fun (name,jsig) ->
-				jm_ctor#add_argument_and_field name jsig;
+				jm_ctor#add_argument_and_field name jsig [FdPublic]
 			) fields;
 			jm_ctor#return;
 		end;

+ 2 - 2
src/generators/jvm/jvmFunctions.ml

@@ -214,7 +214,7 @@ class typed_functions = object(self)
 		let jc = new JvmClass.builder (["haxe";"jvm"],"VarArgs") haxe_function_path in
 		jc#add_access_flag 1; (* public *)
 		let jm_ctor = jc#spawn_method "<init>" (method_sig [haxe_function_sig] None) [MPublic] in
-		jm_ctor#add_argument_and_field "func" haxe_function_sig;
+		jm_ctor#add_argument_and_field "func" haxe_function_sig [FdPublic;FdFinal];
 		jm_ctor#finalize_arguments;
 		jm_ctor#load_this;
 		jm_ctor#call_super_ctor ConstructInit (method_sig [] None);
@@ -381,7 +381,7 @@ class typed_function
 		let context_sigs = List.map snd context in
 		let jm_ctor = jc_closure#spawn_method "<init>" (method_sig context_sigs None) (if public then [MPublic] else []) in
 		List.iter (fun (name,jsig) ->
-			jm_ctor#add_argument_and_field name jsig;
+			jm_ctor#add_argument_and_field name jsig [FdPublic;FdFinal];
 		) context;
 		jm_ctor#load_this;
 		jm_ctor#call_super_ctor ConstructInit (method_sig [] None);

+ 3 - 5
src/generators/jvm/jvmMethod.ml

@@ -322,15 +322,13 @@ class builder jc name jsig = object(self)
 
 	(** Adds a field named [name] with signature [jsig_field] to the enclosing class, and adds an argument with the same name
 	    to this method. The argument value is loaded and stored into the field immediately. **)
-	method add_argument_and_field (name : string) (jsig_field : jsignature) =
+	method add_argument_and_field (name : string) (jsig_field : jsignature) (flags : FieldAccessFlags.t list) =
 		assert (not (self#has_method_flag MStatic));
-		let jf = new builder jc name jsig_field in
-		jf#add_access_flag 1;
-		jc#add_field jf#export_field;
+		ignore(jc#spawn_field name jsig_field flags);
 		let _,load,_ = self#add_local name jsig_field VarArgument in
 		self#load_this;
 		load();
-		self#putfield jc#get_this_path name jsig_field;
+		self#putfield jc#get_this_path name jsig_field
 
 	(** Constructs a [path] object using the specified construction_kind [kind].