diff --git a/basis/alien/parser/parser.factor b/basis/alien/parser/parser.factor index df1dd15bfb..8e050b3950 100644 --- a/basis/alien/parser/parser.factor +++ b/basis/alien/parser/parser.factor @@ -1,11 +1,20 @@ ! Copyright (C) 2008, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: alien alien.c-types arrays assocs effects grouping kernel -parser sequences splitting words fry locals lexer namespaces ; +parser sequences splitting words fry locals lexer namespaces +summary ; IN: alien.parser +ERROR: invalid-c-name name ; + +M: invalid-c-name summary + drop "The C pointer asterisk must be part of the type string." ; + +: check-c-name ( string -- string ) + dup [ CHAR: * = ] any? [ invalid-c-name ] when ; + : parse-arglist ( parameters return -- types effect ) - [ 2 group unzip [ "," ?tail drop ] map ] + [ 2 group unzip [ "," ?tail drop check-c-name ] map ] [ [ { } ] [ 1array ] if-void ] bi* ; @@ -13,7 +22,7 @@ IN: alien.parser '[ _ _ _ _ alien-invoke ] ; :: make-function ( return library function parameters -- word quot effect ) - function create-in dup reset-generic + function check-c-name create-in dup reset-generic return library function parameters return parse-arglist [ function-quot ] dip ;