aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/CMakeLists.txt56
-rw-r--r--libsolidity/analysis/TypeChecker.cpp15
-rw-r--r--libsolidity/codegen/CompilerContext.h5
-rw-r--r--libsolidity/codegen/ContractCompiler.cpp5
-rw-r--r--libsolidity/parsing/Parser.cpp4
5 files changed, 67 insertions, 18 deletions
diff --git a/libsolidity/CMakeLists.txt b/libsolidity/CMakeLists.txt
index c40087f0..d2e0c854 100644
--- a/libsolidity/CMakeLists.txt
+++ b/libsolidity/CMakeLists.txt
@@ -1,14 +1,59 @@
# Until we have a clear separation, libyul has to be included here
-file(GLOB_RECURSE sources "*.cpp")
-file(GLOB_RECURSE headers "*.h")
+set(sources
+ analysis/ConstantEvaluator.cpp
+ analysis/ControlFlowAnalyzer.cpp
+ analysis/ControlFlowBuilder.cpp
+ analysis/ControlFlowGraph.cpp
+ analysis/DeclarationContainer.cpp
+ analysis/DocStringAnalyser.cpp
+ analysis/GlobalContext.cpp
+ analysis/NameAndTypeResolver.cpp
+ analysis/PostTypeChecker.cpp
+ analysis/ReferencesResolver.cpp
+ analysis/SemVerHandler.cpp
+ analysis/StaticAnalyzer.cpp
+ analysis/SyntaxChecker.cpp
+ analysis/TypeChecker.cpp
+ analysis/ViewPureChecker.cpp
+ ast/AST.cpp
+ ast/ASTAnnotations.cpp
+ ast/ASTJsonConverter.cpp
+ ast/ASTPrinter.cpp
+ ast/Types.cpp
+ codegen/ABIFunctions.cpp
+ codegen/ArrayUtils.cpp
+ codegen/Compiler.cpp
+ codegen/CompilerContext.cpp
+ codegen/CompilerUtils.cpp
+ codegen/ContractCompiler.cpp
+ codegen/ExpressionCompiler.cpp
+ codegen/LValue.cpp
+ formal/SMTChecker.cpp
+ formal/SMTLib2Interface.cpp
+ formal/SMTPortfolio.cpp
+ formal/SSAVariable.cpp
+ formal/SymbolicTypes.cpp
+ formal/SymbolicVariables.cpp
+ formal/VariableUsage.cpp
+ interface/ABI.cpp
+ interface/AssemblyStack.cpp
+ interface/CompilerStack.cpp
+ interface/GasEstimator.cpp
+ interface/Natspec.cpp
+ interface/StandardCompiler.cpp
+ interface/Version.cpp
+ parsing/DocStringParser.cpp
+ parsing/Parser.cpp
+)
find_package(Z3 QUIET)
if (${Z3_FOUND})
include_directories(${Z3_INCLUDE_DIR})
add_definitions(-DHAVE_Z3)
message("Z3 SMT solver found. This enables optional SMT checking with Z3.")
+ set(z3_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/formal/Z3Interface.cpp")
else()
- list(REMOVE_ITEM sources "${CMAKE_CURRENT_SOURCE_DIR}/formal/Z3Interface.cpp")
+ set(z3_SRCS)
endif()
find_package(CVC4 QUIET)
@@ -16,8 +61,9 @@ if (${CVC4_FOUND})
include_directories(${CVC4_INCLUDE_DIR})
add_definitions(-DHAVE_CVC4)
message("CVC4 SMT solver found. This enables optional SMT checking with CVC4.")
+ set(cvc4_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/formal/CVC4Interface.cpp")
else()
- list(REMOVE_ITEM sources "${CMAKE_CURRENT_SOURCE_DIR}/formal/CVC4Interface.cpp")
+ set(cvc4_SRCS)
endif()
if (NOT (${Z3_FOUND} OR ${CVC4_FOUND}))
@@ -25,7 +71,7 @@ if (NOT (${Z3_FOUND} OR ${CVC4_FOUND}))
\nPlease install Z3 or CVC4 or remove the option disabling them (USE_Z3, USE_CVC4).")
endif()
-add_library(solidity ${sources} ${headers})
+add_library(solidity ${sources} ${z3_SRCS} ${cvc4_SRCS})
target_link_libraries(solidity PUBLIC yul evmasm langutil devcore ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY})
if (${Z3_FOUND})
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp
index a6c23ada..d503b9ec 100644
--- a/libsolidity/analysis/TypeChecker.cpp
+++ b/libsolidity/analysis/TypeChecker.cpp
@@ -413,16 +413,14 @@ void TypeChecker::checkFunctionOverride(FunctionDefinition const& _function, Fun
if (_function.visibility() != _super.visibility())
{
- // visibility is enforced to be external in interfaces, but a contract can override that with public
- if (
- _super.inContractKind() == ContractDefinition::ContractKind::Interface &&
- _function.inContractKind() != ContractDefinition::ContractKind::Interface &&
+ // Visibility change from external to public is fine.
+ // Any other change is disallowed.
+ if (!(
+ _super.visibility() == FunctionDefinition::Visibility::External &&
_function.visibility() == FunctionDefinition::Visibility::Public
- )
- return;
- overrideError(_function, _super, "Overriding function visibility differs.");
+ ))
+ overrideError(_function, _super, "Overriding function visibility differs.");
}
-
else if (_function.stateMutability() != _super.stateMutability())
overrideError(
_function,
@@ -433,7 +431,6 @@ void TypeChecker::checkFunctionOverride(FunctionDefinition const& _function, Fun
stateMutabilityToString(_function.stateMutability()) +
"\"."
);
-
else if (functionType != superType)
overrideError(_function, _super, "Overriding function return types differ.");
}
diff --git a/libsolidity/codegen/CompilerContext.h b/libsolidity/codegen/CompilerContext.h
index 63365175..02369813 100644
--- a/libsolidity/codegen/CompilerContext.h
+++ b/libsolidity/codegen/CompilerContext.h
@@ -167,7 +167,10 @@ public:
/// the data.
CompilerContext& appendConditionalRevert(bool _forwardReturnData = false);
/// Appends a JUMP to a specific tag
- CompilerContext& appendJumpTo(eth::AssemblyItem const& _tag) { m_asm->appendJump(_tag); return *this; }
+ CompilerContext& appendJumpTo(
+ eth::AssemblyItem const& _tag,
+ eth::AssemblyItem::JumpType _jumpType = eth::AssemblyItem::JumpType::Ordinary
+ ) { *m_asm << _tag.pushTag(); return appendJump(_jumpType); }
/// Appends pushing of a new tag and @returns the new tag.
eth::AssemblyItem pushNewTag() { return m_asm->append(m_asm->newPushTag()).tag(); }
/// @returns a new tag without pushing any opcodes or data
diff --git a/libsolidity/codegen/ContractCompiler.cpp b/libsolidity/codegen/ContractCompiler.cpp
index 157d5fa7..aabdbb79 100644
--- a/libsolidity/codegen/ContractCompiler.cpp
+++ b/libsolidity/codegen/ContractCompiler.cpp
@@ -344,7 +344,10 @@ void ContractCompiler::appendFunctionSelector(ContractDefinition const& _contrac
m_context << Instruction::DUP1 << Instruction::CALLDATASIZE << Instruction::SUB;
CompilerUtils(m_context).abiDecode(functionType->parameterTypes());
}
- m_context.appendJumpTo(m_context.functionEntryLabel(functionType->declaration()));
+ m_context.appendJumpTo(
+ m_context.functionEntryLabel(functionType->declaration()),
+ eth::AssemblyItem::JumpType::IntoFunction
+ );
m_context << returnTag;
// Return tag and input parameters get consumed.
m_context.adjustStackOffset(
diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp
index ffe2be83..3f4a015b 100644
--- a/libsolidity/parsing/Parser.cpp
+++ b/libsolidity/parsing/Parser.cpp
@@ -1555,8 +1555,8 @@ ASTPointer<Expression> Parser::parsePrimaryExpression()
expression = nodeFactory.createNode<TupleExpression>(components, isArray);
break;
}
- case Token::IllegalHex:
- fatalParserError("Expected even number of hex-nibbles within double-quotes.");
+ case Token::Illegal:
+ fatalParserError(to_string(m_scanner->currentError()));
break;
default:
if (TokenTraits::isElementaryTypeName(token))