parent
6b6af27dfa
commit
30b75a797a
|
@ -54,7 +54,7 @@ TUPLE: library path abi dll ;
|
||||||
: library ( name -- library ) libraries get at ;
|
: library ( name -- library ) libraries get at ;
|
||||||
|
|
||||||
: <library> ( path abi -- library )
|
: <library> ( path abi -- library )
|
||||||
over dup [ dlopen ] when \ library construct-boa ;
|
over dup [ dlopen ] when \ library boa ;
|
||||||
|
|
||||||
: load-library ( name -- dll )
|
: load-library ( name -- dll )
|
||||||
library dup [ library-dll ] when ;
|
library dup [ library-dll ] when ;
|
||||||
|
|
|
@ -19,7 +19,7 @@ getter setter
|
||||||
reg-class size align stack-align? ;
|
reg-class size align stack-align? ;
|
||||||
|
|
||||||
: construct-c-type ( class -- type )
|
: construct-c-type ( class -- type )
|
||||||
construct-empty
|
new
|
||||||
int-regs >>reg-class ;
|
int-regs >>reg-class ;
|
||||||
|
|
||||||
: <c-type> ( -- type )
|
: <c-type> ( -- type )
|
||||||
|
|
|
@ -220,7 +220,7 @@ M: no-such-library compiler-error-type
|
||||||
drop +linkage+ ;
|
drop +linkage+ ;
|
||||||
|
|
||||||
: no-such-library ( name -- )
|
: no-such-library ( name -- )
|
||||||
\ no-such-library construct-boa
|
\ no-such-library boa
|
||||||
compiling-word get compiler-error ;
|
compiling-word get compiler-error ;
|
||||||
|
|
||||||
TUPLE: no-such-symbol name ;
|
TUPLE: no-such-symbol name ;
|
||||||
|
@ -232,7 +232,7 @@ M: no-such-symbol compiler-error-type
|
||||||
drop +linkage+ ;
|
drop +linkage+ ;
|
||||||
|
|
||||||
: no-such-symbol ( name -- )
|
: no-such-symbol ( name -- )
|
||||||
\ no-such-symbol construct-boa
|
\ no-such-symbol boa
|
||||||
compiling-word get compiler-error ;
|
compiling-word get compiler-error ;
|
||||||
|
|
||||||
: check-dlsym ( symbols dll -- )
|
: check-dlsym ( symbols dll -- )
|
||||||
|
@ -251,7 +251,7 @@ M: no-such-symbol compiler-error-type
|
||||||
\ alien-invoke [
|
\ alien-invoke [
|
||||||
! Four literals
|
! Four literals
|
||||||
4 ensure-values
|
4 ensure-values
|
||||||
#alien-invoke construct-empty
|
#alien-invoke new
|
||||||
! Compile-time parameters
|
! Compile-time parameters
|
||||||
pop-parameters >>parameters
|
pop-parameters >>parameters
|
||||||
pop-literal nip >>function
|
pop-literal nip >>function
|
||||||
|
@ -288,7 +288,7 @@ M: alien-indirect-error summary
|
||||||
! Three literals and function pointer
|
! Three literals and function pointer
|
||||||
4 ensure-values
|
4 ensure-values
|
||||||
4 reify-curries
|
4 reify-curries
|
||||||
#alien-indirect construct-empty
|
#alien-indirect new
|
||||||
! Compile-time parameters
|
! Compile-time parameters
|
||||||
pop-literal nip >>abi
|
pop-literal nip >>abi
|
||||||
pop-parameters >>parameters
|
pop-parameters >>parameters
|
||||||
|
@ -335,7 +335,7 @@ M: alien-callback-error summary
|
||||||
|
|
||||||
\ alien-callback [
|
\ alien-callback [
|
||||||
4 ensure-values
|
4 ensure-values
|
||||||
#alien-callback construct-empty dup node,
|
#alien-callback new dup node,
|
||||||
pop-literal nip >>quot
|
pop-literal nip >>quot
|
||||||
pop-literal nip >>abi
|
pop-literal nip >>abi
|
||||||
pop-parameters >>parameters
|
pop-parameters >>parameters
|
||||||
|
@ -381,7 +381,7 @@ TUPLE: callback-context ;
|
||||||
: wrap-callback-quot ( node -- quot )
|
: wrap-callback-quot ( node -- quot )
|
||||||
[
|
[
|
||||||
[ quot>> ] [ prepare-callback-return ] bi append ,
|
[ quot>> ] [ prepare-callback-return ] bi append ,
|
||||||
[ callback-context construct-empty do-callback ] %
|
[ callback-context new do-callback ] %
|
||||||
] [ ] make ;
|
] [ ] make ;
|
||||||
|
|
||||||
: %unnest-stacks ( -- ) "unnest_stacks" f %alien-invoke ;
|
: %unnest-stacks ( -- ) "unnest_stacks" f %alien-invoke ;
|
||||||
|
|
|
@ -68,7 +68,7 @@ M: struct-type stack-size
|
||||||
|
|
||||||
: (define-struct) ( name vocab size align fields -- )
|
: (define-struct) ( name vocab size align fields -- )
|
||||||
>r [ align ] keep r>
|
>r [ align ] keep r>
|
||||||
struct-type construct-boa
|
struct-type boa
|
||||||
-rot define-c-type ;
|
-rot define-c-type ;
|
||||||
|
|
||||||
: make-field ( struct-name vocab type field-name -- spec )
|
: make-field ( struct-name vocab type field-name -- spec )
|
||||||
|
|
|
@ -7,7 +7,7 @@ IN: bit-vectors
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: bit-array>vector ( bit-array length -- bit-vector )
|
: bit-array>vector ( bit-array length -- bit-vector )
|
||||||
bit-vector construct-boa ; inline
|
bit-vector boa ; inline
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ IN: boxes
|
||||||
|
|
||||||
TUPLE: box value full? ;
|
TUPLE: box value full? ;
|
||||||
|
|
||||||
: <box> ( -- box ) box construct-empty ;
|
: <box> ( -- box ) box new ;
|
||||||
|
|
||||||
: >box ( value box -- )
|
: >box ( value box -- )
|
||||||
dup box-full? [ "Box already has a value" throw ] when
|
dup box-full? [ "Box already has a value" throw ] when
|
||||||
|
|
|
@ -7,7 +7,7 @@ IN: byte-vectors
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: byte-array>vector ( byte-array length -- byte-vector )
|
: byte-array>vector ( byte-array length -- byte-vector )
|
||||||
byte-vector construct-boa ; inline
|
byte-vector boa ; inline
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ TUPLE: check-mixin-class mixin ;
|
||||||
|
|
||||||
: check-mixin-class ( mixin -- mixin )
|
: check-mixin-class ( mixin -- mixin )
|
||||||
dup mixin-class? [
|
dup mixin-class? [
|
||||||
\ check-mixin-class construct-boa throw
|
\ check-mixin-class boa throw
|
||||||
] unless ;
|
] unless ;
|
||||||
|
|
||||||
: if-mixin-member? ( class mixin true false -- )
|
: if-mixin-member? ( class mixin true false -- )
|
||||||
|
|
|
@ -4,7 +4,7 @@ generic.standard sequences definitions compiler.units ;
|
||||||
IN: classes.tuple
|
IN: classes.tuple
|
||||||
|
|
||||||
ARTICLE: "parametrized-constructors" "Parameterized constructors"
|
ARTICLE: "parametrized-constructors" "Parameterized constructors"
|
||||||
"A " { $emphasis "parametrized constructor" } " is a word which directly or indirectly calls " { $link construct-empty } " or " { $link construct-boa } ", but instead of passing a literal class symbol, it takes the class symbol as an input from the stack."
|
"A " { $emphasis "parametrized constructor" } " is a word which directly or indirectly calls " { $link new } " or " { $link boa } ", but instead of passing a literal class symbol, it takes the class symbol as an input from the stack."
|
||||||
$nl
|
$nl
|
||||||
"Parametrized constructors are useful in many situations, in particular with subclassing. For example, consider the following code:"
|
"Parametrized constructors are useful in many situations, in particular with subclassing. For example, consider the following code:"
|
||||||
{ $code
|
{ $code
|
||||||
|
@ -14,14 +14,14 @@ $nl
|
||||||
""
|
""
|
||||||
"TUPLE: car < vehicle engine ;"
|
"TUPLE: car < vehicle engine ;"
|
||||||
": <car> ( max-speed engine -- car )"
|
": <car> ( max-speed engine -- car )"
|
||||||
" car construct-empty"
|
" car new"
|
||||||
" V{ } clone >>occupants"
|
" V{ } clone >>occupants"
|
||||||
" swap >>engine"
|
" swap >>engine"
|
||||||
" swap >>max-speed ;"
|
" swap >>max-speed ;"
|
||||||
""
|
""
|
||||||
"TUPLE: aeroplane < vehicle max-altitude ;"
|
"TUPLE: aeroplane < vehicle max-altitude ;"
|
||||||
": <aeroplane> ( max-speed max-altitude -- aeroplane )"
|
": <aeroplane> ( max-speed max-altitude -- aeroplane )"
|
||||||
" aeroplane construct-empty"
|
" aeroplane new"
|
||||||
" V{ } clone >>occupants"
|
" V{ } clone >>occupants"
|
||||||
" swap >>max-altitude"
|
" swap >>max-altitude"
|
||||||
" swap >>max-speed ;"
|
" swap >>max-speed ;"
|
||||||
|
@ -33,7 +33,7 @@ $nl
|
||||||
": add-occupant ( person vehicle -- ) occupants>> push ;"
|
": add-occupant ( person vehicle -- ) occupants>> push ;"
|
||||||
""
|
""
|
||||||
": construct-vehicle ( class -- vehicle )"
|
": construct-vehicle ( class -- vehicle )"
|
||||||
" construct-empty"
|
" new"
|
||||||
" V{ } clone >>occupants ;"
|
" V{ } clone >>occupants ;"
|
||||||
""
|
""
|
||||||
"TUPLE: car < vehicle engine ;"
|
"TUPLE: car < vehicle engine ;"
|
||||||
|
@ -52,8 +52,8 @@ $nl
|
||||||
|
|
||||||
ARTICLE: "tuple-constructors" "Tuple constructors"
|
ARTICLE: "tuple-constructors" "Tuple constructors"
|
||||||
"Tuples are created by calling one of two constructor primitives:"
|
"Tuples are created by calling one of two constructor primitives:"
|
||||||
{ $subsection construct-empty }
|
{ $subsection new }
|
||||||
{ $subsection construct-boa }
|
{ $subsection boa }
|
||||||
"A shortcut for defining BOA constructors:"
|
"A shortcut for defining BOA constructors:"
|
||||||
{ $subsection POSTPONE: C: }
|
{ $subsection POSTPONE: C: }
|
||||||
"By convention, construction logic is encapsulated in a word named after the tuple class surrounded in angle brackets; for example, the constructor word for a " { $snippet "point" } " class might be named " { $snippet "<point>" } "."
|
"By convention, construction logic is encapsulated in a word named after the tuple class surrounded in angle brackets; for example, the constructor word for a " { $snippet "point" } " class might be named " { $snippet "<point>" } "."
|
||||||
|
@ -65,11 +65,11 @@ $nl
|
||||||
"TUPLE: color red green blue alpha ;"
|
"TUPLE: color red green blue alpha ;"
|
||||||
""
|
""
|
||||||
"C: <rgba> rgba"
|
"C: <rgba> rgba"
|
||||||
": <rgba> color construct-boa ; ! identical to above"
|
": <rgba> color boa ; ! identical to above"
|
||||||
""
|
""
|
||||||
": <rgb> f <rgba> ;"
|
": <rgb> f <rgba> ;"
|
||||||
""
|
""
|
||||||
": <color> construct-empty ;"
|
": <color> new ;"
|
||||||
": <color> f f f f <rgba> ; ! identical to above"
|
": <color> f f f f <rgba> ; ! identical to above"
|
||||||
}
|
}
|
||||||
{ $subsection "parametrized-constructors" } ;
|
{ $subsection "parametrized-constructors" } ;
|
||||||
|
@ -129,7 +129,7 @@ $nl
|
||||||
$nl
|
$nl
|
||||||
"The second is to use ad-hoc slot polymorphism. If two classes define a slot with the same name, then code which uses " { $link "accessors" } " can operate on instances of both objects, assuming the values stored in that slot implement a common protocol. This allows code to be shared without creating contrieved relationships between classes."
|
"The second is to use ad-hoc slot polymorphism. If two classes define a slot with the same name, then code which uses " { $link "accessors" } " can operate on instances of both objects, assuming the values stored in that slot implement a common protocol. This allows code to be shared without creating contrieved relationships between classes."
|
||||||
{ $heading "Anti-pattern #3: subclassing to override a method definition" }
|
{ $heading "Anti-pattern #3: subclassing to override a method definition" }
|
||||||
"While method overriding is a very powerful tool, improper use can cause tight coupling of code and lead to difficulty in testing and refactoring. Subclassing should not be used as a means of ``monkey patching'' methods to fix bugs and add features. Only subclass from classes which were designed to be inherited from, and when writing classes of your own which are intended to be subclassed, clearly document that subclasses may and may not do. This includes construction policy; document whether subclasses should use " { $link construct-empty } ", " { $link construct-boa } ", or a custom parametrized constructor."
|
"While method overriding is a very powerful tool, improper use can cause tight coupling of code and lead to difficulty in testing and refactoring. Subclassing should not be used as a means of ``monkey patching'' methods to fix bugs and add features. Only subclass from classes which were designed to be inherited from, and when writing classes of your own which are intended to be subclassed, clearly document that subclasses may and may not do. This includes construction policy; document whether subclasses should use " { $link new } ", " { $link boa } ", or a custom parametrized constructor."
|
||||||
{ $see-also "parametrized-constructors" } ;
|
{ $see-also "parametrized-constructors" } ;
|
||||||
|
|
||||||
ARTICLE: "tuple-subclassing" "Tuple subclassing"
|
ARTICLE: "tuple-subclassing" "Tuple subclassing"
|
||||||
|
@ -164,11 +164,11 @@ ARTICLE: "tuple-examples" "Tuple examples"
|
||||||
}
|
}
|
||||||
"We can define a constructor which makes an empty employee:"
|
"We can define a constructor which makes an empty employee:"
|
||||||
{ $code ": <employee> ( -- employee )"
|
{ $code ": <employee> ( -- employee )"
|
||||||
" employee construct-empty ;" }
|
" employee new ;" }
|
||||||
"Or we may wish the default constructor to always give employees a starting salary:"
|
"Or we may wish the default constructor to always give employees a starting salary:"
|
||||||
{ $code
|
{ $code
|
||||||
": <employee> ( -- employee )"
|
": <employee> ( -- employee )"
|
||||||
" employee construct-empty"
|
" employee new"
|
||||||
" 40000 >>salary ;"
|
" 40000 >>salary ;"
|
||||||
}
|
}
|
||||||
"We can define more refined constructors:"
|
"We can define more refined constructors:"
|
||||||
|
@ -178,7 +178,7 @@ ARTICLE: "tuple-examples" "Tuple examples"
|
||||||
"An alternative strategy is to define the most general BOA constructor first:"
|
"An alternative strategy is to define the most general BOA constructor first:"
|
||||||
{ $code
|
{ $code
|
||||||
": <employee> ( name position -- person )"
|
": <employee> ( name position -- person )"
|
||||||
" 40000 employee construct-boa ;"
|
" 40000 employee boa ;"
|
||||||
}
|
}
|
||||||
"Now we can define more specific constructors:"
|
"Now we can define more specific constructors:"
|
||||||
{ $code
|
{ $code
|
||||||
|
@ -191,7 +191,7 @@ ARTICLE: "tuple-examples" "Tuple examples"
|
||||||
"SYMBOL: checks"
|
"SYMBOL: checks"
|
||||||
""
|
""
|
||||||
": <check> ( to amount -- check )"
|
": <check> ( to amount -- check )"
|
||||||
" checks counter check construct-boa ;"
|
" checks counter check boa ;"
|
||||||
""
|
""
|
||||||
": biweekly-paycheck ( employee -- check )"
|
": biweekly-paycheck ( employee -- check )"
|
||||||
" dup name>> swap salary>> 26 / <check> ;"
|
" dup name>> swap salary>> 26 / <check> ;"
|
||||||
|
@ -326,20 +326,20 @@ HELP: tuple>array ( tuple -- array )
|
||||||
|
|
||||||
HELP: <tuple> ( layout -- tuple )
|
HELP: <tuple> ( layout -- tuple )
|
||||||
{ $values { "layout" tuple-layout } { "tuple" tuple } }
|
{ $values { "layout" tuple-layout } { "tuple" tuple } }
|
||||||
{ $description "Low-level tuple constructor. User code should never call this directly, and instead use " { $link construct-empty } "." } ;
|
{ $description "Low-level tuple constructor. User code should never call this directly, and instead use " { $link new } "." } ;
|
||||||
|
|
||||||
HELP: <tuple-boa> ( ... layout -- tuple )
|
HELP: <tuple-boa> ( ... layout -- tuple )
|
||||||
{ $values { "..." "values" } { "layout" tuple-layout } { "tuple" tuple } }
|
{ $values { "..." "values" } { "layout" tuple-layout } { "tuple" tuple } }
|
||||||
{ $description "Low-level tuple constructor. User code should never call this directly, and instead use " { $link construct-boa } "." } ;
|
{ $description "Low-level tuple constructor. User code should never call this directly, and instead use " { $link boa } "." } ;
|
||||||
|
|
||||||
HELP: construct-empty
|
HELP: new
|
||||||
{ $values { "class" tuple-class } { "tuple" tuple } }
|
{ $values { "class" tuple-class } { "tuple" tuple } }
|
||||||
{ $description "Creates a new instance of " { $snippet "class" } " with all slots initially set to " { $link f } "." }
|
{ $description "Creates a new instance of " { $snippet "class" } " with all slots initially set to " { $link f } "." }
|
||||||
{ $examples
|
{ $examples
|
||||||
{ $example
|
{ $example
|
||||||
"USING: kernel prettyprint ;"
|
"USING: kernel prettyprint ;"
|
||||||
"TUPLE: employee number name department ;"
|
"TUPLE: employee number name department ;"
|
||||||
"employee construct-empty ."
|
"employee new ."
|
||||||
"T{ employee f f f f }"
|
"T{ employee f f f f }"
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
@ -361,12 +361,12 @@ HELP: construct
|
||||||
" color construct ;"
|
" color construct ;"
|
||||||
}
|
}
|
||||||
"The last definition is actually equivalent to the following:"
|
"The last definition is actually equivalent to the following:"
|
||||||
{ $code ": <rgba> ( r g b a -- color ) rgba construct-boa ;" }
|
{ $code ": <rgba> ( r g b a -- color ) rgba boa ;" }
|
||||||
"Which can be abbreviated further:"
|
"Which can be abbreviated further:"
|
||||||
{ $code "C: <rgba> color" }
|
{ $code "C: <rgba> color" }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
HELP: construct-boa
|
HELP: boa
|
||||||
{ $values { "..." "slot values" } { "class" tuple-class } { "tuple" tuple } }
|
{ $values { "..." "slot values" } { "class" tuple-class } { "tuple" tuple } }
|
||||||
{ $description "Creates a new instance of " { $snippet "class" } " and fill in the slots from the stack, with the top-most stack element being stored in the right-most slot." }
|
{ $description "Creates a new instance of " { $snippet "class" } " and fill in the slots from the stack, with the top-most stack element being stored in the right-most slot." }
|
||||||
{ $notes "The " { $snippet "-boa" } " suffix is shorthand for ``by order of arguments'', and ``BOA constructor'' is a pun on ``boa constrictor''." } ;
|
{ $notes "The name " { $snippet "boa" } " is shorthand for ``by order of arguments'', and ``BOA constructor'' is a pun on ``boa constrictor''." } ;
|
||||||
|
|
|
@ -7,7 +7,7 @@ calendar prettyprint io.streams.string splitting inspector ;
|
||||||
IN: classes.tuple.tests
|
IN: classes.tuple.tests
|
||||||
|
|
||||||
TUPLE: rect x y w h ;
|
TUPLE: rect x y w h ;
|
||||||
: <rect> rect construct-boa ;
|
: <rect> rect boa ;
|
||||||
|
|
||||||
: move ( x rect -- rect )
|
: move ( x rect -- rect )
|
||||||
[ + ] change-x ;
|
[ + ] change-x ;
|
||||||
|
@ -198,8 +198,8 @@ SYMBOL: not-a-tuple-class
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! Missing check
|
! Missing check
|
||||||
[ not-a-tuple-class construct-boa ] must-fail
|
[ not-a-tuple-class boa ] must-fail
|
||||||
[ not-a-tuple-class construct-empty ] must-fail
|
[ not-a-tuple-class new ] must-fail
|
||||||
|
|
||||||
TUPLE: erg's-reshape-problem a b c d ;
|
TUPLE: erg's-reshape-problem a b c d ;
|
||||||
|
|
||||||
|
@ -207,8 +207,8 @@ C: <erg's-reshape-problem> erg's-reshape-problem
|
||||||
|
|
||||||
! We want to make sure constructors are recompiled when
|
! We want to make sure constructors are recompiled when
|
||||||
! tuples are reshaped
|
! tuples are reshaped
|
||||||
: cons-test-1 \ erg's-reshape-problem construct-empty ;
|
: cons-test-1 \ erg's-reshape-problem new ;
|
||||||
: cons-test-2 \ erg's-reshape-problem construct-boa ;
|
: cons-test-2 \ erg's-reshape-problem boa ;
|
||||||
|
|
||||||
"IN: classes.tuple.tests TUPLE: erg's-reshape-problem a b c d e f ;" eval
|
"IN: classes.tuple.tests TUPLE: erg's-reshape-problem a b c d e f ;" eval
|
||||||
|
|
||||||
|
|
|
@ -199,7 +199,7 @@ M: tuple-class define-tuple-class
|
||||||
|
|
||||||
: define-error-class ( class superclass slots -- )
|
: define-error-class ( class superclass slots -- )
|
||||||
[ define-tuple-class ] [ 2drop ] 3bi
|
[ define-tuple-class ] [ 2drop ] 3bi
|
||||||
dup [ construct-boa throw ] curry define ;
|
dup [ boa throw ] curry define ;
|
||||||
|
|
||||||
M: tuple-class reset-class
|
M: tuple-class reset-class
|
||||||
[
|
[
|
||||||
|
|
|
@ -4,16 +4,16 @@ USING: kernel tools.test compiler.units ;
|
||||||
TUPLE: color red green blue ;
|
TUPLE: color red green blue ;
|
||||||
|
|
||||||
[ T{ color f 1 2 3 } ]
|
[ T{ color f 1 2 3 } ]
|
||||||
[ 1 2 3 [ color construct-boa ] compile-call ] unit-test
|
[ 1 2 3 [ color boa ] compile-call ] unit-test
|
||||||
|
|
||||||
[ 1 3 ] [
|
[ 1 3 ] [
|
||||||
1 2 3 color construct-boa
|
1 2 3 color boa
|
||||||
[ { color-red color-blue } get-slots ] compile-call
|
[ { color-red color-blue } get-slots ] compile-call
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
[ T{ color f 10 2 20 } ] [
|
[ T{ color f 10 2 20 } ] [
|
||||||
10 20
|
10 20
|
||||||
1 2 3 color construct-boa [
|
1 2 3 color boa [
|
||||||
[
|
[
|
||||||
{ set-color-red set-color-blue } set-slots
|
{ set-color-red set-color-blue } set-slots
|
||||||
] compile-call
|
] compile-call
|
||||||
|
@ -21,4 +21,4 @@ TUPLE: color red green blue ;
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
[ T{ color f f f f } ]
|
[ T{ color f f f f } ]
|
||||||
[ [ color construct-empty ] compile-call ] unit-test
|
[ [ color new ] compile-call ] unit-test
|
||||||
|
|
|
@ -10,7 +10,7 @@ SYMBOL: new-definitions
|
||||||
TUPLE: redefine-error def ;
|
TUPLE: redefine-error def ;
|
||||||
|
|
||||||
: redefine-error ( definition -- )
|
: redefine-error ( definition -- )
|
||||||
\ redefine-error construct-boa
|
\ redefine-error boa
|
||||||
{ { "Continue" t } } throw-restarts drop ;
|
{ { "Continue" t } } throw-restarts drop ;
|
||||||
|
|
||||||
: add-once ( key assoc -- )
|
: add-once ( key assoc -- )
|
||||||
|
|
|
@ -104,7 +104,7 @@ M: indirect extended? indirect-base extended? ;
|
||||||
canonicalize-ESP ;
|
canonicalize-ESP ;
|
||||||
|
|
||||||
: <indirect> ( base index scale displacement -- indirect )
|
: <indirect> ( base index scale displacement -- indirect )
|
||||||
indirect construct-boa dup canonicalize ;
|
indirect boa dup canonicalize ;
|
||||||
|
|
||||||
: reg-code "register" word-prop 7 bitand ;
|
: reg-code "register" word-prop 7 bitand ;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ IN: dlists
|
||||||
TUPLE: dlist front back length ;
|
TUPLE: dlist front back length ;
|
||||||
|
|
||||||
: <dlist> ( -- obj )
|
: <dlist> ( -- obj )
|
||||||
dlist construct-empty
|
dlist new
|
||||||
0 >>length ;
|
0 >>length ;
|
||||||
|
|
||||||
: dlist-empty? ( dlist -- ? ) front>> not ;
|
: dlist-empty? ( dlist -- ? ) front>> not ;
|
||||||
|
|
|
@ -8,7 +8,7 @@ TUPLE: effect in out terminated? ;
|
||||||
|
|
||||||
: <effect> ( in out -- effect )
|
: <effect> ( in out -- effect )
|
||||||
dup { "*" } sequence= [ drop { } t ] [ f ] if
|
dup { "*" } sequence= [ drop { } t ] [ f ] if
|
||||||
effect construct-boa ;
|
effect boa ;
|
||||||
|
|
||||||
: effect-height ( effect -- n )
|
: effect-height ( effect -- n )
|
||||||
dup effect-out length swap effect-in length - ;
|
dup effect-out length swap effect-in length - ;
|
||||||
|
|
|
@ -7,7 +7,7 @@ IN: float-vectors
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: float-array>vector ( float-array length -- float-vector )
|
: float-array>vector ( float-array length -- float-vector )
|
||||||
float-vector construct-boa ; inline
|
float-vector boa ; inline
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ IN: generator.fixup
|
||||||
|
|
||||||
TUPLE: frame-required n ;
|
TUPLE: frame-required n ;
|
||||||
|
|
||||||
: frame-required ( n -- ) \ frame-required construct-boa , ;
|
: frame-required ( n -- ) \ frame-required boa , ;
|
||||||
|
|
||||||
: stack-frame-size ( code -- n )
|
: stack-frame-size ( code -- n )
|
||||||
no-stack-frame [
|
no-stack-frame [
|
||||||
|
@ -25,7 +25,7 @@ GENERIC: fixup* ( frame-size obj -- frame-size )
|
||||||
|
|
||||||
TUPLE: label offset ;
|
TUPLE: label offset ;
|
||||||
|
|
||||||
: <label> ( -- label ) label construct-empty ;
|
: <label> ( -- label ) label new ;
|
||||||
|
|
||||||
M: label fixup*
|
M: label fixup*
|
||||||
compiled-offset swap set-label-offset ;
|
compiled-offset swap set-label-offset ;
|
||||||
|
@ -74,7 +74,7 @@ SYMBOL: label-table
|
||||||
|
|
||||||
TUPLE: label-fixup label class ;
|
TUPLE: label-fixup label class ;
|
||||||
|
|
||||||
: label-fixup ( label class -- ) \ label-fixup construct-boa , ;
|
: label-fixup ( label class -- ) \ label-fixup boa , ;
|
||||||
|
|
||||||
M: label-fixup fixup*
|
M: label-fixup fixup*
|
||||||
dup label-fixup-class rc-absolute?
|
dup label-fixup-class rc-absolute?
|
||||||
|
@ -84,7 +84,7 @@ M: label-fixup fixup*
|
||||||
|
|
||||||
TUPLE: rel-fixup arg class type ;
|
TUPLE: rel-fixup arg class type ;
|
||||||
|
|
||||||
: rel-fixup ( arg class type -- ) \ rel-fixup construct-boa , ;
|
: rel-fixup ( arg class type -- ) \ rel-fixup boa , ;
|
||||||
|
|
||||||
: (rel-fixup) ( arg class type offset -- pair )
|
: (rel-fixup) ( arg class type offset -- pair )
|
||||||
pick rc-absolute-cell = cell 4 ? -
|
pick rc-absolute-cell = cell 4 ? -
|
||||||
|
|
|
@ -76,7 +76,7 @@ INSTANCE: temp-reg value
|
||||||
! A data stack location.
|
! A data stack location.
|
||||||
TUPLE: ds-loc n class ;
|
TUPLE: ds-loc n class ;
|
||||||
|
|
||||||
: <ds-loc> f ds-loc construct-boa ;
|
: <ds-loc> f ds-loc boa ;
|
||||||
|
|
||||||
M: ds-loc minimal-ds-loc* ds-loc-n min ;
|
M: ds-loc minimal-ds-loc* ds-loc-n min ;
|
||||||
M: ds-loc operand-class* ds-loc-class ;
|
M: ds-loc operand-class* ds-loc-class ;
|
||||||
|
@ -87,7 +87,7 @@ M: ds-loc live-loc?
|
||||||
! A retain stack location.
|
! A retain stack location.
|
||||||
TUPLE: rs-loc n class ;
|
TUPLE: rs-loc n class ;
|
||||||
|
|
||||||
: <rs-loc> f rs-loc construct-boa ;
|
: <rs-loc> f rs-loc boa ;
|
||||||
M: rs-loc operand-class* rs-loc-class ;
|
M: rs-loc operand-class* rs-loc-class ;
|
||||||
M: rs-loc set-operand-class set-rs-loc-class ;
|
M: rs-loc set-operand-class set-rs-loc-class ;
|
||||||
M: rs-loc live-loc?
|
M: rs-loc live-loc?
|
||||||
|
@ -128,7 +128,7 @@ INSTANCE: cached value
|
||||||
TUPLE: tagged vreg class ;
|
TUPLE: tagged vreg class ;
|
||||||
|
|
||||||
: <tagged> ( vreg -- tagged )
|
: <tagged> ( vreg -- tagged )
|
||||||
f tagged construct-boa ;
|
f tagged boa ;
|
||||||
|
|
||||||
M: tagged v>operand tagged-vreg v>operand ;
|
M: tagged v>operand tagged-vreg v>operand ;
|
||||||
M: tagged set-operand-class set-tagged-class ;
|
M: tagged set-operand-class set-tagged-class ;
|
||||||
|
@ -238,7 +238,7 @@ M: phantom-stack clone
|
||||||
GENERIC: finalize-height ( stack -- )
|
GENERIC: finalize-height ( stack -- )
|
||||||
|
|
||||||
: construct-phantom-stack ( class -- stack )
|
: construct-phantom-stack ( class -- stack )
|
||||||
>r 0 V{ } clone r> construct-boa ; inline
|
>r 0 V{ } clone r> boa ; inline
|
||||||
|
|
||||||
: (loc)
|
: (loc)
|
||||||
#! Utility for methods on <loc>
|
#! Utility for methods on <loc>
|
||||||
|
|
|
@ -50,7 +50,7 @@ TUPLE: check-method class generic ;
|
||||||
|
|
||||||
: check-method ( class generic -- class generic )
|
: check-method ( class generic -- class generic )
|
||||||
over class? over generic? and [
|
over class? over generic? and [
|
||||||
\ check-method construct-boa throw
|
\ check-method boa throw
|
||||||
] unless ; inline
|
] unless ; inline
|
||||||
|
|
||||||
: with-methods ( generic quot -- )
|
: with-methods ( generic quot -- )
|
||||||
|
|
|
@ -35,7 +35,7 @@ TUPLE: tuple-dispatch-engine echelons ;
|
||||||
dupd <echelon-dispatch-engine>
|
dupd <echelon-dispatch-engine>
|
||||||
] if
|
] if
|
||||||
] assoc-map [ nip ] assoc-subset
|
] assoc-map [ nip ] assoc-subset
|
||||||
\ tuple-dispatch-engine construct-boa ;
|
\ tuple-dispatch-engine boa ;
|
||||||
|
|
||||||
: convert-tuple-methods ( assoc -- assoc' )
|
: convert-tuple-methods ( assoc -- assoc' )
|
||||||
tuple bootstrap-word
|
tuple bootstrap-word
|
||||||
|
|
|
@ -183,22 +183,22 @@ M: ceo salary
|
||||||
|
|
||||||
[ salary ] must-infer
|
[ salary ] must-infer
|
||||||
|
|
||||||
[ 24000 ] [ employee construct-boa salary ] unit-test
|
[ 24000 ] [ employee boa salary ] unit-test
|
||||||
|
|
||||||
[ 24000 ] [ tape-monkey construct-boa salary ] unit-test
|
[ 24000 ] [ tape-monkey boa salary ] unit-test
|
||||||
|
|
||||||
[ 36000 ] [ junior-manager construct-boa salary ] unit-test
|
[ 36000 ] [ junior-manager boa salary ] unit-test
|
||||||
|
|
||||||
[ 41000 ] [ middle-manager construct-boa salary ] unit-test
|
[ 41000 ] [ middle-manager boa salary ] unit-test
|
||||||
|
|
||||||
[ 51000 ] [ senior-manager construct-boa salary ] unit-test
|
[ 51000 ] [ senior-manager boa salary ] unit-test
|
||||||
|
|
||||||
[ 102000 ] [ executive construct-boa salary ] unit-test
|
[ 102000 ] [ executive boa salary ] unit-test
|
||||||
|
|
||||||
[ ceo construct-boa salary ]
|
[ ceo boa salary ]
|
||||||
[ T{ inconsistent-next-method f ceo salary } = ] must-fail-with
|
[ T{ inconsistent-next-method f ceo salary } = ] must-fail-with
|
||||||
|
|
||||||
[ intern construct-boa salary ]
|
[ intern boa salary ]
|
||||||
[ T{ no-next-method f intern salary } = ] must-fail-with
|
[ T{ no-next-method f intern salary } = ] must-fail-with
|
||||||
|
|
||||||
! Weird shit
|
! Weird shit
|
||||||
|
|
|
@ -116,7 +116,7 @@ IN: hashtables
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: <hashtable> ( n -- hash )
|
: <hashtable> ( n -- hash )
|
||||||
hashtable construct-empty [ reset-hash ] keep ;
|
hashtable new [ reset-hash ] keep ;
|
||||||
|
|
||||||
M: hashtable at* ( key hash -- value ? )
|
M: hashtable at* ( key hash -- value ? )
|
||||||
key@ [ 3 fixnum+fast slot t ] [ 2drop f f ] if ;
|
key@ [ 3 fixnum+fast slot t ] [ 2drop f f ] if ;
|
||||||
|
|
|
@ -20,11 +20,11 @@ GENERIC: heap-size ( heap -- n )
|
||||||
TUPLE: heap data ;
|
TUPLE: heap data ;
|
||||||
|
|
||||||
: <heap> ( class -- heap )
|
: <heap> ( class -- heap )
|
||||||
>r V{ } clone r> construct-boa ; inline
|
>r V{ } clone r> boa ; inline
|
||||||
|
|
||||||
TUPLE: entry value key heap index ;
|
TUPLE: entry value key heap index ;
|
||||||
|
|
||||||
: <entry> ( value key heap -- entry ) f entry construct-boa ;
|
: <entry> ( value key heap -- entry ) f entry boa ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
|
@ -39,9 +39,9 @@ M: inference-error compiler-error-type type>> ;
|
||||||
M: inference-error error-help error>> error-help ;
|
M: inference-error error-help error>> error-help ;
|
||||||
|
|
||||||
: (inference-error) ( ... class type -- * )
|
: (inference-error) ( ... class type -- * )
|
||||||
>r construct-boa r>
|
>r boa r>
|
||||||
recursive-state get
|
recursive-state get
|
||||||
\ inference-error construct-boa throw ; inline
|
\ inference-error boa throw ; inline
|
||||||
|
|
||||||
: inference-error ( ... class -- * )
|
: inference-error ( ... class -- * )
|
||||||
+error+ (inference-error) ; inline
|
+error+ (inference-error) ; inline
|
||||||
|
|
|
@ -12,7 +12,7 @@ IN: inference.dataflow
|
||||||
TUPLE: value < identity-tuple literal uid recursion ;
|
TUPLE: value < identity-tuple literal uid recursion ;
|
||||||
|
|
||||||
: <value> ( obj -- value )
|
: <value> ( obj -- value )
|
||||||
<computed> recursive-state get value construct-boa ;
|
<computed> recursive-state get value boa ;
|
||||||
|
|
||||||
M: value hashcode* nip value-uid ;
|
M: value hashcode* nip value-uid ;
|
||||||
|
|
||||||
|
@ -68,16 +68,16 @@ M: object flatten-curry , ;
|
||||||
[ in-d>> ] [ out-d>> ] bi <effect> ;
|
[ in-d>> ] [ out-d>> ] bi <effect> ;
|
||||||
|
|
||||||
: param-node ( param class -- node )
|
: param-node ( param class -- node )
|
||||||
construct-empty swap >>param ; inline
|
new swap >>param ; inline
|
||||||
|
|
||||||
: in-node ( seq class -- node )
|
: in-node ( seq class -- node )
|
||||||
construct-empty swap >>in-d ; inline
|
new swap >>in-d ; inline
|
||||||
|
|
||||||
: all-in-node ( class -- node )
|
: all-in-node ( class -- node )
|
||||||
flatten-meta-d swap in-node ; inline
|
flatten-meta-d swap in-node ; inline
|
||||||
|
|
||||||
: out-node ( seq class -- node )
|
: out-node ( seq class -- node )
|
||||||
construct-empty swap >>out-d ; inline
|
new swap >>out-d ; inline
|
||||||
|
|
||||||
: all-out-node ( class -- node )
|
: all-out-node ( class -- node )
|
||||||
flatten-meta-d swap out-node ; inline
|
flatten-meta-d swap out-node ; inline
|
||||||
|
@ -111,19 +111,19 @@ TUPLE: #call-label < node ;
|
||||||
|
|
||||||
TUPLE: #push < node ;
|
TUPLE: #push < node ;
|
||||||
|
|
||||||
: #push ( -- node ) \ #push construct-empty ;
|
: #push ( -- node ) \ #push new ;
|
||||||
|
|
||||||
TUPLE: #shuffle < node ;
|
TUPLE: #shuffle < node ;
|
||||||
|
|
||||||
: #shuffle ( -- node ) \ #shuffle construct-empty ;
|
: #shuffle ( -- node ) \ #shuffle new ;
|
||||||
|
|
||||||
TUPLE: #>r < node ;
|
TUPLE: #>r < node ;
|
||||||
|
|
||||||
: #>r ( -- node ) \ #>r construct-empty ;
|
: #>r ( -- node ) \ #>r new ;
|
||||||
|
|
||||||
TUPLE: #r> < node ;
|
TUPLE: #r> < node ;
|
||||||
|
|
||||||
: #r> ( -- node ) \ #r> construct-empty ;
|
: #r> ( -- node ) \ #r> new ;
|
||||||
|
|
||||||
TUPLE: #values < node ;
|
TUPLE: #values < node ;
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ TUPLE: #merge < node ;
|
||||||
|
|
||||||
TUPLE: #terminate < node ;
|
TUPLE: #terminate < node ;
|
||||||
|
|
||||||
: #terminate ( -- node ) \ #terminate construct-empty ;
|
: #terminate ( -- node ) \ #terminate new ;
|
||||||
|
|
||||||
TUPLE: #declare < node ;
|
TUPLE: #declare < node ;
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ classes ;
|
||||||
|
|
||||||
[ 512 ] [ 1 { { 1+ 8 } } bitfield-quot call ] unit-test
|
[ 512 ] [ 1 { { 1+ 8 } } bitfield-quot call ] unit-test
|
||||||
|
|
||||||
\ construct-empty must-infer
|
\ new must-infer
|
||||||
|
|
||||||
TUPLE: a-tuple x y z ;
|
TUPLE: a-tuple x y z ;
|
||||||
|
|
||||||
|
|
|
@ -82,12 +82,12 @@ M: duplicated-slots-error summary
|
||||||
[ <reversed> [get-slots] ] [ duplicated-slots-error ] if
|
[ <reversed> [get-slots] ] [ duplicated-slots-error ] if
|
||||||
] 1 define-transform
|
] 1 define-transform
|
||||||
|
|
||||||
\ construct-boa [
|
\ boa [
|
||||||
dup +inlined+ depends-on
|
dup +inlined+ depends-on
|
||||||
tuple-layout [ <tuple-boa> ] curry
|
tuple-layout [ <tuple-boa> ] curry
|
||||||
] 1 define-transform
|
] 1 define-transform
|
||||||
|
|
||||||
\ construct-empty [
|
\ new [
|
||||||
1 ensure-values
|
1 ensure-values
|
||||||
peek-d value? [
|
peek-d value? [
|
||||||
pop-literal
|
pop-literal
|
||||||
|
@ -95,7 +95,7 @@ M: duplicated-slots-error summary
|
||||||
tuple-layout [ <tuple> ] curry
|
tuple-layout [ <tuple> ] curry
|
||||||
swap infer-quot
|
swap infer-quot
|
||||||
] [
|
] [
|
||||||
\ construct-empty 1 1 <effect> make-call-node
|
\ new 1 1 <effect> make-call-node
|
||||||
] if
|
] if
|
||||||
] "infer" set-word-prop
|
] "infer" set-word-prop
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,8 @@ ERROR: encode-error ;
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
M: tuple-class <decoder> construct-empty <decoder> ;
|
M: tuple-class <decoder> new <decoder> ;
|
||||||
M: tuple <decoder> f decoder construct-boa ;
|
M: tuple <decoder> f decoder boa ;
|
||||||
|
|
||||||
: >decoder< ( decoder -- stream encoding )
|
: >decoder< ( decoder -- stream encoding )
|
||||||
[ stream>> ] [ code>> ] bi ;
|
[ stream>> ] [ code>> ] bi ;
|
||||||
|
@ -104,8 +104,8 @@ M: decoder stream-readln ( stream -- str )
|
||||||
M: decoder dispose decoder-stream dispose ;
|
M: decoder dispose decoder-stream dispose ;
|
||||||
|
|
||||||
! Encoding
|
! Encoding
|
||||||
M: tuple-class <encoder> construct-empty <encoder> ;
|
M: tuple-class <encoder> new <encoder> ;
|
||||||
M: tuple <encoder> encoder construct-boa ;
|
M: tuple <encoder> encoder boa ;
|
||||||
|
|
||||||
: >encoder< ( encoder -- stream encoding )
|
: >encoder< ( encoder -- stream encoding )
|
||||||
[ stream>> ] [ code>> ] bi ;
|
[ stream>> ] [ code>> ] bi ;
|
||||||
|
|
|
@ -4,7 +4,7 @@ IN: io.streams.duplex.tests
|
||||||
! Test duplex stream close behavior
|
! Test duplex stream close behavior
|
||||||
TUPLE: closing-stream closed? ;
|
TUPLE: closing-stream closed? ;
|
||||||
|
|
||||||
: <closing-stream> closing-stream construct-empty ;
|
: <closing-stream> closing-stream new ;
|
||||||
|
|
||||||
M: closing-stream dispose
|
M: closing-stream dispose
|
||||||
dup closing-stream-closed? [
|
dup closing-stream-closed? [
|
||||||
|
@ -15,7 +15,7 @@ M: closing-stream dispose
|
||||||
|
|
||||||
TUPLE: unclosable-stream ;
|
TUPLE: unclosable-stream ;
|
||||||
|
|
||||||
: <unclosable-stream> unclosable-stream construct-empty ;
|
: <unclosable-stream> unclosable-stream new ;
|
||||||
|
|
||||||
M: unclosable-stream dispose
|
M: unclosable-stream dispose
|
||||||
"Can't close me!" throw ;
|
"Can't close me!" throw ;
|
||||||
|
|
|
@ -9,7 +9,7 @@ IN: io.streams.duplex
|
||||||
TUPLE: duplex-stream in out closed ;
|
TUPLE: duplex-stream in out closed ;
|
||||||
|
|
||||||
: <duplex-stream> ( in out -- stream )
|
: <duplex-stream> ( in out -- stream )
|
||||||
f duplex-stream construct-boa ;
|
f duplex-stream boa ;
|
||||||
|
|
||||||
ERROR: stream-closed-twice ;
|
ERROR: stream-closed-twice ;
|
||||||
|
|
||||||
|
|
|
@ -142,10 +142,10 @@ M: object clone ;
|
||||||
M: callstack clone (clone) ;
|
M: callstack clone (clone) ;
|
||||||
|
|
||||||
! Tuple construction
|
! Tuple construction
|
||||||
: construct-empty ( class -- tuple )
|
: new ( class -- tuple )
|
||||||
tuple-layout <tuple> ;
|
tuple-layout <tuple> ;
|
||||||
|
|
||||||
: construct-boa ( ... class -- tuple )
|
: boa ( ... class -- tuple )
|
||||||
tuple-layout <tuple-boa> ;
|
tuple-layout <tuple-boa> ;
|
||||||
|
|
||||||
! Quotation building
|
! Quotation building
|
||||||
|
@ -203,7 +203,7 @@ GENERIC# get-slots 1 ( tuple slots -- ... )
|
||||||
GENERIC# set-slots 1 ( ... tuple slots -- )
|
GENERIC# set-slots 1 ( ... tuple slots -- )
|
||||||
|
|
||||||
: construct ( ... slots class -- tuple )
|
: construct ( ... slots class -- tuple )
|
||||||
construct-empty [ swap set-slots ] keep ; inline
|
new [ swap set-slots ] keep ; inline
|
||||||
|
|
||||||
: construct-delegate ( delegate class -- tuple )
|
: construct-delegate ( delegate class -- tuple )
|
||||||
>r { set-delegate } r> construct ; inline
|
>r { set-delegate } r> construct ; inline
|
||||||
|
|
|
@ -14,7 +14,7 @@ IN: mirrors
|
||||||
TUPLE: mirror object slots ;
|
TUPLE: mirror object slots ;
|
||||||
|
|
||||||
: <mirror> ( object -- mirror )
|
: <mirror> ( object -- mirror )
|
||||||
dup object-slots mirror construct-boa ;
|
dup object-slots mirror boa ;
|
||||||
|
|
||||||
: >mirror< ( mirror -- obj slots )
|
: >mirror< ( mirror -- obj slots )
|
||||||
dup mirror-object swap mirror-slots ;
|
dup mirror-object swap mirror-slots ;
|
||||||
|
|
|
@ -19,7 +19,7 @@ sequences.private combinators ;
|
||||||
] "output-classes" set-word-prop
|
] "output-classes" set-word-prop
|
||||||
] each
|
] each
|
||||||
|
|
||||||
\ construct-empty [
|
\ new [
|
||||||
dup node-in-d peek node-literal
|
dup node-in-d peek node-literal
|
||||||
dup class? [ drop tuple ] unless 1array f
|
dup class? [ drop tuple ] unless 1array f
|
||||||
] "output-classes" set-word-prop
|
] "output-classes" set-word-prop
|
||||||
|
|
|
@ -283,7 +283,7 @@ TUPLE: silly-tuple a b ;
|
||||||
|
|
||||||
[ t ] [ \ node-successor-f-bug compiled? ] unit-test
|
[ t ] [ \ node-successor-f-bug compiled? ] unit-test
|
||||||
|
|
||||||
[ ] [ [ construct-empty ] dataflow optimize drop ] unit-test
|
[ ] [ [ new ] dataflow optimize drop ] unit-test
|
||||||
|
|
||||||
[ ] [ [ <tuple> ] dataflow optimize drop ] unit-test
|
[ ] [ [ <tuple> ] dataflow optimize drop ] unit-test
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ name>char-hook global [
|
||||||
TUPLE: parse-error file line column line-text error ;
|
TUPLE: parse-error file line column line-text error ;
|
||||||
|
|
||||||
: <parse-error> ( msg -- error )
|
: <parse-error> ( msg -- error )
|
||||||
\ parse-error construct-empty
|
\ parse-error new
|
||||||
file get >>file
|
file get >>file
|
||||||
lexer get line>> >>line
|
lexer get line>> >>line
|
||||||
lexer get column>> >>column
|
lexer get column>> >>column
|
||||||
|
@ -256,7 +256,7 @@ M: no-word-error summary
|
||||||
drop "Word not found in current vocabulary search path" ;
|
drop "Word not found in current vocabulary search path" ;
|
||||||
|
|
||||||
: no-word ( name -- newword )
|
: no-word ( name -- newword )
|
||||||
dup no-word-error construct-boa
|
dup no-word-error boa
|
||||||
swap words-named [ forward-reference? not ] subset
|
swap words-named [ forward-reference? not ] subset
|
||||||
word-restarts throw-restarts
|
word-restarts throw-restarts
|
||||||
dup word-vocabulary (use+) ;
|
dup word-vocabulary (use+) ;
|
||||||
|
|
|
@ -17,7 +17,7 @@ SYMBOL: pprinter-use
|
||||||
|
|
||||||
TUPLE: pprinter last-newline line-count end-printing indent ;
|
TUPLE: pprinter last-newline line-count end-printing indent ;
|
||||||
|
|
||||||
: <pprinter> ( -- pprinter ) 0 1 f 0 pprinter construct-boa ;
|
: <pprinter> ( -- pprinter ) 0 1 f 0 pprinter boa ;
|
||||||
|
|
||||||
: record-vocab ( word -- )
|
: record-vocab ( word -- )
|
||||||
word-vocabulary [ dup pprinter-use get set-at ] when* ;
|
word-vocabulary [ dup pprinter-use get set-at ] when* ;
|
||||||
|
@ -72,7 +72,7 @@ start-group? end-group?
|
||||||
style overhang ;
|
style overhang ;
|
||||||
|
|
||||||
: construct-section ( length class -- section )
|
: construct-section ( length class -- section )
|
||||||
construct-empty
|
new
|
||||||
position get >>start
|
position get >>start
|
||||||
swap position [ + ] change
|
swap position [ + ] change
|
||||||
position get >>end
|
position get >>end
|
||||||
|
|
|
@ -7,7 +7,7 @@ IN: sbufs
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: string>sbuf ( string length -- sbuf )
|
: string>sbuf ( string length -- sbuf )
|
||||||
sbuf construct-boa ; inline
|
sbuf boa ; inline
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
|
@ -197,7 +197,7 @@ ERROR: slice-error reason ;
|
||||||
: <slice> ( from to seq -- slice )
|
: <slice> ( from to seq -- slice )
|
||||||
dup slice? [ collapse-slice ] when
|
dup slice? [ collapse-slice ] when
|
||||||
check-slice
|
check-slice
|
||||||
slice construct-boa ; inline
|
slice boa ; inline
|
||||||
|
|
||||||
M: slice virtual-seq slice-seq ;
|
M: slice virtual-seq slice-seq ;
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ TUPLE: groups seq n sliced? ;
|
||||||
: check-groups 0 <= [ "Invalid group count" throw ] when ;
|
: check-groups 0 <= [ "Invalid group count" throw ] when ;
|
||||||
|
|
||||||
: <groups> ( seq n -- groups )
|
: <groups> ( seq n -- groups )
|
||||||
dup check-groups f groups construct-boa ; inline
|
dup check-groups f groups boa ; inline
|
||||||
|
|
||||||
: <sliced-groups> ( seq n -- groups )
|
: <sliced-groups> ( seq n -- groups )
|
||||||
<groups> t over set-groups-sliced? ;
|
<groups> t over set-groups-sliced? ;
|
||||||
|
|
|
@ -573,21 +573,21 @@ HELP: ERROR:
|
||||||
""
|
""
|
||||||
"TUPLE: invalid-values x y ;"
|
"TUPLE: invalid-values x y ;"
|
||||||
": invalid-values ( x y -- * )"
|
": invalid-values ( x y -- * )"
|
||||||
" \\ invalid-values construct-boa throw ;"
|
" \\ invalid-values boa throw ;"
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
HELP: C:
|
HELP: C:
|
||||||
{ $syntax "C: constructor class" }
|
{ $syntax "C: constructor class" }
|
||||||
{ $values { "constructor" "a new word to define" } { "class" tuple-class } }
|
{ $values { "constructor" "a new word to define" } { "class" tuple-class } }
|
||||||
{ $description "Define a constructor word for a tuple class which simply performs BOA (by order of arguments) construction using " { $link construct-boa } "." }
|
{ $description "Define a constructor word for a tuple class which simply performs BOA (by order of arguments) construction using " { $link boa } "." }
|
||||||
{ $examples
|
{ $examples
|
||||||
"Suppose the following tuple has been defined:"
|
"Suppose the following tuple has been defined:"
|
||||||
{ $code "TUPLE: color red green blue ;" }
|
{ $code "TUPLE: color red green blue ;" }
|
||||||
"The following two lines are equivalent:"
|
"The following two lines are equivalent:"
|
||||||
{ $code
|
{ $code
|
||||||
"C: <color> color"
|
"C: <color> color"
|
||||||
": <color> color construct-boa ;"
|
": <color> color boa ;"
|
||||||
}
|
}
|
||||||
"In both cases, a word " { $snippet "<color>" } " is defined, which reads three values from the stack and creates a " { $snippet "color" } " instance having these values in the " { $snippet "red" } ", " { $snippet "green" } " and " { $snippet "blue" } " slots, respectively."
|
"In both cases, a word " { $snippet "<color>" } " is defined, which reads three values from the stack and creates a " { $snippet "color" } " instance having these values in the " { $snippet "red" } ", " { $snippet "green" } " and " { $snippet "blue" } " slots, respectively."
|
||||||
} ;
|
} ;
|
||||||
|
|
|
@ -166,7 +166,7 @@ IN: bootstrap.syntax
|
||||||
"C:" [
|
"C:" [
|
||||||
CREATE-WORD
|
CREATE-WORD
|
||||||
scan-word dup check-tuple
|
scan-word dup check-tuple
|
||||||
[ construct-boa ] curry define-inline
|
[ boa ] curry define-inline
|
||||||
] define-syntax
|
] define-syntax
|
||||||
|
|
||||||
"ERROR:" [
|
"ERROR:" [
|
||||||
|
|
|
@ -57,7 +57,7 @@ mailbox variables sleep-entry ;
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: <thread> ( quot name -- thread )
|
: <thread> ( quot name -- thread )
|
||||||
\ thread construct-empty
|
\ thread new
|
||||||
swap >>name
|
swap >>name
|
||||||
swap >>quot
|
swap >>quot
|
||||||
\ thread counter >>id
|
\ thread counter >>id
|
||||||
|
|
|
@ -6,7 +6,7 @@ IN: vectors
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
: array>vector ( array length -- vector )
|
: array>vector ( array length -- vector )
|
||||||
vector construct-boa ; inline
|
vector boa ; inline
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ SYMBOL: load-vocab-hook ! ( name -- )
|
||||||
TUPLE: vocab-link name ;
|
TUPLE: vocab-link name ;
|
||||||
|
|
||||||
: <vocab-link> ( name -- vocab-link )
|
: <vocab-link> ( name -- vocab-link )
|
||||||
vocab-link construct-boa ;
|
vocab-link boa ;
|
||||||
|
|
||||||
M: vocab-link hashcode*
|
M: vocab-link hashcode*
|
||||||
vocab-link-name hashcode* ;
|
vocab-link-name hashcode* ;
|
||||||
|
|
Loading…
Reference in New Issue