mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #13184 from ethereum/memberAccess_locations
Add location for member in MemberAccess ASTNode
This commit is contained in:
		
						commit
						b988d3ed37
					
				| @ -2190,19 +2190,27 @@ public: | ||||
| 		int64_t _id, | ||||
| 		SourceLocation const& _location, | ||||
| 		ASTPointer<Expression> _expression, | ||||
| 		ASTPointer<ASTString> _memberName | ||||
| 		ASTPointer<ASTString> _memberName, | ||||
| 		SourceLocation _memberLocation | ||||
| 	): | ||||
| 		Expression(_id, _location), m_expression(std::move(_expression)), m_memberName(std::move(_memberName)) {} | ||||
| 		Expression(_id, _location), | ||||
| 		m_expression(std::move(_expression)), | ||||
| 		m_memberName(std::move(_memberName)), | ||||
| 		m_memberLocation(std::move(_memberLocation)) | ||||
| 	{} | ||||
| 
 | ||||
| 	void accept(ASTVisitor& _visitor) override; | ||||
| 	void accept(ASTConstVisitor& _visitor) const override; | ||||
| 	Expression const& expression() const { return *m_expression; } | ||||
| 	ASTString const& memberName() const { return *m_memberName; } | ||||
| 	SourceLocation const& memberLocation() const { return m_memberLocation; } | ||||
| 
 | ||||
| 	MemberAccessAnnotation& annotation() const override; | ||||
| 
 | ||||
| private: | ||||
| 	ASTPointer<Expression> m_expression; | ||||
| 	ASTPointer<ASTString> m_memberName; | ||||
| 	SourceLocation m_memberLocation; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -889,6 +889,7 @@ bool ASTJsonExporter::visit(MemberAccess const& _node) | ||||
| { | ||||
| 	std::vector<pair<string, Json::Value>> attributes = { | ||||
| 		make_pair("memberName", _node.memberName()), | ||||
| 		make_pair("memberLocation", Json::Value(sourceLocationToString(_node.memberLocation()))), | ||||
| 		make_pair("expression", toJson(_node.expression())), | ||||
| 		make_pair("referencedDeclaration", idOrNull(_node.annotation().referencedDeclaration)), | ||||
| 	}; | ||||
|  | ||||
| @ -931,10 +931,15 @@ ASTPointer<NewExpression> ASTJsonImporter::createNewExpression(Json::Value const | ||||
| 
 | ||||
| ASTPointer<MemberAccess> ASTJsonImporter::createMemberAccess(Json::Value const&  _node) | ||||
| { | ||||
| 	SourceLocation memberLocation; | ||||
| 	if (member(_node, "memberLocation").isString()) | ||||
| 		memberLocation = solidity::langutil::parseSourceLocation(_node["memberLocation"].asString(), m_sourceNames); | ||||
| 
 | ||||
| 	return createASTNode<MemberAccess>( | ||||
| 		_node, | ||||
| 		convertJsonToASTNode<Expression>(member(_node, "expression")), | ||||
| 		memberAsASTString(_node, "memberName") | ||||
| 		memberAsASTString(_node, "memberName"), | ||||
| 		std::move(memberLocation) | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1897,7 +1897,9 @@ ASTPointer<Expression> Parser::parseLeftHandSideExpression( | ||||
| 		{ | ||||
| 			advance(); | ||||
| 			nodeFactory.markEndPosition(); | ||||
| 			expression = nodeFactory.createNode<MemberAccess>(expression, expectIdentifierTokenOrAddress()); | ||||
| 			SourceLocation memberLocation = currentLocation(); | ||||
| 			ASTPointer<ASTString> memberName = expectIdentifierTokenOrAddress(); | ||||
| 			expression = nodeFactory.createNode<MemberAccess>(expression, std::move(memberName), std::move(memberLocation)); | ||||
| 			break; | ||||
| 		} | ||||
| 		case Token::LParen: | ||||
| @ -2335,7 +2337,8 @@ ASTPointer<Expression> Parser::expressionFromIndexAccessStructure( | ||||
| 		Identifier const& identifier = dynamic_cast<Identifier const&>(*_iap.path[i]); | ||||
| 		expression = nodeFactory.createNode<MemberAccess>( | ||||
| 			expression, | ||||
| 			make_shared<ASTString>(identifier.name()) | ||||
| 			make_shared<ASTString>(identifier.name()), | ||||
| 			identifier.location() | ||||
| 		); | ||||
| 	} | ||||
| 	for (auto const& index: _iap.indices) | ||||
|  | ||||
| @ -70,6 +70,7 @@ | ||||
|               "isLValue": false, | ||||
|               "isPure": true, | ||||
|               "lValueRequested": false, | ||||
|               "memberLocation": "57:1:1", | ||||
|               "memberName": "X", | ||||
|               "nodeType": "MemberAccess", | ||||
|               "referencedDeclaration": 1, | ||||
|  | ||||
| @ -49,6 +49,7 @@ | ||||
|                 "typeDescriptions": {} | ||||
|               }, | ||||
|               "id": 10, | ||||
|               "memberLocation": "57:1:1", | ||||
|               "memberName": "X", | ||||
|               "nodeType": "MemberAccess", | ||||
|               "src": "55:3:1", | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user