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

db4
Bruno Deferrari 2008-10-05 21:46:12 -02:00
commit 4ca1fde579
960 changed files with 2754 additions and 2366 deletions

5
Makefile Executable file → Normal file
View File

@ -149,14 +149,11 @@ macosx.app: factor
ln -s Factor.app/Contents/MacOS/factor ./factor ln -s Factor.app/Contents/MacOS/factor ./factor
cp $(ENGINE) $(BUNDLE)/Contents/Frameworks cp $(ENGINE) $(BUNDLE)/Contents/Frameworks
install_name_tool \
-id @executable_path/../Frameworks/libfreetype.6.dylib \
Factor.app/Contents/Frameworks/libfreetype.6.dylib
install_name_tool \ install_name_tool \
-change libfactor.dylib \ -change libfactor.dylib \
@executable_path/../Frameworks/libfactor.dylib \ @executable_path/../Frameworks/libfactor.dylib \
Factor.app/Contents/MacOS/factor Factor.app/Contents/MacOS/factor
factor: $(DLL_OBJS) $(EXE_OBJS) factor: $(DLL_OBJS) $(EXE_OBJS)
$(LINKER) $(ENGINE) $(DLL_OBJS) $(LINKER) $(ENGINE) $(DLL_OBJS)
$(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \ $(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \

0
basis/alarms/alarms-docs.factor Executable file → Normal file
View File

0
basis/alarms/alarms-tests.factor Executable file → Normal file
View File

0
basis/alarms/alarms.factor Executable file → Normal file
View File

0
basis/alias/alias.factor Executable file → Normal file
View File

0
basis/alien/arrays/arrays-docs.factor Executable file → Normal file
View File

0
basis/alien/c-types/c-types-docs.factor Executable file → Normal file
View File

0
basis/alien/c-types/c-types-tests.factor Executable file → Normal file
View File

0
basis/alien/c-types/c-types.factor Executable file → Normal file
View File

0
basis/alien/remote-control/remote-control.factor Executable file → Normal file
View File

0
basis/alien/strings/strings.factor Executable file → Normal file
View File

0
basis/alien/structs/structs-docs.factor Executable file → Normal file
View File

0
basis/alien/structs/structs.factor Executable file → Normal file
View File

0
basis/alien/syntax/syntax-docs.factor Executable file → Normal file
View File

0
basis/alien/syntax/syntax.factor Executable file → Normal file
View File

0
basis/ascii/ascii-docs.factor Executable file → Normal file
View File

0
basis/ascii/ascii.factor Executable file → Normal file
View File

0
basis/bit-arrays/bit-arrays-tests.factor Executable file → Normal file
View File

0
basis/bit-arrays/bit-arrays.factor Executable file → Normal file
View File

0
basis/bit-vectors/bit-vectors-docs.factor Executable file → Normal file
View File

0
basis/bit-vectors/bit-vectors-tests.factor Executable file → Normal file
View File

0
basis/bit-vectors/bit-vectors.factor Executable file → Normal file
View File

0
basis/bootstrap/compiler/compiler.factor Executable file → Normal file
View File

0
basis/bootstrap/handbook/handbook.factor Executable file → Normal file
View File

0
basis/bootstrap/help/help.factor Executable file → Normal file
View File

0
basis/bootstrap/image/image-tests.factor Executable file → Normal file
View File

2
basis/bootstrap/image/image.factor Executable file → Normal file
View File

@ -417,7 +417,7 @@ M: quotation '
} [ [ bootstrap-word ] [ get ] bi ] H{ } map>assoc } [ [ bootstrap-word ] [ get ] bi ] H{ } map>assoc
{ {
class<=-cache class-not-cache classes-intersect-cache class<=-cache class-not-cache classes-intersect-cache
class-and-cache class-or-cache class-and-cache class-or-cache next-method-quot-cache
} [ H{ } clone ] H{ } map>assoc assoc-union } [ H{ } clone ] H{ } map>assoc assoc-union
bootstrap-global set bootstrap-global set
bootstrap-global emit-userenv ; bootstrap-global emit-userenv ;

0
basis/bootstrap/image/upload/upload.factor Executable file → Normal file
View File

0
basis/bootstrap/io/io.factor Executable file → Normal file
View File

0
basis/bootstrap/random/random.factor Executable file → Normal file
View File

0
basis/bootstrap/stage2.factor Executable file → Normal file
View File

0
basis/bootstrap/tools/tools.factor Executable file → Normal file
View File

0
basis/bootstrap/ui/tools/tools.factor Executable file → Normal file
View File

0
basis/bootstrap/unicode/unicode.factor Executable file → Normal file
View File

0
basis/boxes/boxes-docs.factor Executable file → Normal file
View File

0
basis/boxes/boxes-tests.factor Executable file → Normal file
View File

0
basis/boxes/boxes.factor Executable file → Normal file
View File

View File

@ -165,7 +165,15 @@ HELP: milliseconds
{ $values { "x" number } { "duration" duration } } { $values { "x" number } { "duration" duration } }
{ $description "Creates a duration object with the specified number of milliseconds." } ; { $description "Creates a duration object with the specified number of milliseconds." } ;
{ years months days hours minutes seconds milliseconds } related-words HELP: microseconds
{ $values { "x" number } { "duration" duration } }
{ $description "Creates a duration object with the specified number of microseconds." } ;
HELP: nanoseconds
{ $values { "x" number } { "duration" duration } }
{ $description "Creates a duration object with the specified number of nanoseconds." } ;
{ years months days hours minutes seconds milliseconds microseconds nanoseconds } related-words
HELP: leap-year? HELP: leap-year?
{ $values { "obj" object } { "?" "a boolean" } } { $values { "obj" object } { "?" "a boolean" } }
@ -263,7 +271,27 @@ HELP: duration>milliseconds
} }
} ; } ;
{ duration>years duration>months duration>days duration>hours duration>minutes duration>seconds duration>milliseconds } related-words HELP: duration>microseconds
{ $values { "duration" duration } { "x" number } }
{ $description "Calculates the length of a duration in microseconds." }
{ $examples
{ $example "USING: calendar prettyprint ;"
"6 seconds duration>microseconds ."
"6000000"
}
} ;
HELP: duration>nanoseconds
{ $values { "duration" duration } { "x" number } }
{ $description "Calculates the length of a duration in nanoseconds." }
{ $examples
{ $example "USING: calendar prettyprint ;"
"6 seconds duration>nanoseconds ."
"6000000000"
}
} ;
{ duration>years duration>months duration>days duration>hours duration>minutes duration>seconds duration>milliseconds duration>microseconds duration>nanoseconds } related-words
HELP: time- HELP: time-
@ -528,6 +556,8 @@ ARTICLE: "using-durations" "Using durations"
{ $subsection minutes } { $subsection minutes }
{ $subsection seconds } { $subsection seconds }
{ $subsection milliseconds } { $subsection milliseconds }
{ $subsection microseconds }
{ $subsection nanoseconds }
{ $subsection instant } { $subsection instant }
"Converting a duration to a number:" "Converting a duration to a number:"
{ $subsection duration>years } { $subsection duration>years }
@ -536,7 +566,9 @@ ARTICLE: "using-durations" "Using durations"
{ $subsection duration>hours } { $subsection duration>hours }
{ $subsection duration>minutes } { $subsection duration>minutes }
{ $subsection duration>seconds } { $subsection duration>seconds }
{ $subsection duration>milliseconds } ; { $subsection duration>milliseconds }
{ $subsection duration>microseconds }
{ $subsection duration>nanoseconds } ;
ARTICLE: "relative-timestamps" "Relative timestamps" ARTICLE: "relative-timestamps" "Relative timestamps"
"In the future:" "In the future:"

0
basis/calendar/calendar-tests.factor Executable file → Normal file
View File

10
basis/calendar/calendar.factor Executable file → Normal file
View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays kernel math math.functions namespaces sequences USING: arrays kernel math math.functions namespaces sequences
strings system vocabs.loader threads accessors combinators strings system vocabs.loader threads accessors combinators
locals classes.tuple math.order summary locals classes.tuple math.order summary structs
combinators.short-circuit ; combinators.short-circuit ;
IN: calendar IN: calendar
@ -129,6 +129,8 @@ PRIVATE>
: minutes ( x -- duration ) instant clone swap >>minute ; : minutes ( x -- duration ) instant clone swap >>minute ;
: seconds ( x -- duration ) instant clone swap >>second ; : seconds ( x -- duration ) instant clone swap >>second ;
: milliseconds ( x -- duration ) 1000 / seconds ; : milliseconds ( x -- duration ) 1000 / seconds ;
: microseconds ( x -- duration ) 1000000 / seconds ;
: nanoseconds ( x -- duration ) 1000000000 / seconds ;
GENERIC: leap-year? ( obj -- ? ) GENERIC: leap-year? ( obj -- ? )
@ -261,6 +263,8 @@ M: duration <=> [ duration>years ] compare ;
: duration>minutes ( duration -- x ) duration>years minutes-per-year * ; : duration>minutes ( duration -- x ) duration>years minutes-per-year * ;
: duration>seconds ( duration -- x ) duration>years seconds-per-year * ; : duration>seconds ( duration -- x ) duration>years seconds-per-year * ;
: duration>milliseconds ( duration -- x ) duration>seconds 1000 * ; : duration>milliseconds ( duration -- x ) duration>seconds 1000 * ;
: duration>microseconds ( duration -- x ) duration>seconds 1000000 * ;
: duration>nanoseconds ( duration -- x ) duration>seconds 1000000000 * ;
GENERIC: time- ( time1 time2 -- time3 ) GENERIC: time- ( time1 time2 -- time3 )
@ -398,6 +402,10 @@ PRIVATE>
: time-since-midnight ( timestamp -- duration ) : time-since-midnight ( timestamp -- duration )
dup midnight time- ; dup midnight time- ;
: timeval>unix-time ( timeval -- timestamp )
[ timeval-sec seconds ] [ timeval-usec microseconds ] bi
time+ unix-1970 time+ >local-time ;
M: timestamp sleep-until timestamp>millis sleep-until ; M: timestamp sleep-until timestamp>millis sleep-until ;
M: duration sleep hence sleep-until ; M: duration sleep hence sleep-until ;

0
basis/calendar/format/format-tests.factor Executable file → Normal file
View File

0
basis/calendar/format/format.factor Executable file → Normal file
View File

0
basis/calendar/model/model.factor Executable file → Normal file
View File

0
basis/calendar/windows/windows.factor Executable file → Normal file
View File

0
basis/channels/channels-tests.factor Executable file → Normal file
View File

0
basis/channels/channels.factor Executable file → Normal file
View File

0
basis/channels/examples/examples.factor Executable file → Normal file
View File

0
basis/channels/remote/remote.factor Executable file → Normal file
View File

0
basis/checksums/adler-32/adler-32-docs.factor Executable file → Normal file
View File

0
basis/checksums/md5/md5-docs.factor Executable file → Normal file
View File

0
basis/checksums/md5/md5-tests.factor Executable file → Normal file
View File

0
basis/checksums/md5/md5.factor Executable file → Normal file
View File

0
basis/checksums/sha1/sha1-tests.factor Executable file → Normal file
View File

0
basis/checksums/sha1/sha1.factor Executable file → Normal file
View File

0
basis/checksums/sha2/sha2-tests.factor Executable file → Normal file
View File

0
basis/checksums/sha2/sha2.factor Executable file → Normal file
View File

0
basis/circular/circular-tests.factor Executable file → Normal file
View File

0
basis/circular/circular.factor Executable file → Normal file
View File

View File

@ -26,6 +26,10 @@ HELP: with-cocoa
{ $values { "quot" quotation } } { $values { "quot" quotation } }
{ $description "Sets up an autorelease pool, initializes the " { $snippet "NSApplication" } " singleton, and calls the quotation." } ; { $description "Sets up an autorelease pool, initializes the " { $snippet "NSApplication" } " singleton, and calls the quotation." } ;
HELP: cocoa-app
{ $values { "quot" quotation } }
{ $description "Initializes Cocoa, calls the quotation, and starts the Cocoa event loop." } ;
HELP: do-event HELP: do-event
{ $values { "app" "an " { $snippet "NSApplication" } } { "?" "a boolean" } } { $values { "app" "an " { $snippet "NSApplication" } } { "?" "a boolean" } }
{ $description "Processes a pending event in the queue, if any, returning a boolean indicating if there was one. Does not block." } ; { $description "Processes a pending event in the queue, if any, returning a boolean indicating if there was one. Does not block." } ;
@ -46,13 +50,16 @@ HELP: objc-error
{ $error-description "Thrown by the Objective C runtime when an error occurs, for example, sending a message to an object with an unrecognized selector." } ; { $error-description "Thrown by the Objective C runtime when an error occurs, for example, sending a message to an object with an unrecognized selector." } ;
ARTICLE: "cocoa-application-utils" "Cocoa application utilities" ARTICLE: "cocoa-application-utils" "Cocoa application utilities"
"Utilities:"
{ $subsection NSApp } { $subsection NSApp }
{ $subsection with-autorelease-pool }
{ $subsection with-cocoa }
{ $subsection do-event } { $subsection do-event }
{ $subsection add-observer } { $subsection add-observer }
{ $subsection remove-observer } { $subsection remove-observer }
{ $subsection install-delegate } ; { $subsection install-delegate }
"Combinators:"
{ $subsection cocoa-app }
{ $subsection with-autorelease-pool }
{ $subsection with-cocoa } ;
IN: cocoa.application IN: cocoa.application
ABOUT: "cocoa-application-utils" ABOUT: "cocoa-application-utils"

9
basis/cocoa/application/application.factor Executable file → Normal file
View File

@ -30,7 +30,7 @@ IN: cocoa.application
FUNCTION: void NSBeep ( ) ; FUNCTION: void NSBeep ( ) ;
: with-cocoa ( quot -- ) : with-cocoa ( quot -- )
[ NSApp drop call ] with-autorelease-pool ; [ NSApp drop call ] with-autorelease-pool ; inline
: next-event ( app -- event ) : next-event ( app -- event )
0 f CFRunLoopDefaultMode 1 0 f CFRunLoopDefaultMode 1
@ -50,6 +50,13 @@ FUNCTION: void NSBeep ( ) ;
: finish-launching ( -- ) NSApp -> finishLaunching ; : finish-launching ( -- ) NSApp -> finishLaunching ;
: cocoa-app ( quot -- )
[
call
finish-launching
NSApp -> run
] with-cocoa ; inline
: install-delegate ( receiver delegate -- ) : install-delegate ( receiver delegate -- )
-> alloc -> init -> setDelegate: ; -> alloc -> init -> setDelegate: ;

View File

@ -16,9 +16,16 @@ HELP: SUPER->
{ send super-send POSTPONE: -> POSTPONE: SUPER-> } related-words { send super-send POSTPONE: -> POSTPONE: SUPER-> } related-words
HELP: IMPORT:
{ $syntax "IMPORT: name" }
{ $description "Makes an Objective C class available for use." }
{ $examples
{ $code "IMPORT: QTMovie" "QTMovie \"My Movie.mov\" <NSString> f -> movieWithFile:error:" }
} ;
ARTICLE: "objc-calling" "Calling Objective C code" ARTICLE: "objc-calling" "Calling Objective C code"
"Before an Objective C class can be used, it must be imported; by default, a small set of common classes are imported automatically, but additional classes can be imported as needed." "Before an Objective C class can be used, it must be imported; by default, a small set of common classes are imported automatically, but additional classes can be imported as needed."
{ $subsection import-objc-class } { $subsection POSTPONE: IMPORT: }
"Every imported Objective C class has as corresponding class word in the " { $vocab-link "cocoa.classes" } " vocabulary. Class words push the class object in the stack, allowing class methods to be invoked." "Every imported Objective C class has as corresponding class word in the " { $vocab-link "cocoa.classes" } " vocabulary. Class words push the class object in the stack, allowing class methods to be invoked."
$nl $nl
"Messages can be sent to classes and instances using a pair of parsing words:" "Messages can be sent to classes and instances using a pair of parsing words:"

12
basis/cocoa/cocoa.factor Executable file → Normal file
View File

@ -3,7 +3,7 @@
USING: compiler io kernel cocoa.runtime cocoa.subclassing USING: compiler io kernel cocoa.runtime cocoa.subclassing
cocoa.messages cocoa.types sequences words vocabs parser cocoa.messages cocoa.types sequences words vocabs parser
core-foundation namespaces assocs hashtables compiler.units core-foundation namespaces assocs hashtables compiler.units
lexer ; lexer init ;
IN: cocoa IN: cocoa
: (remember-send) ( selector variable -- ) : (remember-send) ( selector variable -- )
@ -27,6 +27,16 @@ SYMBOL: super-sent-messages
scan dup remember-super-send parsed \ super-send parsed ; scan dup remember-super-send parsed \ super-send parsed ;
parsing parsing
SYMBOL: frameworks
frameworks global [ V{ } clone or ] change-at
[ frameworks get [ load-framework ] each ] "cocoa.messages" add-init-hook
: FRAMEWORK: scan [ load-framework ] [ frameworks get push ] bi ; parsing
: IMPORT: scan [ ] import-objc-class ; parsing
"Compiling Objective C bridge..." print "Compiling Objective C bridge..." print
"cocoa.classes" create-vocab drop "cocoa.classes" create-vocab drop

View File

@ -32,11 +32,7 @@ HELP: alien>objc-types
HELP: import-objc-class HELP: import-objc-class
{ $values { "name" string } { "quot" "a quotation with stack effect " { $snippet "( -- )" } } } { $values { "name" string } { "quot" "a quotation with stack effect " { $snippet "( -- )" } } }
{ $description "If a class named " { $snippet "name" } " is already known to the Objective C interface, does nothing. Otherwise, first calls the quotation. The quotation should make the class available to the Objective C runtime if necessary, either by loading a framework or defining it directly. After the quotation returns, this word makes the class available to Factor programs by importing methods and creating a class word the class object in the " { $vocab-link "cocoa.classes" } " vocabulary." } { $description "If a class named " { $snippet "name" } " is already known to the Objective C interface, does nothing. Otherwise, first calls the quotation. The quotation should make the class available to the Objective C runtime if necessary, either by loading a framework or defining it directly. After the quotation returns, this word makes the class available to Factor programs by importing methods and creating a class word the class object in the " { $vocab-link "cocoa.classes" } " vocabulary." } ;
{ $notes "In most cases, the quotation should be " { $link f } "." }
{ $examples
{ $code "\"QTMovie\" f import-objc-class" "QTMovie \"My Movie.mov\" <NSString> f -> movieWithFile:error:" }
} ;
HELP: root-class HELP: root-class
{ $values { "class" alien } { "root" alien } } { $values { "class" alien } { "root" alien } }

3
basis/cocoa/messages/messages.factor Executable file → Normal file
View File

@ -4,7 +4,8 @@ USING: accessors alien alien.c-types alien.strings arrays assocs
combinators compiler kernel math namespaces make parser combinators compiler kernel math namespaces make parser
prettyprint prettyprint.sections quotations sequences strings prettyprint prettyprint.sections quotations sequences strings
words cocoa.runtime io macros memoize debugger words cocoa.runtime io macros memoize debugger
io.encodings.ascii effects compiler.generator libc libc.private ; io.encodings.ascii effects compiler.generator libc libc.private
parser lexer init core-foundation ;
IN: cocoa.messages IN: cocoa.messages
: make-sender ( method function -- quot ) : make-sender ( method function -- quot )

0
basis/cocoa/pasteboard/pasteboard.factor Executable file → Normal file
View File

0
basis/cocoa/subclassing/subclassing.factor Executable file → Normal file
View File

0
basis/cocoa/windows/windows.factor Executable file → Normal file
View File

View File

@ -1,48 +1,33 @@
! Copyright (C) 2003, 2007, 2008 Slava Pestov. ! Copyright (C) 2003, 2008 Slava Pestov.
! Copyright (C) 2008 Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel accessors ;
USING: kernel combinators sequences arrays classes.tuple accessors colors.hsv ;
IN: colors IN: colors
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TUPLE: color ; TUPLE: color ;
TUPLE: rgba < color red green blue alpha ; TUPLE: rgba < color red green blue alpha ;
TUPLE: hsva < color hue saturation value alpha ; C: <rgba> rgba
TUPLE: gray < color gray alpha ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
GENERIC: >rgba ( object -- rgba ) GENERIC: >rgba ( object -- rgba )
M: rgba >rgba ( rgba -- rgba ) ; M: rgba >rgba ( rgba -- rgba ) ;
M: hsva >rgba ( hsva -- rgba )
{ [ hue>> ] [ saturation>> ] [ value>> ] [ alpha>> ] } cleave 4array
[ hsv>rgb ] [ peek ] bi suffix first4 rgba boa ;
M: gray >rgba ( gray -- rgba ) [ gray>> dup dup ] [ alpha>> ] bi rgba boa ;
M: color red>> ( color -- red ) >rgba red>> ; M: color red>> ( color -- red ) >rgba red>> ;
M: color green>> ( color -- green ) >rgba green>> ; M: color green>> ( color -- green ) >rgba green>> ;
M: color blue>> ( color -- blue ) >rgba blue>> ; M: color blue>> ( color -- blue ) >rgba blue>> ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : black T{ rgba f 0.0 0.0 0.0 1.0 } ; inline
: blue T{ rgba f 0.0 0.0 1.0 1.0 } ; inline
: black T{ rgba f 0.0 0.0 0.0 1.0 } ; : cyan T{ rgba f 0 0.941 0.941 1 } ; inline
: blue T{ rgba f 0.0 0.0 1.0 1.0 } ; : gray T{ rgba f 0.6 0.6 0.6 1.0 } ; inline
: cyan T{ rgba f 0 0.941 0.941 1 } ; : green T{ rgba f 0.0 1.0 0.0 1.0 } ; inline
: gray T{ rgba f 0.6 0.6 0.6 1.0 } ; : light-gray T{ rgba f 0.95 0.95 0.95 0.95 } ; inline
: green T{ rgba f 0.0 1.0 0.0 1.0 } ; : light-purple T{ rgba f 0.8 0.8 1.0 1.0 } ; inline
: light-gray T{ rgba f 0.95 0.95 0.95 0.95 } ; : magenta T{ rgba f 0.941 0 0.941 1 } ; inline
: light-purple T{ rgba f 0.8 0.8 1.0 1.0 } ; : orange T{ rgba f 0.941 0.627 0 1 } ; inline
: magenta T{ rgba f 0.941 0 0.941 1 } ; : purple T{ rgba f 0.627 0 0.941 1 } ; inline
: orange T{ rgba f 0.941 0.627 0 1 } ; : red T{ rgba f 1.0 0.0 0.0 1.0 } ; inline
: purple T{ rgba f 0.627 0 0.941 1 } ; : white T{ rgba f 1.0 1.0 1.0 1.0 } ; inline
: red T{ rgba f 1.0 0.0 0.0 1.0 } ; : yellow T{ rgba f 1.0 1.0 0.0 1.0 } ; inline
: white T{ rgba f 1.0 1.0 1.0 1.0 } ;
: yellow T{ rgba f 1.0 1.0 0.0 1.0 } ;

View File

@ -0,0 +1,11 @@
! Copyright (C) 2008 Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license.
USING: colors kernel accessors ;
IN: colors.gray
TUPLE: gray < color gray alpha ;
C: <gray> gray
M: gray >rgba ( gray -- rgba )
[ gray>> dup dup ] [ alpha>> ] bi <rgba> ;

View File

@ -0,0 +1,26 @@
IN: colors.hsv.tests
USING: accessors kernel colors colors.hsv tools.test math ;
: hsv>rgb ( h s v -- r g b )
[ 360 * ] 2dip
1 <hsva> >rgba [ red>> ] [ green>> ] [ blue>> ] tri ;
[ 1/2 1/2 1/2 ] [ 0 0 1/2 hsv>rgb ] unit-test
[ 1/2 1/4 1/4 ] [ 0 1/2 1/2 hsv>rgb ] unit-test
[ 1/3 2/9 2/9 ] [ 0 1/3 1/3 hsv>rgb ] unit-test
[ 24/125 1/5 4/25 ] [ 1/5 1/5 1/5 hsv>rgb ] unit-test
[ 29/180 1/6 5/36 ] [ 1/5 1/6 1/6 hsv>rgb ] unit-test
[ 6/25 2/5 38/125 ] [ 2/5 2/5 2/5 hsv>rgb ] unit-test
[ 8/25 4/5 64/125 ] [ 2/5 3/5 4/5 hsv>rgb ] unit-test
[ 6/25 48/125 3/5 ] [ 3/5 3/5 3/5 hsv>rgb ] unit-test
[ 0 0 0 ] [ 3/5 1/5 0 hsv>rgb ] unit-test
[ 84/125 4/25 4/5 ] [ 4/5 4/5 4/5 hsv>rgb ] unit-test
[ 7/15 1/3 1/2 ] [ 4/5 1/3 1/2 hsv>rgb ] unit-test
[ 5/6 5/36 5/6 ] [ 5/6 5/6 5/6 hsv>rgb ] unit-test
[ 1/6 0 1/6 ] [ 5/6 1 1/6 hsv>rgb ] unit-test

View File

@ -1,41 +1,38 @@
! Copyright (C) 2007 Eduardo Cavazos ! Copyright (C) 2008 Eduardo Cavazos.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: colors kernel combinators math math.functions accessors ;
USING: kernel combinators arrays sequences math math.functions ;
IN: colors.hsv IN: colors.hsv
<PRIVATE
: H ( hsv -- H ) first ;
: S ( hsv -- S ) second ;
: V ( hsv -- V ) third ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: Hi ( hsv -- Hi ) H 60 / floor 6 mod ;
: f ( hsv -- f ) [ H 60 / ] [ Hi ] bi - ;
: p ( hsv -- p ) [ S 1 swap - ] [ V ] bi * ;
: q ( hsv -- q ) [ [ f ] [ S ] bi * 1 swap - ] [ V ] bi * ;
: t ( hsv -- t ) [ [ f 1 swap - ] [ S ] bi * 1 swap - ] [ V ] bi * ;
PRIVATE>
! h [0,360) ! h [0,360)
! s [0,1] ! s [0,1]
! v [0,1] ! v [0,1]
TUPLE: hsva < color hue saturation value alpha ;
: hsv>rgb ( hsv -- rgb ) C: <hsva> hsva
dup Hi
{ { 0 [ [ V ] [ t ] [ p ] tri ] } <PRIVATE
{ 1 [ [ q ] [ V ] [ p ] tri ] }
{ 2 [ [ p ] [ V ] [ t ] tri ] } : Hi ( hsv -- Hi ) hue>> 60 / floor 6 mod ; inline
{ 3 [ [ p ] [ q ] [ V ] tri ] }
{ 4 [ [ t ] [ p ] [ V ] tri ] } : f ( hsv -- f ) [ hue>> 60 / ] [ Hi ] bi - ; inline
{ 5 [ [ V ] [ p ] [ q ] tri ] } } case 3array ;
: p ( hsv -- p ) [ saturation>> 1 swap - ] [ value>> ] bi * ; inline
: q ( hsv -- q ) [ [ f ] [ saturation>> ] bi * 1 swap - ] [ value>> ] bi * ; inline
: t ( hsv -- t ) [ [ f 1 swap - ] [ saturation>> ] bi * 1 swap - ] [ value>> ] bi * ; inline
PRIVATE>
M: hsva >rgba ( hsva -- rgba )
[
dup Hi
{
{ 0 [ [ value>> ] [ t ] [ p ] tri ] }
{ 1 [ [ q ] [ value>> ] [ p ] tri ] }
{ 2 [ [ p ] [ value>> ] [ t ] tri ] }
{ 3 [ [ p ] [ q ] [ value>> ] tri ] }
{ 4 [ [ t ] [ p ] [ value>> ] tri ] }
{ 5 [ [ value>> ] [ p ] [ q ] tri ] }
} case
] [ alpha>> ] bi <rgba> ;

0
basis/combinators/short-circuit/short-circuit.factor Executable file → Normal file
View File

0
basis/compiler/compiler-docs.factor Executable file → Normal file
View File

0
basis/compiler/compiler.factor Executable file → Normal file
View File

0
basis/compiler/constants/constants.factor Executable file → Normal file
View File

0
basis/compiler/generator/fixup/fixup.factor Executable file → Normal file
View File

0
basis/compiler/generator/generator-docs.factor Executable file → Normal file
View File

0
basis/compiler/generator/generator.factor Executable file → Normal file
View File

0
basis/compiler/generator/registers/registers.factor Executable file → Normal file
View File

0
basis/compiler/tests/alien.factor Executable file → Normal file
View File

0
basis/compiler/tests/curry.factor Executable file → Normal file
View File

0
basis/compiler/tests/float.factor Executable file → Normal file
View File

0
basis/compiler/tests/intrinsics.factor Executable file → Normal file
View File

15
basis/compiler/tests/optimizer.factor Executable file → Normal file
View File

@ -362,3 +362,18 @@ TUPLE: some-tuple x ;
[ B{ 0 1 2 3 4 5 6 7 } ] [ [ 8 [ ] B{ } map-as ] compile-call ] unit-test [ B{ 0 1 2 3 4 5 6 7 } ] [ [ 8 [ ] B{ } map-as ] compile-call ] unit-test
[ 0 ] [ 1234 [ { fixnum } declare -64 shift ] compile-call ] unit-test [ 0 ] [ 1234 [ { fixnum } declare -64 shift ] compile-call ] unit-test
! Loop detection problem found by doublec
SYMBOL: counter
DEFER: loop-bbb
: loop-aaa ( -- )
counter inc counter get 2 < [ loop-bbb ] when ; inline recursive
: loop-bbb ( -- )
[ loop-aaa ] with-scope ; inline recursive
: loop-ccc ( -- ) loop-bbb ;
[ 0 ] [ 0 counter set loop-ccc counter get ] unit-test

0
basis/compiler/tests/simple.factor Executable file → Normal file
View File

0
basis/compiler/tests/stack-trace.factor Executable file → Normal file
View File

0
basis/compiler/tests/templates-early.factor Executable file → Normal file
View File

0
basis/compiler/tests/templates.factor Executable file → Normal file
View File

0
basis/compiler/tests/tuples.factor Executable file → Normal file
View File

0
basis/compiler/tree/dead-code/simple/simple.factor Executable file → Normal file
View File

0
basis/compiler/tree/def-use/def-use-tests.factor Executable file → Normal file
View File

0
basis/compiler/tree/def-use/def-use.factor Executable file → Normal file
View File

View File

@ -8,7 +8,7 @@ math.functions math.private strings layouts
compiler.tree.propagation.info compiler.tree.def-use compiler.tree.propagation.info compiler.tree.def-use
compiler.tree.debugger compiler.tree.checker compiler.tree.debugger compiler.tree.checker
slots.private words hashtables classes assocs locals slots.private words hashtables classes assocs locals
float-arrays ; float-arrays system ;
IN: compiler.tree.propagation.tests IN: compiler.tree.propagation.tests
\ propagate must-infer \ propagate must-infer
@ -590,6 +590,8 @@ MIXIN: empty-mixin
[ V{ float-array } ] [ [| | F{ } ] final-classes ] unit-test [ V{ float-array } ] [ [| | F{ } ] final-classes ] unit-test
[ V{ t } ] [ [ netbsd unix? ] final-literals ] unit-test
! [ V{ string } ] [ ! [ V{ string } ] [
! [ dup string? t xor [ "A" throw ] [ ] if ] final-classes ! [ dup string? t xor [ "A" throw ] [ ] if ] final-classes
! ] unit-test ! ] unit-test

0
basis/compiler/tree/propagation/propagation.factor Executable file → Normal file
View File

View File

@ -76,13 +76,25 @@ M: #declare propagate-before
: fold-call ( #call word -- ) : fold-call ( #call word -- )
[ (fold-call) ] [ drop out-d>> ] 2bi set-value-infos ; [ (fold-call) ] [ drop out-d>> ] 2bi set-value-infos ;
: predicate-output-infos ( info class -- info ) : predicate-output-infos/literal ( info class -- info )
[ literal>> ] dip
'[ _ _ instance? <literal-info> ]
[ drop object-info ]
recover ;
: predicate-output-infos/class ( info class -- info )
[ class>> ] dip { [ class>> ] dip {
{ [ 2dup class<= ] [ t <literal-info> ] } { [ 2dup class<= ] [ t <literal-info> ] }
{ [ 2dup classes-intersect? not ] [ f <literal-info> ] } { [ 2dup classes-intersect? not ] [ f <literal-info> ] }
[ object-info ] [ object-info ]
} cond 2nip ; } cond 2nip ;
: predicate-output-infos ( info class -- info )
over literal?>>
[ predicate-output-infos/literal ]
[ predicate-output-infos/class ]
if ;
: propagate-predicate ( #call word -- infos ) : propagate-predicate ( #call word -- infos )
#! We need to force the caller word to recompile when the class #! We need to force the caller word to recompile when the class
#! is redefined, since now we're making assumptions but the #! is redefined, since now we're making assumptions but the

View File

@ -148,3 +148,27 @@ DEFER: a'
[ a' ] build-tree analyze-recursive [ a' ] build-tree analyze-recursive
\ b' label-is-loop? \ b' label-is-loop?
] unit-test ] unit-test
DEFER: a''
: b'' ( -- )
a'' ; inline recursive
: a'' ( -- )
b'' a'' ; inline recursive
[ t ] [
[ a'' ] build-tree analyze-recursive
\ a'' label-is-not-loop?
] unit-test
: loop-in-non-loop ( x quot: ( i -- ) -- )
over 0 > [
[ [ 1 - ] dip loop-in-non-loop ] [ call ] 2bi
] [ 2drop ] if ; inline recursive
[ t ] [
[ 10 [ [ drop ] each-integer ] loop-in-non-loop ]
build-tree analyze-recursive
\ (each-integer) label-is-loop?
] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel assocs namespaces accessors sequences deques USING: kernel assocs arrays namespaces accessors sequences deques
search-deques compiler.tree compiler.tree.combinators ; search-deques compiler.tree compiler.tree.combinators ;
IN: compiler.tree.recursive IN: compiler.tree.recursive
@ -50,11 +50,10 @@ GENERIC: collect-loop-info* ( tail? node -- )
loop-stack get length swap loop-heights get set-at ; loop-stack get length swap loop-heights get set-at ;
M: #recursive collect-loop-info* M: #recursive collect-loop-info*
nip
[ [
[ [
label>> label>>
[ loop-stack [ swap suffix ] change ] [ swap 2array loop-stack [ swap suffix ] change ]
[ remember-loop-info ] [ remember-loop-info ]
[ t >>loop? drop ] [ t >>loop? drop ]
tri tri
@ -62,7 +61,7 @@ M: #recursive collect-loop-info*
[ t swap child>> (collect-loop-info) ] bi [ t swap child>> (collect-loop-info) ] bi
] with-scope ; ] with-scope ;
: current-loop-nesting ( label -- labels ) : current-loop-nesting ( label -- alist )
loop-stack get swap loop-heights get at tail ; loop-stack get swap loop-heights get at tail ;
: disqualify-loop ( label -- ) : disqualify-loop ( label -- )
@ -71,7 +70,10 @@ M: #recursive collect-loop-info*
M: #call-recursive collect-loop-info* M: #call-recursive collect-loop-info*
label>> label>>
swap [ dup disqualify-loop ] unless swap [ dup disqualify-loop ] unless
dup current-loop-nesting [ loop-calls get push-at ] with each ; dup current-loop-nesting
[ keys [ loop-calls get push-at ] with each ]
[ [ nip not ] assoc-filter keys [ disqualify-loop ] each ]
bi ;
M: #if collect-loop-info* M: #if collect-loop-info*
children>> [ (collect-loop-info) ] with each ; children>> [ (collect-loop-info) ] with each ;

0
basis/compiler/tree/tree.factor Executable file → Normal file
View File

0
basis/concurrency/combinators/combinators-docs.factor Executable file → Normal file
View File

0
basis/concurrency/combinators/combinators-tests.factor Executable file → Normal file
View File

Some files were not shown because too many files have changed in this diff Show More