summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/lace/lex.lua11
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/lace/lex.lua b/lib/lace/lex.lua
index 1085bed..af891af 100644
--- a/lib/lace/lex.lua
+++ b/lib/lace/lex.lua
@@ -15,7 +15,7 @@
local M = {}
-local function lex_one_line(line)
+local function _lex_one_line(line)
local r = {}
local acc = ""
local c
@@ -91,6 +91,15 @@ local function lex_one_line(line)
return r, warnings
end
+local lexer_line_cache = {}
+
+local function lex_one_line(line)
+ if not lexer_line_cache[line] then
+ lexer_line_cache[line] = { _lex_one_line(line) }
+ end
+ return lexer_line_cache[line][1], lexer_line_cache[line][2]
+end
+
--- Lexically analyse a ruleset.
-- @tparam string ruleset The ruleset to lex.
-- @tparam string sourcename The name of the source to go into debug info.