176 {
177 Tcl_ResetResult(interp);
178 #if !MOX_USE_OBJ_PRINTF
179 char buf[256];
180 int lenI;
181 #endif
182
183 assert(clsNsO != NULL);
184 char* XnameC = XnameO != NULL ?
VAL2STR(XnameO) : NULL;
185 char* XnsC = XnsO != NULL ?
VAL2STR(XnsO) : NULL;
188
189
190 if (XnameC == NULL) {
191
193 if (XnameO == NULL) return NULL;
194 myNameO = XnameO;
195 Tcl_IncrRefCount(myNameO);
196
197
198 if (XnsC == NULL) {
199
200 #if MOX_USE_OBJ_PRINTF
201 myNsO = Tcl_ObjPrintf(
"%s::%s",
VAL2STR(clsNsO),
VAL2STR(XnameO));
202 #else
203 lenI = snprintf(buf,256,
"%s::%s",
VAL2STR(clsNsO),
VAL2STR(XnameO));
204 myNsO = Tcl_NewStringObj(buf,lenI);
205 #endif
206 } else {
207
208 #if MOX_USE_OBJ_PRINTF
209 myNsO = Tcl_ObjPrintf(
"%s::%s", XnsC,
VAL2STR(XnameO));
210 #else
211 lenI = snprintf(buf,256,
"%s::%s", XnsC,
VAL2STR(XnameO));
212 myNsO = Tcl_NewStringObj(buf,lenI);
213 #endif
214 }
215 Tcl_IncrRefCount(myNsO);
216
217
218 } else if (XnameC[0] == ':' && XnameC[1] == ':') {
219
220 myNsO = XnameO;
221 Tcl_IncrRefCount(myNsO);
223 Tcl_IncrRefCount(myNameO);
224
225
226 } else if (XnsC == NULL) {
227
228 #if MOX_USE_OBJ_PRINTF
229 myNsO = Tcl_ObjPrintf(
"%s::%s",
VAL2STR(clsNsO),
VAL2STR(XnameO));
230 #else
231 lenI = snprintf(buf,256,
"%s::%s",
VAL2STR(clsNsO),
VAL2STR(XnameO));
232 myNsO = Tcl_NewStringObj(buf,lenI);
233 #endif
234 Tcl_IncrRefCount(myNsO);
235 myNameO = XnameO;
236 Tcl_IncrRefCount(myNameO);
237
238
239 } else {
240
241 #if MOX_USE_OBJ_PRINTF
242 myNsO = Tcl_ObjPrintf(
"%s::%s", XnsC,
VAL2STR(XnameO));
243 #else
244 lenI = snprintf(buf,256,
"%s::%s", XnsC,
VAL2STR(XnameO));
245 myNsO = Tcl_NewStringObj(buf,lenI);
246 #endif
247 Tcl_IncrRefCount(myNsO);
248 myNameO = XnameO;
249 Tcl_IncrRefCount(myNameO);
250 }
251
253
254 MOX_NS_T myNsPtr = Tcl_FindNamespace(interp,myNsC,NULL,TCL_GLOBAL_ONLY);
255
256
257 if (myNsPtr == NULL) {
258
259 myNsPtr = Tcl_CreateNamespace(interp,myNsC,NULL , NULL );
260 if (myNsPtr == NULL) goto error;
261
263
264 #define MoxSetVar(tok,val) \
265 if ( MoxNsSetVar(my,tok,val) == NULL ) break
269 #undef MoxSetVar
270
271 }
272
274 goto error;
275 }
276 }
277
278
279 Tcl_SetObjResult(interp,myNsO);
280
281error:
282 if (myNsO) Tcl_DecrRefCount(myNsO);
283 if (myNameO) Tcl_DecrRefCount(myNameO);
284 return myNsO;
285}
#define MoxClsNewInstName()