Browse Source

Actually do endow ether.

Standard extension.
cl-refactor
Gav Wood 11 years ago
parent
commit
bca43485fa
  1. 4
      include.lll
  2. 2
      libethereum/Executive.cpp
  3. 2
      liblll/Compiler.cpp
  4. 23
      liblll/CompilerState.cpp
  5. 1
      liblll/CompilerState.h

4
include.lll

@ -7,8 +7,8 @@
(def 'send (gaslimit to value) (call gaslimit to value 0 0 0 0))
(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 '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) })

2
libethereum/Executive.cpp

@ -151,7 +151,7 @@ void Executive::create(Address _sender, u256 _endowment, u256 _gasPrice, u256 _g
m_newAddress = (u160)m_newAddress + 1;
// Set up new account...
m_s.m_cache[m_newAddress] = AddressState(0, 0, h256(), h256());
m_s.m_cache[m_newAddress] = AddressState(0, _endowment, h256(), h256());
// Execute _init.
m_vm = new VM(_gas);

2
liblll/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();

23
liblll/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);
}

1
liblll/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;

Loading…
Cancel
Save