+ inference/dataflow:\r
\r
- type inference\r
-- handle odd base cases, with code after ifte\r
\r
+ compiler:\r
\r
- stream server can hang because of exception handler limitations\r
- listener should be multithreaded\r
- compile all, infer all commands\r
-- type something -- no completions -- hit another key -- not inserted\r
- faster completion\r
-- sidekick: still parsing too much\r
- errors don't always disappear\r
- NPE in ErrorHighlight\r
- maple-like: press enter at old commands to evaluate there\r
\r
+ kernel:\r
\r
+- after bootstrapping, classes hash is messed up\r
- do partial objects cause problems?\r
- profiler is inaccurate: wrong word on cs\r
- better i/o scheduler\r
public boolean handleKeystroke(int selectedIndex, char keyChar)
{
if(keyChar == '\t' || keyChar == '\n')
+ {
insert(selectedIndex);
+ return false;
+ }
+ else if(keyChar == ' ')
+ {
+ insert(selectedIndex);
+ textArea.userInput(' ');
+ return false;
+ }
else
+ {
textArea.userInput(keyChar);
-
- boolean ws = (ReadTable.DEFAULT_READTABLE
- .getCharacterType(keyChar)
- == ReadTable.WHITESPACE);
-
- return !ws;
+ return true;
+ }
}
public ListCellRenderer getRenderer()
] when
] when ;
+: decompose ( x y -- effect )
+ #! Return a stack effect such that x*effect = y.
+ 2unlist >r
+ swap 2unlist >r
+ over length over length - head nip
+ r> append
+ r> 2list ;
+
: base-case ( word -- effect )
+ effect swap
[
inferring-base-case on
copy-inference
inline-compound
inferring-base-case off
- ] with-scope ;
-
-: decompose ( x y -- effect )
- #! Return a stack effect such that x*effect = y.
- 2unlist >r swap 2unlist swap length tail append
- ! workaround
- [ drop object ] map
- r> 2list ;
+ ] with-scope decompose ;
: recursive-word ( word label -- )
#! Handle a recursive call, by either applying a previously
drop word-name " does not have a base case." cat2 throw
] [
2dup [ drop #call-label ] [ nip #call ] ifte
- rot base-case effect swap decompose (consume/produce)
+ rot base-case (consume/produce)
] ifte ;
: apply-word ( word -- )
\ call [ infer-call ] "infer" set-word-property
-! These are due to bugs and will be removed
-\ * [ [ number number ] [ number ] ] "infer-effect" set-word-property
-\ gcd [ [ number number ] [ number ] ] "infer-effect" set-word-property
-
\ undefined-method t "terminator" set-word-property
\ not-a-number t "terminator" set-word-property
\ throw t "terminator" set-word-property
(fraction>)
] ifte ; inline
+: division-by-zero ( x y -- )
+ "Division by zero" throw drop ;
+
: integer/ ( x y -- x/y )
dup 0 number= [
- "Division by zero" throw drop
+ division-by-zero
] [
dup 0 < [
swap neg swap neg
] when
2dup gcd tuck /i >r /i r> fraction>
- ] ifte ;
+ ] ifte ; inline
M: fixnum number= fixnum= ;
M: fixnum < fixnum< ;
[ [ [ object ] [ object object ] ] [ [ object ] f ] decompose ]
unit-test
-[ [ [ fixnum fixnum ] f ] ]
+[ [ [ cons vector cons integer object cons ] [ cons vector cons ] ] ]
[
- [ [ rational rational ] [ rational fixnum ] ]
- [ [ object ] f ] decompose
+ [ [ vector ] [ cons vector cons integer object cons ] ]
+ [ [ vector ] [ cons vector cons ] ]
+ decompose
+]
+
+[ [ [ object ] [ object ] ] ]
+[
+ [ [ object number ] [ object ] ]
+ [ [ object number ] [ object ] ]
+ decompose
]
-unit-test
: old-effect ( [ in-types out-types ] -- [ in | out ] )
uncons car length >r length r> cons ;