aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-11-23 01:25:40 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2018-05-09 23:04:11 +0800
commit63c81bc0d41c19b3c5e07e1956eb670082f3e385 (patch)
tree0ee9d2aec596f1efc9a8e3da6ecb89bca7c7bac9 /docs
parent2c3f57bec6eaa8d52a644f0b6abe7ab17b05a2ee (diff)
downloaddexon-solidity-63c81bc0d41c19b3c5e07e1956eb670082f3e385.tar.gz
dexon-solidity-63c81bc0d41c19b3c5e07e1956eb670082f3e385.tar.zst
dexon-solidity-63c81bc0d41c19b3c5e07e1956eb670082f3e385.zip
Add logic builtins to Julia and fix some typos
Diffstat (limited to 'docs')
-rw-r--r--docs/julia.rst43
1 files changed, 32 insertions, 11 deletions
diff --git a/docs/julia.rst b/docs/julia.rst
index 078bc55b..82ea16a1 100644
--- a/docs/julia.rst
+++ b/docs/julia.rst
@@ -307,11 +307,16 @@ JULIA has no support for implicit type conversion and therefore functions exists
When converting a larger type to a shorter type a runtime exception can occur in case of an overflow.
The following type conversion functions must be available:
-- ``u32tobool(x:u32) -> y:bool``
-- ``booltou32(x:bool) -> y:u32``
-- ``u32tou64(x:u32) -> y:u64``
-- ``u64tou32(x:u64) -> y:u32``
-- etc. (TBD)
+ - ``u32tobool(x:u32) -> y:bool``
+ - ``booltou32(x:bool) -> y:u32``
+ - ``u32tou64(x:u32) -> y:u64``
+ - ``u64tou32(x:u64) -> y:u32``
+ - etc. (TBD)
+
+.. note::
+
+ ``u32tobool(x:u32) -> y:bool`` can be implemented as ``y := not(iszerou256(x))`` and
+ ``booltou32(x:bool) -> y:u32`` can be implemented as ``switch x case true:bool { y := 1:u32 } case false:bool { y := 0:u32 }``
Low-level Functions
-------------------
@@ -319,6 +324,16 @@ Low-level Functions
The following functions must be available:
+---------------------------------------------------------------------------------------------------------------+
+| *Logic* |
++---------------------------------------------+-----------------------------------------------------------------+
+| not(x:bool) -> z:bool | logical not |
++---------------------------------------------+-----------------------------------------------------------------+
+| and(x:bool, y:bool) -> z:bool | logical and |
++---------------------------------------------+-----------------------------------------------------------------+
+| or(x:bool, y:bool) -> z:bool | logical or |
++---------------------------------------------+-----------------------------------------------------------------+
+| xor(x:bool, y:bool) -> z:bool | xor |
++---------------------------------------------+-----------------------------------------------------------------+
| *Arithmetics* |
+---------------------------------------------+-----------------------------------------------------------------+
| addu256(x:u256, y:u256) -> z:u256 | x + y |
@@ -343,15 +358,19 @@ The following functions must be available:
+---------------------------------------------+-----------------------------------------------------------------+
| mulmodu256(x:u256, y:u256, m:u256) -> z:u256| (x * y) % m with arbitrary precision arithmetics |
+---------------------------------------------+-----------------------------------------------------------------+
-| ltu256(x:u256, y:u256) -> z:bool | 1 if x < y, 0 otherwise |
+| ltu256(x:u256, y:u256) -> z:bool | true if x < y, false otherwise |
+---------------------------------------------+-----------------------------------------------------------------+
-| gtu256(x:u256, y:u256) -> z:bool | 1 if x > y, 0 otherwise |
+| gtu256(x:u256, y:u256) -> z:bool | true if x > y, false otherwise |
+---------------------------------------------+-----------------------------------------------------------------+
-| sltu256(x:s256, y:s256) -> z:bool | 1 if x < y, 0 otherwise, for signed numbers in two's complement |
+| sltu256(x:s256, y:s256) -> z:bool | true if x < y, false otherwise |
+| | (for signed numbers in two's complement) |
+---------------------------------------------+-----------------------------------------------------------------+
-| sgtu256(x:s256, y:s256) -> z:bool | 1 if x > y, 0 otherwise, for signed numbers in two's complement |
+| sgtu256(x:s256, y:s256) -> z:bool | true if x > y, false otherwise |
+| | (for signed numbers in two's complement) |
+---------------------------------------------+-----------------------------------------------------------------+
-| equ256(x:u256, y:u256) -> z:bool | 1 if x == y, 0 otherwise |
+| equ256(x:u256, y:u256) -> z:bool | true if x == y, false otherwise |
++---------------------------------------------+-----------------------------------------------------------------+
+| iszerou256(x:u256) -> z:bool | true if x == 0, false otherwise |
+---------------------------------------------+-----------------------------------------------------------------+
| notu256(x:u256) -> z:u256 | ~x, every bit of x is negated |
+---------------------------------------------+-----------------------------------------------------------------+
@@ -473,6 +492,8 @@ The following functions must be available:
+---------------------------------------------+-----------------------------------------------------------------+
| *Others* |
+---------------------------------------------+-----------------------------------------------------------------+
+| discard(unused:bool) | discard value |
++---------------------------------------------+-----------------------------------------------------------------+
| discardu256(unused:u256) | discard value |
+---------------------------------------------+-----------------------------------------------------------------+
| splitu256tou64(x:u256) -> (x1:u64, x2:u64, | split u256 to four u64's |
@@ -481,7 +502,7 @@ The following functions must be available:
| combineu64tou256(x1:u64, x2:u64, x3:u64, | combine four u64's into a single u256 |
| x4:u64) -> (x:u256) | |
+---------------------------------------------+-----------------------------------------------------------------+
-| sha3(p:u256, s:u256) -> v:u256 | keccak(mem[p...(p+s))) |
+| keccak256(p:u256, s:u256) -> v:u256 | keccak(mem[p...(p+s))) |
+---------------------------------------------+-----------------------------------------------------------------+
Backends