aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.circleci/config.yml20
-rw-r--r--docs/introduction-to-smart-contracts.rst2
-rw-r--r--docs/types.rst9
-rw-r--r--libsolidity/analysis/ConstantEvaluator.cpp1
-rw-r--r--libsolidity/analysis/ContractLevelChecker.cpp3
-rw-r--r--libsolidity/analysis/ContractLevelChecker.h1
-rw-r--r--libsolidity/analysis/ControlFlowAnalyzer.cpp1
-rw-r--r--libsolidity/analysis/ControlFlowAnalyzer.h1
-rw-r--r--libsolidity/analysis/ControlFlowGraph.cpp3
-rw-r--r--libsolidity/analysis/DeclarationContainer.cpp1
-rw-r--r--libsolidity/analysis/DeclarationContainer.h5
-rw-r--r--libsolidity/analysis/DocStringAnalyser.cpp3
-rw-r--r--libsolidity/analysis/GlobalContext.cpp3
-rw-r--r--libsolidity/analysis/GlobalContext.h8
-rw-r--r--libsolidity/analysis/NameAndTypeResolver.cpp3
-rw-r--r--libsolidity/analysis/NameAndTypeResolver.h10
-rw-r--r--libsolidity/analysis/PostTypeChecker.cpp7
-rw-r--r--libsolidity/analysis/ReferencesResolver.cpp4
-rw-r--r--libsolidity/analysis/ReferencesResolver.h7
-rw-r--r--libsolidity/analysis/SemVerHandler.cpp1
-rw-r--r--libsolidity/analysis/StaticAnalyzer.cpp1
-rw-r--r--libsolidity/analysis/SyntaxChecker.cpp11
-rw-r--r--libsolidity/analysis/TypeChecker.cpp3
-rw-r--r--libsolidity/analysis/TypeChecker.h2
-rw-r--r--libsolidity/analysis/ViewPureChecker.cpp6
-rw-r--r--libyul/AsmAnalysis.cpp2
-rw-r--r--libyul/AsmParser.cpp6
-rw-r--r--libyul/AsmPrinter.cpp4
-rw-r--r--libyul/ObjectParser.cpp2
-rw-r--r--libyul/YulString.h5
-rw-r--r--libyul/backends/evm/EVMCodeTransform.cpp2
-rw-r--r--libyul/optimiser/MainFunction.cpp4
-rwxr-xr-xtest/externalTests.sh3
-rw-r--r--test/libyul/Parser.cpp6
34 files changed, 76 insertions, 74 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 6c5f3e85..c13bef35 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -68,7 +68,7 @@ jobs:
- version.txt
test_emscripten_solcjs:
docker:
- - image: trzeci/emscripten:sdk-tag-1.37.21-64bit
+ - image: circleci/node:10
environment:
TERM: xterm
steps:
@@ -78,23 +78,15 @@ jobs:
- run:
name: Install external tests deps
command: |
- apt-get -qq update
- apt-get -qy install netcat curl
- curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | NVM_DIR=/usr/local/nvm bash
- export NVM_DIR="/usr/local/nvm"
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
- nvm --version
- nvm install 8
node --version
npm --version
- run:
name: Test solcjs
command: |
- . /usr/local/nvm/nvm.sh
test/solcjsTests.sh /tmp/workspace/soljson.js $(cat /tmp/workspace/version.txt)
test_emscripten_external:
docker:
- - image: trzeci/emscripten:sdk-tag-1.37.21-64bit
+ - image: circleci/node:10
environment:
TERM: xterm
steps:
@@ -104,19 +96,11 @@ jobs:
- run:
name: Install external tests deps
command: |
- apt-get -qq update
- apt-get -qy install netcat curl
- curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | NVM_DIR=/usr/local/nvm bash
- export NVM_DIR="/usr/local/nvm"
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
- nvm --version
- nvm install 8
node --version
npm --version
- run:
name: External tests
command: |
- . /usr/local/nvm/nvm.sh
test/externalTests.sh /tmp/workspace/soljson.js || test/externalTests.sh /tmp/workspace/soljson.js
build_x86_linux:
docker:
diff --git a/docs/introduction-to-smart-contracts.rst b/docs/introduction-to-smart-contracts.rst
index 34ef012e..7daae06a 100644
--- a/docs/introduction-to-smart-contracts.rst
+++ b/docs/introduction-to-smart-contracts.rst
@@ -41,7 +41,7 @@ source code (e.g. `pragma once <https://en.wikipedia.org/wiki/Pragma_once>`_).
A contract in the sense of Solidity is a collection of code (its *functions*) and
data (its *state*) that resides at a specific address on the Ethereum
blockchain. The line ``uint storedData;`` declares a state variable called ``storedData`` of
-type ``uint`` (*u*nsigned *int*eger of *256* bits). You can think of it as a single slot
+type ``uint`` (*u*\nsigned *int*\eger of *256* bits). You can think of it as a single slot
in a database that can be queried and altered by calling functions of the
code that manages the database. In the case of Ethereum, this is always the owning
contract. And in this case, the functions ``set`` and ``get`` can be used to modify
diff --git a/docs/types.rst b/docs/types.rst
index f67a6d1a..b6003fd5 100644
--- a/docs/types.rst
+++ b/docs/types.rst
@@ -1189,7 +1189,14 @@ If ``a`` is an LValue (i.e. a variable or something that can be assigned to), th
delete
------
-``delete a`` assigns the initial value for the type to ``a``. I.e. for integers it is equivalent to ``a = 0``, but it can also be used on arrays, where it assigns a dynamic array of length zero or a static array of the same length with all elements reset. For structs, it assigns a struct with all members reset. In other words, the value of ``a`` after ``delete a`` is the same as if ``a`` would be declared without assignment, with the following caveat:
+``delete a`` assigns the initial value for the type to ``a``. I.e. for integers it is
+equivalent to ``a = 0``, but it can also be used on arrays, where it assigns a dynamic
+array of length zero or a static array of the same length with all elements set to their
+initial value. ``delete a[x]`` deletes the item at index ``x`` of the array and leaves
+all other elements and the length of the array untouched. This especially means that it leaves
+a gap in the array. If you plan to remove items, a mapping is probably a better choice.
+
+For structs, it assigns a struct with all members reset. In other words, the value of ``a`` after ``delete a`` is the same as if ``a`` would be declared without assignment, with the following caveat:
``delete`` has no effect on mappings (as the keys of mappings may be arbitrary and are generally unknown). So if you delete a struct, it will reset all members that are not mappings and also recurse into the members unless they are mappings. However, individual keys and what they map to can be deleted: If ``a`` is a mapping, then ``delete a[x]`` will delete the value stored at ``x``.
diff --git a/libsolidity/analysis/ConstantEvaluator.cpp b/libsolidity/analysis/ConstantEvaluator.cpp
index 26d9584b..e637795a 100644
--- a/libsolidity/analysis/ConstantEvaluator.cpp
+++ b/libsolidity/analysis/ConstantEvaluator.cpp
@@ -21,6 +21,7 @@
*/
#include <libsolidity/analysis/ConstantEvaluator.h>
+
#include <libsolidity/ast/AST.h>
#include <liblangutil/ErrorReporter.h>
diff --git a/libsolidity/analysis/ContractLevelChecker.cpp b/libsolidity/analysis/ContractLevelChecker.cpp
index 526caff9..96b9611e 100644
--- a/libsolidity/analysis/ContractLevelChecker.cpp
+++ b/libsolidity/analysis/ContractLevelChecker.cpp
@@ -20,10 +20,9 @@
*/
#include <libsolidity/analysis/ContractLevelChecker.h>
-#include <libsolidity/ast/AST.h>
+#include <libsolidity/ast/AST.h>
#include <liblangutil/ErrorReporter.h>
-
#include <boost/range/adaptor/reversed.hpp>
diff --git a/libsolidity/analysis/ContractLevelChecker.h b/libsolidity/analysis/ContractLevelChecker.h
index 15cbf45d..d754687a 100644
--- a/libsolidity/analysis/ContractLevelChecker.h
+++ b/libsolidity/analysis/ContractLevelChecker.h
@@ -22,7 +22,6 @@
#pragma once
#include <libsolidity/ast/ASTForward.h>
-
#include <map>
namespace langutil
diff --git a/libsolidity/analysis/ControlFlowAnalyzer.cpp b/libsolidity/analysis/ControlFlowAnalyzer.cpp
index a7e1ed97..3adf6318 100644
--- a/libsolidity/analysis/ControlFlowAnalyzer.cpp
+++ b/libsolidity/analysis/ControlFlowAnalyzer.cpp
@@ -16,6 +16,7 @@
*/
#include <libsolidity/analysis/ControlFlowAnalyzer.h>
+
#include <liblangutil/SourceLocation.h>
#include <boost/range/algorithm/sort.hpp>
diff --git a/libsolidity/analysis/ControlFlowAnalyzer.h b/libsolidity/analysis/ControlFlowAnalyzer.h
index 859d826a..7761817a 100644
--- a/libsolidity/analysis/ControlFlowAnalyzer.h
+++ b/libsolidity/analysis/ControlFlowAnalyzer.h
@@ -18,7 +18,6 @@
#pragma once
#include <libsolidity/analysis/ControlFlowGraph.h>
-
#include <set>
namespace dev
diff --git a/libsolidity/analysis/ControlFlowGraph.cpp b/libsolidity/analysis/ControlFlowGraph.cpp
index a7cc9508..8960166a 100644
--- a/libsolidity/analysis/ControlFlowGraph.cpp
+++ b/libsolidity/analysis/ControlFlowGraph.cpp
@@ -16,10 +16,9 @@
*/
#include <libsolidity/analysis/ControlFlowGraph.h>
-#include <libsolidity/analysis/ControlFlowBuilder.h>
+#include <libsolidity/analysis/ControlFlowBuilder.h>
#include <boost/range/adaptor/reversed.hpp>
-
#include <algorithm>
using namespace std;
diff --git a/libsolidity/analysis/DeclarationContainer.cpp b/libsolidity/analysis/DeclarationContainer.cpp
index cf12a49d..d0657898 100644
--- a/libsolidity/analysis/DeclarationContainer.cpp
+++ b/libsolidity/analysis/DeclarationContainer.cpp
@@ -21,6 +21,7 @@
*/
#include <libsolidity/analysis/DeclarationContainer.h>
+
#include <libsolidity/ast/AST.h>
#include <libsolidity/ast/Types.h>
#include <libdevcore/StringUtils.h>
diff --git a/libsolidity/analysis/DeclarationContainer.h b/libsolidity/analysis/DeclarationContainer.h
index 9d7a17a3..e26f5891 100644
--- a/libsolidity/analysis/DeclarationContainer.h
+++ b/libsolidity/analysis/DeclarationContainer.h
@@ -22,11 +22,10 @@
#pragma once
+#include <libsolidity/ast/ASTForward.h>
+#include <boost/noncopyable.hpp>
#include <map>
#include <set>
-#include <boost/noncopyable.hpp>
-
-#include <libsolidity/ast/ASTForward.h>
namespace dev
{
diff --git a/libsolidity/analysis/DocStringAnalyser.cpp b/libsolidity/analysis/DocStringAnalyser.cpp
index 69a7a43c..0878b550 100644
--- a/libsolidity/analysis/DocStringAnalyser.cpp
+++ b/libsolidity/analysis/DocStringAnalyser.cpp
@@ -22,9 +22,10 @@
*/
#include <libsolidity/analysis/DocStringAnalyser.h>
+
#include <libsolidity/ast/AST.h>
-#include <liblangutil/ErrorReporter.h>
#include <libsolidity/parsing/DocStringParser.h>
+#include <liblangutil/ErrorReporter.h>
using namespace std;
using namespace dev;
diff --git a/libsolidity/analysis/GlobalContext.cpp b/libsolidity/analysis/GlobalContext.cpp
index cba2655c..cd5fe07d 100644
--- a/libsolidity/analysis/GlobalContext.cpp
+++ b/libsolidity/analysis/GlobalContext.cpp
@@ -21,10 +21,11 @@
* Container of the (implicit and explicit) global objects.
*/
-#include <memory>
#include <libsolidity/analysis/GlobalContext.h>
+
#include <libsolidity/ast/AST.h>
#include <libsolidity/ast/Types.h>
+#include <memory>
using namespace std;
diff --git a/libsolidity/analysis/GlobalContext.h b/libsolidity/analysis/GlobalContext.h
index 4ed08711..09611c41 100644
--- a/libsolidity/analysis/GlobalContext.h
+++ b/libsolidity/analysis/GlobalContext.h
@@ -22,12 +22,12 @@
#pragma once
-#include <string>
-#include <vector>
+#include <libsolidity/ast/ASTForward.h>
+#include <boost/noncopyable.hpp>
#include <map>
#include <memory>
-#include <boost/noncopyable.hpp>
-#include <libsolidity/ast/ASTForward.h>
+#include <string>
+#include <vector>
namespace dev
{
diff --git a/libsolidity/analysis/NameAndTypeResolver.cpp b/libsolidity/analysis/NameAndTypeResolver.cpp
index 0528a200..95bc69fe 100644
--- a/libsolidity/analysis/NameAndTypeResolver.cpp
+++ b/libsolidity/analysis/NameAndTypeResolver.cpp
@@ -22,11 +22,10 @@
#include <libsolidity/analysis/NameAndTypeResolver.h>
-#include <libsolidity/ast/AST.h>
#include <libsolidity/analysis/TypeChecker.h>
+#include <libsolidity/ast/AST.h>
#include <liblangutil/ErrorReporter.h>
#include <libdevcore/StringUtils.h>
-
#include <boost/algorithm/string.hpp>
using namespace std;
diff --git a/libsolidity/analysis/NameAndTypeResolver.h b/libsolidity/analysis/NameAndTypeResolver.h
index 1b034ef4..89c53932 100644
--- a/libsolidity/analysis/NameAndTypeResolver.h
+++ b/libsolidity/analysis/NameAndTypeResolver.h
@@ -22,13 +22,15 @@
#pragma once
-#include <map>
-#include <list>
-#include <boost/noncopyable.hpp>
#include <libsolidity/analysis/DeclarationContainer.h>
#include <libsolidity/analysis/ReferencesResolver.h>
-#include <libsolidity/ast/ASTVisitor.h>
#include <libsolidity/ast/ASTAnnotations.h>
+#include <libsolidity/ast/ASTVisitor.h>
+
+#include <boost/noncopyable.hpp>
+
+#include <list>
+#include <map>
namespace langutil
{
diff --git a/libsolidity/analysis/PostTypeChecker.cpp b/libsolidity/analysis/PostTypeChecker.cpp
index 27cbcd45..6a7e5c7e 100644
--- a/libsolidity/analysis/PostTypeChecker.cpp
+++ b/libsolidity/analysis/PostTypeChecker.cpp
@@ -16,15 +16,14 @@
*/
#include <libsolidity/analysis/PostTypeChecker.h>
-#include <libsolidity/ast/AST.h>
+
#include <libsolidity/analysis/SemVerHandler.h>
-#include <liblangutil/ErrorReporter.h>
+#include <libsolidity/ast/AST.h>
#include <libsolidity/interface/Version.h>
-
+#include <liblangutil/ErrorReporter.h>
#include <libdevcore/Algorithms.h>
#include <boost/range/adaptor/map.hpp>
-
#include <memory>
using namespace std;
diff --git a/libsolidity/analysis/ReferencesResolver.cpp b/libsolidity/analysis/ReferencesResolver.cpp
index 76641c04..4e6d7f59 100644
--- a/libsolidity/analysis/ReferencesResolver.cpp
+++ b/libsolidity/analysis/ReferencesResolver.cpp
@@ -21,13 +21,15 @@
*/
#include <libsolidity/analysis/ReferencesResolver.h>
-#include <libsolidity/ast/AST.h>
#include <libsolidity/analysis/NameAndTypeResolver.h>
#include <libsolidity/analysis/ConstantEvaluator.h>
+#include <libsolidity/ast/AST.h>
+
#include <libyul/AsmAnalysis.h>
#include <libyul/AsmAnalysisInfo.h>
#include <libyul/AsmData.h>
#include <libyul/backends/evm/EVMDialect.h>
+
#include <liblangutil/ErrorReporter.h>
#include <liblangutil/Exceptions.h>
diff --git a/libsolidity/analysis/ReferencesResolver.h b/libsolidity/analysis/ReferencesResolver.h
index 32c0553f..b3de9458 100644
--- a/libsolidity/analysis/ReferencesResolver.h
+++ b/libsolidity/analysis/ReferencesResolver.h
@@ -22,12 +22,13 @@
#pragma once
-#include <map>
-#include <list>
-#include <boost/noncopyable.hpp>
#include <libsolidity/ast/ASTVisitor.h>
#include <libsolidity/ast/ASTAnnotations.h>
+#include <boost/noncopyable.hpp>
+#include <list>
+#include <map>
+
namespace langutil
{
class ErrorReporter;
diff --git a/libsolidity/analysis/SemVerHandler.cpp b/libsolidity/analysis/SemVerHandler.cpp
index 64fa17b3..7c6ba91f 100644
--- a/libsolidity/analysis/SemVerHandler.cpp
+++ b/libsolidity/analysis/SemVerHandler.cpp
@@ -21,6 +21,7 @@
*/
#include <libsolidity/analysis/SemVerHandler.h>
+
#include <functional>
using namespace std;
diff --git a/libsolidity/analysis/StaticAnalyzer.cpp b/libsolidity/analysis/StaticAnalyzer.cpp
index 4d0f3461..aaaa4f9f 100644
--- a/libsolidity/analysis/StaticAnalyzer.cpp
+++ b/libsolidity/analysis/StaticAnalyzer.cpp
@@ -21,6 +21,7 @@
*/
#include <libsolidity/analysis/StaticAnalyzer.h>
+
#include <libsolidity/analysis/ConstantEvaluator.h>
#include <libsolidity/ast/AST.h>
#include <liblangutil/ErrorReporter.h>
diff --git a/libsolidity/analysis/SyntaxChecker.cpp b/libsolidity/analysis/SyntaxChecker.cpp
index a73d7e5c..12e14864 100644
--- a/libsolidity/analysis/SyntaxChecker.cpp
+++ b/libsolidity/analysis/SyntaxChecker.cpp
@@ -16,15 +16,18 @@
*/
#include <libsolidity/analysis/SyntaxChecker.h>
-#include <memory>
+
+#include <libsolidity/analysis/SemVerHandler.h>
#include <libsolidity/ast/AST.h>
#include <libsolidity/ast/ExperimentalFeatures.h>
-#include <libsolidity/analysis/SemVerHandler.h>
-#include <liblangutil/ErrorReporter.h>
#include <libsolidity/interface/Version.h>
-#include <boost/algorithm/cxx11/all_of.hpp>
+#include <liblangutil/ErrorReporter.h>
+
+#include <boost/algorithm/cxx11/all_of.hpp>
#include <boost/algorithm/string.hpp>
+
+#include <memory>
#include <string>
using namespace std;
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp
index 5bd96f8d..507a2c94 100644
--- a/libsolidity/analysis/TypeChecker.cpp
+++ b/libsolidity/analysis/TypeChecker.cpp
@@ -26,7 +26,6 @@
#include <libyul/AsmAnalysis.h>
#include <libyul/AsmAnalysisInfo.h>
#include <libyul/AsmData.h>
-
#include <libyul/backends/evm/EVMDialect.h>
#include <liblangutil/ErrorReporter.h>
@@ -35,8 +34,8 @@
#include <libdevcore/StringUtils.h>
#include <boost/algorithm/cxx11/all_of.hpp>
-#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/join.hpp>
+#include <boost/algorithm/string/predicate.hpp>
#include <memory>
#include <vector>
diff --git a/libsolidity/analysis/TypeChecker.h b/libsolidity/analysis/TypeChecker.h
index ebfcdadc..b60c571a 100644
--- a/libsolidity/analysis/TypeChecker.h
+++ b/libsolidity/analysis/TypeChecker.h
@@ -24,10 +24,10 @@
#include <liblangutil/EVMVersion.h>
-#include <libsolidity/ast/Types.h>
#include <libsolidity/ast/ASTAnnotations.h>
#include <libsolidity/ast/ASTForward.h>
#include <libsolidity/ast/ASTVisitor.h>
+#include <libsolidity/ast/Types.h>
namespace langutil
{
diff --git a/libsolidity/analysis/ViewPureChecker.cpp b/libsolidity/analysis/ViewPureChecker.cpp
index bd3071b3..eb019481 100644
--- a/libsolidity/analysis/ViewPureChecker.cpp
+++ b/libsolidity/analysis/ViewPureChecker.cpp
@@ -16,14 +16,10 @@
*/
#include <libsolidity/analysis/ViewPureChecker.h>
-
-#include <libevmasm/SemanticInformation.h>
-
#include <libsolidity/ast/ExperimentalFeatures.h>
#include <libyul/AsmData.h>
-
#include <liblangutil/ErrorReporter.h>
-
+#include <libevmasm/SemanticInformation.h>
#include <functional>
using namespace std;
diff --git a/libyul/AsmAnalysis.cpp b/libyul/AsmAnalysis.cpp
index 821da005..0ecc5a30 100644
--- a/libyul/AsmAnalysis.cpp
+++ b/libyul/AsmAnalysis.cpp
@@ -102,7 +102,7 @@ bool AsmAnalyzer::operator()(Literal const& _literal)
else if (_literal.kind == LiteralKind::Boolean)
{
solAssert(m_dialect->flavour == AsmFlavour::Yul, "");
- solAssert(_literal.value == YulString{string("true")} || _literal.value == YulString{string("false")}, "");
+ solAssert(_literal.value == "true"_yulstring || _literal.value == "false"_yulstring, "");
}
m_info.stackHeightInfo[&_literal] = m_stackHeight;
return true;
diff --git a/libyul/AsmParser.cpp b/libyul/AsmParser.cpp
index c7302063..f3ca6cd0 100644
--- a/libyul/AsmParser.cpp
+++ b/libyul/AsmParser.cpp
@@ -354,11 +354,11 @@ Parser::ElementaryOperation Parser::parseElementaryOperation()
{
YulString literal;
if (currentToken() == Token::Return)
- literal = YulString{"return"};
+ literal = "return"_yulstring;
else if (currentToken() == Token::Byte)
- literal = YulString{"byte"};
+ literal = "byte"_yulstring;
else if (currentToken() == Token::Address)
- literal = YulString{"address"};
+ literal = "address"_yulstring;
else
literal = YulString{currentLiteral()};
// first search the set of builtins, then the instructions.
diff --git a/libyul/AsmPrinter.cpp b/libyul/AsmPrinter.cpp
index a5b14953..b7af4778 100644
--- a/libyul/AsmPrinter.cpp
+++ b/libyul/AsmPrinter.cpp
@@ -55,8 +55,8 @@ string AsmPrinter::operator()(Literal const& _literal) const
solAssert(isValidDecimal(_literal.value.str()) || isValidHex(_literal.value.str()), "Invalid number literal");
return _literal.value.str() + appendTypeName(_literal.type);
case LiteralKind::Boolean:
- solAssert(_literal.value.str() == "true" || _literal.value.str() == "false", "Invalid bool literal.");
- return ((_literal.value.str() == "true") ? "true" : "false") + appendTypeName(_literal.type);
+ solAssert(_literal.value == "true"_yulstring || _literal.value == "false"_yulstring, "Invalid bool literal.");
+ return ((_literal.value == "true"_yulstring) ? "true" : "false") + appendTypeName(_literal.type);
case LiteralKind::String:
break;
}
diff --git a/libyul/ObjectParser.cpp b/libyul/ObjectParser.cpp
index ba19e099..5f1eadef 100644
--- a/libyul/ObjectParser.cpp
+++ b/libyul/ObjectParser.cpp
@@ -42,7 +42,7 @@ shared_ptr<Object> ObjectParser::parse(shared_ptr<Scanner> const& _scanner, bool
{
// Special case: Code-only form.
object = make_shared<Object>();
- object->name = YulString{"object"};
+ object->name = "object"_yulstring;
object->code = parseBlock();
if (!object->code)
return nullptr;
diff --git a/libyul/YulString.h b/libyul/YulString.h
index 2179c23b..35c1d92d 100644
--- a/libyul/YulString.h
+++ b/libyul/YulString.h
@@ -127,4 +127,9 @@ private:
YulStringRepository::Handle m_handle{ 0, YulStringRepository::emptyHash() };
};
+inline YulString operator "" _yulstring(const char *_string, std::size_t _size)
+{
+ return YulString(std::string(_string, _size));
+}
+
}
diff --git a/libyul/backends/evm/EVMCodeTransform.cpp b/libyul/backends/evm/EVMCodeTransform.cpp
index bd18985c..04dc5040 100644
--- a/libyul/backends/evm/EVMCodeTransform.cpp
+++ b/libyul/backends/evm/EVMCodeTransform.cpp
@@ -387,7 +387,7 @@ void CodeTransform::operator()(Literal const& _literal)
m_assembly.appendConstant(u256(_literal.value.str()));
else if (_literal.kind == LiteralKind::Boolean)
{
- if (_literal.value.str() == "true")
+ if (_literal.value == "true"_yulstring)
m_assembly.appendConstant(u256(1));
else
m_assembly.appendConstant(u256(0));
diff --git a/libyul/optimiser/MainFunction.cpp b/libyul/optimiser/MainFunction.cpp
index 63eea2db..fabbf66f 100644
--- a/libyul/optimiser/MainFunction.cpp
+++ b/libyul/optimiser/MainFunction.cpp
@@ -40,12 +40,12 @@ void MainFunction::operator()(Block& _block)
for (size_t i = 1; i < _block.statements.size(); ++i)
assertThrow(_block.statements.at(i).type() == typeid(FunctionDefinition), OptimizerException, "");
/// @todo this should handle scopes properly and instead of an assertion it should rename the conflicting function
- assertThrow(NameCollector(_block).names().count(YulString{"main"}) == 0, OptimizerException, "");
+ assertThrow(NameCollector(_block).names().count("main"_yulstring) == 0, OptimizerException, "");
Block& block = boost::get<Block>(_block.statements[0]);
FunctionDefinition main{
block.location,
- YulString{"main"},
+ "main"_yulstring,
{},
{},
std::move(block)
diff --git a/test/externalTests.sh b/test/externalTests.sh
index 93581925..16f9e55a 100755
--- a/test/externalTests.sh
+++ b/test/externalTests.sh
@@ -79,6 +79,7 @@ function test_truffle
fi
# Change "compileStandard" to "compile"
sed -i s/solc.compileStandard/solc.compile/ "node_modules/truffle/build/cli.bundled.js"
+ npx truffle compile
npm run test
)
rm -rf "$DIR"
@@ -89,3 +90,5 @@ test_truffle Zeppelin https://github.com/axic/openzeppelin-solidity.git solidity
# Disabled temporarily as it needs to be updated to latest Truffle first.
#test_truffle Gnosis https://github.com/axic/pm-contracts.git solidity-050
+
+test_truffle GnosisSafe https://github.com/gnosis/safe-contracts.git development
diff --git a/test/libyul/Parser.cpp b/test/libyul/Parser.cpp
index 5e9fba86..df7e32a1 100644
--- a/test/libyul/Parser.cpp
+++ b/test/libyul/Parser.cpp
@@ -311,7 +311,7 @@ BOOST_AUTO_TEST_CASE(builtins_parser)
SimpleDialect(): Dialect(AsmFlavour::Strict) {}
BuiltinFunction const* builtin(YulString _name) const override
{
- return _name == YulString{"builtin"} ? &f : nullptr;
+ return _name == "builtin"_yulstring ? &f : nullptr;
}
BuiltinFunction f;
};
@@ -329,9 +329,9 @@ BOOST_AUTO_TEST_CASE(builtins_analysis)
SimpleDialect(): Dialect(AsmFlavour::Strict) {}
BuiltinFunction const* builtin(YulString _name) const override
{
- return _name == YulString{"builtin"} ? &f : nullptr;
+ return _name == "builtin"_yulstring ? &f : nullptr;
}
- BuiltinFunction f{YulString{"builtin"}, vector<Type>(2), vector<Type>(3), false};
+ BuiltinFunction f{"builtin"_yulstring, vector<Type>(2), vector<Type>(3), false};
};
shared_ptr<Dialect> dialect = make_shared<SimpleDialect>();