Skip to content

Commit d06706f

Browse files
committed
remove generated rect method
1 parent ce718d9 commit d06706f

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

src/primitives/rectangles.jl

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,11 @@ Rect constructor for indidually specified intervals.
7171
e.g. Rect(0,0,1,2) has origin == Vec(0,0) and
7272
width == Vec(1,2)
7373
"""
74-
@generated function Rect(vals::Number...)
75-
# Generated so we get goodish codegen on each signature
76-
n = length(vals)
77-
@assert iseven(n)
78-
mid = div(n, 2)
79-
v1 = Expr(:call, :Vec)
80-
v2 = Expr(:call, :Vec)
81-
# TODO this can be inbounds
82-
append!(v1.args, [:(vals[$i]) for i in 1:mid])
83-
append!(v2.args, [:(vals[$i]) for i in (mid + 1):length(vals)])
84-
return Expr(:call, :Rect, v1, v2)
74+
function Rect(vals::Vararg{Number, N}) where {N}
75+
M, r = fldmod(N, 2)
76+
(r == 0) || throw(ArgumentError("number of arguments must be even"))
77+
origin, widths = ntuple(i -> vals[i], M), ntuple(i -> vals[i+M], M)
78+
return Rect(Vec(origin), Vec(widths))
8579
end
8680

8781
Rect3(a::Vararg{Number,6}) = Rect3(Vec{3}(a[1], a[2], a[3]), Vec{3}(a[4], a[5], a[6]))

test/geometrytypes.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,4 +286,9 @@ end
286286
rect2 = Rect(0.0, 0.0, 2.0, 3.0)
287287
@test finishes(rect1, rect2)
288288

289+
rect1 = @inferred Rect(1, 2, 3, 4, 5, 6, 7, 8)
290+
rect2 = Rect(Vec(1, 2, 3, 4), Vec(5, 6, 7, 8))
291+
@test rect1 == rect2
292+
293+
@test_throws ArgumentError Rect(1, 2, 3)
289294
end

0 commit comments

Comments
 (0)