mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Make bool type optional for bool literals.
This commit is contained in:
parent
a66782537a
commit
d3b53ee394
@ -50,7 +50,7 @@ string AsmPrinter::operator()(Literal const& _literal) const
|
|||||||
return _literal.value.str() + appendTypeName(_literal.type);
|
return _literal.value.str() + appendTypeName(_literal.type);
|
||||||
case LiteralKind::Boolean:
|
case LiteralKind::Boolean:
|
||||||
yulAssert(_literal.value == "true"_yulstring || _literal.value == "false"_yulstring, "Invalid bool literal.");
|
yulAssert(_literal.value == "true"_yulstring || _literal.value == "false"_yulstring, "Invalid bool literal.");
|
||||||
return ((_literal.value == "true"_yulstring) ? "true" : "false") + appendTypeName(_literal.type);
|
return ((_literal.value == "true"_yulstring) ? "true" : "false") + appendTypeName(_literal.type, true);
|
||||||
case LiteralKind::String:
|
case LiteralKind::String:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -237,9 +237,17 @@ string AsmPrinter::formatTypedName(TypedName _variable) const
|
|||||||
return _variable.name.str() + appendTypeName(_variable.type);
|
return _variable.name.str() + appendTypeName(_variable.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
string AsmPrinter::appendTypeName(YulString _type) const
|
string AsmPrinter::appendTypeName(YulString _type, bool _isBoolLiteral) const
|
||||||
{
|
{
|
||||||
if (_type.empty() || (m_dialect && _type == m_dialect->defaultType))
|
if (m_dialect && !_type.empty())
|
||||||
|
{
|
||||||
|
if (!_isBoolLiteral && _type == m_dialect->defaultType)
|
||||||
|
_type = {};
|
||||||
|
else if (_isBoolLiteral && _type == m_dialect->boolType && !m_dialect->defaultType.empty())
|
||||||
|
// Special case: If we have a bool type but empty default type, do not remove the type.
|
||||||
|
_type = {};
|
||||||
|
}
|
||||||
|
if (_type.empty())
|
||||||
return {};
|
return {};
|
||||||
else
|
else
|
||||||
return ":" + _type.str();
|
return ":" + _type.str();
|
||||||
|
@ -58,7 +58,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::string formatTypedName(TypedName _variable) const;
|
std::string formatTypedName(TypedName _variable) const;
|
||||||
std::string appendTypeName(YulString _type) const;
|
std::string appendTypeName(YulString _type, bool _isBoolLiteral = false) const;
|
||||||
|
|
||||||
Dialect const* m_dialect = nullptr;
|
Dialect const* m_dialect = nullptr;
|
||||||
};
|
};
|
||||||
|
@ -48,6 +48,7 @@ struct BuiltinFunction
|
|||||||
|
|
||||||
struct Dialect: boost::noncopyable
|
struct Dialect: boost::noncopyable
|
||||||
{
|
{
|
||||||
|
/// Default type, can be omitted.
|
||||||
YulString defaultType;
|
YulString defaultType;
|
||||||
/// Type used for the literals "true" and "false".
|
/// Type used for the literals "true" and "false".
|
||||||
YulString boolType;
|
YulString boolType;
|
||||||
|
@ -573,6 +573,7 @@ BOOST_AUTO_TEST_CASE(default_types_set)
|
|||||||
shared_ptr<Block> result = parse(
|
shared_ptr<Block> result = parse(
|
||||||
"{"
|
"{"
|
||||||
"let x:bool := true:bool "
|
"let x:bool := true:bool "
|
||||||
|
"let z:bool := true "
|
||||||
"let y := add(1, 2) "
|
"let y := add(1, 2) "
|
||||||
"switch y case 0 {} default {} "
|
"switch y case 0 {} default {} "
|
||||||
"}",
|
"}",
|
||||||
@ -586,6 +587,7 @@ BOOST_AUTO_TEST_CASE(default_types_set)
|
|||||||
BOOST_CHECK_EQUAL(AsmPrinter{}(*result),
|
BOOST_CHECK_EQUAL(AsmPrinter{}(*result),
|
||||||
"{\n"
|
"{\n"
|
||||||
" let x:bool := true:bool\n"
|
" let x:bool := true:bool\n"
|
||||||
|
" let z:bool := true:bool\n"
|
||||||
" let y:u256 := add(1:u256, 2:u256)\n"
|
" let y:u256 := add(1:u256, 2:u256)\n"
|
||||||
" switch y\n"
|
" switch y\n"
|
||||||
" case 0:u256 { }\n"
|
" case 0:u256 { }\n"
|
||||||
@ -597,7 +599,8 @@ BOOST_AUTO_TEST_CASE(default_types_set)
|
|||||||
// should be omitted.
|
// should be omitted.
|
||||||
BOOST_CHECK_EQUAL(AsmPrinter{EVMDialectTyped::instance(EVMVersion{})}(*result),
|
BOOST_CHECK_EQUAL(AsmPrinter{EVMDialectTyped::instance(EVMVersion{})}(*result),
|
||||||
"{\n"
|
"{\n"
|
||||||
" let x:bool := true:bool\n"
|
" let x:bool := true\n"
|
||||||
|
" let z:bool := true\n"
|
||||||
" let y := add(1, 2)\n"
|
" let y := add(1, 2)\n"
|
||||||
" switch y\n"
|
" switch y\n"
|
||||||
" case 0 { }\n"
|
" case 0 { }\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user