diff --git a/CODING_STYLE.md b/CODING_STYLE.md index 3f44cd1f9..8f5722896 100644 --- a/CODING_STYLE.md +++ b/CODING_STYLE.md @@ -119,7 +119,7 @@ Use `solAssert` and `solUnimplementedAssert` generously to check assumptions tha 4. Favour declarations close to use; don't habitually declare at top of scope ala C. 5. Pass non-trivial parameters as const reference, unless the data is to be copied into the function, then either pass by const reference or by value and use std::move. 6. If a function returns multiple values, use std::tuple (std::pair acceptable) or better introduce a struct type. Do not use */& arguments. -7. Use parameters of pointer type only if ``nullptr`` is a valid argument, use references otherwise. Often, ``boost::optional`` is better suited than a raw pointer. +7. Use parameters of pointer type only if ``nullptr`` is a valid argument, use references otherwise. Often, ``std::optional`` is better suited than a raw pointer. 8. Never use a macro where adequate non-preprocessor C++ can be written. 9. Only use ``auto`` if the type is very long and rather irrelevant. 10. Do not pass bools: prefer enumerations instead. diff --git a/libdevcore/CommonData.h b/libdevcore/CommonData.h index bc71c88c4..017a632dc 100644 --- a/libdevcore/CommonData.h +++ b/libdevcore/CommonData.h @@ -25,11 +25,10 @@ #include -#include - #include #include #include +#include #include #include #include @@ -277,7 +276,7 @@ void iterateReplacing(std::vector& _vector, F const& _f) std::vector modifiedVector; for (size_t i = 0; i < _vector.size(); ++i) { - if (boost::optional> r = _f(_vector[i])) + if (std::optional> r = _f(_vector[i])) { if (!useModified) { @@ -305,7 +304,7 @@ void iterateReplacingWindow(std::vector& _vector, F const& _f, std::index_seq size_t i = 0; for (; i + sizeof...(I) <= _vector.size(); ++i) { - if (boost::optional> r = _f(_vector[i + I]...)) + if (std::optional> r = _f(_vector[i + I]...)) { if (!useModified) { diff --git a/liblangutil/EVMVersion.h b/liblangutil/EVMVersion.h index 3c67e304d..95a9eb089 100644 --- a/liblangutil/EVMVersion.h +++ b/liblangutil/EVMVersion.h @@ -22,9 +22,9 @@ #include +#include #include -#include #include @@ -51,12 +51,12 @@ public: static EVMVersion istanbul() { return {Version::Istanbul}; } static EVMVersion berlin() { return {Version::Berlin}; } - static boost::optional fromString(std::string const& _version) + static std::optional fromString(std::string const& _version) { for (auto const& v: {homestead(), tangerineWhistle(), spuriousDragon(), byzantium(), constantinople(), petersburg(), istanbul(), berlin()}) if (_version == v.name()) return v; - return {}; + return std::nullopt; } bool operator==(EVMVersion const& _other) const { return m_version == _other.m_version; } diff --git a/liblangutil/Scanner.cpp b/liblangutil/Scanner.cpp index 131462289..0d65334fb 100644 --- a/liblangutil/Scanner.cpp +++ b/liblangutil/Scanner.cpp @@ -53,8 +53,9 @@ #include #include #include -#include + #include +#include #include #include @@ -187,7 +188,7 @@ bool Scanner::scanHexByte(char& o_scannedByte) return true; } -boost::optional Scanner::scanUnicode() +std::optional Scanner::scanUnicode() { unsigned x = 0; for (int i = 0; i < 4; i++) @@ -718,7 +719,7 @@ bool Scanner::scanEscape() break; case 'u': { - if (boost::optional codepoint = scanUnicode()) + if (auto const codepoint = scanUnicode(); codepoint.has_value()) addUnicodeAsUTF8(*codepoint); else return false; diff --git a/liblangutil/Scanner.h b/liblangutil/Scanner.h index 3914b85ac..f5b535cce 100644 --- a/liblangutil/Scanner.h +++ b/liblangutil/Scanner.h @@ -57,6 +57,8 @@ #include #include #include + +#include #include namespace langutil @@ -207,7 +209,7 @@ private: inline Token selectToken(char _next, Token _then, Token _else); bool scanHexByte(char& o_scannedByte); - boost::optional scanUnicode(); + std::optional scanUnicode(); /// Scans a single Solidity token. void scanToken(); diff --git a/libsolidity/analysis/ReferencesResolver.cpp b/libsolidity/analysis/ReferencesResolver.cpp index a1df47abe..e9a10bb35 100644 --- a/libsolidity/analysis/ReferencesResolver.cpp +++ b/libsolidity/analysis/ReferencesResolver.cpp @@ -122,7 +122,7 @@ bool ReferencesResolver::visit(ElementaryTypeName const& _typeName) if (!_typeName.annotation().type) { _typeName.annotation().type = TypeProvider::fromElementaryTypeName(_typeName.typeName()); - if (_typeName.stateMutability().is_initialized()) + if (_typeName.stateMutability().has_value()) { // for non-address types this was already caught by the parser solAssert(_typeName.annotation().type->category() == Type::Category::Address, ""); @@ -323,7 +323,7 @@ bool ReferencesResolver::visit(InlineAssembly const& _inlineAssembly) // Will be re-generated later with correct information // We use the latest EVM version because we will re-run it anyway. yul::AsmAnalysisInfo analysisInfo; - boost::optional errorTypeForLoose = Error::Type::SyntaxError; + std::optional errorTypeForLoose = Error::Type::SyntaxError; yul::AsmAnalyzer( analysisInfo, errorsIgnored, diff --git a/libsolidity/analysis/ViewPureChecker.cpp b/libsolidity/analysis/ViewPureChecker.cpp index cf35a4889..58baec906 100644 --- a/libsolidity/analysis/ViewPureChecker.cpp +++ b/libsolidity/analysis/ViewPureChecker.cpp @@ -241,7 +241,7 @@ void ViewPureChecker::endVisit(InlineAssembly const& _inlineAssembly) void ViewPureChecker::reportMutability( StateMutability _mutability, SourceLocation const& _location, - boost::optional const& _nestedLocation + std::optional const& _nestedLocation ) { if (_mutability > m_bestMutabilityAndLocation.mutability) diff --git a/libsolidity/analysis/ViewPureChecker.h b/libsolidity/analysis/ViewPureChecker.h index fd2432a7d..edcabf2f0 100644 --- a/libsolidity/analysis/ViewPureChecker.h +++ b/libsolidity/analysis/ViewPureChecker.h @@ -23,6 +23,7 @@ #include #include +#include namespace langutil { @@ -67,7 +68,7 @@ private: void reportMutability( StateMutability _mutability, langutil::SourceLocation const& _location, - boost::optional const& _nestedLocation = {} + std::optional const& _nestedLocation = {} ); std::vector> const& m_ast; diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h index 4d03bf4ec..3ae78e44e 100644 --- a/libsolidity/ast/AST.h +++ b/libsolidity/ast/AST.h @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -912,10 +913,10 @@ public: ElementaryTypeName( SourceLocation const& _location, ElementaryTypeNameToken const& _elem, - boost::optional _stateMutability = {} + std::optional _stateMutability = {} ): TypeName(_location), m_type(_elem), m_stateMutability(_stateMutability) { - solAssert(!_stateMutability.is_initialized() || _elem.token() == Token::Address, ""); + solAssert(!_stateMutability.has_value() || _elem.token() == Token::Address, ""); } void accept(ASTVisitor& _visitor) override; @@ -923,11 +924,11 @@ public: ElementaryTypeNameToken const& typeName() const { return m_type; } - boost::optional const& stateMutability() const { return m_stateMutability; } + std::optional const& stateMutability() const { return m_stateMutability; } private: ElementaryTypeNameToken m_type; - boost::optional m_stateMutability; ///< state mutability for address type + std::optional m_stateMutability; ///< state mutability for address type }; /** diff --git a/libsolidity/ast/ASTAnnotations.h b/libsolidity/ast/ASTAnnotations.h index 539ba85bf..eb9002a03 100644 --- a/libsolidity/ast/ASTAnnotations.h +++ b/libsolidity/ast/ASTAnnotations.h @@ -26,10 +26,9 @@ #include #include -#include - #include #include +#include #include #include @@ -183,7 +182,7 @@ struct ExpressionAnnotation: ASTAnnotation /// Types and - if given - names of arguments if the expr. is a function /// that is called, used for overload resoultion - boost::optional arguments; + std::optional arguments; }; struct IdentifierAnnotation: ExpressionAnnotation diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 7834e4a37..0162fc1c1 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -148,7 +148,7 @@ Json::Value ASTJsonConverter::typePointerToJson(TypePointer _tp, bool _short) return typeDescriptions; } -Json::Value ASTJsonConverter::typePointerToJson(boost::optional const& _tps) +Json::Value ASTJsonConverter::typePointerToJson(std::optional const& _tps) { if (_tps) { diff --git a/libsolidity/ast/ASTJsonConverter.h b/libsolidity/ast/ASTJsonConverter.h index 7cd1dde39..6ebb7e964 100644 --- a/libsolidity/ast/ASTJsonConverter.h +++ b/libsolidity/ast/ASTJsonConverter.h @@ -27,10 +27,12 @@ #include #include + +#include +#include #include #include #include -#include namespace langutil { @@ -169,7 +171,7 @@ private: return json; } static Json::Value typePointerToJson(TypePointer _tp, bool _short = false); - static Json::Value typePointerToJson(boost::optional const& _tps); + static Json::Value typePointerToJson(std::optional const& _tps); void appendExpressionAttributes( std::vector> &_attributes, ExpressionAnnotation const& _annotation diff --git a/libsolidity/ast/TypeProvider.h b/libsolidity/ast/TypeProvider.h index 4b18f52e6..0aefc9edd 100644 --- a/libsolidity/ast/TypeProvider.h +++ b/libsolidity/ast/TypeProvider.h @@ -22,6 +22,7 @@ #include #include #include +#include #include namespace dev diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index d9636e598..65c10d9ce 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -1812,10 +1812,10 @@ TypePointer ArrayType::decodingType() const TypeResult ArrayType::interfaceType(bool _inLibrary) const { - if (_inLibrary && m_interfaceType_library.is_initialized()) + if (_inLibrary && m_interfaceType_library.has_value()) return *m_interfaceType_library; - if (!_inLibrary && m_interfaceType.is_initialized()) + if (!_inLibrary && m_interfaceType.has_value()) return *m_interfaceType; TypeResult result{TypePointer{}}; @@ -2106,10 +2106,10 @@ MemberList::MemberMap StructType::nativeMembers(ContractDefinition const*) const TypeResult StructType::interfaceType(bool _inLibrary) const { - if (_inLibrary && m_interfaceType_library.is_initialized()) + if (_inLibrary && m_interfaceType_library.has_value()) return *m_interfaceType_library; - if (!_inLibrary && m_interfaceType.is_initialized()) + if (!_inLibrary && m_interfaceType.has_value()) return *m_interfaceType; TypeResult result{TypePointer{}}; @@ -2166,7 +2166,7 @@ TypeResult StructType::interfaceType(bool _inLibrary) const } }; - m_recursive = m_recursive.get() || (CycleDetector(visitor).run(structDefinition()) != nullptr); + m_recursive = m_recursive.value() || (CycleDetector(visitor).run(structDefinition()) != nullptr); std::string const recursiveErrMsg = "Recursive type not allowed for public or external contract functions."; @@ -2179,13 +2179,13 @@ TypeResult StructType::interfaceType(bool _inLibrary) const else m_interfaceType_library = TypeProvider::withLocation(this, DataLocation::Memory, true); - if (m_recursive.get()) + if (m_recursive.value()) m_interfaceType = TypeResult::err(recursiveErrMsg); return *m_interfaceType_library; } - if (m_recursive.get()) + if (m_recursive.value()) m_interfaceType = TypeResult::err(recursiveErrMsg); else if (!result.message().empty()) m_interfaceType = result; diff --git a/libsolidity/ast/Types.h b/libsolidity/ast/Types.h index 992d95552..c5aeb3bef 100644 --- a/libsolidity/ast/Types.h +++ b/libsolidity/ast/Types.h @@ -31,11 +31,11 @@ #include #include -#include #include #include #include +#include #include #include @@ -769,8 +769,8 @@ private: Type const* m_baseType; bool m_hasDynamicLength = true; u256 m_length; - mutable boost::optional m_interfaceType; - mutable boost::optional m_interfaceType_library; + mutable std::optional m_interfaceType; + mutable std::optional m_interfaceType_library; }; /** @@ -865,12 +865,12 @@ public: bool recursive() const { - if (m_recursive.is_initialized()) - return m_recursive.get(); + if (m_recursive.has_value()) + return m_recursive.value(); interfaceType(false); - return m_recursive.get(); + return m_recursive.value(); } std::unique_ptr copyForLocation(DataLocation _location, bool _isPointer) const override; @@ -898,9 +898,9 @@ public: private: StructDefinition const& m_struct; // Caches for interfaceType(bool) - mutable boost::optional m_interfaceType; - mutable boost::optional m_interfaceType_library; - mutable boost::optional m_recursive; + mutable std::optional m_interfaceType; + mutable std::optional m_interfaceType_library; + mutable std::optional m_recursive; }; /** diff --git a/libsolidity/codegen/CompilerContext.cpp b/libsolidity/codegen/CompilerContext.cpp index da947073f..d6045ee20 100644 --- a/libsolidity/codegen/CompilerContext.cpp +++ b/libsolidity/codegen/CompilerContext.cpp @@ -411,7 +411,7 @@ void CompilerContext::appendInlineAssembly( analyzerResult = yul::AsmAnalyzer( analysisInfo, errorReporter, - boost::none, + std::nullopt, dialect, identifierAccess.resolve ).analyze(*parserResult); diff --git a/libsolidity/codegen/YulUtilFunctions.cpp b/libsolidity/codegen/YulUtilFunctions.cpp index 9bb4a9984..8910ad7e7 100644 --- a/libsolidity/codegen/YulUtilFunctions.cpp +++ b/libsolidity/codegen/YulUtilFunctions.cpp @@ -962,11 +962,11 @@ string YulUtilFunctions::readFromCalldata(Type const& _type) return readFromMemoryOrCalldata(_type, true); } -string YulUtilFunctions::updateStorageValueFunction(Type const& _type, boost::optional const& _offset) +string YulUtilFunctions::updateStorageValueFunction(Type const& _type, std::optional const& _offset) { string const functionName = "update_storage_value_" + - (_offset.is_initialized() ? ("offset_" + to_string(*_offset)) : "") + + (_offset.has_value() ? ("offset_" + to_string(*_offset)) : "") + _type.identifier(); return m_functionCollector->createFunction(functionName, [&] { @@ -983,11 +983,11 @@ string YulUtilFunctions::updateStorageValueFunction(Type const& _type, boost::op )") ("functionName", functionName) ("update", - _offset.is_initialized() ? + _offset.has_value() ? updateByteSliceFunction(_type.storageBytes(), *_offset) : updateByteSliceFunctionDynamic(_type.storageBytes()) ) - ("offset", _offset.is_initialized() ? "" : "offset, ") + ("offset", _offset.has_value() ? "" : "offset, ") ("prepare", prepareStoreFunction(_type)) .render(); } diff --git a/libsolidity/codegen/YulUtilFunctions.h b/libsolidity/codegen/YulUtilFunctions.h index 3b9617c71..68d57a6fd 100644 --- a/libsolidity/codegen/YulUtilFunctions.h +++ b/libsolidity/codegen/YulUtilFunctions.h @@ -197,7 +197,7 @@ public: /// the specified slot and offset. If offset is not given, it is expected as /// runtime parameter. /// signature: (slot, [offset,] value) - std::string updateStorageValueFunction(Type const& _type, boost::optional const& _offset = boost::optional()); + std::string updateStorageValueFunction(Type const& _type, std::optional const& _offset = std::optional()); /// Returns the name of a function that will write the given value to /// the specified address. diff --git a/libsolidity/codegen/ir/IRLValue.cpp b/libsolidity/codegen/ir/IRLValue.cpp index fb1bcdcbe..6ded09c05 100644 --- a/libsolidity/codegen/ir/IRLValue.cpp +++ b/libsolidity/codegen/ir/IRLValue.cpp @@ -115,7 +115,7 @@ string IRStorageItem::storeValue(string const& _value, Type const& _sourceType) if (m_type->isValueType()) solAssert(_sourceType == *m_type, "Different type, but might not be an error."); - boost::optional offset; + std::optional offset; if (m_offset.type() == typeid(unsigned)) offset = get(m_offset); diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp index 7df52ca23..5bd9f9a45 100644 --- a/libsolidity/interface/CompilerStack.cpp +++ b/libsolidity/interface/CompilerStack.cpp @@ -95,7 +95,7 @@ CompilerStack::~CompilerStack() TypeProvider::reset(); } -boost::optional CompilerStack::parseRemapping(string const& _remapping) +std::optional CompilerStack::parseRemapping(string const& _remapping) { auto eq = find(_remapping.begin(), _remapping.end(), '='); if (eq == _remapping.end()) diff --git a/libsolidity/interface/CompilerStack.h b/libsolidity/interface/CompilerStack.h index 72a81b437..b38227b78 100644 --- a/libsolidity/interface/CompilerStack.h +++ b/libsolidity/interface/CompilerStack.h @@ -121,7 +121,7 @@ public: void reset(bool _keepSettings = false); // Parses a remapping of the format "context:prefix=target". - static boost::optional parseRemapping(std::string const& _remapping); + static std::optional parseRemapping(std::string const& _remapping); /// Sets path remappings. /// Must be set before parsing. diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index ca27deac2..86e88ce3d 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -31,8 +31,9 @@ #include #include -#include + #include +#include using namespace std; using namespace dev; @@ -317,7 +318,7 @@ Json::Value collectEVMObject(eth::LinkerObject const& _object, string const* _so return output; } -boost::optional checkKeys(Json::Value const& _input, set const& _keys, string const& _name) +std::optional checkKeys(Json::Value const& _input, set const& _keys, string const& _name) { if (!!_input && !_input.isObject()) return formatFatalError("JSONError", "\"" + _name + "\" must be an object"); @@ -326,46 +327,46 @@ boost::optional checkKeys(Json::Value const& _input, set co if (!_keys.count(member)) return formatFatalError("JSONError", "Unknown key \"" + member + "\""); - return boost::none; + return std::nullopt; } -boost::optional checkRootKeys(Json::Value const& _input) +std::optional checkRootKeys(Json::Value const& _input) { static set keys{"auxiliaryInput", "language", "settings", "sources"}; return checkKeys(_input, keys, "root"); } -boost::optional checkSourceKeys(Json::Value const& _input, string const& _name) +std::optional checkSourceKeys(Json::Value const& _input, string const& _name) { static set keys{"content", "keccak256", "urls"}; return checkKeys(_input, keys, "sources." + _name); } -boost::optional checkAuxiliaryInputKeys(Json::Value const& _input) +std::optional checkAuxiliaryInputKeys(Json::Value const& _input) { static set keys{"smtlib2responses"}; return checkKeys(_input, keys, "auxiliaryInput"); } -boost::optional checkSettingsKeys(Json::Value const& _input) +std::optional checkSettingsKeys(Json::Value const& _input) { static set keys{"parserErrorRecovery", "evmVersion", "libraries", "metadata", "optimizer", "outputSelection", "remappings"}; return checkKeys(_input, keys, "settings"); } -boost::optional checkOptimizerKeys(Json::Value const& _input) +std::optional checkOptimizerKeys(Json::Value const& _input) { static set keys{"details", "enabled", "runs"}; return checkKeys(_input, keys, "settings.optimizer"); } -boost::optional checkOptimizerDetailsKeys(Json::Value const& _input) +std::optional checkOptimizerDetailsKeys(Json::Value const& _input) { static set keys{"peephole", "jumpdestRemover", "orderLiterals", "deduplicate", "cse", "constantOptimizer", "yul", "yulDetails"}; return checkKeys(_input, keys, "settings.optimizer.details"); } -boost::optional checkOptimizerDetail(Json::Value const& _details, std::string const& _name, bool& _setting) +std::optional checkOptimizerDetail(Json::Value const& _details, std::string const& _name, bool& _setting) { if (_details.isMember(_name)) { @@ -376,7 +377,7 @@ boost::optional checkOptimizerDetail(Json::Value const& _details, s return {}; } -boost::optional checkMetadataKeys(Json::Value const& _input) +std::optional checkMetadataKeys(Json::Value const& _input) { if (_input.isObject() && _input.isMember("useLiteralContent") && !_input["useLiteralContent"].isBool()) return formatFatalError("JSONError", "\"settings.metadata.useLiteralContent\" must be Boolean"); @@ -384,7 +385,7 @@ boost::optional checkMetadataKeys(Json::Value const& _input) return checkKeys(_input, keys, "settings.metadata"); } -boost::optional checkOutputSelection(Json::Value const& _outputSelection) +std::optional checkOutputSelection(Json::Value const& _outputSelection) { if (!!_outputSelection && !_outputSelection.isObject()) return formatFatalError("JSONError", "\"settings.outputSelection\" must be an object"); @@ -426,7 +427,7 @@ boost::optional checkOutputSelection(Json::Value const& _outputSele } } - return boost::none; + return std::nullopt; } /// Validates the optimizer settings and returns them in a parsed object. /// On error returns the json-formatted error message. @@ -635,7 +636,7 @@ boost::variant StandardCompile { if (!settings["evmVersion"].isString()) return formatFatalError("JSONError", "evmVersion must be a string."); - boost::optional version = langutil::EVMVersion::fromString(settings["evmVersion"].asString()); + std::optional version = langutil::EVMVersion::fromString(settings["evmVersion"].asString()); if (!version) return formatFatalError("JSONError", "Invalid EVM version requested."); ret.evmVersion = *version; diff --git a/libsolidity/interface/StandardCompiler.h b/libsolidity/interface/StandardCompiler.h index 9d0320abb..63ceb4f6b 100644 --- a/libsolidity/interface/StandardCompiler.h +++ b/libsolidity/interface/StandardCompiler.h @@ -24,7 +24,7 @@ #include -#include +#include #include namespace dev diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp index 56a74f47d..ad63ba505 100644 --- a/libsolidity/parsing/Parser.cpp +++ b/libsolidity/parsing/Parser.cpp @@ -874,7 +874,9 @@ ASTPointer Parser::parseTypeName(bool _allowVar) ASTNodeFactory nodeFactory(*this); nodeFactory.markEndPosition(); m_scanner->next(); - auto stateMutability = boost::make_optional(elemTypeName.token() == Token::Address, StateMutability::NonPayable); + auto stateMutability = elemTypeName.token() == Token::Address + ? optional{StateMutability::NonPayable} + : nullopt; if (TokenTraits::isStateMutabilitySpecifier(m_scanner->currentToken(), false)) { if (elemTypeName.token() == Token::Address) diff --git a/libyul/AsmAnalysis.h b/libyul/AsmAnalysis.h index facae9187..14337d323 100644 --- a/libyul/AsmAnalysis.h +++ b/libyul/AsmAnalysis.h @@ -31,11 +31,11 @@ #include #include -#include #include #include #include +#include namespace langutil { @@ -59,7 +59,7 @@ public: explicit AsmAnalyzer( AsmAnalysisInfo& _analysisInfo, langutil::ErrorReporter& _errorReporter, - boost::optional _errorTypeForLoose, + std::optional _errorTypeForLoose, Dialect const& _dialect, ExternalIdentifierAccess::Resolver const& _resolver = ExternalIdentifierAccess::Resolver(), std::set const& _dataNames = {} @@ -127,7 +127,7 @@ private: langutil::ErrorReporter& m_errorReporter; langutil::EVMVersion m_evmVersion; Dialect const& m_dialect; - boost::optional m_errorTypeForLoose; + std::optional m_errorTypeForLoose; /// Names of data objects to be referenced by builtin functions with literal arguments. std::set m_dataNames; ForLoop const* m_currentForLoop = nullptr; diff --git a/libyul/AsmScope.h b/libyul/AsmScope.h index f6c7fe59a..2c7af4ef1 100644 --- a/libyul/AsmScope.h +++ b/libyul/AsmScope.h @@ -27,10 +27,10 @@ #include #include -#include #include #include +#include namespace yul { diff --git a/libyul/AssemblyStack.cpp b/libyul/AssemblyStack.cpp index 15a1267a5..c72f32d7b 100644 --- a/libyul/AssemblyStack.cpp +++ b/libyul/AssemblyStack.cpp @@ -117,7 +117,7 @@ bool AssemblyStack::analyzeParsed(Object& _object) AsmAnalyzer analyzer( *_object.analysisInfo, m_errorReporter, - boost::none, + std::nullopt, languageToDialect(m_language, m_evmVersion), {}, _object.dataNames() diff --git a/libyul/backends/evm/EVMCodeTransform.cpp b/libyul/backends/evm/EVMCodeTransform.cpp index 9ca079f07..d3493b573 100644 --- a/libyul/backends/evm/EVMCodeTransform.cpp +++ b/libyul/backends/evm/EVMCodeTransform.cpp @@ -723,9 +723,7 @@ void CodeTransform::visitExpression(Expression const& _expression) void CodeTransform::visitStatements(vector const& _statements) { - // Workaround boost bug: - // https://www.boost.org/doc/libs/1_63_0/libs/optional/doc/html/boost_optional/tutorial/gotchas/false_positive_with__wmaybe_uninitialized.html - boost::optional jumpTarget = boost::make_optional(false, AbstractAssembly::LabelID()); + std::optional jumpTarget = std::nullopt; for (auto const& statement: _statements) { @@ -740,7 +738,7 @@ void CodeTransform::visitStatements(vector const& _statements) else if (!functionDefinition && jumpTarget) { m_assembly.appendLabel(*jumpTarget); - jumpTarget = boost::none; + jumpTarget = std::nullopt; } boost::apply_visitor(*this, statement); diff --git a/libyul/backends/evm/EVMCodeTransform.h b/libyul/backends/evm/EVMCodeTransform.h index 866322d2d..e44953807 100644 --- a/libyul/backends/evm/EVMCodeTransform.h +++ b/libyul/backends/evm/EVMCodeTransform.h @@ -28,8 +28,8 @@ #include #include -#include +#include #include namespace langutil diff --git a/libyul/backends/evm/EVMDialect.h b/libyul/backends/evm/EVMDialect.h index 1c47c8005..15b955d78 100644 --- a/libyul/backends/evm/EVMDialect.h +++ b/libyul/backends/evm/EVMDialect.h @@ -47,7 +47,7 @@ struct BuiltinContext struct BuiltinFunctionForEVM: BuiltinFunction { - boost::optional instruction; + std::optional instruction; /// Function to generate code for the given function call and append it to the abstract /// assembly. The fourth parameter is called to visit (and generate code for) the arguments /// from right to left. diff --git a/libyul/backends/wasm/EVMToEWasmTranslator.cpp b/libyul/backends/wasm/EVMToEWasmTranslator.cpp index 1be9a1a38..b3586d153 100644 --- a/libyul/backends/wasm/EVMToEWasmTranslator.cpp +++ b/libyul/backends/wasm/EVMToEWasmTranslator.cpp @@ -658,7 +658,7 @@ Object EVMToEWasmTranslator::run(Object const& _object) ErrorList errors; ErrorReporter errorReporter(errors); - AsmAnalyzer analyzer(*ret.analysisInfo, errorReporter, boost::none, WasmDialect::instance(), {}, _object.dataNames()); + AsmAnalyzer analyzer(*ret.analysisInfo, errorReporter, std::nullopt, WasmDialect::instance(), {}, _object.dataNames()); if (!analyzer.analyze(*ret.code)) { // TODO the errors here are "wrong" because they have invalid source references! diff --git a/libyul/backends/wasm/WordSizeTransform.cpp b/libyul/backends/wasm/WordSizeTransform.cpp index 01f0c3784..7314715d4 100644 --- a/libyul/backends/wasm/WordSizeTransform.cpp +++ b/libyul/backends/wasm/WordSizeTransform.cpp @@ -82,7 +82,7 @@ void WordSizeTransform::operator()(Block& _block) { iterateReplacing( _block.statements, - [&](Statement& _s) -> boost::optional> + [&](Statement& _s) -> std::optional> { if (_s.type() == typeid(VariableDeclaration)) { @@ -95,7 +95,7 @@ void WordSizeTransform::operator()(Block& _block) { if (varDecl.value) visit(*varDecl.value); rewriteVarDeclList(varDecl.variables); - return boost::none; + return std::nullopt; } else if ( varDecl.value->type() == typeid(Identifier) || @@ -114,7 +114,7 @@ void WordSizeTransform::operator()(Block& _block) std::move(newRhs[i]) } ); - return ret; + return {std::move(ret)}; } else yulAssert(false, ""); @@ -130,7 +130,7 @@ void WordSizeTransform::operator()(Block& _block) { if (assignment.value) visit(*assignment.value); rewriteIdentifierList(assignment.variableNames); - return boost::none; + return std::nullopt; } else if ( assignment.value->type() == typeid(Identifier) || @@ -149,7 +149,7 @@ void WordSizeTransform::operator()(Block& _block) std::move(newRhs[i]) } ); - return ret; + return {std::move(ret)}; } else yulAssert(false, ""); @@ -158,7 +158,7 @@ void WordSizeTransform::operator()(Block& _block) return handleSwitch(boost::get(_s)); else visit(_s); - return boost::none; + return std::nullopt; } ); } @@ -174,7 +174,7 @@ void WordSizeTransform::rewriteVarDeclList(TypedNameList& _nameList) { iterateReplacing( _nameList, - [&](TypedName const& _n) -> boost::optional + [&](TypedName const& _n) -> std::optional { TypedNameList ret; for (auto newName: generateU64IdentifierNames(_n.name)) @@ -188,7 +188,7 @@ void WordSizeTransform::rewriteIdentifierList(vector& _ids) { iterateReplacing( _ids, - [&](Identifier const& _id) -> boost::optional> + [&](Identifier const& _id) -> std::optional> { vector ret; for (auto newId: m_variableMapping.at(_id.name)) @@ -202,7 +202,7 @@ void WordSizeTransform::rewriteFunctionCallArguments(vector& _args) { iterateReplacing( _args, - [&](Expression& _e) -> boost::optional> + [&](Expression& _e) -> std::optional> { return expandValueToVector(_e); } diff --git a/libyul/optimiser/ASTCopier.h b/libyul/optimiser/ASTCopier.h index b2e0a383a..dab3e296a 100644 --- a/libyul/optimiser/ASTCopier.h +++ b/libyul/optimiser/ASTCopier.h @@ -25,11 +25,11 @@ #include #include -#include -#include -#include #include +#include +#include +#include namespace yul { diff --git a/libyul/optimiser/ASTWalker.h b/libyul/optimiser/ASTWalker.h index a1f244795..995f5fe21 100644 --- a/libyul/optimiser/ASTWalker.h +++ b/libyul/optimiser/ASTWalker.h @@ -26,11 +26,11 @@ #include #include -#include -#include -#include #include +#include +#include +#include namespace yul { diff --git a/libyul/optimiser/BlockFlattener.cpp b/libyul/optimiser/BlockFlattener.cpp index e6f085247..48816c695 100644 --- a/libyul/optimiser/BlockFlattener.cpp +++ b/libyul/optimiser/BlockFlattener.cpp @@ -30,7 +30,7 @@ void BlockFlattener::operator()(Block& _block) iterateReplacing( _block.statements, - [](Statement& _s) -> boost::optional> + [](Statement& _s) -> std::optional> { if (_s.type() == typeid(Block)) return std::move(boost::get(_s).statements); diff --git a/libyul/optimiser/CallGraphGenerator.h b/libyul/optimiser/CallGraphGenerator.h index 6946721bd..4dc420900 100644 --- a/libyul/optimiser/CallGraphGenerator.h +++ b/libyul/optimiser/CallGraphGenerator.h @@ -24,10 +24,9 @@ #include -#include - -#include #include +#include +#include namespace yul { diff --git a/libyul/optimiser/ControlFlowSimplifier.cpp b/libyul/optimiser/ControlFlowSimplifier.cpp index 96e399027..99fa4b137 100644 --- a/libyul/optimiser/ControlFlowSimplifier.cpp +++ b/libyul/optimiser/ControlFlowSimplifier.cpp @@ -30,7 +30,7 @@ using namespace std; using namespace dev; using namespace yul; -using OptionalStatements = boost::optional>; +using OptionalStatements = std::optional>; namespace { diff --git a/libyul/optimiser/DataFlowAnalyzer.cpp b/libyul/optimiser/DataFlowAnalyzer.cpp index c2042a19c..6cf65ff25 100644 --- a/libyul/optimiser/DataFlowAnalyzer.cpp +++ b/libyul/optimiser/DataFlowAnalyzer.cpp @@ -354,7 +354,7 @@ bool DataFlowAnalyzer::inScope(YulString _variableName) const return false; } -boost::optional> DataFlowAnalyzer::isSimpleStore( +std::optional> DataFlowAnalyzer::isSimpleStore( dev::eth::Instruction _store, ExpressionStatement const& _statement ) const diff --git a/libyul/optimiser/DataFlowAnalyzer.h b/libyul/optimiser/DataFlowAnalyzer.h index b8e455ea1..c4b3db5da 100644 --- a/libyul/optimiser/DataFlowAnalyzer.h +++ b/libyul/optimiser/DataFlowAnalyzer.h @@ -128,7 +128,7 @@ protected: /// Returns true iff the variable is in scope. bool inScope(YulString _variableName) const; - boost::optional> isSimpleStore( + std::optional> isSimpleStore( dev::eth::Instruction _store, ExpressionStatement const& _statement ) const; diff --git a/libyul/optimiser/Disambiguator.h b/libyul/optimiser/Disambiguator.h index ec6a0879d..cd3ff49a2 100644 --- a/libyul/optimiser/Disambiguator.h +++ b/libyul/optimiser/Disambiguator.h @@ -26,8 +26,8 @@ #include #include -#include +#include #include namespace yul diff --git a/libyul/optimiser/ExpressionInliner.h b/libyul/optimiser/ExpressionInliner.h index 16e48ceb5..9404f3e73 100644 --- a/libyul/optimiser/ExpressionInliner.h +++ b/libyul/optimiser/ExpressionInliner.h @@ -23,7 +23,7 @@ #include #include -#include +#include #include diff --git a/libyul/optimiser/ExpressionSplitter.cpp b/libyul/optimiser/ExpressionSplitter.cpp index 4c857f0a3..86fb6206f 100644 --- a/libyul/optimiser/ExpressionSplitter.cpp +++ b/libyul/optimiser/ExpressionSplitter.cpp @@ -85,8 +85,8 @@ void ExpressionSplitter::operator()(Block& _block) vector saved; swap(saved, m_statementsToPrefix); - function>(Statement&)> f = - [&](Statement& _statement) -> boost::optional> { + function>(Statement&)> f = + [&](Statement& _statement) -> std::optional> { m_statementsToPrefix.clear(); visit(_statement); if (m_statementsToPrefix.empty()) diff --git a/libyul/optimiser/ForLoopInitRewriter.cpp b/libyul/optimiser/ForLoopInitRewriter.cpp index 2de0a662f..a11215e50 100644 --- a/libyul/optimiser/ForLoopInitRewriter.cpp +++ b/libyul/optimiser/ForLoopInitRewriter.cpp @@ -27,7 +27,7 @@ void ForLoopInitRewriter::operator()(Block& _block) { iterateReplacing( _block.statements, - [&](Statement& _stmt) -> boost::optional> + [&](Statement& _stmt) -> std::optional> { if (_stmt.type() == typeid(ForLoop)) { diff --git a/libyul/optimiser/FullInliner.cpp b/libyul/optimiser/FullInliner.cpp index 437758481..8b0af2691 100644 --- a/libyul/optimiser/FullInliner.cpp +++ b/libyul/optimiser/FullInliner.cpp @@ -147,14 +147,14 @@ bool FullInliner::recursive(FunctionDefinition const& _fun) const void InlineModifier::operator()(Block& _block) { - function>(Statement&)> f = [&](Statement& _statement) -> boost::optional> { + function>(Statement&)> f = [&](Statement& _statement) -> std::optional> { visit(_statement); return tryInlineStatement(_statement); }; iterateReplacing(_block.statements, f); } -boost::optional> InlineModifier::tryInlineStatement(Statement& _statement) +std::optional> InlineModifier::tryInlineStatement(Statement& _statement) { // Only inline for expression statements, assignments and variable declarations. Expression* e = boost::apply_visitor(GenericFallbackReturnsVisitor( diff --git a/libyul/optimiser/FullInliner.h b/libyul/optimiser/FullInliner.h index 4f1ea9d3c..746cc46db 100644 --- a/libyul/optimiser/FullInliner.h +++ b/libyul/optimiser/FullInliner.h @@ -30,8 +30,8 @@ #include #include -#include +#include #include namespace yul @@ -126,7 +126,7 @@ public: void operator()(Block& _block) override; private: - boost::optional> tryInlineStatement(Statement& _statement); + std::optional> tryInlineStatement(Statement& _statement); std::vector performInline(Statement& _statement, FunctionCall& _funCall); YulString m_currentFunction; diff --git a/libyul/optimiser/SSAReverser.cpp b/libyul/optimiser/SSAReverser.cpp index d5f989d18..2a421f9d9 100644 --- a/libyul/optimiser/SSAReverser.cpp +++ b/libyul/optimiser/SSAReverser.cpp @@ -35,7 +35,7 @@ void SSAReverser::operator()(Block& _block) walkVector(_block.statements); iterateReplacingWindow<2>( _block.statements, - [&](Statement& _stmt1, Statement& _stmt2) -> boost::optional> + [&](Statement& _stmt1, Statement& _stmt2) -> std::optional> { auto* varDecl = boost::get(&_stmt1); diff --git a/libyul/optimiser/SSATransform.cpp b/libyul/optimiser/SSATransform.cpp index 9d9175754..1f5d47e20 100644 --- a/libyul/optimiser/SSATransform.cpp +++ b/libyul/optimiser/SSATransform.cpp @@ -58,7 +58,7 @@ void IntroduceSSA::operator()(Block& _block) { iterateReplacing( _block.statements, - [&](Statement& _s) -> boost::optional> + [&](Statement& _s) -> std::optional> { if (_s.type() == typeid(VariableDeclaration)) { @@ -213,7 +213,7 @@ void IntroduceControlFlowSSA::operator()(Block& _block) iterateReplacing( _block.statements, - [&](Statement& _s) -> boost::optional> + [&](Statement& _s) -> std::optional> { vector toPrepend; for (YulString toReassign: m_variablesToReassign) @@ -253,7 +253,7 @@ void IntroduceControlFlowSSA::operator()(Block& _block) else { toPrepend.emplace_back(std::move(_s)); - return toPrepend; + return {std::move(toPrepend)}; } } ); diff --git a/libyul/optimiser/SimplificationRules.cpp b/libyul/optimiser/SimplificationRules.cpp index 3f5d8541b..96f225f8c 100644 --- a/libyul/optimiser/SimplificationRules.cpp +++ b/libyul/optimiser/SimplificationRules.cpp @@ -64,7 +64,7 @@ bool SimplificationRules::isInitialized() const return !m_rules[uint8_t(dev::eth::Instruction::ADD)].empty(); } -boost::optional const*>> +std::optional const*>> SimplificationRules::instructionAndArguments(Dialect const& _dialect, Expression const& _expr) { if (_expr.type() == typeid(FunctionalInstruction)) diff --git a/libyul/optimiser/SimplificationRules.h b/libyul/optimiser/SimplificationRules.h index a63071b9f..f9b8c1fe7 100644 --- a/libyul/optimiser/SimplificationRules.h +++ b/libyul/optimiser/SimplificationRules.h @@ -26,9 +26,9 @@ #include #include -#include #include +#include #include namespace yul @@ -57,7 +57,7 @@ public: /// by the constructor, but we had some issues with static initialization. bool isInitialized() const; - static boost::optional const*>> + static std::optional const*>> instructionAndArguments(Dialect const& _dialect, Expression const& _expr); private: diff --git a/libyul/optimiser/StructuralSimplifier.cpp b/libyul/optimiser/StructuralSimplifier.cpp index d7bd36fe9..706176456 100644 --- a/libyul/optimiser/StructuralSimplifier.cpp +++ b/libyul/optimiser/StructuralSimplifier.cpp @@ -28,7 +28,7 @@ using namespace std; using namespace dev; using namespace yul; -using OptionalStatements = boost::optional>; +using OptionalStatements = std::optional>; namespace { @@ -54,7 +54,7 @@ OptionalStatements replaceConstArgSwitch(Switch& _switchStmt, u256 const& _const if (matchingCaseBlock) return make_vector(std::move(*matchingCaseBlock)); else - return {{}}; + return optional>{vector{}}; } } @@ -80,8 +80,8 @@ void StructuralSimplifier::simplify(std::vector& _statements) return {}; }, [&](Switch& _switchStmt) -> OptionalStatements { - if (boost::optional const constExprVal = hasLiteralValue(*_switchStmt.expression)) - return replaceConstArgSwitch(_switchStmt, constExprVal.get()); + if (std::optional const constExprVal = hasLiteralValue(*_switchStmt.expression)) + return replaceConstArgSwitch(_switchStmt, constExprVal.value()); return {}; }, [&](ForLoop& _forLoop) -> OptionalStatements { @@ -107,7 +107,7 @@ void StructuralSimplifier::simplify(std::vector& _statements) bool StructuralSimplifier::expressionAlwaysTrue(Expression const& _expression) { - if (boost::optional value = hasLiteralValue(_expression)) + if (std::optional value = hasLiteralValue(_expression)) return *value != 0; else return false; @@ -115,16 +115,16 @@ bool StructuralSimplifier::expressionAlwaysTrue(Expression const& _expression) bool StructuralSimplifier::expressionAlwaysFalse(Expression const& _expression) { - if (boost::optional value = hasLiteralValue(_expression)) + if (std::optional value = hasLiteralValue(_expression)) return *value == 0; else return false; } -boost::optional StructuralSimplifier::hasLiteralValue(Expression const& _expression) const +std::optional StructuralSimplifier::hasLiteralValue(Expression const& _expression) const { if (_expression.type() == typeid(Literal)) return valueOfLiteral(boost::get(_expression)); else - return boost::optional(); + return std::optional(); } diff --git a/libyul/optimiser/StructuralSimplifier.h b/libyul/optimiser/StructuralSimplifier.h index 28917bff9..aa1f38a90 100644 --- a/libyul/optimiser/StructuralSimplifier.h +++ b/libyul/optimiser/StructuralSimplifier.h @@ -51,7 +51,7 @@ private: void simplify(std::vector& _statements); bool expressionAlwaysTrue(Expression const& _expression); bool expressionAlwaysFalse(Expression const& _expression); - boost::optional hasLiteralValue(Expression const& _expression) const; + std::optional hasLiteralValue(Expression const& _expression) const; }; } diff --git a/libyul/optimiser/VarDeclInitializer.cpp b/libyul/optimiser/VarDeclInitializer.cpp index 5a18dfa32..45b53ee61 100644 --- a/libyul/optimiser/VarDeclInitializer.cpp +++ b/libyul/optimiser/VarDeclInitializer.cpp @@ -29,7 +29,7 @@ void VarDeclInitializer::operator()(Block& _block) { ASTModifier::operator()(_block); - using OptionalStatements = boost::optional>; + using OptionalStatements = std::optional>; GenericFallbackReturnsVisitor visitor{ [](VariableDeclaration& _varDecl) -> OptionalStatements { diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 79d85d82f..866774452 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -869,7 +869,7 @@ bool CommandLineInterface::processInput() if (m_args.count(g_strEVMVersion)) { string versionOptionStr = m_args[g_strEVMVersion].as(); - boost::optional versionOption = langutil::EVMVersion::fromString(versionOptionStr); + std::optional versionOption = langutil::EVMVersion::fromString(versionOptionStr); if (!versionOption) { serr() << "Invalid option for --evm-version: " << versionOptionStr << endl; diff --git a/test/Metadata.cpp b/test/Metadata.cpp index bdbf427e9..06f29ff6f 100644 --- a/test/Metadata.cpp +++ b/test/Metadata.cpp @@ -150,7 +150,7 @@ private: bytes const& m_metadata; }; -boost::optional> parseCBORMetadata(bytes const& _metadata) +std::optional> parseCBORMetadata(bytes const& _metadata) { try { diff --git a/test/Metadata.h b/test/Metadata.h index 4c7a10b31..a52ccf2e9 100644 --- a/test/Metadata.h +++ b/test/Metadata.h @@ -21,9 +21,8 @@ #include -#include - #include +#include #include namespace dev @@ -48,7 +47,7 @@ std::string bytecodeSansMetadata(std::string const& _bytecode); /// - bytes into hex strings /// - booleans into "true"/"false" strings /// - everything else is invalid -boost::optional> parseCBORMetadata(bytes const& _metadata); +std::optional> parseCBORMetadata(bytes const& _metadata); /// Expects a serialised metadata JSON and returns true if the /// content is valid metadata. diff --git a/test/TestCase.cpp b/test/TestCase.cpp index 88d7f7862..c264da100 100644 --- a/test/TestCase.cpp +++ b/test/TestCase.cpp @@ -184,7 +184,7 @@ bool EVMVersionRestrictedTestCase::validateSettings(langutil::EVMVersion _evmVer break; versionString = versionString.substr(versionBegin); - boost::optional version = langutil::EVMVersion::fromString(versionString); + std::optional version = langutil::EVMVersion::fromString(versionString); if (!version) throw runtime_error("Invalid EVM version: \"" + versionString + "\""); diff --git a/test/libdevcore/IterateReplacing.cpp b/test/libdevcore/IterateReplacing.cpp index 08cd1e22f..dd64d481b 100644 --- a/test/libdevcore/IterateReplacing.cpp +++ b/test/libdevcore/IterateReplacing.cpp @@ -34,7 +34,7 @@ BOOST_AUTO_TEST_SUITE(IterateReplacing) BOOST_AUTO_TEST_CASE(no_replacement) { vector v{"abc", "def", "ghi"}; - function>(string&)> f = [](string&) -> boost::optional> { return {}; }; + function>(string&)> f = [](string&) -> std::optional> { return {}; }; iterateReplacing(v, f); vector expectation{"abc", "def", "ghi"}; BOOST_CHECK(v == expectation); @@ -43,7 +43,7 @@ BOOST_AUTO_TEST_CASE(no_replacement) BOOST_AUTO_TEST_CASE(empty_input) { vector v; - function>(string&)> f = [](string&) -> boost::optional> { return {}; }; + function>(string&)> f = [](string&) -> std::optional> { return {}; }; iterateReplacing(v, f); vector expectation; BOOST_CHECK(v == expectation); @@ -52,7 +52,7 @@ BOOST_AUTO_TEST_CASE(empty_input) BOOST_AUTO_TEST_CASE(delete_some) { vector v{"abc", "def", "ghi"}; - function>(string&)> f = [](string& _s) -> boost::optional> { + function>(string&)> f = [](string& _s) -> std::optional> { if (_s == "def") return vector(); else @@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(delete_some) BOOST_AUTO_TEST_CASE(inject_some_start) { vector v{"abc", "def", "ghi"}; - function>(string&)> f = [](string& _s) -> boost::optional> { + function>(string&)> f = [](string& _s) -> std::optional> { if (_s == "abc") return vector{"x", "y"}; else @@ -80,7 +80,7 @@ BOOST_AUTO_TEST_CASE(inject_some_start) BOOST_AUTO_TEST_CASE(inject_some_end) { vector v{"abc", "def", "ghi"}; - function>(string&)> f = [](string& _s) -> boost::optional> { + function>(string&)> f = [](string& _s) -> std::optional> { if (_s == "ghi") return vector{"x", "y"}; else diff --git a/test/libsolidity/InlineAssembly.cpp b/test/libsolidity/InlineAssembly.cpp index 76985f54d..2dffbf3bf 100644 --- a/test/libsolidity/InlineAssembly.cpp +++ b/test/libsolidity/InlineAssembly.cpp @@ -34,11 +34,11 @@ #include -#include #include -#include #include +#include +#include using namespace std; using namespace langutil; @@ -54,7 +54,7 @@ namespace test namespace { -boost::optional parseAndReturnFirstError( +std::optional parseAndReturnFirstError( string const& _source, bool _assemble = false, bool _allowWarnings = true, diff --git a/test/libsolidity/Metadata.cpp b/test/libsolidity/Metadata.cpp index 89093e035..2526dd8b6 100644 --- a/test/libsolidity/Metadata.cpp +++ b/test/libsolidity/Metadata.cpp @@ -41,7 +41,7 @@ map requireParsedCBORMetadata(bytes const& _bytecode) { bytes cborMetadata = dev::test::onlyMetadata(_bytecode); BOOST_REQUIRE(!cborMetadata.empty()); - boost::optional> tmp = dev::test::parseCBORMetadata(cborMetadata); + std::optional> tmp = dev::test::parseCBORMetadata(cborMetadata); BOOST_REQUIRE(tmp); return *tmp; } diff --git a/test/libsolidity/SolidityOptimizer.cpp b/test/libsolidity/SolidityOptimizer.cpp index 9f8a2e144..e3e96bb21 100644 --- a/test/libsolidity/SolidityOptimizer.cpp +++ b/test/libsolidity/SolidityOptimizer.cpp @@ -104,7 +104,7 @@ public: /// @returns the number of instructions in the given bytecode, not taking the metadata hash /// into account. - size_t numInstructions(bytes const& _bytecode, boost::optional _which = boost::optional{}) + size_t numInstructions(bytes const& _bytecode, std::optional _which = std::optional{}) { bytes realCode = bytecodeSansMetadata(_bytecode); BOOST_REQUIRE_MESSAGE(!realCode.empty(), "Invalid or missing metadata in bytecode."); diff --git a/test/libsolidity/util/ContractABIUtils.cpp b/test/libsolidity/util/ContractABIUtils.cpp index 3d1a7c79a..bd94ec99a 100644 --- a/test/libsolidity/util/ContractABIUtils.cpp +++ b/test/libsolidity/util/ContractABIUtils.cpp @@ -141,14 +141,14 @@ string functionSignatureFromABI(Json::Value const& _functionABI) } -boost::optional ContractABIUtils::parametersFromJsonOutputs( +std::optional ContractABIUtils::parametersFromJsonOutputs( ErrorReporter& _errorReporter, Json::Value const& _contractABI, string const& _functionSignature ) { if (!_contractABI) - return boost::none; + return std::nullopt; for (auto const& function: _contractABI) if (_functionSignature == functionSignatureFromABI(function)) @@ -177,17 +177,17 @@ boost::optional ContractABIUtils::parameters "Could not convert \"" + type + "\" to internal ABI type representation. Falling back to default encoding." ); - return boost::none; + return std::nullopt; } finalParams += inplaceTypeParams; inplaceTypeParams.clear(); } - return boost::optional(finalParams + dynamicTypeParams); + return std::optional(finalParams + dynamicTypeParams); } - return boost::none; + return std::nullopt; } bool ContractABIUtils::appendTypesFromName( diff --git a/test/libsolidity/util/ContractABIUtils.h b/test/libsolidity/util/ContractABIUtils.h index 3b1b0dc56..cc4a541ee 100644 --- a/test/libsolidity/util/ContractABIUtils.h +++ b/test/libsolidity/util/ContractABIUtils.h @@ -42,7 +42,7 @@ public: /// a list of internal type representations of isoltest. /// Creates parameters from Contract ABI and is used to generate values for /// auto-correction during interactive update routine. - static boost::optional parametersFromJsonOutputs( + static std::optional parametersFromJsonOutputs( ErrorReporter& _errorReporter, Json::Value const& _contractABI, std::string const& _functionSignature diff --git a/test/libsolidity/util/TestFileParser.cpp b/test/libsolidity/util/TestFileParser.cpp index f33853dfe..f834a532b 100644 --- a/test/libsolidity/util/TestFileParser.cpp +++ b/test/libsolidity/util/TestFileParser.cpp @@ -24,11 +24,11 @@ #include #include -#include #include #include #include +#include #include using namespace dev; diff --git a/test/libsolidity/util/TestFunctionCall.cpp b/test/libsolidity/util/TestFunctionCall.cpp index 25b60a184..1e52c1932 100644 --- a/test/libsolidity/util/TestFunctionCall.cpp +++ b/test/libsolidity/util/TestFunctionCall.cpp @@ -20,8 +20,8 @@ #include #include -#include +#include #include #include @@ -124,12 +124,12 @@ string TestFunctionCall::format( if (!matchesExpectation()) { - boost::optional abiParams; + std::optional abiParams; if (isFailure) { if (!output.empty()) - abiParams = boost::make_optional(ContractABIUtils::failureParameters(output)); + abiParams = ContractABIUtils::failureParameters(output); } else abiParams = ContractABIUtils::parametersFromJsonOutputs( @@ -139,7 +139,7 @@ string TestFunctionCall::format( ); string bytesOutput = abiParams ? - BytesUtils::formatRawBytes(output, abiParams.get(), _linePrefix) : + BytesUtils::formatRawBytes(output, abiParams.value(), _linePrefix) : BytesUtils::formatRawBytes( output, ContractABIUtils::defaultParameters(ceil(output.size() / 32)), @@ -208,7 +208,7 @@ string TestFunctionCall::formatBytesParameters( } else { - boost::optional abiParams = ContractABIUtils::parametersFromJsonOutputs( + std::optional abiParams = ContractABIUtils::parametersFromJsonOutputs( _errorReporter, m_contractABI, _signature @@ -216,17 +216,17 @@ string TestFunctionCall::formatBytesParameters( if (abiParams) { - boost::optional preferredParams = ContractABIUtils::preferredParameters( + std::optional preferredParams = ContractABIUtils::preferredParameters( _errorReporter, _parameters, - abiParams.get(), + abiParams.value(), _bytes ); if (preferredParams) { - ContractABIUtils::overwriteParameters(_errorReporter, preferredParams.get(), abiParams.get()); - os << BytesUtils::formatBytesRange(_bytes, preferredParams.get(), _highlight); + ContractABIUtils::overwriteParameters(_errorReporter, preferredParams.value(), abiParams.value()); + os << BytesUtils::formatBytesRange(_bytes, preferredParams.value(), _highlight); } } else diff --git a/test/libyul/ObjectParser.cpp b/test/libyul/ObjectParser.cpp index 34be474b5..35cf21f24 100644 --- a/test/libyul/ObjectParser.cpp +++ b/test/libyul/ObjectParser.cpp @@ -27,11 +27,11 @@ #include -#include #include -#include #include +#include +#include using namespace std; using namespace langutil; @@ -63,7 +63,7 @@ std::pair parse(string const& _source) return {false, {}}; } -boost::optional parseAndReturnFirstError(string const& _source, bool _allowWarnings = true) +std::optional parseAndReturnFirstError(string const& _source, bool _allowWarnings = true) { bool success; ErrorList errors; diff --git a/test/libyul/Parser.cpp b/test/libyul/Parser.cpp index 899f40f72..c08e0fe18 100644 --- a/test/libyul/Parser.cpp +++ b/test/libyul/Parser.cpp @@ -31,11 +31,11 @@ #include #include -#include #include -#include #include +#include +#include using namespace std; using namespace dev; @@ -61,7 +61,7 @@ bool parse(string const& _source, Dialect const& _dialect, ErrorReporter& errorR return (yul::AsmAnalyzer( analysisInfo, errorReporter, - boost::none, + std::nullopt, _dialect )).analyze(*parserResult); } @@ -73,7 +73,7 @@ bool parse(string const& _source, Dialect const& _dialect, ErrorReporter& errorR return false; } -boost::optional parseAndReturnFirstError(string const& _source, Dialect const& _dialect, bool _allowWarnings = true) +std::optional parseAndReturnFirstError(string const& _source, Dialect const& _dialect, bool _allowWarnings = true) { ErrorList errors; ErrorReporter errorReporter(errors); diff --git a/test/tools/isoltest.cpp b/test/tools/isoltest.cpp index 08b11f40b..052e6b570 100644 --- a/test/tools/isoltest.cpp +++ b/test/tools/isoltest.cpp @@ -350,7 +350,7 @@ void setupTerminal() #endif } -boost::optional runTestSuite( +std::optional runTestSuite( TestCreator _testCaseCreator, TestOptions const& _options, fs::path const& _basePath, @@ -364,7 +364,7 @@ boost::optional runTestSuite( if (!fs::exists(testPath) || !fs::is_directory(testPath)) { cerr << _name << " tests not found. Use the --testpath argument." << endl; - return {}; + return std::nullopt; } TestStats stats = TestTool::processPath(