mirror of
https://github.com/golang/go
synced 2024-11-22 00:24:41 -07:00
parent
17f90c68c6
commit
691d765121
@ -914,6 +914,8 @@ char* lexname(int lex);
|
||||
void mkpackage(char* pkgname);
|
||||
void unimportfile(void);
|
||||
int32 yylex(void);
|
||||
extern int yylast;
|
||||
extern int yyprev;
|
||||
|
||||
/*
|
||||
* mparith1.c
|
||||
|
@ -515,10 +515,33 @@ switch_body:
|
||||
}
|
||||
|
||||
caseblock:
|
||||
case stmt_list
|
||||
case
|
||||
{
|
||||
// If the last token read by the lexer was consumed
|
||||
// as part of the case, clear it (parser has cleared yychar).
|
||||
// If the last token read by the lexer was the lookahead
|
||||
// leave it alone (parser has it cached in yychar).
|
||||
// This is so that the stmt_list action doesn't look at
|
||||
// the case tokens if the stmt_list is empty.
|
||||
yylast = yychar;
|
||||
}
|
||||
stmt_list
|
||||
{
|
||||
int last;
|
||||
|
||||
// This is the only place in the language where a statement
|
||||
// list is not allowed to drop the final semicolon, because
|
||||
// it's the only place where a statement list is not followed
|
||||
// by a closing brace. Handle the error for pedantry.
|
||||
|
||||
// Find the final token of the statement list.
|
||||
// yylast is lookahead; yyprev is last of stmt_list
|
||||
last = yyprev;
|
||||
|
||||
if(last > 0 && last != ';' && yychar != '}')
|
||||
yyerror("missing statement after label");
|
||||
$$ = $1;
|
||||
$$->nbody = $2;
|
||||
$$->nbody = $3;
|
||||
}
|
||||
|
||||
caseblock_list:
|
||||
|
@ -14,6 +14,8 @@
|
||||
|
||||
extern int yychar;
|
||||
int windows;
|
||||
int yyprev;
|
||||
int yylast;
|
||||
|
||||
static void lexinit(void);
|
||||
static void lexfini(void);
|
||||
@ -1140,6 +1142,10 @@ yylex(void)
|
||||
curio.nlsemi = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// Track last two tokens returned by yylex.
|
||||
yyprev = yylast;
|
||||
yylast = lx;
|
||||
return lx;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user