ruby0.49编译问题
编译时,报了许多错,先解决其中之一。
array.c: In function ‘ary_new2’:
ruby.h:119:38: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
#define NEWOBJ(obj,type) type *obj = (type*)newobj(sizeof(type))
^
array.c:24:5: note: in expansion of macro ‘NEWOBJ’
NEWOBJ(ary, struct RArray);
^
而函数定义如下:
VALUE
ary_new2(int len)
{
NEWOBJ(ary, struct RArray);
OBJSETUP(ary, C_Array, T_ARRAY);
GC_LINK;
GC_PRO(ary);
ary->len = 0;
ary->capa = len;
ary->ptr = ALLOC_N(VALUE, len);
GC_UNLINK;
return (VALUE)ary;
}
其中宏的定义如下:
#define NEWOBJ(obj,type) type *obj = (type*)newobj(sizeof(type))
所用函数定义如下:
struct RBasic *
newobj(size)
unsigned long size;
{
struct RBasic *obj = Qnil;
if (bytes_alloc + size > gc_threshold) {
gc();
}
obj = (struct RBasic*)xmalloc(size);
obj->next = object_list;
object_list = obj;
obj->flags = fl_current;
obj->iv_tbl = Qnil;
return obj;
}
我了解到newobj()返回的是struct RBasic*,但array.c中却是类型struct RArray
NEWOBJ(ary, struct RArray);
我想是类型不匹配的错误。
那,作者不可能写出不能调试通过的程序。那他用的编译器是哪个版本呀。如何修改呢?
我居然有种无从下手的感觉。