Project

General

Profile

Feature #11371 ยป 0001-parse.y-struct-parser_params-pack-to-four-cache-line.patch

normalperson (Eric Wong), 07/18/2015 07:17 AM

View differences:

parse.y
NODE *heap;
YYSTYPE *parser_yylval;
VALUE eofp;
NODE *parser_lex_strterm;
stack_type parser_cond_stack;
......
enum lex_state_e parser_lex_state;
int parser_paren_nest;
int parser_lpar_beg;
int parser_in_single;
int parser_in_def;
int parser_in_single; /* counter */
int parser_in_def; /* counter */
int parser_brace_nest;
int parser_compile_for_eval;
int parser_in_kwarg;
int parser_in_defined;
int parser_tokidx;
int parser_toksiz;
int parser_tokline;
int parser_heredoc_end;
char *parser_tokenbuf;
VALUE parser_lex_input;
VALUE parser_lex_lastline;
......
const char *parser_lex_pbeg;
const char *parser_lex_p;
const char *parser_lex_pend;
int parser_heredoc_end;
int parser_command_start;
NODE *parser_deferred_nodes;
long parser_lex_gets_ptr;
VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
......
int last_cr_line;
unsigned int parser_command_start:1;
unsigned int eofp: 1;
unsigned int parser_ruby__end__seen: 1;
unsigned int parser_yydebug: 1;
unsigned int has_shebang: 1;
unsigned int parser_in_defined: 1;
unsigned int parser_compile_for_eval: 1;
unsigned int parser_in_kwarg: 1;
#ifndef RIPPER
/* Ruby core only */
......
# if WARN_PAST_SCOPE
unsigned int parser_past_scope_enabled: 1;
# endif
int nerr;
unsigned int has_err: 1;
NODE *parser_eval_tree_begin;
NODE *parser_eval_tree;
......
# define PARSER_ARG parser,
#else
# define rb_compile_error rb_compile_error_with_enc
# define compile_error parser->nerr++,rb_compile_error_with_enc
# define compile_error (parser->has_err = 1),rb_compile_error_with_enc
# define PARSER_ARG ruby_sourcefile, ruby_sourceline, (void *)current_enc,
#endif
......
}
f_args term
{
parser->parser_in_kwarg = $<num>1;
parser->parser_in_kwarg = !!$<num>1;
$$ = $2;
lex_state = EXPR_BEG;
command_start = TRUE;
......
lex_strterm = 0;
lex_p = lex_pbeg = lex_pend = 0;
lex_lastline = lex_nextline = 0;
if (parser->nerr) {
if (parser->has_err) {
return 0;
}
tree = ruby_eval_tree;
......
lex_gets_ptr = 0;
lex_input = rb_str_new_frozen(s);
lex_pbeg = lex_p = lex_pend = 0;
compile_for_eval = rb_parse_in_eval();
compile_for_eval = !!rb_parse_in_eval();
node = yycompile(parser, fname, line);
RB_GC_GUARD(vparser); /* prohibit tail call optimization */
......
lex_gets = lex_io_gets;
lex_input = file;
lex_pbeg = lex_p = lex_pend = 0;
compile_for_eval = rb_parse_in_eval();
compile_for_eval = !!rb_parse_in_eval();
node = yycompile(parser, fname, start);
RB_GC_GUARD(vparser); /* prohibit tail call optimization */
......
return -1;
if (!lex_input || NIL_P(v = lex_getline(parser))) {
parser->eofp = Qtrue;
parser->eofp = 1;
lex_goto_eol(parser);
return -1;
}
......
case '_':
if (was_bol() && whole_match_p("__END__", 7, 0)) {
ruby__end__seen = 1;
parser->eofp = Qtrue;
parser->eofp = 1;
#ifndef RIPPER
return -1;
#else
......
static void
parser_initialize(struct parser_params *parser)
{
parser->eofp = Qfalse;
parser->eofp = 0;
parser->parser_lex_strterm = 0;
parser->parser_cond_stack = 0;
......
parser->parser_brace_nest = 0;
parser->parser_in_single = 0;
parser->parser_in_def = 0;
parser->parser_in_defined = 0;
parser->parser_in_kwarg = 0;
parser->parser_compile_for_eval = 0;
parser->parser_tokenbuf = NULL;
-
    (1-1/1)