… | |
… | |
404 | void reattach (attachable<subclass> *obj) |
404 | void reattach (attachable<subclass> *obj) |
405 | { |
405 | { |
406 | obj->optimise (); |
406 | obj->optimise (); |
407 | |
407 | |
408 | if (obj->self) |
408 | if (obj->self) |
409 | reattach (subclass::get_dt (), (subclass *)obj); |
409 | reattach ((data_type) cftype<subclass>::dt, (subclass *)obj); |
410 | } |
410 | } |
|
|
411 | |
|
|
412 | #include "kw_hash.h" |
411 | |
413 | |
412 | object_freezer::object_freezer () |
414 | object_freezer::object_freezer () |
413 | { |
415 | { |
414 | av = newAV (); |
416 | av = newAV (); |
415 | // TODO: fast dynbuf implementation... yeah, we need obstacks |
417 | // TODO: fast dynbuf implementation... yeah, we need obstacks |
… | |
… | |
431 | int idx = AvFILLp ((AV *)av) + 1; |
433 | int idx = AvFILLp ((AV *)av) + 1; |
432 | av_store (av, idx, SvREFCNT_inc (ext->self)); |
434 | av_store (av, idx, SvREFCNT_inc (ext->self)); |
433 | |
435 | |
434 | sv_catpvf (text, "oid %d\n", idx); |
436 | sv_catpvf (text, "oid %d\n", idx); |
435 | } |
437 | } |
|
|
438 | } |
|
|
439 | |
|
|
440 | void object_freezer::put (keyword k) |
|
|
441 | { |
|
|
442 | sv_catpv (text, keyword_str [k]); |
|
|
443 | } |
|
|
444 | |
|
|
445 | void object_freezer::put (const char *v) |
|
|
446 | { |
|
|
447 | sv_catpv (text, v); |
|
|
448 | } |
|
|
449 | |
|
|
450 | void object_freezer::put (int v) |
|
|
451 | { |
|
|
452 | sv_catpvf (text, "%d\n", v); |
436 | } |
453 | } |
437 | |
454 | |
438 | bool object_freezer::save (const char *filename) |
455 | bool object_freezer::save (const char *filename) |
439 | { |
456 | { |
440 | dSP; |
457 | dSP; |