]> gitweb.factorcode.org Git - factor.git/blob - core/generic/parser/parser.factor
11fb2b5b42fa7ca87f6bb54d5888b828be1f899b
[factor.git] / core / generic / parser / parser.factor
1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: parser kernel words generic namespaces effects.parser ;
4 IN: generic.parser
5
6 ERROR: not-in-a-method-error ;
7
8 : CREATE-GENERIC ( -- word ) CREATE dup reset-word ;
9
10 : (GENERIC:) ( quot -- )
11     [ CREATE-GENERIC ] dip call complete-effect define-generic ; inline
12
13 : create-method-in ( class generic -- method )
14     create-method dup set-word dup save-location ;
15
16 : define-inline-method ( class generic quot -- )
17     [ create-method-in ] dip [ define ] [ drop make-inline ] 2bi ;
18
19 : CREATE-METHOD ( -- method )
20     scan-word bootstrap-word scan-word create-method-in ;
21
22 SYMBOL: current-method
23
24 : with-method-definition ( method quot -- )
25     over current-method set call current-method off ; inline
26
27 : (M:) ( -- method def )
28     CREATE-METHOD [ parse-definition ] with-method-definition ;
29