diff options
author | Gav Wood <i@gavwood.com> | 2014-05-30 20:47:13 +0800 |
---|---|---|
committer | Gav Wood <i@gavwood.com> | 2014-05-30 20:47:13 +0800 |
commit | 78c0baa026d69a6b03d0f3d9288c4da4e03f4b96 (patch) | |
tree | 5b0bbc3bd2b7adcb277a9d38c42aaedaaadfc76b | |
parent | b64a96199fb17d624974d8d5efe8e0758ef117bf (diff) | |
download | dexon-solidity-78c0baa026d69a6b03d0f3d9288c4da4e03f4b96.tar.gz dexon-solidity-78c0baa026d69a6b03d0f3d9288c4da4e03f4b96.tar.zst dexon-solidity-78c0baa026d69a6b03d0f3d9288c4da4e03f4b96.zip |
Actually do endow ether.
Standard extension.
-rw-r--r-- | Compiler.cpp | 2 | ||||
-rw-r--r-- | CompilerState.cpp | 23 | ||||
-rw-r--r-- | CompilerState.h | 1 |
3 files changed, 26 insertions, 0 deletions
diff --git a/Compiler.cpp b/Compiler.cpp index cd326341..8400ad95 100644 --- a/Compiler.cpp +++ b/Compiler.cpp @@ -32,6 +32,7 @@ bytes eth::compileLLL(string const& _src, bool _opt, vector<string>* _errors) try { CompilerState cs; + cs.populateStandard(); auto f = CodeFragment::compile(_src, cs); if (_opt) f.optimise(); @@ -58,6 +59,7 @@ std::string eth::compileLLLToAsm(std::string const& _src, bool _opt, std::vector try { CompilerState cs; + cs.populateStandard(); auto f = CodeFragment::compile(_src, cs); if (_opt) f.optimise(); diff --git a/CompilerState.cpp b/CompilerState.cpp index d2894475..571b9de3 100644 --- a/CompilerState.cpp +++ b/CompilerState.cpp @@ -20,6 +20,7 @@ */ #include "CompilerState.h" +#include "CodeFragment.h" using namespace std; using namespace eth; @@ -35,3 +36,25 @@ CodeFragment const& CompilerState::getDef(std::string const& _s) else return NullCodeFragment; } + +void CompilerState::populateStandard() +{ + static const string s = "{" + "(def 'gav 0x8a40bfaa73256b60764c1bf40675a99083efb075)" + "(def 'send (to value) (call (- (gas) 21) to value 0 0 0 0))" +#if 0 + "(def 'send (gaslimit to value) (call gaslimit to value 0 0 0 0))" + "(def 'alloc (len) (asm msize 0 1 len msize add sub mstore8))" + "(def 'msg (gaslimit to value data datasize outsize) { [32]:outsize [0]:(alloc @32) (call gaslimit to value data datasize @0 @32) @0 })" + "(def 'msg (gaslimit to value data datasize) { (call gaslimit to value data datasize 0 32) @0 })" + "(def 'msg (gaslimit to value data) { [0]:data (msg gaslimit to value 0 32) })" + "(def 'create (to value code) { [0]:(msize) (create to value @0 (lll code @0)) })" + "(def 'sha3 (val) { [0]:val (sha3 0 32) })" + "(def 'return (val) { [0]:val (return 0 32) })" + "(def 'makeperm (name pos) { (def name (sload pos)) (def name (v) (sstore pos v)) } )" + "(def 'permcount 0)" + "(def 'perm (name) { (makeperm name permcount) (def 'permcount (+ permcount 1)) } )" +#endif + "}"; + CodeFragment::compile(s, *this); +} diff --git a/CompilerState.h b/CompilerState.h index d53c2bcd..7f3cef82 100644 --- a/CompilerState.h +++ b/CompilerState.h @@ -37,6 +37,7 @@ struct Macro struct CompilerState { CodeFragment const& getDef(std::string const& _s); + void populateStandard(); std::map<std::string, unsigned> vars; std::map<std::string, CodeFragment> defs; |