| (in-package :cl-user) |
| (defpackage cl-annot.std |
| (:nicknames :annot.std) |
| (:use :cl |
| :annot.util |
| :annot.helper) |
| (:export :export* |
| :ignore* |
| :ignorable* |
| :dynamic-extent* |
| :declaration* |
| :special* |
| :type* |
| :ftype* |
| :optimize* |
| :inline* |
| :notinline*)) |
| (in-package :annot.std) |
|
|
| (defannotation export* (definition-form) |
| (:alias export) |
| "Export the definition symbol of DEFINITION-FORM." |
| (let ((name (definition-form-symbol definition-form))) |
| (if name |
| `(progn |
| (export ',name) |
| ,definition-form) |
| definition-form))) |
|
|
| |
| |
| |
|
|
| (defun %declare-list-or-symbol (vars sym) |
| (if (listp vars) |
| `(declare (,sym ,@vars)) |
| `(declare (,sym ,vars)))) |
|
|
| (defannotation ignore* (vars) (:alias ignore :inline t) |
| "Shorthand for (DECLARE (IGNORE ...))." |
| (%declare-list-or-symbol vars 'ignore)) |
|
|
| (defannotation ignorable* (vars) (:alias ignorable :inline t) |
| "Shorthand for (DECLARE (IGNORABLE ...))." |
| (%declare-list-or-symbol vars 'ignorable)) |
|
|
| (defannotation dynamic-extent* (vars) (:alias dynamic-extent :inline t) |
| "Shorthand for (DECLARE (DYNAMIC-EXTENT ...))." |
| (%declare-list-or-symbol vars 'dynamic-extent)) |
|
|
| (defannotation declaration* (vars) (:alias declaration :inline t) |
| "Shorthand for (DECLARE (DECLARATION ...))." |
| (%declare-list-or-symbol vars 'declaration)) |
|
|
| (defannotation special* (vars) (:alias special :inline t) |
| "Shorthand for (DECLARE (SPECIAL ...))." |
| (%declare-list-or-symbol vars 'special)) |
|
|
| |
| |
| |
|
|
| (defannotation type* (typespec name) |
| (:alias type :arity 2 :inline t) |
| "Shorthand for (DECLARE (TYPE ...))." |
| (if (consp name) |
| |
| () |
| `(declare (type ,typespec ,name)))) |
|
|
| (defannotation ftype* (typespec name) |
| (:alias ftype :arity 2 :inline t) |
| "Shorthand for (DECLARE (FTYPE ...))." |
| (if (consp name) |
| |
| () |
| `(declare (ftype ,typespec ,name)))) |
|
|
| (defannotation optimize* (quality) |
| (:alias optimize :inline t) |
| "Shorthand for (DECLARE (OPTIMIZE ...))." |
| `(declare (optimize ,quality))) |
|
|
| (defannotation inline* (name) |
| (:alias inline :inline t) |
| "Shorthand for (DECLARE (INLINE ...))." |
| (let ((symbol (definition-form-symbol name)) |
| (type (definition-form-type name))) |
| (if (and symbol |
| (member type |
| '(defun defmethod))) |
| `(progn |
| (declaim (inline ,symbol)) |
| ,name) |
| `(declare (inline ,name))))) |
|
|
| (defannotation notinline* (name) |
| (:alias notinline :inline t) |
| "Shorthand for (DECLARE (NOTINLINE ...))." |
| (let ((symbol (definition-form-symbol name)) |
| (type (definition-form-type name))) |
| (if (and symbol |
| (member type |
| '(defun defmethod))) |
| `(progn |
| (declaim (notinline ,symbol)) |
| ,name) |
| `(declare (notinline ,name))))) |
|
|
|
|
|
|