[#3726] Fixnum#clone and Float#clone raise different exceptions — "David A. Black" <dblack@...>

Hi --

15 messages 2004/11/12
[#3749] Re: Fixnum#clone and Float#clone raise different exceptions — "David A. Black" <dblack@...> 2004/11/16

Hi --

[#3751] Re: Fixnum#clone and Float#clone raise different exceptions — Yukihiro Matsumoto <matz@...> 2004/11/16

Hi,

[#3752] Re: Fixnum#clone and Float#clone raise different exceptions — "David A. Black" <dblack@...> 2004/11/16

Hi --

[#3785] The latest 1.8.2 cvs prints parse error when starting extension compiling — Yukihiro Matsumoto <matz@...>

Hi,

13 messages 2004/11/23
[#3787] Re: The latest 1.8.2 cvs prints parse error when starting extension compiling — Johan Holmberg <holmberg@...> 2004/11/23

Re: Core dump with latest Ruby from CVS

From: "K.Kosako" <kosako@...>
Date: 2004-11-15 09:53:34 UTC
List: ruby-core #3737
> I get a core dump (from "miniruby") when I try to build the latest 
> Ruby source from CVS. I tried to build Ruby on Solaris because I couldn't
> get it to work on FreeBSD (it crashed when I ran a script there).
> So there seem to be problems on more than one platform.
>
> See below for what happened when I built Ruby on Solaris.

Won't you try this patch?
--
K.Kosako


Index: regcomp.c
===================================================================
RCS file: /home/kosako/cvsrep/oniguruma/regcomp.c,v
retrieving revision 1.6
diff -u -p -r1.6 regcomp.c
--- regcomp.c	18 Oct 2004 11:44:53 -0000	1.6
+++ regcomp.c	9 Nov 2004 05:32:57 -0000
@@ -158,13 +158,7 @@ add_rel_addr(regex_t* reg, int addr)
 {
   RelAddrType ra = (RelAddrType )addr;
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
   BBUF_ADD(reg, &ra, SIZE_RELADDR);
-#else
-  UChar buf[SERIALIZE_BUFSIZE];
-  SERIALIZE_RELADDR(ra, buf);
-  BBUF_ADD(reg, buf, SIZE_RELADDR);
-#endif
   return 0;
 }
 
@@ -173,13 +167,7 @@ add_abs_addr(regex_t* reg, int addr)
 {
   AbsAddrType ra = (AbsAddrType )addr;
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
   BBUF_ADD(reg, &ra, SIZE_ABSADDR);
-#else
-  UChar buf[SERIALIZE_BUFSIZE];
-  SERIALIZE_ABSADDR(ra, buf);
-  BBUF_ADD(reg, buf, SIZE_ABSADDR);
-#endif
   return 0;
 }
 
@@ -188,13 +176,7 @@ add_length(regex_t* reg, int len)
 {
   LengthType l = (LengthType )len;
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
   BBUF_ADD(reg, &l, SIZE_LENGTH);
-#else
-  UChar buf[SERIALIZE_BUFSIZE];
-  SERIALIZE_LENGTH(l, buf);
-  BBUF_ADD(reg, buf, SIZE_LENGTH);
-#endif
   return 0;
 }
 
@@ -203,13 +185,7 @@ add_mem_num(regex_t* reg, int num)
 {
   MemNumType n = (MemNumType )num;
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
   BBUF_ADD(reg, &n, SIZE_MEMNUM);
-#else
-  UChar buf[SERIALIZE_BUFSIZE];
-  SERIALIZE_MEMNUM(n, buf);
-  BBUF_ADD(reg, buf, SIZE_MEMNUM);
-#endif
   return 0;
 }
 
@@ -219,13 +195,7 @@ add_repeat_num(regex_t* reg, int num)
 {
   RepeatNumType n = (RepeatNumType )num;
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
   BBUF_ADD(reg, &n, SIZE_REPEATNUM);
-#else
-  UChar buf[SERIALIZE_BUFSIZE];
-  SERIALIZE_REPEATNUM(n, buf);
-  BBUF_ADD(reg, buf, SIZE_REPEATNUM);
-#endif
   return 0;
 }
 #endif
@@ -233,13 +203,7 @@ add_repeat_num(regex_t* reg, int num)
 static int
 add_option(regex_t* reg, OnigOptionType option)
 {
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
   BBUF_ADD(reg, &option, SIZE_OPTION);
-#else
-  UChar buf[SERIALIZE_BUFSIZE];
-  SERIALIZE_OPTION(option, buf);
-  BBUF_ADD(reg, buf, SIZE_OPTION);
-#endif
   return 0;
 }
 
@@ -1637,9 +1601,6 @@ unset_addr_list_fix(UnsetAddrList* uslis
   int i, offset;
   EffectNode* en;
   AbsAddrType addr;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-  UChar buf[SERIALIZE_BUFSIZE];
-#endif
 
   for (i = 0; i < uslist->num; i++) {
     en = &(NEFFECT(uslist->us[i].target));
@@ -1647,12 +1608,7 @@ unset_addr_list_fix(UnsetAddrList* uslis
     addr = en->call_addr;
     offset = uslist->us[i].offset;
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
     BBUF_WRITE(reg, offset, &addr, SIZE_ABSADDR);
-#else
-    SERIALIZE_ABSADDR(addr, buf);
-    BBUF_WRITE(reg, offset, buf, SIZE_ABSADDR);
-#endif
   }
   return 0;
 }
@@ -5125,8 +5081,7 @@ onig_print_compiled_byte_code(FILE* f, U
     case ARG_NON:
       break;
     case ARG_RELADDR:
-      addr = *((RelAddrType* )bp);
-      bp += SIZE_RELADDR;
+      GET_RELADDR_INC(addr, bp);
       fprintf(f, ":(%d)", addr);
       break;
     case ARG_ABSADDR:
Index: regint.h
===================================================================
RCS file: /home/kosako/cvsrep/oniguruma/regint.h,v
retrieving revision 1.6
diff -u -p -r1.6 regint.h
--- regint.h	30 Oct 2004 03:31:58 -0000	1.6
+++ regint.h	9 Nov 2004 06:50:27 -0000
@@ -580,56 +580,30 @@ typedef short int MemNumType;
 #define SIZE_OPTION        sizeof(OnigOptionType)
 #define SIZE_CODE_POINT    sizeof(OnigCodePoint)
 
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-#define GET_RELADDR_INC(addr,p) do{\
-  addr = *((RelAddrType* )(p));\
-  (p) += SIZE_RELADDR;\
-} while(0)
-
-#define GET_ABSADDR_INC(addr,p) do{\
-  addr = *((AbsAddrType* )(p));\
-  (p) += SIZE_ABSADDR;\
-} while(0)
-
-#define GET_LENGTH_INC(len,p) do{\
-  len = *((LengthType* )(p));\
-  (p) += SIZE_LENGTH;\
-} while(0)
 
-#define GET_MEMNUM_INC(num,p) do{\
-  num = *((MemNumType* )(p));\
-  (p) += SIZE_MEMNUM;\
-} while(0)
 
-#define GET_REPEATNUM_INC(num,p) do{\
-  num = *((RepeatNumType* )(p));\
-  (p) += SIZE_REPEATNUM;\
-} while(0)
+#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
 
-#define GET_OPTION_INC(option,p) do{\
-  option = *((OnigOptionType* )(p));\
-  (p) += SIZE_OPTION;\
+#define PLATFORM_GET_INC(val,p,type) do{\
+  val  = *(type* )p;\
+  (p) += sizeof(type);\
 } while(0)
 
 #else
 
-#define GET_RELADDR_INC(addr,p)      GET_SHORT_INC(addr,p)
-#define GET_ABSADDR_INC(addr,p)      GET_SHORT_INC(addr,p)
-#define GET_LENGTH_INC(len,p)        GET_SHORT_INC(len,p)
-#define GET_MEMNUM_INC(num,p)        GET_SHORT_INC(num,p)
-#define GET_REPEATNUM_INC(num,p)     GET_INT_INC(num,p)
-#define GET_OPTION_INC(option,p)     GET_UINT_INC(option,p)
-
-#define SERIALIZE_RELADDR(addr,p)    SERIALIZE_SHORT(addr,p)
-#define SERIALIZE_ABSADDR(addr,p)    SERIALIZE_SHORT(addr,p)
-#define SERIALIZE_LENGTH(len,p)      SERIALIZE_SHORT(len,p)
-#define SERIALIZE_MEMNUM(num,p)      SERIALIZE_SHORT(num,p)
-#define SERIALIZE_REPEATNUM(num,p)   SERIALIZE_INT(num,p)
-#define SERIALIZE_OPTION(option,p)   SERIALIZE_UINT(option,p)
-
-#define SERIALIZE_BUFSIZE            SIZEOF_INT
+#define PLATFORM_GET_INC(val,p,type) do{\
+  xmemcpy(&val, (p), sizeof(type));\
+  (p) += sizeof(type);\
+} while(0)
 
 #endif  /* PLATFORM_UNALIGNED_WORD_ACCESS */
+
+#define GET_RELADDR_INC(addr,p)    PLATFORM_GET_INC(addr,   p, RelAddrType)
+#define GET_ABSADDR_INC(addr,p)    PLATFORM_GET_INC(addr,   p, AbsAddrType)
+#define GET_LENGTH_INC(len,p)      PLATFORM_GET_INC(len,    p, LengthType)
+#define GET_MEMNUM_INC(num,p)      PLATFORM_GET_INC(num,    p, MemNumType)
+#define GET_REPEATNUM_INC(num,p)   PLATFORM_GET_INC(num,    p, RepeatNumType)
+#define GET_OPTION_INC(option,p)   PLATFORM_GET_INC(option, p, OnigOptionType)
 
 /* code point's address must be aligned address. */
 #define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))


In This Thread

Prev Next