Преглед изворни кода

retain placed name positions where possible

Simon Krajewski пре 9 година
родитељ
комит
f1757ae58a
1 измењених фајлова са 13 додато и 8 уклоњено
  1. 13 8
      src/macro/interp.ml

+ 13 - 8
src/macro/interp.ml

@@ -3979,6 +3979,7 @@ and encode_field (f:class_field) =
 	in
 	enc_obj [
 		"name",encode_placed_name f.cff_name;
+		"name_pos", encode_pos (pos f.cff_name);
 		"doc", null enc_string f.cff_doc;
 		"pos", encode_pos f.cff_pos;
 		"kind", enc_enum IField tag pl;
@@ -4006,6 +4007,7 @@ and encode_ctype t =
 and encode_tparam_decl tp =
 	enc_obj [
 		"name", encode_placed_name tp.tp_name;
+		"name_pos", encode_pos (pos tp.tp_name);
 		"params", enc_array (List.map encode_tparam_decl tp.tp_params);
 		"constraints", enc_array (List.map encode_ctype tp.tp_constraints);
 		"meta", encode_meta_content tp.tp_meta;
@@ -4017,6 +4019,7 @@ and encode_fun f =
 		"args", enc_array (List.map (fun (n,opt,m,t,e) ->
 			enc_obj [
 				"name", encode_placed_name n;
+				"name_pos", encode_pos (pos n);
 				"opt", VBool opt;
 				"meta", encode_meta_content m;
 				"type", null encode_ctype t;
@@ -4057,6 +4060,7 @@ and encode_expr e =
 				10, [enc_array (List.map (fun (v,t,eo) ->
 					enc_obj [
 						"name",encode_placed_name v;
+						"name_pos",encode_pos (pos v);
 						"type",null encode_ctype t;
 						"expr",null loop eo;
 					]
@@ -4085,6 +4089,7 @@ and encode_expr e =
 				18, [loop e;enc_array (List.map (fun (v,t,e) ->
 					enc_obj [
 						"name",encode_placed_name v;
+						"name_pos",encode_pos (pos v);
 						"type",encode_ctype t;
 						"expr",loop e
 					]
@@ -4223,8 +4228,8 @@ let decode_import_mode t =
 
 let decode_import t = (List.map (fun o -> ((dec_string (field o "name")), (decode_pos (field o "pos")))) (dec_array (field t "path")), decode_import_mode (field t "mode"))
 
-let decode_placed_name v =
-	dec_string v,null_pos
+let decode_placed_name vp v =
+	dec_string v,(match vp with VAbstract (APos p) -> p | _ -> null_pos)
 
 let rec decode_path t =
 	{
@@ -4246,7 +4251,7 @@ and decode_tparams = function
 
 and decode_tparam_decl v =
 	{
-		tp_name = decode_placed_name (field v "name");
+		tp_name = decode_placed_name (field v "name_pos") (field v "name");
 		tp_constraints = (match field v "constraints" with VNull -> [] | a -> List.map decode_ctype (dec_array a));
 		tp_params = decode_tparams (field v "params");
 		tp_meta = decode_meta_content (field v "meta");
@@ -4256,7 +4261,7 @@ and decode_fun v =
 	{
 		f_params = decode_tparams (field v "params");
 		f_args = List.map (fun o ->
-			decode_placed_name (field o "name"),
+			decode_placed_name (field o "name_pos") (field o "name"),
 			(match field o "opt" with VNull -> false | v -> dec_bool v),
 			decode_meta_content (field o "meta"),
 			opt decode_ctype (field o "type"),
@@ -4296,7 +4301,7 @@ and decode_field v =
 			raise Invalid_expr
 	in
 	{
-		cff_name = decode_placed_name (field v "name");
+		cff_name = decode_placed_name (field v "name_pos") (field v "name");
 		cff_doc = opt dec_string (field v "doc");
 		cff_pos = decode_pos (field v "pos");
 		cff_kind = fkind;
@@ -4351,7 +4356,7 @@ let rec decode_expr v =
 			EUnop (decode_unop op,(if f then Postfix else Prefix),loop e)
 		| 10, [vl] ->
 			EVars (List.map (fun v ->
-				((dec_string (field v "name"),p),opt decode_ctype (field v "type"),opt loop (field v "expr"))
+				((decode_placed_name (field v "name_pos") (field v "name")),opt decode_ctype (field v "type"),opt loop (field v "expr"))
 			) (dec_array vl))
 		| 11, [fname;f] ->
 			EFunction (opt dec_string fname,decode_fun f)
@@ -4372,7 +4377,7 @@ let rec decode_expr v =
 			ESwitch (loop e,cases,opt decode_null_expr eo)
 		| 18, [e;catches] ->
 			let catches = List.map (fun c ->
-				((dec_string (field c "name"),p),(decode_ctype (field c "type")),loop (field c "expr"))
+				((decode_placed_name (field c "name_pos") (field c "name")),(decode_ctype (field c "type")),loop (field c "expr"))
 			) (dec_array catches) in
 			ETry (loop e, catches)
 		| 19, [e] ->
@@ -4987,7 +4992,7 @@ let rec decode_texpr v =
 
 let decode_type_def v =
 	let pack = List.map dec_string (dec_array (field v "pack")) in
-	let name = decode_placed_name (field v "name") in
+	let name = decode_placed_name (field v "name_pos") (field v "name") in
 	let meta = decode_meta_content (field v "meta") in
 	let pos = decode_pos (field v "pos") in
 	let isExtern = (match field v "isExtern" with VNull -> false | v -> dec_bool v) in