Merge branch 'master' of git://factorcode.org/git/factor

db4
Slava Pestov 2008-03-07 21:29:24 -06:00
commit 5adfc3a3b1
22 changed files with 211 additions and 145 deletions

View File

@ -102,7 +102,7 @@ SYMBOL: build-status
enter-build-dir enter-build-dir
"report" "report" utf8
[ [
"Build machine: " write host-name print "Build machine: " write host-name print
"CPU: " write cpu print "CPU: " write cpu print

View File

@ -6,22 +6,24 @@ USING: kernel namespaces sequences assocs builder continuations
prettyprint prettyprint
tools.browser tools.browser
tools.test tools.test
io.encodings.utf8
bootstrap.stage2 benchmark builder.util ; bootstrap.stage2 benchmark builder.util ;
IN: builder.test IN: builder.test
: do-load ( -- ) : do-load ( -- )
try-everything keys "../load-everything-vocabs" [ . ] with-file-writer ; try-everything keys "../load-everything-vocabs" utf8 [ . ] with-file-writer ;
: do-tests ( -- ) : do-tests ( -- )
run-all-tests keys "../test-all-vocabs" [ . ] with-file-writer ; run-all-tests keys "../test-all-vocabs" utf8 [ . ] with-file-writer ;
: do-benchmarks ( -- ) run-benchmarks "../benchmarks" [ . ] with-file-writer ; : do-benchmarks ( -- )
run-benchmarks "../benchmarks" utf8 [ . ] with-file-writer ;
: do-all ( -- ) : do-all ( -- )
bootstrap-time get "../boot-time" [ . ] with-file-writer bootstrap-time get "../boot-time" utf8 [ . ] with-file-writer
[ do-load ] runtime "../load-time" [ . ] with-file-writer [ do-load ] runtime "../load-time" utf8 [ . ] with-file-writer
[ do-tests ] runtime "../test-time" [ . ] with-file-writer [ do-tests ] runtime "../test-time" utf8 [ . ] with-file-writer
do-benchmarks ; do-benchmarks ;
MAIN: do-all MAIN: do-all

View File

@ -70,7 +70,7 @@ DEFER: to-strings
: milli-seconds>time ( n -- string ) : milli-seconds>time ( n -- string )
1000 /i 60 /mod >r 60 /mod r> 3array [ pad-00 ] map ":" join ; 1000 /i 60 /mod >r 60 /mod r> 3array [ pad-00 ] map ":" join ;
: eval-file ( file -- obj ) file-contents eval ; : eval-file ( file -- obj ) utf8 file-contents eval ;
: cat ( file -- ) utf8 file-contents print ; : cat ( file -- ) utf8 file-contents print ;

View File

@ -3,19 +3,12 @@
USING: kernel io io.binary io.files io.streams.string math USING: kernel io io.binary io.files io.streams.string math
math.functions math.parser namespaces splitting strings math.functions math.parser namespaces splitting strings
sequences crypto.common byte-arrays locals sequences.private sequences crypto.common byte-arrays locals sequences.private
io.encodings.binary ; io.encodings.binary symbols ;
IN: crypto.md5 IN: crypto.md5
<PRIVATE <PRIVATE
SYMBOL: a SYMBOLS: a b c d old-a old-b old-c old-d ;
SYMBOL: b
SYMBOL: c
SYMBOL: d
SYMBOL: old-a
SYMBOL: old-b
SYMBOL: old-c
SYMBOL: old-d
: T ( N -- Y ) : T ( N -- Y )
sin abs 4294967296 * >bignum ; foldable sin abs 4294967296 * >bignum ; foldable

View File

@ -1,23 +1,12 @@
USING: arrays combinators crypto.common kernel io io.encodings.binary USING: arrays combinators crypto.common kernel io io.encodings.binary
io.files io.streams.string math.vectors strings sequences io.files io.streams.string math.vectors strings sequences
namespaces math parser sequences vectors io.binary namespaces math parser sequences vectors io.binary
hashtables ; hashtables symbols ;
IN: crypto.sha1 IN: crypto.sha1
! Implemented according to RFC 3174. ! Implemented according to RFC 3174.
SYMBOL: h0 SYMBOL: h0 h1 h2 h3 h4 A B C D E w K ;
SYMBOL: h1
SYMBOL: h2
SYMBOL: h3
SYMBOL: h4
SYMBOL: A
SYMBOL: B
SYMBOL: C
SYMBOL: D
SYMBOL: E
SYMBOL: w
SYMBOL: K
: get-wth ( n -- wth ) w get nth ; inline : get-wth ( n -- wth ) w get nth ; inline
: shift-wth ( n -- x ) get-wth 1 bitroll-32 ; inline : shift-wth ( n -- x ) get-wth 1 bitroll-32 ; inline

View File

@ -1,19 +1,10 @@
USING: crypto.common kernel splitting math sequences namespaces USING: crypto.common kernel splitting math sequences namespaces
io.binary ; io.binary symbols ;
IN: crypto.sha2 IN: crypto.sha2
<PRIVATE <PRIVATE
SYMBOL: vars SYMBOL: vars M K H S0 S1 process-M word-size block-size >word ;
SYMBOL: M
SYMBOL: K
SYMBOL: H
SYMBOL: S0
SYMBOL: S1
SYMBOL: process-M
SYMBOL: word-size
SYMBOL: block-size
SYMBOL: >word
: a 0 ; : a 0 ;
: b 1 ; : b 1 ;
@ -139,4 +130,3 @@ PRIVATE>
: string>sha-256-string ( string -- hexstring ) : string>sha-256-string ( string -- hexstring )
string>sha-256 hex-string ; string>sha-256 hex-string ;

View File

@ -0,0 +1,42 @@
USING: kernel db.sql ;
IN: db.sql.tests
TUPLE: person name age ;
: insert-1
{ insert
{ table "person" }
{ columns "name" "age" }
{ values "erg" 26 }
} ;
: update-1
{ update "person"
{ set { "name" "erg" }
{ "age" 6 } }
{ where { "age" 6 } }
} ;
: select-1
{ select
{ columns
"branchno"
{ count "staffno" as "mycount" }
{ sum "salary" as "mysum" } }
{ from "staff" "lol" }
{ where
{ "salary" > all
{ select
{ columns "salary" }
{ from "staff" }
{ where { "branchno" "b003" } }
}
}
{ "branchno" > 3 } }
{ group-by "branchno" "lol2" }
{ having { count "staffno" > 1 } }
{ order-by "branchno" }
{ offset 40 }
{ limit 20 }
} ;

70
extra/db/sql/sql.factor Executable file
View File

@ -0,0 +1,70 @@
USING: kernel parser quotations tuples words
namespaces.lib namespaces sequences bake arrays combinators
prettyprint strings math.parser new-slots accessors
sequences.lib math symbols ;
USE: tools.walker
IN: db.sql
SYMBOLS: insert update delete select distinct columns from as
where group-by having order-by limit offset is-null desc all
any count avg table values ;
: input-spec, 1, ;
: output-spec, 2, ;
: input, 3, ;
: output, 4, ;
DEFER: sql%
: (sql-interleave) ( seq sep -- )
[ sql% ] curry [ sql% ] interleave ;
: sql-interleave ( seq str sep -- )
swap sql% (sql-interleave) ;
: sql-function, ( seq function -- )
sql% "(" sql% unclip sql% ")" sql% [ sql% ] each ;
: sql-array% ( array -- )
unclip
{
{ columns [ "," (sql-interleave) ] }
{ from [ "from" "," sql-interleave ] }
{ where [ "where" "and" sql-interleave ] }
{ group-by [ "group by" "," sql-interleave ] }
{ having [ "having" "," sql-interleave ] }
{ order-by [ "order by" "," sql-interleave ] }
{ offset [ "offset" sql% sql% ] }
{ limit [ "limit" sql% sql% ] }
{ select [ "(select" sql% sql% ")" sql% ] }
{ table [ sql% ] }
{ set [ "set" "," sql-interleave ] }
{ values [ "values(" sql% "," (sql-interleave) ")" sql% ] }
{ count [ "count" sql-function, ] }
{ sum [ "sum" sql-function, ] }
{ avg [ "avg" sql-function, ] }
{ min [ "min" sql-function, ] }
{ max [ "max" sql-function, ] }
[ sql% [ sql% ] each ]
} case ;
TUPLE: no-sql-match ;
: sql% ( obj -- )
{
{ [ dup string? ] [ " " 0% 0% ] }
{ [ dup array? ] [ sql-array% ] }
{ [ dup number? ] [ number>string sql% ] }
{ [ dup symbol? ] [ unparse sql% ] }
{ [ dup word? ] [ unparse sql% ] }
{ [ t ] [ T{ no-sql-match } throw ] }
} cond ;
: parse-sql ( obj -- sql in-spec out-spec in out )
[
unclip {
{ insert [ "insert into" sql% ] }
{ update [ "update" sql% ] }
{ delete [ "delete" sql% ] }
{ select [ "select" sql% ] }
} case [ sql% ] each
] { "" { } { } { } { } } nmake ;

View File

@ -4,7 +4,7 @@ USING: arrays assocs db kernel math math.parser
sequences continuations sequences.deep sequences.lib sequences continuations sequences.deep sequences.lib
words namespaces tools.walker slots slots.private classes words namespaces tools.walker slots slots.private classes
mirrors tuples combinators calendar.format serialize mirrors tuples combinators calendar.format serialize
io.streams.string ; io.streams.string symbols ;
IN: db.types IN: db.types
HOOK: modifier-table db ( -- hash ) HOOK: modifier-table db ( -- hash )
@ -14,11 +14,10 @@ HOOK: create-type-table db ( -- hash )
HOOK: compound-type db ( str n -- hash ) HOOK: compound-type db ( str n -- hash )
TUPLE: sql-spec class slot-name column-name type modifiers primary-key ; TUPLE: sql-spec class slot-name column-name type modifiers primary-key ;
! ID is the Primary key
! +native-id+ can be a columns type or a modifier SYMBOLS: +native-id+ +assigned-id+ +autoincrement+
SYMBOL: +native-id+ +serial+ +unique+ +default+ +null+ +not-null+
! +assigned-id+ can only be a modifier +foreign-id+ +has-many+ ;
SYMBOL: +assigned-id+
: (primary-key?) ( obj -- ? ) : (primary-key?) ( obj -- ? )
{ +native-id+ +assigned-id+ } member? ; { +native-id+ +assigned-id+ } member? ;
@ -45,35 +44,10 @@ SYMBOL: +assigned-id+
: assigned-id? ( spec -- ? ) : assigned-id? ( spec -- ? )
sql-spec-primary-key +assigned-id+ = ; sql-spec-primary-key +assigned-id+ = ;
SYMBOL: +foreign-id+
! Same concept, SQLite has autoincrement, PostgreSQL has serial
SYMBOL: +autoincrement+
SYMBOL: +serial+
SYMBOL: +unique+
SYMBOL: +default+
SYMBOL: +null+
SYMBOL: +not-null+
SYMBOL: +has-many+
: relation? ( spec -- ? ) [ +has-many+ = ] deep-find ; : relation? ( spec -- ? ) [ +has-many+ = ] deep-find ;
SYMBOL: INTEGER SYMBOLS: INTEGER BIG-INTEGER DOUBLE REAL BOOLEAN TEXT VARCHAR
SYMBOL: BIG-INTEGER DATE TIME DATETIME TIMESTAMP BLOB FACTOR-BLOB NULL ;
SYMBOL: DOUBLE
SYMBOL: REAL
SYMBOL: BOOLEAN
SYMBOL: TEXT
SYMBOL: VARCHAR
SYMBOL: DATE
SYMBOL: TIME
SYMBOL: DATETIME
SYMBOL: TIMESTAMP
SYMBOL: BLOB
SYMBOL: FACTOR-BLOB
SYMBOL: NULL
: spec>tuple ( class spec -- tuple ) : spec>tuple ( class spec -- tuple )
[ ?first3 ] keep 3 ?tail* [ ?first3 ] keep 3 ?tail*

View File

@ -3,23 +3,13 @@
USING: alien.c-types io.files io.windows kernel USING: alien.c-types io.files io.windows kernel
math windows windows.kernel32 combinators.cleave math windows windows.kernel32 combinators.cleave
windows.time calendar combinators math.functions windows.time calendar combinators math.functions
sequences combinators.lib namespaces words ; sequences combinators.lib namespaces words symbols ;
IN: io.windows.files IN: io.windows.files
SYMBOL: +read-only+ SYMBOLS: +read-only+ +hidden+ +system+
SYMBOL: +hidden+ +directory+ +archive+ +device+ +normal+ +temporary+
SYMBOL: +system+ +sparse-file+ +reparse-point+ +compressed+ +offline+
SYMBOL: +directory+ +not-content-indexed+ +encrypted+ ;
SYMBOL: +archive+
SYMBOL: +device+
SYMBOL: +normal+
SYMBOL: +temporary+
SYMBOL: +sparse-file+
SYMBOL: +reparse-point+
SYMBOL: +compressed+
SYMBOL: +offline+
SYMBOL: +not-content-indexed+
SYMBOL: +encrypted+
: expand-constants ( word/obj -- obj'/obj ) : expand-constants ( word/obj -- obj'/obj )
dup word? [ execute ] when ; dup word? [ execute ] when ;

View File

@ -3,14 +3,10 @@
USING: arrays assocs hashtables assocs io kernel math USING: arrays assocs hashtables assocs io kernel math
math.vectors math.matrices math.matrices.elimination namespaces math.vectors math.matrices math.matrices.elimination namespaces
parser prettyprint sequences words combinators math.parser parser prettyprint sequences words combinators math.parser
splitting sorting shuffle ; splitting sorting shuffle symbols ;
IN: koszul IN: koszul
! Utilities ! Utilities
: SYMBOLS:
";" parse-tokens [ create-in define-symbol ] each ;
parsing
: -1^ odd? -1 1 ? ; : -1^ odd? -1 1 ? ;
: >alt ( obj -- vec ) : >alt ( obj -- vec )

View File

@ -35,6 +35,12 @@ SYMBOL: building-seq
: 2, 2 n, ; : 2, 2 n, ;
: 2% 2 n% ; : 2% 2 n% ;
: 2# 2 n# ; : 2# 2 n# ;
: 3, 3 n, ;
: 3% 3 n% ;
: 3# 3 n# ;
: 4, 4 n, ;
: 4% 4 n% ;
: 4# 4 n# ;
: nmake ( quot exemplars -- seqs ) : nmake ( quot exemplars -- seqs )
dup length dup zero? [ 1+ ] when dup length dup zero? [ 1+ ] when

View File

@ -1,14 +1,14 @@
USING: help.markup help.syntax ; USING: help.markup help.syntax kernel words ;
IN: singleton IN: singleton
HELP: SINGLETON: HELP: SINGLETON:
{ $syntax "SINGLETON: class" { $syntax "SINGLETON: class"
} { $values } { $values
{ "class" "a new tuple class to define" } { "class" "a new singleton to define" }
} { $description } { $description
"Defines a new tuple class with membership predicate name? and a default empty constructor that is the class name itself." "Defines a new predicate class whose superclass is " { $link word } ". Only one instance of a singleton may exist because classes are " { $link eq? } " to themselves. Methods may be defined on a singleton."
} { $examples } { $examples
{ $example "SINGLETON: foo\nfoo ." "T{ foo f }" } { $example "SINGLETON: foo\nGENERIC: bar ( obj -- )\nM: foo bar drop \"a foo!\" print ;\nfoo bar" "a foo!" }
} { $see-also } { $see-also
POSTPONE: TUPLE: POSTPONE: PREDICATE:
} ; } ;

View File

@ -0,0 +1,9 @@
USING: kernel singleton tools.test ;
IN: singleton.tests
[ ] [ SINGLETON: bzzt ] unit-test
[ t ] [ bzzt bzzt? ] unit-test
[ t ] [ bzzt bzzt eq? ] unit-test
GENERIC: zammo ( obj -- )
[ ] [ M: bzzt zammo drop "yes!" ; ] unit-test
[ "yes!" ] [ bzzt zammo ] unit-test

View File

@ -1,10 +1,10 @@
! Copyright (C) 2007 Doug Coleman. ! Copyright (C) 2007 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel parser quotations prettyprint tuples words ; USING: classes.predicate kernel parser quotations words ;
IN: singleton IN: singleton
: SINGLETON: : SINGLETON:
\ word
CREATE-CLASS CREATE-CLASS
dup { } define-tuple-class dup [ eq? ] curry define-predicate-class ; parsing
dup unparse create-in reset-generic
dup construct-empty 1quotation define ; parsing

View File

@ -0,0 +1,2 @@
Slava Pestov
Doug Coleman

View File

@ -0,0 +1,9 @@
USING: help.markup help.syntax ;
IN: symbols
HELP: SYMBOLS:
{ $syntax "SYMBOLS: words... ;" }
{ $values { "words" "a sequence of new words to define" } }
{ $description "Creates a new word for every token until the ';'." }
{ $examples { $example "SYMBOLS: foo bar baz ;\nfoo . bar . baz ." "foo\nbar\nbaz" } }
{ $see-also POSTPONE: SYMBOL: } ;

View File

@ -0,0 +1,7 @@
USING: kernel symbols tools.test ;
IN: symbols.tests
[ ] [ SYMBOLS: a b c ; ] unit-test
[ a ] [ a ] unit-test
[ b ] [ b ] unit-test
[ c ] [ c ] unit-test

View File

@ -0,0 +1,8 @@
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: parser sequences words ;
IN: symbols
: SYMBOLS:
";" parse-tokens [ create-in define-symbol ] each ;
parsing

View File

@ -3,7 +3,7 @@
USING: arrays assocs kernel math models namespaces USING: arrays assocs kernel math models namespaces
sequences words strings system hashtables math.parser sequences words strings system hashtables math.parser
math.vectors tuples classes ui.gadgets combinators.lib boxes math.vectors tuples classes ui.gadgets combinators.lib boxes
calendar alarms ; calendar alarms symbols ;
IN: ui.gestures IN: ui.gestures
: set-gestures ( class hash -- ) "gestures" set-word-prop ; : set-gestures ( class hash -- ) "gestures" set-word-prop ;
@ -49,10 +49,7 @@ TUPLE: select-all-action ; C: <select-all-action> select-all-action
tuple>array 1 head* >tuple ; tuple>array 1 head* >tuple ;
! Modifiers ! Modifiers
SYMBOL: C+ SYMBOLS: C+ A+ M+ S+ ;
SYMBOL: A+
SYMBOL: M+
SYMBOL: S+
TUPLE: key-down mods sym ; TUPLE: key-down mods sym ;

View File

@ -6,7 +6,8 @@ math math.vectors namespaces prettyprint sequences strings
vectors words windows.kernel32 windows.gdi32 windows.user32 vectors words windows.kernel32 windows.gdi32 windows.user32
windows.opengl32 windows.messages windows.types windows.nt windows.opengl32 windows.messages windows.types windows.nt
windows threads libc combinators continuations command-line windows threads libc combinators continuations command-line
shuffle opengl ui.render unicode.case ascii math.bitfields ; shuffle opengl ui.render unicode.case ascii math.bitfields
locals symbols ;
IN: ui.windows IN: ui.windows
TUPLE: windows-ui-backend ; TUPLE: windows-ui-backend ;
@ -67,9 +68,7 @@ M: pasteboard set-clipboard-contents drop copy ;
TUPLE: win hWnd hDC hRC world title ; TUPLE: win hWnd hDC hRC world title ;
C: <win> win C: <win> win
SYMBOL: msg-obj SYMBOLS: msg-obj class-name-ptr mouse-captured ;
SYMBOL: class-name-ptr
SYMBOL: mouse-captured
: style ( -- n ) WS_OVERLAPPEDWINDOW ; inline : style ( -- n ) WS_OVERLAPPEDWINDOW ; inline
: ex-style ( -- n ) WS_EX_APPWINDOW WS_EX_WINDOWEDGE bitor ; inline : ex-style ( -- n ) WS_EX_APPWINDOW WS_EX_WINDOWEDGE bitor ; inline
@ -188,30 +187,21 @@ SYMBOL: mouse-captured
] if ] if
] if ; ] if ;
SYMBOL: lParam :: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
SYMBOL: wParam wParam exclude-key-wm-keydown? [
SYMBOL: uMsg wParam keystroke>gesture <key-down>
SYMBOL: hWnd hWnd window-focus send-gesture drop
: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
lParam set wParam set uMsg set hWnd set
wParam get exclude-key-wm-keydown? [
wParam get keystroke>gesture <key-down>
hWnd get window-focus send-gesture drop
] unless ; ] unless ;
: handle-wm-char ( hWnd uMsg wParam lParam -- ) :: handle-wm-char ( hWnd uMsg wParam lParam -- )
lParam set wParam set uMsg set hWnd set wParam exclude-key-wm-char? ctrl? alt? xor or [
wParam get exclude-key-wm-char? ctrl? alt? xor or [ wParam 1string
wParam get 1string hWnd window-focus user-input
hWnd get window-focus user-input
] unless ; ] unless ;
: handle-wm-keyup ( hWnd uMsg wParam lParam -- ) :: handle-wm-keyup ( hWnd uMsg wParam lParam -- )
lParam set wParam set uMsg set hWnd set wParam keystroke>gesture <key-up>
wParam get keystroke>gesture <key-up> hWnd window-focus send-gesture drop ;
hWnd get window-focus send-gesture
drop ;
: handle-wm-syscommand ( hWnd uMsg wParam lParam -- n ) : handle-wm-syscommand ( hWnd uMsg wParam lParam -- n )
dup alpha? [ 4drop 0 ] [ DefWindowProc ] if ; dup alpha? [ 4drop 0 ] [ DefWindowProc ] if ;

View File

@ -1,20 +1,12 @@
USING: xmode.marker.context xmode.rules USING: xmode.marker.context xmode.rules symbols
xmode.tokens namespaces kernel sequences assocs math ; xmode.tokens namespaces kernel sequences assocs math ;
IN: xmode.marker.state IN: xmode.marker.state
! Based on org.gjt.sp.jedit.syntax.TokenMarker ! Based on org.gjt.sp.jedit.syntax.TokenMarker
SYMBOL: line SYMBOLS: line last-offset position context
SYMBOL: last-offset whitespace-end seen-whitespace-end?
SYMBOL: position escaped? process-escape? delegate-end-escaped? ;
SYMBOL: context
SYMBOL: whitespace-end
SYMBOL: seen-whitespace-end?
SYMBOL: escaped?
SYMBOL: process-escape?
SYMBOL: delegate-end-escaped?
: current-rule ( -- rule ) : current-rule ( -- rule )
context get line-context-in-rule ; context get line-context-in-rule ;