@@ -7,8 +7,8 @@ struct Static{N} <: Integer
77 Static {N} () where {N} = new {N::Int} ()
88end
99
10- const Zero = Static {0} ()
11- const One = Static {1} ()
10+ const Zero = Static{0 }
11+ const One = Static{1 }
1212
1313Base. @pure Static (N:: Int ) = Static {N} ()
1414Static (N:: Integer ) = Static (convert (Int, N))
@@ -38,43 +38,43 @@ Base.promote_rule(::Type{<:Static}, ::Type{<:Static}) = Int
3838Base.:(% )(:: Static{N} , :: Type{Integer} ) where {N} = N
3939
4040Base. eltype (:: Type{T} ) where {T<: Static } = Int
41- Base. iszero (:: Static{0} ) = true
41+ Base. iszero (:: Zero ) = true
4242Base. iszero (:: Static ) = false
43- Base. isone (:: Static{1} ) = true
43+ Base. isone (:: One ) = true
4444Base. isone (:: Static ) = false
45- Base. zero (:: Type{T} ) where {T<: Static } = Zero
46- Base. one (:: Type{T} ) where {T<: Static } = One
45+ Base. zero (:: Type{T} ) where {T<: Static } = Zero ()
46+ Base. one (:: Type{T} ) where {T<: Static } = One ()
4747
4848for T = [:Real , :Rational , :Integer ]
4949 @eval begin
50- @inline Base.:(+ )(i:: $T , :: Static{0} ) = i
50+ @inline Base.:(+ )(i:: $T , :: Zero ) = i
5151 @inline Base.:(+ )(i:: $T , :: Static{M} ) where {M} = i + M
52- @inline Base.:(+ )(:: Static{0} , i:: $T ) = i
52+ @inline Base.:(+ )(:: Zero , i:: $T ) = i
5353 @inline Base.:(+ )(:: Static{M} , i:: $T ) where {M} = M + i
54- @inline Base.:(- )(i:: $T , :: Static{0} ) = i
54+ @inline Base.:(- )(i:: $T , :: Zero ) = i
5555 @inline Base.:(- )(i:: $T , :: Static{M} ) where {M} = i - M
56- @inline Base.:(* )(i:: $T , :: Static{0} ) = Static {0} ()
57- @inline Base.:(* )(i:: $T , :: Static{1} ) = i
56+ @inline Base.:(* )(i:: $T , :: Zero ) = Zero ()
57+ @inline Base.:(* )(i:: $T , :: One ) = i
5858 @inline Base.:(* )(i:: $T , :: Static{M} ) where {M} = i * M
59- @inline Base.:(* )(:: Static{0} , i:: $T ) = Static {0} ()
60- @inline Base.:(* )(:: Static{1} , i:: $T ) = i
59+ @inline Base.:(* )(:: Zero , i:: $T ) = Zero ()
60+ @inline Base.:(* )(:: One , i:: $T ) = i
6161 @inline Base.:(* )(:: Static{M} , i:: $T ) where {M} = M * i
6262 end
6363end
64- @inline Base.:(+ )(:: Static{0} , :: Static{0} ) = Static {0} ()
65- @inline Base.:(+ )(:: Static{0} , :: Static{M} ) where {M} = Static {M} ()
66- @inline Base.:(+ )(:: Static{M} , :: Static{0} ) where {M} = Static {M} ()
64+ @inline Base.:(+ )(:: Zero , :: Zero ) = Zero ()
65+ @inline Base.:(+ )(:: Zero , :: Static{M} ) where {M} = Static {M} ()
66+ @inline Base.:(+ )(:: Static{M} , :: Zero ) where {M} = Static {M} ()
6767
68- @inline Base.:(- )(:: Static{M} , :: Static{0} ) where {M} = Static {M} ()
68+ @inline Base.:(- )(:: Static{M} , :: Zero ) where {M} = Static {M} ()
6969
70- @inline Base.:(* )(:: Static{0} , :: Static{0} ) = Static {0} ()
71- @inline Base.:(* )(:: Static{1} , :: Static{0} ) = Static {0} ()
72- @inline Base.:(* )(:: Static{0} , :: Static{1} ) = Static {0} ()
73- @inline Base.:(* )(:: Static{1} , :: Static{1} ) = Static {1} ()
74- @inline Base.:(* )(:: Static{M} , :: Static{0} ) where {M} = Static {0} ()
75- @inline Base.:(* )(:: Static{0} , :: Static{M} ) where {M} = Static {0} ()
76- @inline Base.:(* )(:: Static{M} , :: Static{1} ) where {M} = Static {M} ()
77- @inline Base.:(* )(:: Static{1} , :: Static{M} ) where {M} = Static {M} ()
70+ @inline Base.:(* )(:: Zero , :: Zero ) = Zero ()
71+ @inline Base.:(* )(:: One , :: Zero ) = Zero ()
72+ @inline Base.:(* )(:: Zero , :: One ) = Zero ()
73+ @inline Base.:(* )(:: One , :: One ) = One ()
74+ @inline Base.:(* )(:: Static{M} , :: Zero ) where {M} = Zero ()
75+ @inline Base.:(* )(:: Zero , :: Static{M} ) where {M} = Zero ()
76+ @inline Base.:(* )(:: Static{M} , :: One ) where {M} = Static {M} ()
77+ @inline Base.:(* )(:: One , :: Static{M} ) where {M} = Static {M} ()
7878for f ∈ [:(+ ), :(- ), :(* ), :(/ ), :(÷ ), :(% ), :(<< ), :(>> ), :(>>> ), :(& ), :(| ), :(⊻ )]
7979 @eval @generated Base.$ f (:: Static{M} , :: Static{N} ) where {M,N} = Expr (:call , Expr (:curly , :Static , $ f (M, N)))
8080end
0 commit comments