New feature: proper object lifecycle protocol; init and teardown fragments.
[sod] / src / module-parse.lisp
index 2866c08..f6d69ee 100644 (file)
 
 (export 'class-item)
 
+(define-pluggable-parser class-item initfrags (scanner class pset)
+  ;; raw-class-item ::= frag-keyword `{' c-fragment `}'
+  ;; frag-keyword ::= `init' | `teardown'
+  (with-parser-context (token-scanner-context :scanner scanner)
+    (parse (seq ((make (or (seq ("init") #'make-sod-class-initfrag)
+                          (seq ("teardown") #'make-sod-class-tearfrag)))
+                (frag (parse-delimited-fragment scanner #\{ #\})))
+            (funcall make class frag pset scanner)))))
+
 (defun parse-class-body (scanner pset name supers)
   ;; class-body ::= `{' class-item* `}'
   ;;
                 ;;   | method-item
                 ;;   | slot-item
                 ;;   | initializer-item
+                ;;   | initfrag-item
                 ;;
                 ;; Most of the above begin with declspecs and a declarator
                 ;; (which might be dotted).  So we parse that here and