summaryrefslogtreecommitdiffstats
path: root/src/plugins/lua/metadata_exporter.lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-03-25 12:27:52 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-03-25 12:27:52 +0000
commit1498f2c5cbbc415c898621c233261ff5d41bc15d (patch)
tree25feb12267af755c27c40c12c2bcea87ad12b55f /src/plugins/lua/metadata_exporter.lua
parent9fa0dcd5b10ad58ed55575a5daf4326209a0787a (diff)
downloadrspamd-1498f2c5cbbc415c898621c233261ff5d41bc15d.tar.gz
rspamd-1498f2c5cbbc415c898621c233261ff5d41bc15d.zip
[Feature] Memoize LPEG grammars
Diffstat (limited to 'src/plugins/lua/metadata_exporter.lua')
-rw-r--r--src/plugins/lua/metadata_exporter.lua13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/plugins/lua/metadata_exporter.lua b/src/plugins/lua/metadata_exporter.lua
index 36e2a819a..8d0778ad5 100644
--- a/src/plugins/lua/metadata_exporter.lua
+++ b/src/plugins/lua/metadata_exporter.lua
@@ -128,16 +128,19 @@ local function get_general_metadata(task, flatten, no_content)
return r
end
+local template_grammar
local function simple_template(tmpl, keys)
local lpeg = require "lpeg"
- local var_lit = lpeg.P { lpeg.R("az") + lpeg.R("AZ") + lpeg.R("09") + "_" }
- local var = lpeg.P { (lpeg.P("$") / "") * ((var_lit^1) / keys) }
- local var_braced = lpeg.P { (lpeg.P("${") / "") * ((var_lit^1) / keys) * (lpeg.P("}") / "") }
+ if not template_grammar then
+ local var_lit = lpeg.P { lpeg.R("az") + lpeg.R("AZ") + lpeg.R("09") + "_" }
+ local var = lpeg.P { (lpeg.P("$") / "") * ((var_lit^1) / keys) }
+ local var_braced = lpeg.P { (lpeg.P("${") / "") * ((var_lit^1) / keys) * (lpeg.P("}") / "") }
- local rep = lpeg.Cs((var + var_braced + 1)^0)
+ template_grammar = lpeg.Cs((var + var_braced + 1)^0)
+ end
- return lpeg.match(rep, tmpl)
+ return lpeg.match(template_grammar, tmpl)
end
local formatters = {