Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor expression handling #292

Merged
merged 14 commits into from
Sep 11, 2021
Prev Previous commit
Next Next commit
argument order membernames
pdeffebach committed Aug 23, 2021

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 7a4c3881ed5cc369cfdcd10fc654f3fd2a27dab1
24 changes: 12 additions & 12 deletions src/parsing.jl
Original file line number Diff line number Diff line change
@@ -26,12 +26,12 @@ function get_column_expr(e::Expr)
end
get_column_expr(x::QuoteNode) = x

mapexpr(f, e) = Expr(e.head, map(f, e.args)...)
mapexpr(f, e) = Expr(e.head, Base.Generator(f, e.args)...)

replace_syms!(x, membernames) = x
replace_syms!(q::QuoteNode, membernames) = addkey!(membernames, q)
replace_syms!(membernames, x) = x
replace_syms!(membernames, q::QuoteNode) = addkey!(membernames, q)

function replace_syms!(e::Expr, membernames)
function replace_syms!(membernames, e::Expr)
if onearg(e, :^)
return e.args[2]
end
@@ -40,18 +40,18 @@ function replace_syms!(e::Expr, membernames)
if col !== nothing
return addkey!(membernames, col)
elseif e.head == :.
return replace_dotted!(e, membernames)
return replace_dotted!(membernames, e)
else
return mapexpr(x -> replace_syms!(x, membernames), e)
return mapexpr(x -> replace_syms!(membernames, x), e)
end
end

protect_replace_syms!(e, membernames) = e
protect_replace_syms!(e::Expr, membernames) = replace_syms!(e, membernames)
protect_replace_syms!(membernames, e) = e
protect_replace_syms!(membernames, e::Expr) = replace_syms!(membernames, e)

function replace_dotted!(e, membernames)
x_new = replace_syms!(e.args[1], membernames)
y_new = protect_replace_syms!(e.args[2], membernames)
function replace_dotted!(membernames, e)
x_new = replace_syms!(membernames, e.args[1])
y_new = protect_replace_syms!(membernames, e.args[2])
Expr(:., x_new, y_new)
end

@@ -202,7 +202,7 @@ function get_source_fun(function_expr; exprflags = deepcopy(DEFAULT_FLAGS))
else
membernames = Dict{Any, Symbol}()

body = replace_syms!(function_expr, membernames)
body = replace_syms!(membernames, function_expr)
source = :(DataFramesMeta.make_source_concrete($(Expr(:vect, keys(membernames)...))))
inputargs = Expr(:tuple, values(membernames)...)
fun = quote