mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	[libsolidity] remove ReferenceType::copyForLocationIfReference (use TypeProvider instead)
This commit is contained in:
		
							parent
							
								
									b83097bdc6
								
							
						
					
					
						commit
						862b65d6e3
					
				| @ -231,9 +231,9 @@ void ReferencesResolver::endVisit(Mapping const& _typeName) | |||||||
| 	TypePointer keyType = _typeName.keyType().annotation().type; | 	TypePointer keyType = _typeName.keyType().annotation().type; | ||||||
| 	TypePointer valueType = _typeName.valueType().annotation().type; | 	TypePointer valueType = _typeName.valueType().annotation().type; | ||||||
| 	// Convert key type to memory.
 | 	// Convert key type to memory.
 | ||||||
| 	keyType = ReferenceType::copyForLocationIfReference(DataLocation::Memory, keyType); | 	keyType = TypeProvider::withLocationIfReference(DataLocation::Memory, keyType); | ||||||
| 	// Convert value type to storage reference.
 | 	// Convert value type to storage reference.
 | ||||||
| 	valueType = ReferenceType::copyForLocationIfReference(DataLocation::Storage, valueType); | 	valueType = TypeProvider::withLocationIfReference(DataLocation::Storage, valueType); | ||||||
| 	_typeName.annotation().type = TypeProvider::mappingType(keyType, valueType); | 	_typeName.annotation().type = TypeProvider::mappingType(keyType, valueType); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1997,7 +1997,7 @@ void TypeChecker::endVisit(NewExpression const& _newExpression) | |||||||
| 				_newExpression.typeName().location(), | 				_newExpression.typeName().location(), | ||||||
| 				"Length has to be placed in parentheses after the array type for new expression." | 				"Length has to be placed in parentheses after the array type for new expression." | ||||||
| 			); | 			); | ||||||
| 		type = ReferenceType::copyForLocationIfReference(DataLocation::Memory, type); | 		type = TypeProvider::withLocationIfReference(DataLocation::Memory, type); | ||||||
| 		_newExpression.annotation().type = TypeProvider::functionType( | 		_newExpression.annotation().type = TypeProvider::functionType( | ||||||
| 			TypePointers{TypeProvider::uint256()}, | 			TypePointers{TypeProvider::uint256()}, | ||||||
| 			TypePointers{type}, | 			TypePointers{type}, | ||||||
| @ -2043,7 +2043,7 @@ bool TypeChecker::visit(MemberAccess const& _memberAccess) | |||||||
| 		if (initialMemberCount == 0) | 		if (initialMemberCount == 0) | ||||||
| 		{ | 		{ | ||||||
| 			// Try to see if the member was removed because it is only available for storage types.
 | 			// Try to see if the member was removed because it is only available for storage types.
 | ||||||
| 			auto storageType = ReferenceType::copyForLocationIfReference( | 			auto storageType = TypeProvider::withLocationIfReference( | ||||||
| 				DataLocation::Storage, | 				DataLocation::Storage, | ||||||
| 				exprType | 				exprType | ||||||
| 			); | 			); | ||||||
|  | |||||||
| @ -343,13 +343,13 @@ TypePointer Type::fullEncodingType(bool _inLibraryCall, bool _encoderV2, bool) c | |||||||
| MemberList::MemberMap Type::boundFunctions(Type const& _type, ContractDefinition const& _scope) | MemberList::MemberMap Type::boundFunctions(Type const& _type, ContractDefinition const& _scope) | ||||||
| { | { | ||||||
| 	// Normalise data location of type.
 | 	// Normalise data location of type.
 | ||||||
| 	TypePointer type = ReferenceType::copyForLocationIfReference(DataLocation::Storage, &_type); | 	TypePointer type = TypeProvider::withLocationIfReference(DataLocation::Storage, &_type); | ||||||
| 	set<Declaration const*> seenFunctions; | 	set<Declaration const*> seenFunctions; | ||||||
| 	MemberList::MemberMap members; | 	MemberList::MemberMap members; | ||||||
| 	for (ContractDefinition const* contract: _scope.annotation().linearizedBaseContracts) | 	for (ContractDefinition const* contract: _scope.annotation().linearizedBaseContracts) | ||||||
| 		for (UsingForDirective const* ufd: contract->usingForDirectives()) | 		for (UsingForDirective const* ufd: contract->usingForDirectives()) | ||||||
| 		{ | 		{ | ||||||
| 			if (ufd->typeName() && *type != *ReferenceType::copyForLocationIfReference( | 			if (ufd->typeName() && *type != *TypeProvider::withLocationIfReference( | ||||||
| 				DataLocation::Storage, | 				DataLocation::Storage, | ||||||
| 				ufd->typeName()->annotation().type | 				ufd->typeName()->annotation().type | ||||||
| 			)) | 			)) | ||||||
| @ -1479,16 +1479,9 @@ TypeResult ReferenceType::unaryOperatorResult(Token _operator) const | |||||||
| 	return nullptr; | 	return nullptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TypePointer ReferenceType::copyForLocationIfReference(DataLocation _location, Type const* _type) |  | ||||||
| { |  | ||||||
| 	if (auto type = dynamic_cast<ReferenceType const*>(_type)) |  | ||||||
| 		return TypeProvider::withLocation(type, _location, false); |  | ||||||
| 	return _type; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| TypePointer ReferenceType::copyForLocationIfReference(Type const* _type) const | TypePointer ReferenceType::copyForLocationIfReference(Type const* _type) const | ||||||
| { | { | ||||||
| 	return copyForLocationIfReference(m_location, _type); | 	return TypeProvider::withLocationIfReference(m_location, _type); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| string ReferenceType::stringForReferencePart() const | string ReferenceType::stringForReferencePart() const | ||||||
| @ -2202,7 +2195,7 @@ FunctionTypePointer StructType::constructorType() const | |||||||
| 		if (!member.type->canLiveOutsideStorage()) | 		if (!member.type->canLiveOutsideStorage()) | ||||||
| 			continue; | 			continue; | ||||||
| 		paramNames.push_back(member.name); | 		paramNames.push_back(member.name); | ||||||
| 		paramTypes.push_back(copyForLocationIfReference(DataLocation::Memory, member.type)); | 		paramTypes.push_back(TypeProvider::withLocationIfReference(DataLocation::Memory, member.type)); | ||||||
| 	} | 	} | ||||||
| 	return TypeProvider::functionType( | 	return TypeProvider::functionType( | ||||||
| 		paramTypes, | 		paramTypes, | ||||||
|  | |||||||
| @ -654,11 +654,6 @@ public: | |||||||
| 		return location() == _other.location() && isPointer() == _other.isPointer(); | 		return location() == _other.location() && isPointer() == _other.isPointer(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/// @returns a copy of @a _type having the same location as this (and is not a pointer type)
 |  | ||||||
| 	/// if _type is a reference type and an unmodified copy of _type otherwise.
 |  | ||||||
| 	/// This function is mostly useful to modify inner types appropriately.
 |  | ||||||
| 	static Type const* copyForLocationIfReference(DataLocation _location, Type const* _type); |  | ||||||
| 
 |  | ||||||
| 	Type const* withLocation(DataLocation _location, bool _isPointer) const; | 	Type const* withLocation(DataLocation _location, bool _isPointer) const; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|  | |||||||
| @ -1524,7 +1524,7 @@ void SMTChecker::resetVariables(function<bool(VariableDeclaration const&)> const | |||||||
| TypePointer SMTChecker::typeWithoutPointer(TypePointer const& _type) | TypePointer SMTChecker::typeWithoutPointer(TypePointer const& _type) | ||||||
| { | { | ||||||
| 	if (auto refType = dynamic_cast<ReferenceType const*>(_type)) | 	if (auto refType = dynamic_cast<ReferenceType const*>(_type)) | ||||||
| 		return ReferenceType::copyForLocationIfReference(refType->location(), _type); | 		return TypeProvider::withLocationIfReference(refType->location(), _type); | ||||||
| 	return _type; | 	return _type; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user