]> gitweb.factorcode.org Git - factor.git/blob - basis/alien/parser/parser.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / alien / parser / parser.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types arrays assocs effects grouping kernel
4 parser sequences splitting words fry locals ;
5 IN: alien.parser
6
7 : parse-arglist ( parameters return -- types effect )
8     [ 2 group unzip [ "," ?tail drop ] map ]
9     [ [ { } ] [ 1array ] if-void ]
10     bi* <effect> ;
11
12 : function-quot ( return library function types -- quot )
13     '[ _ _ _ _ alien-invoke ] ;
14
15 :: define-function ( return library function parameters -- )
16     function create-in dup reset-generic
17     return library function
18     parameters return parse-arglist [ function-quot ] dip
19     define-declared ;