MCPcopy Create free account
hub / github.com/argotorg/solidity / tryParseSourceNameMapping

Method tryParseSourceNameMapping

libyul/ObjectParser.cpp:123–175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

121}
122
123std::optional<SourceNameMap> ObjectParser::tryParseSourceNameMapping() const
124{
125 // @use-src 0:"abc.sol", 1:"foo.sol", 2:"bar.sol"
126 //
127 // UseSrcList := UseSrc (',' UseSrc)*
128 // UseSrc := [0-9]+ ':' FileName
129 // FileName := "(([^\"]|\.)*)"
130
131 // Matches some "@use-src TEXT".
132 static std::regex const lineRE = std::regex(
133 "(^|\\s)@use-src\\b",
134 std::regex_constants::ECMAScript | std::regex_constants::optimize
135 );
136 std::smatch sm;
137 if (!std::regex_search(m_scanner->currentCommentLiteral(), sm, lineRE))
138 return std::nullopt;
139
140 solAssert(sm.size() == 2, "");
141 auto text = m_scanner->currentCommentLiteral().substr(static_cast<size_t>(sm.position() + sm.length()));
142 CharStream charStream(text, "");
143 Scanner scanner(charStream);
144 if (scanner.currentToken() == Token::EOS)
145 return SourceNameMap{};
146 SourceNameMap sourceNames;
147
148 while (scanner.currentToken() != Token::EOS)
149 {
150 if (scanner.currentToken() != Token::Number)
151 break;
152 auto sourceIndex = toUnsignedInt(scanner.currentLiteral());
153 if (!sourceIndex)
154 break;
155 if (scanner.next() != Token::Colon)
156 break;
157 if (scanner.next() != Token::StringLiteral)
158 break;
159 sourceNames[*sourceIndex] = std::make_shared<std::string const>(scanner.currentLiteral());
160
161 Token const next = scanner.next();
162 if (next == Token::EOS)
163 return {std::move(sourceNames)};
164 if (next != Token::Comma)
165 break;
166 scanner.next();
167 }
168
169 m_errorReporter.syntaxError(
170 9804_error,
171 m_scanner->currentCommentLocation(),
172 "Error parsing arguments to @use-src. Expected: <number> \":\" \"<filename>\", ..."
173 );
174 return std::nullopt;
175}
176
177std::shared_ptr<AST> ObjectParser::parseBlock(std::optional<SourceNameMap> _sourceNames)
178{

Callers

nothing calls this directly

Calls 10

toUnsignedIntFunction · 0.85
currentCommentLiteralMethod · 0.80
sizeMethod · 0.45
positionMethod · 0.45
lengthMethod · 0.45
currentTokenMethod · 0.45
currentLiteralMethod · 0.45
nextMethod · 0.45
syntaxErrorMethod · 0.45

Tested by

no test coverage detected