ViewVC logotype

Log of /src/compiler/checkgen.lisp

Parent Directory Parent Directory | Revision Log Revision Log

Links to HEAD: (view) (annotate)
Links to snapshot-2004-07: (view) (annotate)
Sticky Tag:

Revision 1.33 - (view) (annotate) - [select for diffs]
Thu May 8 14:52:04 2003 UTC (10 years, 11 months ago) by gerd
Branch: MAIN
CVS Tags: amd64-merge-start, dynamic-extent-base, lisp-executable-base, mod-arith-base, ppc_gencgc_snap_2005-05-14, prm-before-macosx-merge-tag, release-19a, release-19a-base, release-19a-pre1, release-19a-pre2, release-19a-pre3, release-19b-base, release-19b-pre1, release-19b-pre2, release-19c, release-19c-base, release-19c-pre1, snapshot-2003-10, snapshot-2003-11, snapshot-2003-12, snapshot-2004-04, snapshot-2004-05, snapshot-2004-06, snapshot-2004-07, snapshot-2004-08, snapshot-2004-09, snapshot-2004-10, snapshot-2004-11, snapshot-2004-12, snapshot-2005-01, snapshot-2005-02, snapshot-2005-03, snapshot-2005-04, snapshot-2005-05, snapshot-2005-06, snapshot-2005-07, snapshot-2005-08, snapshot-2005-09, snapshot-2005-10, snapshot-2005-11, snapshot-2005-12, sparc_gencgc, sparc_gencgc_merge
Branch point for: dynamic-extent, lisp-executable, mod-arith-branch, ppc_gencgc_branch, release-19a-branch, release-19b-branch, release-19c-branch, sparc_gencgc_branch
Changes since 1.32: +59 -41 lines
Diff to previous 1.32
	Fix problems with THE detected by Paul Dietz' tests.  This also
	fixes the problem that CMUCL generated RETURN-MULTIPLE without a
	good reason.

	* src/compiler/checkgen.lisp (values-types-asserted): Use
	coerce-to-values again.  Add fixme comments and #+nil code for
	known problems; these aren't new problem, though.

	* src/code/type.lisp (coerce-to-values): Don't add &rest t,
	which is the business of THE.
	(values) <type translator>: Disallow &key and &allow-other-keys.

	* src/compiler/ir1tran.lisp (the) <IR1 translator>: Add &rest t
	where appropriate, or-in null type into required types, for
	missing values.

Revision 1.32 - (view) (annotate) - [select for diffs]
Tue Apr 29 11:58:17 2003 UTC (10 years, 11 months ago) by gerd
Branch: MAIN
Changes since 1.31: +9 -6 lines
Diff to previous 1.31
	Fix for various ANSI test cases that fail when compiled because
	argument type checks are constant-folded away.

	* src/compiler/ir1opt.lisp (constant-fold-call): In safe code,
	don't constant-fold a call if one of its arguments requires
	a type check.

	* src/compiler/checkgen.lisp (probable-type-check-p): Return
	true for :error type-checks if safety = 3.

	Fix ENDP.* test failures when running tests compiled.  From SBCL,

	* src/compiler/ir1opt.lisp (ir1-optimize, ir1-optimize-if):
	Don't eliminate if-tests requiring type checks.

	* src/compiler/checkgen.lisp (continuation-check-types):
	Add parameter force-hairy.
	(generate-type-checks): Call continuation-check-types with
	force-hairy true for :error continuations in safe code.

Revision 1.31 - (view) (annotate) - [select for diffs]
Sun Apr 13 11:57:16 2003 UTC (11 years ago) by gerd
Branch: MAIN
CVS Tags: remove_negative_zero_not_zero
Changes since 1.30: +17 -5 lines
Diff to previous 1.30
  	The SEQUENCE-COUNT type was previously used in c:fndb, but since
	type.  Please read boot4.lisp.

	* src/code/exports.lisp ("KERNEL"): Export sequence-count.

	* src-types/bootfiles/18e/boot4.lisp: New file.

	Make compute-effective-slot-definition AMOP compliant.
	Patch from Kevin Rosenberg.

	* src/pcl/std-class.lisp (compute-slots): Pass slot name
	to compute-effective-slot-definition.
	(compute-slots): Likewise.
	(compute-effective-slot-definition): Add parameter slot-name.

	* src/pcl/generic-functions.lisp (compute-effective-slot-definition):
	Add second parameter slot-name.

	Allow non-keyword keyword names in lambda lists.  This fixes test
	cases STRUCTURE-BOA-TEST-15/[1-8], and FLET.30.

	* src/compiler/node.lisp (arg-info): Accept non-keyword
	keyword names.

	* src/code/type.lisp (key-info): Likewise.

	Fix type system bugs detected by Paul Dietz' test suite
	This is to a large extent a port from SBCL.

	* src/code/type.lisp: Mostly rewritten with code ported from

	* src/compiler/typetran.lisp (ir1-transform-type-predicate):
	Return nil if type is *empty-type*.
	(source-transform-intersection-typep): New functions.
	(source-transform-array-typep): Handle unknown array element types.
	(typep): Add handling of negation and intersection types.

	* src/compiler/srctran.lisp (make-canonical-union-type):
	Simplify, now that #'type-union is smarter.
	(ir1-transform-<-helper): Give up on non-numeric, non-member

	* src/compiler/checkgen.lisp (type-test-cost): Add a case
	for intersection-type.
	(values-types-asserted): Don't use coerce-to-values, see
	the comment there.

	* src/compiler/array-tran.lisp (array-dimension): Accept
	:maybe as array-type-complexp.

	* src/code/pred.lisp (%%typep): Add handling of
	negation-types and intersection-types.  Change cases of
	hairy-types, union-types, and arrays with unknown element type.

	* src/code/exports.lisp ("KERNEL"): Export negation-type,
	negation-type-type, intersection-type, intersection-type-types.

	* src/code/class.lisp (sealed-class-intersection):
	Return one value.
	(class :simple-intersection): Return one value, return nil in
	the default case.
	(class :complex-subtypep-arg2): New type method.

Revision 1.30 - (view) (annotate) - [select for diffs]
Sun Jul 9 13:59:58 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
CVS Tags: LINKAGE_TABLE, PRE_LINKAGE_TABLE, UNICODE-BASE, cold-pcl-base, release-18e, release-18e-base, release-18e-pre1, release-18e-pre2
Branch point for: UNICODE-BRANCH, cold-pcl, release-18e-branch
Changes since 1.29: +8 -2 lines
Diff to previous 1.29
Enhancement to continuation-check-types: even when the proven type
represents an unknown number of values, if Cont's destination receives
only a single value, generate a :hairy type check for the
single-values-type of the asserted type.

Revision 1.29 - (view) (annotate) - [select for diffs]
Thu Jul 6 18:37:00 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
Changes since 1.28: +43 -2 lines
Diff to previous 1.28
Reworking of the values-type system to overcome a number of inconsistencies
causing problems:

o Redefine coerce-to-values to convert a single value type into (values type),
  rather than the former definition (values type &rest t). A single value
  type such as fixnum is now equivalent to (values fixnum). Values-type-union
  and values-type-intersection will canonicalise values types with a
  single value such as (values fixnum) back to a single value type
  such as fixnum.

o Now when the compiler makes assertions for the first value of
  continuations that may be generating multiple values it asserts the
  type as (values type &rest t), or as (value &optional type &rest t) if
  it is not sure that the continuation does generate a value.

o Enhance the type check generation to better handle the now common
  values types with optional and rest arguments. Add the new function
  Values-types-asserted which converts asserted optional and rest
  arguments to required arguments that have been proven to be delivered,
  Thus an assertion such as (values &optional fixnum &rest t) will
  generate a fixnum type check if the proven type if (values t).

o The compiler is now far more likely to pickup attempts to use an
  assertion to select a subset of values. For example
  (the (values fixnum) (values x y)) will generated a compiler warning.

o Update single values type assertions where appropriate to clarify that
  the received values may be optional or that multiple values may be
  received. For example, a macro argument which had been asserted to be
  a list via (the list ,...) would now be asserted to be
  (the (values &optional list &rest t)) etc.

o Have the IR1 translator for THE convert single value types into
  (values &optional type &rest t) so that code such as
  (the fixnum (values x y)) will still work acceptably. This does not
  restrict the possible type assertions as the values types may be used
  and are not modified.

Revision 1.28 - (view) (annotate) - [select for diffs]
Thu Jul 6 12:56:19 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
Changes since 1.27: +38 -37 lines
Diff to previous 1.27
o Recheck the asserted against the proven type for each type in a
  values-type, because the continuation is flagged for a type check
  if any of the types needs to be checked and some may not need checking.

o Split the function no-function-values-types out into a call to values-type
  followed by the new function no-function-types as this later functionality
  is useful on its own.

Revision 1.27 - (view) (annotate) - [select for diffs]
Tue May 2 04:44:27 2000 UTC (13 years, 11 months ago) by dtc
Branch: MAIN
Changes since 1.26: +7 -1 lines
Diff to previous 1.26
Implement a specializing CONS class as per issue CONS-TYPE-SPECIFIER:ADD.
The new cons-type which maintains the specialised CAR and CDR types:

o Typep recurses, checking the respective car and cdr specialisations;
  two cons-types are type= if both their car and cdr types are type=.

o Subtypep recurses, applying subtypep to the respective car and
  cdr types. If both sub-tests return true then the cons test returns
  true with a win only when both sub-tests win. If either sub-test
  returns false then the cons tests returns false with a win if either
  of sub-tests win.

o Type-intersection is applied to the respective car and cdr types,
  and wins if both win.

o The type-union of two cons-types handles cases for which either the
  respective car or cdr types are type=, in which case type-union is
  applied to the other type. This avoid returning an overly general result.

o Ctype-of a cons object simply returns (cons * *); and does not attempt
  to recurse.

o The compiler recursively checks the specialised type of the cons-type,
  which allows it to also use this type information to derive the result
  type car and cdr. Inline code is currently only generated when
  natively compiling.

Revision 1.26 - (view) (annotate) - [select for diffs]
Sun Mar 1 21:55:39 1998 UTC (16 years, 1 month ago) by dtc
Branch: MAIN
Changes since 1.25: +2 -2 lines
Diff to previous 1.25
Fix doc. typos "the the" -> "the".

Revision 1.25 - (view) (annotate) - [select for diffs]
Tue Jan 6 16:51:51 1998 UTC (16 years, 3 months ago) by dtc
Branch: MAIN
Changes since 1.24: +44 -35 lines
Diff to previous 1.24
Delay the generation of the type checks delayed until all the type
check decisions have been made because the generation of the type
checks creates new nodes who's derived types aren't always updated
which may lead to inappropriate template choices due to the
modification of argument types.

Revision 1.24 - (view) (annotate) - [select for diffs]
Mon Oct 31 04:27:28 1994 UTC (19 years, 5 months ago) by ram
Branch: MAIN
Branch point for: RELENG_18
Changes since 1.23: +1 -3 lines
Diff to previous 1.23
Fix headed boilerplate.

Revision 1.23 - (view) (annotate) - [select for diffs]
Wed Aug 25 00:14:48 1993 UTC (20 years, 8 months ago) by ram
Branch: MAIN
Changes since 1.22: +2 -2 lines
Diff to previous 1.22
Fix compiler warnings.

Revision 1.22 - (view) (annotate) - [select for diffs]
Mon Sep 7 15:34:20 1992 UTC (21 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.21: +9 -8 lines
Diff to previous 1.21
Changed erroneous calls to be :ERROR kind, not :FULL

Revision 1.21 - (view) (annotate) - [select for diffs]
Sat Aug 1 17:34:14 1992 UTC (21 years, 8 months ago) by ram
Branch: MAIN
Changes since 1.20: +3 -2 lines
Diff to previous 1.20
If *byte-compiling*, only do compile-type type error checking.  No check
conversion is done, since this violates stack discipline.  All type checks are
done on the fly during byte conversion.

Revision 1.20 - (view) (annotate) - [select for diffs]
Tue Jul 21 18:41:26 1992 UTC (21 years, 9 months ago) by ram
Branch: MAIN
Changes since 1.19: +17 -20 lines
Diff to previous 1.19
This lets type checking assume that the continuation does have a DEST,
and also avoids some unnecessary work.

Revision 1.19 - (view) (annotate) - [select for diffs]
Sat Mar 21 19:41:14 1992 UTC (22 years, 1 month ago) by wlott
Branch: MAIN
Changes since 1.18: +4 -3 lines
Diff to previous 1.18
Moved *type-predicate* and *predicate-type* into the backend structure.

Revision 1.18 - (view) (annotate) - [select for diffs]
Mon Mar 18 20:54:43 1991 UTC (23 years, 1 month ago) by ram
Branch: MAIN
Changes since 1.17: +7 -2 lines
Diff to previous 1.17
Added a switch the disable the complementing optimization of type checks
(for testing its effectiveness.)

Revision 1.17 - (view) (annotate) - [select for diffs]
Wed Feb 20 14:56:43 1991 UTC (23 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.16: +8 -4 lines
Diff to previous 1.16
New file header with RCS stuff.

Revision 1.16 - (view) (annotate) - [select for diffs]
Fri Dec 28 16:49:09 1990 UTC (23 years, 4 months ago) by ram
Branch: MAIN
Changes since 1.15: +18 -8 lines
Diff to previous 1.15
Changed MAYBE-NEGATE-CHECK to allow weakened checks to be simple when
debug-info is not important, so that we can use CHECK-STRUCTURE, etc.
Changed TYPE-TEST-COST to penalize predicates as opposed to check templates
so that we will use a check template in favor of a "same cost" predicate.

Revision 1.15 - (view) (annotate) - [select for diffs]
Tue Nov 13 22:48:18 1990 UTC (23 years, 5 months ago) by wlott
Branch: MAIN
Changes since 1.14: +2 -2 lines
Diff to previous 1.14
Pass *backend* to sc-or-lose and friends to assure we extract the info
from the correct backend for runtime.

Revision 1.14 - (view) (annotate) - [select for diffs]
Wed Oct 17 03:52:02 1990 UTC (23 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.13: +9 -14 lines
Diff to previous 1.13
Changed DO-TYPE-WARNING to ignore uses whose type is NIL, and also
tweaked output format a bit.

Revision 1.13 - (view) (annotate) - [select for diffs]
Thu Oct 11 17:22:17 1990 UTC (23 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.12: +107 -33 lines
Diff to previous 1.12
Force type check conversion of continuations that may be forced to
unknown values even though they are really fixed-values (and people
might be depending on the check, like non-local RETURN-FROM.)
Don't do an inline type check for the argument of a full call, even when
we are "sure" that there is an error, since the user might want to
fix the problem by redefining the callee, and not by changing the 
caller (or callers.)
Spiffed up type error warnings to use the variable we are binding to
as context when doing a local call.  Also, instead of saying we
"got NIL", we say we got an expression that didn't return.
Changed type error checking to consistently flame about all losing
uses of a continuation, instead of maybe only flaming about the
first one, or even totally missing it if the first use we see is
non-erroneous but hairy.
Also, don't do type warnings on continuations with :DELETE TYPE-CHECK,
since those are the result of hairy type checks.

Revision 1.12 - (view) (annotate) - [select for diffs]
Wed Sep 5 15:33:31 1990 UTC (23 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.11: +40 -39 lines
Diff to previous 1.11
Fixed GENERATE-TYPE-CHECKS to always give a warning when any use of
the continuation is incorrect, instead of only warning when the first
use happened to be incorrect.

Revision 1.11 - (view) (annotate) - [select for diffs]
Mon Jul 23 14:09:49 1990 UTC (23 years, 9 months ago) by ram
Branch: MAIN
Changes since 1.10: +0 -4 lines
Diff to previous 1.10
Flushed cleanup hackery, since the lexenv changes make this unnecessary.

Revision 1.10 - (view) (annotate) - [select for diffs]
Wed Jun 6 13:49:57 1990 UTC (23 years, 10 months ago) by ram
Branch: MAIN
Branch point for: eval_debug
Changes since 1.9: +3 -2 lines
Diff to previous 1.9
Added use of *unparse-function-type-simplify* to prevent complex function
types from being checked, even when they are buried in other types 
(like OR.)

Revision 1.9 - (view) (annotate) - [select for diffs]
Fri Jun 1 13:43:03 1990 UTC (23 years, 10 months ago) by ram
Branch: MAIN
Changes since 1.8: +20 -3 lines
Diff to previous 1.8
Added NO-FUNCTION-VALUES-TYPES and made people use it so that they aren't
confused by complex function types.

Revision 1.8 - (view) (annotate) - [select for diffs]
Tue May 22 13:14:58 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.7: +2 -1 lines
Diff to previous 1.7
Changed MAYBE-WEAKEN-CHECK to accept a type if there is a predicate for that
exact type, rather than possibly blowing off the check entirely.

Revision 1.7 - (view) (annotate) - [select for diffs]
Tue May 22 13:10:20 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.6: +8 -4 lines
Diff to previous 1.6
Oops...  We can't negate a check and weaken it too.  Choose whichever is

Revision 1.6 - (view) (annotate) - [select for diffs]
Mon May 21 17:03:06 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.5: +5 -4 lines
Diff to previous 1.5
Changed PROBABLE-TYPE-CHECK-P to return T when we are unable to determine when
VALID-FUNCTION-USE is unable to determine the whether the template applies.  If
the VOP operand is unrestrictive, but we know it is of an unknown type, then
the type-operation will fail but the template can still be selected, since
PRIMITIVE-TYPE isn't fooled.

Revision 1.5 - (view) (annotate) - [select for diffs]
Thu May 17 13:41:54 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.4: +3 -2 lines
Diff to previous 1.4
Changed type check weakening not to choose supertypes that are union types
(i.e. COMMON).  Also, we don't preserve the original check just because there
was some supertype predicate.

Revision 1.4 - (view) (annotate) - [select for diffs]
Wed May 16 10:56:25 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.3: +1 -1 lines
Diff to previous 1.3
Type warnings only inhibited when brevity = 3.

Revision 1.3 - (view) (annotate) - [select for diffs]
Sat May 12 20:13:16 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.2: +47 -8 lines
Diff to previous 1.2
Added type check weakening (conditional on policy), and made type checks
be totally flushed only when safety = 0.
Also, when printing a type warning, check to see if the losing value is
a constant, and if so, print it instead of its type.

Revision 1.2 - (view) (annotate) - [select for diffs]
Tue Mar 27 11:39:36 1990 UTC (24 years, 1 month ago) by ram
Branch: MAIN
Changes since 1.1: +10 -0 lines
Diff to previous 1.1
Added code to make known calls unknown if there is an argument with
a type error.

Revision 1.1 - (view) (annotate) - [select for diffs]
Tue Feb 6 11:27:36 1990 UTC (24 years, 2 months ago) by wlott
Branch: MAIN
Initial revision

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.

  Diffs between and
  Type of Diff should be a

Sort log by:

  ViewVC Help
Powered by ViewVC 1.1.5