MCPcopy Create free account
hub / github.com/adhocteam/pushup / parseIfStmt

Method parseIfStmt

parser.go:765–813  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

763}
764
765func (p *codeParser) parseIfStmt() *nodeIf {
766 var stmt nodeIf
767 start := p.peek().pos
768 maxread := start
769 lastlit := p.peek().String()
770loop:
771 for {
772 switch p.peek().tok {
773 case token.EOF:
774 p.errorf("premature end of conditional in IF statement")
775 case token.LBRACE:
776 // conditional expression has been scanned
777 break loop
778 // TODO(paulsmith): add cases for tokens that are illegal in an expression
779 }
780 maxread = p.peek().pos
781 lastlit = p.peek().String()
782 p.advance()
783 }
784 n := (p.file.Offset(maxread) - p.file.Offset(start)) + len(lastlit)
785 offset := p.baseOffset + p.file.Offset(start)
786 stmt.cond = new(nodeGoStrExpr)
787 stmt.cond.pos.start = offset
788 stmt.cond.pos.end = offset + n
789 stmt.cond.expr = p.sourceFrom(start)[:n]
790 if _, err := goparser.ParseExpr(stmt.cond.expr); err != nil {
791 p.errorf("parsing Go expression in IF conditional: %w", err)
792 }
793 stmt.then = p.parseStmtBlock()
794 // parse ^else clause
795 if p.peek().tok == token.XOR {
796 p.advance()
797 if p.peek().tok == token.ELSE {
798 p.advance()
799 if p.peek().tok == token.XOR {
800 p.advance()
801 if p.peek().tok == token.IF {
802 p.advance()
803 stmt.alt = p.parseIfStmt()
804 } else {
805 p.errorf("expected `if' after transition character, got %v", p.peek().String())
806 }
807 } else {
808 stmt.alt = p.parseStmtBlock()
809 }
810 }
811 }
812 return &stmt
813}
814
815func (p *codeParser) parseForStmt() *nodeFor {
816 var stmt nodeFor

Callers 1

parseCodeMethod · 0.95

Calls 6

peekMethod · 0.95
errorfMethod · 0.95
advanceMethod · 0.95
sourceFromMethod · 0.95
parseStmtBlockMethod · 0.95
StringMethod · 0.45

Tested by

no test coverage detected