* parse.y (struct parser_params): fields common to ripper must be

placed at each same offset.

* parse.y (NEWHEAP, ADD2HEAP): set count after pointer was set.
  fixed: [ruby-dev:27896]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2005-11-30 14:52:30 +00:00
parent 1717014d72
commit 2267384c1b
2 changed files with 371 additions and 355 deletions

View File

@ -1,3 +1,11 @@
Wed Nov 30 23:52:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (struct parser_params): fields common to ripper must be
placed at each same offset.
* parse.y (NEWHEAP, ADD2HEAP): set count after pointer was set.
fixed: [ruby-dev:27896]
Wed Nov 30 13:43:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
* misc/ruby-mode.el (ruby-expr-beg): support $! at the end of

30
parse.y
View File

@ -160,6 +160,9 @@ struct parser_params {
VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
struct local_vars *parser_lvtbl;
int parser_ruby__end__seen;
int line_count;
int has_shebang;
#ifndef RIPPER
/* Ruby core only */
NODE *parser_eval_tree_begin;
@ -179,8 +182,6 @@ struct parser_params {
VALUE parsing_thread;
int toplevel_p;
#endif
int line_count;
int has_shebang;
};
#ifdef YYMALLOC
@ -4549,9 +4550,10 @@ yycompile(VALUE vparser, const char *f, int line)
int n;
struct RVarmap *vp, *vars = ruby_dyna_vars;
const char *kcode_save;
volatile VALUE parser_save = vparser;
volatile VALUE parser_save;
struct parser_params *parser;
*(&parser_save) = vparser;
Data_Get_Struct(vparser, struct parser_params, parser);
if (!compile_for_eval && rb_safe_level() == 0 &&
rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
@ -8764,23 +8766,28 @@ rb_parser_end_seen_p(VALUE vparser)
#ifdef YYMALLOC
#define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
#define NEWHEAP(cnt) rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parserp->heap, cnt)
#define ADD2HEAP(n, ptr) ((parserp->heap = (n))->u1.node = (ptr))
#define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parserp->heap, 0)
#define ADD2HEAP(n, c, p) ((parserp->heap = (n))->u1.node = (p), \
(n)->u3.cnt = (c), (p))
void *
rb_parser_malloc(struct parser_params *parserp, size_t size)
{
NODE *n = NEWHEAP(HEAPCNT(1, size));
size_t cnt = HEAPCNT(1, size);
NODE *n = NEWHEAP();
void *ptr = xmalloc(size);
return ADD2HEAP(n, xmalloc(size));
return ADD2HEAP(n, cnt, ptr);
}
void *
rb_parser_calloc(struct parser_params *parserp, size_t nelem, size_t size)
{
NODE *n = NEWHEAP(HEAPCNT(nelem, size));
size_t cnt = HEAPCNT(nelem, size);
NODE *n = NEWHEAP();
void *ptr = xcalloc(nelem, size);
return ADD2HEAP(n, xcalloc(nelem, size));
return ADD2HEAP(n, cnt, ptr);
}
void *
@ -8798,8 +8805,9 @@ rb_parser_realloc(struct parser_params *parserp, void *ptr, size_t size)
}
} while ((n = n->u2.node) != NULL);
}
n = NEWHEAP(cnt);
return ADD2HEAP(n, xrealloc(ptr, size));
n = NEWHEAP();
ptr = xrealloc(ptr, size);
return ADD2HEAP(n, cnt, ptr);
}
void