From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: KAction@gnu.org Newsgroups: gmane.lisp.guile.devel Subject: [PATCH 03/25] Mirror types from system/foreign as Date: Mon, 18 Jul 2016 18:17:26 +0300 Message-ID: <1468855068-7029-4-git-send-email-KAction@gnu.org> References: <1468855068-7029-1-git-send-email-KAction@gnu.org> NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1468855163 9317 80.91.229.3 (18 Jul 2016 15:19:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 18 Jul 2016 15:19:23 +0000 (UTC) Cc: Dmitry Bogatov To: guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Mon Jul 18 17:19:10 2016 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1bPAK6-0002qs-Gg for guile-devel@m.gmane.org; Mon, 18 Jul 2016 17:19:10 +0200 Original-Received: from localhost ([::1]:48253 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPAK5-0005jp-I6 for guile-devel@m.gmane.org; Mon, 18 Jul 2016 11:19:09 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36987) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPAJP-0004vT-5L for guile-devel@gnu.org; Mon, 18 Jul 2016 11:18:28 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bPAJL-0001RE-Gh for guile-devel@gnu.org; Mon, 18 Jul 2016 11:18:26 -0400 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:54454) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPAJL-0001QM-De for guile-devel@gnu.org; Mon, 18 Jul 2016 11:18:23 -0400 Original-Received: from broadband-46-188-10-23.2com.net ([46.188.10.23]:56718 helo=localhost) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.82) (envelope-from ) id 1bPAJJ-0004E5-FA; Mon, 18 Jul 2016 11:18:21 -0400 X-Mailer: git-send-email 2.1.4 In-Reply-To: <1468855068-7029-1-git-send-email-KAction@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Original-Sender: "guile-devel" Xref: news.gmane.org gmane.lisp.guile.devel:18562 Archived-At: From: Dmitry Bogatov * module/system/foreign/declarative.scm: import (system foreign), where identifiers `int', 'long' and so on are declared * module/system/foreign/declarative.scm: with two helper macros `mirror-primitive-type' and `mirror-primitive-types' create for every foreign type defined in (system foreign). In some sence, it builds base case for future code, that will build complex s from more simple. --- module/system/foreign/declarative.scm | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/module/system/foreign/declarative.scm b/module/system/foreign/declarative.scm index 5c38416..b13bcf4 100644 --- a/module/system/foreign/declarative.scm +++ b/module/system/foreign/declarative.scm @@ -18,6 +18,7 @@ #:export (make-foreign-type) #:export (define-foreign-type)) (use-modules (srfi srfi-9)) +(use-modules (system foreign)) (define-record-type (%make-foreign-type name encode-proc decode-proc type clone-proc free-proc) @@ -56,4 +57,23 @@ (%make-foreign-type name encode-proc decode-proc type clone-proc free-proc)) (define-syntax-rule (define-foreign-type name args ...) - (define name (make-foreign-type 'name args ...))) + (define-public name (make-foreign-type 'name args ...))) + +(define-syntax mirror-primitive-type + (lambda (x) + (syntax-case x () + ((_ prim ft) + #'(define-foreign-type ft + #:encode-proc (lambda (x) x) + #:decode-proc (lambda (x) x) + #:type prim)) + ((_ prim) + (with-syntax + ((ft (datum->syntax x (symbol-append (syntax->datum #'prim) ':)))) + #'(mirror-primitive-type prim ft)))))) +(define-syntax-rule (mirror-primitive-types prim ...) + (begin + (mirror-primitive-type prim) ...)) +(mirror-primitive-types + size_t int long ptrdiff_t int8 int16 int32 int64 uint8 uint16 uint32 uint64) +(mirror-primitive-type '* *:) -- I may be not subscribed. Please, keep me in carbon copy.