Merge pull request #2354 from benjaminion/patch-2

LLL: fix handling of "sha3" expression
This commit is contained in:
Alex Beregszaszi 2017-06-13 23:23:02 +01:00 committed by GitHub
commit c99c1c76f7
2 changed files with 38 additions and 1 deletions

View File

@ -56,10 +56,10 @@ void CompilerState::populateStandard()
"(def 'msg (to data) { [0]:data (msg allgas to 0 0 32) })" "(def 'msg (to data) { [0]:data (msg allgas to 0 0 32) })"
"(def 'create (value code) { [0]:(msize) (create value @0 (lll code @0)) })" "(def 'create (value code) { [0]:(msize) (create value @0 (lll code @0)) })"
"(def 'create (code) { [0]:(msize) (create 0 @0 (lll code @0)) })" "(def 'create (code) { [0]:(msize) (create 0 @0 (lll code @0)) })"
"(def 'sha3 (loc len) (keccak256 loc len))"
"(def 'sha3 (val) { [0]:val (sha3 0 32) })" "(def 'sha3 (val) { [0]:val (sha3 0 32) })"
"(def 'sha3pair (a b) { [0]:a [32]:b (sha3 0 64) })" "(def 'sha3pair (a b) { [0]:a [32]:b (sha3 0 64) })"
"(def 'sha3trip (a b c) { [0]:a [32]:b [64]:c (sha3 0 96) })" "(def 'sha3trip (a b c) { [0]:a [32]:b [64]:c (sha3 0 96) })"
"(def 'keccak256 (loc len) (sha3 loc len))"
"(def 'return (val) { [0]:val (return 0 32) })" "(def 'return (val) { [0]:val (return 0 32) })"
"(def 'returnlll (code) (return 0 (lll code 0)) )" "(def 'returnlll (code) (return 0 (lll code 0)) )"
"(def 'makeperm (name pos) { (def name (sload pos)) (def name (v) (sstore pos v)) } )" "(def 'makeperm (name pos) { (def name (sload pos)) (def name (v) (sstore pos v)) } )"

View File

@ -291,6 +291,43 @@ BOOST_AUTO_TEST_CASE(zeroarg_macro)
BOOST_CHECK(callFallback() == encodeArgs(u256(0x1234))); BOOST_CHECK(callFallback() == encodeArgs(u256(0x1234)));
} }
BOOST_AUTO_TEST_CASE(keccak256_32bytes)
{
char const* sourceCode = R"(
(returnlll
(seq
(mstore 0x00 0x01)
(return (keccak256 0x00 0x20))))
)";
compileAndRun(sourceCode);
BOOST_CHECK(callFallback() == encodeArgs(
fromHex("b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6")));
}
BOOST_AUTO_TEST_CASE(sha3_two_args)
{
char const* sourceCode = R"(
(returnlll
(seq
(mstore 0x00 0x01)
(return (sha3 0x00 0x20))))
)";
compileAndRun(sourceCode);
BOOST_CHECK(callFallback() == encodeArgs(
fromHex("b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6")));
}
BOOST_AUTO_TEST_CASE(sha3_one_arg)
{
char const* sourceCode = R"(
(returnlll
(return (sha3 0x01)))
)";
compileAndRun(sourceCode);
BOOST_CHECK(callFallback() == encodeArgs(
fromHex("b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6")));
}
BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()
} }