Skip to content

Commit

Permalink
workaround for enums with two names for one value
Browse files Browse the repository at this point in the history
  • Loading branch information
visr committed Oct 6, 2017
1 parent cda8331 commit 4e18317
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/wrap_c.jl
Original file line number Diff line number Diff line change
Expand Up @@ -381,9 +381,21 @@ function wrap(context::WrapContext, expr_buf::OrderedDict, cursor::EnumDecl; use

enum_expr = :(@enum($enumname::$_int))
expr_buf[enumname] = ExprUnit(enum_expr)
val2name = Dict{_int, Symbol}()
for (name, value) in name_values
# expr_buf[name] = enum_expr # TODO
push!(enum_expr.args, :($name = $value))
# since @enum Fruit apple=1 orange=2 kiwi=2
# throws ArgumentError: values for Enum Fruit are not unique
# we transform it into:
# @enum Fruit apple=1 orange=2
# const kiwi = orange
if value in keys(val2name)
firstname = val2name[value]
expr_buf[name] = ExprUnit(:(const $name = $firstname))
else
push!(enum_expr.args, :($name = $value))
val2name[value] = name
end
end
return
end
Expand Down

0 comments on commit 4e18317

Please sign in to comment.