()
| 602 | } |
| 603 | |
| 604 | func (p *parser) statement() { |
| 605 | line := p.lineNumber |
| 606 | p.enterLevel() |
| 607 | switch p.t { |
| 608 | case ';': |
| 609 | p.next() |
| 610 | case tkIf: |
| 611 | p.ifStatement(line) |
| 612 | case tkWhile: |
| 613 | p.whileStatement(line) |
| 614 | case tkDo: |
| 615 | p.next() |
| 616 | p.block() |
| 617 | p.checkMatch(tkEnd, tkDo, line) |
| 618 | case tkFor: |
| 619 | p.forStatement(line) |
| 620 | case tkRepeat: |
| 621 | p.repeatStatement(line) |
| 622 | case tkFunction: |
| 623 | p.functionStatement(line) |
| 624 | case tkLocal: |
| 625 | p.next() |
| 626 | if p.testNext(tkFunction) { |
| 627 | p.localFunction() |
| 628 | } else { |
| 629 | p.localStatement() |
| 630 | } |
| 631 | case tkDoubleColon: |
| 632 | p.next() |
| 633 | p.labelStatement(p.checkName(), line) |
| 634 | case tkReturn: |
| 635 | p.next() |
| 636 | p.returnStatement() |
| 637 | case tkBreak, tkGoto: |
| 638 | p.gotoStatement(p.function.Jump()) |
| 639 | default: |
| 640 | p.expressionStatement() |
| 641 | } |
| 642 | p.assert(p.function.f.maxStackSize >= p.function.freeRegisterCount && p.function.freeRegisterCount >= p.function.activeVariableCount) |
| 643 | p.function.freeRegisterCount = p.function.activeVariableCount |
| 644 | p.leaveLevel() |
| 645 | } |
| 646 | |
| 647 | func (p *parser) mainFunction() { |
| 648 | p.function.OpenMainFunction() |
no test coverage detected