]> gitweb.factorcode.org Git - factor.git/commitdiff
major bootstrap cleanup
authorSlava Pestov <slava@factorcode.org>
Sat, 20 Aug 2005 01:46:12 +0000 (01:46 +0000)
committerSlava Pestov <slava@factorcode.org>
Sat, 20 Aug 2005 01:46:12 +0000 (01:46 +0000)
35 files changed:
TODO.FACTOR.txt
library/alien/aliens.factor
library/bootstrap/boot-stage1.factor
library/bootstrap/primitives.factor
library/collections/arrays.factor
library/collections/cons.factor
library/collections/hashtables.factor
library/collections/sbuf.factor
library/collections/sequences-epilogue.factor
library/collections/strings.factor
library/collections/vectors.factor
library/compiler/intrinsics.factor
library/generic/builtin.factor [deleted file]
library/generic/generic.factor
library/generic/math-combination.factor
library/generic/slots.factor
library/generic/tuple.factor
library/io/lines.factor
library/io/stdio.factor
library/kernel.factor
library/math/complex.factor
library/math/float.factor
library/math/integer.factor
library/math/matrices.factor
library/math/ratio.factor
library/syntax/generic.factor
library/syntax/parse-stream.factor
library/syntax/parse-syntax.factor
library/syntax/parse-words.factor
library/syntax/see.factor
library/test/combinators.factor
library/tools/memory.factor
library/words.factor
native/factor.c
native/stack.c

index 106a08195df9746aa23697a5db6177a58a6acf34..4860d4299b6159f5b418f3b8fd54c89a70185c00 100644 (file)
@@ -1,3 +1,19 @@
+- fix bootstrap failure\r
+- flushing optimization\r
+- add foldable, flushable, inline to all relevant library words\r
+- new prettyprinter\r
+  - limit output to n lines\r
+  - limit sequences to n elements\r
+  - put newlines where necessary\r
+  - limit lines to 64 chars\r
+  - conditional newlines after certain words\r
+  - rename prettyprint* to pprint, prettyprint to pp\r
+  - reader syntax for arrays, byte arrays, displaced aliens\r
+  - print parsing words in bold\r
+  - unify unparse and prettyprint\r
+- split, group: return vectors\r
+- sleep word\r
+\r
 + ui:\r
 \r
 - fix listener prompt display after presentation commands invoked\r
@@ -42,7 +58,6 @@
 \r
 - http keep alive, and range get\r
 - code walker & exceptions\r
-- sleep word\r
 \r
 + ffi:\r
 \r
@@ -59,7 +74,6 @@
 - changing a word to be 'inline' after it was already defined doesn't\r
   work properly\r
 - inference needs to be more robust with heavily recursive code\r
-- powerpc: float ffi parameters\r
 - fix fixnum<< and /i overflow on PowerPC\r
 - simplifier:\r
   - kill replace after a peek\r
 - powerpc has weird callstack residue\r
 - instances: do not use make-list\r
 - method doc strings\r
-- clean up metaclasses\r
 - vectors: ensure its ok with bignum indices\r
 - code gc\r
 - doc comments of generics\r
-- M: object should not inhibit delegation\r
 \r
 + i/o:\r
 \r
 - unix io: handle \n\r and \n\0\r
 - stream server can hang because of exception handler limitations\r
 - better i/o scheduler\r
-- unify unparse and prettyprint\r
 - utf16, utf8 encoding\r
 - fix i/o on generic x86/ppc unix\r
 - if two tasks write to a unix stream, the buffer can overflow\r
-- rename prettyprint* to pprint, prettyprint to pp\r
-- reader syntax for arrays, byte arrays, displaced aliens\r
-- print parsing words in bold\r
 \r
 + nice to have libraries:\r
 \r
index d1d83cc1843d4599ebb79b83fd09b591cf1bf8f9..54a3dd6429f31ebed4a2bb96386ac8b5bee0ef5d 100644 (file)
@@ -4,15 +4,6 @@ IN: alien
 USING: hashtables io kernel kernel-internals lists math
 namespaces parser ;
 
-DEFER: dll?
-BUILTIN: dll 15 dll? { 1 "dll-path" f } ;
-
-DEFER: alien?
-BUILTIN: alien 16 alien? ;
-
-DEFER: displaced-alien?
-BUILTIN: displaced-alien 20 displaced-alien? ;
-
 UNION: c-ptr byte-array alien displaced-alien ;
 
 : NULL ( -- null )
index 8d8748f3f3fe7b7a6e1d2126888091f7ef352353..4a6a4c70e32b594d5515f29e68691b5489447637 100644 (file)
@@ -118,7 +118,6 @@ parser prettyprint sequences io vectors words ;
 ] make-list
 
 "object" [ "generic" ] search
-"tuple" [ "generic" ] search
 "null" [ "generic" ] search
 "typemap" [ "generic" ] search
 "builtins" [ "generic" ] search
@@ -129,7 +128,6 @@ reveal
 reveal
 reveal
 reveal
-reveal
 
 [
     [
@@ -147,7 +145,6 @@ reveal
         "/library/generic/slots.factor"
         "/library/generic/object.factor"
         "/library/generic/null.factor"
-        "/library/generic/builtin.factor"
         "/library/generic/math-combination.factor"
         "/library/generic/predicate.factor"
         "/library/generic/union.factor"
index fe1c7432c94dc55aa8a60bdb43e989ae52cc825e..36b589ae1d5860be4b579fd43c3164ff6fec6019 100644 (file)
@@ -1,11 +1,11 @@
 ! Copyright (C) 2004, 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: image
-USING: alien assembler compiler errors files generic generic
-hashtables hashtables io io-internals kernel kernel
-kernel-internals lists lists math math math-internals memory
-namespaces parser parser profiler sequences strings unparser
-vectors vectors words words ;
+USING: alien generic hashtables io kernel kernel-internals lists
+math namespaces sequences strings vectors words ;
+
+! Some very tricky code creating a bootstrap embryo in the
+! host image.
 
 "Creating primitives and basic runtime structures..." print
 
@@ -18,12 +18,7 @@ vocabularies
 "generic" vocab clone
 
 <namespace> vocabularies set
-
-! Hack
-{{ [[ { } null ]] }} typemap set
-
-num-types empty-vector builtins set
-<namespace> crossref set
+f crossref set
 
 vocabularies get [
     "generic" set
@@ -231,3 +226,101 @@ vocabularies get [
 
 FORGET: make-primitive
 FORGET: set-stack-effect
+
+! Okay, now we have primitives fleshed out. Bring up the generic
+! word system.
+: builtin-predicate ( class predicate -- )
+    [ \ type , over types first , \ eq? , ] make-list
+    define-predicate ;
+
+: register-builtin ( class -- )
+    dup types first builtins get set-nth ;
+
+: define-builtin ( symbol type# predicate slotspec -- )
+    >r >r >r
+    dup intern-symbol
+    dup r> 1vector "types" set-word-prop
+    dup builtin define-class
+    dup r> builtin-predicate
+    dup r> intern-slots 2dup "slots" set-word-prop
+    define-slots
+    register-builtin ;
+
+! Hack
+{{ [[ { } null ]] }} typemap set
+
+num-types empty-vector builtins set
+
+"fixnum" "math" create 0 "fixnum?" "math" create { } define-builtin
+"fixnum" "math" create 0 "math-priority" set-word-prop
+"fixnum" "math" create ">fixnum" [ "math" ] search unit "coercer" set-word-prop
+
+"bignum" "math" create 1 "bignum?" "math" create { } define-builtin
+"bignum" "math" create 1 "math-priority" set-word-prop
+"bignum" "math" create ">bignum" [ "math" ] search unit "coercer" set-word-prop
+
+"cons" "lists" create 2 "cons?" "lists" create
+{ { 0 { "car" "lists" } f } { 1 { "cdr" "lists" } f } } define-builtin
+
+"ratio" "math" create 4 "ratio?" "math" create
+{ { 0 { "numerator" "math" } f } { 1 { "denominator" "math" } f } } define-builtin
+"ratio" "math" create 2 "math-priority" set-word-prop
+
+"float" "math" create 5 "float?" "math" create { } define-builtin
+"float" "math" create 3 "math-priority" set-word-prop
+"float" "math" create ">float" [ "math" ] search unit "coercer" set-word-prop
+
+"complex" "math" create 6 "complex?" "math" create
+{ { 0 { "real" "math" } f } { 1 { "imaginary" "math" } f } } define-builtin
+"complex" "math" create 4 "math-priority" set-word-prop
+
+"t" "!syntax" create 7 "t?" "kernel" create
+{ } define-builtin
+
+"array" "kernel-internals" create 8 "array?" "kernel-internals" create
+{ } define-builtin
+
+"f" "!syntax" create 9 "not" "kernel" create
+{ } define-builtin
+
+"hashtable" "hashtables" create 10 "hashtable?" "hashtables" create {
+    { 1 { "hash-size" "hashtables" } { "set-hash-size" "kernel-internals" } }
+    { 2 { "hash-array" "kernel-internals" } { "set-hash-array" "kernel-internals" } }
+} define-builtin
+
+"vector" "vectors" create 11 "vector?" "vectors" create {
+    { 1 { "length" "sequences" } { "set-capacity" "kernel-internals" } }
+    { 2 { "underlying" "kernel-internals" } { "set-underlying" "kernel-internals" } }
+} define-builtin
+
+"string" "strings" create 12 "string?" "strings" create {
+    { 1 { "length" "sequences" } f }
+    { 2 { "hashcode" "kernel" } f }
+} define-builtin
+
+"sbuf" "strings" create 13 "sbuf?" "strings" create {
+    { 1 { "length" "sequences" } { "set-capacity" "kernel-internals" } }
+    { 2 { "underlying" "kernel-internals" } { "set-underlying" "kernel-internals" } }
+} define-builtin
+
+"wrapper" "kernel" create 14 "wrapper?" "kernel" create
+{ { 1 { "wrapped" "kernel" } f } } define-builtin
+
+"dll" "alien" create 15 "dll?" "alien" create
+{ { 1 { "dll-path" "alien" } f } } define-builtin
+
+"alien" "alien" create 16 "alien?" "alien" create { } define-builtin
+
+"word" "words" create 17 "word?" "words" create {
+    { 1 { "hashcode" "kernel" } f }
+    { 4 { "word-def" "words" } { "set-word-def" "words" } }
+    { 5 { "word-props" "words" } { "set-word-props" "words" } }
+} define-builtin
+
+"tuple" "kernel" create 18 "tuple?" "kernel" create { } define-builtin
+
+"displaced-alien" "alien" create 20 "displaced-alien?" "alien" create { } define-builtin
+
+FORGET: builtin-predicate
+FORGET: register-builtin
+FORGET: define-builtin
index 115d07f5afad6bdd250a31bf57b041c5bb096208..5053511705b91a2cdc85c6850a3a687735202730 100644 (file)
@@ -17,9 +17,6 @@ DEFER: repeat
 IN: kernel-internals
 USING: kernel math-internals sequences ;
 
-DEFER: array?
-BUILTIN: array 8 array? ;
-
 : array-capacity ( a -- n ) 1 slot ; inline
 : array-nth ( n a -- obj ) swap 2 fixnum+ slot ; inline
 : set-array-nth ( obj n a -- ) swap 2 fixnum+ set-slot ; inline
index a511bbad7cbef22ca4fa06f14e0f88fedebacfd1..9e71d246e3c851c150db9492616f4ad62fb6a406 100644 (file)
@@ -6,9 +6,6 @@ IN: lists USING: generic kernel sequences ;
 ! else depends on, and is loaded early in bootstrap.
 ! lists.factor has everything else.
 
-DEFER: cons?
-BUILTIN: cons 2 cons? { 0 "car" f } { 1 "cdr" f } ;
-
 ! We borrow an idiom from Common Lisp. The car/cdr of an empty
 ! list is the empty list.
 M: f car ;
index e73dd6532303b86f150b3b3b04f5e8e99e88a284..984a6d5c759f3c586e53454603f553efa87de587 100644 (file)
@@ -1,20 +1,8 @@
 ! Copyright (C) 2004, 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
-IN: kernel-internals
-
-DEFER: hash-array
-DEFER: set-hash-array
-DEFER: set-hash-size
-
 IN: hashtables
-USING: generic kernel lists math sequences vectors ;
-
-! We put hash-size in the hashtables vocabulary, and
-! the other words in kernel-internals.
-DEFER: hashtable?
-BUILTIN: hashtable 10 hashtable?
-    { 1 "hash-size" set-hash-size }
-    { 2 hash-array set-hash-array } ;
+USING: generic kernel lists math sequences vectors
+kernel-internals ;
 
 ! A hashtable is implemented as an array of buckets. The
 ! array index is determined using a hash function, and the
index a31fb0efe453837d143fed6a9dda96f0d78d369c..e315abde76291cba67f5ec59f212cc2ca55c575a 100644 (file)
@@ -10,11 +10,6 @@ USING: generic sequences ;
 
 M: string resize resize-string ;
 
-DEFER: sbuf?
-BUILTIN: sbuf 13 sbuf?
-    { 1 length set-capacity }
-    { 2 underlying set-underlying } ;
-
 M: sbuf set-length ( n sbuf -- ) grow-length ;
 
 M: sbuf nth ( n sbuf -- ch ) bounds-check underlying char-slot ;
index 59af52bdca7cde25ee10671ccc4616308a2c0947..810d871f7a886f4cf43ee6e40e3be8be83cac9a1 100644 (file)
@@ -34,6 +34,9 @@ M: object each ( seq quot -- )
     [ [ swap >r >r uncons r> 2nth r> call ] 3keep ] repeat
     2drop ; inline
 
+: 2reduce ( seq seq identity quot -- value | quot: e x y -- z )
+    >r -rot r> 2each ; inline
+
 : 2map ( seq seq quot -- seq | quot: elt elt -- elt )
     over [
         length <vector> 2swap
index da9512f323d2a02c8f93e3d58e7432cbd8016bdb..64ce5d88088094999bcd68b0ae2d7b0e870fa731 100644 (file)
@@ -3,10 +3,6 @@
 IN: strings
 USING: generic kernel kernel-internals lists math sequences ;
 
-! Strings
-DEFER: string?
-BUILTIN: string 12 string? { 1 length f } { 2 hashcode f } ;
-
 M: string nth ( n str -- ch ) bounds-check char-slot ;
 
 GENERIC: >string ( seq -- string )
index 2ad9ddd90ecdfaf3d6a1a3c2a3ddfe4de309df0a..49fb03c2441214bb051b06dcb33454e911a3b3bf 100644 (file)
@@ -4,11 +4,6 @@ IN: vectors
 USING: errors generic kernel kernel-internals lists math
 math-internals sequences ;
 
-DEFER: vector?
-BUILTIN: vector 11 vector?
-    { 1 length set-capacity }
-    { 2 underlying set-underlying } ;
-
 M: vector set-length ( len vec -- ) grow-length ;
 
 M: vector nth ( n vec -- obj ) bounds-check underlying array-nth ;
index b73149e6fb075b110c236fe8a6afefc5fd8bbfcb..b40755448e4d3cbd84f8877d6ceae876165d89a1 100644 (file)
@@ -56,6 +56,10 @@ sequences vectors words ;
 
 : node-peek ( node -- value ) node-in-d peek ;
 
+: type-tag ( type -- tag )
+    #! Given a type number, return the tag number.
+    dup 6 > [ drop 3 ] when ;
+
 : value-tag ( value node -- n/f )
     #! If the tag is known, output it, otherwise f.
     node-classes hash dup [
diff --git a/library/generic/builtin.factor b/library/generic/builtin.factor
deleted file mode 100644 (file)
index e72df5f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-! Copyright (C) 2004, 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: generic
-USING: errors hashtables kernel lists math namespaces parser
-sequences strings vectors words ;
-
-! Builtin metaclass for builtin types: fixnum, word, cons, etc.
-SYMBOL: builtin
-
-! Global vector mapping type numbers to builtin class objects.
-SYMBOL: builtins
-
-: builtin-predicate ( class predicate -- )
-    [ \ type , over types first , \ eq? , ] make-list
-    define-predicate ;
-
-: register-builtin ( class -- )
-    dup types first builtins get set-nth ;
-
-: define-builtin ( symbol type# predicate slotspec -- )
-    >r >r >r
-    dup intern-symbol
-    dup r> 1vector "types" set-word-prop
-    dup builtin define-class
-    dup r> builtin-predicate
-    dup r> intern-slots 2dup "slots" set-word-prop
-    define-slots
-    register-builtin ;
-
-: type>class ( n -- symbol ) builtins get nth ;
-
-PREDICATE: word builtin metaclass builtin = ;
-
-: type-tag ( type -- tag )
-    #! Given a type number, return the tag number.
-    dup 6 > [ drop 3 ] when ;
index c8d34f79394dbbd4ee0dbbdbaa210def9499ac57..77ebfe116901a0ed2a5312f538f25f06786da48c 100644 (file)
@@ -14,6 +14,14 @@ SYMBOL: typemap
 SYMBOL: object
 SYMBOL: null
 
+! Global vector mapping type numbers to builtin class objects.
+SYMBOL: builtins
+
+! Builtin metaclass
+SYMBOL: builtin
+
+: type>class ( n -- symbol ) builtins get nth ;
+
 : predicate-word ( word -- word )
     word-name "?" append create-in ;
 
index 41d921237cb961bb7c1906c440f0d3972f91f2e6..5338fae5d1e972ba3a9d95b67a8e7e08d43d3d9d 100644 (file)
@@ -1,3 +1,5 @@
+! Copyright (C) 2005 Slava Pestov.
+! See http://factor.sf.net/license.txt for BSD license.
 IN: generic
 USING: errors generic hashtables kernel kernel-internals lists
 math namespaces sequences words ;
index db5d040d5ee5a5991e943b389c2efe76c34c915b..22201d6c10949c1cd1c2caa5855f603ed281654b 100644 (file)
@@ -29,12 +29,8 @@ sequences strings vectors words ;
 : define-slot ( class slot reader writer -- )
     >r >r 2dup r> define-reader r> define-writer ;
 
-: ?create-in dup string? [ create-in ] when ;
-
 : intern-slots ( spec -- spec )
-    #! For convenience, we permit reader/writers to be specified
-    #! as strings.
-    [ 3unseq swap ?create-in swap ?create-in 3vector ] map ;
+    [ 3unseq swap 2unseq create swap 2unseq create 3vector ] map ;
 
 : define-slots ( class spec -- )
     #! Define a collection of slot readers and writers for the
@@ -44,10 +40,11 @@ sequences strings vectors words ;
     [ 3unseq define-slot ] each-with ;
 
 : reader-word ( class name -- word )
-    >r word-name "-" r> append3 create-in ;
+    >r word-name "-" r> append3 "in" get 2vector ;
 
 : writer-word ( class name -- word )
-    [ swap "set-" % word-name % "-" % % ] make-string create-in ;
+    [ swap "set-" % word-name % "-" % % ] make-string
+    "in" get 2vector ;
 
 : simple-slot ( class name -- reader writer )
     [ reader-word ] 2keep writer-word ;
@@ -58,4 +55,5 @@ sequences strings vectors words ;
     #! set-<class>-<slot>. Slot numbering is consecutive and
     #! begins at base.
     over length [ + ] map-with
-    [ >r dupd simple-slot r> -rot 3vector ] 2map nip ;
+    [ >r dupd simple-slot r> -rot 3vector ] 2map nip
+    intern-slots ;
index 1f574afd77b383c96f235987bfd0917234296bd0..8a26ca75a2e08648566d5450aed045e6d6070837 100644 (file)
@@ -12,9 +12,6 @@ namespaces parser sequences strings vectors words ;
 ! slot 2 - the class, a word
 ! slot 3 - the delegate tuple, or f
 
-DEFER: tuple?
-BUILTIN: tuple 18 tuple? ;
-
 : delegate ( object -- delegate )
     dup tuple? [ 3 slot ] [ drop f ] ifte ; inline
 
@@ -47,12 +44,13 @@ BUILTIN: tuple 18 tuple? ;
         r> 2drop
     ] ifte ;
 
+: delegate-slots { { 3 delegate set-delegate } } ;
+
 : tuple-slots ( tuple slots -- )
     2dup "slot-names" set-word-prop
     2dup length 2 + "tuple-size" set-word-prop
     dupd 4 simple-slots
-    2dup { [ 3 delegate set-delegate ] } swap append
-    "slots" set-word-prop
+    2dup delegate-slots swap append "slots" set-word-prop
     define-slots ;
 
 : tuple-constructor ( class -- word )
@@ -83,11 +81,8 @@ BUILTIN: tuple 18 tuple? ;
 TUPLE: mirror tuple ;
 
 C: mirror ( tuple -- mirror )
-    over tuple? [
-        [ set-mirror-tuple ] keep
-    ] [
-        "Not a tuple" throw
-    ] ifte ;
+    over tuple? [ "Not a tuple" throw ] unless
+    [ set-mirror-tuple ] keep ;
 
 M: mirror nth ( n mirror -- elt )
     bounds-check mirror-tuple array-nth ;
index 7774004bbc8ff22d231cfaf3d5ad81250a84922b..d4ed2494e25aaebdeb96989066a52efc43c685f8 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2004, 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: io
-USING: errors generic io kernel math namespaces sequences ;
+USING: errors generic io kernel math namespaces sequences
+vectors ;
 
 TUPLE: line-reader cr ;
 
@@ -40,19 +41,9 @@ M: line-reader stream-read ( count line -- string )
         drop
     ] ifte ;
 
-! Reading lines and counting line numbers.
-SYMBOL: line-number
-SYMBOL: parser-stream
+: (lines) ( seq -- seq )
+    readln [ over push (lines) ] when* ;
 
-: next-line ( -- str )
-    parser-stream get stream-readln
-    line-number [ 1 + ] change ;
-
-: read-lines ( stream quot -- )
-    #! Apply a quotation to each line as its read. Close the
-    #! stream.
-    swap [
-        parser-stream set 0 line-number set [ next-line ] while
-    ] [
-        parser-stream get stream-close rethrow
-    ] catch ;
+: lines ( stream -- seq )
+    #! Read all lines from the stream into a sequence.
+    [ 100 <vector> (lines) ] with-stream ;
index e43238a45e7aaac48fe84cb781dd3906748ad8db..6de164ae9adee08025be2a7c8f3e1614e3d685f2 100644 (file)
@@ -1,33 +1,37 @@
-! Copyright (C) 2003, 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: io
-USING: errors generic kernel lists namespaces strings styles ;
-
-: flush  ( -- )              stdio get stream-flush ;
-: readln ( -- string/f )       stdio get stream-readln ;
-: read1  ( -- char/f )       stdio get stream-read1 ;
-: read   ( count -- string ) stdio get stream-read ;
-: write  ( string -- )       stdio get stream-write ;
-: write1 ( char -- )         stdio get stream-write1 ;
-: format ( string style -- ) stdio get stream-format ;
-: print  ( string -- )       stdio get stream-print ;
-: terpri ( -- )              stdio get stream-terpri ;
-: close  ( -- )              stdio get stream-close ;
-
-: crlf   ( -- )              "\r\n" write ;
-: bl     ( -- )              " " write ;
-
-: write-icon ( resource -- )
-    #! Write an icon. Eg, /library/icons/File.png
-    icon swons unit "" swap format ;
-
-: with-stream ( stream quot -- )
-    #! Close the stream no matter what happens.
-    [ swap stdio set [ close rethrow ] catch ] with-scope ;
-
-: with-stream* ( stream quot -- )
-    #! Close the stream if there is an error.
-    [
-        swap stdio set
-        [ [ close rethrow ] when* ] catch
-    ] with-scope ;
+! Copyright (C) 2003, 2005 Slava Pestov.\r
+! See http://factor.sf.net/license.txt for BSD license.\r
+IN: io\r
+USING: errors generic kernel lists namespaces strings styles ;\r
+\r
+: flush  ( -- )              stdio get stream-flush ;\r
+: readln ( -- string/f )     stdio get stream-readln ;\r
+: read1  ( -- char/f )       stdio get stream-read1 ;\r
+: read   ( count -- string ) stdio get stream-read ;\r
+: write  ( string -- )       stdio get stream-write ;\r
+: write1 ( char -- )         stdio get stream-write1 ;\r
+: format ( string style -- ) stdio get stream-format ;\r
+: print  ( string -- )       stdio get stream-print ;\r
+: terpri ( -- )              stdio get stream-terpri ;\r
+: close  ( -- )              stdio get stream-close ;\r
+\r
+: crlf   ( -- )              "\r\n" write ;\r
+: bl     ( -- )              " " write ;\r
+\r
+: write-icon ( resource -- )\r
+    #! Write an icon. Eg, /library/icons/File.png\r
+    icon swons unit "" swap format ;\r
+\r
+: with-stream ( stream quot -- )\r
+    #! Close the stream no matter what happens.\r
+    [ swap stdio set [ close rethrow ] catch ] with-scope ;\r
+\r
+: with-stream* ( stream quot -- )\r
+    #! Close the stream if there is an error.\r
+    [\r
+        swap stdio set\r
+        [ [ close rethrow ] when* ] catch\r
+    ] with-scope ;\r
+\r
+: contents ( stream -- string )\r
+    #! Read the entire stream into a string.\r
+    4096 <sbuf> [ stream-copy ] keep >string ;\r
index ec6e9052451c70ecbbe2527beb01eb0b0cff2388..d47c23ff43c673d025ea66c2baf6d093fa62dbd3 100644 (file)
@@ -46,17 +46,10 @@ M: object clone ;
     #! Push t if cond is true, otherwise push f.
     rot [ drop ] [ nip ] ifte ; inline
 
-DEFER: wrapper?
-BUILTIN: wrapper 14 wrapper? { 1 "wrapped" f } ;
-
 M: wrapper = ( obj wrapper -- ? )
     over wrapper?
     [ swap wrapped swap wrapped = ] [ 2drop f ] ifte ;
 
-! defined in parse-syntax.factor
-DEFER: not
-DEFER: t?
-
 : >boolean t f ? ; inline
 : and ( a b -- a&b ) f ? ; inline
 : or ( a b -- a|b ) t swap ? ; inline
@@ -93,15 +86,6 @@ DEFER: t?
 : 3keep ( x y z quot -- x y z | quot: x y z -- )
     >r 3dup r> swap >r swap >r swap >r call r> r> r> ; inline
 
-: while ( quot generator -- )
-    #! Keep applying the quotation to the value produced by
-    #! calling the generator until the generator returns f.
-    2dup >r >r swap >r call dup [
-        r> call r> r> while
-    ] [
-        r> 2drop r> r> 2drop
-    ] ifte ; inline
-
 : ifte* ( cond true false -- | true: cond -- | false: -- )
     #! [ X ] [ Y ] ifte* ==> dup [ X ] [ drop Y ] ifte
     pick [ drop call ] [ 2nip call ] ifte ; inline
index d87058e75ed29eaa636ec3387717813ba4913f70..c64f1bba24070c6ebfb13a532a069f4c66c3f95d 100644 (file)
@@ -10,10 +10,6 @@ USING: errors generic kernel kernel-internals math ;
 
 IN: math
 
-DEFER: complex?
-BUILTIN: complex 6 complex? { 0 "real" f } { 1 "imaginary" f } ;
-MATH-CLASS: complex 4 f
-
 UNION: number real complex ;
 
 M: real real ;
index f89ca53732d95634781737b61a05c13bb7be551e..4873e1a6cd514515dc67c989f6daa3416d151e64 100644 (file)
@@ -3,10 +3,6 @@
 IN: math
 USING: generic kernel math-internals ;
 
-DEFER: float?
-BUILTIN: float 5 float? ;
-MATH-CLASS: float 3 >float
-
 UNION: real rational float ;
 
 M: real abs dup 0 < [ neg ] when ;
index c010bb7818af5eff3f50628689107fb4f36be2ca..391d936aa30979a5ab8bfa12f90b9f5cb2a5b7f9 100644 (file)
@@ -3,14 +3,6 @@
 IN: math
 USING: errors generic kernel math sequences ;
 
-DEFER: fixnum?
-BUILTIN: fixnum 0 fixnum? ;
-MATH-CLASS: fixnum 0 >fixnum
-
-DEFER: bignum?
-BUILTIN: bignum 1 bignum? ;
-MATH-CLASS: bignum 1 >bignum
-
 UNION: integer fixnum bignum ;
 
 : (gcd) ( b a y x -- a d )
index f9c29430f4e597bd9ac6ef499f3ac771e84f9092..6d189eddc57abeea144d6500205820d4589960a5 100644 (file)
@@ -34,8 +34,8 @@ USING: generic kernel sequences vectors ;
 : set-axis ( x y axis -- v )
     2dup v* >r >r drop dup r> v* v- r> v+ ;
 
-: v. ( v v -- x ) 0 -rot [ * + ] 2each ;
-: c. ( v v -- x ) 0 -rot [ conjugate * + ] 2each ;
+: v. ( v v -- x ) 0 [ * + ] 2reduce ;
+: c. ( v v -- x ) 0 [ conjugate * + ] 2reduce ;
 
 : norm-sq ( v -- n ) 0 [ absq + ] reduce ;
 
index 81999cc3190676ef1dfe91469c24a8fa1a5b2bdc..f4363a65d45c3ceb6eb8407e03deb2500d0e1de2 100644 (file)
@@ -3,10 +3,6 @@
 IN: math
 USING: generic kernel kernel-internals math math-internals ;
 
-DEFER: ratio?
-BUILTIN: ratio 4 ratio? { 0 "numerator" f } { 1 "denominator" f } ;
-MATH-CLASS: ratio 2 f
-
 UNION: rational integer ratio ;
 
 M: integer numerator ;
index 72e813b73f8651b1df8c6f0425d6359927ec0149..4a58b3b0fee54fb8645bcccb899cd0d186886e1d 100644 (file)
@@ -13,10 +13,6 @@ USING: syntax generic kernel lists namespaces parser words ;
     #! G: word picker dispatcher ;
     CREATE [ 2unlist rot define-generic* ] [ ] ; parsing
 
-: BUILTIN:
-    #! Syntax: BUILTIN: <class> <type#> <predicate> <slots> ;
-    CREATE scan-word scan-word [ define-builtin ] [ ] ; parsing
-
 : COMPLEMENT: ( -- )
     #! Followed by a class name, then a complemented class.
     CREATE
@@ -57,10 +53,3 @@ USING: syntax generic kernel lists namespaces parser words ;
     #! stack.
     scan-word [ tuple-constructor ] keep
     [ define-constructor ] [ ] ; parsing
-
-: MATH-CLASS:
-    #! Followed by class name, priority, and coercer.
-    scan-word
-    dup scan-word "math-priority" set-word-prop
-    scan-word dup \ f = [ drop f ] [ unit ] ifte
-    "coercer" set-word-prop ; parsing
index 5437b10b67297b082cf4452367e914fd5cd838d8..2981e1e563e739d06d4301f3545a5e5792fb3aee 100644 (file)
@@ -1,36 +1,40 @@
-! Copyright (C) 2004, 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: parser
-USING: kernel lists namespaces sequences io ;
-
-: file-vocabs ( -- )
-    "scratchpad" "in" set
-    [ "syntax" "scratchpad" ] "use" set ;
-
-: (parse-stream) ( stream -- quot )
-    [ f swap [ (parse) ] read-lines reverse ] with-parser ;
-
-: parse-stream ( name stream -- quot )
-    [
-        swap file set file-vocabs
-        (parse-stream)
-        file off line-number off
-    ] with-scope ;
-
-: parse-file ( file -- quot )
-    dup <file-reader> parse-stream ;
-
-: run-file ( file -- )
-    parse-file call ;
-
-: parse-resource ( path -- quot )
-    #! Resources are loaded from the resource-path variable, or
-    #! the current directory if it is not set. Words defined in
-    #! resources have a definition source path starting with
-    #! resource:. This allows words that operate on source
-    #! files, like "jedit", to use a different resource path
-    #! at run time than was used at parse time.
-    "resource:" over append swap <resource-stream> parse-stream ;
-
-: run-resource ( file -- )
-    parse-resource call ;
+! Copyright (C) 2004, 2005 Slava Pestov.\r
+! See http://factor.sf.net/license.txt for BSD license.\r
+IN: parser\r
+USING: kernel lists namespaces sequences io ;\r
+\r
+: file-vocabs ( -- )\r
+    "scratchpad" "in" set\r
+    [ "syntax" "scratchpad" ] "use" set ;\r
+\r
+: (parse-stream) ( stream -- quot )\r
+    [\r
+        lines dup length [ ]\r
+        [ line-number set (parse) ] 2reduce\r
+        reverse\r
+    ] with-parser ;\r
+\r
+: parse-stream ( name stream -- quot )\r
+    [\r
+        swap file set file-vocabs\r
+        (parse-stream)\r
+        file off line-number off\r
+    ] with-scope ;\r
+\r
+: parse-file ( file -- quot )\r
+    dup <file-reader> parse-stream ;\r
+\r
+: run-file ( file -- )\r
+    parse-file call ;\r
+\r
+: parse-resource ( path -- quot )\r
+    #! Resources are loaded from the resource-path variable, or\r
+    #! the current directory if it is not set. Words defined in\r
+    #! resources have a definition source path starting with\r
+    #! resource:. This allows words that operate on source\r
+    #! files, like "jedit", to use a different resource path\r
+    #! at run time than was used at parse time.\r
+    "resource:" over append swap <resource-stream> parse-stream ;\r
+\r
+: run-resource ( file -- )\r
+    parse-resource call ;\r
index 0bc2e85f8a8446333eb55260288ba96c6b6f5871..09c16e81477fc1b4f0b96733fa8fa16d82c1b182 100644 (file)
@@ -36,14 +36,8 @@ words ;
 
 ! Booleans
 
-! The canonical t is a heap-allocated dummy object.
-BUILTIN: t 7 t? ;
 : t t swons ; parsing
 
-! In the runtime, the canonical f is represented as a null
-! pointer with tag 3. So
-! f address . ==> 3
-BUILTIN: f 9 not ;
 : f f swons ; parsing
 
 ! Lists
index 98f84113e273e3f950289f2af4fecbfdd9229275..9e2891ffbf5e112e5fd96162314b3ccc60dca030 100644 (file)
@@ -14,6 +14,8 @@ strings unparser words ;
 ! of vocabularies. If it is a parsing word, it is executed
 ! immediately. Otherwise it is appended to the parse tree.
 
+SYMBOL: line-number
+
 : use+ ( string -- ) "use" [ cons ] change ;
 
 : parsing? ( word -- ? )
index a8e6d692a6db14410f5f723500c01577876f34a8..381c58b66cd3cdb2dcab2ba43844dacb8c5568bf 100644 (file)
@@ -101,13 +101,6 @@ M: complement class.
     dup unparse. bl
     "complement" word-prop unparse. terpri ;
 
-M: builtin class.
-    \ BUILTIN: unparse. bl
-    dup unparse. bl
-    dup types first unparse write bl
-    0 swap "slots" word-prop prettyprint-elements drop
-    prettyprint-; ;
-
 M: predicate class.
     \ PREDICATE: unparse. bl
     dup "superclass" word-prop unparse. bl
index f36fd633cb29f5cdebf15f17a47bfacdd7d0b58d..076edc3f44fb5a864ac35ea213e53e2aa6f06803 100644 (file)
@@ -31,10 +31,6 @@ USE: namespaces
 [ "2\n" ] [ [ 1 2 [ . ] [ sq . ] ?ifte ] string-out ] unit-test
 [ "9\n" ] [ [ 3 f [ . ] [ sq . ] ?ifte ] string-out ] unit-test
 
-[ [ 9 8 7 6 5 4 3 2 1 ] ]
-[ [ 10 [ , ] [ 1 - dup dup 0 = [ drop f ] when ] while ] make-list nip ]
-unit-test
-
 [ "even" ] [
     2 {
         { [ dup 2 mod 0 = ] [ drop "even" ] }
index 117ae590c100812998f777a58bf58d8bfc2e22ba..c9a13dede3652963496735eee707fc85fc388e93 100644 (file)
@@ -35,13 +35,17 @@ vectors words ;
 
 ! Some words for iterating through the heap.
 
+: (each-object) ( quot -- )
+    next-object [ swap [ call ] keep (each-object) ] when* ;
+    inline
+
 : each-object ( quot -- )
     #! Applies the quotation to each object in the image. We
     #! use the lower-level >c and c> words here to avoid
     #! copying the stacks.
     [ end-scan rethrow ] >c
-    begin-scan [ next-object ] while
-    f c> call ;
+    begin-scan (each-object) drop
+    f c> call ; inline
 
 : instances ( quot -- list )
     #! Return a list of all object that return true when the
index 309959dfccd3c33de631da75d312c8a5bda49ee2..d276c92e10888aad32b72301b7db33c60134f147 100644 (file)
@@ -6,11 +6,6 @@ namespaces sequences strings vectors ;
 
 ! The basic word type. Words can be named and compared using
 ! identity. They hold a property map.
-DEFER: word?
-BUILTIN: word 17 word?
-    { 1 hashcode f }
-    { 4 "word-def" "set-word-def" }
-    { 5 "word-props" "set-word-props" } ;
 
 : word-prop ( word name -- value ) swap word-props hash ;
 : set-word-prop ( word value name -- ) rot word-props set-hash ;
index fc3f83ab76463d84da01764ce37f501096e5387c..7d28289bd53a3c010570a25da59481ea459755e0 100644 (file)
@@ -10,8 +10,10 @@ void init_factor(char* image, CELL ds_size, CELL cs_size,
        init_ffi();
        init_arena(gen_count,young_size,aging_size);
        init_compiler(code_size);
-       load_image(image,literal_size);
        init_stacks(ds_size,cs_size);
+       callframe = F;
+       load_image(image,literal_size);
+       callframe = userenv[BOOT_ENV];
        init_c_io();
        init_signals();
        init_errors();
index d2b571f6db5b5f9f431a7a0cafec6e9a4f618350..7c6a34379d7cf22d0db70657b20b81d52899b4a0 100644 (file)
@@ -30,7 +30,6 @@ void init_stacks(CELL ds_size_, CELL cs_size_)
        reset_datastack();
        cs_bot = (CELL)alloc_guarded(cs_size);
        reset_callstack();
-       callframe = userenv[BOOT_ENV];
 }
 
 void primitive_drop(void)