… | |
… | |
360 | SvREFCNT_dec ((SV *)self); |
360 | SvREFCNT_dec ((SV *)self); |
361 | self = 0; |
361 | self = 0; |
362 | } |
362 | } |
363 | } |
363 | } |
364 | |
364 | |
365 | void |
365 | void attachable_base::instantiate (data_type type, void *obj) |
366 | object::instantiate_ () |
|
|
367 | { |
366 | { |
368 | dSP; |
367 | dSP; |
369 | ENTER; |
368 | ENTER; |
370 | SAVETMPS; |
369 | SAVETMPS; |
371 | PUSHMARK (SP); |
370 | PUSHMARK (SP); |
372 | EXTEND (SP, 2); |
371 | EXTEND (SP, 2); |
373 | PUSHs (sv_2mortal (newSVdt (DT_OBJECT, static_cast<object *>(this)))); |
372 | PUSHs (sv_2mortal (newSVdt (type, obj))); |
374 | PUSHs (sv_2mortal (newSVpv (attach, 0))); |
373 | PUSHs (sv_2mortal (newSVpv (attach, 0))); |
|
|
374 | |
|
|
375 | free_string (attach); |
|
|
376 | attach = 0; |
|
|
377 | |
375 | PUTBACK; |
378 | PUTBACK; |
376 | call_pv ("cf::instantiate", G_DISCARD | G_VOID | G_EVAL); |
379 | call_pv ("cf::instantiate", G_DISCARD | G_VOID | G_EVAL); |
377 | FREETMPS; |
380 | FREETMPS; |
378 | LEAVE; |
381 | LEAVE; |
379 | |
382 | |
380 | INVOKE_OBJECT (INSTANTIATE, this); |
383 | switch (type) |
|
|
384 | { |
|
|
385 | case DT_OBJECT: INVOKE_OBJECT (INSTANTIATE, obj); break; |
|
|
386 | case DT_MAP: INVOKE_MAP (INSTANTIATE, obj); break; |
|
|
387 | } |
381 | } |
388 | } |
382 | |
389 | |
383 | ///////////////////////////////////////////////////////////////////////////// |
390 | ///////////////////////////////////////////////////////////////////////////// |
384 | |
391 | |
385 | void reattach (data_type type, void *obj) |
392 | void reattach (data_type type, void *obj) |