#3 lvalue forced in object method invocation macro
[svn/Cll1h/.git] / cll1.h
diff --git a/cll1.h b/cll1.h
index d38f2cd5c11f4cadd323522a94340707dbf0bd5b..2e27140dbd2e76f30bd3d47f05d999d6fbb9d475 100644 (file)
--- a/cll1.h
+++ b/cll1.h
@@ -85,6 +85,7 @@ extern  unsigned RANDOM_SEED;
 #define or ||
 #define TRUE 1
 #define FALSE 0
+#define PI 3.141592654
 #define WEIRDINT (1<<(sizeof(int)*8-1))
 #define btoa(EXPR) ((EXPR)?"TRUE":"FALSE")
 #define coalesce(VAR,EXPR) (VAR?VAR:(EXPR))
@@ -184,7 +185,7 @@ extern  unsigned RANDOM_SEED;
 #define construct(TYPE,INTERFACE) TYPE _init_##TYPE(TYPE o,INTERFACE i) { o->__interface=i; return o; } TYPE __init__##TYPE
 #define get_obj(TYPE,INTERFACE,...) __init__##TYPE(_init_##TYPE(get_mem(TYPE),INTERFACE),__VA_ARGS__)
 #define get_obj_as(COMMUNITY,MEM,INTERFACE,...) (COMMUNITY)get_obj(MEM,INTERFACE,__VA_ARGS__)
-#define _(METHOD,...) (((_ARG1(__VA_ARGS__,)) && (_ARG1(__VA_ARGS__,))->__interface->METHOD)?(*( (_ARG1(__VA_ARGS__,))->__interface->METHOD )) ((void *)__VA_ARGS__):0 )
+#define _(METHOD,...) ((((_ARG1(__VA_ARGS__,)) || /* will not compile if object is not Lvalue: */(_ARG1(__VA_ARGS__,)=NULL)) && (_ARG1(__VA_ARGS__,))->__interface->METHOD)?(*( (_ARG1(__VA_ARGS__,))->__interface->METHOD )) ((void *)__VA_ARGS__):0)
 #define __(METHOD,...) ( _ASSERT(ARG1(__VA_ARGS__,)), (*( __cll1_seekmethod(ARG1(__VA_ARGS__,),METHOD) )) ( __VA_ARGS__ ) )
 #define call(OBJTYPE,METHOD,...) { int _N=0; OBJTYPE _OBJ; /* <-' */ while( (_OBJ=(OBJTYPE)_cll1_for_ptrs(_N++,__VA_ARGS__,NIL))!=(OBJTYPE)NIL ) _(_OBJ,METHOD); }
 #define def_community(TYPE,INTERFACE) def_obj(TYPE) { INTERFACE __interface; };
@@ -192,7 +193,7 @@ extern  unsigned RANDOM_SEED;
 /* variable declarators */
 #define Get_obj(ID,MEM,...) MEM ID=get_obj(MEM,__VA_ARGS__)
 #define Get_obj_as(ID,COMMUNITY,MEM,...) MEM ID=get_obj_as(COMMUNITY,MEM,INTERFACE,__VA_ARGS__)
-#define I_am(MEM) MEM self=(MEM)community
+#define I_am(SELF,MEM) MEM SELF=(MEM)community
 /* .----------------------------------------------------------------------.
   /  9. implementation of C<<1 library functions, updated 2008-01-26 xCh.
  '----------------------------------------------------------------------- */
This page took 0.097838 seconds and 4 git commands to generate.