ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.251 by root, Sun Sep 9 12:52:48 2007 UTC vs.
Revision 1.252 by root, Mon Sep 10 12:44:07 2007 UTC

97 *stash_cf_living_wrap; 97 *stash_cf_living_wrap;
98 98
99static inline SV * 99static inline SV *
100newSVpv_utf8 (const char *s) 100newSVpv_utf8 (const char *s)
101{ 101{
102 if (!s)
103 return newSV (0);
104
102 SV *sv = newSVpv (s, 0); 105 SV *sv = newSVpv (s, 0);
103 SvUTF8_on (sv); 106 SvUTF8_on (sv);
104 return sv; 107 return sv;
105} 108}
106 109
107static inline SV * 110static inline SV *
108newSVpvn_utf8 (const char *s, STRLEN l) 111newSVpvn_utf8 (const char *s, STRLEN l)
109{ 112{
113 if (!s)
114 return newSV (0);
115
110 SV *sv = newSVpvn (s, l); 116 SV *sv = newSVpvn (s, l);
111 SvUTF8_on (sv); 117 SvUTF8_on (sv);
112 return sv; 118 return sv;
113} 119}
114 120
321newSVptr (void *ptr, HV *stash, HV *hv = newHV ()) 327newSVptr (void *ptr, HV *stash, HV *hv = newHV ())
322{ 328{
323 SV *sv; 329 SV *sv;
324 330
325 if (!ptr) 331 if (!ptr)
326 return &PL_sv_undef; 332 return newSV (0);
327 333
328 sv_magicext ((SV *)hv, 0, PERL_MAGIC_ext, 0, (char *)ptr, 0); 334 sv_magicext ((SV *)hv, 0, PERL_MAGIC_ext, 0, (char *)ptr, 0);
329 return sv_bless (newRV_noinc ((SV *)hv), stash); 335 return sv_bless (newRV_noinc ((SV *)hv), stash);
330} 336}
331 337
350 356
351static SV * 357static SV *
352newSVattachable (attachable *obj, HV *stash) 358newSVattachable (attachable *obj, HV *stash)
353{ 359{
354 if (!obj) 360 if (!obj)
355 return &PL_sv_undef; 361 return newSV (0);
356 362
357 if (!obj->self) 363 if (!obj->self)
358 obj->self = newHV (); 364 obj->self = newHV ();
359 365
360 if (!SvOBJECT (obj->self)) 366 if (!SvOBJECT (obj->self))
407 return SvPTR (sv, klass); 413 return SvPTR (sv, klass);
408 else 414 else
409 return 0; 415 return 0;
410} 416}
411 417
412inline SV *to_sv (const shstr & v) { return v ? newSVpvn_utf8 ((const char *)v, v.length ()) : &PL_sv_undef; } 418inline SV *to_sv (const shstr & v) { return newSVpvn_utf8 ((const char *)v, v.length ()); }
413inline SV *to_sv (const char * v) { return v ? newSVpv (v, 0) : &PL_sv_undef; } 419inline SV *to_sv (const char * v) { return v ? newSVpv (v, 0) : newSV (0); }
414inline SV *to_sv (bool v) { return newSViv (v); } 420inline SV *to_sv (bool v) { return newSViv (v); }
415inline SV *to_sv ( signed char v) { return newSViv (v); } 421inline SV *to_sv ( signed char v) { return newSViv (v); }
416inline SV *to_sv (unsigned char v) { return newSViv (v); } 422inline SV *to_sv (unsigned char v) { return newSViv (v); }
417inline SV *to_sv ( signed short v) { return newSViv (v); } 423inline SV *to_sv ( signed short v) { return newSViv (v); }
418inline SV *to_sv (unsigned short v) { return newSVuv (v); } 424inline SV *to_sv (unsigned short v) { return newSVuv (v); }
524 break; 530 break;
525 531
526 case DT_STRING: 532 case DT_STRING:
527 { 533 {
528 char *str = (char *)va_arg (ap, const char *); 534 char *str = (char *)va_arg (ap, const char *);
529 sv = str ? newSVpv (str, 0) : &PL_sv_undef; 535 sv = str ? newSVpv (str, 0) : newSV (0);
530 } 536 }
531 break; 537 break;
532 538
533 case DT_DATA: 539 case DT_DATA:
534 { 540 {
535 char *str = (char *)va_arg (ap, const void *); 541 char *str = (char *)va_arg (ap, const void *);
536 int len = va_arg (ap, int); 542 int len = va_arg (ap, int);
537 sv = str ? newSVpv (str, len) : &PL_sv_undef; 543 sv = str ? newSVpv (str, len) : newSV (0);
538 } 544 }
539 break; 545 break;
540 546
541 case DT_OBJECT: 547 case DT_OBJECT:
542 sv = to_sv (va_arg (ap, object *)); 548 sv = to_sv (va_arg (ap, object *));
2866 CODE: 2872 CODE:
2867 object_thawer *self; 2873 object_thawer *self;
2868 sv_to (sv, self); 2874 sv_to (sv, self);
2869 delete self; 2875 delete self;
2870 2876
2877void
2878tags (object_thawer *self)
2879 CODE:
2880 while (self->kw != KW_EOF)
2881 {
2882 if (self->kw == KW_tag)
2883 XPUSHs (sv_2mortal (to_sv (self->get_str ())));
2884
2885 self->skip ();
2886 }
2887

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines