Добрый день! On Tue, 12 Jan 2016, imz@altlinux.org wrote: >> Вот продолжение -- промежуточный этап (пока не очень полезный) >> создания переписывателя GNU C extensions. >> >> На этом этапе он должен ставить вложенные функции на верхний уровень >> (без какой-либо проверки и переписывания параметров и т.п.; но с точки mike@ столкнулся с вложенными функциями в gpm -- http://lists.linux.it/pipermail/gpm/2011-April/001122.html . Это как раз хороший пример на read-only вложенные функции. Как я писал, по сложности переписывания их можно классифицировать на: 1. pure (придумалось короткое понятное слово для их обозначения), 2. read-only 3. и read-write. (Это же соответствует порядку предполагаемой реализации такой возможности в cuglify/Process.) Пока примера реальных исходников, с которыми можно было бы расправиться на втором этапе, не было; например, в rpm наблюдалась смесь pure и read-write вложенных функций -- как я разбирал: > На одном из следующих этапов ожидается (ещё до окончательной > готовности), что преобразователь будет уметь правильно работать с > вложенными функциями, которые только читают переменные из local scope > (но не пишут в них). (На этапе 1, описанном в предыдущем сообщении -- > только с теми, которые не пишут и не читают. + нет конфликтов имён) > > В поиске простых вложенных функций посмотрим на патч (предложил mike@) > http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=commitdiff;h=2cee1a78a713a9e9cb2dfc66a5310d497e72dd33 > (committer Gleb Fotengauer-Malinovskiy > Thu, 21 May 2015 15:08:21 +0000 (18:08 +0300)). > > Ищем примеры таких вложенных функций в реальном коде, которые > преобразователь, умеющий ещё не всё, смог бы уже правильно преобразовать. > > Кое-что простое тут находится. > > Функции, затронутые в этом патче: > > put_digit: на первый взгляд read-only > (читает указатель, пишет уже туда; > могло бы годиться для следующего промежуточного этапа), но на самом > деле меняет и указатель и потом это изменённое значение используется, > так что: r/w > > put6bits, put4bits: то же (r/w) > > log2i: none (ни читает, ни пишет; т.е. годится для теста сейчас) > > cmp: none > hash: none > uniqv: none > > -- эти тоже. > > > Best regards, > Ivan >