瀏覽代碼

small fixes to display-mode=usage

Simon Krajewski 12 年之前
父節點
當前提交
b11f884022
共有 2 個文件被更改,包括 8 次插入4 次删除
  1. 6 2
      codegen.ml
  2. 2 2
      main.ml

+ 6 - 2
codegen.ml

@@ -1547,7 +1547,8 @@ let detect_usage com =
 				| TField(_,fa) ->
 					(match extract_field fa with
 						| Some cf when Meta.has Meta.Usage cf.cf_meta ->
-							usage := e.epos :: !usage;
+							let p = {e.epos with pmin = e.epos.pmax - (String.length cf.cf_name)} in
+							usage := p :: !usage;
 						| _ -> ());
 					Type.iter expr e
 				| _ -> Type.iter expr e
@@ -1559,7 +1560,10 @@ let detect_usage com =
 			List.iter field c.cl_ordered_fields;
 		| _ -> ()
 	) com.types;
-	let usage = List.sort (fun p1 p2 -> compare p1.pmin p2.pmin) !usage in
+	let usage = List.sort (fun p1 p2 ->
+		let c = compare p1.pfile p2.pfile in
+		if c <> 0 then c else compare p1.pmin p2.pmin
+	) !usage in
 	raise (Typecore.DisplayPosition usage)
 
 (* -------------------------------------------------------------------------- *)

+ 2 - 2
main.ml

@@ -1199,8 +1199,6 @@ try
 		com.main <- main;
 		com.types <- types;
 		com.modules <- modules;
-		if Common.defined_value_safe com Define.DisplayMode = "usage" then
-			Codegen.detect_usage com;
 		let filters = [
 			Codegen.Abstract.handle_abstract_casts tctx;
 			if com.foptimize then (fun e -> Optimizer.reduce_expression tctx (Optimizer.inline_constructors tctx e)) else Optimizer.sanitize tctx;
@@ -1212,6 +1210,8 @@ try
 		Codegen.post_process_end();
 		List.iter (fun f -> f()) (List.rev com.filters);
 		List.iter (Codegen.save_class_state tctx) com.types;
+		if Common.defined_value_safe com Define.DisplayMode = "usage" then
+			Codegen.detect_usage com;
 		let dce_mode = (try Common.defined_value com Define.Dce with _ -> "no") in
 		if not (!gen_as3 || dce_mode = "no" || Common.defined com Define.DocGen) then Dce.run com main (dce_mode = "full" && not !interp);
 		let type_filters = [