mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
@@ -227,7 +227,7 @@ void ContractLevelChecker::checkAbstractFunctions(ContractDefinition const& _con
|
||||
return _type->hasEqualParameterTypes(*_funAndFlag.first);
|
||||
});
|
||||
if (it == overloads.end())
|
||||
overloads.push_back(make_pair(_type, _implemented));
|
||||
overloads.emplace_back(_type, _implemented);
|
||||
else if (it->second)
|
||||
{
|
||||
if (!_implemented)
|
||||
@@ -409,8 +409,8 @@ void ContractLevelChecker::checkExternalTypeClashes(ContractDefinition const& _c
|
||||
auto functionType = make_shared<FunctionType>(*f);
|
||||
// under non error circumstances this should be true
|
||||
if (functionType->interfaceFunctionType())
|
||||
externalDeclarations[functionType->externalSignature()].push_back(
|
||||
make_pair(f, functionType->asCallableFunction(false))
|
||||
externalDeclarations[functionType->externalSignature()].emplace_back(
|
||||
f, functionType->asCallableFunction(false)
|
||||
);
|
||||
}
|
||||
for (VariableDeclaration const* v: contract->stateVariables())
|
||||
@@ -419,8 +419,8 @@ void ContractLevelChecker::checkExternalTypeClashes(ContractDefinition const& _c
|
||||
auto functionType = make_shared<FunctionType>(*v);
|
||||
// under non error circumstances this should be true
|
||||
if (functionType->interfaceFunctionType())
|
||||
externalDeclarations[functionType->externalSignature()].push_back(
|
||||
make_pair(v, functionType->asCallableFunction(false))
|
||||
externalDeclarations[functionType->externalSignature()].emplace_back(
|
||||
v, functionType->asCallableFunction(false)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ vector<pair<FixedHash<4>, FunctionTypePointer>> const& ContractDefinition::inter
|
||||
{
|
||||
signaturesSeen.insert(functionSignature);
|
||||
FixedHash<4> hash(dev::keccak256(functionSignature));
|
||||
m_interfaceFunctionList->push_back(make_pair(hash, fun));
|
||||
m_interfaceFunctionList->emplace_back(hash, fun);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,7 +234,7 @@ bool ASTJsonConverter::visit(ImportDirective const& _node)
|
||||
make_pair(m_legacy ? "SourceUnit" : "sourceUnit", nodeId(*_node.annotation().sourceUnit)),
|
||||
make_pair("scope", idOrNull(_node.scope()))
|
||||
};
|
||||
attributes.push_back(make_pair("unitAlias", _node.name()));
|
||||
attributes.emplace_back("unitAlias", _node.name());
|
||||
Json::Value symbolAliases(Json::arrayValue);
|
||||
for (auto const& symbolAlias: _node.symbolAliases())
|
||||
{
|
||||
@@ -244,7 +244,7 @@ bool ASTJsonConverter::visit(ImportDirective const& _node)
|
||||
tuple["local"] = symbolAlias.second ? Json::Value(*symbolAlias.second) : Json::nullValue;
|
||||
symbolAliases.append(tuple);
|
||||
}
|
||||
attributes.push_back(make_pair("symbolAliases", std::move(symbolAliases)));
|
||||
attributes.emplace_back("symbolAliases", std::move(symbolAliases));
|
||||
setJsonNode(_node, "ImportDirective", std::move(attributes));
|
||||
return false;
|
||||
}
|
||||
@@ -357,7 +357,7 @@ bool ASTJsonConverter::visit(VariableDeclaration const& _node)
|
||||
make_pair("typeDescriptions", typePointerToJson(_node.annotation().type, true))
|
||||
};
|
||||
if (m_inEvent)
|
||||
attributes.push_back(make_pair("indexed", _node.isIndexed()));
|
||||
attributes.emplace_back("indexed", _node.isIndexed());
|
||||
setJsonNode(_node, "VariableDeclaration", std::move(attributes));
|
||||
return false;
|
||||
}
|
||||
@@ -647,11 +647,11 @@ bool ASTJsonConverter::visit(FunctionCall const& _node)
|
||||
};
|
||||
if (m_legacy)
|
||||
{
|
||||
attributes.push_back(make_pair("isStructConstructorCall", _node.annotation().kind == FunctionCallKind::StructConstructorCall));
|
||||
attributes.push_back(make_pair("type_conversion", _node.annotation().kind == FunctionCallKind::TypeConversion));
|
||||
attributes.emplace_back("isStructConstructorCall", _node.annotation().kind == FunctionCallKind::StructConstructorCall);
|
||||
attributes.emplace_back("type_conversion", _node.annotation().kind == FunctionCallKind::TypeConversion);
|
||||
}
|
||||
else
|
||||
attributes.push_back(make_pair("kind", functionCallKind(_node.annotation().kind)));
|
||||
attributes.emplace_back("kind", functionCallKind(_node.annotation().kind));
|
||||
appendExpressionAttributes(attributes, _node.annotation());
|
||||
setJsonNode(_node, "FunctionCall", std::move(attributes));
|
||||
return false;
|
||||
|
||||
+27
-34
@@ -462,7 +462,7 @@ MemberList::MemberMap Type::boundFunctions(Type const& _type, ContractDefinition
|
||||
continue;
|
||||
FunctionTypePointer fun = FunctionType(*function, false).asCallableFunction(true, true);
|
||||
if (_type.isImplicitlyConvertibleTo(*fun->selfType()))
|
||||
members.push_back(MemberList::Member(function->name(), fun, function));
|
||||
members.emplace_back(function->name(), fun, function);
|
||||
}
|
||||
}
|
||||
return members;
|
||||
@@ -1821,23 +1821,23 @@ MemberList::MemberMap ArrayType::nativeMembers(ContractDefinition const*) const
|
||||
MemberList::MemberMap members;
|
||||
if (!isString())
|
||||
{
|
||||
members.push_back({"length", make_shared<IntegerType>(256)});
|
||||
members.emplace_back("length", make_shared<IntegerType>(256));
|
||||
if (isDynamicallySized() && location() == DataLocation::Storage)
|
||||
{
|
||||
members.push_back({"push", make_shared<FunctionType>(
|
||||
members.emplace_back("push", make_shared<FunctionType>(
|
||||
TypePointers{baseType()},
|
||||
TypePointers{make_shared<IntegerType>(256)},
|
||||
strings{string()},
|
||||
strings{string()},
|
||||
isByteArray() ? FunctionType::Kind::ByteArrayPush : FunctionType::Kind::ArrayPush
|
||||
)});
|
||||
members.push_back({"pop", make_shared<FunctionType>(
|
||||
));
|
||||
members.emplace_back("pop", make_shared<FunctionType>(
|
||||
TypePointers{},
|
||||
TypePointers{},
|
||||
strings{string()},
|
||||
strings{string()},
|
||||
FunctionType::Kind::ArrayPop
|
||||
)});
|
||||
));
|
||||
}
|
||||
}
|
||||
return members;
|
||||
@@ -1966,21 +1966,17 @@ MemberList::MemberMap ContractType::nativeMembers(ContractDefinition const* _con
|
||||
break;
|
||||
}
|
||||
if (!functionWithEqualArgumentsFound)
|
||||
members.push_back(MemberList::Member(
|
||||
function->name(),
|
||||
functionType,
|
||||
function
|
||||
));
|
||||
members.emplace_back(function->name(), functionType, function);
|
||||
}
|
||||
}
|
||||
else if (!m_contract.isLibrary())
|
||||
{
|
||||
for (auto const& it: m_contract.interfaceFunctions())
|
||||
members.push_back(MemberList::Member(
|
||||
members.emplace_back(
|
||||
it.second->declaration().name(),
|
||||
it.second->asCallableFunction(m_contract.isLibrary()),
|
||||
&it.second->declaration()
|
||||
));
|
||||
);
|
||||
}
|
||||
return members;
|
||||
}
|
||||
@@ -2008,7 +2004,7 @@ vector<tuple<VariableDeclaration const*, u256, unsigned>> ContractType::stateVar
|
||||
vector<tuple<VariableDeclaration const*, u256, unsigned>> variablesAndOffsets;
|
||||
for (size_t index = 0; index < variables.size(); ++index)
|
||||
if (auto const* offset = offsets.offset(index))
|
||||
variablesAndOffsets.push_back(make_tuple(variables[index], offset->first, offset->second));
|
||||
variablesAndOffsets.emplace_back(variables[index], offset->first, offset->second);
|
||||
return variablesAndOffsets;
|
||||
}
|
||||
|
||||
@@ -2098,10 +2094,10 @@ MemberList::MemberMap StructType::nativeMembers(ContractDefinition const*) const
|
||||
// Skip all mapping members if we are not in storage.
|
||||
if (location() != DataLocation::Storage && !type->canLiveOutsideStorage())
|
||||
continue;
|
||||
members.push_back(MemberList::Member(
|
||||
members.emplace_back(
|
||||
variable->name(),
|
||||
copyForLocationIfReference(type),
|
||||
variable.get())
|
||||
variable.get()
|
||||
);
|
||||
}
|
||||
return members;
|
||||
@@ -2438,7 +2434,7 @@ FunctionType::FunctionType(VariableDeclaration const& _varDecl):
|
||||
if (auto mappingType = dynamic_cast<MappingType const*>(returnType.get()))
|
||||
{
|
||||
m_parameterTypes.push_back(mappingType->keyType());
|
||||
m_parameterNames.push_back("");
|
||||
m_parameterNames.emplace_back("");
|
||||
returnType = mappingType->valueType();
|
||||
}
|
||||
else if (auto arrayType = dynamic_cast<ArrayType const*>(returnType.get()))
|
||||
@@ -2447,7 +2443,7 @@ FunctionType::FunctionType(VariableDeclaration const& _varDecl):
|
||||
// Return byte arrays as whole.
|
||||
break;
|
||||
returnType = arrayType->baseType();
|
||||
m_parameterNames.push_back("");
|
||||
m_parameterNames.emplace_back("");
|
||||
m_parameterTypes.push_back(make_shared<IntegerType>(256));
|
||||
}
|
||||
else
|
||||
@@ -2478,7 +2474,7 @@ FunctionType::FunctionType(VariableDeclaration const& _varDecl):
|
||||
DataLocation::Memory,
|
||||
returnType
|
||||
));
|
||||
m_returnParameterNames.push_back("");
|
||||
m_returnParameterNames.emplace_back("");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2847,14 +2843,11 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
|
||||
{
|
||||
MemberList::MemberMap members;
|
||||
if (m_kind == Kind::External)
|
||||
members.push_back(MemberList::Member(
|
||||
"selector",
|
||||
make_shared<FixedBytesType>(4)
|
||||
));
|
||||
members.emplace_back("selector", make_shared<FixedBytesType>(4));
|
||||
if (m_kind != Kind::BareDelegateCall)
|
||||
{
|
||||
if (isPayable())
|
||||
members.push_back(MemberList::Member(
|
||||
members.emplace_back(
|
||||
"value",
|
||||
make_shared<FunctionType>(
|
||||
parseElementaryTypeVector({"uint"}),
|
||||
@@ -2868,10 +2861,10 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
|
||||
m_gasSet,
|
||||
m_valueSet
|
||||
)
|
||||
));
|
||||
);
|
||||
}
|
||||
if (m_kind != Kind::Creation)
|
||||
members.push_back(MemberList::Member(
|
||||
members.emplace_back(
|
||||
"gas",
|
||||
make_shared<FunctionType>(
|
||||
parseElementaryTypeVector({"uint"}),
|
||||
@@ -2885,7 +2878,7 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
|
||||
m_gasSet,
|
||||
m_valueSet
|
||||
)
|
||||
));
|
||||
);
|
||||
return members;
|
||||
}
|
||||
default:
|
||||
@@ -3213,24 +3206,24 @@ MemberList::MemberMap TypeType::nativeMembers(ContractDefinition const* _current
|
||||
if (contract.isLibrary())
|
||||
for (FunctionDefinition const* function: contract.definedFunctions())
|
||||
if (function->isVisibleAsLibraryMember())
|
||||
members.push_back(MemberList::Member(
|
||||
members.emplace_back(
|
||||
function->name(),
|
||||
FunctionType(*function).asCallableFunction(true),
|
||||
function
|
||||
));
|
||||
);
|
||||
if (isBase)
|
||||
{
|
||||
// We are accessing the type of a base contract, so add all public and protected
|
||||
// members. Note that this does not add inherited functions on purpose.
|
||||
for (Declaration const* decl: contract.inheritableMembers())
|
||||
members.push_back(MemberList::Member(decl->name(), decl->type(), decl));
|
||||
members.emplace_back(decl->name(), decl->type(), decl);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (auto const& stru: contract.definedStructs())
|
||||
members.push_back(MemberList::Member(stru->name(), stru->type(), stru));
|
||||
members.emplace_back(stru->name(), stru->type(), stru);
|
||||
for (auto const& enu: contract.definedEnums())
|
||||
members.push_back(MemberList::Member(enu->name(), enu->type(), enu));
|
||||
members.emplace_back(enu->name(), enu->type(), enu);
|
||||
}
|
||||
}
|
||||
else if (m_actualType->category() == Category::Enum)
|
||||
@@ -3238,7 +3231,7 @@ MemberList::MemberMap TypeType::nativeMembers(ContractDefinition const* _current
|
||||
EnumDefinition const& enumDef = dynamic_cast<EnumType const&>(*m_actualType).enumDefinition();
|
||||
auto enumType = make_shared<EnumType>(enumDef);
|
||||
for (ASTPointer<EnumValue> const& enumValue: enumDef.members())
|
||||
members.push_back(MemberList::Member(enumValue->name(), enumType));
|
||||
members.emplace_back(enumValue->name(), enumType);
|
||||
}
|
||||
return members;
|
||||
}
|
||||
@@ -3303,7 +3296,7 @@ MemberList::MemberMap ModuleType::nativeMembers(ContractDefinition const*) const
|
||||
MemberList::MemberMap symbols;
|
||||
for (auto const& symbolName: m_sourceUnit.annotation().exportedSymbols)
|
||||
for (Declaration const* symbol: symbolName.second)
|
||||
symbols.push_back(MemberList::Member(symbolName.first, symbol->type(), symbol));
|
||||
symbols.emplace_back(symbolName.first, symbol->type(), symbol);
|
||||
return symbols;
|
||||
}
|
||||
|
||||
|
||||
@@ -141,8 +141,8 @@ string ABIFunctions::tupleDecoder(TypePointers const& _types, bool _fromMemory)
|
||||
vector<string> valueNamesLocal;
|
||||
for (size_t j = 0; j < sizeOnStack; j++)
|
||||
{
|
||||
valueNamesLocal.push_back("value" + to_string(stackPos));
|
||||
valueReturnParams.push_back("value" + to_string(stackPos));
|
||||
valueNamesLocal.emplace_back("value" + to_string(stackPos));
|
||||
valueReturnParams.emplace_back("value" + to_string(stackPos));
|
||||
stackPos++;
|
||||
}
|
||||
bool dynamic = decodingTypes[i]->isDynamicallyEncoded();
|
||||
|
||||
@@ -721,14 +721,14 @@ bool ContractCompiler::visit(WhileStatement const& _whileStatement)
|
||||
|
||||
eth::AssemblyItem loopStart = m_context.newTag();
|
||||
eth::AssemblyItem loopEnd = m_context.newTag();
|
||||
m_breakTags.push_back({loopEnd, m_context.stackHeight()});
|
||||
m_breakTags.emplace_back(loopEnd, m_context.stackHeight());
|
||||
|
||||
m_context << loopStart;
|
||||
|
||||
if (_whileStatement.isDoWhile())
|
||||
{
|
||||
eth::AssemblyItem condition = m_context.newTag();
|
||||
m_continueTags.push_back({condition, m_context.stackHeight()});
|
||||
m_continueTags.emplace_back(condition, m_context.stackHeight());
|
||||
|
||||
_whileStatement.body().accept(*this);
|
||||
|
||||
@@ -739,7 +739,7 @@ bool ContractCompiler::visit(WhileStatement const& _whileStatement)
|
||||
}
|
||||
else
|
||||
{
|
||||
m_continueTags.push_back({loopStart, m_context.stackHeight()});
|
||||
m_continueTags.emplace_back(loopStart, m_context.stackHeight());
|
||||
compileExpression(_whileStatement.condition());
|
||||
m_context << Instruction::ISZERO;
|
||||
m_context.appendConditionalJumpTo(loopEnd);
|
||||
@@ -770,8 +770,8 @@ bool ContractCompiler::visit(ForStatement const& _forStatement)
|
||||
if (_forStatement.initializationExpression())
|
||||
_forStatement.initializationExpression()->accept(*this);
|
||||
|
||||
m_breakTags.push_back({loopEnd, m_context.stackHeight()});
|
||||
m_continueTags.push_back({loopNext, m_context.stackHeight()});
|
||||
m_breakTags.emplace_back(loopEnd, m_context.stackHeight());
|
||||
m_continueTags.emplace_back(loopNext, m_context.stackHeight());
|
||||
m_context << loopStart;
|
||||
|
||||
// if there is no terminating condition in for, default is to always be true
|
||||
@@ -997,7 +997,7 @@ void ContractCompiler::appendModifierOrFunctionCode()
|
||||
|
||||
if (codeBlock)
|
||||
{
|
||||
m_returnTags.push_back({m_context.newTag(), m_context.stackHeight()});
|
||||
m_returnTags.emplace_back(m_context.newTag(), m_context.stackHeight());
|
||||
codeBlock->accept(*this);
|
||||
|
||||
solAssert(!m_returnTags.empty(), "");
|
||||
|
||||
@@ -170,7 +170,7 @@ ASTPointer<ImportDirective> Parser::parseImportDirective()
|
||||
expectToken(Token::As);
|
||||
alias = expectIdentifierToken();
|
||||
}
|
||||
symbolAliases.push_back(make_pair(move(id), move(alias)));
|
||||
symbolAliases.emplace_back(move(id), move(alias));
|
||||
if (m_scanner->currentToken() != Token::Comma)
|
||||
break;
|
||||
m_scanner->next();
|
||||
@@ -1690,7 +1690,7 @@ Parser::IndexAccessedPath Parser::parseIndexAccessedPath()
|
||||
index = parseExpression();
|
||||
SourceLocation indexLocation = iap.path.front()->location();
|
||||
indexLocation.end = endPosition();
|
||||
iap.indices.push_back(make_pair(index, indexLocation));
|
||||
iap.indices.emplace_back(index, indexLocation);
|
||||
expectToken(Token::RBrack);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user