summaryrefslogtreecommitdiff
path: root/tex/context/base/strc-ref.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/strc-ref.lua')
-rw-r--r--tex/context/base/strc-ref.lua35
1 files changed, 17 insertions, 18 deletions
diff --git a/tex/context/base/strc-ref.lua b/tex/context/base/strc-ref.lua
index 3379bbbdb..ee32353f0 100644
--- a/tex/context/base/strc-ref.lua
+++ b/tex/context/base/strc-ref.lua
@@ -9,10 +9,11 @@ if not modules then modules = { } end modules ['strc-ref'] = {
local format, find, gmatch, match, concat = string.format, string.find, string.gmatch, string.match, table.concat
local lpegmatch, lpegP, lpegCs = lpeg.match, lpeg.P, lpeg.Cs
local texcount, texsetcount = tex.count, tex.setcount
-local allocate, mark = utilities.storage.allocate, utilities.storage.mark
-local setmetatable, rawget = setmetatable, rawget
+local rawget = rawget
-local allocate = utilities.storage.allocate
+local allocate = utilities.storage.allocate
+local mark = utilities.storage.mark
+local setmetatableindex = table.setmetatableindex
local trace_referencing = false trackers.register("structures.referencing", function(v) trace_referencing = v end)
@@ -44,8 +45,8 @@ references.defined = references.defined or allocate()
local defined = references.defined
local derived = allocate()
-local specials = { } -- allocate()
-local runners = { } -- allocate()
+local specials = allocate()
+local runners = allocate()
local internals = allocate()
local exporters = allocate()
local imported = allocate()
@@ -86,15 +87,14 @@ function references.registerfinalizer(func) -- we could use a token register ins
end
local function initializer() -- can we use a tobesaved as metatable for collected?
- tobesaved = mark(references.tobesaved)
- collected = mark(references.collected)
+ tobesaved = references.tobesaved
+ collected = references.collected
for i=1,#initializers do
initializers[i](tobesaved,collected)
end
end
local function finalizer()
- -- tobesaved = mark(references.tobesaved)
for i=1,#finalizers do
finalizers[i](tobesaved)
end
@@ -105,10 +105,9 @@ job.register('structures.references.collected', tobesaved, initializer, finalize
local maxreferred = 1
local function initializer() -- can we use a tobesaved as metatable for collected?
- tobereferred = mark(references.tobereferred)
- referred = mark(references.referred)
-
- function get(t,n) -- catch sparse, a bit slow but who cares
+ tobereferred = references.tobereferred
+ referred = references.referred
+ local function get(t,n) -- catch sparse, a bit slow but who cares
for i=n,1,-1 do -- we could make a tree ... too much work
local p = rawget(t,i)
if p then
@@ -116,7 +115,7 @@ local function initializer() -- can we use a tobesaved as metatable for collecte
end
end
end
- setmetatable(referred, { __index = get })
+ setmetatableindex(referred, get)
end
local function finalizer() -- make sparse
@@ -133,6 +132,8 @@ local function finalizer() -- make sparse
end
end
+job.register('structures.references.referred', tobereferred, initializer, finalizer)
+
function references.referredpage(n)
return referred[n] or referred[n] or texcount.realpageno
end
@@ -146,8 +147,6 @@ function references.registerpage(n)
end
end
-job.register('structures.references.referred', tobereferred, initializer, finalizer)
-
-- todo: delay split till later as in destinations we split anyway
local orders, lastorder = { }, 0
@@ -305,7 +304,7 @@ local function register_from_lists(collected,derived)
if kind and realpage then
local d = derived[prefix] if not d then d = { } derived[prefix] = d end
local t = { kind, i }
- for s in gmatch(reference,"[^, ]+") do
+ for s in gmatch(reference,"%s*([^,]+)") do
if trace_referencing then
report_references("list entry %s provides %s reference '%s' on realpage %s",i,kind,s,realpage)
end
@@ -1109,7 +1108,7 @@ set.n = n
bug = bug or var.error
set[i] = var
end
- references.currentset = set
+ references.currentset = mark(set) -- mark, else in api doc
--~ table.print(set,tostring(bug))
return set, bug
end
@@ -1440,7 +1439,7 @@ end
local plist
-function realpageofpage(p)
+local function realpageofpage(p)
if not plist then
local pages = structures.pages.collected
plist = { }