mirror of
https://github.com/golang/go
synced 2024-11-25 03:07:56 -07:00
parent
17f90c68c6
commit
691d765121
@ -914,6 +914,8 @@ char* lexname(int lex);
|
|||||||
void mkpackage(char* pkgname);
|
void mkpackage(char* pkgname);
|
||||||
void unimportfile(void);
|
void unimportfile(void);
|
||||||
int32 yylex(void);
|
int32 yylex(void);
|
||||||
|
extern int yylast;
|
||||||
|
extern int yyprev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mparith1.c
|
* mparith1.c
|
||||||
|
@ -515,10 +515,33 @@ switch_body:
|
|||||||
}
|
}
|
||||||
|
|
||||||
caseblock:
|
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;
|
$$ = $1;
|
||||||
$$->nbody = $2;
|
$$->nbody = $3;
|
||||||
}
|
}
|
||||||
|
|
||||||
caseblock_list:
|
caseblock_list:
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
extern int yychar;
|
extern int yychar;
|
||||||
int windows;
|
int windows;
|
||||||
|
int yyprev;
|
||||||
|
int yylast;
|
||||||
|
|
||||||
static void lexinit(void);
|
static void lexinit(void);
|
||||||
static void lexfini(void);
|
static void lexfini(void);
|
||||||
@ -1140,6 +1142,10 @@ yylex(void)
|
|||||||
curio.nlsemi = 0;
|
curio.nlsemi = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Track last two tokens returned by yylex.
|
||||||
|
yyprev = yylast;
|
||||||
|
yylast = lx;
|
||||||
return lx;
|
return lx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user