From cafa8cf4a1a23b014ce2d704a7b298a7b348f894 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Sat, 12 Jan 2008 23:05:02 +0100 Subject: [PATCH 1/8] Fix statistics-docs --- extra/math/statistics/statistics-docs.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extra/math/statistics/statistics-docs.factor b/extra/math/statistics/statistics-docs.factor index bb92178e6d..620501c16e 100644 --- a/extra/math/statistics/statistics-docs.factor +++ b/extra/math/statistics/statistics-docs.factor @@ -1,4 +1,5 @@ -USING: math.statistics help.markup help.syntax debugger ; +USING: help.markup help.syntax debugger ; +IN: math.statistics HELP: geometric-mean { $values { "seq" "a sequence of numbers" } { "n" "a non-negative real number"} } From 3f4c2aafcfd6c82ec2c2597d6757abf51b616ff7 Mon Sep 17 00:00:00 2001 From: Matt S Trout Date: Thu, 10 Jan 2008 15:58:27 -0500 Subject: [PATCH 2/8] add Libraries needed for compilation section derived from FAQ answer 'Which libraries do I need to get the UI working with X11 on Linux?' --- README.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.txt b/README.txt index c5bae96b9c..e62d319c07 100644 --- a/README.txt +++ b/README.txt @@ -8,6 +8,7 @@ implementation. It is not an introduction to the language itself. - Platform support - Compiling the Factor VM +- Libraries needed for compilation - Bootstrapping the Factor image - Running Factor on Unix with X11 - Running Factor on Mac OS X - Cocoa UI @@ -59,6 +60,17 @@ for your platform. Compilation will yield an executable named 'factor' on Unix, 'factor-nt.exe' on Windows XP/Vista, and 'factor-ce.exe' on Windows CE. +* Libraries needed for compilation + +For X11 support, you need recent development libraries for libc, Freetype, +X11, OpenGL and GLUT. On a Debian-derived Linux distribution (like Ubuntu), +you can use the line + +sudo apt-get install libc6-dev libfreetype6-dev libx11-dev glutg3-dev + +to grab everything (if you're on a non-debian-derived distro please tell us +what the equivalent command is on there and it can be added :) + * Bootstrapping the Factor image The boot images are no longer included with the Factor distribution From 2165a728b171368c123b740f496fdeade6167eae Mon Sep 17 00:00:00 2001 From: Matt S Trout Date: Thu, 10 Jan 2008 16:07:33 -0500 Subject: [PATCH 3/8] add a reference to the FAQ to the README.txt --- README.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.txt b/README.txt index e62d319c07..f92bfe25c7 100644 --- a/README.txt +++ b/README.txt @@ -15,6 +15,7 @@ implementation. It is not an introduction to the language itself. - Running Factor on Mac OS X - X11 UI - Running Factor on Windows - Command line usage +- The Factor FAQ - Source organization - Community @@ -160,6 +161,10 @@ To run the listener in the command prompt: factor-nt.exe -run=listener +* The Factor FAQ + +The Factor FAQ lives online at http://factorcode.org/faq.fhtml + * Command line usage The Factor VM supports a number of command line switches. To read From 4373cb16307d98e95c88ed85fdebd021aa167e3e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 12 Jan 2008 17:25:29 -0500 Subject: [PATCH 4/8] Fix performance prbolem --- core/parser/parser.factor | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 8dcca00e3a..31a3ceac03 100644 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -437,7 +437,7 @@ SYMBOL: bootstrap-syntax smudged-usage forget-all over empty? [ 2dup smudged-usage-warning ] unless 2drop ; -: finish-parsing ( contents quot -- ) +: finish-parsing ( lines quot -- ) file get [ record-form ] keep [ record-modified ] keep @@ -447,8 +447,7 @@ SYMBOL: bootstrap-syntax : parse-stream ( stream name -- quot ) [ [ - contents - dup string-lines parse-fresh + lines dup parse-fresh tuck finish-parsing forget-smudged ] with-source-file From cece726e54321ffdf4fc6695b137a9043eec319b Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 12 Jan 2008 17:34:26 -0500 Subject: [PATCH 5/8] Make alien.c-types reloadable --- core/alien/c-types/c-types.factor | 215 +++++++++++++++--------------- 1 file changed, 110 insertions(+), 105 deletions(-) diff --git a/core/alien/c-types/c-types.factor b/core/alien/c-types/c-types.factor index 91a2e6efaa..b665300bee 100755 --- a/core/alien/c-types/c-types.factor +++ b/core/alien/c-types/c-types.factor @@ -3,7 +3,7 @@ USING: byte-arrays arrays generator.registers assocs kernel kernel.private libc math namespaces parser sequences strings words assocs splitting math.parser cpu.architecture -alien quotations system ; +alien quotations system compiler.units ; IN: alien.c-types TUPLE: c-type @@ -227,130 +227,135 @@ M: long-long-type box-return ( type -- ) define-out ; : expand-constants ( c-type -- c-type' ) + #! We use word-def call instead of execute to get around + #! staging violations dup array? [ - unclip >r [ dup word? [ execute ] when ] map r> add* + unclip >r [ dup word? [ word-def call ] when ] map + r> add* ] when ; -[ alien-cell ] -[ set-alien-cell ] -bootstrap-cell -"box_alien" -"alien_offset" -"void*" define-primitive-type +[ + [ alien-cell ] + [ set-alien-cell ] + bootstrap-cell + "box_alien" + "alien_offset" + "void*" define-primitive-type -[ alien-signed-8 ] -[ set-alien-signed-8 ] -8 -"box_signed_8" -"to_signed_8" -"longlong" define-primitive-type + [ alien-signed-8 ] + [ set-alien-signed-8 ] + 8 + "box_signed_8" + "to_signed_8" + "longlong" define-primitive-type -[ alien-unsigned-8 ] -[ set-alien-unsigned-8 ] -8 -"box_unsigned_8" -"to_unsigned_8" -"ulonglong" define-primitive-type + [ alien-unsigned-8 ] + [ set-alien-unsigned-8 ] + 8 + "box_unsigned_8" + "to_unsigned_8" + "ulonglong" define-primitive-type -[ alien-signed-cell ] -[ set-alien-signed-cell ] -bootstrap-cell -"box_signed_cell" -"to_fixnum" -"long" define-primitive-type + [ alien-signed-cell ] + [ set-alien-signed-cell ] + bootstrap-cell + "box_signed_cell" + "to_fixnum" + "long" define-primitive-type -[ alien-unsigned-cell ] -[ set-alien-unsigned-cell ] -bootstrap-cell -"box_unsigned_cell" -"to_cell" -"ulong" define-primitive-type + [ alien-unsigned-cell ] + [ set-alien-unsigned-cell ] + bootstrap-cell + "box_unsigned_cell" + "to_cell" + "ulong" define-primitive-type -[ alien-signed-4 ] -[ set-alien-signed-4 ] -4 -"box_signed_4" -"to_fixnum" -"int" define-primitive-type + [ alien-signed-4 ] + [ set-alien-signed-4 ] + 4 + "box_signed_4" + "to_fixnum" + "int" define-primitive-type -[ alien-unsigned-4 ] -[ set-alien-unsigned-4 ] -4 -"box_unsigned_4" -"to_cell" -"uint" define-primitive-type + [ alien-unsigned-4 ] + [ set-alien-unsigned-4 ] + 4 + "box_unsigned_4" + "to_cell" + "uint" define-primitive-type -[ alien-signed-2 ] -[ set-alien-signed-2 ] -2 -"box_signed_2" -"to_fixnum" -"short" define-primitive-type + [ alien-signed-2 ] + [ set-alien-signed-2 ] + 2 + "box_signed_2" + "to_fixnum" + "short" define-primitive-type -[ alien-unsigned-2 ] -[ set-alien-unsigned-2 ] -2 -"box_unsigned_2" -"to_cell" -"ushort" define-primitive-type + [ alien-unsigned-2 ] + [ set-alien-unsigned-2 ] + 2 + "box_unsigned_2" + "to_cell" + "ushort" define-primitive-type -[ alien-signed-1 ] -[ set-alien-signed-1 ] -1 -"box_signed_1" -"to_fixnum" -"char" define-primitive-type + [ alien-signed-1 ] + [ set-alien-signed-1 ] + 1 + "box_signed_1" + "to_fixnum" + "char" define-primitive-type -[ alien-unsigned-1 ] -[ set-alien-unsigned-1 ] -1 -"box_unsigned_1" -"to_cell" -"uchar" define-primitive-type + [ alien-unsigned-1 ] + [ set-alien-unsigned-1 ] + 1 + "box_unsigned_1" + "to_cell" + "uchar" define-primitive-type -[ alien-unsigned-4 zero? not ] -[ 1 0 ? set-alien-unsigned-4 ] -4 -"box_boolean" -"to_boolean" -"bool" define-primitive-type + [ alien-unsigned-4 zero? not ] + [ 1 0 ? set-alien-unsigned-4 ] + 4 + "box_boolean" + "to_boolean" + "bool" define-primitive-type -[ alien-float ] -[ >r >r >float r> r> set-alien-float ] -4 -"box_float" -"to_float" -"float" define-primitive-type + [ alien-float ] + [ >r >r >float r> r> set-alien-float ] + 4 + "box_float" + "to_float" + "float" define-primitive-type -T{ float-regs f 4 } "float" c-type set-c-type-reg-class -[ >float ] "float" c-type set-c-type-prep + T{ float-regs f 4 } "float" c-type set-c-type-reg-class + [ >float ] "float" c-type set-c-type-prep -[ alien-double ] -[ >r >r >float r> r> set-alien-double ] -8 -"box_double" -"to_double" -"double" define-primitive-type + [ alien-double ] + [ >r >r >float r> r> set-alien-double ] + 8 + "box_double" + "to_double" + "double" define-primitive-type -T{ float-regs f 8 } "double" c-type set-c-type-reg-class -[ >float ] "double" c-type set-c-type-prep + T{ float-regs f 8 } "double" c-type set-c-type-reg-class + [ >float ] "double" c-type set-c-type-prep -[ alien-cell alien>char-string ] -[ set-alien-cell ] -bootstrap-cell -"box_char_string" -"alien_offset" -"char*" define-primitive-type + [ alien-cell alien>char-string ] + [ set-alien-cell ] + bootstrap-cell + "box_char_string" + "alien_offset" + "char*" define-primitive-type -"char*" "uchar*" typedef + "char*" "uchar*" typedef -[ string>char-alien ] "char*" c-type set-c-type-prep + [ string>char-alien ] "char*" c-type set-c-type-prep -[ alien-cell alien>u16-string ] -[ set-alien-cell ] -4 -"box_u16_string" -"alien_offset" -"ushort*" define-primitive-type + [ alien-cell alien>u16-string ] + [ set-alien-cell ] + 4 + "box_u16_string" + "alien_offset" + "ushort*" define-primitive-type -[ string>u16-alien ] "ushort*" c-type set-c-type-prep + [ string>u16-alien ] "ushort*" c-type set-c-type-prep +] with-compilation-unit From 1a43d30d54ead60ebdc836cf1c45e1423990be22 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 12 Jan 2008 18:00:28 -0500 Subject: [PATCH 6/8] Fix tuple class redefinition not updating constructor --- core/inference/transforms/transforms.factor | 11 ++++++++--- core/tuples/tuples.factor | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/inference/transforms/transforms.factor b/core/inference/transforms/transforms.factor index e36d703be8..62c3129f3a 100755 --- a/core/inference/transforms/transforms.factor +++ b/core/inference/transforms/transforms.factor @@ -61,6 +61,11 @@ M: pair (bitfield-quot) ( spec -- quot ) \ set-slots [ [get-slots] ] 1 define-transform -\ construct-boa [ - dup tuple-size [ ] 2curry -] 1 define-transform +: [construct] ( word quot -- newquot ) + >r dup +inlined+ depends-on dup tuple-size r> 2curry ; + +\ construct-boa +[ [ ] [construct] ] 1 define-transform + +\ construct-empty +[ [ ] [construct] ] 1 define-transform diff --git a/core/tuples/tuples.factor b/core/tuples/tuples.factor index 6eff703cbd..476cf4fa38 100644 --- a/core/tuples/tuples.factor +++ b/core/tuples/tuples.factor @@ -59,7 +59,7 @@ M: tuple class class-of-tuple ; ] unless ] when 2drop ; -GENERIC: tuple-size ( class -- size ) foldable +GENERIC: tuple-size ( class -- size ) M: tuple-class tuple-size "slot-names" word-prop length 2 + ; From 50e6aca63336cf6c42cdceae375979a36a40a4b5 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 12 Jan 2008 18:00:41 -0500 Subject: [PATCH 7/8] Unit test fix --- core/parser/parser-tests.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/parser/parser-tests.factor b/core/parser/parser-tests.factor index 8b308da57f..55d43ce8e0 100755 --- a/core/parser/parser-tests.factor +++ b/core/parser/parser-tests.factor @@ -301,7 +301,7 @@ IN: temporary ] unit-test [ ] [ - "IN: temporary GENERIC: killer?" + "IN: temporary GENERIC: killer? ( a -- b )" "removing-the-predicate" parse-stream drop ] unit-test From 2d6d22175eeb125d66aefc083e449a585418f369 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 12 Jan 2008 18:46:22 -0500 Subject: [PATCH 8/8] x86 backend work --- core/cpu/x86/64/bootstrap.factor | 3 +-- core/cpu/x86/bootstrap.factor | 15 +++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/core/cpu/x86/64/bootstrap.factor b/core/cpu/x86/64/bootstrap.factor index 9d3fa8849f..f2e84ca528 100644 --- a/core/cpu/x86/64/bootstrap.factor +++ b/core/cpu/x86/64/bootstrap.factor @@ -8,10 +8,9 @@ IN: bootstrap.x86 : arg0 RDI ; : arg1 RSI ; +: temp-reg RBX ; : stack-reg RSP ; : ds-reg R14 ; -: scan-reg RBX ; -: xt-reg RCX ; : fixnum>slot@ ; "resource:core/cpu/x86/bootstrap.factor" run-file diff --git a/core/cpu/x86/bootstrap.factor b/core/cpu/x86/bootstrap.factor index 8fe5127ab0..275ffe6aab 100755 --- a/core/cpu/x86/bootstrap.factor +++ b/core/cpu/x86/bootstrap.factor @@ -13,7 +13,8 @@ big-endian off [ ! Load word - temp-reg 0 [] MOV + temp-reg 0 MOV + temp-reg dup [] MOV ! Bump profiling counter temp-reg profile-count-offset [+] 1 tag-fixnum ADD ! Load word->code @@ -22,7 +23,7 @@ big-endian off temp-reg compiled-header-size ADD ! Jump to XT temp-reg JMP -] rc-absolute-cell rt-literal 2 jit-profiling jit-define +] rc-absolute-cell rt-literal 1 jit-profiling jit-define [ stack-frame-size PUSH ! save stack frame size @@ -31,10 +32,11 @@ big-endian off ] rc-absolute-cell rt-label 6 jit-prolog jit-define [ - arg0 0 [] MOV ! load literal + arg0 0 MOV ! load literal + arg0 dup [] MOV ds-reg bootstrap-cell ADD ! increment datastack pointer ds-reg [] arg0 MOV ! store literal on datastack -] rc-absolute-cell rt-literal 2 jit-push-literal jit-define +] rc-absolute-cell rt-literal 1 jit-push-literal jit-define [ arg1 stack-reg MOV ! pass callstack pointer as arg 2 @@ -60,14 +62,15 @@ big-endian off ] rc-absolute-cell rt-literal 1 jit-if-jump jit-define [ - arg1 0 [] MOV ! load dispatch table + arg1 0 MOV ! load dispatch table + arg1 dup [] MOV arg0 ds-reg [] MOV ! load index fixnum>slot@ ! turn it into an array offset ds-reg bootstrap-cell SUB ! pop index arg0 arg1 ADD ! compute quotation location arg0 arg0 array-start [+] MOV ! load quotation arg0 quot-xt@ [+] JMP ! execute branch -] rc-absolute-cell rt-literal 2 jit-dispatch jit-define +] rc-absolute-cell rt-literal 1 jit-dispatch jit-define [ stack-reg stack-frame-size bootstrap-cell - ADD ! unwind stack frame