From f0c3d3289a6e4dcaa5976edbe4687dfe6c9b40a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Sun, 5 Apr 1998 21:31:32 -0700 Subject: [PATCH] bug in line numbering fixed + more garbage collection stuff added Rev: src/program.c:1.68 Rev: src/program.h:1.36 --- src/program.c | 31 +++++++++++++++++++++++++++++-- src/program.h | 7 ++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/program.c b/src/program.c index b5921c041d..ef1c15be05 100644 --- a/src/program.c +++ b/src/program.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: program.c,v 1.67 1998/03/26 14:30:58 grubba Exp $"); +RCSID("$Id: program.c,v 1.68 1998/04/06 04:31:32 hubbe Exp $"); #include "program.h" #include "object.h" #include "dynamic_buffer.h" @@ -891,6 +891,14 @@ void set_gc_mark_callback(void (*m)(struct object *)) new_program->gc_marked=m; } +/* + * Called for all objects and inherits in first pass of gc() + */ +void set_gc_check_callback(void (*m)(struct object *)) +{ + new_program->gc_check=m; +} + int low_reference_inherited_identifier(struct program_state *q, int e, struct pike_string *name) @@ -1510,6 +1518,19 @@ int add_program_constant(char *name, return ret; } +int add_object_constant(char *name, + struct object *o, + INT32 flags) +{ + INT32 ret; + struct svalue tmp; + tmp.type=T_OBJECT; + tmp.subtype=0; + tmp.u.object=o; + ret=simple_add_constant(name, &tmp, flags); + return ret; +} + int add_function_constant(char *name, void (*cfun)(INT32), char * type, INT16 flags) { struct svalue s; @@ -1907,14 +1928,20 @@ char *get_line(unsigned char *pc,struct program *prog,INT32 *linep) while(cnt < prog->linenumbers + prog->num_linenumbers) { + int oline; if(*cnt == 127) { file=cnt+1; cnt=file+strlen(file)+1; } off+=get_small_number(&cnt); - if(off > offset) break; + oline=line; line+=get_small_number(&cnt); + if(off > offset) + { + linep[0]=oline; + return file; + } } linep[0]=line; return file; diff --git a/src/program.h b/src/program.h index 8a8b6ad7b1..855e1b008c 100644 --- a/src/program.h +++ b/src/program.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: program.h,v 1.35 1998/03/28 15:36:22 grubba Exp $ + * $Id: program.h,v 1.36 1998/04/06 04:31:32 hubbe Exp $ */ #ifndef PROGRAM_H #define PROGRAM_H @@ -192,6 +192,7 @@ struct program void (*init)(struct object *); void (*exit)(struct object *); void (*gc_marked)(struct object *); + void (*gc_check)(struct object *); #ifdef DEBUG unsigned INT32 checksum; #endif @@ -255,6 +256,7 @@ SIZE_T add_storage(SIZE_T size); void set_init_callback(void (*init)(struct object *)); void set_exit_callback(void (*exit)(struct object *)); void set_gc_mark_callback(void (*m)(struct object *)); +void set_gc_check_callback(void (*m)(struct object *)); int low_reference_inherited_identifier(struct program_state *q, int e, struct pike_string *name); @@ -311,6 +313,9 @@ int add_string_constant(char *name, int add_program_constant(char *name, struct program *p, INT32 flags); +int add_object_constant(char *name, + struct object *o, + INT32 flags); int add_function_constant(char *name, void (*cfun)(INT32), char * type, INT16 flags); int debug_end_class(char *name, INT32 flags); INT32 define_function(struct pike_string *name, -- GitLab