From f643ff73febab15c76284d6e3af33c152cd65190 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Sun, 3 Jul 2016 08:50:07 -0500 Subject: [PATCH] Fix Cartesian.exprresolve for change in conditional parsing Ref. #15524 --- base/cartesian.jl | 6 +++--- test/cartesian.jl | 3 +++ test/choosetests.jl | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 test/cartesian.jl diff --git a/base/cartesian.jl b/base/cartesian.jl index 16d20243c574d..2d1065b955953 100644 --- a/base/cartesian.jl +++ b/base/cartesian.jl @@ -321,7 +321,7 @@ end function lreplace!(ex::Expr, r::LReplace) # Curly-brace notation, which acts like parentheses if ex.head == :curly && length(ex.args) == 2 && isa(ex.args[1], Symbol) && endswith(string(ex.args[1]), "_") - excurly = Base.Cartesian.exprresolve(lreplace!(ex.args[2], r)) + excurly = exprresolve(lreplace!(ex.args[2], r)) if isa(excurly, Number) return Symbol(ex.args[1],excurly) else @@ -369,8 +369,8 @@ exprresolve_arith(arg) = false, 0 exprresolve_conditional(b::Bool) = true, b function exprresolve_conditional(ex::Expr) - if ex.head == :comparison && isa(ex.args[1], Number) && isa(ex.args[3], Number) - return true, exprresolve_cond_dict[ex.args[2]](ex.args[1], ex.args[3]) + if ex.head == :call && ex.args[1] ∈ keys(exprresolve_cond_dict) && isa(ex.args[2], Number) && isa(ex.args[3], Number) + return true, exprresolve_cond_dict[ex.args[1]](ex.args[2], ex.args[3]) end false, false end diff --git a/test/cartesian.jl b/test/cartesian.jl new file mode 100644 index 0000000000000..907905aff13b3 --- /dev/null +++ b/test/cartesian.jl @@ -0,0 +1,3 @@ +@test Base.Cartesian.exprresolve(:(1 + 3)) == 4 +ex = Base.Cartesian.exprresolve(:(if 5 > 4; :x; else :y; end)) +@test ex.args[2] == QuoteNode(:x) diff --git a/test/choosetests.jl b/test/choosetests.jl index 6a9fb13463df7..9818d9acbeb12 100644 --- a/test/choosetests.jl +++ b/test/choosetests.jl @@ -33,7 +33,7 @@ function choosetests(choices = []) "markdown", "base64", "serialize", "misc", "threads", "enums", "cmdlineargs", "i18n", "workspace", "libdl", "int", "checked", "intset", "floatfuncs", "compile", "parallel", "inline", - "boundscheck", "error", "ambiguous", "offsetarray" + "boundscheck", "error", "ambiguous", "offsetarray", "cartesian" ] if Base.USE_GPL_LIBS