MCPcopy Create free account
hub / github.com/csyonghe/Spire / ParseImportOperator

Method ParseImportOperator

Source/SpireCore/Parser.cpp:1210–1252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1208 }
1209
1210 RefPtr<ImportOperatorDefSyntaxNode> Parser::ParseImportOperator()
1211 {
1212 RefPtr<ImportOperatorDefSyntaxNode> op = new ImportOperatorDefSyntaxNode();
1213 PushScope(op.Ptr());
1214 FillPosition(op.Ptr());
1215 ReadToken("import");
1216 ReadToken(TokenType::LParent);
1217 op->SourceWorld = ReadToken(TokenType::Identifier);
1218 ReadToken(TokenType::RightArrow);
1219 op->DestWorld = ReadToken(TokenType::Identifier);
1220 ReadToken(TokenType::RParent);
1221 FillPosition(op.Ptr());
1222 op->Name = ReadToken(TokenType::Identifier);
1223 if (LookAheadToken(TokenType::OpLess))
1224 {
1225 ReadToken(TokenType::OpLess);
1226 op->TypeName = ReadToken(TokenType::Identifier);
1227 ReadToken(TokenType::OpGreater);
1228 }
1229 else
1230 {
1231 op->TypeName.Position = op->Name.Position;
1232 op->TypeName.Content = "TComponentType";
1233 }
1234 ReadToken(TokenType::LParent);
1235 while (!AdvanceIf(this, TokenType::RParent))
1236 {
1237 op->Members.Add(ParseParameter());
1238 if (AdvanceIf(this, TokenType::RParent))
1239 break;
1240 ReadToken(TokenType::Comma);
1241 }
1242 while (LookAheadToken("require"))
1243 {
1244 ReadToken("require");
1245 op->Requirements.Add(ParseFunction(false));
1246 }
1247 isInImportOperator = true;
1248 op->Body = ParseBlockStatement();
1249 isInImportOperator = false;
1250 PopScope();
1251 return op;
1252 }
1253
1254 // TODO(tfoley): this definition is now largely redundant (only
1255 // used to parse requirements for import operators)

Callers 1

ParseDeclWithModifiersFunction · 0.80

Calls 4

ReadTokenFunction · 0.85
AdvanceIfFunction · 0.85
PtrMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected