diff --git a/src/nature/species.jl b/src/nature/species.jl index 433fe3124c1423c67196f8496beed69dc6ee35da..9cef46320f807d64beadaca1e137e89fd0512758 100644 --- a/src/nature/species.jl +++ b/src/nature/species.jl @@ -3,33 +3,33 @@ ### This file implements the macros needed for the species DSL. ### -#TODO configure species traits via a separate TOML file +#XXX configure species traits via a separate TOML file? ##TODO replace the current registerspecies() function registerspecies(speciesdict) - speciesdict["testphase"]() + println(speciesdict) + processeddict = Dict{String,Any}() + for k in keys(speciesdict) + processeddict[string(k)] = speciesdict[k] + end + processeddict["testphase"]() end +##TODO docstring macro species(name, body) - speciesdict = gensym() + speciesfun = gensym() quote - $speciesdict = Dict{String, Any}("name"=>string($(QuoteNode(name)))) - for line in $(body.args) - (typeof(line) == LineNumberNode) && continue - if line.head == :macrocall - line = macroexpand($(__module__), line) - line.args[2] = Core.eval($(__module__), line.args[2]) - end - if line.head == :(=) - $speciesdict[string(line.args[1])] = line.args[2] - end + Core.@__doc__ $speciesfun = function() + $(esc(:name)) = string($(QuoteNode(name))) + $(esc(body)) + return Base.@locals end - registerspecies($speciesdict) + registerspecies($speciesfun()) end end +##TODO docstring macro phase(name, body) - #:($(esc(name)) = function() $body end) #for testing :($(esc(name)) = function(animal::Animal, model::AgentBasedModel) $body end) + #:($(esc(name)) = function() $body end) #for testing end -