зеркало из https://github.com/github/ruby.git
* gc.c (rb_source_filename): added. holds unique strings for file
names with GC space. * gc.c (rb_gc_mark): mark source file name. * gc.c (gc_sweep): ditto. * gc.c (Init_GC): initialize source file name table. * intern.h (rb_source_filename): added. * eval.c (rb_eval_string): use rb_source_filename(). * parse.y (yycompile): ditto. * ruby.c (proc_options): ditto. * ruby.c (load_file): ditto. * ruby.c (ruby_script): ditto. * ruby.c (ruby_prog_init): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2166 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
6dc931e59f
Коммит
effd8230ea
25
ChangeLog
25
ChangeLog
|
@ -1,3 +1,28 @@
|
|||
Thu Mar 7 20:08:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
|
||||
|
||||
* gc.c (rb_source_filename): added. holds unique strings for file
|
||||
names with GC space.
|
||||
|
||||
* gc.c (rb_gc_mark): mark source file name.
|
||||
|
||||
* gc.c (gc_sweep): ditto.
|
||||
|
||||
* gc.c (Init_GC): initialize source file name table.
|
||||
|
||||
* intern.h (rb_source_filename): added.
|
||||
|
||||
* eval.c (rb_eval_string): use rb_source_filename().
|
||||
|
||||
* parse.y (yycompile): ditto.
|
||||
|
||||
* ruby.c (proc_options): ditto.
|
||||
|
||||
* ruby.c (load_file): ditto.
|
||||
|
||||
* ruby.c (ruby_script): ditto.
|
||||
|
||||
* ruby.c (ruby_prog_init): ditto.
|
||||
|
||||
Wed Mar 6 17:58:08 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* dln.c (dln_load): use LoadLibrary instead of LoadLibraryEx.
|
||||
|
|
2
eval.c
2
eval.c
|
@ -1248,7 +1248,7 @@ rb_eval_string(str)
|
|||
VALUE v;
|
||||
char *oldsrc = ruby_sourcefile;
|
||||
|
||||
ruby_sourcefile = "(eval)";
|
||||
ruby_sourcefile = rb_source_filename("(eval)");
|
||||
v = eval(ruby_top_self, rb_str_new2(str), Qnil, 0, 0);
|
||||
ruby_sourcefile = oldsrc;
|
||||
|
||||
|
|
48
gc.c
48
gc.c
|
@ -428,6 +428,48 @@ init_mark_stack()
|
|||
|
||||
static void rb_gc_mark_children(VALUE ptr);
|
||||
|
||||
static st_table *source_filenames;
|
||||
|
||||
char *
|
||||
rb_source_filename(f)
|
||||
const char *f;
|
||||
{
|
||||
char *name;
|
||||
|
||||
if (!st_lookup(source_filenames, f, &name)) {
|
||||
long len = strlen(f) + 1;
|
||||
char *ptr = name = ALLOC_N(char, len + 1);
|
||||
*ptr++ = 0;
|
||||
MEMCPY(ptr, f, char, len);
|
||||
st_add_direct(source_filenames, ptr, name);
|
||||
return ptr;
|
||||
}
|
||||
return name + 1;
|
||||
}
|
||||
|
||||
static void
|
||||
mark_source_filename(f)
|
||||
char *f;
|
||||
{
|
||||
if (f) {
|
||||
f[-1] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static enum st_retval
|
||||
sweep_source_filename(key, value)
|
||||
char *key, *value;
|
||||
{
|
||||
if (*value) {
|
||||
*value = 0;
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
else {
|
||||
free(value);
|
||||
return ST_DELETE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gc_mark_all()
|
||||
{
|
||||
|
@ -604,6 +646,7 @@ rb_gc_mark_children(ptr)
|
|||
break;
|
||||
|
||||
case T_NODE:
|
||||
mark_source_filename(obj->as.node.nd_file);
|
||||
switch (nd_type(obj)) {
|
||||
case NODE_IF: /* 1,2,3 */
|
||||
case NODE_FOR:
|
||||
|
@ -846,6 +889,9 @@ gc_sweep()
|
|||
}
|
||||
}
|
||||
|
||||
mark_source_filename(ruby_sourcefile);
|
||||
st_foreach(source_filenames, sweep_source_filename, 0);
|
||||
|
||||
freelist = 0;
|
||||
final_list = deferred_final_list;
|
||||
deferred_final_list = 0;
|
||||
|
@ -1510,4 +1556,6 @@ Init_GC()
|
|||
rb_global_variable(&finalizers);
|
||||
rb_gc_unregister_address(&rb_mObSpace);
|
||||
finalizers = rb_ary_new();
|
||||
|
||||
source_filenames = st_init_strtable();
|
||||
}
|
||||
|
|
1
intern.h
1
intern.h
|
@ -198,6 +198,7 @@ VALUE rb_find_file _((VALUE));
|
|||
/* gc.c */
|
||||
int ruby_stack_check _((void));
|
||||
int ruby_stack_length _((VALUE**));
|
||||
char *rb_source_filename _((const char *));
|
||||
void rb_gc_mark_locations _((VALUE*, VALUE*));
|
||||
void rb_mark_tbl _((struct st_table*));
|
||||
void rb_mark_hash _((struct st_table*));
|
||||
|
|
2
parse.y
2
parse.y
|
@ -2123,7 +2123,7 @@ yycompile(f, line)
|
|||
ruby__end__seen = 0;
|
||||
ruby_eval_tree = 0;
|
||||
heredoc_end = 0;
|
||||
ruby_sourcefile = strdup(f);
|
||||
ruby_sourcefile = rb_source_filename(f);
|
||||
ruby_in_compile = 1;
|
||||
n = yyparse();
|
||||
ruby_debug_lines = 0;
|
||||
|
|
8
ruby.c
8
ruby.c
|
@ -717,7 +717,7 @@ proc_options(argc, argv)
|
|||
process_sflag();
|
||||
|
||||
ruby_init_loadpath();
|
||||
ruby_sourcefile = argv0;
|
||||
ruby_sourcefile = rb_source_filename(argv0);
|
||||
if (e_script) {
|
||||
require_libraries();
|
||||
rb_compile_string(script, e_script, 1);
|
||||
|
@ -825,7 +825,7 @@ load_file(fname, script)
|
|||
argv[0] = path;
|
||||
execv(path, argv);
|
||||
|
||||
ruby_sourcefile = fname;
|
||||
ruby_sourcefile = rb_source_filename(fname);
|
||||
ruby_sourceline = 1;
|
||||
rb_fatal("Can't exec %s", path);
|
||||
}
|
||||
|
@ -951,7 +951,7 @@ ruby_script(name)
|
|||
{
|
||||
if (name) {
|
||||
rb_progname = rb_tainted_str_new2(name);
|
||||
ruby_sourcefile = name;
|
||||
ruby_sourcefile = rb_source_filename(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -990,7 +990,7 @@ ruby_prog_init()
|
|||
{
|
||||
init_ids();
|
||||
|
||||
ruby_sourcefile = "ruby";
|
||||
ruby_sourcefile = rb_source_filename("ruby");
|
||||
rb_define_variable("$VERBOSE", &ruby_verbose);
|
||||
rb_define_variable("$-v", &ruby_verbose);
|
||||
rb_define_variable("$-w", &ruby_verbose);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#define RUBY_VERSION "1.7.2"
|
||||
#define RUBY_RELEASE_DATE "2002-03-06"
|
||||
#define RUBY_RELEASE_DATE "2002-03-07"
|
||||
#define RUBY_VERSION_CODE 172
|
||||
#define RUBY_RELEASE_CODE 20020306
|
||||
#define RUBY_RELEASE_CODE 20020307
|
||||
|
|
Загрузка…
Ссылка в новой задаче