}
-func (P *Parser) ParseGoStat() *AST.Stat {
- P.Trace("GoStat");
+func (P *Parser) ParseInvocationStat(keyword int) *AST.Stat {
+ P.Trace("InvocationStat");
- s := AST.NewStat(P.pos, Scanner.GO);
- P.Expect(Scanner.GO);
+ s := AST.NewStat(P.pos, keyword);
+ P.Expect(keyword);
s.Expr = P.ParseExpression(1);
P.Ecart();
Scanner.LBRACK, Scanner.STRUCT, // composite type
Scanner.MUL, Scanner.AND, Scanner.ARROW: // unary
s = P.ParseSimpleStat(false);
- case Scanner.GO:
- s = P.ParseGoStat();
+ case Scanner.GO, Scanner.DEFER:
+ s = P.ParseInvocationStat(P.tok);
case Scanner.RETURN:
s = P.ParseReturnStat();
case Scanner.BREAK, Scanner.CONTINUE, Scanner.GOTO, Scanner.FALLTHROUGH:
P.indentation--;
P.newlines = 1;
- case Scanner.GO, Scanner.RETURN, Scanner.FALLTHROUGH, Scanner.BREAK, Scanner.CONTINUE, Scanner.GOTO:
+ case
+ Scanner.GO, Scanner.DEFER, Scanner.RETURN, Scanner.FALLTHROUGH,
+ Scanner.BREAK, Scanner.CONTINUE, Scanner.GOTO:
P.Token(s.Pos, s.Tok);
if s.Expr != nil {
P.separator = blank;
CONTINUE;
DEFAULT;
+ DEFER;
ELSE;
FALLTHROUGH;
FOR;
case CONTINUE: return "continue";
case DEFAULT: return "default";
+ case DEFER: return "defer";
case ELSE: return "else";
case FALLTHROUGH: return "fallthrough";
case FOR: return "for";
# the following have semantic errors: bug039.go | bug040.go
method1.go | selftest1.go | func3.go | \
bug014.go | bug025.go | bug029.go | bug032.go | bug039.go | bug040.go | bug050.go | bug068.go | \
- bug088.go | bug083.go | bug106.go | bug125.go | bug126.go | bug132.go ) ;;
+ bug088.go | bug083.go | bug106.go | bug125.go | bug126.go | bug132.go | bug133.go ) ;;
* ) $1 $2; count $F;;
esac
}