mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Actually do endow ether.
Standard extension.
This commit is contained in:
parent
b64a96199f
commit
78c0baa026
@ -32,6 +32,7 @@ bytes eth::compileLLL(string const& _src, bool _opt, vector<string>* _errors)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
CompilerState cs;
|
CompilerState cs;
|
||||||
|
cs.populateStandard();
|
||||||
auto f = CodeFragment::compile(_src, cs);
|
auto f = CodeFragment::compile(_src, cs);
|
||||||
if (_opt)
|
if (_opt)
|
||||||
f.optimise();
|
f.optimise();
|
||||||
@ -58,6 +59,7 @@ std::string eth::compileLLLToAsm(std::string const& _src, bool _opt, std::vector
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
CompilerState cs;
|
CompilerState cs;
|
||||||
|
cs.populateStandard();
|
||||||
auto f = CodeFragment::compile(_src, cs);
|
auto f = CodeFragment::compile(_src, cs);
|
||||||
if (_opt)
|
if (_opt)
|
||||||
f.optimise();
|
f.optimise();
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CompilerState.h"
|
#include "CompilerState.h"
|
||||||
|
#include "CodeFragment.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace eth;
|
using namespace eth;
|
||||||
@ -35,3 +36,25 @@ CodeFragment const& CompilerState::getDef(std::string const& _s)
|
|||||||
else
|
else
|
||||||
return NullCodeFragment;
|
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);
|
||||||
|
}
|
||||||
|
@ -37,6 +37,7 @@ struct Macro
|
|||||||
struct CompilerState
|
struct CompilerState
|
||||||
{
|
{
|
||||||
CodeFragment const& getDef(std::string const& _s);
|
CodeFragment const& getDef(std::string const& _s);
|
||||||
|
void populateStandard();
|
||||||
|
|
||||||
std::map<std::string, unsigned> vars;
|
std::map<std::string, unsigned> vars;
|
||||||
std::map<std::string, CodeFragment> defs;
|
std::map<std::string, CodeFragment> defs;
|
||||||
|
Loading…
Reference in New Issue
Block a user