changed memxxx() macros to use HAVE___BUILTIN_MEMXXX autoconf variables.

started adding the #final modifier for class definition
This commit is contained in:
hyunghwan.chung 2017-04-30 05:07:08 +00:00
parent 2a6206cc80
commit 275f5810cc
2 changed files with 34 additions and 11 deletions

View File

@ -51,7 +51,8 @@
enum class_mod_t
{
CLASS_INDEXED = (1 << 0),
CLASS_LIMITED = (1 << 1)
CLASS_LIMITED = (1 << 1),
CLASS_FINAL = (1 << 2)
};
enum var_type_t
@ -102,6 +103,7 @@ static struct voca_t
{ 9, { 'e','x','c','e','p','t','i','o','n' } },
{ 6, { 'e','x','t','e','n','d' } },
{ 5, { 'f','a','l','s','e' } },
{ 6, { '#','f','i','n','a','l' } },
{ 4, { 'f','r','o','m' } },
{ 9, { '#','h','a','l','f','w','o','r','d' } },
{ 2, { 'i','f' } },
@ -159,6 +161,7 @@ enum voca_id_t
VOCA_EXCEPTION,
VOCA_EXTEND,
VOCA_FALSE,
VOCA_FINAL_S,
VOCA_FROM,
VOCA_HALFWORD_S,
VOCA_IF,
@ -6630,6 +6633,16 @@ static int __compile_class_definition (moo_t* moo, int extend)
if (_set_class_indexed_type (moo, MOO_OBJ_TYPE_LIWORD) <= -1) return -1;
GET_TOKEN (moo);
}
else if (is_token_symbol(moo, VOCA_FINAL_S))
{
if (moo->c->cls.flags & CLASS_FINAL)
{
set_syntax_error (moo, MOO_SYNERR_MODIFIERDUPL, TOKEN_LOC(moo), TOKEN_NAME(moo));
return -1;
}
moo->c->cls.flags |= CLASS_FINAL;
GET_TOKEN(moo);
}
else if (is_token_symbol(moo, VOCA_LIMITED_S))
{
if (moo->c->cls.flags & CLASS_LIMITED)

View File

@ -89,17 +89,27 @@
# else
# define MOO_MEMCMP(dst,src,size) memcmp(dst,src,size)
# endif
#elif defined(__GNUC__) && (__GNUC__ >= 3 || (defined(__GNUC_MINOR) && __GNUC__ == 2 && __GNUC_MINOR__ >= 91))
/* gcc 2.91 or higher */
# define MOO_MEMSET(dst,src,size) __builtin_memset(dst,src,size)
# define MOO_MEMCPY(dst,src,size) __builtin_memcpy(dst,src,size)
# define MOO_MEMMOVE(dst,src,size) __builtin_memmove(dst,src,size)
# define MOO_MEMCMP(dst,src,size) __builtin_memcmp(dst,src,size)
#else
# define MOO_MEMSET(dst,src,size) memset(dst,src,size)
# define MOO_MEMCPY(dst,src,size) memcpy(dst,src,size)
# define MOO_MEMMOVE(dst,src,size) memmove(dst,src,size)
# define MOO_MEMCMP(dst,src,size) memcmp(dst,src,size)
# if defined(HAVE___BUILTIN_MEMSET)
# define MOO_MEMSET(dst,src,size) __builtin_memset(dst,src,size)
# else
# define MOO_MEMSET(dst,src,size) memset(dst,src,size)
# endif
# if defined(HAVE___BUILTIN_MEMCPY)
# define MOO_MEMCPY(dst,src,size) __builtin_memcpy(dst,src,size)
# else
# define MOO_MEMCPY(dst,src,size) memcpy(dst,src,size)
# endif
# if defined(HAVE___BUILTIN_MEMMOVE)
# define MOO_MEMMOVE(dst,src,size) __builtin_memmove(dst,src,size)
# else
# define MOO_MEMMOVE(dst,src,size) memmove(dst,src,size)
# endif
# if defined(HAVE___BUILTIN_MEMCMP)
# define MOO_MEMCMP(dst,src,size) __builtin_memcmp(dst,src,size)
# else
# define MOO_MEMCMP(dst,src,size) memcmp(dst,src,size)
# endif
#endif