Skip to content

Commit eff05fb

Browse files
committed
Check for duplicate names during model parsing
1 parent efc835f commit eff05fb

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/systems/model_parsing.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,20 @@ function generate_var(a, varclass;
282282
var
283283
end
284284

285+
singular(sym) = last(string(sym)) == 's' ? Symbol(string(sym)[1:(end - 1)]) : sym
286+
287+
function check_name_uniqueness(dict, a, newvarclass)
288+
for varclass in [:variables, :parameters, :structural_parameters, :constants]
289+
if haskey(dict, varclass) && a in keys(dict[varclass])
290+
error("Cannot create a $(singular(newvarclass)) `$(a)` because there is already a $(singular(varclass)) with that name")
291+
end
292+
end
293+
end
294+
285295
function generate_var!(dict, a, varclass;
286296
indices::Union{Vector{UnitRange{Int}}, Nothing} = nothing,
287297
type = Real)
298+
check_name_uniqueness(dict, a, varclass)
288299
vd = get!(dict, varclass) do
289300
Dict{Symbol, Dict{Symbol, Any}}()
290301
end
@@ -302,6 +313,7 @@ function generate_var!(dict, a, b, varclass, mod;
302313
iv
303314
end
304315
@assert isequal(iv, prev_iv) "Multiple independent variables are used in the model"
316+
check_name_uniqueness(dict, a, varclass)
305317
vd = get!(dict, varclass) do
306318
Dict{Symbol, Dict{Symbol, Any}}()
307319
end

0 commit comments

Comments
 (0)