65 lines
2.6 KiB
Scheme
65 lines
2.6 KiB
Scheme
|
|
|||
|
|
|||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|||
|
;;; ;;;
|
|||
|
;;; S c o o p s ;;;
|
|||
|
;;; ;;;
|
|||
|
;;; (c) Copyright 1985 Texas Instruments Incorporated ;;;
|
|||
|
;;; All Rights Reserved ;;;
|
|||
|
;;; ;;;
|
|||
|
;;; File updated : 8/29/85 ;;;
|
|||
|
;;; ;;;
|
|||
|
;;; File : send.scm ;;;
|
|||
|
;;; ;;;
|
|||
|
;;; Amitabh Srivastava ;;;
|
|||
|
;;; ;;;
|
|||
|
;;; This file contains the send macro. This utilizes an ;;;
|
|||
|
;;; internal hack for speed. ;;;
|
|||
|
;;; ;;;
|
|||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|||
|
|
|||
|
;;;
|
|||
|
|
|||
|
(macro send
|
|||
|
(let ((names (vector 'scoop-send-handler-0
|
|||
|
'scoop-send-handler-1
|
|||
|
'scoop-send-handler-2
|
|||
|
'scoop-send-handler-3
|
|||
|
'scoop-send-handler-4
|
|||
|
'scoop-send-handler-5
|
|||
|
'scoop-send-handler-6
|
|||
|
'scoop-send-handler-7
|
|||
|
'scoop-send-handler-8
|
|||
|
'scoop-send-handler-9
|
|||
|
'scoop-send-handler-10)))
|
|||
|
|
|||
|
(lambda (e)
|
|||
|
(let ((args (cdddr e)))
|
|||
|
(let ((fn (vector-ref names (length args)))
|
|||
|
(msg (caddr e))
|
|||
|
(env (cadr e)))
|
|||
|
(list 'let
|
|||
|
(list (list '%sc-env env))
|
|||
|
(append (cons fn args)
|
|||
|
(list (list 'access msg '%sc-env) '%sc-env))))))))
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;;; send-if-handles
|
|||
|
|
|||
|
(macro send-if-handles
|
|||
|
(lambda (e)
|
|||
|
(let ((obj (cadr e))
|
|||
|
(msg (caddr e))
|
|||
|
(args (cdddr e)))
|
|||
|
(list 'let
|
|||
|
(list (list '%sc-env obj))
|
|||
|
(list 'if
|
|||
|
(list 'assq
|
|||
|
(list 'quote msg)
|
|||
|
'(%sc-method-structure (access %sc-class %sc-env)))
|
|||
|
(cons 'send (cons '%sc-env (cddr e)))
|
|||
|
'())))))
|
|||
|
|
|||
|
|