From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Matt Wette Newsgroups: gmane.lisp.guile.bugs Subject: bug#31154: predicate function for foreign-object not obvious Date: Sat, 14 Apr 2018 11:33:59 -0700 Message-ID: <689d625b-94f7-919b-c017-fa921d54c744@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1523730787 19579 195.159.176.226 (14 Apr 2018 18:33:07 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 14 Apr 2018 18:33:07 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 To: 31154@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Sat Apr 14 20:33:03 2018 Return-path: Envelope-to: guile-bugs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f7Pyw-0004um-8V for guile-bugs@m.gmane.org; Sat, 14 Apr 2018 20:33:02 +0200 Original-Received: from localhost ([::1]:55469 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f7Q11-000760-A2 for guile-bugs@m.gmane.org; Sat, 14 Apr 2018 14:35:11 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41864) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f7Q0v-00075f-3m for bug-guile@gnu.org; Sat, 14 Apr 2018 14:35:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f7Q0r-00049q-Vs for bug-guile@gnu.org; Sat, 14 Apr 2018 14:35:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:44706) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f7Q0r-00049b-Rq for bug-guile@gnu.org; Sat, 14 Apr 2018 14:35:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1f7Q0r-0007ZI-Ld for bug-guile@gnu.org; Sat, 14 Apr 2018 14:35:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Matt Wette Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Sat, 14 Apr 2018 18:35:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 31154 X-GNU-PR-Package: guile X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-guile@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.152373085729032 (code B ref -1); Sat, 14 Apr 2018 18:35:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 14 Apr 2018 18:34:17 +0000 Original-Received: from localhost ([127.0.0.1]:52603 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f7Q08-0007YC-IK for submit@debbugs.gnu.org; Sat, 14 Apr 2018 14:34:16 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:50400) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1f7Q05-0007Xv-9U for submit@debbugs.gnu.org; Sat, 14 Apr 2018 14:34:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f7Pzz-0003VE-CR for submit@debbugs.gnu.org; Sat, 14 Apr 2018 14:34:08 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:44102) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f7Pzz-0003V1-9W for submit@debbugs.gnu.org; Sat, 14 Apr 2018 14:34:07 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:41322) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f7Pzx-0006sV-V1 for bug-guile@gnu.org; Sat, 14 Apr 2018 14:34:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f7Pzu-0003SK-O2 for bug-guile@gnu.org; Sat, 14 Apr 2018 14:34:05 -0400 Original-Received: from mail-pl0-x22e.google.com ([2607:f8b0:400e:c01::22e]:41665) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f7Pzu-0003Ru-IE for bug-guile@gnu.org; Sat, 14 Apr 2018 14:34:02 -0400 Original-Received: by mail-pl0-x22e.google.com with SMTP id bj1-v6so7809104plb.8 for ; Sat, 14 Apr 2018 11:34:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=b5IT9L9VbsdYl2taZhBE2IhsE9gsWC3fZChv+MHUPjU=; b=StwXBwNjcfqovfVJoWhRRZ2ulAhUY/Dzy7QBN2Mk2HVyewEtAMYi3d2Wd8qT13nmL2 kOvIJilzzEZ43tYHugqLmRsum1b3kaQT1RuOb0l1ihwTsJIXFPgkMcdQg5SDwPlqv35U RZGzHrHaWe9Q1mID1x8pAY+C+0aHob6VAqCg/HRCd7HZDZNgWM9ok/4Yn61dZjr++Hzh CmCcDRiJyWpkvnlNjphO9wUlQQyvXDZvzFu2AIY0bXdSRgUnrbzYzhhW6oh148e6jZta NCafZ4f2ts17VUz3ox9voVN3SPBw+/FseCJ1+s3gXQ7ZgbhijtYhiQXEzxq7Cqt9fHsX CXVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-transfer-encoding:content-language; bh=b5IT9L9VbsdYl2taZhBE2IhsE9gsWC3fZChv+MHUPjU=; b=WTEEDOynWukbwoqUdnqZyuWdt384mBCl98jL1q0QiqkoLbor114B3abJ2MF4n2djo4 +dPoFXAh0BDJoOAej9LU+R8+aGAVuy/sUQj0wRlas18cr4aRp7ExijMOX9DobefMYfsh pX5QgtOV7u9Y/DFelz6CBwCP0/lMmvMDHl9jxO7/ZSR61xLlsMAXEa9xbvLJxZMjxese gzKcJgJC89SnhS8BXfzzn/BPD9hqhmsRgoIhk3U/mjJu8dDwFLnDnLBdhBsDNCm0PqF+ 0JKR4J2uRvUpNNrurOjOaeDC437zM10TdR4BVEe+lPkFncrwQE3SRGI8DZVXbrrr9u3p QvRg== X-Gm-Message-State: ALQs6tB4hD+LWZhx0qr3lc/i5TFGTcZ6mzDthgRWLiNHrLIAHj+/PM+i W53ywmiVUdrApca2y4lkq+KPev8/ X-Google-Smtp-Source: AIpwx4/yr1eeKiSi0f5aUG/pw4YAtqvdes4CGUVdhSy7SpRVviboMSBwniecD2DpdS3M8FlAWt5A1Q== X-Received: by 2002:a17:902:7405:: with SMTP id g5-v6mr9631350pll.4.1523730841308; Sat, 14 Apr 2018 11:34:01 -0700 (PDT) Original-Received: from [192.168.2.183] (216-165-229-229.championbroadband.com. [216.165.229.229]) by smtp.gmail.com with ESMTPSA id a12sm19838981pfe.78.2018.04.14.11.34.00 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 14 Apr 2018 11:34:00 -0700 (PDT) Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.org gmane.lisp.guile.bugs:9038 Archived-At: The reference manual (guile-2.2.3) does not provide instruction on how to generate a predicate for a foreign object, and it is not obvious. Maybe it doesn't need to be in the manual but should then be in an example somewhere, IMO. The following patch to the reference manual is one option: --- doc/ref/api-foreign-objects.texi-orig 2018-04-14 11:26:35.779502997 -0700 +++ doc/ref/api-foreign-objects.texi 2018-04-14 11:28:42.823072217 -0700 @@ -96,6 +96,33 @@ needed. @end deftypefn +To generate a predicate for a foreign object use the @code{SCM_IS_A_P} +macro as follows. + +@example +static SCM foo_type; + +static SCM +scm_foo_p(SCM obj) { + return SCM_IS_A_P(obj, foo_type)? SCM_BOOL_T: SCM_BOOL_F; +} + +void +init_foo() +{ + SCM name, slots; + + name = scm_from_utf8_symbol("foo"); + slots = scm_list_2 (scm_from_utf8_symbol ("data"), + scm_from_utf8_symbol ("deps")); + finalizer = NULL; + foo_type = scm_make_foreign_object_type(name, slots, finalizer); + + scm_c_define_gsubr("foo?", 1, 0, 0, scm_foo_p); + ... +} +@end example + One can also access foreign objects from Scheme. @xref{Foreign Objects and Scheme}, for some examples.