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

Function ParseModifiers

Source/SpireCore/Parser.cpp:527–649  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

525 }
526
527 static Modifiers ParseModifiers(Parser* parser)
528 {
529 Modifiers modifiers;
530 RefPtr<Modifier>* modifierLink = &modifiers.first;
531 for (;;)
532 {
533 if (AdvanceIf(parser, "in"))
534 {
535 modifiers.flags |= ModifierFlag::In;
536 }
537 else if (AdvanceIf(parser, "input"))
538 {
539 modifiers.flags |= ModifierFlag::Input;
540 }
541 else if (AdvanceIf(parser, "out"))
542 {
543 modifiers.flags |= ModifierFlag::Out;
544 }
545 else if (AdvanceIf(parser, "uniform"))
546 {
547 modifiers.flags |= ModifierFlag::Uniform;
548 }
549 else if (AdvanceIf(parser, "const"))
550 {
551 modifiers.flags |= ModifierFlag::Const;
552 }
553 else if (AdvanceIf(parser, "instance"))
554 {
555 modifiers.flags |= ModifierFlag::Instance;
556 }
557 else if (AdvanceIf(parser, "__builtin"))
558 {
559 modifiers.flags |= ModifierFlag::Builtin;
560 }
561 else if (AdvanceIf(parser, "layout"))
562 {
563 parser->ReadToken(TokenType::LParent);
564 StringBuilder layoutSB;
565 while (!AdvanceIfMatch(parser, TokenType::RParent))
566 {
567 layoutSB.Append(parser->ReadToken(TokenType::Identifier).Content);
568 if (parser->LookAheadToken(TokenType::OpAssign))
569 {
570 layoutSB.Append(parser->ReadToken(TokenType::OpAssign).Content);
571 layoutSB.Append(parser->ReadToken(TokenType::IntLiterial).Content);
572 }
573 if (AdvanceIf(parser, TokenType::RParent))
574 break;
575 parser->ReadToken(TokenType::Comma);
576 layoutSB.Append(", ");
577 }
578
579 RefPtr<LayoutModifier> modifier = new LayoutModifier();
580 modifier->LayoutString = layoutSB.ProduceString();
581
582 *modifierLink = modifier;
583 modifierLink = &modifier->next;
584 }

Callers 4

ParseDeclFunction · 0.85
ParseWorldMethod · 0.85
ParseFunctionMethod · 0.85
ParseParameterMethod · 0.85

Calls 8

AdvanceIfFunction · 0.85
AdvanceIfMatchFunction · 0.85
AppendMethod · 0.80
ProduceStringMethod · 0.80
ParseExpressionMethod · 0.80
ReadTokenMethod · 0.45
LookAheadTokenMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected