Comment out alien.remote-control tests for now
[factor/jcg.git] / core / layouts / layouts.factor
blob5a32ca2dced334b4bc4696dea7bd015daae4a2f8
1 ! Copyright (C) 2007, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: namespaces math words kernel assocs classes
4 math.order kernel.private ;
5 IN: layouts
7 SYMBOL: tag-mask
9 SYMBOL: num-tags
11 SYMBOL: tag-bits
13 SYMBOL: num-types
15 SYMBOL: tag-numbers
17 SYMBOL: type-numbers
19 : tag-number ( class -- n )
20     tag-numbers get at [ object tag-number ] unless* ;
22 : type-number ( class -- n )
23     type-numbers get at ;
25 : tag-fixnum ( n -- tagged )
26     tag-bits get shift ;
28 ! We do this in its own compilation unit so that they can be
29 ! folded below
31 : cell ( -- n ) 7 getenv ; foldable
33 : (first-bignum) ( m -- n ) tag-bits get - 1 - 2^ ; foldable
36 : cells ( m -- n ) cell * ; inline
38 : cell-bits ( -- n ) 8 cells ; inline
40 : bootstrap-cell ( -- n ) \ cell get cell or ; inline
42 : bootstrap-cells ( m -- n ) bootstrap-cell * ; inline
44 : bootstrap-cell-bits ( -- n ) 8 bootstrap-cells ; inline
46 : first-bignum ( -- n )
47     cell-bits (first-bignum) ; inline
49 : most-positive-fixnum ( -- n )
50     first-bignum 1- ; inline
52 : most-negative-fixnum ( -- n )
53     first-bignum neg ; inline
55 : (max-array-capacity) ( b -- n )
56     5 - 2^ 1- ; inline
58 : max-array-capacity ( -- n )
59     cell-bits (max-array-capacity) ; inline
61 : bootstrap-first-bignum ( -- n )
62     bootstrap-cell-bits (first-bignum) ;
64 : bootstrap-most-positive-fixnum ( -- n )
65     bootstrap-first-bignum 1- ;
67 : bootstrap-most-negative-fixnum ( -- n )
68     bootstrap-first-bignum neg ;
70 : bootstrap-max-array-capacity ( -- n )
71     bootstrap-cell-bits (max-array-capacity) ;
73 M: bignum >integer
74     dup most-negative-fixnum most-positive-fixnum between?
75     [ >fixnum ] when ;
77 M: real >integer
78     dup most-negative-fixnum most-positive-fixnum between?
79     [ >fixnum ] [ >bignum ] if ;
81 UNION: immediate fixnum POSTPONE: f ;