[Moscow.pm] Вопрос про возвращаемые значения из Perl XS

aznaourian nikita nikita-aznaourian на yandex.ru
Пт Июл 9 08:12:28 PDT 2010


Есть XS процедура, которая возвращает ссылку на массив SV*.

В процедуре создается новый массив

AV* array = (AV*)sv_2mortal((SV*)newAV()); 

AV* array2 = newAV();

av_push(newArray, newSVpv("value2", 0));
av_push(newArray, (SV*)newArray2);

return newRV((SV*)newArray);

При этом в перле выводится следующее:
[
'value',
undef
];

cобсвтенно вопрос - почему? Как работает XS сборщик мусора? Понятно, что REFCNT для newArray2 = 1, Но он также равен 1 и для newSVpv(...)
В чем разница между этими двумя указателями?

Понятно, что можно это исправить , если второй массив тоже сделать с mortal. Но не понятно, почему, так происходит.



Подробная информация о списке рассылки Moscow-pm