aboutsummaryrefslogtreecommitdiffstats
path: root/liblll
diff options
context:
space:
mode:
authorbenjaminion <ben@edginet.org>2017-06-14 00:01:38 +0800
committerbenjaminion <ben@edginet.org>2017-06-14 00:01:38 +0800
commitc603369a5135efd1c6e7109dbc180ccb2bf8c03e (patch)
tree465c76fa3fdf3773bd902100564b954d2e641ae8 /liblll
parent40f5690f68961130073028526f8b923ed0793c8a (diff)
downloaddexon-solidity-c603369a5135efd1c6e7109dbc180ccb2bf8c03e.tar.gz
dexon-solidity-c603369a5135efd1c6e7109dbc180ccb2bf8c03e.tar.zst
dexon-solidity-c603369a5135efd1c6e7109dbc180ccb2bf8c03e.zip
Change opcode generated by (panic) to INVALID
EIP-141 ethereum/EIPs#141 has preserved 0xfe as an invalid opcode for aborting EVM execution. The EVM assembler supports this via the INVALID opcode. The LLL "panic" expression used to generate a jump to an invalid location in order to abort EVM execution. This change brings "panic" into line with EIP-141 by generating the INVALID opcode instead.
Diffstat (limited to 'liblll')
-rw-r--r--liblll/CodeFragment.cpp4
-rw-r--r--liblll/CompilerState.cpp1
2 files changed, 1 insertions, 4 deletions
diff --git a/liblll/CodeFragment.cpp b/liblll/CodeFragment.cpp
index 2b8822a6..0f7f48ba 100644
--- a/liblll/CodeFragment.cpp
+++ b/liblll/CodeFragment.cpp
@@ -573,10 +573,6 @@ void CodeFragment::constructOperation(sp::utree const& _t, CompilerState& _s)
m_asm.append(i.m_asm);
m_asm.popTo(1);
}
- else if (us == "PANIC")
- {
- m_asm.appendJump(m_asm.errorTag());
- }
else if (us == "BYTECODESIZE")
{
m_asm.appendProgramSize();
diff --git a/liblll/CompilerState.cpp b/liblll/CompilerState.cpp
index 88e43e18..006929e4 100644
--- a/liblll/CompilerState.cpp
+++ b/liblll/CompilerState.cpp
@@ -45,6 +45,7 @@ CodeFragment const& CompilerState::getDef(std::string const& _s)
void CompilerState::populateStandard()
{
static const string s = "{"
+ "(def 'panic () (asm INVALID))"
"(def 'allgas (- (gas) 21))"
"(def 'send (to value) (call allgas to value 0 0 0 0))"
"(def 'send (gaslimit to value) (call gaslimit to value 0 0 0 0))"