added alien.cxx
							parent
							
								
									8ae1fb66a3
								
							
						
					
					
						commit
						186cc7edb3
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Jeremy Hughes
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
! Copyright (C) 2009 Jeremy Hughes.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors alien.c-types alien.cxx.parser alien.marshall
 | 
			
		||||
alien.inline.types classes.mixin classes.tuple kernel namespaces
 | 
			
		||||
assocs sequences parser classes.parser ;
 | 
			
		||||
IN: alien.cxx
 | 
			
		||||
 | 
			
		||||
<PRIVATE
 | 
			
		||||
: class-mixin ( str -- word )
 | 
			
		||||
    create-class-in [ define-mixin-class ] keep ;
 | 
			
		||||
 | 
			
		||||
: class-tuple-word ( word -- word' )
 | 
			
		||||
    "#" append create-in ;
 | 
			
		||||
 | 
			
		||||
: define-class-tuple ( word mixin -- )
 | 
			
		||||
    [ drop class-wrapper { } define-tuple-class ]
 | 
			
		||||
    [ add-mixin-instance ] 2bi ;
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
: define-c++-class ( str superclass-mixin -- )
 | 
			
		||||
    [ [ class-tuple-word ] [ class-mixin ] bi dup ] dip
 | 
			
		||||
    add-mixin-instance define-class-tuple ;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Jeremy Hughes
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
! Copyright (C) 2009 Jeremy Hughes.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: parser lexer ;
 | 
			
		||||
IN: alien.cxx.parser
 | 
			
		||||
 | 
			
		||||
: parse-c++-class-definition ( -- class superclass-mixin )
 | 
			
		||||
    scan scan-word ;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Jeremy Hughes
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
! Copyright (C) 2009 Jeremy Hughes.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: tools.test alien.cxx.syntax alien.inline.syntax
 | 
			
		||||
alien.marshall.syntax alien.marshall ;
 | 
			
		||||
IN: alien.cxx.syntax.tests
 | 
			
		||||
 | 
			
		||||
DELETE-C-LIBRARY: test
 | 
			
		||||
C-LIBRARY: test
 | 
			
		||||
 | 
			
		||||
COMPILE-AS-C++
 | 
			
		||||
 | 
			
		||||
C-INCLUDE: <string>
 | 
			
		||||
 | 
			
		||||
C-TYPEDEF: std::string string
 | 
			
		||||
 | 
			
		||||
C++-CLASS: std::string c++-root
 | 
			
		||||
 | 
			
		||||
CM-FUNCTION: std::string* new_string ( const-char* s )
 | 
			
		||||
    return new std::string(s);
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
;C-LIBRARY
 | 
			
		||||
 | 
			
		||||
{ 1 1 } [ new_string ] must-infer-as
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
! Copyright (C) 2009 Jeremy Hughes.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: alien.cxx alien.cxx.parser ;
 | 
			
		||||
IN: alien.cxx.syntax
 | 
			
		||||
 | 
			
		||||
SYNTAX: C++-CLASS: parse-c++-class-definition define-c++-class ;
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,8 @@ TUPLE: alien-wrapper { underlying alien } ;
 | 
			
		|||
TUPLE: struct-wrapper < alien-wrapper disposed ;
 | 
			
		||||
TUPLE: class-wrapper < alien-wrapper disposed ;
 | 
			
		||||
 | 
			
		||||
MIXIN: c++-root
 | 
			
		||||
 | 
			
		||||
GENERIC: unmarshall-cast ( alien-wrapper -- alien-wrapper' )
 | 
			
		||||
 | 
			
		||||
M: alien-wrapper unmarshall-cast ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue