From: tokoma@... (=?ISO-2022-JP?B?GyRCQ2ZAbhsoQiA=?= =?ISO-2022-JP?B?GyRCQD8bKEI=?=) Date: 1999-12-16T02:48:28+09:00 Subject: [ruby-list:19562] Re: build on alpha --pgp-sign-Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: multipart/mixed; boundary="Multipart_Thu_Dec_16_02:47:56_1999-1" --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=ISO-2022-JP 中川です。 In message "[ruby-list:19543] Re: build on alpha" on 99/12/15, EGUCHI Osamu wrote: > + ruby.h の struct RBignum で unsigned short *digits としている > + marshal が、*digits が 2 バイトであることを仮定している > ∴marshal で store されたデータが、いじると非互換になる > + > など、小手先で対応できない物も多いので、ちょっと深く考えてみます。 > というわけで、[ruby-list:19520]のパッチは、そのままでは > きっと正しく機能しないので、 結果は追究しないでください。^^;; とりあえずコンパイル時のワーニングから類推しておこなった結果を付けておき ます。あと eval.c へおこなっていた修正もパッチの形にしました。Makefile で -std のフラグが付くようにする方法は分りませんので、パッチにはしていま せん。 marshal のテストまでに失敗してしまうです。 --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=US-ASCII nakagawa@z$ make test not ok bignum 8 -- /usr/users/nakagawa/tool/src/ruby-1.4.3/sample/test.rb:552 not ok bignum 12 -- /usr/users/nakagawa/tool/src/ruby-1.4.3/sample/test.rb:562 not ok bignum 13 -- /usr/users/nakagawa/tool/src/ruby-1.4.3/sample/test.rb:570 not ok bignum 15 -- /usr/users/nakagawa/tool/src/ruby-1.4.3/sample/test.rb:588 test failed *** Exit 1 Stop. --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=US-ASCII diff -u ruby.h.orig ruby.h --- ruby.h.orig Tue Oct 12 18:11:22 1999 +++ ruby.h Thu Dec 16 02:40:23 1999 @@ -89,7 +89,7 @@ ---->> ruby requires sizeof(void*) == sizeof(long) to be compiled. <<---- #endif typedef unsigned long VALUE; -typedef unsigned int ID; +typedef unsigned long ID; #ifdef __STDC__ # include @@ -300,11 +300,18 @@ VALUE *ptr; }; +#if SIZEOF_LONG == SIZEOF_SHORT * 2 +typedef unsigned short USHORT; +#elif SIZEOF_LONG == SIZEOF_INT * 2 +typedef unsigned int USHORT; +#else +typedef unsigned char USHORT; +#endif struct RBignum { struct RBasic basic; char sign; long len; - unsigned short *digits; + USHORT *digits; }; #define R_CAST(st) (struct st*) --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=US-ASCII diff -u bignum.c.orig bignum.c --- bignum.c.orig Wed Dec 8 14:35:54 1999 +++ bignum.c Thu Dec 16 02:39:22 1999 @@ -13,10 +13,9 @@ #include VALUE rb_cBignum; -typedef unsigned short USHORT; #define BDIGITS(x) RBIGNUM(x)->digits -#define BITSPERDIG (sizeof(short)*CHAR_BIT) +#define BITSPERDIG (sizeof(USHORT)*CHAR_BIT) #define BIGRAD (1L << BITSPERDIG) #define DIGSPERINT ((unsigned int)(sizeof(long)/sizeof(short))) #define BIGUP(x) ((unsigned long)(x) << BITSPERDIG) --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=US-ASCII diff -u marshal.c.orig marshal.c --- marshal.c.orig Wed Oct 27 13:19:50 1999 +++ marshal.c Thu Dec 16 02:36:54 1999 @@ -279,7 +279,7 @@ { char sign = RBIGNUM(obj)->sign?'+':'-'; int len = RBIGNUM(obj)->len; - unsigned short *d = RBIGNUM(obj)->digits; + USHORT *d = RBIGNUM(obj)->digits; w_byte(sign, arg); w_long(len, arg); @@ -662,13 +662,13 @@ case TYPE_BIGNUM: { int len; - unsigned short *digits; + USHORT *digits; NEWOBJ(big, struct RBignum); OBJSETUP(big, rb_cBignum, T_BIGNUM); big->sign = (r_byte(arg) == '+'); big->len = len = r_long(arg); - big->digits = digits = ALLOC_N(unsigned short, len); + big->digits = digits = ALLOC_N(USHORT, len); while (len--) { *digits++ = r_short(arg); } --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=US-ASCII diff -u eval.c.orig eval.c --- eval.c.orig Wed Dec 8 01:47:15 1999 +++ eval.c Thu Dec 16 02:34:26 1999 @@ -707,13 +707,13 @@ scope_vmode = _vmode; \ } -static VALUE rb_eval _((VALUE,NODE*)); +static VALUE rb_eval _((VALUE,NODE* volatile)); static VALUE eval _((VALUE,VALUE,VALUE,char*,int)); static NODE *compile _((VALUE, char*, int)); static VALUE rb_yield_0 _((VALUE, VALUE, VALUE, int)); static VALUE rb_call _((VALUE,VALUE,ID,int,VALUE*,int)); -static VALUE module_setup _((VALUE,NODE*)); +static VALUE module_setup _((VALUE,NODE* volatile)); static VALUE massign _((VALUE,NODE*,VALUE,int)); static void assign _((VALUE,NODE*,VALUE,int)); --Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: text/plain; charset=ISO-2022-JP -- 中川 誠 --Multipart_Thu_Dec_16_02:47:56_1999-1-- --pgp-sign-Multipart_Thu_Dec_16_02:47:56_1999-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: PGPfreeware 5.0i for non-commercial use MessageID: tkCgCK26prxTLinoA7L1K5ZzQetnC3IA Comment: Processed by Mailcrypt 3.5.5 under SEMI 1.13.7 - "Awazu" iQA/AwUBOFfUUX7IX1c6rR3xEQLPugCgg37+CfT+4MH7kvIhacyEouu1yJwAoJwI 3oLzuTMbcpqvlX0x0XPwp5Y8 =i7Xq -----END PGP SIGNATURE----- --pgp-sign-Multipart_Thu_Dec_16_02:47:56_1999-1--