Merge branch 'master' into experimental
commit
969fff0f5b
|
@ -1,4 +1,4 @@
|
|||
! Copyright (C) 2004, 2008 Slava Pestov.
|
||||
! Copyright (C) 2004, 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: byte-arrays arrays assocs kernel kernel.private libc math
|
||||
namespaces make parser sequences strings words assocs splitting
|
||||
|
@ -275,7 +275,7 @@ M: long-long-type box-return ( type -- )
|
|||
: if-void ( type true false -- )
|
||||
pick "void" = [ drop nip call ] [ nip call ] if ; inline
|
||||
|
||||
: primitive-types
|
||||
CONSTANT: primitive-types
|
||||
{
|
||||
"char" "uchar"
|
||||
"short" "ushort"
|
||||
|
@ -284,7 +284,7 @@ M: long-long-type box-return ( type -- )
|
|||
"longlong" "ulonglong"
|
||||
"float" "double"
|
||||
"void*" "bool"
|
||||
} ;
|
||||
}
|
||||
|
||||
[
|
||||
<c-type>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Code generation for C99 complex number support
|
|
@ -170,8 +170,8 @@ M: character-type (fortran-type>c-type)
|
|||
|
||||
: (parse-fortran-type) ( fortran-type-string -- type )
|
||||
parse-out swap parse-dims swap parse-size swap
|
||||
dup >lower fortran>c-types at*
|
||||
[ nip new-fortran-type ] [ drop misc-type boa ] if ;
|
||||
>lower fortran>c-types ?at
|
||||
[ new-fortran-type ] [ misc-type boa ] if ;
|
||||
|
||||
: parse-fortran-type ( fortran-type-string/f -- type/f )
|
||||
dup [ (parse-fortran-type) ] when ;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Utilities used in implementation of alien parsing words
|
|
@ -0,0 +1 @@
|
|||
Prettyprinting aliens and DLLs
|
|
@ -0,0 +1 @@
|
|||
Passing Factor strings as C strings and vice versa
|
|
@ -0,0 +1 @@
|
|||
Default string encoding on Unix
|
|
@ -0,0 +1 @@
|
|||
Default string encoding on Windows
|
|
@ -0,0 +1 @@
|
|||
Struct field implementation and reflection support
|
|
@ -0,0 +1 @@
|
|||
Priority queue with fast insertion, removal of first element, and lookup of arbitrary elements by key
|
|
@ -0,0 +1 @@
|
|||
Reading sequences of bits from a byte stream
|
|
@ -5,12 +5,13 @@ IN: bootstrap.help
|
|||
|
||||
: load-help ( -- )
|
||||
"help.lint" require
|
||||
"tools.vocabs.browser" require
|
||||
"alien.syntax" require
|
||||
"compiler" require
|
||||
|
||||
t load-help? set-global
|
||||
|
||||
[ drop ] load-vocab-hook [
|
||||
[ vocab ] load-vocab-hook [
|
||||
dictionary get values
|
||||
[ docs-loaded?>> not ] filter
|
||||
[ load-docs ] each
|
||||
|
|
|
@ -4,7 +4,7 @@ USING: http.client checksums checksums.md5 splitting assocs
|
|||
kernel io.files bootstrap.image sequences io urls ;
|
||||
IN: bootstrap.image.download
|
||||
|
||||
: url URL" http://factorcode.org/images/latest/" ;
|
||||
CONSTANT: url URL" http://factorcode.org/images/latest/"
|
||||
|
||||
: download-checksums ( -- alist )
|
||||
url "checksums.txt" >url derive-url http-get nip
|
||||
|
|
|
@ -77,20 +77,20 @@ SYMBOL: objects
|
|||
|
||||
! Constants
|
||||
|
||||
: image-magic HEX: 0f0e0d0c ; inline
|
||||
: image-version 4 ; inline
|
||||
CONSTANT: image-magic HEX: 0f0e0d0c
|
||||
CONSTANT: image-version 4
|
||||
|
||||
: data-base 1024 ; inline
|
||||
CONSTANT: data-base 1024
|
||||
|
||||
: userenv-size 70 ; inline
|
||||
CONSTANT: userenv-size 70
|
||||
|
||||
: header-size 10 ; inline
|
||||
CONSTANT: header-size 10
|
||||
|
||||
: data-heap-size-offset 3 ; inline
|
||||
: t-offset 6 ; inline
|
||||
: 0-offset 7 ; inline
|
||||
: 1-offset 8 ; inline
|
||||
: -1-offset 9 ; inline
|
||||
CONSTANT: data-heap-size-offset 3
|
||||
CONSTANT: t-offset 6
|
||||
CONSTANT: 0-offset 7
|
||||
CONSTANT: 1-offset 8
|
||||
CONSTANT: -1-offset 9
|
||||
|
||||
SYMBOL: sub-primitives
|
||||
|
||||
|
|
|
@ -93,9 +93,9 @@ SYMBOL: bootstrap-time
|
|||
"tools.deploy.shaker" run
|
||||
] [
|
||||
"staging" get [
|
||||
"resource:basis/bootstrap/finish-staging.factor" run-file
|
||||
"vocab:bootstrap/finish-staging.factor" run-file
|
||||
] [
|
||||
"resource:basis/bootstrap/finish-bootstrap.factor" run-file
|
||||
"vocab:bootstrap/finish-bootstrap.factor" run-file
|
||||
] if
|
||||
|
||||
"output-image" get save-image-and-exit
|
||||
|
@ -104,6 +104,6 @@ SYMBOL: bootstrap-time
|
|||
drop
|
||||
[
|
||||
load-help? off
|
||||
"resource:basis/bootstrap/bootstrap-error.factor" run-file
|
||||
"vocab:bootstrap/bootstrap-error.factor" run-file
|
||||
] with-scope
|
||||
] recover
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
USING: arrays byte-arrays help.markup help.syntax kernel
|
||||
byte-vectors.private combinators ;
|
||||
USING: arrays byte-arrays help.markup help.syntax kernel combinators ;
|
||||
IN: byte-vectors
|
||||
|
||||
ARTICLE: "byte-vectors" "Byte vectors"
|
||||
"A byte vector is a resizable mutable sequence of unsigned bytes. Byte vector words are found in the " { $vocab-link "byte-vectors" } " vocabulary."
|
||||
"The " { $vocab-link "byte-vectors" } " vocabulary implements resizable mutable sequence of unsigned bytes. Byte vectors implement the " { $link "sequence-protocol" } " and thus all " { $link "sequences" } " can be used with them."
|
||||
$nl
|
||||
"Byte vectors form a class:"
|
||||
{ $subsection byte-vector }
|
||||
|
|
|
@ -72,9 +72,9 @@ C-ENUM:
|
|||
CAIRO_STATUS_INVALID_STRIDE ;
|
||||
|
||||
TYPEDEF: int cairo_content_t
|
||||
: CAIRO_CONTENT_COLOR HEX: 1000 ;
|
||||
: CAIRO_CONTENT_ALPHA HEX: 2000 ;
|
||||
: CAIRO_CONTENT_COLOR_ALPHA HEX: 3000 ;
|
||||
CONSTANT: CAIRO_CONTENT_COLOR HEX: 1000
|
||||
CONSTANT: CAIRO_CONTENT_ALPHA HEX: 2000
|
||||
CONSTANT: CAIRO_CONTENT_COLOR_ALPHA HEX: 3000
|
||||
|
||||
TYPEDEF: void* cairo_write_func_t
|
||||
: cairo-write-func ( quot -- callback )
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Low-level alien interface to Cairo library
|
|
@ -0,0 +1 @@
|
|||
UI gadget for rendering graphics with Cairo
|
|
@ -61,7 +61,7 @@ PRIVATE>
|
|||
: month-abbreviation ( n -- string )
|
||||
check-month 1- month-abbreviations nth ;
|
||||
|
||||
: day-counts { 0 31 28 31 30 31 30 31 31 30 31 30 31 } ; inline
|
||||
CONSTANT: day-counts { 0 31 28 31 30 31 30 31 31 30 31 30 31 }
|
||||
|
||||
: day-names ( -- array )
|
||||
{
|
||||
|
|
|
@ -51,6 +51,11 @@ IN: calendar.format.tests
|
|||
timestamp>string
|
||||
] unit-test
|
||||
|
||||
[ "20080504070000" ] [
|
||||
"Sun May 04 07:00:00 2008 GMT" cookie-string>timestamp
|
||||
timestamp>mdtm
|
||||
] unit-test
|
||||
|
||||
[
|
||||
T{ timestamp f
|
||||
2008
|
||||
|
@ -74,3 +79,5 @@ IN: calendar.format.tests
|
|||
{ gmt-offset T{ duration f 0 0 0 0 0 0 } }
|
||||
}
|
||||
] [ "Thursday, 02-Oct-2008 23:59:59 GMT" cookie-string>timestamp ] unit-test
|
||||
|
||||
|
||||
|
|
|
@ -78,6 +78,9 @@ M: integer year. ( n -- )
|
|||
M: timestamp year. ( timestamp -- )
|
||||
year>> year. ;
|
||||
|
||||
: timestamp>mdtm ( timestamp -- str )
|
||||
[ { YYYY MM DD hh mm ss } formatted ] with-string-writer ;
|
||||
|
||||
: (timestamp>string) ( timestamp -- )
|
||||
{ DAY ", " D " " MONTH " " YYYY " " hh ":" mm ":" ss } formatted ;
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Implementation details for calendar.format
|
|
@ -0,0 +1 @@
|
|||
Unix-specific timezone support and C library time data types
|
|
@ -0,0 +1 @@
|
|||
Windows-specific timezone support
|
|
@ -0,0 +1 @@
|
|||
Calling arbitrary quotations and executing arbitrary words with a static stack effect
|
|
@ -6,7 +6,7 @@ IN: checksums.adler-32
|
|||
|
||||
SINGLETON: adler-32
|
||||
|
||||
: adler-32-modulus 65521 ; inline
|
||||
CONSTANT: adler-32-modulus 65521
|
||||
|
||||
M: adler-32 checksum-bytes ( bytes checksum -- value )
|
||||
drop
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Adler-32 checksum algorithm
|
|
@ -0,0 +1 @@
|
|||
MD5 checksum algorithm
|
|
@ -0,0 +1 @@
|
|||
Dummy checksum algorithm
|
|
@ -9,9 +9,9 @@ ERROR: unknown-digest name ;
|
|||
|
||||
TUPLE: openssl-checksum name ;
|
||||
|
||||
: openssl-md5 T{ openssl-checksum f "md5" } ;
|
||||
CONSTANT: openssl-md5 T{ openssl-checksum f "md5" }
|
||||
|
||||
: openssl-sha1 T{ openssl-checksum f "sha1" } ;
|
||||
CONSTANT: openssl-sha1 T{ openssl-checksum f "sha1" }
|
||||
|
||||
INSTANCE: openssl-checksum stream-checksum
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
OpenSSL's MD5 and SHA1 checksums
|
|
@ -0,0 +1 @@
|
|||
SHA1 checksum algorithm
|
|
@ -9,14 +9,14 @@ IN: checksums.sha2
|
|||
|
||||
SYMBOLS: vars M K H S0 S1 process-M word-size block-size ;
|
||||
|
||||
: a 0 ; inline
|
||||
: b 1 ; inline
|
||||
: c 2 ; inline
|
||||
: d 3 ; inline
|
||||
: e 4 ; inline
|
||||
: f 5 ; inline
|
||||
: g 6 ; inline
|
||||
: h 7 ; inline
|
||||
CONSTANT: a 0
|
||||
CONSTANT: b 1
|
||||
CONSTANT: c 2
|
||||
CONSTANT: d 3
|
||||
CONSTANT: e 4
|
||||
CONSTANT: f 5
|
||||
CONSTANT: g 6
|
||||
CONSTANT: h 7
|
||||
|
||||
: initial-H-256 ( -- seq )
|
||||
{
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
SHA2 checksum algorithm
|
|
@ -0,0 +1 @@
|
|||
Computing checksums of streaming data
|
|
@ -19,9 +19,9 @@ IN: cocoa.application
|
|||
] curry assoc-each
|
||||
] keep ;
|
||||
|
||||
: NSApplicationDelegateReplySuccess 0 ;
|
||||
: NSApplicationDelegateReplyCancel 1 ;
|
||||
: NSApplicationDelegateReplyFailure 2 ;
|
||||
CONSTANT: NSApplicationDelegateReplySuccess 0
|
||||
CONSTANT: NSApplicationDelegateReplyCancel 1
|
||||
CONSTANT: NSApplicationDelegateReplyFailure 2
|
||||
|
||||
: with-autorelease-pool ( quot -- )
|
||||
NSAutoreleasePool -> new slip -> release ; inline
|
||||
|
|
|
@ -18,8 +18,8 @@ IN: cocoa.dialogs
|
|||
dup 0 -> setCanChooseDirectories:
|
||||
dup 0 -> setAllowsMultipleSelection: ;
|
||||
|
||||
: NSOKButton 1 ;
|
||||
: NSCancelButton 0 ;
|
||||
CONSTANT: NSOKButton 1
|
||||
CONSTANT: NSCancelButton 0
|
||||
|
||||
: open-panel ( -- paths )
|
||||
<NSOpenPanel>
|
||||
|
|
|
@ -5,7 +5,7 @@ sequences vectors fry libc destructors
|
|||
specialized-arrays.direct.alien ;
|
||||
IN: cocoa.enumeration
|
||||
|
||||
: NS-EACH-BUFFER-SIZE 16 ; inline
|
||||
CONSTANT: NS-EACH-BUFFER-SIZE 16
|
||||
|
||||
: with-enumeration-buffers ( quot -- )
|
||||
[
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Support for iterating over NSFastEnumerations
|
|
@ -1,11 +1,11 @@
|
|||
! Copyright (C) 2006, 2008 Slava Pestov.
|
||||
! Copyright (C) 2006, 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien alien.c-types alien.strings arrays assocs
|
||||
continuations combinators compiler compiler.alien kernel math
|
||||
namespaces make parser quotations sequences strings words
|
||||
cocoa.runtime io macros memoize io.encodings.utf8
|
||||
effects libc libc.private parser lexer init core-foundation fry
|
||||
generalizations specialized-arrays.direct.alien call ;
|
||||
continuations combinators compiler compiler.alien stack-checker kernel
|
||||
math namespaces make parser quotations sequences strings words
|
||||
cocoa.runtime io macros memoize io.encodings.utf8 effects libc
|
||||
libc.private parser lexer init core-foundation fry generalizations
|
||||
specialized-arrays.direct.alien call ;
|
||||
IN: cocoa.messages
|
||||
|
||||
: make-sender ( method function -- quot )
|
||||
|
@ -14,7 +14,7 @@ IN: cocoa.messages
|
|||
: sender-stub ( method function -- word )
|
||||
[ "( sender-stub )" f <word> dup ] 2dip
|
||||
over first large-struct? [ "_stret" append ] when
|
||||
make-sender define ;
|
||||
make-sender dup infer define-declared ;
|
||||
|
||||
SYMBOL: message-senders
|
||||
SYMBOL: super-message-senders
|
||||
|
|
|
@ -5,7 +5,7 @@ cocoa.classes cocoa.application sequences cocoa core-foundation
|
|||
core-foundation.strings core-foundation.arrays ;
|
||||
IN: cocoa.pasteboard
|
||||
|
||||
: NSStringPboardType "NSStringPboardType" ;
|
||||
CONSTANT: NSStringPboardType "NSStringPboardType"
|
||||
|
||||
: pasteboard-string? ( pasteboard -- ? )
|
||||
NSStringPboardType swap -> types CF>string-array member? ;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Reading and writing Cocoa property lists
|
|
@ -21,15 +21,15 @@ C-STRUCT: objc-super
|
|||
{ "id" "receiver" }
|
||||
{ "Class" "class" } ;
|
||||
|
||||
: CLS_CLASS HEX: 1 ;
|
||||
: CLS_META HEX: 2 ;
|
||||
: CLS_INITIALIZED HEX: 4 ;
|
||||
: CLS_POSING HEX: 8 ;
|
||||
: CLS_MAPPED HEX: 10 ;
|
||||
: CLS_FLUSH_CACHE HEX: 20 ;
|
||||
: CLS_GROW_CACHE HEX: 40 ;
|
||||
: CLS_NEED_BIND HEX: 80 ;
|
||||
: CLS_METHOD_ARRAY HEX: 100 ;
|
||||
CONSTANT: CLS_CLASS HEX: 1
|
||||
CONSTANT: CLS_META HEX: 2
|
||||
CONSTANT: CLS_INITIALIZED HEX: 4
|
||||
CONSTANT: CLS_POSING HEX: 8
|
||||
CONSTANT: CLS_MAPPED HEX: 10
|
||||
CONSTANT: CLS_FLUSH_CACHE HEX: 20
|
||||
CONSTANT: CLS_GROW_CACHE HEX: 40
|
||||
CONSTANT: CLS_NEED_BIND HEX: 80
|
||||
CONSTANT: CLS_METHOD_ARRAY HEX: 100
|
||||
|
||||
FUNCTION: int objc_getClassList ( void* buffer, int bufferLen ) ;
|
||||
|
||||
|
|
|
@ -38,9 +38,9 @@ IN: cocoa.subclassing
|
|||
] map concat ;
|
||||
|
||||
: prepare-method ( ret types quot -- type imp )
|
||||
[ [ encode-types ] 2keep ] dip [
|
||||
"cdecl" swap 4array % \ alien-callback ,
|
||||
] [ ] make define-temp ;
|
||||
[ [ encode-types ] 2keep ] dip
|
||||
'[ _ _ "cdecl" _ alien-callback ]
|
||||
(( -- callback )) define-temp ;
|
||||
|
||||
: prepare-methods ( methods -- methods )
|
||||
[
|
||||
|
|
|
@ -5,43 +5,43 @@ cocoa cocoa.messages cocoa.classes cocoa.types sequences
|
|||
continuations accessors ;
|
||||
IN: cocoa.views
|
||||
|
||||
: NSOpenGLPFAAllRenderers 1 ;
|
||||
: NSOpenGLPFADoubleBuffer 5 ;
|
||||
: NSOpenGLPFAStereo 6 ;
|
||||
: NSOpenGLPFAAuxBuffers 7 ;
|
||||
: NSOpenGLPFAColorSize 8 ;
|
||||
: NSOpenGLPFAAlphaSize 11 ;
|
||||
: NSOpenGLPFADepthSize 12 ;
|
||||
: NSOpenGLPFAStencilSize 13 ;
|
||||
: NSOpenGLPFAAccumSize 14 ;
|
||||
: NSOpenGLPFAMinimumPolicy 51 ;
|
||||
: NSOpenGLPFAMaximumPolicy 52 ;
|
||||
: NSOpenGLPFAOffScreen 53 ;
|
||||
: NSOpenGLPFAFullScreen 54 ;
|
||||
: NSOpenGLPFASampleBuffers 55 ;
|
||||
: NSOpenGLPFASamples 56 ;
|
||||
: NSOpenGLPFAAuxDepthStencil 57 ;
|
||||
: NSOpenGLPFAColorFloat 58 ;
|
||||
: NSOpenGLPFAMultisample 59 ;
|
||||
: NSOpenGLPFASupersample 60 ;
|
||||
: NSOpenGLPFASampleAlpha 61 ;
|
||||
: NSOpenGLPFARendererID 70 ;
|
||||
: NSOpenGLPFASingleRenderer 71 ;
|
||||
: NSOpenGLPFANoRecovery 72 ;
|
||||
: NSOpenGLPFAAccelerated 73 ;
|
||||
: NSOpenGLPFAClosestPolicy 74 ;
|
||||
: NSOpenGLPFARobust 75 ;
|
||||
: NSOpenGLPFABackingStore 76 ;
|
||||
: NSOpenGLPFAMPSafe 78 ;
|
||||
: NSOpenGLPFAWindow 80 ;
|
||||
: NSOpenGLPFAMultiScreen 81 ;
|
||||
: NSOpenGLPFACompliant 83 ;
|
||||
: NSOpenGLPFAScreenMask 84 ;
|
||||
: NSOpenGLPFAPixelBuffer 90 ;
|
||||
: NSOpenGLPFAAllowOfflineRenderers 96 ;
|
||||
: NSOpenGLPFAVirtualScreenCount 128 ;
|
||||
CONSTANT: NSOpenGLPFAAllRenderers 1
|
||||
CONSTANT: NSOpenGLPFADoubleBuffer 5
|
||||
CONSTANT: NSOpenGLPFAStereo 6
|
||||
CONSTANT: NSOpenGLPFAAuxBuffers 7
|
||||
CONSTANT: NSOpenGLPFAColorSize 8
|
||||
CONSTANT: NSOpenGLPFAAlphaSize 11
|
||||
CONSTANT: NSOpenGLPFADepthSize 12
|
||||
CONSTANT: NSOpenGLPFAStencilSize 13
|
||||
CONSTANT: NSOpenGLPFAAccumSize 14
|
||||
CONSTANT: NSOpenGLPFAMinimumPolicy 51
|
||||
CONSTANT: NSOpenGLPFAMaximumPolicy 52
|
||||
CONSTANT: NSOpenGLPFAOffScreen 53
|
||||
CONSTANT: NSOpenGLPFAFullScreen 54
|
||||
CONSTANT: NSOpenGLPFASampleBuffers 55
|
||||
CONSTANT: NSOpenGLPFASamples 56
|
||||
CONSTANT: NSOpenGLPFAAuxDepthStencil 57
|
||||
CONSTANT: NSOpenGLPFAColorFloat 58
|
||||
CONSTANT: NSOpenGLPFAMultisample 59
|
||||
CONSTANT: NSOpenGLPFASupersample 60
|
||||
CONSTANT: NSOpenGLPFASampleAlpha 61
|
||||
CONSTANT: NSOpenGLPFARendererID 70
|
||||
CONSTANT: NSOpenGLPFASingleRenderer 71
|
||||
CONSTANT: NSOpenGLPFANoRecovery 72
|
||||
CONSTANT: NSOpenGLPFAAccelerated 73
|
||||
CONSTANT: NSOpenGLPFAClosestPolicy 74
|
||||
CONSTANT: NSOpenGLPFARobust 75
|
||||
CONSTANT: NSOpenGLPFABackingStore 76
|
||||
CONSTANT: NSOpenGLPFAMPSafe 78
|
||||
CONSTANT: NSOpenGLPFAWindow 80
|
||||
CONSTANT: NSOpenGLPFAMultiScreen 81
|
||||
CONSTANT: NSOpenGLPFACompliant 83
|
||||
CONSTANT: NSOpenGLPFAScreenMask 84
|
||||
CONSTANT: NSOpenGLPFAPixelBuffer 90
|
||||
CONSTANT: NSOpenGLPFAAllowOfflineRenderers 96
|
||||
CONSTANT: NSOpenGLPFAVirtualScreenCount 128
|
||||
|
||||
: kCGLRendererGenericFloatID HEX: 00020400 ;
|
||||
CONSTANT: kCGLRendererGenericFloatID HEX: 00020400
|
||||
|
||||
<PRIVATE
|
||||
|
||||
|
@ -94,7 +94,7 @@ PRIVATE>
|
|||
USE: opengl.gl
|
||||
USE: alien.syntax
|
||||
|
||||
: NSOpenGLCPSwapInterval 222 ;
|
||||
CONSTANT: NSOpenGLCPSwapInterval 222
|
||||
|
||||
LIBRARY: OpenGL
|
||||
|
||||
|
|
|
@ -4,15 +4,15 @@ USING: arrays kernel math cocoa cocoa.messages cocoa.classes
|
|||
sequences math.bitwise ;
|
||||
IN: cocoa.windows
|
||||
|
||||
: NSBorderlessWindowMask 0 ; inline
|
||||
: NSTitledWindowMask 1 ; inline
|
||||
: NSClosableWindowMask 2 ; inline
|
||||
: NSMiniaturizableWindowMask 4 ; inline
|
||||
: NSResizableWindowMask 8 ; inline
|
||||
CONSTANT: NSBorderlessWindowMask 0
|
||||
CONSTANT: NSTitledWindowMask 1
|
||||
CONSTANT: NSClosableWindowMask 2
|
||||
CONSTANT: NSMiniaturizableWindowMask 4
|
||||
CONSTANT: NSResizableWindowMask 8
|
||||
|
||||
: NSBackingStoreRetained 0 ; inline
|
||||
: NSBackingStoreNonretained 1 ; inline
|
||||
: NSBackingStoreBuffered 2 ; inline
|
||||
CONSTANT: NSBackingStoreRetained 0
|
||||
CONSTANT: NSBackingStoreNonretained 1
|
||||
CONSTANT: NSBackingStoreBuffered 2
|
||||
|
||||
: standard-window-type ( -- n )
|
||||
{
|
||||
|
|
|
@ -18,16 +18,16 @@ M: color red>> ( color -- red ) >rgba red>> ;
|
|||
M: color green>> ( color -- green ) >rgba green>> ;
|
||||
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
|
||||
: cyan T{ rgba f 0 0.941 0.941 1 } ; inline
|
||||
: gray T{ rgba f 0.6 0.6 0.6 1.0 } ; inline
|
||||
: green T{ rgba f 0.0 1.0 0.0 1.0 } ; inline
|
||||
: light-gray T{ rgba f 0.95 0.95 0.95 0.95 } ; inline
|
||||
: light-purple T{ rgba f 0.8 0.8 1.0 1.0 } ; inline
|
||||
: magenta T{ rgba f 0.941 0 0.941 1 } ; inline
|
||||
: orange T{ rgba f 0.941 0.627 0 1 } ; inline
|
||||
: purple T{ rgba f 0.627 0 0.941 1 } ; inline
|
||||
: red T{ rgba f 1.0 0.0 0.0 1.0 } ; inline
|
||||
: white T{ rgba f 1.0 1.0 1.0 1.0 } ; inline
|
||||
: yellow T{ rgba f 1.0 1.0 0.0 1.0 } ; inline
|
||||
CONSTANT: black T{ rgba f 0.0 0.0 0.0 1.0 }
|
||||
CONSTANT: blue T{ rgba f 0.0 0.0 1.0 1.0 }
|
||||
CONSTANT: cyan T{ rgba f 0 0.941 0.941 1 }
|
||||
CONSTANT: gray T{ rgba f 0.6 0.6 0.6 1.0 }
|
||||
CONSTANT: green T{ rgba f 0.0 1.0 0.0 1.0 }
|
||||
CONSTANT: light-gray T{ rgba f 0.95 0.95 0.95 0.95 }
|
||||
CONSTANT: light-purple T{ rgba f 0.8 0.8 1.0 1.0 }
|
||||
CONSTANT: magenta T{ rgba f 0.941 0 0.941 1 }
|
||||
CONSTANT: orange T{ rgba f 0.941 0.627 0 1 }
|
||||
CONSTANT: purple T{ rgba f 0.627 0 0.941 1 }
|
||||
CONSTANT: red T{ rgba f 1.0 0.0 0.0 1.0 }
|
||||
CONSTANT: white T{ rgba f 1.0 1.0 1.0 1.0 }
|
||||
CONSTANT: yellow T{ rgba f 1.0 1.0 0.0 1.0 }
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Grayscale colors
|
|
@ -0,0 +1 @@
|
|||
Hue-saturation-value colors
|
|
@ -0,0 +1 @@
|
|||
Short-circuiting logical operations which infer the arity
|
|
@ -0,0 +1 @@
|
|||
Short-circuiting logical operations
|
|
@ -0,0 +1 @@
|
|||
Combinators which infer arities
|
|
@ -0,0 +1 @@
|
|||
Common code used for analysis and code generation of alien bindings
|
|
@ -0,0 +1 @@
|
|||
Alias analysis for stack operations, array elements and tuple slots
|
|
@ -0,0 +1 @@
|
|||
Common code used by several passes to perform copy propagation
|
|
@ -0,0 +1 @@
|
|||
Dead-code elimination
|
|
@ -16,7 +16,7 @@ M: callable test-cfg
|
|||
build-tree optimize-tree gensym build-cfg ;
|
||||
|
||||
M: word test-cfg
|
||||
[ build-tree-from-word nip optimize-tree ] keep build-cfg ;
|
||||
[ build-tree-from-word optimize-tree ] keep build-cfg ;
|
||||
|
||||
SYMBOL: allocate-registers?
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Tools for debugging low-level optimizer
|
|
@ -0,0 +1 @@
|
|||
Common code used by several passes for def-use analysis
|
|
@ -0,0 +1 @@
|
|||
Utility for constructing basic blocks
|
|
@ -0,0 +1 @@
|
|||
Stack height normalization coalesces height changes at start of basic block
|
|
@ -0,0 +1 @@
|
|||
Basic block instructions
|
|
@ -0,0 +1 @@
|
|||
Parsing word for defining instructions
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for alien calls
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for inline memory allocation
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for fixnum arithmetic
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for floating point arithmetic
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for miscellaneous primitives
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for slot access
|
|
@ -0,0 +1 @@
|
|||
Generating instructions from certain primitives
|
|
@ -0,0 +1 @@
|
|||
Utility for iterating for high-level IR
|
|
@ -0,0 +1 @@
|
|||
Allocating registers for live intervals
|
|
@ -0,0 +1 @@
|
|||
Assigning registers to live intervals
|
|
@ -0,0 +1 @@
|
|||
Tools for debugging register allocator
|
|
@ -0,0 +1 @@
|
|||
Live intervals
|
|
@ -0,0 +1 @@
|
|||
Linear-scan register allocation
|
|
@ -0,0 +1 @@
|
|||
Flattening CFG into MR (machine representation)
|
|
@ -0,0 +1 @@
|
|||
Top-level harness for CFG optimization
|
|
@ -0,0 +1 @@
|
|||
Computing predecessors of basic blocks in CFG
|
|
@ -0,0 +1 @@
|
|||
Virtual single-assignment registers
|
|
@ -0,0 +1 @@
|
|||
Reverse post-order linearization of CFG
|
|
@ -0,0 +1 @@
|
|||
Computing stack frame size and layout
|
|
@ -0,0 +1 @@
|
|||
Generating instructions for accessing the data and retain stacks
|
|
@ -0,0 +1 @@
|
|||
Low-level control flow graph IR
|
|
@ -0,0 +1 @@
|
|||
Converting three-operand instructions into two-operand form
|
|
@ -0,0 +1 @@
|
|||
Eliminating unreachable basic blocks and unconditional jumps
|
|
@ -0,0 +1 @@
|
|||
Utility words used by CFG optimization
|
|
@ -0,0 +1 @@
|
|||
Value numbering expressions
|
|
@ -0,0 +1 @@
|
|||
Value numbering expression graph
|
|
@ -0,0 +1 @@
|
|||
Propagation pass to update code after value numbering
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1 @@
|
|||
Algebraic simplification of expressions
|
|
@ -0,0 +1 @@
|
|||
Local value numbering for common subexpression elimination
|
|
@ -0,0 +1 @@
|
|||
Write barrier elimination
|
|
@ -0,0 +1 @@
|
|||
Code generation from MR (machine representation)
|
|
@ -1,5 +1,5 @@
|
|||
USING: help.markup help.syntax words io parser
|
||||
assocs words.private sequences compiler.units ;
|
||||
assocs words.private sequences compiler.units quotations ;
|
||||
IN: compiler
|
||||
|
||||
HELP: enable-compiler
|
||||
|
@ -16,18 +16,24 @@ ARTICLE: "compiler-usage" "Calling the optimizing compiler"
|
|||
{ $subsection optimized-recompile-hook }
|
||||
"Removing a word's optimized definition:"
|
||||
{ $subsection decompile }
|
||||
"Compiling a single quotation:"
|
||||
{ $subsection compile-call }
|
||||
"Higher-level words can be found in " { $link "compilation-units" } "." ;
|
||||
|
||||
ARTICLE: "compiler" "Optimizing compiler"
|
||||
"Factor is a fully compiled language implementation with two distinct compilers:"
|
||||
"Factor includes two compilers which work behind the scenes. Words are always compiled, and the compilers do not have to be invoked explicitly. For the most part, compilation is fully transparent. However, there are a few things worth knowing about the compilation process."
|
||||
$nl
|
||||
"The two compilers differ in the level of analysis they perform:"
|
||||
{ $list
|
||||
{ "The " { $emphasis "non-optimizing quotation compiler" } " compiles quotations to naive machine code very quickly. The non-optimizing quotation compiler is part of the VM." }
|
||||
{ "The " { $emphasis "optimizing word compiler" } " compiles whole words at a time while performing extensive data and control flow analysis. This provides greater performance for generated code, but incurs a much longer compile time. The optimizing compiler is written in Factor." }
|
||||
}
|
||||
"The optimizing compiler only compiles words which have a static stack effect. This means that methods defined on fundamental generic words such as " { $link nth } " should have a static stack effect; for otherwise, most of the system would be compiled with the non-optimizing compiler. See " { $link "inference" } " and " { $link "cookbook-pitfalls" } "."
|
||||
{ $subsection "compiler-usage" }
|
||||
"The optimizing compiler only compiles words which have a static stack effect. This means that methods defined on fundamental generic words such as " { $link nth } " should have a static stack effect. See " { $link "inference" } " and " { $link "cookbook-pitfalls" } "."
|
||||
$nl
|
||||
"The optimizing compiler also trades off compile time for performance of generated code, so loading certain vocabularies might take a while. Saving the image after loading vocabularies can save you a lot of time that you would spend waiting for the same code to load in every coding session; see " { $link "images" } " for information."
|
||||
{ $subsection "compiler-errors" }
|
||||
{ $subsection "hints" } ;
|
||||
{ $subsection "hints" }
|
||||
{ $subsection "compiler-usage" } ;
|
||||
|
||||
ABOUT: "compiler"
|
||||
|
||||
|
@ -44,3 +50,8 @@ HELP: optimized-recompile-hook
|
|||
{ $values { "words" "a sequence of words" } { "alist" "an association list" } }
|
||||
{ $description "Compile a set of words." }
|
||||
{ $notes "This is an internal word, and user code should call " { $link compile } " instead." } ;
|
||||
|
||||
HELP: compile-call
|
||||
{ $values { "quot" quotation } }
|
||||
{ $description "Compiles and runs a quotation." }
|
||||
{ $notes "This word is used by compiler unit tests to test compilation of small pieces of code." } ;
|
||||
|
|
|
@ -1,46 +1,47 @@
|
|||
! Copyright (C) 2004, 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors kernel namespaces arrays sequences io
|
||||
words fry continuations vocabs assocs dlists definitions math
|
||||
graphs generic combinators deques search-deques io
|
||||
stack-checker stack-checker.state stack-checker.inlining
|
||||
compiler.errors compiler.units compiler.tree.builder
|
||||
compiler.tree.optimizer compiler.cfg.builder
|
||||
compiler.cfg.optimizer compiler.cfg.linearization
|
||||
compiler.cfg.two-operand compiler.cfg.linear-scan
|
||||
compiler.cfg.stack-frame compiler.codegen compiler.utilities ;
|
||||
USING: accessors kernel namespaces arrays sequences io words fry
|
||||
continuations vocabs assocs dlists definitions math graphs
|
||||
generic combinators deques search-deques io stack-checker
|
||||
stack-checker.state stack-checker.inlining
|
||||
combinators.short-circuit compiler.errors compiler.units
|
||||
compiler.tree.builder compiler.tree.optimizer
|
||||
compiler.cfg.builder compiler.cfg.optimizer
|
||||
compiler.cfg.linearization compiler.cfg.two-operand
|
||||
compiler.cfg.linear-scan compiler.cfg.stack-frame
|
||||
compiler.codegen compiler.utilities ;
|
||||
IN: compiler
|
||||
|
||||
SYMBOL: compile-queue
|
||||
SYMBOL: compiled
|
||||
|
||||
: queue-compile ( word -- )
|
||||
: queue-compile? ( word -- ? )
|
||||
{
|
||||
{ [ dup "forgotten" word-prop ] [ ] }
|
||||
{ [ dup compiled get key? ] [ ] }
|
||||
{ [ dup inlined-block? ] [ ] }
|
||||
{ [ dup primitive? ] [ ] }
|
||||
[ dup compile-queue get push-front ]
|
||||
} cond drop ;
|
||||
[ "forgotten" word-prop ]
|
||||
[ compiled get key? ]
|
||||
[ inlined-block? ]
|
||||
[ primitive? ]
|
||||
} 1|| not ;
|
||||
|
||||
: queue-compile ( word -- )
|
||||
dup queue-compile? [ compile-queue get push-front ] [ drop ] if ;
|
||||
|
||||
: maybe-compile ( word -- )
|
||||
dup optimized>> [ drop ] [ queue-compile ] if ;
|
||||
|
||||
SYMBOL: +failed+
|
||||
SYMBOLS: +optimized+ +unoptimized+ ;
|
||||
|
||||
: ripple-up ( words -- )
|
||||
dup "compiled-effect" word-prop +failed+ eq?
|
||||
dup "compiled-status" word-prop +unoptimized+ eq?
|
||||
[ usage [ word? ] filter ] [ compiled-usage keys ] if
|
||||
[ queue-compile ] each ;
|
||||
|
||||
: ripple-up? ( word effect -- ? )
|
||||
#! If the word has previously been compiled and had a
|
||||
#! different stack effect, we have to recompile any callers.
|
||||
swap "compiled-effect" word-prop [ = not ] keep and ;
|
||||
: ripple-up? ( word status -- ? )
|
||||
swap "compiled-status" word-prop [ = not ] keep and ;
|
||||
|
||||
: save-effect ( word effect -- )
|
||||
: save-compiled-status ( word status -- )
|
||||
[ dupd ripple-up? [ ripple-up ] [ drop ] if ]
|
||||
[ "compiled-effect" set-word-prop ]
|
||||
[ "compiled-status" set-word-prop ]
|
||||
2bi ;
|
||||
|
||||
: start ( word -- )
|
||||
|
@ -49,18 +50,18 @@ SYMBOL: +failed+
|
|||
H{ } clone generic-dependencies set
|
||||
f swap compiler-error ;
|
||||
|
||||
: fail ( word error -- )
|
||||
: fail ( word error -- * )
|
||||
[ swap compiler-error ]
|
||||
[
|
||||
drop
|
||||
[ compiled-unxref ]
|
||||
[ f swap compiled get set-at ]
|
||||
[ +failed+ save-effect ]
|
||||
[ +unoptimized+ save-compiled-status ]
|
||||
tri
|
||||
] 2bi
|
||||
return ;
|
||||
|
||||
: frontend ( word -- effect nodes )
|
||||
: frontend ( word -- nodes )
|
||||
[ build-tree-from-word ] [ fail ] recover optimize-tree ;
|
||||
|
||||
! Only switch this off for debugging.
|
||||
|
@ -84,8 +85,8 @@ t compile-dependencies? set-global
|
|||
save-asm
|
||||
] each ;
|
||||
|
||||
: finish ( effect word -- )
|
||||
[ swap save-effect ]
|
||||
: finish ( word -- )
|
||||
[ +optimized+ save-compiled-status ]
|
||||
[ compiled-unxref ]
|
||||
[
|
||||
dup crossref?
|
||||
|
@ -112,6 +113,9 @@ t compile-dependencies? set-global
|
|||
: decompile ( word -- )
|
||||
f 2array 1array modify-code-heap ;
|
||||
|
||||
: compile-call ( quot -- )
|
||||
[ dup infer define-temp ] with-compilation-unit execute ;
|
||||
|
||||
: optimized-recompile-hook ( words -- alist )
|
||||
[
|
||||
<hashed-dlist> compile-queue set
|
||||
|
|
|
@ -4,8 +4,8 @@ USING: math kernel layouts system strings ;
|
|||
IN: compiler.constants
|
||||
|
||||
! These constants must match vm/memory.h
|
||||
: card-bits 8 ; inline
|
||||
: deck-bits 18 ; inline
|
||||
CONSTANT: card-bits 8
|
||||
CONSTANT: deck-bits 18
|
||||
: card-mark ( -- n ) HEX: 40 HEX: 80 bitor ; inline
|
||||
|
||||
! These constants must match vm/layouts.h
|
||||
|
@ -26,25 +26,25 @@ IN: compiler.constants
|
|||
: compiled-header-size ( -- n ) 4 bootstrap-cells ; inline
|
||||
|
||||
! Relocation classes
|
||||
: rc-absolute-cell 0 ; inline
|
||||
: rc-absolute 1 ; inline
|
||||
: rc-relative 2 ; inline
|
||||
: rc-absolute-ppc-2/2 3 ; inline
|
||||
: rc-relative-ppc-2 4 ; inline
|
||||
: rc-relative-ppc-3 5 ; inline
|
||||
: rc-relative-arm-3 6 ; inline
|
||||
: rc-indirect-arm 7 ; inline
|
||||
: rc-indirect-arm-pc 8 ; inline
|
||||
CONSTANT: rc-absolute-cell 0
|
||||
CONSTANT: rc-absolute 1
|
||||
CONSTANT: rc-relative 2
|
||||
CONSTANT: rc-absolute-ppc-2/2 3
|
||||
CONSTANT: rc-relative-ppc-2 4
|
||||
CONSTANT: rc-relative-ppc-3 5
|
||||
CONSTANT: rc-relative-arm-3 6
|
||||
CONSTANT: rc-indirect-arm 7
|
||||
CONSTANT: rc-indirect-arm-pc 8
|
||||
|
||||
! Relocation types
|
||||
: rt-primitive 0 ; inline
|
||||
: rt-dlsym 1 ; inline
|
||||
: rt-dispatch 2 ; inline
|
||||
: rt-xt 3 ; inline
|
||||
: rt-here 4 ; inline
|
||||
: rt-label 5 ; inline
|
||||
: rt-immediate 6 ; inline
|
||||
: rt-stack-chain 7 ; inline
|
||||
CONSTANT: rt-primitive 0
|
||||
CONSTANT: rt-dlsym 1
|
||||
CONSTANT: rt-dispatch 2
|
||||
CONSTANT: rt-xt 3
|
||||
CONSTANT: rt-here 4
|
||||
CONSTANT: rt-label 5
|
||||
CONSTANT: rt-immediate 6
|
||||
CONSTANT: rt-stack-chain 7
|
||||
|
||||
: rc-absolute? ( n -- ? )
|
||||
[ rc-absolute-ppc-2/2 = ]
|
||||
|
|
|
@ -51,7 +51,7 @@ unit-test
|
|||
\ foo [ global >n get ndrop ] compile-call
|
||||
] unit-test
|
||||
|
||||
: blech drop ;
|
||||
: blech ( x -- ) drop ;
|
||||
|
||||
[ 3 ]
|
||||
[
|
||||
|
@ -102,7 +102,7 @@ unit-test
|
|||
[ ] [
|
||||
[
|
||||
[ 200 dup [ 200 3array ] curry map drop ] times
|
||||
] [ define-temp ] with-compilation-unit drop
|
||||
] [ (( n -- )) define-temp ] with-compilation-unit drop
|
||||
] unit-test
|
||||
|
||||
! Test how dispatch handles the end of a basic block
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue