mescc: Use records for Guile: <info>.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 14 Jul 2017 19:26:35 +0000 (21:26 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 26 Jul 2017 09:36:08 +0000 (11:36 +0200)
* module/language/c99/info.scm (<info>): Make immutable record.
  Update users.

module/language/c99/info.scm

index c5bab0ddd1b995c9893fba050f85ecb0f7cf8dcc..72671d9a5eb3486bbd1bfa30e367f9b4cf3c7b78 100644 (file)
 
 (define-module (language c99 info)
   #:use-module (ice-9 optargs)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-9 gnu)
   #:use-module (system base pmatch)
   #:export (<info>
-            ;; <types>
-            ;; <constants>
-            ;; <functions>
-            ;; <globals>
-            ;; <locals>
-            ;; <function>
-            ;; <text>
-            ;; <break>
-            ;; <continue>
-
             make
+            make-<info>
             info?
 
             .info
   (use-modules (ice-9 syncase)))
  (mes))
 
-;;(include-from-path "language/c99/info.mes")
-
-(define <info> '<info>)
-(define <types> '<types>)
-(define <constants> '<constants>)
-(define <functions> '<functions>)
-(define <globals> '<globals>)
-(define <locals> '<locals>)
-(define <function> '<function>)
-(define <text> '<text>)
-(define <break> '<break>)
-(define <continue> '<continue>)
+(define-immutable-record-type <info>
+  (make-<info> types constants functions globals locals function text break continue)
+  info?
+  (types .types)
+  (constants .constants)
+  (functions .functions)
+  (globals .globals)
+  (locals .locals)
+  (function .function)
+  (text .text)
+  (break .break)
+  (continue .continue))
 
 (define* (make o #:key (types '()) (constants '()) (functions '()) (globals '()) (locals '()) (function #f) (text '()) (break '()) (continue '()))
-  (pmatch o
-    (<info> (list <info>
-                  (cons <types> types)
-                  (cons <constants> constants)
-                  (cons <functions> functions)
-                  (cons <globals> globals)
-                  (cons <locals> locals)
-                  (cons <function> function)
-                  (cons <text> text)
-                  (cons <break> break)
-                  (cons <continue> continue)))))
-
-(define (.types o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <types>))))
-
-(define (.constants o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <constants>))))
-
-(define (.functions o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <functions>))))
-
-(define (.globals o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <globals>))))
-
-(define (.locals o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <locals>))))
-
-(define (.function o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <function>))))
-
-(define (.text o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <text>))))
-
-(define (.break o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <break>))))
-
-(define (.continue o)
-  (pmatch o
-    ((<info> . ,alist) (assq-ref alist <continue>))))
-
-(define (info? o)
-  (and (pair? o) (eq? (car o) <info>)))
+  (make-<info> types constants functions globals locals function text break continue))