#include "EXTERN.h"
#include "perl.h"
#include "perlapi.h"
#include "XSUB.h"

MODULE = sealed    PACKAGE = sealed

void _padname_add(PADLIST *padlist, IV idx)
    PROTOTYPE: $$
    CODE:
            I32 old_padix              = PL_padix;
            I32 old_comppad_name_fill  = PL_comppad_name_fill;
            I32 old_min_intro_pending  = PL_min_intro_pending;
            I32 old_max_intro_pending  = PL_max_intro_pending;
            int old_cv_has_eval        = PL_cv_has_eval;
            I32 old_pad_reset_pending  = PL_pad_reset_pending;
            SV **old_curpad            = PL_curpad;
            AV *old_comppad            = PL_comppad;
            OP* old_op                 = PL_op;
#ifdef HAVE_PADNAMELIST
            PADNAMELIST *old_comppad_name = PL_comppad_name;
#else
            AV *old_comppad_name = PL_comppad_name;
#endif
            PADNAME **names;
            PL_comppad_name      = PadlistNAMES(padlist);
            PL_comppad           = PadlistARRAY(padlist)[1];
            PL_curpad            = AvARRAY(PL_comppad);
            PL_comppad_name_fill = 0;
            PL_min_intro_pending = 0;
	    PL_cv_has_eval       = 0;
            PL_pad_reset_pending = 0;
            PL_padix             = PadnamelistMAX(PL_comppad_name);
            names                = PadnamelistARRAY((PADNAMELIST *)PadlistARRAY(padlist)[0]);

            names[idx]           = newPADNAMEpvn("&", 1);

            PL_padix             = old_padix;
            PL_comppad_name_fill = old_comppad_name_fill;
            PL_min_intro_pending = old_min_intro_pending;
            PL_max_intro_pending = old_max_intro_pending;
            PL_pad_reset_pending = old_pad_reset_pending;
            PL_curpad            = old_curpad;
            PL_comppad           = old_comppad;
            PL_comppad_name      = old_comppad_name;
	    PL_cv_has_eval       = old_cv_has_eval;
            PL_op                = old_op;