[前][次][番号順一覧][スレッド一覧]

ruby-changes:23721

From: nobu <ko1@a...>
Date: Thu, 24 May 2012 23:01:44 +0900 (JST)
Subject: [ruby-changes:23721] nobu:r35772 (trunk): vm_eval.c: fix types

nobu	2012-05-24 23:01:34 +0900 (Thu, 24 May 2012)

  New Revision: 35772

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35772

  Log:
    vm_eval.c: fix types
    
    * vm_eval.c (rb_backtrace_struct, backtreace_collect): use size_t
      instead of int to get rid of overflow.
    
    * vm_eval.c (backtrace_object, vm_backtrace_each): ditto, use
      ptrdiff_t.

  Modified files:
    trunk/vm.c
    trunk/vm_eval.c

Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 35771)
+++ vm_eval.c	(revision 35772)
@@ -20,8 +20,8 @@
 static void vm_set_eval_stack(rb_thread_t * th, VALUE iseqval, const NODE *cref);
 static int vm_collect_local_variables_in_heap(rb_thread_t *th, VALUE *dfp, VALUE ary);
 
-static int vm_backtrace_each(rb_thread_t *th, int lev, int n, void (*init)(void *), rb_backtrace_iter_func *iter, void *arg);
-static VALUE backtrace_object(rb_thread_t *th, int lev, int n);
+static int vm_backtrace_each(rb_thread_t *th, int lev, ptrdiff_t n, void (*init)(void *), rb_backtrace_iter_func *iter, void *arg);
+static VALUE backtrace_object(rb_thread_t *th, int lev, ptrdiff_t n);
 static VALUE vm_backtrace_str_ary(rb_thread_t *th, int lev, int n);
 
 typedef enum call_type {
Index: vm.c
===================================================================
--- vm.c	(revision 35771)
+++ vm.c	(revision 35772)
@@ -822,7 +822,7 @@
 
 typedef struct rb_backtrace_struct {
     rb_frame_info_t *backtrace;
-    int backtrace_size;
+    size_t backtrace_size;
     VALUE str;
 } rb_backtrace_t;
 
@@ -831,7 +831,7 @@
 {
     if (ptr) {
 	rb_backtrace_t *bt = (rb_backtrace_t *)ptr;
-	int i, s = bt->backtrace_size;
+	size_t i, s = bt->backtrace_size;
 
 	for (i=0; i<s; i++) {
 	    frame_info_mark(&bt->backtrace[i]);
@@ -885,19 +885,19 @@
 }
 
 static VALUE
-backtrace_object(rb_thread_t *th, int lev, int n)
+backtrace_object(rb_thread_t *th, int lev, ptrdiff_t n)
 {
     VALUE btobj = backtrace_alloc(rb_cBacktrace);
     rb_backtrace_t *bt;
     rb_control_frame_t *last_cfp = th->cfp;
     rb_control_frame_t *start_cfp = RUBY_VM_END_CONTROL_FRAME(th);
     rb_control_frame_t *cfp;
-    int size, i, j;
+    ptrdiff_t size, i, j;
 
     start_cfp = RUBY_VM_NEXT_CONTROL_FRAME(
 	RUBY_VM_NEXT_CONTROL_FRAME(
 	    RUBY_VM_NEXT_CONTROL_FRAME(start_cfp))); /* skip top frames */
-    size = (int)(start_cfp - last_cfp) + 1;	     /* TODO: check overflow */
+    size = (start_cfp - last_cfp) + 1;
 
     if (n <= 0) {
 	n = size + n;
@@ -949,7 +949,7 @@
 backtreace_collect(rb_backtrace_t *bt, VALUE (*func)(rb_frame_info_t *, VALUE *))
 {
     VALUE btary;
-    int i;
+    size_t i;
     VALUE args[3];
     rb_thread_t *th = GET_THREAD();
 
@@ -1016,7 +1016,7 @@
 /* old style backtrace for compatibility */
 
 static int
-vm_backtrace_each(rb_thread_t *th, int lev, int n, void (*init)(void *), rb_backtrace_iter_func *iter, void *arg)
+vm_backtrace_each(rb_thread_t *th, int lev, ptrdiff_t n, void (*init)(void *), rb_backtrace_iter_func *iter, void *arg)
 {
     const rb_control_frame_t *limit_cfp = th->cfp;
     const rb_control_frame_t *cfp = (void *)(th->stack + th->stack_size);
@@ -1024,7 +1024,7 @@
     int line_no = 0;
 
     if (n <= 0) {
-	n = (int)(cfp - limit_cfp); /* TODO: check overflow */
+	n = cfp - limit_cfp;
     }
 
     cfp -= 2;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]