Sent via the Samsung GALAXY S® 5, an AT&T 4G LTE smartphone -------- Original message -------- From: users-requ...@racket-lang.org Date:02/02/2015 11:00 AM (GMT-06:00) To: users@racket-lang.org Cc: Subject: users Digest, Vol 114, Issue 3 Send users mailing list submissions to users@racket-lang.org To subscribe or unsubscribe via the World Wide Web, visit http://lists.racket-lang.org/users/listinfo or, via email, send a message with subject or body 'help' to users-requ...@racket-lang.org You can reach the person managing the list at users-ow...@racket-lang.org When replying, please edit your Subject line so it is more specific than "Re: Contents of users digest..." [Racket Users list: http://lists.racket-lang.org/users ] Today's Topics: 1. Re: forward pointer declarations (Anthony Carrico) 2. Re: forward pointer declarations (Sam Tobin-Hochstadt) 3. Re: forward pointer declarations (Anthony Carrico) ---------------------------------------------------------------------- Message: 1 Date: Mon, 02 Feb 2015 08:02:43 -0500 From: Anthony Carrico <acarr...@memebeam.org> To: Matthew Flatt <mfl...@cs.utah.edu> Cc: racket Users <users@racket-lang.org> Subject: Re: [racket] forward pointer declarations Message-ID: <54cf7573.6060...@memebeam.org> Content-Type: text/plain; charset="utf-8" On 02/02/2015 01:17 AM, Matthew Flatt wrote: > It's also valid to reference `wl_interface-pointer` directly: ... > > I don't have a nicer solution if you want to refer to > `_wl_message-pointer`, though. > The forward reference is actually in wl_message, like this: (define-cstruct _wl_message ((name _string/utf-8) (signature _string/utf-8) (types (_cpointer 'wl_interface)))) (define-cstruct _wl_interface ((name _string/utf-8) (version _int) (method_count _int) (methods _wl_message-pointer) (event_count _int) (events _wl_message-pointer))) I ended up just inlining (_cpointer 'wl_interface) for the forward reference. This ends up creating two (_cpointer 'wl_interface) ctypes, but it's no problem, correct? I don't think it is possible to "reference 'wl_interface-pointer' directly" as you suggest in this case because of the "cannot reference an identifier before its definition" error. -- Anthony Carrico -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 181 bytes Desc: OpenPGP digital signature URL: <http://lists.racket-lang.org/users/archive/attachments/20150202/f5494983/attachment-0001.sig> ------------------------------ Message: 2 Date: Mon, 02 Feb 2015 14:04:25 +0000 From: Sam Tobin-Hochstadt <sa...@cs.indiana.edu> To: Anthony Carrico <acarr...@memebeam.org>, Matthew Flatt <mfl...@cs.utah.edu> Cc: racket Users <users@racket-lang.org> Subject: Re: [racket] forward pointer declarations Message-ID: <CAK=HD+bSzeuvOm+pjuM53MfidOfy6=mjc0m7kwsjdj7qj3l...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Maybe a ctype which is a delay node, along the lines of 'recursive-contract', is the right thing here. Sam On Mon, Feb 2, 2015, 8:05 AM Anthony Carrico <acarr...@memebeam.org> wrote: > On 02/02/2015 01:17 AM, Matthew Flatt wrote: > > It's also valid to reference `wl_interface-pointer` directly: > ... > > > > I don't have a nicer solution if you want to refer to > > `_wl_message-pointer`, though. > > > > The forward reference is actually in wl_message, like this: > > (define-cstruct _wl_message > ((name _string/utf-8) > (signature _string/utf-8) > (types (_cpointer 'wl_interface)))) > > (define-cstruct _wl_interface > ((name _string/utf-8) > (version _int) > (method_count _int) > (methods _wl_message-pointer) > (event_count _int) > (events _wl_message-pointer))) > > I ended up just inlining (_cpointer 'wl_interface) for the forward > reference. This ends up creating two (_cpointer 'wl_interface) ctypes, > but it's no problem, correct? > > I don't think it is possible to "reference 'wl_interface-pointer' > directly" as you suggest in this case because of the "cannot reference > an identifier before its definition" error. > > -- > Anthony Carrico > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.racket-lang.org/users/archive/attachments/20150202/0b9778b6/attachment-0001.html> ------------------------------ Message: 3 Date: Mon, 02 Feb 2015 09:41:46 -0500 From: Anthony Carrico <acarr...@memebeam.org> To: users@racket-lang.org Subject: Re: [racket] forward pointer declarations Message-ID: <54cf8caa.60...@memebeam.org> Content-Type: text/plain; charset="windows-1252" Along these lines, I also am a little foggy on unions. This: http://docs.racket-lang.org/foreign/C_Union_Types.html says, "Unions are always treated like structs." But I have no idea what that phrase means. I don't get the impression that unions have tags like structs can have. Or can they? Maybe any pointer can be tagged? For example: (define _wl_argument (_union _int32 _uint32 _wl_fixed _string/utf-8 (_cpointer/null 'wl_object) _uint32 _wl_array-pointer _int32)) Now suppose I need to pass an array of _wl_argument. Does it even make sense to use a tag in the _cpointer? (define _wl_argument-pointer (_cpointer 'wl_argument)) (define-wl-client wl_proxy_marshal_array_constructor (_fun #:save-errno 'posix _wl_proxy-pointer _uint32 _wl_argument-pointer _wl_interface-pointer -> _wl_proxy-pointer/null )) So as I said, I'm just a little foggy on some of the concepts, but I do think the FFI is very nice. Maybe I'm just trying to use stronger typing than actually exists in the ffi. I've started reading Eli Barzilay/Dmitry Orlovsky "Foreign Interface for PLT Scheme". -- Anthony Carrico -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 181 bytes Desc: OpenPGP digital signature URL: <http://lists.racket-lang.org/users/archive/attachments/20150202/b5d986ce/attachment-0001.sig> End of users Digest, Vol 114, Issue 3 *************************************
____________________ Racket Users list: http://lists.racket-lang.org/users