-- That is, without sugar:
return {tag="String", {tag="Index", {tag="Splice", id[1] },
{tag="Number", 1 } } }
- else error ("Not an identifier: "..table.tostring(id)) end
+ else error ("Identifier expected: "..table.tostring(id)) end
end
--------------------------------------------------------------------------------
local function funcdef_builder(x)
local name, method, func = x[1], x[2], x[3]
if method then
- name = { tag="Index", name, method }
+ name = { tag="Index", name, method, lineinfo = {
+ first = name.lineinfo.first,
+ last = method.lineinfo.last } }
_G.table.insert (func[1], 1, {tag="Id", "self"})
end
- return { tag="Set", {name}, {func} }
+ local r = { tag="Set", {name}, {func} }
+ r[1].lineinfo = name.lineinfo
+ r[2].lineinfo = func.lineinfo
+ return r
end
if lx:is_keyword (lx:peek(), "[") then return bracket_field (lx) end
local e = _expr (lx)
if lx:is_keyword (lx:peek(), "=") then
- if e.tag ~= 'Id' then _G.table.print(e,80) end
- assert (e.tag == "Id", "Identifier required on the left of = in table")
- lx:next(); return {tag="Pair", {tag="String", e[1]}, _expr(lx)}
+ lx:next(); -- skip the "="
+ local key = id2string(e)
+ local val = _expr(lx)
+ local r = { tag="Pair", key, val }
+ r.lineinfo = { first = key.lineinfo.first, last = val.lineinfo.last }
+ return r
else return e end
end