* deprecate unsafeAddr; extend addr addr is now available for all addressable locations, unsafeAddr is deprecated and become an alias for addr * follow @Vindaar's advice * change the signature of addr * unsafeAddr => addr (stdlib) * Update changelog.md * unsafeAddr => addr (tests) * Revert "unsafeAddr => addr (stdlib)" This reverts commit ab83c99c507048a8396e636bf22d55fdd84d7d1c. * doc changes; thanks to @konsumlamm Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
50 lines
780 B
Nim
50 lines
780 B
Nim
discard """
|
|
output: '''
|
|
9.0
|
|
|
|
'''
|
|
"""
|
|
|
|
### bug #6773
|
|
|
|
{.emit: """ /*INCLUDESECTION*/
|
|
typedef double cimported;
|
|
|
|
cimported set1_imported(double x) {
|
|
return x;
|
|
}
|
|
|
|
"""}
|
|
|
|
type vfloat{.importc: "cimported".} = object
|
|
|
|
proc set1(a: float): vfloat {.importc: "set1_imported".}
|
|
|
|
converter scalar_to_vector(x: float): vfloat =
|
|
set1(x)
|
|
|
|
proc sqrt(x: vfloat): vfloat =
|
|
x
|
|
|
|
proc pow(x, y: vfloat): vfloat =
|
|
y
|
|
|
|
proc `^`(x: vfloat, exp: static[int]): vfloat =
|
|
when exp == 0:
|
|
1.0
|
|
else:
|
|
x
|
|
|
|
proc `^`(x: vfloat, exp: static[float]): vfloat =
|
|
when exp == 0.5:
|
|
sqrt(x)
|
|
else:
|
|
pow(x, exp)
|
|
|
|
proc `$`(x: vfloat): string =
|
|
let y = cast[ptr float](addr x)
|
|
# xxx not sure if intentional in this issue, but this returns ""
|
|
echo y[]
|
|
|
|
let x = set1(9.0)
|
|
echo x^0.5
|