浏览代码

token cache

Simon Krajewski 5 月之前
父节点
当前提交
4faa211c69
共有 2 个文件被更改,包括 4 次插入23 次删除
  1. 3 11
      src/syntax/parser.ml
  2. 1 12
      src/syntax/parserEntry.ml

+ 3 - 11
src/syntax/parser.ml

@@ -89,6 +89,7 @@ type parser_ctx = {
 	code : Sedlexing.lexbuf;
 	mutable had_resume : bool;
 	delayed_syntax_completion : syntax_completion_on option ref;
+	cache : (token * pos) DynArray.t;
 	config : parser_config;
 }
 
@@ -137,6 +138,7 @@ let create_context lexer_ctx config in_macro code = {
 	code;
 	had_resume = false;
 	delayed_syntax_completion = ref None;
+	cache = DynArray.create ();
 	config;
 }
 
@@ -165,19 +167,9 @@ let syntax_completion kind so p =
 
 let error m p = raise (Error (m,p))
 
-module TokenCache = struct
-	let cache = ref (DynArray.create ())
-	let add (token : (token * pos)) = DynArray.add (!cache) token
-	let get index = DynArray.get (!cache) index
-	let clear () =
-		let old_cache = !cache in
-		cache := DynArray.create ();
-		(fun () -> cache := old_cache)
-end
-
 let last_token ctx s =
 	let n = Stream.count s in
-	TokenCache.get (if n = 0 then 0 else n - 1)
+	DynArray.get ctx.cache (if n = 0 then 0 else n - 1)
 
 let last_pos ctx s = pos (last_token ctx s)
 

+ 1 - 12
src/syntax/parserEntry.ml

@@ -214,12 +214,6 @@ let parse config entry lctx code file =
 	let in_macro = Define.defined defines Define.Macro in
 	let ctx = Parser.create_context lctx config in_macro code in
 	let entry = entry ctx in
-	let restore_cache = TokenCache.clear () in
-	let restore =
-		(fun () ->
-			restore_cache ();
-		)
-	in
 	Lexer.skip_header code;
 
 	let sharp_error s p =
@@ -339,7 +333,7 @@ let parse config entry lctx code file =
 	in
 	let s = Stream.from (fun _ ->
 		let t = next_token() in
-		TokenCache.add t;
+		DynArray.add ctx.cache t;
 		Some t
 	) in
 	try
@@ -353,7 +347,6 @@ let parse config entry lctx code file =
 				error (Unexpected tok) p (* This isn't *)
 		end;
 		let was_display_file = ctx.config.in_display_file in
-		restore();
 		let pdi = {
 			pd_errors = List.rev !(ctx.syntax_errors);
 			pd_dead_blocks = dbc#get_dead_blocks;
@@ -372,11 +365,7 @@ let parse config entry lctx code file =
 		| Stream.Error _
 		| Stream.Failure ->
 			let last = (match Stream.peek s with None -> last_token ctx s | Some t -> t) in
-			restore();
 			error (Unexpected (fst last)) (pos last)
-		| e ->
-			restore();
-			raise e
 
 let parse_string config entry s p error inlined =
 	let old_display = display_position#get in