Browse Source

[macro] don't lose type path positions in decoding

closes #7606
Simon Krajewski 6 years ago
parent
commit
9e365cedc6
1 changed files with 4 additions and 2 deletions
  1. 4 2
      src/macro/macroApi.ml

+ 4 - 2
src/macro/macroApi.ml

@@ -274,11 +274,12 @@ let encode_import (path,mode) =
 let encode_placed_name (s,p) =
 let encode_placed_name (s,p) =
 	encode_string s
 	encode_string s
 
 
-let rec encode_path (t,_) =
+let rec encode_path (t,p) =
 	let fields = [
 	let fields = [
 		"pack", encode_array (List.map encode_string t.tpackage);
 		"pack", encode_array (List.map encode_string t.tpackage);
 		"name", encode_string t.tname;
 		"name", encode_string t.tname;
 		"params", encode_array (List.map encode_tparam t.tparams);
 		"params", encode_array (List.map encode_tparam t.tparams);
+		"pos", encode_pos p;
 	] in
 	] in
 	encode_obj (match t.tsub with
 	encode_obj (match t.tsub with
 		| None -> fields
 		| None -> fields
@@ -568,12 +569,13 @@ let decode_opt_array f v =
 	if v = vnull then [] else List.map f (decode_array v)
 	if v = vnull then [] else List.map f (decode_array v)
 
 
 let rec decode_path t =
 let rec decode_path t =
+	let p = field t "pos" in
 	{
 	{
 		tpackage = List.map decode_string (decode_array (field t "pack"));
 		tpackage = List.map decode_string (decode_array (field t "pack"));
 		tname = decode_string (field t "name");
 		tname = decode_string (field t "name");
 		tparams = decode_opt_array decode_tparam (field t "params");
 		tparams = decode_opt_array decode_tparam (field t "params");
 		tsub = opt decode_string (field t "sub");
 		tsub = opt decode_string (field t "sub");
-	},Globals.null_pos
+	},if p = vnull then Globals.null_pos else decode_pos p
 
 
 and decode_tparam v =
 and decode_tparam v =
 	match decode_enum v with
 	match decode_enum v with