Browse Source

suppress type indexes from all types structures

ncannasse 6 năm trước cách đây
mục cha
commit
c60200ddcf
1 tập tin đã thay đổi với 27 bổ sung22 xóa
  1. 27 22
      src/generators/hl2c.ml

+ 27 - 22
src/generators/hl2c.ml

@@ -1310,30 +1310,31 @@ let write_c com file (code:code) =
 
 	line "";
 	line "// Types values data";
-	Array.iteri (fun i t ->
+	Array.iter (fun t ->
 		let field_value (_,name_id,t) =
 			sprintf "{(const uchar*)%s, %s, %ld}" (string ctx name_id) (type_value ctx t) (hash ctx name_id)
 		in
 		match t with
 		| HObj o ->
+			let name = type_name ctx t in
 			let proto_value p =
 				sprintf "{(const uchar*)%s, %d, %d, %ld}" (string ctx p.fid) p.fmethod (match p.fvirtual with None -> -1 | Some i -> i) (hash ctx p.fid)
 			in
 			let fields =
 				if Array.length o.pfields = 0 then "NULL" else
-				let name = sprintf "fields$%d" i in
+				let name = sprintf "fields%s" name in
 				sexpr "static hl_obj_field %s[] = {%s}" name (String.concat "," (List.map field_value (Array.to_list o.pfields)));
 				name
 			in
 			let proto =
 				if Array.length o.pproto = 0 then "NULL" else
-				let name = sprintf "proto$%d" i in
+				let name = sprintf "proto%s" name in
 				sexpr "static hl_obj_proto %s[] = {%s}" name (String.concat "," (List.map proto_value (Array.to_list o.pproto)));
 				name
 			in
 			let bindings =
 				if o.pbindings = [] then "NULL" else
-				let name = sprintf "bindings$%d" i in
+				let name = sprintf "bindings%s" name in
 				sexpr "static int %s[] = {%s}" name (String.concat "," (List.map (fun (fid,fidx) -> string_of_int fid ^ "," ^ string_of_int fidx) o.pbindings));
 				name
 			in
@@ -1347,17 +1348,18 @@ let write_c com file (code:code) =
 				proto;
 				bindings
 			] in
-			sexpr "static hl_type_obj obj$%d = {%s}" i (String.concat "," ofields);
+			sexpr "static hl_type_obj obj%s = {%s}" name (String.concat "," ofields);
 		| HEnum e ->
+			let ename = type_name ctx t in
 			let constr_value cid (name,nid,tl) =
 				let tval = if Array.length tl = 0 then "NULL" else
-					let name = sprintf "econstruct$%d_%d" i cid in
+					let name = sprintf "econstruct%s_%d" ename cid in
 					sexpr "static hl_type *%s[] = {%s}" name (String.concat "," (List.map (type_value ctx) (Array.to_list tl)));
 					name
 				in
 				let size = if Array.length tl = 0 then "0" else sprintf "sizeof(%s)" (enum_constr_type ctx e cid) in
 				let offsets = if Array.length tl = 0 then "NULL" else
-					let name = sprintf "eoffsets$%d_%d" i cid in
+					let name = sprintf "eoffsets%s_%d" ename cid in
 					sexpr "static int %s[] = {%s}" name (String.concat "," (List.map (fun _ -> "0") (Array.to_list tl)));
 					name
 				in
@@ -1365,7 +1367,7 @@ let write_c com file (code:code) =
 				sprintf "{(const uchar*)%s, %d, %s, %s, %s, %s}" (string ctx nid) (Array.length tl) tval size (if has_ptr then "true" else "false") offsets
 			in
 			let constr_name = if Array.length e.efields = 0 then "NULL" else begin
-				let name = sprintf "econstructs$%d" i in
+				let name = sprintf "econstruct%s" ename in
 				sexpr "static hl_enum_construct %s[] = {%s}" name (String.concat "," (Array.to_list (Array.mapi constr_value e.efields)));
 				name;
 			end in
@@ -1374,11 +1376,12 @@ let write_c com file (code:code) =
 				string_of_int (Array.length e.efields);
 				constr_name
 			] in
-			sexpr "static hl_type_enum enum$%d = {%s}" i (String.concat "," efields);
+			sexpr "static hl_type_enum enum%s = {%s}" ename (String.concat "," efields);
 		| HVirtual v ->
+			let vname = type_name ctx t in
 			let fields_name =
 				if Array.length v.vfields = 0 then "NULL" else
-				let name = sprintf "vfields$%d" i in
+				let name = sprintf "vfields%s" vname in
 				sexpr "static hl_obj_field %s[] = {%s}" name (String.concat "," (List.map field_value (Array.to_list v.vfields)));
 				name
 			in
@@ -1386,14 +1389,15 @@ let write_c com file (code:code) =
 				fields_name;
 				string_of_int (Array.length v.vfields)
 			] in
-			sexpr "static hl_type_virtual virt$%d = {%s}" i (String.concat "," vfields);
-		| HFun (args,t) | HMethod(args,t) ->
+			sexpr "static hl_type_virtual virt%s = {%s}" vname (String.concat "," vfields);
+		| HFun (args,ret) | HMethod(args,ret) ->
+			let fname = type_name ctx t in
 			let aname = if args = [] then "NULL" else
-				let name = sprintf "fargs$%d" i in
+				let name = sprintf "fargs%s" fname in
 				sexpr "static hl_type *%s[] = {%s}" name (String.concat "," (List.map (type_value ctx) args));
 				name
 			in
-			sexpr "static hl_type_fun tfun$%d = {%s,%s,%d}" i aname (type_value ctx t) (List.length args)
+			sexpr "static hl_type_fun tfun%s = {%s,%s,%d}" fname aname (type_value ctx ret) (List.length args)
 		| _ ->
 			()
 	) all_types;
@@ -1401,26 +1405,27 @@ let write_c com file (code:code) =
 	line "";
 	line "void hl_init_types( hl_module_context *ctx ) {";
 	block ctx;
-	Array.iteri (fun i t ->
+	Array.iter (fun t ->
 		match t with
 		| HObj o ->
-			sexpr "obj$%d.m = ctx" i;
-			(match o.pclassglobal with None -> () | Some g -> sexpr "obj$%d.global_value = (void**)&global$%d" i g);
-			sexpr "%s.obj = &obj$%d" (type_name ctx t) i
+			let name = type_name ctx t in
+			sexpr "obj%s.m = ctx" name;
+			(match o.pclassglobal with None -> () | Some g -> sexpr "obj%s.global_value = (void**)&global$%d" name g);
+			sexpr "%s.obj = &obj%s" name name
 		| HNull r | HRef r ->
 			sexpr "%s.tparam = %s" (type_name ctx t) (type_value ctx r)
 		| HEnum e ->
 			let name = type_name ctx t in
-			sexpr "%s.tenum = &enum$%d" name i;
-			(match e.eglobal with None -> () | Some g -> sexpr "enum$%d.global_value = (void**)&global$%d" i g);
+			sexpr "%s.tenum = &enum%s" name name;
+			(match e.eglobal with None -> () | Some g -> sexpr "enum%s.global_value = (void**)&global$%d" name g);
 			sexpr "hl_init_enum(&%s,ctx)" name;
 		| HVirtual _ ->
 			let name = type_name ctx t in
-			sexpr "%s.virt = &virt$%d" name i;
+			sexpr "%s.virt = &virt%s" name name;
 			sexpr "hl_init_virtual(&%s,ctx)" name;
 		| HFun _ | HMethod _ ->
 			let name = type_name ctx t in
-			sexpr "%s.fun = &tfun$%d" name i
+			sexpr "%s.fun = &tfun%s" name name
 		| _ ->
 			()
 	) all_types;