Commit graph

220 commits

Author SHA1 Message Date
Justin Ethier
f3c83e42a4 Optimized versions of (map) and (for-each)
These versions are optimized for when the function is being called with two list arguments.
2019-08-09 16:00:46 -04:00
Justin Ethier
ec25eddc28 Issue #331 - Prevent syntax error during eval
Prevent an unquoted symbol from throwing a syntax error when evaluating a define-record-type form. Note there are still other issues with creating a record type in the interpreter at this time.
2019-08-05 14:09:14 -04:00
Justin Ethier
0c050a3065 Added platform to (features) 2019-07-31 13:06:31 -04:00
Justin Ethier
f0b84ce122 Set immutable flag 2019-05-01 17:41:47 -04:00
Justin Ethier
12d6cbce5a Use explicit if's instead of memv for case
Theory is the generated code can make better use of the processor cached when using explicit if statements than aggregating over a list via memv, since pairs in the list can be located anywhere across memory.
2019-03-20 17:39:55 -04:00
Justin Ethier
1f7212a964 Faster version of _list-index 2019-03-14 15:43:36 -04:00
Justin Ethier
d9f63a85b4 Revert previous change 2019-02-27 16:03:19 -05:00
Justin Ethier
1f8a824bda More efficient record type construction 2019-02-27 15:44:50 -05:00
Justin Ethier
8772c5355b Faster initialization of objects create via define-record-type 2019-02-27 14:31:14 -05:00
Justin Ethier
0f0beb024c Do not use vector-set when creating record types
This improves performance as mutations force the GC to do more work.
2019-02-27 10:29:18 -05:00
Justin Ethier
6bfff4b6ed Perform fixnum type check 2019-02-19 13:17:33 -05:00
Justin Ethier
2d9ba5a9e3 New version of (list?) 2018-12-12 13:43:47 -05:00
Justin Ethier
74e56aeb2f Issue #280 - Cyc-add-feature! 2018-11-10 06:39:13 -05:00
Justin Ethier
d9b0adc8c1 Issue #277 2018-10-01 17:05:52 -04:00
Justin Ethier
4cf407ebe6 Issue #275 - Return #f instead of raising error 2018-09-05 17:41:47 -04:00
Justin Ethier
75b50d8269 Slightly faster (exact-integer?) 2018-06-21 17:55:27 -04:00
Justin Ethier
48845ce23b Experimenting with faster versions of map, for-each 2018-06-20 13:35:39 -04:00
Justin Ethier
75e48f999f Issue #55 - Support (inexact) for complex 2018-05-15 13:15:53 -04:00
Justin Ethier
335be69a12 Make (complex? z) work 2018-05-10 13:39:30 -04:00
Justin Ethier
1d91ace450 Fix slot-ref 2018-02-01 13:25:19 -05:00
Justin Ethier
aafe5f0d68 Record type enhancements 2018-01-31 19:08:47 -05:00
Justin Ethier
cf4877acd7 Bug fixes 2017-12-18 23:56:07 +00:00
Justin Ethier
44af2e8d98 Issue #236 - Added single-byte I/O functions 2017-12-18 23:39:15 +00:00
Justin Ethier
584b31460b Added TODO 2017-12-18 17:34:18 -05:00
Justin Ethier
24b10e9d6a Added full-unicode feature 2017-12-18 14:49:07 -05:00
Justin Ethier
8750696e17 cleanup 2017-11-19 18:43:37 -05:00
Justin Ethier
a492ca379d Handle the null character 2017-11-09 19:00:21 -05:00
Justin Ethier
02014322b7 Properly count bytes in make-string 2017-11-07 17:47:08 -05:00
Justin Ethier
6aaa600ebc Bugfixes:
- Avoid unnecessary calls to `strlen`
- Type check the `fill` parameter to `make-string`
2017-10-27 13:01:04 +00:00
Justin Ethier
77e391cabc Uncomment fast path 2017-10-26 22:35:11 +00:00
Justin Ethier
703f863e48 Fixes for make-string 2017-10-26 21:56:35 +00:00
Justin Ethier
0bd0eeb7a6 WIP 2017-10-26 17:04:52 +00:00
Justin Ethier
722d077367 WIP 2017-10-24 19:01:20 -04:00
Justin Ethier
6c4dd4b740 Compute number of code points and byte len 2017-10-24 17:53:09 -04:00
Justin Ethier
c339234632 Issue #225 - Added error-object interfaces
This is only a rough-cut of the actual implementation, though.
2017-09-15 12:14:26 +00:00
Vasilij Schneidermann
d731f92e7d read-string: return EOF if nothing can be read
R7RS states that there's three possible scenarios for read-string:

- More characters can be read than asked for (return string)
- Less characters can be read than asked for (return string)
- No characters can be read (return EOF)

This commit ensures the last scenario works as intended.
2017-09-07 17:07:05 +02:00
Justin Ethier
db011aa1af Issue #220 - make-string - use heap for large strs 2017-09-05 17:32:04 -04:00
Justin Ethier
2647ceb4ae WIP 2017-09-05 13:44:16 +00:00
Justin Ethier
8f2a918283 Issue #217 - Optional port arg for peek-char 2017-09-04 18:38:15 -04:00
Justin Ethier
12c91b86a5 Issue #217 2017-09-02 18:49:41 -04:00
Justin Ethier
aac5240a0b Avoid calling length each iteration of for-each
length is O(n) so calling it should be avoided, especially for each iteration of for-each. Instead the code can just check if the first cdr is null. This has the potential for a huge speed improvement.
2017-06-02 19:25:26 -04:00
Justin Ethier
48ee3708d5 Inline more define-c functions 2017-05-09 12:44:42 +00:00
Justin Ethier
1391186a6f Inline (exact?) and (exact-integer?) 2017-05-04 08:40:59 +00:00
Justin Ethier
75b9e7bf8a Explicit inlines 2017-04-29 01:18:39 +00:00
Justin Ethier
19e0346968 Temporary workaround for name conflict
A longer-term solution will need to address cases where a function is defined with the same name as an inlinable function from another library. These are effectively promoted to primitives, which are not renamed by alpha conversion.

A possible workaround might be to allow a global in the module being compiled to "override" a primitive of the same name. TBD
2017-04-27 18:11:57 -04:00
Justin Ethier
8cb74fb075 Inline version of truncate 2017-04-17 10:27:23 +00:00
Justin Ethier
498fa6f54e Issue #194 - Disable inline define-c's for now 2017-04-12 18:01:33 -04:00
Justin Ethier
861330bc82 WIP 2017-04-05 19:00:42 -04:00
Justin Ethier
4b8d143627 Cleanup 2017-04-05 18:08:08 -04:00
Justin Ethier
e5d63a61d5 WIP 2017-04-04 09:11:07 +00:00