Commit graph

3285 commits

Author SHA1 Message Date
Justin Ethier
dfdd84d585 Issue #198 - Remove custom "member" function 2017-05-08 18:44:29 -04:00
Justin Ethier
1391186a6f Inline (exact?) and (exact-integer?) 2017-05-04 08:40:59 +00:00
Justin Ethier
93f87ac4c3 Allow inlines if a var is passed to a continuation 2017-05-04 08:22:01 +00:00
Justin Ethier
72c1bb9bea Keep track of which refs are continuations 2017-05-04 07:03:05 +00:00
Justin Ethier
3bd5d52671 Keep track of lambda's with continuations 2017-05-04 06:50:09 +00:00
Justin Ethier
c7aa3700ea Also identify pure functions using assigned-var
This identifies cases where a pure function exits but is defined inline rather than at the top-level.
2017-05-04 05:11:46 +00:00
Justin Ethier
b74213ec2d Attempt 2 CPS optimization passes 2017-05-04 05:11:23 +00:00
Justin Ethier
8be8014a1b Allow inlining refs passed to pure lambdas 2017-05-03 22:18:13 +00:00
Justin Ethier
1a973cafd8 Added lambda side effect analysis 2017-05-03 21:54:51 +00:00
Justin Ethier
6881285e0c Added analyze-find-lambdas 2017-05-03 20:30:19 +00:00
Justin Ethier
8ef7060463 Storage for lambda side effects 2017-05-03 19:52:06 +00:00
Justin Ethier
7389417e39 If prim mutates args, ignore ivar if not mutated 2017-04-29 11:13:50 +00:00
Justin Ethier
79cde357b1 Experimental change 2017-04-29 11:02:58 +00:00
Justin Ethier
7a90159109 WIP 2017-05-02 18:55:40 -04:00
Justin Ethier
2662a15622 Temporary test file 2017-05-02 18:55:01 -04:00
Justin Ethier
94fac5c512 Expand number of inlined prims 2017-04-29 07:01:29 +00:00
Justin Ethier
0d3ae68f87 Reorganize allocated_bytes to try to speed it up 2017-04-29 07:01:06 +00:00
Justin Ethier
70c5212fd2 Added inlines back 2017-04-29 01:27:03 +00:00
Justin Ethier
75b9e7bf8a Explicit inlines 2017-04-29 01:18:39 +00:00
Justin Ethier
10569ddcfd Get root library name 2017-04-29 00:46:47 +00:00
Justin Ethier
dc42d5a1d4 Only inline specifically designated functions 2017-04-28 21:28:30 +00:00
Justin Ethier
8b6830ea49 WIP - explicit inlines 2017-04-30 19:04:53 -04:00
Justin Ethier
edccb56163 bugfixes 2017-04-30 19:03:44 -04:00
Justin Ethier
9a98356589 Added lib:inlines 2017-04-30 18:52:21 -04:00
Justin Ethier
a2c0d8c511 Debug traces 2017-04-29 19:02:23 -04:00
Justin Ethier
f80da86712 Do not inline functions with free vars 2017-04-28 18:27:51 -04:00
Justin Ethier
fef4663f78 Remove old function 2017-04-28 18:10:32 -04:00
Justin Ethier
eb4fe26284 Relocated function 2017-04-28 17:54:04 +00:00
Justin Ethier
8d7bff212a WIP 2017-04-28 17:43:57 +00:00
Justin Ethier
4ae3269373 WIP 2017-04-27 19:06:08 -04:00
Justin Ethier
9b3a4769dc Avoid naming conflicts with user defined inlines
Do not allow an inline if it conflicts with a global in the current module. This at least attempts to avoid obvious name conflicts. TBD if it is good enough or if additional fixes are necessary.
2017-04-27 18:52:22 -04: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
c2929af714 Added exception handler 2017-04-26 18:08:07 -04:00
Justin Ethier
51a1a63700 Register built-in inlines 2017-04-26 17:35:58 -04:00
Justin Ethier
e469f4d5a6 Added (imported?) 2017-04-26 17:22:33 -04:00
Justin Ethier
f88016eb3e WIP 2017-04-25 06:22:40 +00:00
Justin Ethier
3d2fdb36d9 WIP 2017-04-24 23:30:27 +00:00
Justin Ethier
998fb4efaa WIP 2017-04-24 23:27:25 +00:00
Justin Ethier
6e1073387a Expose UDF inlines and original symbols 2017-04-24 23:03:09 +00:00
Justin Ethier
1c82f0e74a Add Scheme inlines to global inline list 2017-04-24 22:08:15 +00:00
Justin Ethier
0dafd88ed3 Check for inlinable functions after prim conv
At this point there are more opportunities for inlining.
2017-04-24 18:57:52 -04:00
Justin Ethier
24f9651232 Cleanup networking examples 2017-04-24 18:05:06 -04:00
Justin Ethier
0656756ab4 Simplify logic 2017-04-24 17:58:05 +00:00
Justin Ethier
4b35ff71df Do not copy pairs
Already do not allow cons to be inlined, so it is (should be?) safe to pass any pairs directly through. Cannot make copies of any pairs except those between ptr and stack_top because that could cause equality checks to fail later on.
2017-04-24 17:40:08 +00:00
Justin Ethier
7a7419a3f4 Prevent null ref 2017-04-24 16:16:00 +00:00
Justin Ethier
8b88b8d36d Do not inline prims that create mutable objs 2017-04-24 14:55:57 +00:00
Justin Ethier
045a86dc44 Do not inline functions w/mutating primitives 2017-04-24 13:16:23 +00:00
Justin Ethier
62559ee2c0 No extra comma for inlined scheme functions 2017-04-19 00:54:01 +00:00
Justin Ethier
9b7a5e3cfe Explicitly check for a (define) form 2017-04-19 00:25:47 +00:00
Justin Ethier
0262beb351 Do not try to inline large lambda bodies
If a lambda body contains more than one expression it must be compiled using CPS, so the inline code must reject it as a possible candidate.
2017-04-19 00:12:49 +00:00