From 83e6c345265c88c194416c2499af8afa3dc51e83 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Sat, 4 Aug 2018 14:16:23 +0100 Subject: Fix declaration suggestion for var with different number of components --- libsolidity/analysis/TypeChecker.cpp | 6 ++++++ test/libsolidity/syntaxTests/types/var_type_suggest.sol | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 8c84e4dc..f742fcc0 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -1038,7 +1038,10 @@ string createTupleDecl(vector> const& _decls) vector components; for (ASTPointer const& decl: _decls) if (decl) + { + solAssert(decl->annotation().type, ""); components.emplace_back(decl->annotation().type->toString(false) + " " + decl->name()); + } else components.emplace_back(); @@ -1056,6 +1059,9 @@ bool typeCanBeExpressed(vector> const& decls) if (!decl) continue; + if (!decl->annotation().type) + return false; + if (auto functionType = dynamic_cast(decl->annotation().type.get())) if ( functionType->kind() != FunctionType::Kind::Internal && diff --git a/test/libsolidity/syntaxTests/types/var_type_suggest.sol b/test/libsolidity/syntaxTests/types/var_type_suggest.sol index 176fab96..cc35fdd6 100644 --- a/test/libsolidity/syntaxTests/types/var_type_suggest.sol +++ b/test/libsolidity/syntaxTests/types/var_type_suggest.sol @@ -12,6 +12,10 @@ contract C { var myblockhash = block.blockhash; var (a, b) = (2, "troi"); var (x,, z) = h(); + var (c, d) = (""); + var (k, l) = (2); + var (m, n) = 1; + var (o, p) = ""; } } // ---- @@ -21,3 +25,11 @@ contract C { // SyntaxError: (293-326): Use of the "var" keyword is disallowed. Type cannot be expressed in syntax. // SyntaxError: (336-360): Use of the "var" keyword is disallowed. Use explicit declaration `(uint8 a, string memory b) = ...´ instead. // SyntaxError: (370-387): Use of the "var" keyword is disallowed. Use explicit declaration `(uint256 x, , uint256 z) = ...´ instead. +// TypeError: (397-414): Different number of components on the left hand side (2) than on the right hand side (1). +// SyntaxError: (397-414): Use of the "var" keyword is disallowed. Type cannot be expressed in syntax. +// TypeError: (424-440): Different number of components on the left hand side (2) than on the right hand side (1). +// SyntaxError: (424-440): Use of the "var" keyword is disallowed. Type cannot be expressed in syntax. +// TypeError: (450-464): Different number of components on the left hand side (2) than on the right hand side (1). +// SyntaxError: (450-464): Use of the "var" keyword is disallowed. Type cannot be expressed in syntax. +// TypeError: (474-489): Different number of components on the left hand side (2) than on the right hand side (1). +// SyntaxError: (474-489): Use of the "var" keyword is disallowed. Type cannot be expressed in syntax. -- cgit