Skip to content

Instantly share code, notes, and snippets.

@greggirwin
Created June 22, 2016 16:04
Show Gist options
  • Save greggirwin/55312e55b3f879ae6c3f4f00a7597b51 to your computer and use it in GitHub Desktop.
Save greggirwin/55312e55b3f879ae6c3f4f00a7597b51 to your computer and use it in GitHub Desktop.
Red/System SIGN? function
sign?*: func [
check? [logic!]
return: [red-integer!]
/local
i [red-integer!]
f [red-float!]
res [red-logic!]
ret [integer!]
][
#typecheck -sign?- ;-- `sign?` would be replaced by lexer
res: as red-logic! stack/arguments
ret: 0
switch TYPE_OF(res) [ ;@@ Add money! pair!
TYPE_INTEGER [
i: as red-integer! res
case [
i/value > 0 [ret: 1]
i/value < 0 [ret: -1]
i/value = 0 [ret: 0]
]
]
TYPE_FLOAT [
f: as red-float! res
case [
f/value > 0.0 [ret: 1]
f/value < 0.0 [ret: -1]
f/value = 0.0 [ret: 0]
]
]
TYPE_TIME [
f: as red-float! res
case [
f/value > 0.0 [ret: 1]
f/value < 0.0 [ret: -1]
f/value = 0.0 [ret: 0]
]
]
default [ERR_EXPECT_ARGUMENT((TYPE_OF(res)) 1)]
]
integer/box ret
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment