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);
我想是類型不匹配的錯誤。
那,作者不可能寫出不能調試通過的程序。那他用的編譯器是哪個版本呀。如何修改呢?
我居然有種無從下手的感覺。