Merge branch 'master' of git://factorcode.org/git/factor
commit
f53e9c654c
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008 Slava Pestov, Eduardo Cavazos.
|
! Copyright (C) 2008 Slava Pestov, Eduardo Cavazos.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel sequences combinators parser splitting math
|
USING: kernel sequences combinators parser splitting math
|
||||||
quotations arrays make qualified words ;
|
quotations arrays make words ;
|
||||||
IN: fry
|
IN: fry
|
||||||
|
|
||||||
: _ ( -- * ) "Only valid inside a fry" throw ;
|
: _ ( -- * ) "Only valid inside a fry" throw ;
|
||||||
|
|
|
@ -32,3 +32,14 @@ HELP: RENAME:
|
||||||
"RENAME: + math => -"
|
"RENAME: + math => -"
|
||||||
"2 3 - ! => 5" } } ;
|
"2 3 - ! => 5" } } ;
|
||||||
|
|
||||||
|
ARTICLE: "qualified" "Qualified word lookup"
|
||||||
|
"The " { $vocab-link "qualified" } " vocabulary provides a handful of parsing words which give more control over word lookup than is offered by " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } "."
|
||||||
|
$nl
|
||||||
|
"These words are useful when there is no way to avoid using two vocabularies with identical word names in the same source file."
|
||||||
|
{ $subsection POSTPONE: QUALIFIED: }
|
||||||
|
{ $subsection POSTPONE: QUALIFIED-WITH: }
|
||||||
|
{ $subsection POSTPONE: FROM: }
|
||||||
|
{ $subsection POSTPONE: EXCLUDE: }
|
||||||
|
{ $subsection POSTPONE: RENAME: } ;
|
||||||
|
|
||||||
|
ABOUT: "qualified"
|
||||||
|
|
|
@ -1,24 +1,33 @@
|
||||||
USING: tools.test qualified ;
|
USING: tools.test qualified eval accessors parser ;
|
||||||
IN: foo
|
IN: qualified.tests.foo
|
||||||
: x 1 ;
|
: x 1 ;
|
||||||
IN: bar
|
: y 5 ;
|
||||||
|
IN: qualified.tests.bar
|
||||||
: x 2 ;
|
: x 2 ;
|
||||||
IN: baz
|
: y 4 ;
|
||||||
|
IN: qualified.tests.baz
|
||||||
: x 3 ;
|
: x 3 ;
|
||||||
|
|
||||||
QUALIFIED: foo
|
QUALIFIED: qualified.tests.foo
|
||||||
QUALIFIED: bar
|
QUALIFIED: qualified.tests.bar
|
||||||
[ 1 2 3 ] [ foo:x bar:x x ] unit-test
|
[ 1 2 3 ] [ qualified.tests.foo:x qualified.tests.bar:x x ] unit-test
|
||||||
|
|
||||||
QUALIFIED-WITH: bar p
|
QUALIFIED-WITH: qualified.tests.bar p
|
||||||
[ 2 ] [ p:x ] unit-test
|
[ 2 ] [ p:x ] unit-test
|
||||||
|
|
||||||
RENAME: x baz => y
|
RENAME: x qualified.tests.baz => y
|
||||||
[ 3 ] [ y ] unit-test
|
[ 3 ] [ y ] unit-test
|
||||||
|
|
||||||
FROM: baz => x ;
|
FROM: qualified.tests.baz => x ;
|
||||||
[ 3 ] [ x ] unit-test
|
[ 3 ] [ x ] unit-test
|
||||||
|
[ 3 ] [ y ] unit-test
|
||||||
|
|
||||||
EXCLUDE: bar => x ;
|
EXCLUDE: qualified.tests.bar => x ;
|
||||||
[ 3 ] [ x ] unit-test
|
[ 3 ] [ x ] unit-test
|
||||||
|
[ 4 ] [ y ] unit-test
|
||||||
|
|
||||||
|
[ "USE: qualified IN: qualified.tests FROM: qualified.tests => doesnotexist ;" eval ]
|
||||||
|
[ error>> no-word-error? ] must-fail-with
|
||||||
|
|
||||||
|
[ "USE: qualified IN: qualified.tests RENAME: doesnotexist qualified.tests => blah" eval ]
|
||||||
|
[ error>> no-word-error? ] must-fail-with
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
! Copyright (C) 2007, 2008 Daniel Ehrenberg.
|
! Copyright (C) 2007, 2008 Daniel Ehrenberg.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel sequences assocs hashtables parser lexer
|
USING: kernel sequences assocs hashtables parser lexer
|
||||||
vocabs words namespaces vocabs.loader debugger sets ;
|
vocabs words namespaces vocabs.loader debugger sets fry ;
|
||||||
IN: qualified
|
IN: qualified
|
||||||
|
|
||||||
: define-qualified ( vocab-name prefix-name -- )
|
: define-qualified ( vocab-name prefix-name -- )
|
||||||
[ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
|
[ load-vocab vocab-words ] [ CHAR: : suffix ] bi*
|
||||||
[ -rot >r append r> ] curry assoc-map
|
'[ [ [ _ ] dip append ] dip ] assoc-map
|
||||||
use get push ;
|
use get push ;
|
||||||
|
|
||||||
: QUALIFIED:
|
: QUALIFIED:
|
||||||
|
@ -19,27 +19,27 @@ IN: qualified
|
||||||
|
|
||||||
: expect=> ( -- ) scan "=>" assert= ;
|
: expect=> ( -- ) scan "=>" assert= ;
|
||||||
|
|
||||||
: partial-vocab ( words name -- assoc )
|
: partial-vocab ( words vocab -- assoc )
|
||||||
dupd [
|
'[ dup _ lookup [ no-word-error ] unless* ]
|
||||||
lookup [ "No such word: " swap append throw ] unless*
|
{ } map>assoc ;
|
||||||
] curry map zip ;
|
|
||||||
|
|
||||||
: partial-vocab-ignoring ( words name -- assoc )
|
|
||||||
[ load-vocab vocab-words keys swap diff ] keep partial-vocab ;
|
|
||||||
|
|
||||||
: EXCLUDE:
|
|
||||||
#! Syntax: EXCLUDE: vocab => words ... ;
|
|
||||||
scan expect=>
|
|
||||||
";" parse-tokens swap partial-vocab-ignoring use get push ; parsing
|
|
||||||
|
|
||||||
: FROM:
|
: FROM:
|
||||||
#! Syntax: FROM: vocab => words... ;
|
#! Syntax: FROM: vocab => words... ;
|
||||||
scan dup load-vocab drop expect=>
|
scan dup load-vocab drop expect=>
|
||||||
";" parse-tokens swap partial-vocab use get push ; parsing
|
";" parse-tokens swap partial-vocab use get push ; parsing
|
||||||
|
|
||||||
|
: partial-vocab-excluding ( words vocab -- assoc )
|
||||||
|
[ load-vocab vocab-words keys swap diff ] keep partial-vocab ;
|
||||||
|
|
||||||
|
: EXCLUDE:
|
||||||
|
#! Syntax: EXCLUDE: vocab => words ... ;
|
||||||
|
scan expect=>
|
||||||
|
";" parse-tokens swap partial-vocab-excluding use get push ; parsing
|
||||||
|
|
||||||
: RENAME:
|
: RENAME:
|
||||||
#! Syntax: RENAME: word vocab => newname
|
#! Syntax: RENAME: word vocab => newname
|
||||||
scan scan dup load-vocab drop lookup [ "No such word" throw ] unless*
|
scan scan dup load-vocab drop
|
||||||
|
dupd lookup [ ] [ no-word-error ] ?if
|
||||||
expect=>
|
expect=>
|
||||||
scan associate use get push ; parsing
|
scan associate use get push ; parsing
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ M: list focusable-child* drop t ;
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: select-gadget ( gadget list -- )
|
: select-gadget ( gadget list -- )
|
||||||
swap over children>> index
|
tuck children>> index
|
||||||
[ swap select-index ] [ drop ] if* ;
|
[ swap select-index ] [ drop ] if* ;
|
||||||
|
|
||||||
: clamp-loc ( point max -- point )
|
: clamp-loc ( point max -- point )
|
||||||
|
|
|
@ -41,7 +41,7 @@ scroller H{
|
||||||
dup model>> dependencies>> first <x-slider> >>x dup x>> @bottom grid-add
|
dup model>> dependencies>> first <x-slider> >>x dup x>> @bottom grid-add
|
||||||
dup model>> dependencies>> second <y-slider> >>y dup y>> @right grid-add
|
dup model>> dependencies>> second <y-slider> >>y dup y>> @right grid-add
|
||||||
|
|
||||||
swap over model>> <viewport> >>viewport
|
tuck model>> <viewport> >>viewport
|
||||||
dup viewport>> @center grid-add ;
|
dup viewport>> @center grid-add ;
|
||||||
|
|
||||||
: <scroller> ( gadget -- scroller ) scroller new-scroller ;
|
: <scroller> ( gadget -- scroller ) scroller new-scroller ;
|
||||||
|
|
|
@ -69,7 +69,7 @@ $nl
|
||||||
{ $subsection POSTPONE: PRIVATE> }
|
{ $subsection POSTPONE: PRIVATE> }
|
||||||
{ $subsection "vocabulary-search-errors" }
|
{ $subsection "vocabulary-search-errors" }
|
||||||
{ $subsection "vocabulary-search-shadow" }
|
{ $subsection "vocabulary-search-shadow" }
|
||||||
{ $see-also "words" } ;
|
{ $see-also "words" "qualified" } ;
|
||||||
|
|
||||||
ARTICLE: "reading-ahead" "Reading ahead"
|
ARTICLE: "reading-ahead" "Reading ahead"
|
||||||
"Parsing words can consume input:"
|
"Parsing words can consume input:"
|
||||||
|
|
|
@ -71,10 +71,10 @@ ERROR: no-current-vocab ;
|
||||||
] keep
|
] keep
|
||||||
] { } map>assoc ;
|
] { } map>assoc ;
|
||||||
|
|
||||||
TUPLE: no-word-error name ;
|
ERROR: no-word-error name ;
|
||||||
|
|
||||||
: no-word ( name -- newword )
|
: no-word ( name -- newword )
|
||||||
dup no-word-error boa
|
dup \ no-word-error boa
|
||||||
swap words-named [ forward-reference? not ] filter
|
swap words-named [ forward-reference? not ] filter
|
||||||
word-restarts throw-restarts
|
word-restarts throw-restarts
|
||||||
dup vocabulary>> (use+) ;
|
dup vocabulary>> (use+) ;
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
|
! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel namespaces continuations debugger sequences fry
|
USING: kernel namespaces continuations debugger sequences fry
|
||||||
io.files io.launcher mason.common mason.platform
|
io.files io.launcher bootstrap.image qualified mason.common
|
||||||
mason.config ;
|
mason.config ;
|
||||||
|
FROM: mason.config => target-os ;
|
||||||
IN: mason.release.tidy
|
IN: mason.release.tidy
|
||||||
|
|
||||||
: common-files ( -- seq )
|
: common-files ( -- seq )
|
||||||
|
images [ boot-image-name ] map
|
||||||
{
|
{
|
||||||
"boot.x86.32.image"
|
|
||||||
"boot.x86.64.image"
|
|
||||||
"boot.macosx-ppc.image"
|
|
||||||
"boot.linux-ppc.image"
|
|
||||||
"vm"
|
"vm"
|
||||||
"temp"
|
"temp"
|
||||||
"logs"
|
"logs"
|
||||||
|
@ -20,7 +18,8 @@ IN: mason.release.tidy
|
||||||
"unmaintained"
|
"unmaintained"
|
||||||
"unfinished"
|
"unfinished"
|
||||||
"build-support"
|
"build-support"
|
||||||
} ;
|
}
|
||||||
|
append ;
|
||||||
|
|
||||||
: remove-common-files ( -- )
|
: remove-common-files ( -- )
|
||||||
common-files [ delete-tree ] each ;
|
common-files [ delete-tree ] each ;
|
||||||
|
|
|
@ -10,14 +10,18 @@ and the callstack top is passed in EDX */
|
||||||
#define DS_REG %esi
|
#define DS_REG %esi
|
||||||
#define RETURN_REG %eax
|
#define RETURN_REG %eax
|
||||||
|
|
||||||
|
#define NV_TEMP_REG %rbx
|
||||||
|
|
||||||
#define CELL_SIZE 4
|
#define CELL_SIZE 4
|
||||||
#define STACK_PADDING 12
|
#define STACK_PADDING 12
|
||||||
|
|
||||||
#define PUSH_NONVOLATILE \
|
#define PUSH_NONVOLATILE \
|
||||||
push %ebx ; \
|
push %ebx ; \
|
||||||
|
push %ebp ; \
|
||||||
push %ebp
|
push %ebp
|
||||||
|
|
||||||
#define POP_NONVOLATILE \
|
#define POP_NONVOLATILE \
|
||||||
|
pop %ebp ; \
|
||||||
pop %ebp ; \
|
pop %ebp ; \
|
||||||
pop %ebx
|
pop %ebx
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#define CELL_SIZE 8
|
#define CELL_SIZE 8
|
||||||
#define STACK_PADDING 56
|
#define STACK_PADDING 56
|
||||||
|
|
||||||
|
#define NV_TEMP_REG %rbp
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
|
|
||||||
#define ARG0 %rcx
|
#define ARG0 %rcx
|
||||||
|
@ -20,9 +22,11 @@
|
||||||
push %rdi ; \
|
push %rdi ; \
|
||||||
push %rsi ; \
|
push %rsi ; \
|
||||||
push %rbx ; \
|
push %rbx ; \
|
||||||
|
push %rbp ; \
|
||||||
push %rbp
|
push %rbp
|
||||||
|
|
||||||
#define POP_NONVOLATILE \
|
#define POP_NONVOLATILE \
|
||||||
|
pop %rbp ; \
|
||||||
pop %rbp ; \
|
pop %rbp ; \
|
||||||
pop %rbx ; \
|
pop %rbx ; \
|
||||||
pop %rsi ; \
|
pop %rsi ; \
|
||||||
|
@ -41,9 +45,11 @@
|
||||||
push %rbx ; \
|
push %rbx ; \
|
||||||
push %rbp ; \
|
push %rbp ; \
|
||||||
push %r12 ; \
|
push %r12 ; \
|
||||||
|
push %r13 ; \
|
||||||
push %r13
|
push %r13
|
||||||
|
|
||||||
#define POP_NONVOLATILE \
|
#define POP_NONVOLATILE \
|
||||||
|
pop %r13 ; \
|
||||||
pop %r13 ; \
|
pop %r13 ; \
|
||||||
pop %r12 ; \
|
pop %r12 ; \
|
||||||
pop %rbp ; \
|
pop %rbp ; \
|
||||||
|
|
17
vm/cpu-x86.S
17
vm/cpu-x86.S
|
@ -1,20 +1,21 @@
|
||||||
DEF(F_FASTCALL void,c_to_factor,(CELL quot)):
|
DEF(F_FASTCALL void,c_to_factor,(CELL quot)):
|
||||||
PUSH_NONVOLATILE
|
PUSH_NONVOLATILE
|
||||||
push ARG0
|
mov ARG0,NV_TEMP_REG
|
||||||
|
|
||||||
/* Save stack pointer */
|
|
||||||
lea -CELL_SIZE(STACK_REG),ARG0
|
|
||||||
|
|
||||||
/* Create register shadow area for Win64 */
|
/* Create register shadow area for Win64 */
|
||||||
sub $32,STACK_REG
|
sub $32,STACK_REG
|
||||||
|
|
||||||
|
/* Save stack pointer */
|
||||||
|
lea -CELL_SIZE(STACK_REG),ARG0
|
||||||
call MANGLE(save_callstack_bottom)
|
call MANGLE(save_callstack_bottom)
|
||||||
add $32,STACK_REG
|
|
||||||
|
|
||||||
/* Call quot-xt */
|
/* Call quot-xt */
|
||||||
mov (STACK_REG),ARG0
|
mov NV_TEMP_REG,ARG0
|
||||||
call *QUOT_XT_OFFSET(ARG0)
|
call *QUOT_XT_OFFSET(ARG0)
|
||||||
|
|
||||||
pop ARG0
|
/* Tear down register shadow area */
|
||||||
|
add $32,STACK_REG
|
||||||
|
|
||||||
POP_NONVOLATILE
|
POP_NONVOLATILE
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue