aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2016-10-20 19:30:04 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2016-11-15 18:30:12 +0800
commit91367234d946266b73a5ace8071b0fd931f3a74b (patch)
tree331d9269a5919c08030c366dbf3a4d47151a3532
parent028ab1fbfbe7d83cb5fbf4be9e2eb29a22d5b687 (diff)
downloaddexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.tar
dexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.tar.gz
dexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.tar.bz2
dexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.tar.lz
dexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.tar.xz
dexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.tar.zst
dexon-solidity-91367234d946266b73a5ace8071b0fd931f3a74b.zip
Support ErrorTag as a jump label in inline assembly
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/inlineasm/AsmCodeGen.cpp6
2 files changed, 6 insertions, 1 deletions
diff --git a/Changelog.md b/Changelog.md
index 4d68fc69..d5f8cea9 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -2,6 +2,7 @@
Features:
* Do-while loops: support for a C-style do{<block>}while(<expr>); control structure
+ * Inline assembly: support ``ErrorTag`` as a jump label.
* Type checker: now more eagerly searches for a common type of an inline array with mixed types
* Code generator: generates a runtime error when an out-of-range value is converted into an enum type.
diff --git a/libsolidity/inlineasm/AsmCodeGen.cpp b/libsolidity/inlineasm/AsmCodeGen.cpp
index 76c71048..1b789c5f 100644
--- a/libsolidity/inlineasm/AsmCodeGen.cpp
+++ b/libsolidity/inlineasm/AsmCodeGen.cpp
@@ -81,7 +81,11 @@ struct GeneratorState
class LabelOrganizer: public boost::static_visitor<>
{
public:
- LabelOrganizer(GeneratorState& _state): m_state(_state) {}
+ LabelOrganizer(GeneratorState& _state): m_state(_state)
+ {
+ // Make the Solidity ErrorTag available to inline assembly
+ m_state.labels.insert(make_pair("ErrorTag", m_state.assembly.errorTag()));
+ }
template <class T>
void operator()(T const& /*_item*/) { }