From b60f53df0157dbbc112dab220deabe8d7767a38b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Reuh=20Fildadut?= Date: Sun, 16 Jan 2022 02:34:25 +0100 Subject: [PATCH] Improve variable redefinition error --- parser/preparser.lua | 8 +++++++- test/tests/define override.lua | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/parser/preparser.lua b/parser/preparser.lua index d8faa25..1784415 100644 --- a/parser/preparser.lua +++ b/parser/preparser.lua @@ -288,7 +288,13 @@ local function parse_line(line, state, namespace) if not exp then return nil, ("expected \"= expression\" after %q in definition line; at %s"):format(rem, line.source) end -- define identifier if state.functions[fqm] then return nil, ("trying to define variable %q, but a function with the same name exists; at %s"):format(fqm, line.source) end - if state.variables[fqm] then return nil, ("trying to define variable %q but it is already defined; at %s"):format(fqm, line.source) end + if state.variables[fqm] then + if state.variables[fqm].type == "pending definition" then + return nil, ("trying to define variable %q but it is already defined at %s; at %s"):format(fqm, state.variables[fqm].value.source, line.source) + else + return nil, ("trying to define variable %q but it is already defined; at %s"):format(fqm, line.source) + end + end r.fqm = fqm r.expression = exp state.variables[fqm] = { type = "pending definition", value = { expression = nil, source = r.source } } diff --git a/test/tests/define override.lua b/test/tests/define override.lua index a7527f7..0a6ae31 100644 --- a/test/tests/define override.lua +++ b/test/tests/define override.lua @@ -1,6 +1,6 @@ local _={} -_[1]={"error","trying to define variable \"define override.a\" but it is already defined; at test/tests/define override.ans:3"} +_[1]={"error","trying to define variable \"define override.a\" but it is already defined at test/tests/define override.ans:1; at test/tests/define override.ans:3"} return {_[1]} --[[ -{ "error", 'trying to define variable "define override.a" but it is already defined; at test/tests/define override.ans:3' } +{ "error", 'trying to define variable "define override.a" but it is already defined at test/tests/define override.ans:1; at test/tests/define override.ans:3' } ]]-- \ No newline at end of file