You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

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))))