summaryrefslogtreecommitdiff
path: root/regint.h
diff options
context:
space:
mode:
authorksaito <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-28 03:06:39 +0000
committerksaito <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-28 03:06:39 +0000
commit7eac88ecd5ee9ecf63ff7a3192c3d73fd5c0063f (patch)
treed5945c73032b9091d1996c852cfafa17a1d7e7ea /regint.h
parent39eac7ded8512e4f9c78f1bdab2b143f8190009f (diff)
* regcomp.c, regint.h: fixed PLATFORM_UNALIGNED_WORD_ACCESS problem ([ruby-dev:24802] and [ruby-core:3733])
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7396 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'regint.h')
-rw-r--r--regint.h56
1 files changed, 15 insertions, 41 deletions
diff --git a/regint.h b/regint.h
index ce4fbfb12d..e77536c124 100644
--- a/regint.h
+++ b/regint.h
@@ -580,57 +580,31 @@ 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))
#define GET_BYTE_INC(byte,p) do{\