From 186cc7edb3476dd65351de484aca24932d58d8d5 Mon Sep 17 00:00:00 2001 From: Jeremy Hughes Date: Wed, 22 Jul 2009 16:00:38 +1200 Subject: [PATCH] added alien.cxx --- extra/alien/cxx/authors.txt | 1 + extra/alien/cxx/cxx.factor | 22 ++++++++++++++++++++ extra/alien/cxx/parser/authors.txt | 1 + extra/alien/cxx/parser/parser.factor | 7 +++++++ extra/alien/cxx/syntax/authors.txt | 1 + extra/alien/cxx/syntax/syntax-tests.factor | 24 ++++++++++++++++++++++ extra/alien/cxx/syntax/syntax.factor | 6 ++++++ extra/alien/marshall/marshall.factor | 2 ++ 8 files changed, 64 insertions(+) create mode 100644 extra/alien/cxx/authors.txt create mode 100644 extra/alien/cxx/cxx.factor create mode 100644 extra/alien/cxx/parser/authors.txt create mode 100644 extra/alien/cxx/parser/parser.factor create mode 100644 extra/alien/cxx/syntax/authors.txt create mode 100644 extra/alien/cxx/syntax/syntax-tests.factor create mode 100644 extra/alien/cxx/syntax/syntax.factor diff --git a/extra/alien/cxx/authors.txt b/extra/alien/cxx/authors.txt new file mode 100644 index 0000000000..c45c6f3279 --- /dev/null +++ b/extra/alien/cxx/authors.txt @@ -0,0 +1 @@ +Jeremy Hughes \ No newline at end of file diff --git a/extra/alien/cxx/cxx.factor b/extra/alien/cxx/cxx.factor new file mode 100644 index 0000000000..71144e6450 --- /dev/null +++ b/extra/alien/cxx/cxx.factor @@ -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 + + + +: define-c++-class ( str superclass-mixin -- ) + [ [ class-tuple-word ] [ class-mixin ] bi dup ] dip + add-mixin-instance define-class-tuple ; diff --git a/extra/alien/cxx/parser/authors.txt b/extra/alien/cxx/parser/authors.txt new file mode 100644 index 0000000000..c45c6f3279 --- /dev/null +++ b/extra/alien/cxx/parser/authors.txt @@ -0,0 +1 @@ +Jeremy Hughes \ No newline at end of file diff --git a/extra/alien/cxx/parser/parser.factor b/extra/alien/cxx/parser/parser.factor new file mode 100644 index 0000000000..4614a4a7b5 --- /dev/null +++ b/extra/alien/cxx/parser/parser.factor @@ -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 ; diff --git a/extra/alien/cxx/syntax/authors.txt b/extra/alien/cxx/syntax/authors.txt new file mode 100644 index 0000000000..c45c6f3279 --- /dev/null +++ b/extra/alien/cxx/syntax/authors.txt @@ -0,0 +1 @@ +Jeremy Hughes \ No newline at end of file diff --git a/extra/alien/cxx/syntax/syntax-tests.factor b/extra/alien/cxx/syntax/syntax-tests.factor new file mode 100644 index 0000000000..f9fb9a218f --- /dev/null +++ b/extra/alien/cxx/syntax/syntax-tests.factor @@ -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: + +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 diff --git a/extra/alien/cxx/syntax/syntax.factor b/extra/alien/cxx/syntax/syntax.factor new file mode 100644 index 0000000000..741950f79b --- /dev/null +++ b/extra/alien/cxx/syntax/syntax.factor @@ -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 ; diff --git a/extra/alien/marshall/marshall.factor b/extra/alien/marshall/marshall.factor index 2aede320aa..eec0cadcbb 100644 --- a/extra/alien/marshall/marshall.factor +++ b/extra/alien/marshall/marshall.factor @@ -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 ;