1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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