over "*" append over "*" append (typedef) (typedef) ;
global [ c-types nest drop ] bind
-
-[
- [ alien-unsigned-cell <alien> ] "getter" set
- [
- >r >r alien-address r> r> set-alien-unsigned-cell
- ] "setter" set
- cell "width" set
- cell "align" set
- "box_alien" "boxer" set
- "unbox_alien" "unboxer" set
-] "void*" define-primitive-type
-
-[
- [ alien-signed-8 ] "getter" set
- [ set-alien-signed-8 ] "setter" set
- 8 "width" set
- 8 "align" set
- "box_signed_8" "boxer" set
- "unbox_signed_8" "unboxer" set
-] "longlong" define-primitive-type
-
-[
- [ alien-unsigned-8 ] "getter" set
- [ set-alien-unsigned-8 ] "setter" set
- 8 "width" set
- 8 "align" set
- "box_unsinged_8" "boxer" set
- "unbox_unsigned_8" "unboxer" set
-] "ulonglong" define-primitive-type
-
-[
- [ alien-signed-4 ] "getter" set
- [ set-alien-signed-4 ] "setter" set
- 4 "width" set
- 4 "align" set
- "box_signed_4" "boxer" set
- "unbox_signed_4" "unboxer" set
-] "int" define-primitive-type
-
-[
- [ alien-unsigned-4 ] "getter" set
- [ set-alien-unsigned-4 ] "setter" set
- 4 "width" set
- 4 "align" set
- "box_unsigned_4" "boxer" set
- "unbox_unsigned_4" "unboxer" set
-] "uint" define-primitive-type
-
-[
- [ alien-signed-2 ] "getter" set
- [ set-alien-signed-2 ] "setter" set
- 2 "width" set
- 2 "align" set
- "box_signed_2" "boxer" set
- "unbox_signed_2" "unboxer" set
-] "short" define-primitive-type
-
-[
- [ alien-unsigned-2 ] "getter" set
- [ set-alien-unsigned-2 ] "setter" set
- 2 "width" set
- 2 "align" set
- "box_unsigned_2" "boxer" set
- "unbox_unsigned_2" "unboxer" set
-] "ushort" define-primitive-type
-
-[
- [ alien-signed-1 ] "getter" set
- [ set-alien-signed-1 ] "setter" set
- 1 "width" set
- 1 "align" set
- "box_signed_1" "boxer" set
- "unbox_signed_1" "unboxer" set
-] "char" define-primitive-type
-
-[
- [ alien-unsigned-1 ] "getter" set
- [ set-alien-unsigned-1 ] "setter" set
- 1 "width" set
- 1 "align" set
- "box_unsigned_1" "boxer" set
- "unbox_unsigned_1" "unboxer" set
-] "uchar" define-primitive-type
-
-[
- [ alien-c-string ] "getter" set
- [ set-alien-c-string ] "setter" set
- cell "width" set
- cell "align" set
- "box_c_string" "boxer" set
- "unbox_c_string" "unboxer" set
-] "char*" define-primitive-type
-
-[
- [ alien-unsigned-4 ] "getter" set
- [ set-alien-unsigned-4 ] "setter" set
- cell "width" set
- cell "align" set
- "box_utf16_string" "boxer" set
- "unbox_utf16_string" "unboxer" set
-] "ushort*" define-primitive-type
-
-[
- [ alien-unsigned-4 0 = not ] "getter" set
- [ 1 0 ? set-alien-unsigned-4 ] "setter" set
- cell "width" set
- cell "align" set
- "box_boolean" "boxer" set
- "unbox_boolean" "unboxer" set
-] "bool" define-primitive-type
-
-[
- [ alien-float ] "getter" set
- [ set-alien-float ] "setter" set
- cell "width" set
- cell "align" set
- "box_float" "boxer" set
- "unbox_float" "unboxer" set
- << float-regs f 4 >> "reg-class" set
-] "float" define-primitive-type
-
-[
- [ alien-double ] "getter" set
- [ set-alien-double ] "setter" set
- cell 2 * "width" set
- cell 2 * "align" set
- "box_double" "boxer" set
- "unbox_double" "unboxer" set
- << float-regs f 8 >> "reg-class" set
-] "double" define-primitive-type
-
-! FIXME for 64-bit platforms
-"int" "long" typedef
-"uint" "ulong" typedef
--- /dev/null
+USING: alien compiler-backend kernel math namespaces ;
+
+[
+ [ alien-unsigned-cell <alien> ] "getter" set
+ [
+ >r >r alien-address r> r> set-alien-unsigned-cell
+ ] "setter" set
+ cell "width" set
+ cell "align" set
+ "box_alien" "boxer" set
+ "unbox_alien" "unboxer" set
+] "void*" define-primitive-type
+
+[
+ [ alien-signed-8 ] "getter" set
+ [ set-alien-signed-8 ] "setter" set
+ 8 "width" set
+ 8 "align" set
+ "box_signed_8" "boxer" set
+ "unbox_signed_8" "unboxer" set
+] "longlong" define-primitive-type
+
+[
+ [ alien-unsigned-8 ] "getter" set
+ [ set-alien-unsigned-8 ] "setter" set
+ 8 "width" set
+ 8 "align" set
+ "box_unsinged_8" "boxer" set
+ "unbox_unsigned_8" "unboxer" set
+] "ulonglong" define-primitive-type
+
+[
+ [ alien-signed-4 ] "getter" set
+ [ set-alien-signed-4 ] "setter" set
+ 4 "width" set
+ 4 "align" set
+ "box_signed_4" "boxer" set
+ "unbox_signed_4" "unboxer" set
+] "int" define-primitive-type
+
+[
+ [ alien-unsigned-4 ] "getter" set
+ [ set-alien-unsigned-4 ] "setter" set
+ 4 "width" set
+ 4 "align" set
+ "box_unsigned_4" "boxer" set
+ "unbox_unsigned_4" "unboxer" set
+] "uint" define-primitive-type
+
+[
+ [ alien-signed-2 ] "getter" set
+ [ set-alien-signed-2 ] "setter" set
+ 2 "width" set
+ 2 "align" set
+ "box_signed_2" "boxer" set
+ "unbox_signed_2" "unboxer" set
+] "short" define-primitive-type
+
+[
+ [ alien-unsigned-2 ] "getter" set
+ [ set-alien-unsigned-2 ] "setter" set
+ 2 "width" set
+ 2 "align" set
+ "box_unsigned_2" "boxer" set
+ "unbox_unsigned_2" "unboxer" set
+] "ushort" define-primitive-type
+
+[
+ [ alien-signed-1 ] "getter" set
+ [ set-alien-signed-1 ] "setter" set
+ 1 "width" set
+ 1 "align" set
+ "box_signed_1" "boxer" set
+ "unbox_signed_1" "unboxer" set
+] "char" define-primitive-type
+
+[
+ [ alien-unsigned-1 ] "getter" set
+ [ set-alien-unsigned-1 ] "setter" set
+ 1 "width" set
+ 1 "align" set
+ "box_unsigned_1" "boxer" set
+ "unbox_unsigned_1" "unboxer" set
+] "uchar" define-primitive-type
+
+[
+ [ alien-c-string ] "getter" set
+ [ set-alien-c-string ] "setter" set
+ cell "width" set
+ cell "align" set
+ "box_c_string" "boxer" set
+ "unbox_c_string" "unboxer" set
+] "char*" define-primitive-type
+
+[
+ [ alien-unsigned-4 ] "getter" set
+ [ set-alien-unsigned-4 ] "setter" set
+ cell "width" set
+ cell "align" set
+ "box_utf16_string" "boxer" set
+ "unbox_utf16_string" "unboxer" set
+] "ushort*" define-primitive-type
+
+[
+ [ alien-unsigned-4 0 = not ] "getter" set
+ [ 1 0 ? set-alien-unsigned-4 ] "setter" set
+ cell "width" set
+ cell "align" set
+ "box_boolean" "boxer" set
+ "unbox_boolean" "unboxer" set
+] "bool" define-primitive-type
+
+[
+ [ alien-float ] "getter" set
+ [ set-alien-float ] "setter" set
+ cell "width" set
+ cell "align" set
+ "box_float" "boxer" set
+ "unbox_float" "unboxer" set
+ << float-regs f 4 >> "reg-class" set
+] "float" define-primitive-type
+
+[
+ [ alien-double ] "getter" set
+ [ set-alien-double ] "setter" set
+ cell 2 * "width" set
+ cell 2 * "align" set
+ "box_double" "boxer" set
+ "unbox_double" "unboxer" set
+ << float-regs f 8 >> "reg-class" set
+] "double" define-primitive-type
+
+! FIXME for 64-bit platforms
+"int" "long" typedef
+"uint" "ulong" typedef
! Copyright (C) 2004, 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: alien
-USING: assembler compiler errors generic hashtables kernel lists
-math namespaces parser sequences strings words ;
+USING: assembler compiler compiler-backend errors generic
+hashtables kernel lists math namespaces parser sequences strings
+words ;
! Some code for interfacing with C structures.
"/library/generic/math-combination.factor"
"/library/generic/predicate.factor"
"/library/generic/union.factor"
- "/library/generic/complement.factor"
"/library/generic/tuple.factor"
"/library/syntax/generic.factor"
"/library/compiler/x86/stack.factor"\r
"/library/compiler/x86/fixnum.factor"\r
"/library/compiler/x86/alien.factor"\r
+ "/library/alien/primitive-types.factor"\r
] pull-in\r
\r
cpu "ppc" = [\r
"/library/compiler/ppc/stack.factor"\r
"/library/compiler/ppc/fixnum.factor"\r
"/library/compiler/ppc/alien.factor"\r
+ "/library/alien/primitive-types.factor"\r
] pull-in\r
\r
"statically-linked" get [\r
"displaced-alien" "alien" create 20 "displaced-alien?" "alien" create { } define-builtin
+! Define general-t type, which is any object that is not f.
+"general-t" "kernel" create dup define-symbol
+"general-t?" "kernel" create
+"f" "!syntax" lookup builtins get remove [ ] subset
+define-union
+
FORGET: builtin-predicate
FORGET: register-builtin
FORGET: define-builtin
-IN: compiler-frontend
+IN: compiler-backend
! A few things the front-end needs to know about the back-end.
! Copyright (C) 2004, 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: assembler
-USING: alien math memory kernel hashtables namespaces ;
+USING: alien compiler-backend math memory kernel hashtables
+namespaces ;
SYMBOL: interned-literals
-IN: compiler-frontend
+IN: compiler-backend
USING: assembler compiler-backend math ;
! PowerPC register assignments
! Copyright (C) 2004, 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: compiler
-USING: assembler kernel lists math namespaces sequences words ;
+USING: assembler compiler-backend kernel lists math namespaces
+sequences words ;
! To support saving compiled code to disk, generator words
! append relocation instructions to this vector.
-IN: compiler-frontend
+IN: compiler-backend
USING: assembler compiler-backend sequences ;
! x86 register assignments
+++ /dev/null
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-
-IN: generic
-USING: errors hashtables kernel lists math parser strings
-sequences vectors words ;
-
-! Complement metaclass, contains all objects not in a certain class.
-SYMBOL: complement
-
-: complement-predicate ( complement -- list )
- "predicate" word-prop [ not ] append ;
-
-: complement-types ( class -- types )
- "complement" word-prop types object types seq-diff ;
-
-: define-complement ( class complement -- )
- 2dup "complement" set-word-prop
- dupd complement-predicate "predicate" set-word-prop
- dup dup complement-types "types" set-word-prop
- complement define-class ;
-
-PREDICATE: word complement metaclass complement = ;
! Copyright (C) 2004, 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: inference
-USING: compiler-frontend generic hashtables inference kernel
+USING: compiler-backend generic hashtables inference kernel
lists math matrices namespaces sequences vectors ;
! We use the recursive-state variable here, to track nested
{ } set-datastack ;
UNION: boolean POSTPONE: f POSTPONE: t ;
-COMPLEMENT: general-t f
GENERIC: hashcode ( obj -- n ) flushable
M: object hashcode drop 0 ;
#! G: word combination ;
CREATE dup reset-word [ define-generic* ] [ ] ; parsing
-: COMPLEMENT: ( -- )
- #! Followed by a class name, then a complemented class.
- CREATE
- dup intern-symbol
- scan-word define-complement ; parsing
-
: UNION: ( -- class predicate definition )
#! Followed by a class name, then a list of union members.
CREATE
dup pprint-word
"members" word-prop pprint-elements pprint-; newline ;
-M: complement class.
- \ COMPLEMENT: pprint-word
- dup pprint-word
- "complement" word-prop pprint-word newline ;
-
M: predicate class.
\ PREDICATE: pprint-word
dup "superclass" word-prop pprint-word
[ "IN: temporary\nSYMBOL: bah\nUNION: bah fixnum alien ;\n" ]
[ [ \ bah see ] string-out ] unit-test
-[ t ] [
- DEFER: not-fixnum
- "IN: temporary\nSYMBOL: not-fixnum\nCOMPLEMENT: not-fixnum fixnum\n"
- dup eval
- [ \ not-fixnum see ] string-out =
-] unit-test
-
! Weird bug
GENERIC: stack-underflow
M: object stack-underflow 2drop ;