Browse Source

Split parameter extraction macros in with variable declaration and without(_NVD)

mingodad 7 years ago
parent
commit
987f27afa1
1 changed files with 38 additions and 14 deletions
  1. 38 14
      SquiLu/include/squirrel.h

+ 38 - 14
SquiLu/include/squirrel.h

@@ -269,55 +269,79 @@ typedef struct {
 #define SQ_GET_INSTANCE(v, idx, Klass, Klass_tag) SQ_GET_INSTANCE_VAR(v, idx, Klass, self, Klass_tag)
 #define SQ_GET_INSTANCE2(v, idx, Var, Klass, Klass_tag) SQ_GET_INSTANCE_VAR(v, idx, Klass, Var, Klass_tag)
 
+#define SQ_GET_STRING_NVD(v, idx, var)\
+    if((_rc_ = sq_getstr_and_size(v,idx, &var, &var##_size)) < 0) return _rc_;
 #define SQ_GET_STRING(v, idx, var)\
     const SQChar *var;\
     SQInteger var##_size;\
-    if((_rc_ = sq_getstr_and_size(v,idx, &var, &var##_size)) < 0) return _rc_;
+    SQ_GET_STRING_NVD(v, idx, var)
 
 #define SQ_OPT_STRING_STRLEN() static inline size_t sq_opt_strlen(const SQChar *v) {return v ? scstrlen(v) : 0;}
 
-#define SQ_OPT_STRING(v, idx, var, dflt)\
-    const SQChar *var;\
-    SQInteger var##_size;\
+#define SQ_OPT_STRING_NVD(v, idx, var, dflt)\
     if(_top_ >= idx)\
         {if((_rc_ = sq_getstr_and_size(v,idx, &var, &var##_size)) < 0) return _rc_;}\
     else {var=dflt; var##_size = sq_opt_strlen(dflt);}
 
-#define SQ_GET_BOOL(v, idx, var)\
-    SQBool var;\
+#define SQ_OPT_STRING(v, idx, var, dflt)\
+    const SQChar *var;\
+    SQInteger var##_size;\
+    SQ_OPT_STRING_NVD(v, idx, var, dflt)
+
+#define SQ_GET_BOOL_NVD(v, idx, var)\
     if((_rc_ = sq_getbool(v,idx, &var)) < 0) return _rc_;
 
-#define SQ_OPT_BOOL(v, idx, var, dflt)\
+#define SQ_GET_BOOL(v, idx, var)\
     SQBool var;\
+    SQ_GET_BOOL_NVD(v, idx, var)
+
+#define SQ_OPT_BOOL_NVD(v, idx, var, dflt)\
     if(_top_ >= idx)\
         {if((_rc_ = sq_getbool(v,idx, &var)) < 0) return _rc_;}\
     else {var=dflt;}
 
-#define SQ_GET_INTEGER(v, idx, var)\
-    SQInteger var;\
+#define SQ_OPT_BOOL(v, idx, var, dflt)\
+    SQBool var;\
+    SQ_OPT_BOOL_NVD(v, idx, var, dflt)
+
+#define SQ_GET_INTEGER_NVD(v, idx, var)\
     if((_rc_ = sq_getinteger(v,idx, &var)) < 0) return _rc_;
 
-#define SQ_OPT_INTEGER(v, idx, var, dflt)\
+#define SQ_GET_INTEGER(v, idx, var)\
     SQInteger var;\
+    SQ_GET_INTEGER_NVD(v, idx, var)
+
+#define SQ_OPT_INTEGER_NVD(v, idx, var, dflt)\
     if(_top_ >= idx)\
         {if((_rc_ = sq_getinteger(v,idx, &var)) < 0) return _rc_;}\
     else {var=dflt;}
 
-#define SQ_GET_FLOAT(v, idx, var)\
-    SQFloat var;\
+#define SQ_OPT_INTEGER(v, idx, var, dflt)\
+    SQInteger var;\
+    SQ_OPT_INTEGER_NVD(v, idx, var, dflt)
+
+#define SQ_GET_FLOAT_NVD(v, idx, var)\
     if((_rc_ = sq_getfloat(v,idx, &var)) < 0) return _rc_;
 
-#define SQ_OPT_FLOAT(v, idx, var, dflt)\
+#define SQ_GET_FLOAT(v, idx, var)\
     SQFloat var;\
+    SQ_GET_FLOAT_NVD(v, idx, var)
+
+#define SQ_OPT_FLOAT_NVD(v, idx, var, dflt)\
     if(_top_ >= idx)\
         {if((_rc_ = sq_getfloat(v,idx, &var)) < 0) return _rc_;}\
     else {var=dflt;}
 
+#define SQ_OPT_FLOAT(v, idx, var, dflt)\
+    SQFloat var;\
+    SQ_OPT_FLOAT_NVD(v, idx, var, dflt)
 #define sq_pushliteral(v, str) sq_pushstring(v, str, sizeof(str)-1)
+#define SQ_GET_USERPOINTER_NVD(v, idx, var)\
+    if((_rc_ = sq_getuserpointer(v,idx, &var)) < 0) return _rc_;
 
 #define SQ_GET_USERPOINTER(v, idx, var)\
     SQUserPointer var;\
-    if((_rc_ = sq_getuserpointer(v,idx, &var)) < 0) return _rc_;
+    SQ_GET_USERPOINTER_NVD(v, idx, var)
 
 #define SQ_CHECK_TYPE(v, idx, tp) if(sq_gettype(v, idx) != OT_##tp) return sq_throwerror(v, _SC( #tp " expected for parameter (%d)"), idx-1);
 #define SQ_CHECK_ARRAY(v, idx) SQ_CHECK_TYPE(v, idx, ARRAY)