aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Compiler.cpp2
-rw-r--r--CompilerState.cpp23
-rw-r--r--CompilerState.h1
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;