mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
tmp
This commit is contained in:
parent
ea9dfca1ae
commit
9120737f57
@ -46,16 +46,6 @@ set(sources
|
||||
analysis/TypeChecker.h
|
||||
analysis/ViewPureChecker.cpp
|
||||
analysis/ViewPureChecker.h
|
||||
analysis/experimental/Analysis.cpp
|
||||
analysis/experimental/Analysis.h
|
||||
analysis/experimental/DebugWarner.cpp
|
||||
analysis/experimental/DebugWarner.h
|
||||
analysis/experimental/TypeInference.cpp
|
||||
analysis/experimental/TypeInference.h
|
||||
analysis/experimental/TypeRegistration.cpp
|
||||
analysis/experimental/TypeRegistration.h
|
||||
analysis/experimental/SyntaxRestrictor.cpp
|
||||
analysis/experimental/SyntaxRestrictor.h
|
||||
ast/AST.cpp
|
||||
ast/AST.h
|
||||
ast/AST_accept.h
|
||||
@ -78,12 +68,6 @@ set(sources
|
||||
ast/Types.h
|
||||
ast/TypeProvider.cpp
|
||||
ast/TypeProvider.h
|
||||
ast/experimental/Type.cpp
|
||||
ast/experimental/Type.h
|
||||
ast/experimental/TypeSystem.cpp
|
||||
ast/experimental/TypeSystem.h
|
||||
ast/experimental/TypeSystemHelper.cpp
|
||||
ast/experimental/TypeSystemHelper.h
|
||||
codegen/ABIFunctions.cpp
|
||||
codegen/ABIFunctions.h
|
||||
codegen/ArrayUtils.cpp
|
||||
@ -106,13 +90,6 @@ set(sources
|
||||
codegen/ReturnInfo.cpp
|
||||
codegen/YulUtilFunctions.h
|
||||
codegen/YulUtilFunctions.cpp
|
||||
codegen/experimental/Common.h
|
||||
codegen/experimental/Common.cpp
|
||||
codegen/experimental/IRGenerationContext.h
|
||||
codegen/experimental/IRGenerator.cpp
|
||||
codegen/experimental/IRGenerator.h
|
||||
codegen/experimental/IRGeneratorForStatements.cpp
|
||||
codegen/experimental/IRGeneratorForStatements.h
|
||||
codegen/ir/Common.cpp
|
||||
codegen/ir/Common.h
|
||||
codegen/ir/IRGenerator.cpp
|
||||
@ -205,6 +182,29 @@ set(sources
|
||||
parsing/Parser.cpp
|
||||
parsing/Parser.h
|
||||
parsing/Token.h
|
||||
experimental/analysis/Analysis.cpp
|
||||
experimental/analysis/Analysis.h
|
||||
experimental/analysis/DebugWarner.cpp
|
||||
experimental/analysis/DebugWarner.h
|
||||
experimental/analysis/TypeInference.cpp
|
||||
experimental/analysis/TypeInference.h
|
||||
experimental/analysis/TypeRegistration.cpp
|
||||
experimental/analysis/TypeRegistration.h
|
||||
experimental/analysis/SyntaxRestrictor.cpp
|
||||
experimental/analysis/SyntaxRestrictor.h
|
||||
experimental/ast/Type.cpp
|
||||
experimental/ast/Type.h
|
||||
experimental/ast/TypeSystem.cpp
|
||||
experimental/ast/TypeSystem.h
|
||||
experimental/ast/TypeSystemHelper.cpp
|
||||
experimental/ast/TypeSystemHelper.h
|
||||
experimental/codegen/Common.h
|
||||
experimental/codegen/Common.cpp
|
||||
experimental/codegen/IRGenerationContext.h
|
||||
experimental/codegen/IRGenerator.cpp
|
||||
experimental/codegen/IRGenerator.h
|
||||
experimental/codegen/IRGeneratorForStatements.cpp
|
||||
experimental/codegen/IRGeneratorForStatements.h
|
||||
)
|
||||
|
||||
add_library(solidity ${sources})
|
||||
|
@ -15,12 +15,12 @@
|
||||
along with solidity. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/DebugWarner.h>
|
||||
#include <libsolidity/analysis/experimental/SyntaxRestrictor.h>
|
||||
#include <libsolidity/analysis/experimental/TypeInference.h>
|
||||
#include <libsolidity/analysis/experimental/TypeRegistration.h>
|
||||
#include <libsolidity/experimental/analysis/DebugWarner.h>
|
||||
#include <libsolidity/experimental/analysis/SyntaxRestrictor.h>
|
||||
#include <libsolidity/experimental/analysis/TypeInference.h>
|
||||
#include <libsolidity/experimental/analysis/TypeRegistration.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity::langutil;
|
@ -17,7 +17,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
@ -16,11 +16,11 @@
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
#include <libsolidity/analysis/experimental/DebugWarner.h>
|
||||
#include <libsolidity/experimental/analysis/DebugWarner.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/analysis/experimental/TypeInference.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/TypeInference.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
|
||||
#include <liblangutil/Exceptions.h>
|
||||
|
@ -16,9 +16,9 @@
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
#include <libsolidity/analysis/experimental/SyntaxRestrictor.h>
|
||||
#include <libsolidity/experimental/analysis/SyntaxRestrictor.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
|
||||
#include <liblangutil/Exceptions.h>
|
||||
|
@ -17,10 +17,10 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
|
||||
#include <libsolidity/analysis/experimental/TypeInference.h>
|
||||
#include <libsolidity/analysis/experimental/TypeRegistration.h>
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/analysis/TypeInference.h>
|
||||
#include <libsolidity/experimental/analysis/TypeRegistration.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
|
||||
#include <libsolutil/Numeric.h>
|
||||
#include <libsolutil/StringUtils.h>
|
||||
@ -301,6 +301,12 @@ bool TypeInference::visit(BinaryOperation const& _binaryOperation)
|
||||
_binaryOperation.rightExpression().accept(*this);
|
||||
operationAnnotation.type = helper.functionType(getType(_binaryOperation.leftExpression()), getType(_binaryOperation.rightExpression()));
|
||||
}
|
||||
else if (_binaryOperation.getOperator() == Token::BitOr)
|
||||
{
|
||||
_binaryOperation.leftExpression().accept(*this);
|
||||
_binaryOperation.rightExpression().accept(*this);
|
||||
operationAnnotation.type = helper.sumType({getType(_binaryOperation.leftExpression()), getType(_binaryOperation.rightExpression())});
|
||||
}
|
||||
else
|
||||
{
|
||||
m_errorReporter.typeError(0000_error, _binaryOperation.location(), "Invalid binary operations in type context.");
|
@ -18,7 +18,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/ASTVisitor.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <liblangutil/ErrorReporter.h>
|
||||
|
@ -17,9 +17,9 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
|
||||
#include <libsolidity/analysis/experimental/TypeRegistration.h>
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/analysis/TypeRegistration.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
#include <liblangutil/Exceptions.h>
|
||||
|
||||
#include <libyul/AsmAnalysis.h>
|
@ -18,7 +18,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/ASTVisitor.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <liblangutil/ErrorReporter.h>
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
#include <libsolidity/ast/experimental/Type.h>
|
||||
#include <libsolidity/experimental/ast/Type.h>
|
||||
#include <libsolidity/ast/AST.h>
|
||||
#include <libsolutil/Visitor.h>
|
||||
|
@ -38,6 +38,7 @@ enum class PrimitiveType
|
||||
TypeFunction,
|
||||
Unit,
|
||||
Pair,
|
||||
Sum,
|
||||
Word,
|
||||
Bool,
|
||||
Integer
|
@ -17,8 +17,8 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
#include <libsolidity/ast/AST.h>
|
||||
#include <liblangutil/Exceptions.h>
|
||||
|
||||
@ -141,6 +141,7 @@ TypeSystem::TypeSystem()
|
||||
{PrimitiveType::Void, "void", 0},
|
||||
{PrimitiveType::Unit, "unit", 0},
|
||||
{PrimitiveType::Pair, "pair", 2},
|
||||
{PrimitiveType::Sum, "sum", 2},
|
||||
{PrimitiveType::Word, "word", 0},
|
||||
{PrimitiveType::Integer, "integer", 0},
|
||||
{PrimitiveType::Bool, "bool", 0},
|
@ -17,7 +17,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/experimental/Type.h>
|
||||
#include <libsolidity/experimental/ast/Type.h>
|
||||
#include <liblangutil/Exceptions.h>
|
||||
|
||||
#include <optional>
|
@ -17,11 +17,11 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
#include <libsolidity/ast/AST.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/analysis/experimental/TypeRegistration.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/TypeRegistration.h>
|
||||
|
||||
#include <libsolutil/Visitor.h>
|
||||
|
||||
@ -158,6 +158,48 @@ vector<experimental::Type> TypeSystemHelpers::destTupleType(Type _tupleType) con
|
||||
return result;
|
||||
}
|
||||
|
||||
experimental::Type TypeSystemHelpers::sumType(vector<Type> _elements) const
|
||||
{
|
||||
if (_elements.empty())
|
||||
return typeSystem.type(PrimitiveType::Void, {});
|
||||
if (_elements.size() == 1)
|
||||
return _elements.front();
|
||||
Type result = _elements.back();
|
||||
for (Type type: _elements | ranges::views::reverse | ranges::views::drop_exactly(1))
|
||||
result = typeSystem.type(PrimitiveType::Sum, {type, result});
|
||||
return result;
|
||||
}
|
||||
|
||||
vector<experimental::Type> TypeSystemHelpers::destSumType(Type _tupleType) const
|
||||
{
|
||||
if (!isTypeConstant(_tupleType))
|
||||
return {_tupleType};
|
||||
TypeConstructor sumConstructor = typeSystem.constructor(PrimitiveType::Sum);
|
||||
auto [constructor, arguments] = destTypeConstant(_tupleType);
|
||||
if (constructor == typeSystem.constructor(PrimitiveType::Void))
|
||||
return {};
|
||||
if (constructor != sumConstructor)
|
||||
return {_tupleType};
|
||||
solAssert(arguments.size() == 2);
|
||||
|
||||
vector<Type> result;
|
||||
result.emplace_back(arguments.front());
|
||||
Type tail = arguments.back();
|
||||
while(true)
|
||||
{
|
||||
if (!isTypeConstant(tail))
|
||||
break;
|
||||
auto [tailConstructor, tailArguments] = destTypeConstant(tail);
|
||||
if (tailConstructor != sumConstructor)
|
||||
break;
|
||||
solAssert(tailArguments.size() == 2);
|
||||
result.emplace_back(tailArguments.front());
|
||||
tail = tailArguments.back();
|
||||
}
|
||||
result.emplace_back(tail);
|
||||
return result;
|
||||
}
|
||||
|
||||
tuple<TypeConstructor, vector<experimental::Type>> TypeSystemHelpers::destTypeConstant(Type _type) const
|
||||
{
|
||||
using ResultType = tuple<TypeConstructor, vector<Type>>;
|
@ -17,7 +17,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
#include <libsolidity/ast/ASTForward.h>
|
||||
#include <liblangutil/Token.h>
|
||||
|
||||
@ -37,6 +37,8 @@ struct TypeSystemHelpers
|
||||
bool isTypeConstant(Type _type) const;
|
||||
Type tupleType(std::vector<Type> _elements) const;
|
||||
std::vector<Type> destTupleType(Type _tupleType) const;
|
||||
Type sumType(std::vector<Type> _elements) const;
|
||||
std::vector<Type> destSumType(Type _tupleType) const;
|
||||
Type functionType(Type _argType, Type _resultType) const;
|
||||
std::tuple<Type, Type> destFunctionType(Type _functionType) const;
|
||||
bool isFunctionType(Type _type) const;
|
@ -16,9 +16,9 @@
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
#include <libsolidity/codegen/experimental/Common.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/codegen/Common.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
|
||||
#include <libsolutil/CommonIO.h>
|
||||
|
@ -19,7 +19,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/AST.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
@ -20,8 +20,8 @@
|
||||
|
||||
#include <libsolidity/ast/ASTForward.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <list>
|
||||
#include <set>
|
@ -16,16 +16,16 @@
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
#include <libsolidity/codegen/experimental/IRGenerator.h>
|
||||
#include <libsolidity/codegen/experimental/IRGenerationContext.h>
|
||||
#include <libsolidity/codegen/experimental/IRGeneratorForStatements.h>
|
||||
#include <libsolidity/experimental/codegen/IRGenerator.h>
|
||||
#include <libsolidity/experimental/codegen/IRGenerationContext.h>
|
||||
#include <libsolidity/experimental/codegen/IRGeneratorForStatements.h>
|
||||
|
||||
#include <libsolidity/codegen/experimental/Common.h>
|
||||
#include <libsolidity/experimental/codegen/Common.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/analysis/experimental/TypeInference.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/TypeInference.h>
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
|
||||
#include <libyul/YulStack.h>
|
||||
#include <libyul/AsmPrinter.h>
|
@ -18,12 +18,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/codegen/experimental/IRGenerationContext.h>
|
||||
#include <libsolidity/experimental/codegen/IRGenerationContext.h>
|
||||
#include <libsolidity/interface/DebugSettings.h>
|
||||
#include <libsolidity/interface/OptimiserSettings.h>
|
||||
#include <libsolidity/ast/ASTForward.h>
|
||||
#include <libsolidity/ast/CallGraph.h>
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <liblangutil/CharStreamProvider.h>
|
||||
#include <liblangutil/DebugInfoSelection.h>
|
@ -16,20 +16,20 @@
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
|
||||
#include <libsolidity/codegen/experimental/IRGeneratorForStatements.h>
|
||||
#include <libsolidity/experimental/codegen/IRGeneratorForStatements.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/analysis/experimental/TypeInference.h>
|
||||
#include <libsolidity/analysis/experimental/TypeRegistration.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/TypeInference.h>
|
||||
#include <libsolidity/experimental/analysis/TypeRegistration.h>
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystemHelper.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystemHelper.h>
|
||||
|
||||
#include <libyul/YulStack.h>
|
||||
#include <libyul/AsmPrinter.h>
|
||||
#include <libyul/AST.h>
|
||||
#include <libyul/optimiser/ASTCopier.h>
|
||||
|
||||
#include <libsolidity/codegen/experimental/Common.h>
|
||||
#include <libsolidity/experimental/codegen/Common.h>
|
||||
|
||||
#include <range/v3/view/drop_last.hpp>
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/codegen/experimental/IRGenerationContext.h>
|
||||
#include <libsolidity/experimental/codegen/IRGenerationContext.h>
|
||||
#include <libsolidity/ast/ASTVisitor.h>
|
||||
|
||||
#include <functional>
|
@ -15,11 +15,11 @@
|
||||
along with solidity. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
#include <libsolidity/codegen/experimental/Common.h>
|
||||
#include <libsolidity/codegen/experimental/IRGenerationContext.h>
|
||||
#include <libsolidity/codegen/experimental/IRVariable.h>
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
#include <libsolidity/analysis/experimental/TypeInference.h>
|
||||
#include <libsolidity/experimental/codegen/Common.h>
|
||||
#include <libsolidity/experimental/codegen/IRGenerationContext.h>
|
||||
#include <libsolidity/experimental/codegen/IRVariable.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/analysis/TypeInference.h>
|
||||
|
||||
#include <libsolidity/ast/AST.h>
|
||||
#include <libsolutil/StringUtils.h>
|
@ -17,7 +17,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
#pragma once
|
||||
|
||||
#include <libsolidity/ast/experimental/TypeSystem.h>
|
||||
#include <libsolidity/experimental/ast/TypeSystem.h>
|
||||
|
||||
#include <optional>
|
||||
#include <string>
|
@ -44,7 +44,6 @@
|
||||
#include <libsolidity/analysis/ViewPureChecker.h>
|
||||
#include <libsolidity/analysis/ImmutableValidator.h>
|
||||
|
||||
#include <libsolidity/analysis/experimental/Analysis.h>
|
||||
|
||||
#include <libsolidity/ast/AST.h>
|
||||
#include <libsolidity/ast/TypeProvider.h>
|
||||
@ -58,7 +57,8 @@
|
||||
#include <libsolidity/interface/Version.h>
|
||||
#include <libsolidity/parsing/Parser.h>
|
||||
|
||||
#include <libsolidity/codegen/experimental/IRGenerator.h>
|
||||
#include <libsolidity/experimental/analysis/Analysis.h>
|
||||
#include <libsolidity/experimental/codegen/IRGenerator.h>
|
||||
|
||||
#include <libsolidity/codegen/ir/Common.h>
|
||||
#include <libsolidity/codegen/ir/IRGenerator.h>
|
||||
|
Loading…
Reference in New Issue
Block a user