From 6a69ad4df1719516a2da8b95872d3a44deae026c Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 30 Jun 2007 18:04:35 +0000 Subject: * yarvcore.h: some refactoring on rb_iseq_t. rename some variable names, add comments, etc. * compile.c, iseq.c, proc.c, vm.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12673 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 ++++++ compile.c | 27 +++++++++++----------- iseq.c | 10 ++++---- proc.c | 4 ++-- vm.c | 6 ++--- yarvcore.h | 77 +++++++++++++++++++++++++++++++++----------------------------- 6 files changed, 71 insertions(+), 60 deletions(-) diff --git a/ChangeLog b/ChangeLog index 921b2055c9..8a562fa79b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Jul 1 03:02:29 2007 Koichi Sasada + + * yarvcore.h: some refactoring on rb_iseq_t. + rename some variable names, add comments, etc. + + * compile.c, iseq.c, proc.c, vm.c: ditto. + Sun Jul 1 02:57:57 2007 Koichi Sasada * vm.h: rename insn_func_type to rb_insn_func_type. diff --git a/compile.c b/compile.c index 72323e0c1f..8c77572751 100644 --- a/compile.c +++ b/compile.c @@ -227,10 +227,10 @@ iseq_translate_direct_threaded_code(rb_iseq_t *iseq) #endif int i; - iseq->iseq_encoded = ALLOC_N(VALUE, iseq->size); - MEMCPY(iseq->iseq_encoded, iseq->iseq, VALUE, iseq->size); + iseq->iseq_encoded = ALLOC_N(VALUE, iseq->iseq_size); + MEMCPY(iseq->iseq_encoded, iseq->iseq, VALUE, iseq->iseq_size); - for (i = 0; i < iseq->size; /* */ ) { + for (i = 0; i < iseq->iseq_size; /* */ ) { int insn = iseq->iseq_encoded[i]; int len = insn_len(insn); iseq->iseq_encoded[i] = (VALUE)table[insn]; @@ -950,7 +950,7 @@ set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor) { LABEL *lobj; INSN *iobj; - struct insn_info_struct *insn_info_tbl; + struct insn_info_struct *insn_info_table; LINK_ELEMENT *list; VALUE *generated_iseq; @@ -992,7 +992,7 @@ set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor) /* make instruction sequence */ generated_iseq = ALLOC_N(VALUE, pos); - insn_info_tbl = ALLOC_N(struct insn_info_struct, k); + insn_info_table = ALLOC_N(struct insn_info_struct, k); list = FIRST_ELEMENT(anchor); k = pos = sp = 0; @@ -1122,8 +1122,8 @@ set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor) return 0; } } - insn_info_tbl[k].line_no = iobj->line_no; - insn_info_tbl[k].position = pos; + insn_info_table[k].line_no = iobj->line_no; + insn_info_table[k].position = pos; pos += len; k++; break; @@ -1146,13 +1146,12 @@ set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor) list = list->next; } - { - iseq->iseq = (void *)generated_iseq; - iseq->size = pos; - iseq->insn_info_tbl = insn_info_tbl; - iseq->insn_info_size = k; - iseq->stack_max = stack_max; - } + iseq->iseq = (void *)generated_iseq; + iseq->iseq_size = pos; + iseq->insn_info_table = insn_info_table; + iseq->insn_info_size = k; + iseq->stack_max = stack_max; + return COMPILE_OK; } diff --git a/iseq.c b/iseq.c index adcb0e2ec6..36aa7eef67 100644 --- a/iseq.c +++ b/iseq.c @@ -54,7 +54,7 @@ iseq_free(void *ptr) } RUBY_FREE_UNLESS_NULL(iseq->iseq); - RUBY_FREE_UNLESS_NULL(iseq->insn_info_tbl); + RUBY_FREE_UNLESS_NULL(iseq->insn_info_table); RUBY_FREE_UNLESS_NULL(iseq->local_table); RUBY_FREE_UNLESS_NULL(iseq->catch_table); RUBY_FREE_UNLESS_NULL(iseq->arg_opt_tbl); @@ -499,7 +499,7 @@ static unsigned short find_line_no(rb_iseq_t *iseqdat, unsigned long pos) { unsigned long i, size = iseqdat->insn_info_size; - struct insn_info_struct *iiary = iseqdat->insn_info_tbl; + struct insn_info_struct *iiary = iseqdat->insn_info_table; for (i = 0; i < size; i++) { if (iiary[i].position == pos) { @@ -514,7 +514,7 @@ static unsigned short find_prev_line_no(rb_iseq_t *iseqdat, unsigned long pos) { unsigned long i, size = iseqdat->insn_info_size; - struct insn_info_struct *iiary = iseqdat->insn_info_tbl; + struct insn_info_struct *iiary = iseqdat->insn_info_table; for (i = 0; i < size; i++) { if (iiary[i].position == pos) { @@ -723,7 +723,7 @@ ruby_iseq_disasm(VALUE self) char buff[0x200]; iseq = iseqdat->iseq; - size = iseqdat->size; + size = iseqdat->iseq_size; rb_str_cat2(str, "== disasm: "); @@ -1201,7 +1201,7 @@ iseq_data_to_ary(rb_iseq_t *iseq) } /* body */ - for (seq = iseq->iseq; seq < iseq->iseq + iseq->size; ) { + for (seq = iseq->iseq; seq < iseq->iseq + iseq->iseq_size; ) { VALUE insn = *seq++; int j, len = insn_len(insn); VALUE *nseq = seq + len - 1; diff --git a/proc.c b/proc.c index abf26a68bb..1628f68275 100644 --- a/proc.c +++ b/proc.c @@ -548,8 +548,8 @@ proc_to_s(VALUE self) if (RUBY_VM_NORMAL_ISEQ_P(iseq)) { int line_no = 0; - if (iseq->insn_info_tbl) { - line_no = iseq->insn_info_tbl[0].line_no; + if (iseq->insn_info_table) { + line_no = iseq->insn_info_table[0].line_no; } str = rb_sprintf("#<%s:%p@%s:%d%s>", cname, (void *)self, RSTRING_PTR(iseq->filename), diff --git a/vm.c b/vm.c index 27d6d42de9..aeab116c3e 100644 --- a/vm.c +++ b/vm.c @@ -699,12 +699,12 @@ vm_get_sourceline(rb_control_frame_t *cfp) int pos = cfp->pc - cfp->iseq->iseq_encoded; for (i = 0; i < iseq->insn_info_size; i++) { - if (iseq->insn_info_tbl[i].position == pos) { - line_no = iseq->insn_info_tbl[i - 1].line_no; + if (iseq->insn_info_table[i].position == pos) { + line_no = iseq->insn_info_table[i - 1].line_no; goto found; } } - line_no = iseq->insn_info_tbl[i - 1].line_no; + line_no = iseq->insn_info_table[i - 1].line_no; } found: return line_no; diff --git a/yarvcore.h b/yarvcore.h index 85842a00a4..9bd7462445 100644 --- a/yarvcore.h +++ b/yarvcore.h @@ -234,50 +234,50 @@ typedef struct rb_iseq_profile_struct { struct rb_iseq_struct; struct rb_iseq_struct { - /* instruction sequence type */ - VALUE type; - - VALUE self; - VALUE name; /* String: iseq name */ - VALUE *iseq; /* iseq */ - VALUE *iseq_encoded; + /***************/ + /* static data */ + /***************/ + + VALUE type; /* instruction sequence type */ + VALUE name; /* String: iseq name */ + VALUE filename; /* file information where this sequence from */ + VALUE *iseq; /* iseq (insn number and openrads) */ + VALUE *iseq_encoded; /* encoded iseq */ + unsigned long iseq_size; VALUE iseq_mark_ary; /* Array: includes operands which should be GC marked */ - /* sequence size */ - unsigned long size; /* insn info, must be freed */ - struct insn_info_struct *insn_info_tbl; - - /* insn info size, this value shows also instruction count */ - unsigned int insn_info_size; - - /* file information where this sequence from */ - VALUE filename; + struct insn_info_struct *insn_info_table; + unsigned long insn_info_size; ID *local_table; /* must free */ int local_table_size; /* method, class frame: sizeof(vars) + 1, block frame: sizeof(vars) */ - int local_size; - - /* jit compiled or not */ - void *jit_compiled; - void *iseq_orig; + int local_size; /** * argument information * - * def m(a1, a2, ..., aM, b1=(...), b2=(...), ..., bN=(...), *c, &d) + * def m(a1, a2, ..., aM, # mandatory + * b1=(...), b2=(...), ..., bN=(...), # optinal + * *c, # rest + * d1, d2, ..., dO, # post + * &e) # block * => * - * argc = M - * arg_rest = M+N + 1 // if no rest arguments, rest is 0 - * arg_opts = N - * arg_opts_tbl = [ (N entries) ] - * arg_block = M+N + 1 (rest) + 1 (block) - * check: - * M <= num + * argc = M + * arg_rest = M+N+1 // or -1 if no rest arg + * arg_opts = N + * arg_opts_tbl = [ (N entries) ] + * arg_post_len = O // 0 if no post arguments + * arg_post_start = M+N+2 + * arg_block = M+N + 1 + O + 1 // -1 if no block arg + * arg_simple = 0 if not simple arguments. + * = 1 if no opt, rest, post, block. + * = 2 if ambiguos block parameter ({|a|}). + * arg_size = argument size. */ int argc; @@ -288,15 +288,9 @@ struct rb_iseq_struct { int arg_post_len; int arg_post_start; int arg_size; - VALUE *arg_opt_tbl; - /* for stack overflow check */ - int stack_max; - - /* klass/module nest information stack (cref) */ - NODE *cref_stack; - VALUE klass; + int stack_max; /* for stack overflow check */ /* catch table */ struct catch_table_entry *catch_table; @@ -306,16 +300,27 @@ struct rb_iseq_struct { struct rb_iseq_struct *parent_iseq; struct rb_iseq_struct *local_iseq; + /****************/ + /* dynamic data */ + /****************/ + + VALUE self; + /* block inlining */ NODE *node; void *special_block_builder; void *cached_special_block_builder; VALUE cached_special_block; + /* klass/module nest information stack (cref) */ + NODE *cref_stack; + VALUE klass; + /* misc */ ID defined_method_id; /* for define_method */ rb_iseq_profile_t profile; + /* used at compile time */ struct iseq_compile_data *compile_data; }; -- cgit v1.2.3