X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-introspect%2Fxref-test-data.lisp;h=aebc327fda61fdb003deb7993ff62e6e59352341;hb=7169796933b86601eaf70d3a9064600730cb2b40;hp=a23c328493623bcdfbcfd43526125e4a1358c527;hpb=65dc8d30b1f8389faa549af10e72b9e677bec5d3;p=sbcl.git diff --git a/contrib/sb-introspect/xref-test-data.lisp b/contrib/sb-introspect/xref-test-data.lisp index a23c328..aebc327 100644 --- a/contrib/sb-introspect/xref-test-data.lisp +++ b/contrib/sb-introspect/xref-test-data.lisp @@ -1,3 +1,17 @@ +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; This software is derived from the CMU CL system, which was +;;;; written at Carnegie Mellon University and released into the +;;;; public domain. The software is in the public domain and is +;;;; provided with absolutely no warranty. See the COPYING and CREDITS +;;;; files for more information. + +(defpackage :sb-introspect-test/xref + (:use "SB-INTROSPECT" "CL" "SB-RT")) + +(in-package :sb-introspect-test/xref) + (defvar *a* nil) (defconstant +z+ 'zzz) @@ -161,4 +175,52 @@ (macro/1))) (inner-m)))) -;;; Test references to / from compiler-macros +;;; Inlining functions with non-trivial lambda-lists. +(declaim (inline inline/3)) +(defun inline/3 (a &optional b &key c d) + (list a b c d)) +(defun inline/3-user/1 (a) + (inline/3 a)) +(defun inline/3-user/2 (a b) + (inline/3 a b)) +(defun inline/3-user/3 (a b c) + (inline/3 a b :c c)) +(defun inline/3-user/4 (a b c d) + (inline/3 a b :d d :c c)) + +(declaim (inline inline/4)) +(defun inline/4 (a &rest more) + (cons a more)) +(defun inline/4-user () + (inline/4 :a :b :c)) + +;;; Test references to / from compiler-macros and source-transforms + +(define-compiler-macro cmacro (x) + `(+ ,x 42)) +(defstruct struct slot) +(defun source-user (x) + (cmacro (struct-slot x))) + +;;; Test specialization + +(defclass a-class () ()) +(defclass a-subclass (a-class) ()) + +(defstruct a-structure) +(defstruct (a-substructure (:include a-structure))) + +(defvar *an-instance-of-a-class* (make-instance 'a-class)) +(defvar *an-instance-of-a-subclass* (make-instance 'a-subclass)) + +(defvar *an-instance-of-a-structure* (make-a-structure)) +(defvar *an-instance-of-a-substructure* (make-a-substructure)) + +(defmethod a-gf-1 ((x a-class))) +(defmethod a-gf-1 ((x a-structure))) + +(defmethod a-gf-2 ((x (eql *an-instance-of-a-class*)))) +(defmethod a-gf-2 ((x (eql *an-instance-of-a-structure*)))) + +(defmethod a-gf-3 ((x (eql *an-instance-of-a-subclass*)))) +(defmethod a-gf-3 ((x (eql *an-instance-of-a-substructure*))))