aboutsummaryrefslogtreecommitdiffstats
path: root/lib/SAHP.scm
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-02-24 18:41:14 -0500
committerGravatar Peter McGoron 2025-02-24 18:41:53 -0500
commit4a71da136915aa50e45d39b868047686123d8a3e (patch)
treef8b99de05876b69ae06058380e98498e85490042 /lib/SAHP.scm
parentmake library hierarchy (diff)
make library hierarchy again
Diffstat (limited to 'lib/SAHP.scm')
-rw-r--r--lib/SAHP.scm57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/SAHP.scm b/lib/SAHP.scm
new file mode 100644
index 0000000..3e60956
--- /dev/null
+++ b/lib/SAHP.scm
@@ -0,0 +1,57 @@
+#| Copyright 2024 Peter McGoron
+ |
+ | 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.
+ |#
+
+;;; ;;;;;;;;;;;;
+;;; API
+;;; ;;;;;;;;;;;;
+
+(define (set-global-SAHP! SAHP type procedure)
+ (%SAHP-add-to-global/subtypes (extract-SAHP-descriptor SAHP)
+ type
+ procedure))
+
+(define-syntax define-global-SAHP
+ (syntax-rules ()
+ ((_ (name (type arg1) . arg-rest) body ...)
+ (set-global-SAHP! name
+ type
+ (lambda (arg1 . arg-rest)
+ body ...)))))
+
+(define-syntax parameterize-SAHP
+ (syntax-rules ()
+ ((_ ((SAHP (type value) ...) ...) body ...)
+ (let ((param (SAHP-dynamic-scope-parameter (extract-SAHP-descriptor
+ SAHP)))
+ ...)
+ (parameterize ((param (%SAHP-set/subtypes (param)
+ (list type ...)
+ (list value ...)))
+ ...)
+ body ...)))))
+
+(define-syntax letrec-SAHP
+ (syntax-rules ()
+ ((_ ((SAHP (type value) ...) ...) body ...)
+ (let ((%SAHP (extract-SAHP-descriptor SAHP)) ...)
+ (letrec ((SAHP (%SAHP/local-scope
+ %SAHP
+ (%SAHP-set/subtypes (SAHP-local-scope
+ %SAHP)
+ (list type ...)
+ (list value ...))))
+ ...)
+ body ...)))))