115 lines
3.2 KiB
Scheme
115 lines
3.2 KiB
Scheme
;;; expand-lang.ss
|
|
;;; Copyright 1984-2017 Cisco Systems, Inc.
|
|
;;;
|
|
;;; Licensed under the Apache License, Version 2.0 (the "License");
|
|
;;; you may not use this file except in compliance with the License.
|
|
;;; You may obtain a copy of the License at
|
|
;;;
|
|
;;; http://www.apache.org/licenses/LICENSE-2.0
|
|
;;;
|
|
;;; Unless required by applicable law or agreed to in writing, software
|
|
;;; distributed under the License is distributed on an "AS IS" BASIS,
|
|
;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
;;; See the License for the specific language governing permissions and
|
|
;;; limitations under the License.
|
|
|
|
(define-record-type libreq
|
|
(fields
|
|
(immutable path)
|
|
(immutable version)
|
|
(immutable uid))
|
|
(nongenerative #{libreq fnuxvkuvs8x0xbc68h3hm6-0})
|
|
(sealed #t))
|
|
|
|
(define-record-type recompile-info
|
|
(fields
|
|
(immutable import-req*)
|
|
(immutable include-req*))
|
|
(nongenerative #{recompile-info fnuxvkuvs8x0xbc68h3hm6-1})
|
|
(sealed #t))
|
|
|
|
(define-record-type library-info
|
|
(nongenerative #{library-info e10vy7tci6bqz6pmnxgvlq-3})
|
|
(fields
|
|
(immutable path)
|
|
(immutable version)
|
|
(immutable uid)
|
|
(immutable visible?)))
|
|
|
|
(define-record-type library/ct-info
|
|
(parent library-info)
|
|
(fields
|
|
(immutable import-req*)
|
|
(immutable visit-visit-req*)
|
|
(immutable visit-req*))
|
|
(nongenerative #{library/ct-info fgf0koeh2zn6ajlujfyoyf-4})
|
|
(sealed #t))
|
|
|
|
(define-record-type library/rt-info
|
|
(parent library-info)
|
|
(fields
|
|
(immutable invoke-req*))
|
|
(nongenerative #{library/rt-info ff86rtm7efmvxcvrmh7t0b-3})
|
|
(sealed #t))
|
|
|
|
(define-record-type program-info
|
|
(fields (immutable uid) (immutable invoke-req*))
|
|
(nongenerative #{program-info fgc8ptwnu9i5gfqz3s85mr-0})
|
|
(sealed #t))
|
|
|
|
(module (Lexpand Lexpand?)
|
|
(define library-path?
|
|
(lambda (x)
|
|
(and (list? x) (andmap symbol? x))))
|
|
|
|
(define library-version?
|
|
(lambda (x)
|
|
(and (list? x)
|
|
(andmap (lambda (x) (and (integer? x) (exact? x) (>= x 0))) x))))
|
|
|
|
(define maybe-optimization-loc? (lambda (x) (or (not x) (box? x)))) ; should be a record
|
|
|
|
(define maybe-label? (lambda (x) (or (not x) (gensym? x))))
|
|
|
|
(define-language Lexpand
|
|
(nongenerative-id #{Lexpand fgy7v2wrvj0so4ro8kvhqo-3})
|
|
(terminals
|
|
(maybe-label (dl))
|
|
(gensym (uid export-id))
|
|
(library-path (path))
|
|
(library-version (version))
|
|
(maybe-optimization-loc (db))
|
|
(prelex (dv))
|
|
(libreq (import-req visit-req visit-visit-req invoke-req))
|
|
(string (include-req))
|
|
(Lsrc (lsrc body init visit-code import-code de)) => unparse-Lsrc
|
|
(recompile-info (rcinfo))
|
|
(library/ct-info (linfo/ct))
|
|
(library/rt-info (linfo/rt))
|
|
(program-info (pinfo)))
|
|
(Outer (outer)
|
|
(recompile-info rcinfo)
|
|
(group outer1 outer2)
|
|
(visit-only inner)
|
|
(revisit-only inner)
|
|
inner)
|
|
(Inner (inner)
|
|
(library/ct-info linfo/ct)
|
|
ctlib
|
|
(library/rt-info linfo/rt)
|
|
rtlib
|
|
(program-info pinfo)
|
|
prog
|
|
lsrc)
|
|
(ctLibrary (ctlib)
|
|
(library/ct uid (export-id* ...) import-code visit-code))
|
|
(rtLibrary (rtlib)
|
|
(library/rt uid
|
|
(dl* ...)
|
|
(db* ...)
|
|
(dv* ...)
|
|
(de* ...)
|
|
body))
|
|
(Program (prog)
|
|
(program uid body))))
|