mirror of
https://github.com/gnustep/libs-gsweb.git
synced 2025-05-31 01:01:19 +00:00
2002-11-18 Manuel Guesdon <mguesdon@orange-concept.com>
I've rewritten AutoValue handling in GSWBrowser,GSWCheckBoxList, GSWRadioButtonList, GSWPopUpButton to make it coherent and working like specifications. * GSWeb/GSWSwitchComponent.m: o add more information when componentName is null * GSWRepetition.h/.m: o added startIndex, stopIndex * GSWeb/GSWConstants.h/.m: o added startIndex__Key,stopIndex__Key * GSWeb/GSWComponent.h/.m: o replace _isSynchronized by _isParentToComponentSynchronized and _isComponentToParentSynchronized; o added -synchronizesParentToComponentVariablesWithBindings and -synchronizesComponentToParentVariablesWithBindings * GSWeb/GSWApplication.m: o doc/comments o Exception when no session class found * GSWeb/GSWComponentDefinition.m o doc/comments * GSWeb/GSWComponentRequestHandler.m o doc/comments o response message changed when request handling failed * GSWeb/GSWMailDelivery.m o implemented composeEmail...component: methods o change mail sending code * GSWeb/GSWContext.h/.m: o replace ASSIGNCOPY by ASSIGN in -copy for _awakePageComponents); * GSWeb/GSWHyperlink.m: o replaced otherAssociations by otherQueryAssociations in -computeQueryDictionaryInContext o hanldle queryDictionary association o GSWPopUpButton.m: * GSWExtensionsGSW.framework/GSWValidationFailureComponent.gswc/GSWValidationFailureComponent.html: o replaced <br> by <br/> * GSWeb/GSWInput.h o removed autoValue variable (static var may cause multithread problems and there were different autoValue implementation). o remove name key to avoid duplicate name in html produced code o some rewrite for auto value o doc/comments * GSWeb/GSWPopUpButton.h/.m: o use super appendToResponse:inContext: (no more name problem) o rewriten auto value handling (see Testing/DynamicElements for test) o doc/comments * GSWeb/GSWBrowser.h/.m: o use super appendToResponse:inContext: (no more name problem) o rewriten auto value handling (see Testing/DynamicElements for test) o doc/comments * GSWeb/GSWCheckBoxList.h/.m: o rewriten auto value handling (see Testing/DynamicElements for test) o handling disabled binding o doc/comments * GSWeb/GSWRadioButtonList.h/.m: o rewriten auto value handling (see Testing/DynamicElements for test) o handling disabled binding o doc/comments * GSWeb/GSWTextField.h/.m: o output value in appendValueToResponse:inContext: instead of appendGSWebObjectsAssociationsToResponse:inContext: * GSWExtensions.framework/GSWLongResponsePage.h/.m o added git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gsweb/trunk@15008 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
82aa4c6717
commit
6549dee6e7
97 changed files with 3815 additions and 794 deletions
|
@ -27,6 +27,7 @@
|
|||
#define _GSWebDebug_h__
|
||||
|
||||
#ifdef DEBUG
|
||||
extern NSString* GSWDebugMethodMsg(id obj, SEL sel, const char *file, int line, NSString *fmt);
|
||||
extern void GSWLogC_(CONST char* file,int line,CONST char* string);
|
||||
extern void GSWLogDumpObjectFn(CONST char* file,int line,id object,int deep);
|
||||
extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
||||
|
@ -69,6 +70,7 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
// Normal Debug
|
||||
#ifdef GSWDEBUG
|
||||
|
||||
#define LOGClassFnStart() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugFunctionMsg(__PRETTY_FUNCTION__, __FILE__, __LINE__,@"FNSTART"); \
|
||||
|
@ -111,47 +113,47 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
#define LOGObjectFnStart() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGObjectFnStop() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGObjectFnStartC(comment) \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGObjectFnStopC(comment) \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGObjectFnStartCond(cond) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGObjectFnStopCond(cond) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGObjectFnStartCondC(cond,comment) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGObjectFnStopCondC(cond,comment) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGObjectFnNotImplemented() \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"NOT IMPLEMENTED"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"NOT IMPLEMENTED"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGClassFnNotImplemented() \
|
||||
|
@ -202,25 +204,25 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
#define NSDebugMLLogCond(cond, level, format, args...) \
|
||||
do { if (cond && GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugMLogCond(cond, format, args...) \
|
||||
do { if (cond && GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugMLog0(format) \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define NSDebugMLLog0(level,format) \
|
||||
do { if (GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
|
@ -313,47 +315,47 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
#define LOGDEEPObjectFnStart() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStop() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStartC(comment) \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStopC(comment) \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStartCond(cond) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStopCond(cond) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStartCondC(cond,comment) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnStopCondC(cond,comment) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGDEEPObjectFnNotImplemented() \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"NOT IMPLEMENTED"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"NOT IMPLEMENTED"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGDEEPClassFnNotImplemented() \
|
||||
|
@ -404,37 +406,37 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
#define NSDebugDeepMLLogCond(cond, level, format, args...) \
|
||||
do { if (cond && GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugDeepMLog(format, args...) \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugDeepMLLog(level, format, args...) \
|
||||
do { if (GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugDeepMLogCond(cond, format, args...) \
|
||||
do { if (cond && GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugDeepMLog0(format) \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define NSDebugDeepMLLog0(level,format) \
|
||||
do { if (GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
|
@ -529,47 +531,47 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
#define LOGLOCKObjectFnStart() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStop() \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStartC(comment) \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStopC(comment) \
|
||||
do { if (GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStartCond(cond) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStopCond(cond) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStartCondC(cond,comment) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTART %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnStopCondC(cond,comment) \
|
||||
do { if (cond && GSDebugSet(@"GSWebFn") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"FNSTOP %s"); \
|
||||
NSLog(fmt,comment); }} while (0)
|
||||
|
||||
#define LOGLOCKObjectFnNotImplemented() \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"NOT IMPLEMENTED"); \
|
||||
NSString *fmt = GSWDebugMethodMsg(self, _cmd, __FILE__, __LINE__,@"NOT IMPLEMENTED"); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define LOGLOCKClassFnNotImplemented() \
|
||||
|
@ -620,37 +622,37 @@ extern void GSWLogAssertGoodFn(CONST char* file,int line,NSObject* object);
|
|||
|
||||
#define NSDebugLockMLLogCond(cond, level, format, args...) \
|
||||
do { if (cond && GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugLockMLLog(level, format, args...) \
|
||||
do { if (GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugLockMLogCond(cond, format, args...) \
|
||||
do { if (cond && GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugLockMLog(format, args...) \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt, ## args); }} while (0)
|
||||
|
||||
#define NSDebugLockMLog0(format) \
|
||||
do { if (GSDebugSet(@"dflt") == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
#define NSDebugLockMLLog0(level,format) \
|
||||
do { if (GSDebugSet(level) == YES) { \
|
||||
NSString *fmt = GSDebugMethodMsg( \
|
||||
NSString *fmt = GSWDebugMethodMsg( \
|
||||
self, _cmd, __FILE__, __LINE__, format); \
|
||||
NSLog(fmt); }} while (0)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue