From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DNS_FROM_AHBL_RHSBL,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2,SPF_PASS,T_FREEMAIL_FORGED_FROMDOMAIN, T_HEADER_FROM_DIFFERENT_DOMAINS autolearn=no autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:subject:in-reply-to:message-id:references :user-agent:mime-version:content-type; bh=KQUgcloHEuPtYJw/keXNdROt5A/9kZ5da7rgQy3nHV0=; b=TYBu3pl/edTjJAH7dSZmk3bIuKqWT8sGBF7IjTajHERLN0hSYHPRnFPAWWwDsxK8I6 dIDjKYR4rIItqGsN/PxojdkPMkvh8FK/yFG48u/9RHsUZGQl/YysxffWoVaTW2K7zHch WL5NbwvpVgwNhaeE2bCw+7kGYl0zSAkZyZv1WrFUdBbyhs7GkLKgLRiB2wIh1MAr2qho ja5P6+iYYsowB2407mswhEXIO6W3ZL6xukhUPnOUotXJW+zkwTyaE+gyEw/89b6ieLdl QjGC1SJY+CvPYehSWlEwogoyaHPhZ2/jQjEuLWODGEN4M/OtT9Hjk+ngTjK++Y1fMBJ+ qNzg== X-Received: by 10.112.169.74 with SMTP id ac10mr2193243lbc.123.1452536507180; Mon, 11 Jan 2016 10:21:47 -0800 (PST) Sender: Ivan Zakharyaschev Date: Mon, 11 Jan 2016 21:21:45 +0300 (MSK) From: Ivan Zakharyaschev X-X-Sender: imz@ovicaa.localdomain To: devel@lists.altlinux.org In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="8323328-1528274105-1452536506=:4319" Subject: Re: [devel] re-writing GNU C extensions (part1) X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jan 2016 18:21:49 -0000 Archived-At: List-Archive: List-Post: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-1528274105-1452536506=:4319 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8BIT Вот продолжение -- промежуточный этап (пока не очень полезный) создания переписывателя GNU C extensions. На этом этапе он должен ставить вложенные функции на верхний уровень (без какой-либо проверки и переписывания параметров и т.п.; но с точки зрения внутреннего устройства это приближает к реализации цели). Представлен в репозитории: http://hub.darcs.net/imz/language-c_1_process_analyze-printAST (1 -- по номеру сообщения; в предыдущем сообщении уже было в основном описано, как производить его запуск и пр. это сообщение сохранено как [ann1.md](http://hub.darcs.net/imz/cuglify/browse/ann1.md).) Сборка: ======= На этот раз изменённую библиотеку стоит поставить в свой отдельный sandbox, собрать с ней examples/Process (в этом случае такой порядок действий darcs проверен, а при другом можно наткнуться на неприятности, к сожаленью): [imz@vb2 ~]$ cd public/cuglify-WIP/ [imz@vb2 cuglify-WIP]$ darcs clone language-c_process_analyze-printAST language-c_1_process_analyze-printAST [imz@vb2 cuglify-WIP]$ cd language-c_1_process_analyze-printAST [imz@vb2 language-c_1_process_analyze-printAST]$ darcs pull -a http://hub.darcs.net/imz/language-c_1_process_analyze-printAST [imz@vb2 language-c_1_process_analyze-printAST]$ cabal sandbox init [imz@vb2 language-c_1_process_analyze-printAST]$ cabal install [imz@vb2 language-c_1_process_analyze-printAST]$ cabal exec -- make -C examples Process Тестирование: ============= [imz@vb2 language-c_1_process_analyze-printAST]$ cd ../cuglify/ [imz@vb2 cuglify]$ ./run-tests.sh ../language-c_1_process_analyze-printAST/examples/Process PROCESSING ex-nested.c... * with gcc -c: 0 * with ../language-c_1_process_analyze-printAST/examples/Process: int g(int x) { return b + x + a; } void f(int a) { int b = 5; g(0); g(1); g(2); } 0 * diff against gcc -E: --- /dev/fd/63 2016-01-11 21:09:08.920889328 +0300 +++ /dev/fd/62 2016-01-11 21:09:08.920889328 +0300 @@ -1,11 +1,10 @@ -# 1 "ex-nested.c" -# 1 "" -# 1 "ex-nested.c" -void f(int a) { - int b = 5; - int g(int x) { +int g(int x) +{ return b + x + a; - } +} +void f(int a) +{ + int b = 5; g(0); g(1); g(2); TEST OK on ex-nested.c PROCESSING ex-nested_typemismatch.c... * with gcc -c: ex-nested_typemismatch.c: In function ‘f’: ex-nested_typemismatch.c:7:4: error: called object ‘b’ is not a function 1 * with ../language-c_1_process_analyze-printAST/examples/Process: Process: user error (ex-nested_typemismatch.c:7: (column 3) [ERROR] >>> AST invariant violated attempt to call non-function of type int ) 1 TEST OK on ex-nested_typemismatch.c PROCESSING ex-nested_undef.c... * with gcc -c: 0 * with ../language-c_1_process_analyze-printAST/examples/Process: ex-nested_undef.c:7: (column 3) [WARNING] >>> AST invariant violated unknown function: h int g(int x) { return b + x + a; } void f(int a) { int b = 5; g(0); h(1); g(2); } 0 * diff against gcc -E: ex-nested_undef.c:7: (column 3) [WARNING] >>> AST invariant violated unknown function: h --- /dev/fd/63 2016-01-11 21:09:09.069878241 +0300 +++ /dev/fd/62 2016-01-11 21:09:09.070878166 +0300 @@ -1,11 +1,10 @@ -# 1 "ex-nested_undef.c" -# 1 "" -# 1 "ex-nested_undef.c" -void f(int a) { - int b = 5; - int g(int x) { +int g(int x) +{ return b + x + a; - } +} +void f(int a) +{ + int b = 5; g(0); h(1); g(2); TEST OK on ex-nested_undef.c PROCESSING ex-nested-with-id-collisions.c... * with gcc -c: ex-nested-with-id-collisions.c: In function ‘g’: ex-nested-with-id-collisions.c:10:5: warning: return makes integer from pointer without a cast [enabled by default] 0 * with ../language-c_1_process_analyze-printAST/examples/Process: void f(int x); void g(int x); void h(int x); int b = 11; int g(int x) { return f + x + a; } void f(int a) { int b = 5; g(0); g(1); g(2); } void f(int y); void g(int y); void h(int y); 0 * diff against gcc -E: --- /dev/fd/63 2016-01-11 21:09:09.178870130 +0300 +++ /dev/fd/62 2016-01-11 21:09:09.178870130 +0300 @@ -1,23 +1,18 @@ -# 1 "ex-nested-with-id-collisions.c" -# 1 "" -# 1 "ex-nested-with-id-collisions.c" void f(int x); void g(int x); void h(int x); - int b = 11; - -void f(int a) { - int b = 5; - int g(int x) { +int g(int x) +{ return f + x + a; - } - +} +void f(int a) +{ + int b = 5; g(0); g(1); g(2); } - void f(int y); void g(int y); void h(int y); TEST OK on ex-nested-with-id-collisions.c [imz@vb2 cuglify]$ Вопросы: ======== Остаются вопросы помимо реализации задуманного преобразования, как я писал, про встройку программы с таким интерфейсом в gcc, clang и т.п., обнаружение ошибок. Best regards, Ivan --8323328-1528274105-1452536506=:4319--