Add timestamp editing, since I love to lose 1,000 points
Add basic anti-spam code for old posts
Add support for new image type and builtins; hex constants in lexer; fix tests to use new database syntax; upgrade mlton
Add image type, minimal functions for current need
Update to c++20. Add image internal type (not yet used).
From answer.aa, return valid xssi header and json so that client doesn't throw an internal exception before discarding the result
sml-lib should be in ../tom7misc, not installed separately
cc-lib and escapex should be in ../tom7misc, not installed separately
Fix pretty bad bug with nul bytes in strings being treated as ending the string (e.g. as an argument to base64). There are more instances to fix, but these were causing data loss in escape (solution uploading), so prioritize that
... and, retire the aphasia1 database syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
Port db files to new aphasia2 syntax
New aphasia2 syntax for databases
Mark done TODO, but add another
Show giveup thresholds, and make it more permissive for experts. Improve display on games list and add (back?) expert games header
Add subscription date. Fix bugs with pw vs pass param
Some optimization of new Not unop
Implement not unop
Generate not unop
Factor out common apps across sumcase arms
rewrite get_common to be n-ary, so it can be used for sumcase
Generate join construct. No real optimizations yet. Don't generate sumcase vars if unused. Some cleanup here and there
Standalone version of render benchmark
Copy renderbench from weblog
Support JOIN primitive; some small performance improvements; some more tests
Store and use lengths for textptr strings. Pass const stuff in stuffproto
Eliminate tail recursion for andalso/otherwise too
Require RHS of andalso/otherwise to be unit. Might be possible to relax this again, but very few pieces of code were even using the flexibility
eliminate tail recursion for andalso/orelse
Assume print takes string. Clean up and simplify code a bit. Add cycle count to bench (and make this count up, not down)
Simplifications of app and if. Make print functions monomorphic so we can simplify the implementation
Avoid print at polymorphic type. Improve regularity of makefiles
Avoid print at polymorphic type
Also allow expand_tuples for sumcase (where it will clearly help). Add notes about optimization opportunities
Added if-factoring optimization pass, simplification of binops
Fix condition for new-giveup, which was a typo from the aphasia2 port
Add uncurry optimization. Fix bug with is_next_effect that prevented inlining into case object
Add tests for insum tuples of different length, if optimizations, uncurry optimizations
Simplifications of if..then..else
Expand is_next effect, which pushes benchmark under some threshold where it's not swapping and now fcompletes almost immediately
Always inline small functions; this helps massively on constructor wrappers
Add regression test for list-rev optimization issues
Fixed all_uses tuple expansion optimization; it helps a lot
New broken optimization; need to do this a different way
New 'known' optimization; expand others, clean up useless crap
tail of nil should raise an exception, not return nil. Add tests for this, too
Add inlining with is_next_effect... even with only a few cases it saves a huge amount
Add several new optimizations, and clean up superseded old optimizations
Some more tests that came up while developing new optimizations
Start rebuilding optimizations with new AST-based aph1 data structure
Finish aph1, exposing comparison, freevars, subst from ast
flatten leaves a bit
Implement aph1 node datatype with AST. (still needs working leaf compare)
Use 'wizard'-style interface for aph1 datatype (trivial implementation). Didn't port optimizations yet so they are disabled
DNC: Going to try this a different way
Debug sorting, add docs
Add docs for array operations; add array sorting to test (itself barely tested)
Add long-missing array primitives to aphasia2 compiler (was just using them to implement 'ref'). Reformatted a bunch of files while on the hunt
Add arraysize ifunc
This should not be checked in
Drop unused pattern variables in let expressions too
Some actual optimizations in bottom-up pass; wildcard unused name/args in lambda
Add bottomup pass; it's a no-op
Get rid of Slist in aph1 internal language. Instead we use Let and Seq to avoid invalid representations and only convert to Slist (which still exists in bytecode) when outputting. Should make optimizations easier, although this also disables an existing incorrect optimization (flattening lets could change the meaning of the program by expanding scopes). Still it overall improves the total size of existing aph programs.
Checkpoint before fixing slist
Command-line tool to summarize aph file sizes. Change meaning of 'size' param in ReadAph (bytes w/o header)
DNC: checkpoint, gonna do this another way
And remove aph.h and the unary - hack for c_str.
Further reorganize code; make file a complete library about the file format
At long last, fix the makefile so it actually expresses dependencies correctly and can build with -j
Just use variable node idx for variable comparison, and hash bucket computation. Doesn't help clist size though
Just use character pointer to represent variable name; saves ~12mb heap and 10s in bench
New approach to initializing/looping FCGI
Use lengths of variables in context list; don't allocate strings. Still has sanity asserts enabled
Add test module and basic tests for it
Put space after text pointers in aphasia1 bytecode output. Not using yet
Make space for text lengths in file format, but not using them yet
Rename ref/modref to avoid confusion with ref type or modifying references (it is 'module reference')
Rename this to avoid confusion with the ref type
Switch to new file format where CASE has a variable node for the case variable instead of a direct text pointer. This makes room for having every text pointer accompanied by its size
Aphasia 2: Output new file format where CASE has a variable node for the case variable instead of a direct text pointer, per change in interpreter
Standardize indentation in here before working on it
Next idea: store text/var lengths with ptrs. Add this to file format; not populating or using it yet
Experiemnt with flat unordered_map-based contexts. They were terrible
Make UrlDecodeToAmpersand internal to CGI. This changes the (undocumented and somewhat weird) behavior of the urldecode ifunc, but so be it
Add more tests; fix bug in UrlDecode
Move 'stringparse' to cgi; clarify its behavior in test before simplifying it away
Remove a bunch of node types that are no longer needed, and some externs that have no definitions
Use switch instead of error-prone array for enum-names
Remove unnecessary IDENTITY
Rename context, do some cleanup. Add tests. Don't cat to 'struct X*' in GC, since this could cause us to miss cases where the destructor is not known and thus not called
Delete IDENTITY which aphasia 2 does not need