]> gitweb.factorcode.org Git - factor.git/blob - unmaintained/alien/cxx/cxx.factor
tools.test: Make the flag public. Finish porting tester changes to fuzzer.
[factor.git] / unmaintained / alien / cxx / cxx.factor
1 ! Copyright (C) 2009 Jeremy Hughes.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.c-types alien.cxx.parser alien.marshall
4 alien.inline.types classes.mixin classes.tuple kernel namespaces
5 assocs sequences parser classes.parser alien.marshall.syntax
6 interpolate locals effects io strings make vocabs.parser words
7 generic fry quotations ;
8 IN: alien.cxx
9
10 <PRIVATE
11 : class-mixin ( str -- word )
12     create-class-in [ define-mixin-class ] keep ;
13
14 : class-tuple-word ( word -- word' )
15     "#" append create-word-in ;
16
17 : define-class-tuple ( word mixin -- )
18     [ drop class-wrapper { } define-tuple-class ]
19     [ add-mixin-instance ] 2bi ;
20 PRIVATE>
21
22 : define-c++-class ( name superclass-mixin -- )
23     [ [ class-tuple-word ] [ class-mixin ] bi dup ] dip
24     add-mixin-instance define-class-tuple ;
25
26 :: define-c++-method ( class-name generic name types effect virtual -- )
27     [ name % "_" % class-name H{ { CHAR: : CHAR: _ } } substitute % ] "" make           :> name'
28     effect [ in>> "self" suffix ] [ out>> ] bi <effect> :> effect'
29     types class-name "*" append suffix                  :> types'
30     effect in>> "," join                                :> args
31     class-name virtual [ "#" append ] unless current-vocab lookup                  :> class
32     SBUF" " clone dup [ I[ return self->${name}(${args});]I ] with-output-stream >string :> body
33     name' types' effect' body define-c-marshalled
34     class generic create-method name' current-vocab lookup 1quotation define ;