From d06706ffd9dc160a396e5026ef44282a12f36b8b Mon Sep 17 00:00:00 2001 From: piever Date: Sat, 22 Jan 2022 19:36:39 +0100 Subject: [PATCH] remove generated rect method --- src/primitives/rectangles.jl | 16 +++++----------- test/geometrytypes.jl | 5 +++++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/primitives/rectangles.jl b/src/primitives/rectangles.jl index 7c24c444..79e1e14b 100644 --- a/src/primitives/rectangles.jl +++ b/src/primitives/rectangles.jl @@ -71,17 +71,11 @@ Rect constructor for indidually specified intervals. e.g. Rect(0,0,1,2) has origin == Vec(0,0) and width == Vec(1,2) """ -@generated function Rect(vals::Number...) - # Generated so we get goodish codegen on each signature - n = length(vals) - @assert iseven(n) - mid = div(n, 2) - v1 = Expr(:call, :Vec) - v2 = Expr(:call, :Vec) - # TODO this can be inbounds - append!(v1.args, [:(vals[$i]) for i in 1:mid]) - append!(v2.args, [:(vals[$i]) for i in (mid + 1):length(vals)]) - return Expr(:call, :Rect, v1, v2) +function Rect(vals::Vararg{Number, N}) where {N} + M, r = fldmod(N, 2) + (r == 0) || throw(ArgumentError("number of arguments must be even")) + origin, widths = ntuple(i -> vals[i], M), ntuple(i -> vals[i+M], M) + return Rect(Vec(origin), Vec(widths)) end Rect3(a::Vararg{Number,6}) = Rect3(Vec{3}(a[1], a[2], a[3]), Vec{3}(a[4], a[5], a[6])) diff --git a/test/geometrytypes.jl b/test/geometrytypes.jl index 8985b512..b264c406 100644 --- a/test/geometrytypes.jl +++ b/test/geometrytypes.jl @@ -286,4 +286,9 @@ end rect2 = Rect(0.0, 0.0, 2.0, 3.0) @test finishes(rect1, rect2) + rect1 = @inferred Rect(1, 2, 3, 4, 5, 6, 7, 8) + rect2 = Rect(Vec(1, 2, 3, 4), Vec(5, 6, 7, 8)) + @test rect1 == rect2 + + @test_throws ArgumentError Rect(1, 2, 3) end