Revision e14aca658b50875eb86217eaadd1cbc34262bb3e authored by Andy Ferris on 09 December 2017, 14:33:29 UTC, committed by Andy Ferris on 20 December 2017, 13:12:21 UTC
Users should use `pairs(dict)` or `values(dict)` (or `keys(dict)`) to disambiguate iteration result.
1 parent 2d45ef5
osutils.jl
# This file is a part of Julia. License is MIT: https://julialang.org/license
"""
@static
Partially evaluate an expression at parse time.
For example, `@static Sys.iswindows() ? foo : bar` will evaluate `Sys.iswindows()` and insert
either `foo` or `bar` into the expression.
This is useful in cases where a construct would be invalid on other platforms,
such as a `ccall` to a non-existent function.
`@static if Sys.isapple() foo end` and `@static foo <&&,||> bar` are also valid syntax.
"""
macro static(ex)
if isa(ex, Expr)
@label loop
hd = ex.head
if hd ∈ (:if, :elseif, :&&, :||)
cond = eval(__module__, ex.args[1])
if xor(cond, hd === :||)
return esc(ex.args[2])
elseif length(ex.args) == 3
br = ex.args[3]
if br isa Expr && br.head === :elseif
ex = br
@goto loop
else
return esc(ex.args[3])
end
elseif hd ∈ (:if, :elseif)
return nothing
else
return cond
end
end
end
throw(ArgumentError("invalid @static macro"))
end
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...