ruby-changes:12316
From: nobu <ko1@a...>
Date: Fri, 10 Jul 2009 07:23:25 +0900 (JST)
Subject: [ruby-changes:12316] Ruby:r24011 (trunk): * parse.y (parser_data_type): typed.
nobu 2009-07-10 07:22:33 +0900 (Fri, 10 Jul 2009) New Revision: 24011 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24011 Log: * parse.y (parser_data_type): typed. Modified files: trunk/ChangeLog trunk/parse.y Index: ChangeLog =================================================================== --- ChangeLog (revision 24010) +++ ChangeLog (revision 24011) @@ -1,3 +1,7 @@ +Fri Jul 10 07:22:29 2009 Nobuyoshi Nakada <nobu@r...> + + * parse.y (parser_data_type): typed. + Thu Jul 9 23:28:48 2009 NARUSE, Yui <naruse@r...> * include/ruby/io.h (FMODE_STRIP_BOM): new constant. Index: parse.y =================================================================== --- parse.y (revision 24010) +++ parse.y (revision 24011) @@ -5076,6 +5076,8 @@ return line; } +static const rb_data_type_t parser_data_type; + #ifndef RIPPER NODE* rb_compile_string(const char *f, VALUE s, int line) @@ -5092,7 +5094,7 @@ NODE *node; volatile VALUE tmp; - Data_Get_Struct(vparser, struct parser_params, parser); + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); lex_gets = lex_get_str; lex_gets_ptr = 0; lex_input = s; @@ -5138,7 +5140,7 @@ volatile VALUE tmp; NODE *node; - Data_Get_Struct(vparser, struct parser_params, parser); + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); lex_gets = lex_io_gets; lex_input = file; lex_pbeg = lex_p = lex_pend = 0; @@ -9040,7 +9042,7 @@ if (!node) return node; - Data_Get_Struct(vparser, struct parser_params, parser); + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); node = node->nd_body; @@ -9072,7 +9074,7 @@ if (!node) return node; - Data_Get_Struct(vparser, struct parser_params, parser); + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); node = node->nd_body; @@ -9716,6 +9718,34 @@ xfree(p); } +static size_t +parser_memsize(void *ptr) +{ + struct parser_params *p = (struct parser_params*)ptr; + struct local_vars *local; + size_t size = sizeof(*p); + + if (!ptr) return 0; + size += p->parser_toksiz; + for (local = p->parser_lvtbl; local; local = local->prev) { + size += sizeof(*local); + if (local->vars) size += local->vars->capa * sizeof(ID); + } +#ifndef RIPPER + if (p->parser_ruby_sourcefile) { + size += strlen(p->parser_ruby_sourcefile) + 1; + } +#endif + return size; +} + +static const rb_data_type_t parser_data_type = { + "parser", + parser_mark, + parser_free, + parser_memsize, +}; + VALUE rb_parser_get_yydebug(VALUE); VALUE rb_parser_set_yydebug(VALUE, VALUE); @@ -9744,7 +9774,7 @@ { struct parser_params *p = parser_new(); - return Data_Wrap_Struct(0, parser_mark, parser_free, p); + return TypedData_Wrap_Struct(0, &parser_data_type, p); } /* @@ -9759,7 +9789,7 @@ { struct parser_params *parser; - Data_Get_Struct(vparser, struct parser_params, parser); + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); return ruby__end__seen ? Qtrue : Qfalse; } @@ -9774,7 +9804,7 @@ { struct parser_params *parser; - Data_Get_Struct(vparser, struct parser_params, parser); + TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); return rb_enc_from_encoding(parser->enc); } @@ -9789,7 +9819,7 @@ { struct parser_params *parser; - Data_Get_Struct(self, struct parser_params, parser); + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); return yydebug ? Qtrue : Qfalse; } @@ -9804,7 +9834,7 @@ { struct parser_params *parser; - Data_Get_Struct(self, struct parser_params, parser); + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); yydebug = RTEST(flag); return flag; } @@ -10126,7 +10156,7 @@ p = ALLOC_N(struct parser_params, 1); MEMZERO(p, struct parser_params, 1); - self = Data_Wrap_Struct(klass, parser_mark, parser_free, p); + self = TypedData_Wrap_Struct(klass, &parser_data_type, p); p->value = self; return self; } @@ -10149,7 +10179,7 @@ struct parser_params *parser; VALUE src, fname, lineno; - Data_Get_Struct(self, struct parser_params, parser); + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); rb_scan_args(argc, argv, "12", &src, &fname, &lineno); if (rb_obj_respond_to(src, ripper_id_gets, 0)) { parser->parser_lex_gets = ripper_lex_get_generic; @@ -10188,7 +10218,7 @@ { struct parser_params *parser; - Data_Get_Struct(parser_v, struct parser_params, parser); + TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); parser_prepare(parser); ripper_yyparse((void*)parser); return parser->result; @@ -10199,7 +10229,7 @@ { struct parser_params *parser; - Data_Get_Struct(parser_v, struct parser_params, parser); + TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); parser->parsing_thread = Qnil; return Qnil; } @@ -10215,7 +10245,7 @@ { struct parser_params *parser; - Data_Get_Struct(self, struct parser_params, parser); + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); if (!ripper_initialized_p(parser)) { rb_raise(rb_eArgError, "method called for uninitialized object"); } @@ -10244,7 +10274,7 @@ struct parser_params *parser; long col; - Data_Get_Struct(self, struct parser_params, parser); + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); if (!ripper_initialized_p(parser)) { rb_raise(rb_eArgError, "method called for uninitialized object"); } @@ -10265,7 +10295,7 @@ { struct parser_params *parser; - Data_Get_Struct(self, struct parser_params, parser); + TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); if (!ripper_initialized_p(parser)) { rb_raise(rb_eArgError, "method called for uninitialized object"); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/