| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
The idea is that to-text-line should truncate blindly past some
threshold, even if to-text isn't smart enough to avoid infinite loops.
Maybe I should define a 'truncating buffer' which stops once it fills
up. That would be an easy way to eliminate all infinite loops in
to-text-line.
|
|
|
|
|
|
| |
Drop the display-list test because it's subsumed by the stash-on-list
test right below, which doesn't require the notion of a screen from
later layers.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Just one tangle of dependencies left in the transforms. Untangling it
will require one more region: for transforms modifying types (inside
instructions).
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Some more structure to transforms, and flattening of dependencies
between them.
|
|
|
|
|
|
|
| |
In general you only want to specify one transform in terms of
(before/after) another if the other direction wouldn't work. Otherwise
try to make it work by just pushing transforms at the start/end of the
list.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ok, now I'm a little happier about our type checking. Type checking lies
in three layers:
layer 21: checking types, usually at run-time in the VM or just before
layer 57: checking type names
layer 59: checking type names
It's taken me the process of writing this commit to convince myself that
all three layers check mappings for literal values in a consistent
manner. Layer 21 uses sizes, and layers 57/59 have whitelists, but
either way the goal is that number != character != boolean unless
mediated through a literal.
|
|
|
|
|
| |
More cleanup. Haven't bothered to figure out why the trace for
specialize_with_literal_4 is repeatedly perturbed.
|
| |
|
|
|
|
|
| |
Eliminate one of several hacky type-check helpers; they've been
proliferating lately.
|
|
|
|
|
| |
'append' also implicitly calls 'to-text' unless there's a better
variant.
|
|
|
|
| |
Literal '0' ingredients should map to numbers before addresses.
|
| |
|
|
|
|
|
|
|
| |
A long-standing question resolved: why specializations sometimes skipped
some names. Turns out cleanup is incomplete if Recipe_ordinal and Recipe
aren't exactly lined up with each other, and the early exit in
new_variant was breaking that constraint.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
It's just the other direction we want to avoid.
|
|
|
|
| |
2473 was the final bugfix holding this back.
|
|
|
|
|
| |
/raw is to express absolute addresses
/unsafe is to sidestep type-checking in test setup
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
This turned out to be surprisingly easy: rather than try to specify the
types expected by each operation, just have primitive instructions go
through any other variants and only remain unnamed if no variants pass.
All I had to do was stop using contains_key() anywhere on Recipe_variants,
so that I could use get_or_insert() rather than get().
|
|
|
|
|
|
|
|
|
| |
Since we switched to end() for terminating trace lines, there's a lot
less reason to avoid this. We don't nest trace statements either
anymore.
I'd like to not hide warnings and still be able to make assertions on
their absence so that printed warnings also express as failed tests.
|
| |
|
|
|
|
|
|
|
|
| |
Not entirely happy with this. Maybe we'll find a better name. But at
least it's an improvement.
One part I *am* happy with is renaming string-replace to replace,
string-append to append, etc. Overdue, now that we have static dispatch.
|
| |
|
|
|
|
| |
Thanks Caleb Couch.
|
|
|
|
|
| |
Requires carefully deleting specializations so that they can be
reintroduced each time.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
This is happening because of our recent generic changes, which trigger
some post-processing transforms on all recipes even if we processed them
before. We could clear 'interactive' inside 'reload' to avoid this, but
random 'run' blocks in scenarios can still pick up errors from sandboxes
earlier in a scenario. The right place to clear the 'interactive' recipe
is right after we use it, in run_code_end().
|
| |
|
| |
|