/usr/share/rep/lisp/rep/structures.jl is in librep-dev 0.92.5-3build2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #| rep.structures bootstrap
$Id$
Copyright (C) 2000 John Harper <john@dcs.warwick.ac.uk>
This file is part of librep.
librep is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
librep is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with librep; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA
|#
(declare (in-module rep.structures))
(open-structures '(rep.lang.symbols
rep.data))
(make-structure nil nil nil '%interfaces)
(defun make-interface (name sig)
"Create an interface called NAME exporting the list of symbols SIG."
(structure-define (get-structure '%interfaces) name sig))
(defun parse-interface (sig)
"Return the list of symbols described by the module interface SIG."
(cond ((null sig) '())
((eq (car sig) 'export)
(cdr sig))
((eq (car sig) 'compound-interface)
(apply append (mapcar parse-interface (cdr sig))))
((eq (car sig) 'structure-interface)
(structure-interface (intern-structure (cadr sig))))
((symbolp sig)
(let ((interfaces (get-structure '%interfaces)))
(or (structure-bound-p interfaces sig)
(error "No such interface: %s" sig))
(%structure-ref interfaces sig)))))
(defun alias-structure (from to)
"Create an alias of the structure called FROM as the name TO."
(name-structure (get-structure from) to))
(defun locate-binding (sym imported)
"Return the name of the structure binding of SYM, using the list of module
names IMPORTED as the search start points."
(when imported
(let ((tem (structure-exports-p (get-structure (car imported)) sym)))
(cond ((null tem)
(locate-binding sym (cdr imported)))
((eq tem 'external)
;; this module exports it, but it doesn't define
;; it, so search its imports
(locate-binding sym (structure-imports
(get-structure (car imported)))))
(t (car imported))))))
(export-bindings '(make-interface parse-interface
alias-structure locate-binding))
|