Merge pull request #10833 from ethereum/ast-precise-name-locations

Extend the Solidity AST for precise locations of names
This commit is contained in:
chriseth 2021-02-11 10:44:58 +01:00 committed by GitHub
commit cbb197f7fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
112 changed files with 427 additions and 47 deletions

View File

@ -15,6 +15,7 @@ Bugfixes:
AST Changes:
* Support field `documentation` to hold NatSpec comments above each statement.
* Adds `nameLocation` to declarations to represent the exact location of the symbolic name.
### 0.8.1 (2021-01-27)

View File

@ -34,9 +34,11 @@ SourceLocation const parseSourceLocation(std::string const& _input, std::string
boost::algorithm::split(pos, _input, boost::is_any_of(":"));
solAssert(pos.size() == 3, "SourceLocation string must have 3 colon separated numeric fields.");
auto const sourceIndex = stoi(pos[Index]);
astAssert(
pos.size() == 3 &&
_maxIndex >= static_cast<size_t>(stoi(pos[Index])),
sourceIndex == -1 || _maxIndex >= static_cast<size_t>(sourceIndex),
"'src'-field ill-formatted or src-index too high"
);
@ -44,7 +46,9 @@ SourceLocation const parseSourceLocation(std::string const& _input, std::string
int end = start + stoi(pos[Length]);
// ASSUMPTION: only the name of source is used from here on, the m_source of the CharStream-Object can be empty
std::shared_ptr<langutil::CharStream> source = std::make_shared<langutil::CharStream>("", _sourceName);
std::shared_ptr<langutil::CharStream> source;
if (sourceIndex != -1)
source = std::make_shared<langutil::CharStream>("", _sourceName);
return SourceLocation{start, end, source};
}

View File

@ -244,12 +244,14 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> _name,
SourceLocation _nameLocation,
Visibility _visibility = Visibility::Default
):
ASTNode(_id, _location), m_name(std::move(_name)), m_visibility(_visibility) {}
ASTNode(_id, _location), m_name(std::move(_name)), m_nameLocation(std::move(_nameLocation)), m_visibility(_visibility) {}
/// @returns the declared name.
ASTString const& name() const { return *m_name; }
SourceLocation const& nameLocation() const noexcept { return m_nameLocation; }
bool noVisibilitySpecified() const { return m_visibility == Visibility::Default; }
Visibility visibility() const { return m_visibility == Visibility::Default ? defaultVisibility() : m_visibility; }
bool isPublic() const { return visibility() >= Visibility::Public; }
@ -287,6 +289,7 @@ protected:
private:
ASTPointer<ASTString> m_name;
SourceLocation m_nameLocation;
Visibility m_visibility;
};
@ -345,9 +348,10 @@ public:
SourceLocation const& _location,
ASTPointer<ASTString> _path,
ASTPointer<ASTString> const& _unitAlias,
SourceLocation _unitAliasLocation,
SymbolAliasList _symbolAliases
):
Declaration(_id, _location, _unitAlias),
Declaration(_id, _location, _unitAlias, std::move(_unitAliasLocation)),
m_path(std::move(_path)),
m_symbolAliases(move(_symbolAliases))
{ }
@ -477,13 +481,14 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
ASTPointer<StructuredDocumentation> const& _documentation,
std::vector<ASTPointer<InheritanceSpecifier>> _baseContracts,
std::vector<ASTPointer<ASTNode>> _subNodes,
ContractKind _contractKind = ContractKind::Contract,
bool _abstract = false
):
Declaration(_id, _location, _name),
Declaration(_id, _location, _name, std::move(_nameLocation)),
StructurallyDocumented(_documentation),
m_baseContracts(std::move(_baseContracts)),
m_subNodes(std::move(_subNodes)),
@ -643,9 +648,10 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
std::vector<ASTPointer<VariableDeclaration>> _members
):
Declaration(_id, _location, _name), m_members(std::move(_members)) {}
Declaration(_id, _location, _name, std::move(_nameLocation)), m_members(std::move(_members)) {}
void accept(ASTVisitor& _visitor) override;
void accept(ASTConstVisitor& _visitor) const override;
@ -670,9 +676,10 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
std::vector<ASTPointer<EnumValue>> _members
):
Declaration(_id, _location, _name), m_members(std::move(_members)) {}
Declaration(_id, _location, _name, std::move(_nameLocation)), m_members(std::move(_members)) {}
void accept(ASTVisitor& _visitor) override;
void accept(ASTConstVisitor& _visitor) const override;
@ -696,7 +703,7 @@ class EnumValue: public Declaration
{
public:
EnumValue(int64_t _id, SourceLocation const& _location, ASTPointer<ASTString> const& _name):
Declaration(_id, _location, _name) {}
Declaration(_id, _location, _name, _location) {}
void accept(ASTVisitor& _visitor) override;
void accept(ASTConstVisitor& _visitor) const override;
@ -738,13 +745,14 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
Visibility _visibility,
ASTPointer<ParameterList> _parameters,
bool _isVirtual = false,
ASTPointer<OverrideSpecifier> _overrides = nullptr,
ASTPointer<ParameterList> _returnParameters = ASTPointer<ParameterList>()
):
Declaration(_id, _location, _name, _visibility),
Declaration(_id, _location, _name, std::move(_nameLocation), _visibility),
m_parameters(std::move(_parameters)),
m_overrides(std::move(_overrides)),
m_returnParameters(std::move(_returnParameters)),
@ -815,6 +823,7 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation const& _nameLocation,
Visibility _visibility,
StateMutability _stateMutability,
bool _free,
@ -827,7 +836,7 @@ public:
ASTPointer<ParameterList> const& _returnParameters,
ASTPointer<Block> const& _body
):
CallableDeclaration(_id, _location, _name, _visibility, _parameters, _isVirtual, _overrides, _returnParameters),
CallableDeclaration(_id, _location, _name, std::move(_nameLocation), _visibility, _parameters, _isVirtual, _overrides, _returnParameters),
StructurallyDocumented(_documentation),
ImplementationOptional(_body != nullptr),
m_stateMutability(_stateMutability),
@ -928,6 +937,7 @@ public:
SourceLocation const& _location,
ASTPointer<TypeName> _type,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
ASTPointer<Expression> _value,
Visibility _visibility,
ASTPointer<StructuredDocumentation> const _documentation = nullptr,
@ -936,7 +946,7 @@ public:
ASTPointer<OverrideSpecifier> _overrides = nullptr,
Location _referenceLocation = Location::Unspecified
):
Declaration(_id, _location, _name, _visibility),
Declaration(_id, _location, _name, std::move(_nameLocation), _visibility),
StructurallyDocumented(std::move(_documentation)),
m_typeName(std::move(_type)),
m_value(std::move(_value)),
@ -1033,13 +1043,14 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
ASTPointer<StructuredDocumentation> const& _documentation,
ASTPointer<ParameterList> const& _parameters,
bool _isVirtual,
ASTPointer<OverrideSpecifier> const& _overrides,
ASTPointer<Block> const& _body
):
CallableDeclaration(_id, _location, _name, Visibility::Internal, _parameters, _isVirtual, _overrides),
CallableDeclaration(_id, _location, _name, std::move(_nameLocation), Visibility::Internal, _parameters, _isVirtual, _overrides),
StructurallyDocumented(_documentation),
ImplementationOptional(_body != nullptr),
m_body(_body)
@ -1108,11 +1119,12 @@ public:
int64_t _id,
SourceLocation const& _location,
ASTPointer<ASTString> const& _name,
SourceLocation _nameLocation,
ASTPointer<StructuredDocumentation> const& _documentation,
ASTPointer<ParameterList> const& _parameters,
bool _anonymous = false
):
CallableDeclaration(_id, _location, _name, Visibility::Default, _parameters),
CallableDeclaration(_id, _location, _name, std::move(_nameLocation), Visibility::Default, _parameters),
StructurallyDocumented(_documentation),
m_anonymous(_anonymous)
{
@ -1151,7 +1163,7 @@ class MagicVariableDeclaration: public Declaration
{
public:
MagicVariableDeclaration(int _id, ASTString const& _name, Type const* _type):
Declaration(_id, SourceLocation(), std::make_shared<ASTString>(_name)), m_type(_type) { }
Declaration(_id, SourceLocation(), std::make_shared<ASTString>(_name), {}), m_type(_type) { }
void accept(ASTVisitor&) override
{

View File

@ -107,21 +107,21 @@ void ASTJsonConverter::setJsonNode(
m_currentValue[e.first] = std::move(e.second);
}
size_t ASTJsonConverter::sourceIndexFromLocation(SourceLocation const& _location) const
optional<size_t> ASTJsonConverter::sourceIndexFromLocation(SourceLocation const& _location) const
{
if (_location.source && m_sourceIndices.count(_location.source->name()))
return m_sourceIndices.at(_location.source->name());
else
return numeric_limits<size_t>::max();
return nullopt;
}
string ASTJsonConverter::sourceLocationToString(SourceLocation const& _location) const
{
size_t sourceIndex = sourceIndexFromLocation(_location);
optional<size_t> sourceIndexOpt = sourceIndexFromLocation(_location);
int length = -1;
if (_location.start >= 0 && _location.end >= 0)
length = _location.end - _location.start;
return to_string(_location.start) + ":" + to_string(length) + ":" + to_string(sourceIndex);
return to_string(_location.start) + ":" + to_string(length) + ":" + (sourceIndexOpt.has_value() ? to_string(sourceIndexOpt.value()) : "-1");
}
string ASTJsonConverter::namePathToString(std::vector<ASTString> const& _namePath)
@ -243,6 +243,8 @@ bool ASTJsonConverter::visit(ImportDirective const& _node)
addIfSet(attributes, "absolutePath", _node.annotation().absolutePath);
attributes.emplace_back("unitAlias", _node.name());
attributes.emplace_back("nameLocation", Json::Value(sourceLocationToString(_node.nameLocation())));
Json::Value symbolAliases(Json::arrayValue);
for (auto const& symbolAlias: _node.symbolAliases())
{
@ -250,6 +252,7 @@ bool ASTJsonConverter::visit(ImportDirective const& _node)
solAssert(symbolAlias.symbol, "");
tuple["foreign"] = toJson(*symbolAlias.symbol);
tuple["local"] = symbolAlias.alias ? Json::Value(*symbolAlias.alias) : Json::nullValue;
tuple["nameLocation"] = sourceLocationToString(_node.nameLocation());
symbolAliases.append(tuple);
}
attributes.emplace_back("symbolAliases", std::move(symbolAliases));
@ -261,6 +264,7 @@ bool ASTJsonConverter::visit(ContractDefinition const& _node)
{
std::vector<pair<string, Json::Value>> attributes = {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
make_pair("contractKind", contractKind(_node.contractKind())),
make_pair("abstract", _node.abstract()),
@ -310,6 +314,7 @@ bool ASTJsonConverter::visit(StructDefinition const& _node)
{
std::vector<pair<string, Json::Value>> attributes = {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("visibility", Declaration::visibilityToString(_node.visibility())),
make_pair("members", toJson(_node.members())),
make_pair("scope", idOrNull(_node.scope()))
@ -326,6 +331,7 @@ bool ASTJsonConverter::visit(EnumDefinition const& _node)
{
std::vector<pair<string, Json::Value>> attributes = {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("members", toJson(_node.members()))
};
@ -339,7 +345,8 @@ bool ASTJsonConverter::visit(EnumDefinition const& _node)
bool ASTJsonConverter::visit(EnumValue const& _node)
{
setJsonNode(_node, "EnumValue", {
make_pair("name", _node.name())
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
});
return false;
}
@ -364,6 +371,7 @@ bool ASTJsonConverter::visit(FunctionDefinition const& _node)
{
std::vector<pair<string, Json::Value>> attributes = {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
make_pair("kind", _node.isFree() ? "freeFunction" : TokenTraits::toString(_node.kind())),
make_pair("stateMutability", stateMutabilityToString(_node.stateMutability())),
@ -401,6 +409,7 @@ bool ASTJsonConverter::visit(VariableDeclaration const& _node)
{
std::vector<pair<string, Json::Value>> attributes = {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("typeName", toJson(_node.typeName())),
make_pair("constant", _node.isConstant()),
make_pair("mutability", VariableDeclaration::mutabilityToString(_node.mutability())),
@ -428,6 +437,7 @@ bool ASTJsonConverter::visit(ModifierDefinition const& _node)
{
std::vector<pair<string, Json::Value>> attributes = {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
make_pair("visibility", Declaration::visibilityToString(_node.visibility())),
make_pair("parameters", toJson(_node.parameterList())),
@ -455,6 +465,7 @@ bool ASTJsonConverter::visit(EventDefinition const& _node)
m_inEvent = true;
setJsonNode(_node, "EventDefinition", {
make_pair("name", _node.name()),
make_pair("nameLocation", sourceLocationToString(_node.nameLocation())),
make_pair("documentation", _node.documentation() ? toJson(*_node.documentation()) : Json::nullValue),
make_pair("parameters", toJson(_node.parameterList())),
make_pair("anonymous", _node.isAnonymous())

View File

@ -137,7 +137,8 @@ private:
std::string const& _nodeName,
std::vector<std::pair<std::string, Json::Value>>&& _attributes
);
size_t sourceIndexFromLocation(langutil::SourceLocation const& _location) const;
/// Maps source location to an index, if source is valid and a mapping does exist, otherwise returns std::nullopt.
std::optional<size_t> sourceIndexFromLocation(langutil::SourceLocation const& _location) const;
std::string sourceLocationToString(langutil::SourceLocation const& _location) const;
static std::string namePathToString(std::vector<ASTString> const& _namePath);
static Json::Value idOrNull(ASTNode const* _pt)

View File

@ -99,6 +99,13 @@ SourceLocation const ASTJsonImporter::createSourceLocation(Json::Value const& _n
return solidity::langutil::parseSourceLocation(_node["src"].asString(), m_currentSourceName, m_sourceLocations.size());
}
SourceLocation ASTJsonImporter::createNameSourceLocation(Json::Value const& _node)
{
astAssert(member(_node, "nameLocation").isString(), "'nameLocation' must be a string");
return solidity::langutil::parseSourceLocation(_node["nameLocation"].asString(), m_currentSourceName, m_sourceLocations.size());
}
template<class T>
ASTPointer<T> ASTJsonImporter::convertJsonToASTNode(Json::Value const& _node)
{
@ -272,6 +279,7 @@ ASTPointer<ImportDirective> ASTJsonImporter::createImportDirective(Json::Value c
_node,
path,
unitAlias,
createNameSourceLocation(_node),
move(symbolAliases)
);
@ -298,6 +306,7 @@ ASTPointer<ContractDefinition> ASTJsonImporter::createContractDefinition(Json::V
return createASTNode<ContractDefinition>(
_node,
make_shared<ASTString>(_node["name"].asString()),
createNameSourceLocation(_node),
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
baseContracts,
subNodes,
@ -352,6 +361,7 @@ ASTPointer<ASTNode> ASTJsonImporter::createStructDefinition(Json::Value const& _
return createASTNode<StructDefinition>(
_node,
memberAsASTString(_node, "name"),
createNameSourceLocation(_node),
members
);
}
@ -364,6 +374,7 @@ ASTPointer<EnumDefinition> ASTJsonImporter::createEnumDefinition(Json::Value con
return createASTNode<EnumDefinition>(
_node,
memberAsASTString(_node, "name"),
createNameSourceLocation(_node),
members
);
}
@ -434,6 +445,7 @@ ASTPointer<FunctionDefinition> ASTJsonImporter::createFunctionDefinition(Json::V
return createASTNode<FunctionDefinition>(
_node,
memberAsASTString(_node, "name"),
createNameSourceLocation(_node),
vis,
stateMutability(_node),
freeFunction,
@ -475,6 +487,7 @@ ASTPointer<VariableDeclaration> ASTJsonImporter::createVariableDeclaration(Json:
_node,
nullOrCast<TypeName>(member(_node, "typeName")),
make_shared<ASTString>(member(_node, "name").asString()),
createNameSourceLocation(_node),
nullOrCast<Expression>(member(_node, "value")),
visibility(_node),
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
@ -490,6 +503,7 @@ ASTPointer<ModifierDefinition> ASTJsonImporter::createModifierDefinition(Json::V
return createASTNode<ModifierDefinition>(
_node,
memberAsASTString(_node, "name"),
createNameSourceLocation(_node),
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
createParameterList(member(_node, "parameters")),
memberAsBool(_node, "virtual"),
@ -515,6 +529,7 @@ ASTPointer<EventDefinition> ASTJsonImporter::createEventDefinition(Json::Value c
return createASTNode<EventDefinition>(
_node,
memberAsASTString(_node, "name"),
createNameSourceLocation(_node),
_node["documentation"].isNull() ? nullptr : createDocumentation(member(_node, "documentation")),
createParameterList(member(_node, "parameters")),
memberAsBool(_node, "anonymous")

View File

@ -67,6 +67,7 @@ private:
template<class T>
ASTPointer<T> convertJsonToASTNode(Json::Value const& _node);
langutil::SourceLocation createNameSourceLocation(Json::Value const& _node);
/// \defgroup nodeCreators JSON to AST-Nodes
///@{

View File

@ -226,6 +226,7 @@ ASTPointer<ImportDirective> Parser::parseImportDirective()
expectToken(Token::Import);
ASTPointer<ASTString> path;
ASTPointer<ASTString> unitAlias = make_shared<string>();
SourceLocation unitAliasLocation{};
ImportDirective::SymbolAliasList symbolAliases;
if (m_scanner->currentToken() == Token::StringLiteral)
@ -234,7 +235,7 @@ ASTPointer<ImportDirective> Parser::parseImportDirective()
if (m_scanner->currentToken() == Token::As)
{
m_scanner->next();
unitAlias = expectIdentifierToken();
tie(unitAlias, unitAliasLocation) = expectIdentifierWithLocation();
}
}
else
@ -250,8 +251,7 @@ ASTPointer<ImportDirective> Parser::parseImportDirective()
if (m_scanner->currentToken() == Token::As)
{
expectToken(Token::As);
aliasLocation = currentLocation();
alias = expectIdentifierToken();
tie(alias, aliasLocation) = expectIdentifierWithLocation();
}
symbolAliases.emplace_back(ImportDirective::SymbolAlias{move(id), move(alias), aliasLocation});
if (m_scanner->currentToken() != Token::Comma)
@ -264,7 +264,7 @@ ASTPointer<ImportDirective> Parser::parseImportDirective()
{
m_scanner->next();
expectToken(Token::As);
unitAlias = expectIdentifierToken();
tie(unitAlias, unitAliasLocation) = expectIdentifierWithLocation();
}
else
fatalParserError(9478_error, "Expected string literal (path), \"*\" or alias list.");
@ -281,7 +281,7 @@ ASTPointer<ImportDirective> Parser::parseImportDirective()
fatalParserError(6326_error, "Import path cannot be empty.");
nodeFactory.markEndPosition();
expectToken(Token::Semicolon);
return nodeFactory.createNode<ImportDirective>(path, unitAlias, move(symbolAliases));
return nodeFactory.createNode<ImportDirective>(path, unitAlias, unitAliasLocation, move(symbolAliases));
}
std::pair<ContractKind, bool> Parser::parseContractKind()
@ -317,6 +317,7 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
RecursionGuard recursionGuard(*this);
ASTNodeFactory nodeFactory(*this);
ASTPointer<ASTString> name = nullptr;
SourceLocation nameLocation{};
ASTPointer<StructuredDocumentation> documentation;
vector<ASTPointer<InheritanceSpecifier>> baseContracts;
vector<ASTPointer<ASTNode>> subNodes;
@ -325,7 +326,7 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
{
documentation = parseStructuredDocumentation();
contractKind = parseContractKind();
name = expectIdentifierToken();
tie(name, nameLocation) = expectIdentifierWithLocation();
if (m_scanner->currentToken() == Token::Is)
do
{
@ -385,6 +386,7 @@ ASTPointer<ContractDefinition> Parser::parseContractDefinition()
expectToken(Token::RBrace);
return nodeFactory.createNode<ContractDefinition>(
name,
nameLocation,
documentation,
baseContracts,
subNodes,
@ -572,6 +574,7 @@ ASTPointer<ASTNode> Parser::parseFunctionDefinition(bool _freeFunction)
Token kind = m_scanner->currentToken();
ASTPointer<ASTString> name;
SourceLocation nameLocation;
if (kind == Token::Function)
{
m_scanner->next();
@ -586,6 +589,7 @@ ASTPointer<ASTNode> Parser::parseFunctionDefinition(bool _freeFunction)
{Token::Fallback, "fallback function"},
{Token::Receive, "receive function"},
}.at(m_scanner->currentToken());
nameLocation = currentLocation();
name = make_shared<ASTString>(TokenTraits::toString(m_scanner->currentToken()));
string message{
"This function is named \"" + *name + "\" but is not the " + expected + " of the contract. "
@ -599,7 +603,7 @@ ASTPointer<ASTNode> Parser::parseFunctionDefinition(bool _freeFunction)
m_scanner->next();
}
else
name = expectIdentifierToken();
tie(name, nameLocation) = expectIdentifierWithLocation();
}
else
{
@ -621,6 +625,7 @@ ASTPointer<ASTNode> Parser::parseFunctionDefinition(bool _freeFunction)
}
return nodeFactory.createNode<FunctionDefinition>(
name,
nameLocation,
header.visibility,
header.stateMutability,
_freeFunction,
@ -640,7 +645,7 @@ ASTPointer<StructDefinition> Parser::parseStructDefinition()
RecursionGuard recursionGuard(*this);
ASTNodeFactory nodeFactory(*this);
expectToken(Token::Struct);
ASTPointer<ASTString> name = expectIdentifierToken();
auto [name, nameLocation] = expectIdentifierWithLocation();
vector<ASTPointer<VariableDeclaration>> members;
expectToken(Token::LBrace);
while (m_scanner->currentToken() != Token::RBrace)
@ -650,7 +655,7 @@ ASTPointer<StructDefinition> Parser::parseStructDefinition()
}
nodeFactory.markEndPosition();
expectToken(Token::RBrace);
return nodeFactory.createNode<StructDefinition>(name, members);
return nodeFactory.createNode<StructDefinition>(move(name), move(nameLocation), move(members));
}
ASTPointer<EnumValue> Parser::parseEnumValue()
@ -666,7 +671,7 @@ ASTPointer<EnumDefinition> Parser::parseEnumDefinition()
RecursionGuard recursionGuard(*this);
ASTNodeFactory nodeFactory(*this);
expectToken(Token::Enum);
ASTPointer<ASTString> name = expectIdentifierToken();
auto [name, nameLocation] = expectIdentifierWithLocation();
vector<ASTPointer<EnumValue>> members;
expectToken(Token::LBrace);
@ -684,7 +689,7 @@ ASTPointer<EnumDefinition> Parser::parseEnumDefinition()
nodeFactory.markEndPosition();
expectToken(Token::RBrace);
return nodeFactory.createNode<EnumDefinition>(name, members);
return nodeFactory.createNode<EnumDefinition>(name, nameLocation, members);
}
ASTPointer<VariableDeclaration> Parser::parseVariableDeclaration(
@ -717,6 +722,7 @@ ASTPointer<VariableDeclaration> Parser::parseVariableDeclaration(
Visibility visibility(Visibility::Default);
VariableDeclaration::Location location = VariableDeclaration::Location::Unspecified;
ASTPointer<ASTString> identifier;
SourceLocation nameLocation{};
while (true)
{
@ -795,7 +801,7 @@ ASTPointer<VariableDeclaration> Parser::parseVariableDeclaration(
else
{
nodeFactory.markEndPosition();
identifier = expectIdentifierToken();
tie(identifier, nameLocation) = expectIdentifierWithLocation();
}
ASTPointer<Expression> value;
if (_options.allowInitialValue)
@ -810,6 +816,7 @@ ASTPointer<VariableDeclaration> Parser::parseVariableDeclaration(
return nodeFactory.createNode<VariableDeclaration>(
type,
identifier,
nameLocation,
value,
visibility,
documentation,
@ -830,7 +837,7 @@ ASTPointer<ModifierDefinition> Parser::parseModifierDefinition()
ASTPointer<StructuredDocumentation> documentation = parseStructuredDocumentation();
expectToken(Token::Modifier);
ASTPointer<ASTString> name(expectIdentifierToken());
auto [name, nameLocation] = expectIdentifierWithLocation();
ASTPointer<ParameterList> parameters;
if (m_scanner->currentToken() == Token::LParen)
{
@ -875,7 +882,15 @@ ASTPointer<ModifierDefinition> Parser::parseModifierDefinition()
else
m_scanner->next(); // just consume the ';'
return nodeFactory.createNode<ModifierDefinition>(name, documentation, parameters, isVirtual, overrides, block);
return nodeFactory.createNode<ModifierDefinition>(name, nameLocation, documentation, parameters, isVirtual, overrides, block);
}
pair<ASTPointer<ASTString>, SourceLocation> Parser::expectIdentifierWithLocation()
{
SourceLocation nameLocation = currentLocation();
ASTPointer<ASTString> name = expectIdentifierToken();
return {move(name), move(nameLocation)};
}
ASTPointer<EventDefinition> Parser::parseEventDefinition()
@ -885,7 +900,7 @@ ASTPointer<EventDefinition> Parser::parseEventDefinition()
ASTPointer<StructuredDocumentation> documentation = parseStructuredDocumentation();
expectToken(Token::Event);
ASTPointer<ASTString> name(expectIdentifierToken());
auto [name, nameLocation] = expectIdentifierWithLocation();
VarDeclParserOptions options;
options.allowIndexed = true;
@ -899,7 +914,7 @@ ASTPointer<EventDefinition> Parser::parseEventDefinition()
}
nodeFactory.markEndPosition();
expectToken(Token::Semicolon);
return nodeFactory.createNode<EventDefinition>(name, documentation, parameters, anonymous);
return nodeFactory.createNode<EventDefinition>(name, nameLocation, documentation, parameters, anonymous);
}
ASTPointer<UsingForDirective> Parser::parseUsingDirective()

View File

@ -151,6 +151,7 @@ private:
std::vector<ASTPointer<Expression>> parseFunctionCallListArguments();
std::pair<std::vector<ASTPointer<Expression>>, std::vector<ASTPointer<ASTString>>> parseFunctionCallArguments();
std::pair<std::vector<ASTPointer<Expression>>, std::vector<ASTPointer<ASTString>>> parseNamedArguments();
std::pair<ASTPointer<ASTString>, langutil::SourceLocation> expectIdentifierWithLocation();
///@}
///@{

View File

@ -187,7 +187,7 @@ Json::Value AsmJsonConverter::createAstNode(langutil::SourceLocation const& _loc
int length = -1;
if (_location.start >= 0 && _location.end >= 0)
length = _location.end - _location.start;
ret["src"] = to_string(_location.start) + ":" + to_string(length) + ":" + m_sourceIndex;
ret["src"] = to_string(_location.start) + ":" + to_string(length) + ":" + (m_sourceIndex.has_value() ? to_string(m_sourceIndex.value()) : "-1");
return ret;
}

View File

@ -27,6 +27,7 @@
#include <liblangutil/SourceLocation.h>
#include <json/json.h>
#include <boost/variant.hpp>
#include <optional>
#include <vector>
namespace solidity::yul
@ -40,7 +41,7 @@ class AsmJsonConverter: public boost::static_visitor<Json::Value>
public:
/// Create a converter to JSON for any block of inline assembly
/// @a _sourceIndex to be used to abbreviate source name in the source locations
explicit AsmJsonConverter(size_t _sourceIndex): m_sourceIndex(std::to_string(_sourceIndex)) {}
explicit AsmJsonConverter(std::optional<size_t> _sourceIndex): m_sourceIndex(_sourceIndex) {}
Json::Value operator()(Block const& _node) const;
Json::Value operator()(TypedName const& _node) const;
@ -65,7 +66,7 @@ private:
template <class T>
Json::Value vectorOfVariantsToJson(std::vector<T> const& vec) const;
std::string const m_sourceIndex;
std::optional<size_t> const m_sourceIndex;
};
}

View File

@ -49,6 +49,7 @@
7
],
"name": "C",
"nameLocation": "27:1:0",
"nodeType": "ContractDefinition",
"nodes":
[
@ -82,6 +83,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "45:4:0",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters":

View File

@ -40,6 +40,7 @@ JSON AST (compact format):
18
],
"name": "Error1",
"nameLocation": "71:6:0",
"nodeType": "ContractDefinition",
"nodes":
[
@ -59,6 +60,7 @@ JSON AST (compact format):
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -120,6 +122,7 @@ JSON AST (compact format):
"kind": "function",
"modifiers": [],
"name": "five",
"nameLocation": "407:4:0",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -139,6 +142,7 @@ JSON AST (compact format):
"id": 12,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 17,
"src": "434:4:0",

View File

@ -10,4 +10,4 @@
2 | pragma solidity >=0.0; contract Errort6 { using foo for ; /* missing type name */ }
| ^
","message":"Recovered in ContractDefinition at '}'.","severity":"warning","sourceLocation":{"end":120,"file":"A","start":119},"type":"Warning"}],"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"Errort6":[3]},"id":4,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3,"linearizedBaseContracts":[3],"name":"Errort6","nodeType":"ContractDefinition","nodes":[],"scope":4,"src":"59:35:0"}],"src":"36:84:0"},"id":0}}}
","message":"Recovered in ContractDefinition at '}'.","severity":"warning","sourceLocation":{"end":120,"file":"A","start":119},"type":"Warning"}],"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"Errort6":[3]},"id":4,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3,"linearizedBaseContracts":[3],"name":"Errort6","nameLocation":"68:7:0","nodeType":"ContractDefinition","nodes":[],"scope":4,"src":"59:35:0"}],"src":"36:84:0"},"id":0}}}

View File

@ -1 +1 @@
{"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"C":[6]},"id":7,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"97:2:0","statements":[]},"functionSelector":"26121ff0","id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"82:2:0"},"returnParameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"97:0:0"},"scope":6,"src":"72:27:0","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":7,"src":"59:42:0"}],"src":"36:65:0"},"id":0}}}
{"sources":{"A":{"ast":{"absolutePath":"A","exportedSymbols":{"C":[6]},"id":7,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity",">=","0.0"],"nodeType":"PragmaDirective","src":"36:22:0"},{"abstract":false,"baseContracts":[],"contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nameLocation":"68:1:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"97:2:0","statements":[]},"functionSelector":"26121ff0","id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nameLocation":"81:1:0","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"82:2:0"},"returnParameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"97:0:0"},"scope":6,"src":"72:27:0","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":7,"src":"59:42:0"}],"src":"36:65:0"},"id":0}}}

View File

@ -23,6 +23,7 @@
5
],
"name": "C",
"nameLocation": "18:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -39,6 +40,7 @@
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "C",
"nameLocation": "18:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
39
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -32,6 +33,7 @@
"id": 4,
"mutability": "mutable",
"name": "m",
"nameLocation": "60:1:1",
"nodeType": "VariableDeclaration",
"scope": 39,
"src": "17:44:1",
@ -100,6 +102,7 @@
"id": 12,
"mutability": "mutable",
"name": "a",
"nameLocation": "160:1:1",
"nodeType": "VariableDeclaration",
"scope": 37,
"src": "144:17:1",
@ -234,6 +237,7 @@
"id": 22,
"mutability": "mutable",
"name": "c",
"nameLocation": "205:1:1",
"nodeType": "VariableDeclaration",
"scope": 37,
"src": "197:9:1",
@ -468,6 +472,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "76:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -480,6 +485,7 @@
"id": 6,
"mutability": "mutable",
"name": "arg",
"nameLocation": "94:3:1",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "78:19:1",
@ -519,6 +525,7 @@
"id": 9,
"mutability": "mutable",
"name": "r",
"nameLocation": "131:1:1",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "115:17:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 39,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -19,6 +20,7 @@
"id": 4,
"mutability": "mutable",
"name": "m",
"nameLocation": "60:1:1",
"nodeType": "VariableDeclaration",
"src": "17:44:1",
"stateVariable": false,
@ -70,6 +72,7 @@
"id": 12,
"mutability": "mutable",
"name": "a",
"nameLocation": "160:1:1",
"nodeType": "VariableDeclaration",
"src": "144:17:1",
"stateVariable": false,
@ -159,6 +162,7 @@
"id": 22,
"mutability": "mutable",
"name": "c",
"nameLocation": "205:1:1",
"nodeType": "VariableDeclaration",
"src": "197:9:1",
"stateVariable": false,
@ -296,6 +300,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "76:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -308,6 +313,7 @@
"id": 6,
"mutability": "mutable",
"name": "arg",
"nameLocation": "94:3:1",
"nodeType": "VariableDeclaration",
"src": "78:19:1",
"stateVariable": false,
@ -338,6 +344,7 @@
"id": 9,
"mutability": "mutable",
"name": "r",
"nameLocation": "131:1:1",
"nodeType": "VariableDeclaration",
"src": "115:17:1",
"stateVariable": false,

View File

@ -23,6 +23,7 @@
4
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -31,6 +32,7 @@
"id": 3,
"mutability": "mutable",
"name": "i",
"nameLocation": "20:1:1",
"nodeType": "VariableDeclaration",
"scope": 4,
"src": "13:8:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 4,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -19,6 +20,7 @@
"id": 3,
"mutability": "mutable",
"name": "i",
"nameLocation": "20:1:1",
"nodeType": "VariableDeclaration",
"src": "13:8:1",
"stateVariable": false,

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -137,6 +138,7 @@
"kind": "function",
"modifiers": [],
"name": "j",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -124,6 +125,7 @@
"kind": "function",
"modifiers": [],
"name": "j",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -62,6 +63,7 @@
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -49,6 +50,7 @@
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -124,6 +125,7 @@
"kind": "function",
"modifiers": [],
"name": "h",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -111,6 +112,7 @@
"kind": "function",
"modifiers": [],
"name": "h",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -74,6 +75,7 @@
"kind": "function",
"modifiers": [],
"name": "l",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -61,6 +62,7 @@
"kind": "function",
"modifiers": [],
"name": "l",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -137,6 +138,7 @@
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -124,6 +125,7 @@
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -22,6 +22,7 @@
8
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -99,6 +100,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "24:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -118,6 +120,7 @@
"id": 3,
"mutability": "mutable",
"name": "x",
"nameLocation": "54:1:1",
"nodeType": "VariableDeclaration",
"scope": 7,
"src": "49:6:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 8,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -88,6 +89,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "24:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -107,6 +109,7 @@
"id": 3,
"mutability": "mutable",
"name": "x",
"nameLocation": "54:1:1",
"nodeType": "VariableDeclaration",
"src": "49:6:1",
"stateVariable": false,

View File

@ -23,6 +23,7 @@
12
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -36,6 +37,7 @@
"id": 2,
"mutability": "mutable",
"name": "x",
"nameLocation": "33:1:1",
"nodeType": "VariableDeclaration",
"scope": 3,
"src": "28:6:1",
@ -62,6 +64,7 @@
}
],
"name": "S",
"nameLocation": "24:1:1",
"nodeType": "StructDefinition",
"scope": 12,
"src": "17:20:1",
@ -72,6 +75,7 @@
"id": 6,
"mutability": "mutable",
"name": "s",
"nameLocation": "44:1:1",
"nodeType": "VariableDeclaration",
"scope": 12,
"src": "42:3:1",
@ -211,6 +215,7 @@
"kind": "function",
"modifiers": [],
"name": "e",
"nameLocation": "60:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 12,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -23,6 +24,7 @@
"id": 2,
"mutability": "mutable",
"name": "x",
"nameLocation": "33:1:1",
"nodeType": "VariableDeclaration",
"src": "28:6:1",
"stateVariable": false,
@ -40,6 +42,7 @@
}
],
"name": "S",
"nameLocation": "24:1:1",
"nodeType": "StructDefinition",
"src": "17:20:1",
"visibility": "public"
@ -49,6 +52,7 @@
"id": 6,
"mutability": "mutable",
"name": "s",
"nameLocation": "44:1:1",
"nodeType": "VariableDeclaration",
"src": "42:3:1",
"stateVariable": false,
@ -158,6 +162,7 @@
"kind": "function",
"modifiers": [],
"name": "e",
"nameLocation": "60:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -78,6 +79,7 @@
"kind": "function",
"modifiers": [],
"name": "m",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -65,6 +66,7 @@
"kind": "function",
"modifiers": [],
"name": "m",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -22,6 +22,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -184,6 +185,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
6
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -101,6 +102,7 @@
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -88,6 +89,7 @@
"kind": "function",
"modifiers": [],
"name": "g",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 6,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -157,6 +158,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
9
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -46,6 +47,7 @@
"id": 4,
"mutability": "mutable",
"name": "x",
"nameLocation": "57:1:1",
"nodeType": "VariableDeclaration",
"scope": 7,
"src": "52:6:1",
@ -127,6 +129,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 9,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,6 +35,7 @@
"id": 4,
"mutability": "mutable",
"name": "x",
"nameLocation": "57:1:1",
"nodeType": "VariableDeclaration",
"src": "52:6:1",
"stateVariable": false,
@ -96,6 +98,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "26:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
5
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -39,6 +40,7 @@
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -39,6 +39,7 @@
1
],
"name": "A",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 14,
@ -75,6 +76,7 @@
1
],
"name": "B",
"nameLocation": "24:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 14,
@ -113,6 +115,7 @@
1
],
"name": "C",
"nameLocation": "44:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 14,
@ -153,6 +156,7 @@
1
],
"name": "D",
"nameLocation": "64:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 14,
@ -195,6 +199,7 @@
1
],
"name": "E",
"nameLocation": "84:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 14,

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 1,
"name": "A",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "0:14:1"
@ -36,6 +37,7 @@
"contractKind": "contract",
"id": 4,
"name": "B",
"nameLocation": "24:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "15:19:1"
@ -61,6 +63,7 @@
"contractKind": "contract",
"id": 7,
"name": "C",
"nameLocation": "44:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "35:19:1"
@ -86,6 +89,7 @@
"contractKind": "contract",
"id": 10,
"name": "D",
"nameLocation": "64:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "55:19:1"
@ -111,6 +115,7 @@
"contractKind": "contract",
"id": 13,
"name": "E",
"nameLocation": "84:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "75:19:1"

View File

@ -31,6 +31,7 @@
2
],
"name": "C",
"nameLocation": "37:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 3,
@ -71,6 +72,7 @@
5
],
"name": "C",
"nameLocation": "71:1:2",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 6,
@ -104,6 +106,7 @@
23
],
"name": "C",
"nameLocation": "9:1:3",
"nodeType": "ContractDefinition",
"nodes":
[
@ -120,6 +123,7 @@
"id": 9,
"mutability": "mutable",
"name": "state",
"nameLocation": "60:5:3",
"nodeType": "VariableDeclaration",
"scope": 23,
"src": "48:17:3",
@ -155,6 +159,7 @@
},
"id": 12,
"name": "Evt",
"nameLocation": "102:3:3",
"nodeType": "EventDefinition",
"parameters":
{
@ -189,6 +194,7 @@
},
"id": 17,
"name": "mod",
"nameLocation": "147:3:3",
"nodeType": "ModifierDefinition",
"parameters":
{
@ -222,6 +228,7 @@
"kind": "function",
"modifiers": [],
"name": "fn",
"nameLocation": "197:2:3",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
27
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -31,6 +32,7 @@
"id": 2,
"mutability": "mutable",
"name": "a",
"nameLocation": "50:1:1",
"nodeType": "VariableDeclaration",
"scope": 27,
"src": "45:6:1",
@ -193,6 +195,7 @@
"id": 8,
"mutability": "mutable",
"name": "i",
"nameLocation": "136:1:1",
"nodeType": "VariableDeclaration",
"scope": 22,
"src": "131:6:1",
@ -308,6 +311,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "66:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -327,6 +331,7 @@
"id": 5,
"mutability": "mutable",
"name": "x",
"nameLocation": "96:1:1",
"nodeType": "VariableDeclaration",
"scope": 26,
"src": "91:6:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 27,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -19,6 +20,7 @@
"id": 2,
"mutability": "mutable",
"name": "a",
"nameLocation": "50:1:1",
"nodeType": "VariableDeclaration",
"src": "45:6:1",
"stateVariable": false,
@ -126,6 +128,7 @@
"id": 8,
"mutability": "mutable",
"name": "i",
"nameLocation": "136:1:1",
"nodeType": "VariableDeclaration",
"src": "131:6:1",
"stateVariable": false,
@ -204,6 +207,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "66:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -223,6 +227,7 @@
"id": 5,
"mutability": "mutable",
"name": "x",
"nameLocation": "96:1:1",
"nodeType": "VariableDeclaration",
"src": "91:6:1",
"stateVariable": false,

View File

@ -19,6 +19,7 @@
},
"id": 2,
"name": "C",
"nameLocation": "37:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "28:13:1"
@ -46,6 +47,7 @@
},
"id": 5,
"name": "C",
"nameLocation": "71:1:2",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "62:13:2"
@ -66,6 +68,7 @@
"contractKind": "contract",
"id": 23,
"name": "C",
"nameLocation": "9:1:3",
"nodeType": "ContractDefinition",
"nodes":
[
@ -74,6 +77,7 @@
"id": 9,
"mutability": "mutable",
"name": "state",
"nameLocation": "60:5:3",
"nodeType": "VariableDeclaration",
"src": "48:17:3",
"stateVariable": false,
@ -100,6 +104,7 @@
},
"id": 12,
"name": "Evt",
"nameLocation": "102:3:3",
"nodeType": "EventDefinition",
"parameters":
{
@ -134,6 +139,7 @@
},
"id": 17,
"name": "mod",
"nameLocation": "147:3:3",
"nodeType": "ModifierDefinition",
"parameters":
{
@ -166,6 +172,7 @@
"kind": "function",
"modifiers": [],
"name": "fn",
"nameLocation": "197:2:3",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
28
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -38,6 +39,7 @@
"id": 3,
"mutability": "mutable",
"name": "a",
"nameLocation": "35:1:1",
"nodeType": "VariableDeclaration",
"scope": 28,
"src": "30:6:1",
@ -202,6 +204,7 @@
"id": 9,
"mutability": "mutable",
"name": "i",
"nameLocation": "122:1:1",
"nodeType": "VariableDeclaration",
"scope": 23,
"src": "117:6:1",
@ -318,6 +321,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "51:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -337,6 +341,7 @@
"id": 6,
"mutability": "mutable",
"name": "x",
"nameLocation": "81:1:1",
"nodeType": "VariableDeclaration",
"scope": 27,
"src": "76:6:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 28,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -19,6 +20,7 @@
"id": 3,
"mutability": "mutable",
"name": "a",
"nameLocation": "35:1:1",
"nodeType": "VariableDeclaration",
"src": "30:6:1",
"stateVariable": false,
@ -128,6 +130,7 @@
"id": 9,
"mutability": "mutable",
"name": "i",
"nameLocation": "122:1:1",
"nodeType": "VariableDeclaration",
"src": "117:6:1",
"stateVariable": false,
@ -207,6 +210,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "51:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -226,6 +230,7 @@
"id": 6,
"mutability": "mutable",
"name": "x",
"nameLocation": "81:1:1",
"nodeType": "VariableDeclaration",
"src": "76:6:1",
"stateVariable": false,

View File

@ -23,6 +23,7 @@
4
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,17 +35,20 @@
{
"id": 1,
"name": "A",
"nameLocation": "22:1:1",
"nodeType": "EnumValue",
"src": "22:1:1"
},
{
"id": 2,
"name": "B",
"nameLocation": "25:1:1",
"nodeType": "EnumValue",
"src": "25:1:1"
}
],
"name": "E",
"nameLocation": "18:1:1",
"nodeType": "EnumDefinition",
"src": "13:15:1"
}

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 4,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -21,17 +22,20 @@
{
"id": 1,
"name": "A",
"nameLocation": "22:1:1",
"nodeType": "EnumValue",
"src": "22:1:1"
},
{
"id": 2,
"name": "B",
"nameLocation": "25:1:1",
"nodeType": "EnumValue",
"src": "25:1:1"
}
],
"name": "E",
"nameLocation": "18:1:1",
"nodeType": "EnumDefinition",
"src": "13:15:1"
}

View File

@ -23,6 +23,7 @@
3
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -30,6 +31,7 @@
"anonymous": false,
"id": 2,
"name": "E",
"nameLocation": "19:1:1",
"nodeType": "EventDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 3,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -18,6 +19,7 @@
"anonymous": false,
"id": 2,
"name": "E",
"nameLocation": "19:1:1",
"nodeType": "EventDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
5
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -39,6 +40,7 @@
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
9
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -39,6 +40,7 @@
"kind": "receive",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -73,6 +75,7 @@
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 9,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "receive",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -60,6 +62,7 @@
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
5
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -39,6 +40,7 @@
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "fallback",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
17
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -40,6 +41,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -52,6 +54,7 @@
"id": 6,
"mutability": "mutable",
"name": "x",
"nameLocation": "67:1:1",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "24:44:1",
@ -84,6 +87,7 @@
"id": 3,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 5,
"src": "61:4:1",
@ -136,6 +140,7 @@
"id": 13,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 16,
"src": "79:40:1",
@ -168,6 +173,7 @@
"id": 10,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 12,
"src": "113:4:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 17,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -39,6 +41,7 @@
"id": 6,
"mutability": "mutable",
"name": "x",
"nameLocation": "67:1:1",
"nodeType": "VariableDeclaration",
"src": "24:44:1",
"stateVariable": false,
@ -66,6 +69,7 @@
"id": 3,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"src": "61:4:1",
"stateVariable": false,
@ -105,6 +109,7 @@
"id": 13,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"src": "79:40:1",
"stateVariable": false,
@ -132,6 +137,7 @@
"id": 10,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"src": "113:4:1",
"stateVariable": false,

View File

@ -19,11 +19,13 @@
{
"id": 1,
"name": "A",
"nameLocation": "9:1:1",
"nodeType": "EnumValue",
"src": "9:1:1"
}
],
"name": "E",
"nameLocation": "5:1:1",
"nodeType": "EnumDefinition",
"src": "0:12:1"
}

View File

@ -11,11 +11,13 @@
{
"id": 1,
"name": "A",
"nameLocation": "9:1:1",
"nodeType": "EnumValue",
"src": "9:1:1"
}
],
"name": "E",
"nameLocation": "5:1:1",
"nodeType": "EnumDefinition",
"src": "0:12:1"
}

View File

@ -21,6 +21,7 @@
"id": 2,
"mutability": "mutable",
"name": "a",
"nameLocation": "19:1:1",
"nodeType": "VariableDeclaration",
"scope": 3,
"src": "11:9:1",
@ -47,6 +48,7 @@
}
],
"name": "S",
"nameLocation": "7:1:1",
"nodeType": "StructDefinition",
"scope": 4,
"src": "0:23:1",

View File

@ -13,6 +13,7 @@
"id": 2,
"mutability": "mutable",
"name": "a",
"nameLocation": "19:1:1",
"nodeType": "VariableDeclaration",
"src": "11:9:1",
"stateVariable": false,
@ -30,6 +31,7 @@
}
],
"name": "S",
"nameLocation": "7:1:1",
"nodeType": "StructDefinition",
"src": "0:23:1",
"visibility": "public"

View File

@ -27,6 +27,7 @@
1
],
"name": "C1",
"nameLocation": "9:2:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 5,
@ -63,6 +64,7 @@
1
],
"name": "C2",
"nameLocation": "24:2:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 5,

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 1,
"name": "C1",
"nameLocation": "9:2:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "0:14:1"
@ -36,6 +37,7 @@
"contractKind": "contract",
"id": 4,
"name": "C2",
"nameLocation": "24:2:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "15:20:1"

View File

@ -24,6 +24,7 @@
1
],
"name": "C",
"nameLocation": "45:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 2,

View File

@ -12,6 +12,7 @@
"contractKind": "contract",
"id": 1,
"name": "C",
"nameLocation": "45:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "36:13:1"

View File

@ -23,6 +23,7 @@
11
],
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -46,6 +47,7 @@
"id": 4,
"mutability": "mutable",
"name": "a",
"nameLocation": "40:1:1",
"nodeType": "VariableDeclaration",
"scope": 9,
"src": "35:6:1",
@ -140,6 +142,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 11,
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,6 +35,7 @@
"id": 4,
"mutability": "mutable",
"name": "a",
"nameLocation": "40:1:1",
"nodeType": "VariableDeclaration",
"src": "35:6:1",
"stateVariable": false,
@ -90,6 +92,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
15
],
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -31,6 +32,7 @@
"id": 3,
"mutability": "mutable",
"name": "a",
"nameLocation": "20:1:1",
"nodeType": "VariableDeclaration",
"scope": 15,
"src": "13:8:1",
@ -86,6 +88,7 @@
"id": 10,
"mutability": "mutable",
"name": "b",
"nameLocation": "60:1:1",
"nodeType": "VariableDeclaration",
"scope": 13,
"src": "45:16:1",
@ -148,6 +151,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "32:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 15,
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -19,6 +20,7 @@
"id": 3,
"mutability": "mutable",
"name": "a",
"nameLocation": "20:1:1",
"nodeType": "VariableDeclaration",
"src": "13:8:1",
"stateVariable": false,
@ -61,6 +63,7 @@
"id": 10,
"mutability": "mutable",
"name": "b",
"nameLocation": "60:1:1",
"nodeType": "VariableDeclaration",
"src": "45:16:1",
"stateVariable": false,
@ -104,6 +107,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "32:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
19
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,23 +35,27 @@
{
"id": 1,
"name": "A",
"nameLocation": "26:1:1",
"nodeType": "EnumValue",
"src": "26:1:1"
},
{
"id": 2,
"name": "B",
"nameLocation": "29:1:1",
"nodeType": "EnumValue",
"src": "29:1:1"
},
{
"id": 3,
"name": "C",
"nameLocation": "32:1:1",
"nodeType": "EnumValue",
"src": "32:1:1"
}
],
"name": "E",
"nameLocation": "22:1:1",
"nodeType": "EnumDefinition",
"src": "17:18:1"
},
@ -59,6 +64,7 @@
"id": 9,
"mutability": "mutable",
"name": "a",
"nameLocation": "59:1:1",
"nodeType": "VariableDeclaration",
"scope": 19,
"src": "40:20:1",
@ -119,6 +125,7 @@
"id": 13,
"mutability": "mutable",
"name": "b",
"nameLocation": "91:1:1",
"nodeType": "VariableDeclaration",
"scope": 19,
"src": "66:26:1",
@ -171,6 +178,7 @@
"id": 18,
"mutability": "mutable",
"name": "c",
"nameLocation": "117:1:1",
"nodeType": "VariableDeclaration",
"scope": 19,
"src": "98:20:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 19,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -21,23 +22,27 @@
{
"id": 1,
"name": "A",
"nameLocation": "26:1:1",
"nodeType": "EnumValue",
"src": "26:1:1"
},
{
"id": 2,
"name": "B",
"nameLocation": "29:1:1",
"nodeType": "EnumValue",
"src": "29:1:1"
},
{
"id": 3,
"name": "C",
"nameLocation": "32:1:1",
"nodeType": "EnumValue",
"src": "32:1:1"
}
],
"name": "E",
"nameLocation": "22:1:1",
"nodeType": "EnumDefinition",
"src": "17:18:1"
},
@ -46,6 +51,7 @@
"id": 9,
"mutability": "mutable",
"name": "a",
"nameLocation": "59:1:1",
"nodeType": "VariableDeclaration",
"src": "40:20:1",
"stateVariable": false,
@ -87,6 +93,7 @@
"id": 13,
"mutability": "mutable",
"name": "b",
"nameLocation": "91:1:1",
"nodeType": "VariableDeclaration",
"src": "66:26:1",
"stateVariable": false,
@ -122,6 +129,7 @@
"id": 18,
"mutability": "mutable",
"name": "c",
"nameLocation": "117:1:1",
"nodeType": "VariableDeclaration",
"src": "98:20:1",
"stateVariable": false,

View File

@ -23,6 +23,7 @@
14
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -43,6 +44,7 @@
},
"id": 6,
"name": "M",
"nameLocation": "22:1:1",
"nodeType": "ModifierDefinition",
"parameters":
{
@ -55,6 +57,7 @@
"id": 2,
"mutability": "mutable",
"name": "i",
"nameLocation": "29:1:1",
"nodeType": "VariableDeclaration",
"scope": 6,
"src": "24:6:1",
@ -135,6 +138,7 @@
}
],
"name": "F",
"nameLocation": "48:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 14,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -31,6 +32,7 @@
},
"id": 6,
"name": "M",
"nameLocation": "22:1:1",
"nodeType": "ModifierDefinition",
"parameters":
{
@ -43,6 +45,7 @@
"id": 2,
"mutability": "mutable",
"name": "i",
"nameLocation": "29:1:1",
"nodeType": "VariableDeclaration",
"src": "24:6:1",
"stateVariable": false,
@ -104,6 +107,7 @@
}
],
"name": "F",
"nameLocation": "48:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
14
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -43,6 +44,7 @@
},
"id": 6,
"name": "M",
"nameLocation": "22:1:1",
"nodeType": "ModifierDefinition",
"parameters":
{
@ -55,6 +57,7 @@
"id": 2,
"mutability": "mutable",
"name": "i",
"nameLocation": "29:1:1",
"nodeType": "VariableDeclaration",
"scope": 6,
"src": "24:6:1",
@ -135,6 +138,7 @@
}
],
"name": "F",
"nameLocation": "48:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 14,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -31,6 +32,7 @@
},
"id": 6,
"name": "M",
"nameLocation": "22:1:1",
"nodeType": "ModifierDefinition",
"parameters":
{
@ -43,6 +45,7 @@
"id": 2,
"mutability": "mutable",
"name": "i",
"nameLocation": "29:1:1",
"nodeType": "VariableDeclaration",
"src": "24:6:1",
"stateVariable": false,
@ -104,6 +107,7 @@
}
],
"name": "F",
"nameLocation": "48:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
10
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -32,6 +33,7 @@
"id": 3,
"mutability": "immutable",
"name": "a",
"nameLocation": "39:1:1",
"nodeType": "VariableDeclaration",
"scope": 10,
"src": "17:27:1",
@ -80,6 +82,7 @@
"id": 6,
"mutability": "constant",
"name": "b",
"nameLocation": "71:1:1",
"nodeType": "VariableDeclaration",
"scope": 10,
"src": "50:26:1",
@ -128,6 +131,7 @@
"id": 9,
"mutability": "mutable",
"name": "c",
"nameLocation": "94:1:1",
"nodeType": "VariableDeclaration",
"scope": 10,
"src": "82:17:1",

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 10,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -19,6 +20,7 @@
"id": 3,
"mutability": "immutable",
"name": "a",
"nameLocation": "39:1:1",
"nodeType": "VariableDeclaration",
"src": "17:27:1",
"stateVariable": false,
@ -49,6 +51,7 @@
"id": 6,
"mutability": "constant",
"name": "b",
"nameLocation": "71:1:1",
"nodeType": "VariableDeclaration",
"src": "50:26:1",
"stateVariable": false,
@ -79,6 +82,7 @@
"id": 9,
"mutability": "mutable",
"name": "c",
"nameLocation": "94:1:1",
"nodeType": "VariableDeclaration",
"src": "82:17:1",
"stateVariable": false,

View File

@ -23,6 +23,7 @@
9
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -46,6 +47,7 @@
"id": 4,
"mutability": "mutable",
"name": "x",
"nameLocation": "49:1:1",
"nodeType": "VariableDeclaration",
"scope": 7,
"src": "35:15:1",
@ -100,6 +102,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 9,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,6 +35,7 @@
"id": 4,
"mutability": "mutable",
"name": "x",
"nameLocation": "49:1:1",
"nodeType": "VariableDeclaration",
"src": "35:15:1",
"stateVariable": false,
@ -70,6 +72,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -7,6 +7,7 @@
{
"file": "notexisting.sol",
"id": 1,
"nameLocation": "28:11:1",
"nodeType": "ImportDirective",
"src": "0:40:1",
"symbolAliases": [],
@ -33,6 +34,7 @@
"contractKind": "contract",
"id": 11,
"name": "C",
"nameLocation": "50:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -41,6 +43,7 @@
"id": 6,
"mutability": "mutable",
"name": "myStruct",
"nameLocation": "102:8:1",
"nodeType": "VariableDeclaration",
"src": "72:38:1",
"stateVariable": false,
@ -75,6 +78,7 @@
"kind": "constructor",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -31,6 +31,7 @@
5
],
"name": "A",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -48,6 +49,7 @@
"kind": "function",
"modifiers": [],
"name": "faa",
"nameLocation": "23:3:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -104,6 +106,7 @@
5
],
"name": "B",
"nameLocation": "50:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -114,6 +117,7 @@
"kind": "function",
"modifiers": [],
"name": "foo",
"nameLocation": "69:3:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -153,6 +157,7 @@
"kind": "function",
"modifiers": [],
"name": "faa",
"nameLocation": "93:3:1",
"nodeType": "FunctionDefinition",
"overrides":
{
@ -218,6 +223,7 @@
5
],
"name": "C",
"nameLocation": "129:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -239,6 +245,7 @@
"kind": "function",
"modifiers": [],
"name": "foo",
"nameLocation": "148:3:1",
"nodeType": "FunctionDefinition",
"overrides":
{
@ -285,6 +292,7 @@
"kind": "function",
"modifiers": [],
"name": "faa",
"nameLocation": "184:3:1",
"nodeType": "FunctionDefinition",
"overrides":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "A",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "function",
"modifiers": [],
"name": "faa",
"nameLocation": "23:3:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -71,6 +73,7 @@
"contractKind": "contract",
"id": 16,
"name": "B",
"nameLocation": "50:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -80,6 +83,7 @@
"kind": "function",
"modifiers": [],
"name": "foo",
"nameLocation": "69:3:1",
"nodeType": "FunctionDefinition",
"parameters":
{
@ -113,6 +117,7 @@
"kind": "function",
"modifiers": [],
"name": "faa",
"nameLocation": "93:3:1",
"nodeType": "FunctionDefinition",
"overrides":
{
@ -164,6 +169,7 @@
"contractKind": "contract",
"id": 31,
"name": "C",
"nameLocation": "129:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -180,6 +186,7 @@
"kind": "function",
"modifiers": [],
"name": "foo",
"nameLocation": "148:3:1",
"nodeType": "FunctionDefinition",
"overrides":
{
@ -220,6 +227,7 @@
"kind": "function",
"modifiers": [],
"name": "faa",
"nameLocation": "184:3:1",
"nodeType": "FunctionDefinition",
"overrides":
{

View File

@ -23,6 +23,7 @@
5
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -43,6 +44,7 @@
},
"id": 4,
"name": "M",
"nameLocation": "22:1:1",
"nodeType": "ModifierDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -31,6 +32,7 @@
},
"id": 4,
"name": "M",
"nameLocation": "22:1:1",
"nodeType": "ModifierDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
5
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -39,6 +40,7 @@
"kind": "receive",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 5,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -27,6 +28,7 @@
"kind": "receive",
"modifiers": [],
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
11
],
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -46,6 +47,7 @@
"id": 7,
"mutability": "mutable",
"name": "x",
"nameLocation": "49:1:1",
"nodeType": "VariableDeclaration",
"scope": 9,
"src": "35:15:1",
@ -94,6 +96,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 11,
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,6 +35,7 @@
"id": 7,
"mutability": "mutable",
"name": "x",
"nameLocation": "49:1:1",
"nodeType": "VariableDeclaration",
"src": "35:15:1",
"stateVariable": false,
@ -68,6 +70,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
12
],
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -46,6 +47,7 @@
"id": 8,
"mutability": "mutable",
"name": "rows",
"nameLocation": "51:4:1",
"nodeType": "VariableDeclaration",
"scope": 10,
"src": "35:20:1",
@ -105,6 +107,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 12,
"name": "c",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes":
[
@ -34,6 +35,7 @@
"id": 8,
"mutability": "mutable",
"name": "rows",
"nameLocation": "51:4:1",
"nodeType": "VariableDeclaration",
"src": "35:20:1",
"stateVariable": false,
@ -75,6 +77,7 @@
"kind": "function",
"modifiers": [],
"name": "f",
"nameLocation": "22:1:1",
"nodeType": "FunctionDefinition",
"parameters":
{

View File

@ -23,6 +23,7 @@
1
],
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"scope": 2,

View File

@ -11,6 +11,7 @@
"contractKind": "contract",
"id": 1,
"name": "C",
"nameLocation": "9:1:1",
"nodeType": "ContractDefinition",
"nodes": [],
"src": "0:13:1"

Some files were not shown because too many files have changed in this diff Show More