|
|
|
@ -16,8 +16,7 @@ function symbol_map end |
|
|
|
|
|
|
|
|
|
|
|
function enumx(_module_, args) |
|
|
|
function enumx(_module_, args) |
|
|
|
T = :T |
|
|
|
T = :T |
|
|
|
if length(args) > 1 && args[1] isa Expr && args[1].head === :(=) && |
|
|
|
if length(args) > 1 && Meta.isexpr(args[1], :(=), 2) && args[1].args[1] === :T && |
|
|
|
length(args[1].args) == 2 && args[1].args[1] === :T && |
|
|
|
|
|
|
|
(args[1].args[2] isa Symbol || args[1].args[2] isa QuoteNode) |
|
|
|
(args[1].args[2] isa Symbol || args[1].args[2] isa QuoteNode) |
|
|
|
T = args[1].args[2] |
|
|
|
T = args[1].args[2] |
|
|
|
T isa QuoteNode && (T = T.value) |
|
|
|
T isa QuoteNode && (T = T.value) |
|
|
|
@ -27,15 +26,14 @@ function enumx(_module_, args) |
|
|
|
if name isa Symbol |
|
|
|
if name isa Symbol |
|
|
|
modname = name |
|
|
|
modname = name |
|
|
|
baseT = Int32 |
|
|
|
baseT = Int32 |
|
|
|
elseif name isa Expr && name.head == :(::) && name.args[1] isa Symbol && |
|
|
|
elseif Meta.isexpr(name, :(::), 2) && name.args[1] isa Symbol |
|
|
|
length(name.args) == 2 |
|
|
|
|
|
|
|
modname = name.args[1] |
|
|
|
modname = name.args[1] |
|
|
|
baseT = Core.eval(_module_, name.args[2]) |
|
|
|
baseT = Core.eval(_module_, name.args[2]) |
|
|
|
else |
|
|
|
else |
|
|
|
panic("invalid EnumX.@enumx type specification: $(name).") |
|
|
|
panic("invalid EnumX.@enumx type specification: $(name).") |
|
|
|
end |
|
|
|
end |
|
|
|
name = modname |
|
|
|
name = modname |
|
|
|
if length(args) == 1 && args[1] isa Expr && args[1].head === :block |
|
|
|
if length(args) == 1 && Meta.isexpr(args[1], :block) |
|
|
|
syms = args[1].args |
|
|
|
syms = args[1].args |
|
|
|
else |
|
|
|
else |
|
|
|
syms = args |
|
|
|
syms = args |
|
|
|
@ -50,7 +48,7 @@ function enumx(_module_, args) |
|
|
|
panic("value overflow for Enum $(modname): $(modname).$(s) = $(next).") |
|
|
|
panic("value overflow for Enum $(modname): $(modname).$(s) = $(next).") |
|
|
|
end |
|
|
|
end |
|
|
|
sym = s |
|
|
|
sym = s |
|
|
|
elseif s isa Expr && s.head === :(=) && s.args[1] isa Symbol && length(s.args) == 2 |
|
|
|
elseif Meta.isexpr(s, :(=), 2) && s.args[1] isa Symbol |
|
|
|
if s.args[2] isa Symbol && |
|
|
|
if s.args[2] isa Symbol && |
|
|
|
(i = findfirst(x -> x.first === s.args[2], name_value_map); i !== nothing) |
|
|
|
(i = findfirst(x -> x.first === s.args[2], name_value_map); i !== nothing) |
|
|
|
@assert name_value_map[i].first === s.args[2] |
|
|
|
@assert name_value_map[i].first === s.args[2] |
|
|
|
|