Це команда perlintern, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн емулятор Windows або онлайн емулятор MAC OS
ПРОГРАМА:
ІМ'Я
perlintern - автоматично створена документація чисто внутрішніх функцій Perl
ОПИС
Цей файл є автоматично згенерованою документацією функцій в інтерпретаторі Perl, які є
задокументовані з використанням внутрішнього формату документації Perl, але не позначені як частина
Perl API. Іншими словами, вони він має НЕ та цінності використання in Розширення!
Час компіляції сфера гачки
BhkENTRY
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Повернути запис зі структури BHK. який є маркером препроцесора, що вказує
який запис повернути. Якщо відповідний прапор не встановлено, це поверне NULL.
Тип повертаемого значення залежить від того, який запис ви запитуєте.
void * BhkENTRY(BHK *hk, що)
BhkFLAGS
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Поверніть прапори BHK.
U32 BhkFLAGS (BHK *hk)
CALL_BLOCK_HOOKS
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Викликати всі зареєстровані гачки блоку для типу який. який є попередньою обробкою
токен; тип аргумент залежить від який.
void CALL_BLOCK_HOOKS(який, arg)
виготовлений на замовлення Оператори
core_prototype
Ця функція призначає прототип названої основної функції "sv" або a
новий смертний SV, якщо "sv" дорівнює NULL. Він повертає змінений "sv", або NULL, якщо ядро
функція не має прототипу. "code" - це код, який повертає "keyword()". Це повинно
не дорівнюватиме 0.
SV * core_prototype (SV *sv, const char *name,
код const int,
int * const opnum)
CV Маніпуляція Функції
docatch Перевірте випадки 0 або 3 cur_env.je_ret, які використовуються лише в контексті оцінки.
0 використовується як продовження всередині eval,
3 використовується для кубика, спійманого внутрішнім оцінювачем - продовжуйте внутрішній цикл
Дивіться cop.h: je_mustcatch, якщо на будь-якому рівні запуску встановлено значення TRUE, це означає, що операції eval повинні
встановити локальний jmpenv для обробки пасток винятків.
OP* docatch(OP *o)
CV посилання рахує та Cv ЗОВНІШНЯ
CvWEAKOUTSIDE
Кожне резюме має вказівник "CvOUTSIDE()" на його лексично охоплююче резюме (якщо є).
Оскільки вказівники на анонімні підпрототипи зберігаються в слотах «&», це
можна отримати циркулярну довідку, коли батько вказує на дитину і
навпаки. Щоб уникнути подальшого витоку пам’яті, ми не збільшуємо посилання
кількість резюме, на яке вказує "CvOUTSIDE" в один конкретний екземпляр який
у батьків є слот «&», спрямований назад до нас. У цьому випадку ми встановлюємо
Прапор "CvWEAKOUTSIDE" у дитини. Це дозволяє визначити, під яким
обставини ми повинні зменшити попередній рахунок батьківського під час звільнення
дитина.
Існує ще одна складність із незакритими анонімними підрядниками (тобто тими, що
не посилатися на будь-які лексичні слова за межами цього підгрупи). В даному випадку анонім
прототип ділиться, а не клонується. Це має наслідок, що
батьки можуть бути звільнені, поки є ще активні діти, напр
ПОЧАТОК { $a = sub { eval '$x' } }
У цьому випадку BEGIN звільняється відразу після виконання, оскільки немає
активні посилання на нього: підпрототип anon має встановлений "CvWEAKOUTSIDE", оскільки він
не закриття, і $a вказує на те саме резюме, тому воно не сприяє BEGIN
refcount також. Коли $a виконується, "eval '$x'" викликає ланцюжок
"CvOUTSIDE", за якими потрібно стежити, і буде доступний звільнений BEGIN.
Щоб уникнути цього, щоразу, коли резюме та пов’язаний з ним блок звільняються, будь-які записи «&».
pad явно видаляються з площадки, і якщо refcount вказує на
anon sub все ще позитивний, тоді "CvOUTSIDE" цієї дитини налаштовано вказувати на його
дідусь і бабуся. Це відбудеться лише в окремому випадку незакриття
аноновий прототип, що має одне або кілька активних посилань (наприклад, $a вище).
Ще одна річ, яку слід враховувати, це те, що резюме може бути просто невизначеним, а не
freed, наприклад, "undef &foo". У цьому випадку його підрахунок може не досягти нуля, але
ми все одно видаляємо його планшет і його "CvROOT" тощо. Оскільки різні діти все ще можуть
якщо їх "CvOUTSIDE" вказує на це невизначене резюме, ми зберігаємо його власне "CvOUTSIDE"
поки що, щоб ланцюг лексичних областей не був розірваний. Наприклад,
слід надрукувати 123:
мій $x = 123;
sub tmp { sub { eval '$x' } }
мій $a = tmp();
undef &tmp;
надрукувати $a->();
bool CvWEAKOUTSIDE(CV *cv)
Вбудовування Функції
cv_dump дампує вміст CV
void cv_dump(CV *cv, const char *title)
cv_forget_slab
Коли CV має кількість посилань на плиті (CvSLABBED), воно відповідає за
переконавшись, що він звільнений. (Отже, жодне резюме ніколи не повинно мати посилання на посилання
та сама плита.) Під час компіляції CV має посилатися на плиту. один раз
він скомпільований і прикріплений CvROOT, він завершив свою роботу, тому може забути
плита.
void cv_forget_slab(CV *cv)
do_dump_pad
Скиньте вміст підсписку
void do_dump_pad(рівень I32, *файл PerlIO,
PADLIST *padlist, int full)
padlist_dup
Дублює планшет.
PADLIST * padlist_dup(PADLIST *srcpad,
CLONE_PARAMS *параметр)
padnamelist_dup
Дублює список імен планшетів.
PADNAMELIST * padnamelist_dup(PADNAMELIST *srcpad,
CLONE_PARAMS *параметр)
padname_dup
Дублює назву панелі.
PADNAME * padname_dup(PADNAME *src, CLONE_PARAMS *param)
pad_alloc_name
Виділяє місце в компілюючому планшеті (через "pad_alloc" у perlapi) і
потім зберігає назву для цього запису. ім'я приймається і стає записом імені; це
має вже містити рядок імені. typestash та наша схованка і
Прапор "padadd_STATE" додається ім'я. Жодна з інших обробок
"pad_add_name_pvn" у perlapi виконано. Повертає зміщення виділеної площадки
слот.
PADOFFSET pad_alloc_name(PADNAME *назва, прапори U32,
HV *typestash, HV *ourstash)
pad_block_start
Оновіть змінні стану компіляції панелі при вході до нового блоку.
void pad_block_start (повний int)
pad_check_dup
Перевірте наявність дублікатів декларацій: повідомте про будь-яке з:
* a my в поточній області з такою ж назвою;
* наш (в будь-якому місці панелі) з такою ж назвою та
той же схованка, що і C
"is_our" вказує, що ім'я, яке потрібно перевірити, є декларацією "наша".
void pad_check_dup(PADNAME *ім'я, прапори U32,
const HV *ourstash)
pad_findlex
Знайдіть іменований лексик у будь-якому місці ланцюжка вкладених блоків. Додайте підроблені записи в
внутрішні колодки, якщо вони знаходяться у зовнішніх.
Повертає зміщення в нижній панелі lex або підробленого lex. cv – це резюме в
з якого розпочати пошук, а seq — це поточний cop_seq, з яким потрібно порівняти. Якщо
warn вірно, друкуйте відповідні попередження. Варіанти out_* повертають значення тощо
є вказівниками на те, де мають зберігатися повернуті значення. out_capture, якщо не
null, запитує, щоб найглибший екземпляр лексики був захоплений; out_name є
встановити найглибше збігається ім’я планшета або фальшиве ім’я планшета; out_flags повертає
прапори, які зазвичай асоціюються з полем PARENT_FAKELEX_FLAGS підробленого імені панелі.
Зверніть увагу, що pad_findlex() є рекурсивним; воно повторюється вгору по ланцюжку резюме, а потім приходить
назад, додаючи підроблені записи, як це відбувається. Це має бути таким чином, тому що підробка
імена в протойпах Anon повинні зберігати в xlow індекс на батьківській панелі.
PADOFFSET pad_findlex(const char *namepv,
STRLEN namelen, прапори U32,
const CV* cv, U32 seq, int warn,
SV** out_capture,
PADNAME** out_name,
int *out_flags)
pad_fixup_inner_anons
Для будь-яких анонімних резюме в панелі змініть CvOUTSIDE цього резюме з old_cv на new_cv, якщо
необхідно. Потрібен, коли щойно складене резюме потрібно перемістити в уже існуюче резюме
структура.
void pad_fixup_inner_anons(PADLIST *padlist,
CV *старе_резюме, CV *нове_резюме)
pad_free
Звільніть SV на зміщенні po в поточній площадці.
void pad_free(PADOFFSET po)
pad_leavemy
Очищення в кінці області дії під час компіляції: установіть максимальний номер послідовності для лексичних у
цієї сфери та попереджаємо про будь-які лексичні слова, які ніколи не були введені.
void pad_leavemy()
pad_push
Вставте нову рамку панелі на підсписок, якщо на цій глибині вже немає панелі,
в такому випадку не турбуйтеся про створення нового. Потім введіть @_ для нового планшета
слот нуль.
void pad_push(PADLIST *padlist, int глибина)
pad_reset
Позначте всі поточні тимчасові елементи для повторного використання
void pad_reset()
pad_swipe
Відмовтеся від tmp в поточній площадці зі зміщенням po і замініть його на новий.
void pad_swipe(PADOFFSET po, bool readjust)
GV Функції
gv_try_downgrade
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Якщо тип glob "gv" можна виразити більш стисло, маючи щось інше
ніж справжній GV на своєму місці в тайнику, замініть його на оптимізовану форму.
Основні вимоги для цього полягають у тому, що «gv» є реальним типом glob, достатньо
звичайний, і посилається лише на його пакет. Ця функція призначена
використовується, коли GV було частково переглянуто, щоб побачити, що там було, викликаючи
оновлення, але на основі знайденого виявляється, що справжній GV не є
зрештою потрібно.
Якщо «gv» є повністю порожнім typeglob, він видаляється зі схованки.
Якщо "gv" є типом glob, що містить лише досить звичайну константу підряд, то
typeglob замінюється на заповнювач скалярного посилання, що більш компактно
представляє те саме.
void gv_try_downgrade(GV* gv)
Мішанина Маніпуляція Функції
hv_ename_add
Додає ім’я до внутрішнього списку ефективних імен схованки. Дивіться «hv_ename_delete».
Це викликається, коли схованка призначається новому місці в таблиці символів.
void hv_ename_add(HV *hv, const char *name, U32 len,
прапори U32)
hv_ename_delete
Видаляє ім’я з внутрішнього списку ефективних імен схованки. Якщо це
ім'я, яке повертає "HvENAME", то його місце займе інше ім'я у списку
("HvENAME" використовуватиме його).
Це викликається, коли схованка видаляється з таблиці символів.
void hv_ename_delete(HV *hv, const char *name,
U32 len, U32 прапори)
refcounted_he_chain_2hv
Генерує та повертає "HV *", що представляє вміст "refcounted_he"
ланцюжок. прапори наразі не використовується і має бути нульовим.
HV * refcounted_he_chain_2hv(
const struct refcounted_he *c, прапори U32
)
refcounted_he_fetch_pv
Як і "refcounted_he_fetch_pvn", але приймає рядок із завершенням нуля замість
пара рядок/довжина.
SV * refcounted_he_fetch_pv(
const struct refcounted_he *ланцюжок,
const char *ключ, хеш U32, прапори U32
)
refcounted_he_fetch_pvn
Шукайте в ланцюжку "refcounted_he" запис із ключем, зазначеним у keypv
та кейлен. Якщо прапори має встановлений біт "REFCOUNTED_HE_KEY_UTF8", ключові октети
інтерпретуються як UTF-8, інакше вони інтерпретуються як Latin-1. мішанина це
попередньо обчислений хеш ключового рядка або нуль, якщо він не був попередньо обчислений.
Повертає смертний скаляр, що представляє значення, пов’язане з ключем або
&PL_sv_placeholder, якщо з ключем немає значення.
SV * refcounted_he_fetch_pvn(
const struct refcounted_he *ланцюжок,
const char *keypv, STRLEN keylen, хеш U32,
Прапори U32
)
refcounted_he_fetch_pvs
Подібно до "refcounted_he_fetch_pvn", але приймає літерний рядок замість a
пара рядок/довжина, без попередньо обчисленого хеша.
SV * refcounted_he_fetch_pvs(
const struct refcounted_he *ланцюжок,
const char *ключ, прапори U32
)
refcounted_he_fetch_sv
Як "refcounted_he_fetch_pvn", але приймає скаляр Perl замість рядка/довжини
пару.
SV * refcounted_he_fetch_sv(
const struct refcounted_he *ланцюжок, SV *ключ,
Хеш U32, прапори U32
)
refcounted_he_free
Зменшує кількість посилань для "refcounted_he" на одиницю. Якщо посилання
count досягає нуля, пам'ять структури звільняється, що (рекурсивно) викликає a
зменшення кількості посилань його батьківського "refcounted_he". Безпечно пройти повз a
нульовий покажчик на цю функцію: у цьому випадку не відбувається жодних дій.
void refcounted_he_free(struct refcounted_he *he)
refcounted_he_inc
Збільште кількість посилань для "refcounted_he". Вказівник на
"refcounted_he" також повертається. Це безпечно передати нульовий покажчик для цього
функція: жодних дій не відбувається, повертається нульовий покажчик.
структура refcounted_he * refcounted_he_inc(
структура refcounted_he *he
)
refcounted_he_new_pv
Як і "refcounted_he_new_pvn", але приймає рядок із завершенням нуля замість
пара рядок/довжина.
структура refcounted_he * refcounted_he_new_pv(
структура refcounted_he *parent,
const char *ключ, хеш U32,
SV *значення, прапори U32
)
refcounted_he_new_pvn
Створює новий "refcounted_he". Він складається з однієї пари ключ/значення та a
посилання на існуючий ланцюжок "refcounted_he" (який може бути порожнім), і таким чином
утворює довший ланцюг. При використанні більш тривалого ланцюга береться нова пара ключ/значення
пріоритет перед будь-яким записом для того самого ключа далі по ланцюжку.
Новий ключ визначається за допомогою keypv та кейлен. Якщо прапори має
Встановлено біт "REFCOUNTED_HE_KEY_UTF8", ключові октети інтерпретуються як UTF-8,
інакше вони інтерпретуються як Latin-1. мішанина є попередньо обчисленим хешем ключа
рядок або нуль, якщо він не був попередньо обчислений.
значення є скалярним значенням для збереження для цього ключа. значення копіюється цим
функція, яка, таким чином, не має права власності на жодне посилання на неї, і пізніше
зміни скаляра не будуть відображені у значенні, видимому в
"refcounted_he". Складні типи скалярів не будуть зберігатися з посиланням
цілісність, але буде примушена до рядків. значення може бути нульовим або
&PL_sv_placeholder, щоб вказати, що жодне значення не пов'язується з ключем;
це, як і будь-яке ненульове значення, має пріоритет перед існуванням значення
для ключа далі по ланцюжку.
батько вказує на решту ланцюжка "refcounted_he", яку потрібно приєднати до нового
"refcounted_he". Ця функція володіє одним посиланням на батько та
повертає одне посилання на новий "refcounted_he".
структура refcounted_he * refcounted_he_new_pvn(
структура refcounted_he *parent,
const char *keypv,
STRLEN keylen, хеш U32,
SV *значення, прапори U32
)
refcounted_he_new_pvs
Як і "refcounted_he_new_pvn", але приймає літерний рядок замість a
пара рядок/довжина, без попередньо обчисленого хеша.
struct refcounted_he * refcounted_he_new_pvs(
структура refcounted_he *parent,
const char *ключ, SV *значення,
Прапори U32
)
refcounted_he_new_sv
Як "refcounted_he_new_pvn", але приймає скаляр Perl замість рядка/довжини
пару.
структура refcounted_he * refcounted_he_new_sv(
структура refcounted_he *parent,
SV *ключ, хеш U32, SV *значення,
Прапори U32
)
IO Функції
start_glob
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Функція, викликана "do_readline", щоб створити glob (або зробити glob всередині perl на
VMS). Раніше цей код був вбудованим, але тепер perl використовує "File::Glob" цього glob
starter використовується тільки в miniperl під час процесу збірки. Переміщення його зменшується
pp_hot.c; скорочення pp_hot.c допомагає пришвидшити Perl.
PerlIO* start_glob(SV *tmpglob, IO *io)
Lexer інтерфейс
validate_proto
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Ця функція виконує перевірку синтаксису прототипу, "proto". Якщо «попередити».
правда, будь-які незаконні символи або невідповідні дужки спричинять illegalproto
попередження, оголошуючи, що вони були виявлені в прототипі для «назва».
Повертається значення "true", якщо це дійсний прототип, і "false", якщо це не так,
незалежно від того, чи було «попередження» «правдивим» чи «неправдивим».
Зауважте, що "NULL" є дійсним "прото" і завжди повертатиме "true".
ПРИМІТКА: форма perl_ цієї функції не підтримується.
bool validate_proto(SV *ім'я, SV *proto, bool попередження)
Магічний Функції
magic_clearhint
Ініціюється видаленням із %^H, записує ключ у "PL_compiling.cop_hints_hash".
int magic_clearhint(SV* sv, MAGIC* mg)
magic_clearhints
Ініціюється очищенням %^H, скидає "PL_compiling.cop_hints_hash".
int magic_clearhints(SV* sv, MAGIC* mg)
magic_methcall
Викликати магічний метод (наприклад, FETCH).
"sv" і "mg" - це зав'язана річ і магія краватки.
"meth" - це назва методу, який потрібно викликати.
"argc" - це кількість аргументів (на додаток до $self) для передачі методу.
«Прапори» можуть бути:
G_DISCARD викликає метод з прапорцем G_DISCARD і ні
повернути значення
G_UNDEF_FILL заповнити стек покажчиками argc на
PL_sv_undef
Самі аргументи є будь-якими значеннями, наступними за аргументом "прапори".
Повертає SV (якщо є), повернутий методом, або NULL у разі відмови.
SV* magic_methcall(SV *sv, const MAGIC *mg,
SV *meth, прапори U32, U32 argc,
...)
magic_sethint
Ініціюється збереженням до %^H, записує пару ключ/значення
"PL_compiling.cop_hints_hash". Передбачається, що підказки нічого не зберігають
це потребує глибокої копії. Можливо, ми повинні попередити, якщо знайдемо посилання.
int magic_sethint(SV* sv, MAGIC* mg)
mg_localize
Скопіюйте частину магії з існуючого SV в нову локалізовану версію цього SV.
Магія контейнера (наприклад, %ENV, $1, галстук) копіюється, магія цінності — ні (наприклад, пляма,
поз).
Якщо setmagic має значення false, то на новому (порожньому) SV не буде викликано ніякий набір. Це
зазвичай означає, що незабаром послідує призначення (наприклад, 'локальний $x = $y'), і це
впорається з магією.
void mg_localize(SV* sv, SV* nsv, bool setmagic)
Різне Функції
free_c_backtrace
Звільняє зворотне трасування, отримане від get_c_bracktrace.
void free_c_backtrace(Perl_c_backtrace* bt)
get_c_backtrace
Збирає зворотне трасування (він же "відслідковування стека") в єдиний лінійний буфер із завантаженням,
який абонент повинен Perl_free_c_backtrace().
Сканує кадри назад за глибиною + пропуск, потім скидає пропуск усередині, повертаючись на
найбільш глибинні рамки.
Perl_c_backtrace* get_c_backtrace(int max_depth,
int пропустити)
MRO Функції
mro_get_linear_isa_dfs
Повертає лінеаризацію пошуку в глибину @ISA даного схованку. Повернення
значення є доступним лише для читання AV*. "рівень" має бути 0 (він використовується внутрішньо в цьому
рекурсія функції).
Ви несете відповідальність за "SvREFCNT_inc()" у поверненому значенні, якщо плануєте зберігати
його де-небудь напівпостійно (інакше він може бути видалений з-під вас
наступного разу, коли кеш стане недійсним).
AV* mro_get_linear_isa_dfs(HV* схованка, рівень U32)
mro_isa_changed_in
Вживає необхідних заходів (переважно недійсні кеш-пам’яті), коли @ISA наведено
пакет змінився. Викликаний магією "setisa", не потрібно викликати
безпосередньо.
void mro_isa_changed_in(HV* схованка)
mro_package_moved
Викличте цю функцію, щоб повідомити схованку, що він призначений в інше місце
в ієрархії схованок. "stash" - це схованка, яка була призначена. "стара схованка"
це схованка, яку він замінює, якщо такий є. "gv" - це глобус, який насправді існує
присвоєно.
Це також можна викликати з нульовим першим аргументом, щоб вказати, що «oldstash» має
було видалено.
Ця функція робить недійсними кеш-пам’ять isa у старому тайнику, у всіх вкладених підпакетах
всередині нього та на підкласах усіх тих, включаючи неіснуючі пакети
які мають відповідні записи в "схованку".
Він також встановлює ефективні назви ("HvENAME") для всіх сховищ відповідно до потреб.
Якщо «gv» присутній і його немає в таблиці символів, то ця функція просто
повертається. Цей прапорець буде пропущено, якщо «прапори & 1».
void mro_package_moved(HV * const stash,
HV * const oldstash,
const GV * const gv,
прапори U32)
Оптрі Маніпуляція Функції
finalize_optree
Ця функція завершує створення оптичного дерева. Потрібно викликати відразу після завершення
побудовано optree. Він виконує додаткову перевірку, яку неможливо зробити в
функціонує нормально ck_xxx і робить дерево потокобезпечним.
void finalize_optree(OP* o)
Пад дані Структури
CX_CURPAD_SAVE
Збережіть поточну панель у заданій структурі блоку контексту.
void CX_CURPAD_SAVE(контекст структури)
CX_CURPAD_SV
Отримайте доступ до SV зі зміщенням po в збереженому поточному блоку в даному контекстному блоці
структуру (можна використовувати як значення l).
SV * CX_CURPAD_SV(контекст структури, PADOFFSET po)
PadnameISOUR
Чи це "наша" змінна.
bool PadnameIsOUR(PADNAME pn)
Ім'я імені IsSTATE
Чи є це змінною "стан".
bool PadnameIsSTATE(PADNAME pn)
Ім'я НАША
Сховище, в якому була оголошена ця «наша» змінна.
HV * PadnameOURSTASH()
Ім'я користувачаOUTER
Чи належить цей запис до зовнішньої панелі. Записи, для яких це правда
часто називають «підробкою».
bool PadnameOUTER(PADNAME pn)
PadnameTYPE
Тайник, пов'язаний із введеним лексиком. Це повертає хеш %Foo:: для "my
Foo $bar".
HV * PadnameTYPE (PADNAME pn)
PAD_BASE_SV
Отримайте значення зі слоту "po" в базовій (DEPTH=1) панелі підсписку
SV * PAD_BASE_SV(PADLIST padlist, PADOFFSET po)
PAD_CLONE_VARS
Клонування змінних стану, пов’язаних із запуском та компіляцією панелей.
void PAD_CLONE_VARS(PerlInterpreter *proto_perl,
CLONE_PARAMS* параметр)
PAD_COMPNAME_FLAGS
Поверніть прапорці для поточної назви панелі компіляції зі зміщенням "po". Припускає а
дійсний запис слота.
U32 PAD_COMPNAME_FLAGS(PADOFFSET po)
PAD_COMPNAME_GEN
Номер генерації імені зі зміщенням "po" в поточній панелі компіляції
(значення l). Зауважте, що «SvUVX» захоплено для цієї мети.
STRLEN PAD_COMPNAME_GEN(PADOFFSET po)
PAD_COMPNAME_GEN_set
Встановлює номер покоління імені зі зміщенням "po" в поточній панелі ling
(lvalue) до "gen". Зверніть увагу, що «SvUV_set» захоплено для цієї мети.
STRLEN PAD_COMPNAME_GEN_set(PADOFFSET po, int gen)
PAD_COMPNAME_OURSTASH
Поверніть схованку, пов'язану з "нашою" змінною. Припускається, що запис слота є a
дійсна «наша» лексична.
HV * PAD_COMPNAME_OURSTASH(PADOFFSET po)
PAD_COMPNAME_PV
Повернути ім’я поточної назви панелі компіляції зі зміщенням «po». Припускає дійсне
вхід в слот.
char * PAD_COMPNAME_PV(PADOFFSET po)
PAD_COMPNAME_TYPE
Повернути тип (сховище) назви поточної компіляційної панелі зі зміщенням "po". Повинно бути
дійсне ім'я. Повертає null, якщо не введено.
HV * PAD_COMPNAME_TYPE (PADOFFSET po)
PAD_RESTORE_LOCAL
Відновіть стару панель, збережену в локальній змінній opad by PAD_SAVE_LOCAL()
void PAD_RESTORE_LOCAL(PAD *opad)
PAD_SAVE_LOCAL
Збережіть поточний пэд у локальній змінній opad, а потім зробіть поточний пэд рівним
на npad
void PAD_SAVE_LOCAL(PAD *opad, PAD *npad)
PAD_SAVE_SETNULLPAD
Збережіть поточну панель і встановіть для неї значення null.
void PAD_SAVE_SETNULLPAD()
PAD_SETSV
Встановіть слот зі зміщенням "po" на поточній панелі на "sv"
SV * PAD_SETSV(PADOFFSET po, SV* sv)
PAD_SET_CUR
Встановіть поточний пэд як пэд "n" у списку падінь, зберігши попередній поточний пэд.
Примітка. Наразі цей макрос розширюється до занадто довгого рядка для деяких компіляторів, тому це так
найкраще замінити на
SAVECOMPPAD();
PAD_SET_CUR_NOSAVE(падписок,n);
void PAD_SET_CUR(список PADLIST, I32 n)
PAD_SET_CUR_NOSAVE
як PAD_SET_CUR, але без збереження
void PAD_SET_CUR_NOSAVE(список PADLIST, I32 n)
PAD_SV Отримайте значення зі зміщенням "po" в поточній панелі
SV * PAD_SV(PADOFFSET po)
PAD_SVl Полегшена версія «PAD_SV». Отримати або встановити значення зі зміщенням "po"
в поточному планшеті. На відміну від "PAD_SV", не друкує діагностику за допомогою -DX. Для
тільки для внутрішнього використання.
SV * PAD_SVl(PADOFFSET po)
SAVECLEARSV
Очистіть значення вказівного поля під час виходу з області. (тобто дія під час виконання 'my')
void SAVECLEARSV(SV **svp)
SAVECOMPPAD
зберегти PL_comppad і PL_curpad
void SAVECOMPPAD()
SAVEPADSV
Зберегти слот для планшета (використовується для відновлення після ітерації)
XXX DAPM було б доцільніше зробити аргумент PADOFFSET
void SAVEPADSV(PADOFFSET po)
За перекладача Змінні
PL_DBsingle
Коли Perl запускається в режимі налагодження, за допомогою -d switch, цей SV є логічним значенням котрого
вказує, чи підключені є одноступінчастими. Поодинокий крок автоматично
вмикається після кожного кроку. Це змінна C, яка відповідає змінній Perl
$DB::одна змінна. Дивіться «PL_DBsub».
SV * PL_DBsingle
PL_DBsub
Коли Perl запускається в режимі налагодження, за допомогою -d перемикач, цей GV містить SV
який містить ім’я субстанції, що налагоджується. Це змінна C, яка
відповідає змінній $DB::sub Perl. Див. «PL_DBsingle».
GV * PL_DBsub
PL_DBtrace
Змінна трасування, що використовується, коли Perl запущено в режимі налагодження, з -d перемикач. Це
є змінною C, яка відповідає змінній $DB::trace Perl. Подивитися
"PL_DBsingle".
SV * PL_DBtrace
PL_downarn
Змінна C, яка відповідає змінній попередження $^W Perl.
bool PL_dowarn
PL_last_in_gv
GV, який востаннє використовувався для операції введення дескриптора файлу. (" ")
GV* PL_last_in_gv
PL_ofsgv
Глобал, що містить роздільник поля виводу - "*" у просторі Perl.
GV* PL_ofsgv
PL_rs Роздільник вхідного запису - $/ у просторі Perl.
SV* PL_rs
Стек Маніпуляція Макрос
djSP Оголосити Just "SP". Це фактично ідентично "dSP" і оголошує локальну копію
покажчика стека perl, доступного через макрос "SP". Дивіться «СП». (Доступний для
зворотна сумісність вихідного коду зі старою моделлю потоків (Perl 5.005).)
djSP;
LVRET Істина, якщо ця операція буде повертати значення підпрограми lvalue
SV Маніпуляція Функції
SV (або AV, HV тощо) поділяється на дві частини: голова (struct sv, av, hv...)
містить інформацію про тип і кількість посилань, а для багатьох типів — вказівник на тіло
(struct xrv, xpv, xpviv...), який містить поля, характерні для кожного типу. Деякі види
зберігати все, що їм потрібно, в голові, тому не мати тіла.
У всіх конфігураціях, окрім більшості параноїдальних пам’яті (наприклад, PURIFY), є голови та тіла
виділені з арен, які за замовчуванням представляють собою розподілені приблизно 4K фрагментів пам’яті
до N голів або тіл. Sv-тіла виділяються за їх типом sv, що гарантує розмір
узгодженість, необхідну для безпечного виділення з масивів.
Для SV-головів перший слот на кожній арені зарезервований і містить посилання на наступний
арена, кілька прапорців і примітка про кількість слотів. Змійкою через кожну арену ланцюг є
пов’язаний список безкоштовних товарів; коли це стає порожнім, виділяється додаткова арена і
поділено на N елементів, які включені у вільний список.
SV-тіла подібні, але за замовчуванням вони використовують арени-набори, які розділяють посилання і
інформацію з самої арени та повернути 1-й слот на арені. СВ-тіла знаходяться далі
описано пізніше.
З аренами пов’язані такі глобальні змінні:
PL_sv_arenaroot покажчик на список арен SV
PL_sv_root покажчик на список вільних структур SV
PL_body_arenas керівник зв'язаного списку арен тіла
PL_body_roots[] масив покажчиків на список вільних тіл svtype
масиви індексуються необхідним типом svtype
Кілька спеціальних голів SV не виділяються з арени, а замість цього створюються безпосередньо
у структурі інтерпретатора, наприклад, PL_sv_undef. Розмір арен можна змінювати з
за замовчуванням шляхом відповідного налаштування PERL_ARENA_SIZE під час компіляції.
Арена SV служить другорядній меті, щоб дозволити розташовувати і зберігати живі SV
знищено під час остаточного очищення.
На найнижчому рівні макроси new_SV() та del_SV() захопити та звільнити голову SV. (Якщо
налагодження за допомогою -DD, del_SV() викликає функцію S_del_sv() повернути SV у вільний
список із перевіркою помилок.) new_SV() дзвінки more_sv() / sv_add_arena() щоб додати додаткову арену
якщо вільний список порожній. SV у вільному списку мають для поля SvTYPE значення всі.
Під час останнього прибирання, sv_free_arenas() викликається з perl_destruct() до
фізично звільнити всі арени, виділені з моменту початку роботи перекладача.
Функція відвідати() сканує список арен SV і викликає певну функцію для кожного SV
він знаходить, що все ще активне, тобто яке має SvTYPE, відмінний від усіх 1, і ненульовий
SvREFCNT. відвідати() використовується наступними функціями (зазначеними як [функція, яка викликає
відвідати()] / [функція, викликана відвідати() для кожного SV]):
sv_report_used() / do_report_used()
скинути всі решту SV (допоміжний засіб для налагодження)
sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
do_clean_named_io_objs(),do_curse()
Спроба звільнити всі об'єкти, на які вказують RV,
спробуйте зробити те саме для всіх об'єктів
на які також посилаються typeglobs, і
потім виконайте останній розмах, проклинаючи будь-який
об’єкти, які залишилися. Дзвонив один раз з
perl_destruct(), перед викликом sv_clean_all()
нижче.
sv_clean_all() / do_clean_all()
SvREFCNT_dec(sv) кожен SV, що залишився, можливо
запуск sv_free(). Він також встановлює
Прапор SVf_BREAK на SV, щоб вказати, що
refcnt був штучно знижений, і таким чином
зупинити sv_free() від надання помилкових попереджень
про SV, які несподівано мають рефкт
з нуля. неодноразово викликається з perl_destruct()
поки не залишиться жодного SV.
SvПОДУМАЙТЕ СПОЧАТКУ
Швидка перевірка прапорця, щоб побачити, чи потрібно передавати sv_force_normal до sv_force_normal
"понижено" до того, як SvIVX або SvPVX можна буде безпосередньо змінити.
Наприклад, якщо ваш скаляр є еталонним і ви хочете змінити слот SvIVX,
ви не можете просто виконати SvROK_off, оскільки це призведе до витоку референта.
Це використовується внутрішньо різними функціями, що змінюють sv, такими як sv_setsv,
sv_setiv і sv_pvn_force.
Один випадок, який це не обробляє, - це gv без набору SvFAKE. Після
if (SvTHINKFIRST(gv)) sv_force_normal(gv);
це все одно буде gv.
SvTHINKFIRST іноді дає помилкові результати. У цих випадках sv_force_normal
нічого не робить.
U32 Sv ПОДУМАЙТЕ СПОЧАТКУ(SV *sv)
sv_add_arena
Враховуючи шматок пам’яті, зв’яжіть його з головною частиною списку арен і розділіть
у список безкоштовних SV.
void sv_add_arena(char *const ptr, const U32 розмір,
const прапори U32)
sv_clean_all
Зменште значення refcnt кожного SV, що залишився, що, можливо, ініціює очищення. Це
функція може бути викликана кілька разів, щоб звільнити SV, які знаходяться в комплексі
самореференційні ієрархії.
I32 sv_clean_all()
sv_clean_objs
Спробуйте знищити всі ще не звільнені об'єкти.
void sv_clean_objs()
sv_free_arenas
Звільніть пам’ять, яку використовують усі арени. Зверніть увагу, що всі окремі головки SV
а тіла на аренах, мабуть, вже були звільнені.
void sv_free_arenas()
SV-Body Виділення
sv_2num ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Поверніть SV з числовим значенням вихідного SV, виконавши все необхідне
перетворення посилання або перевантаження. Очікується, що абонент впорається з отриманням-
вже магія.
SV* sv_2num(SV *const sv)
sv_copypv
Копіює строкове представлення вихідного SV в цільовий SV.
Автоматично виконує будь-який необхідний mg_get та приведення числових значень у
струни. Гарантовано збереження прапора UTF8 навіть від перевантажених об’єктів. Подібні
за своєю природою до sv_2pv[_flags], але працює безпосередньо на SV, а не лише на
рядок. Здебільшого використовує sv_2pv_flags для виконання своєї роботи, за винятком випадків, коли це втрачає
UTF-8'ність PV.
void sv_copypv(SV *const dsv, SV *const ssv)
sv_ref Повертає SV, що описує те, на що передано SV є посиланням.
SV* sv_ref(SV *dst, const SV *const sv,
const int ob)
Unicode Підтримка
find_uninit_var
ПРИМІТКА: ця функція є експериментальною і може бути змінена або видалена без попередження.
Знайдіть ім’я невизначеної змінної (якщо така є), яка викликала видачу оператора
попередження «Використання неініціалізованого значення». Якщо відповідність істина, повертайте лише ім’я if
його значення відповідає uninit_sv. Таким чином, грубо кажучи, якщо унарний оператор (наприклад
OP_COS) генерує попередження, після чого прямий дочірній дочірній оператор може дати результат
OP_PADSV або OP_GV, що дає ім'я невизначеної змінної. З іншого
З боку OP_ADD є дві гілки, які слідують, тому ми друкуємо лише змінну
ім'я, якщо ми отримаємо точну відповідність. desc_p вказує на вказівник рядка, що містить
опис оп. За потреби це може бути оновлено.
Ім'я повертається як смертний СВ.
Припускається, що PL_op є операцією, яка спочатку викликала помилку, і це
PL_comppad/PL_curpad вказує на поточну виконувану панель.
SV* find_uninit_var(const OP *const obase,
const SV *const uninit_sv,
bool відповідність, const char **desc_p)
звіт_підрозділ
Надрукуйте відповідне попередження «Використання неініціалізованої змінної».
void report_uninit(const SV *uninit_sv)
Недокументований Функції
Наступні функції наразі не задокументовані. Якщо ви скористаєтеся одним із них, ви можете побажати
розглянути створення та подання документації для нього.
PerlIO_restore_errno
PerlIO_save_errno
Slab_Alloc
Без плити
Плита_то_ро
Slab_to_rw
_add_range_to_invlist
_core_swash_init
_get_encoding
_get_swash_invlist
_invlist_array_init
_invlist_contains_cp
_invlist_contents
_invlist_dump
_invlist_intersection
_invlist_intersection_maybe_complement_2nd
_invlist_invert
_invlist_len
_invlist_populate_swatch
_invlist_search
_invlist_subtract
_invlist_union
_invlist_union_maybe_complement_2nd
_load_PL_utf8_foldclosures
_новий_invlist
_setup_canned_invlist
_swash_inversion_hash
_swash_to_invlist
_to_fold_latin1
_до_верхнього_заголовка_латиниця1
_warn_problematic_locale
aassign_common_vars
add_cp_to_invlist
alloc_maybe_populate_EXACT
аллокмия
amagic_is_enabled
застосовувати
av_extend_guts
av_reify
bind_match
boot_core_PerlIO
boot_core_UNIVERSAL
boot_core_mro
cando
check_utf8_print
ck_anoncode
ck_backtick
ck_bitop
ck_cmp
ck_concat
ck_defined
ck_delete
ck_each
ck_entersub_args_core
ck_eof
ck_eval
ck_exec
ck_exists
ck_ftst
ck_fun
ck_glob
ck_grep
ck_index
ck_join
ck_length
ck_lfun
ck_listiob
ck_match
ck_method
ck_null
ck_open
ck_prototype
ck_readline
ck_refassign
ck_repeat
ck_require
ck_return
ck_rfun
ck_rvconst
ck_sassign
ck_select
ck_shift
ck_smartmatch
ck_sort
ck_spair
ck_split
ck_stringify
ck_subr
ck_substr
ck_svconst
ck_tell
ck_trunc
найближчий поліцейський
compute_EXACTish
coresub_op
create_eval_scope
croak_no_mem
croak_popstack
поточний_пере_двигун
custom_op_get_field
cv_ckproto_len_flags
cv_clone_into
cv_const_sv_or_av
cv_undef_flags
cvgv_from_hek
cvgv_set
cvstash_set
deb_stack_all
defelem_target
delete_eval_scope
die_unwind
do_aexec
do_aexec5
do_eof
do_exec
do_exec3
do_execfree
do_ipctl
do_ipcget
do_msgrcv
do_msgsnd
do_ncmp
do_open6
do_open_raw
do_print
do_readline
do_seek
do_semop
do_shmio
do_sysseek
зробити_розповісти
do_trans
do_vecget
do_vecset
do_vop
dofile
drand48_init_r
drand48_r
dump_all_perl
dump_packsubs_perl
dump_sub_perl
dump_sv_child
emulate_cop_io
feature_is_enabled
find_lexical_cv
find_runcv_where
find_rundefsv2
find_script
free_tied_hv_pool
get_and_check_backslash_N_name
get_db_sub
get_debug_opts
get_hash_seed
get_invlist_iter_addr
get_invlist_offset_addr
get_invlist_previous_index_addr
get_no_modify
get_opargs
get_re_arg
getenv_len
grok_atoUV
grok_bslash_x
gv_fetchmeth_internal
gv_override
gv_setref
gv_stashpvn_internal
gv_stashsvpvn_cached
hfree_next_entry
hv_backreferences_p
hv_kill_backrefs
hv_placeholders_p
hv_undef_flags
init_argv_symbols
init_constants
init_dbargs
init_debugger
інвертувати
invlist_array
invlist_clone
invlist_highest
invlist_iterating
invlist_iterfinish
invlist_iterinit
invlist_max
invlist_previous_index
invlist_set_len
invlist_set_previous_index
invlist_trim
io_close
is_utf8_common
isinfnansv
можливо
ключове слово
стандартний_плагін_ключового слова
список
локалізувати
magic_clear_all_env
magic_cleararylen_p
magic_clearenv
magic_clearisa
magic_clearpack
magic_clearsig
magic_copycallchecker
magic_existspack
magic_freearylen_p
magic_freeovrld
magic_get
magic_getarylen
magic_getdebugvar
magic_getdefelem
magic_getkeys
magic_getpack
magic_getpos
magic_getsig
magic_getsubstr
magic_gettaint
magic_getuvar
magic_getvec
magic_killbackrefs
magic_nextpack
magic_regdata_cnt
magic_regdatum_get
magic_regdatum_set
magic_scalarpack
magic_set
magic_set_all_env
magic_setarylen
magic_setcollxfrm
magic_setdbline
magic_setdebugvar
magic_setdefelem
magic_setenv
magic_setisa
magic_setlref
magic_setmglob
magic_setkeys
magic_setpack
magic_setpos
magic_setregexp
magic_setsig
magic_setsubstr
magic_settaint
magic_setutf8
magic_setuvar
magic_setvec
magic_sizepack
magic_wipepack
malloc_good_size
malloced_size
mem_collxfrm
mg_find_mglob
режим_від_дисципліни
більше_тіл
mro_meta_dup
mro_meta_init
multideref_stringify
мої_атр
my_clearenv
my_lstat_flags
my_stat_flags
мій_unexec
новийATTRSUB_x
новий ГП
newMETHOP_internal
newSTUB
новийСавдефелем
newXS_deffile
newXS_len_flags
new_warnings_bitfield
nextargv
noperl_die
упсАВ
oopsHV
op_clear
op_інтегрувати
op_lvalue_flags
op_refcnt_dec
op_refcnt_inc
op_relocate_sv
op_std_init
op_unscope
opmethod_stash
opslab_force_free
opslab_free
opslab_free_nopad
пакет
пакет_версія
pad_add_weakref
padlist_store
padname_free
padnamelist_free
синтаксичний_підпис
parse_unicode_opts
parser_free
parser_free_nexttoke_ops
шлях_доступний для пошуку
писк
pmruntime
заселити_isa
ptr_hash
помилка
re_op_compile
reg_named_buff
reg_named_buff_iter
reg_numbered_buff_fetch
reg_numbered_buff_length
reg_numbered_buff_store
reg_qr_package
reg_skipcomment
reg_temp_copy
регулярно
regpposixcc
regprop
report_evil_fh
report_redefined_cv
report_wrongway_fh
rpeep
rsignal_restore
rsignal_save
rxres_save
той самий_директор
save_aliased_sv
зберегти_strlen
пилки
скалярний
скалярноїд
set_caret_X
set_padlist
should_warn_nl
сігхендлер
softref2xv
ssc_add_range
ssc_clear_locale
ssc_cp_and
ssc_перехрестя
ssc_union
sub_crush_depth
sv_add_backref
св_буф_то_ро
sv_del_backref
sv_free2
sv_kill_backrefs
sv_len_utf8_nomg
sv_magicext_mglob
sv_mortalcopy_flags
sv_only_taint_gmagic
sv_or_pv_pos_u2b
sv_resetpvn
sv_sethek
sv_setsv_cow
sv_unglob
прив'язаний_метод
tmps_grow_p
translate_substr_offsets
try_amagic_bin
try_amagic_un
unshare_hek
використовувати
ім'я вар
vivify_defelem
vivify_ref
wait4pid
was_lvalue_sub
дивитися
win32_croak_not_implemented
write_to_stderr
xs_boot_epilog
xs_handshake
yyпомилка
yyerror_pv
yyerror_pvn
yylex
yyparse
yyunlex
AUTHORS
Систему автодокументації спочатку додав до ядра Perl Бенджамін Стул.
Документація здійснюється тим, хто був достатньо люб'язний, щоб задокументувати свої функції.
Використовуйте perlintern онлайн за допомогою служб onworks.net