diff options
author | chriseth <c@ethdev.com> | 2015-08-05 23:19:19 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2015-08-05 23:19:19 +0800 |
commit | 4ce09762c738bb69daa2537892527952fcfe6d7f (patch) | |
tree | 8b68b4dfd4dce197e65d7d10fe72d8c14a347852 /AST.cpp | |
parent | 3380c7c6c9d900b1392812dff009bf524c1a7e53 (diff) | |
parent | 56d5c3310628a1e90225062f0ed21c8378678d09 (diff) | |
download | dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.tar dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.tar.gz dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.tar.bz2 dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.tar.lz dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.tar.xz dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.tar.zst dexon-solidity-4ce09762c738bb69daa2537892527952fcfe6d7f.zip |
Merge pull request #2688 from chriseth/toBytesConversion
Allow explicit conversions bytes <-> string.
Diffstat (limited to 'AST.cpp')
-rw-r--r-- | AST.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -844,9 +844,15 @@ void FunctionCall::checkTypeRequirements(TypePointers const*) BOOST_THROW_EXCEPTION(createTypeError("Exactly one argument expected for explicit type conversion.")); if (!isPositionalCall) BOOST_THROW_EXCEPTION(createTypeError("Type conversion cannot allow named arguments.")); - if (!m_arguments.front()->getType()->isExplicitlyConvertibleTo(*type.getActualType())) - BOOST_THROW_EXCEPTION(createTypeError("Explicit type conversion not allowed.")); m_type = type.getActualType(); + auto argType = m_arguments.front()->getType(); + if (auto argRefType = dynamic_cast<ReferenceType const*>(argType.get())) + // do not change the data location when converting + // (data location cannot yet be specified for type conversions) + m_type = ReferenceType::copyForLocationIfReference(argRefType->location(), m_type); + if (!argType->isExplicitlyConvertibleTo(*m_type)) + BOOST_THROW_EXCEPTION(createTypeError("Explicit type conversion not allowed.")); + return; } |