1 ;;;; This file is part of LilyPond, the GNU music typesetter.
3 ;;;; Copyright (C) 1998--2014 Jan Nieuwenhuizen <janneke@gnu.org>
4 ;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
6 ;;;; LilyPond is free software: you can redistribute it and/or modify
7 ;;;; it under the terms of the GNU General Public License as published by
8 ;;;; the Free Software Foundation, either version 3 of the License, or
9 ;;;; (at your option) any later version.
11 ;;;; LilyPond is distributed in the hope that it will be useful,
12 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;;;; GNU General Public License for more details.
16 ;;;; You should have received a copy of the GNU General Public License
17 ;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
20 ;;; Date 16 October 2011
23 (define-module (scm safe-utility-defs)
24 #:use-module (ice-9 optargs)
25 #:export (safe-objects)
26 #:export-syntax (define-safe-public)
27 #:re-export-syntax (define*-public))
29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30 ;; Safe definitions utility
35 (define (get-symbol arg)
37 (get-symbol (car arg))
41 (define-macro (define-safe-public arglist . body)
42 "Define a variable, export it, and mark it as safe, i.e. usable in
43 LilyPond safe mode. The syntax is the same as `define*-public'."
45 (let ((safe-symbol (get-symbol arglist)))
47 (define*-public ,arglist
49 (set! safe-objects (cons (cons ',safe-symbol ,safe-symbol)