about summary refs log tree commit diff stats
path: root/014literal_string.cc
Commit message (Collapse)AuthorAgeFilesLines
* 5485 - promote SubX to top-levelKartik Agaram2019-07-271-274/+0
|
* 5001 - drop the :(scenario) DSLKartik Agaram2019-03-121-68/+117
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've been saying for a while[1][2][3] that adding extra abstractions makes things harder for newcomers, and adding new notations doubly so. And then I notice this DSL in my own backyard. Makes me feel like a hypocrite. [1] https://news.ycombinator.com/item?id=13565743#13570092 [2] https://lobste.rs/s/to8wpr/configuration_files_are_canary_warning [3] https://lobste.rs/s/mdmcdi/little_languages_by_jon_bentley_1986#c_3miuf2 The implementation of the DSL was also highly hacky: a) It was happening in the tangle/ tool, but was utterly unrelated to tangling layers. b) There were several persnickety constraints on the different kinds of lines and the specific order they were expected in. I kept finding bugs where the translator would silently do the wrong thing. Or the error messages sucked, and readers may be stuck looking at the generated code to figure out what happened. Fixing error messages would require a lot more code, which is one of my arguments against DSLs in the first place: they may be easy to implement, but they're hard to design to go with the grain of the underlying platform. They require lots of iteration. Is that effort worth prioritizing in this project? On the other hand, the DSL did make at least some readers' life easier, the ones who weren't immediately put off by having to learn a strange syntax. There were fewer quotes to parse, fewer backslash escapes. Anyway, since there are also people who dislike having to put up with strange syntaxes, we'll call that consideration a wash and tear this DSL out. --- This commit was sheer drudgery. Hopefully it won't need to be redone with a new DSL because I grow sick of backslashes.
* 3561Kartik K. Agaram2016-10-221-1/+1
|
* 3374Kartik K. Agaram2016-09-161-2/+2
|
* 3364Kartik K. Agaram2016-09-151-2/+2
|
* 3327Kartik K. Agaram2016-09-111-1/+1
|
* 3285Kartik K. Agaram2016-08-311-1/+1
|
* 3233 - change how Mu escapes stringsKartik K. Agaram2016-08-201-4/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | Thanks Sam Putman for helping think through this idea. When you encounter a backslash, strip it out and pass through any following run of backslashes. If we 'escaped' a single following character like C, then the character '\' would be the same as: '\\' escaped once '\\\\' escaped twice '\\\\\\\\' escaped thrice (8 backslashes) ..and so on, the number of backslashes doubling each time. Instead, our approach is to make the character '\' the same as: '\\' escaped once '\\\' escaped twice '\\\\' escaped thrice ..and so on, the number of backslashes merely increasing by one each time. This approach only works as long as backslashes aren't also overloaded to create special characters. So Mu doesn't follow C's approach of overloading backslashes both to escape quote characters and also as a notation for unprintable characters like '\n'.
* 3179Kartik K. Agaram2016-08-131-2/+2
|
* 3081Kartik K. Agaram2016-06-301-1/+7
| | | | Thanks Ella Couch for reporting this.
* 3008Kartik K. Agaram2016-05-251-3/+3
|
* 2803Kartik K. Agaram2016-03-211-11/+11
| | | | | Show more thorough information about instructions in the trace, but keep the original form in error messages.
* 2775 - test rewrite-stash transformKartik K. Agaram2016-03-131-1/+2
|
* 2735 - define recipes using 'def'Kartik K. Agaram2016-03-081-9/+9
| | | | | | | | | | | | I'm dropping all mention of 'recipe' terminology from the Readme. That way I hope to avoid further bike-shedding discussions while I very slowly decide on the right terminology with my students. I could be smarter in my error messages and use 'recipe' when code uses it and 'function' otherwise. But what about other words like ingredient? It would all add complexity that I'm not yet sure is worthwhile. But I do want separate experiences for veteran programmers reading about Mu on github and for people learning programming using Mu.
* 2712Kartik K. Agaram2016-02-261-2/+2
|
* 2681 - drop reagent types from reagent propertiesKartik K. Agaram2016-02-211-12/+11
| | | | | | | | | | | | | | | | | All my attempts at staging this change failed with this humongous commit that took all day and involved debugging three monstrous bugs. Two of the bugs had to do with forgetting to check the type name in the implementation of shape-shifting recipes. Bug #2 in particular would cause core tests in layer 59 to fail -- only when I loaded up edit/! It got me to just hack directly on mu.cc until I figured out the cause (snapshot saved in mu.cc.modified). The problem turned out to be that I accidentally saved a type ingredient in the Type table during specialization. Now I know that that can be very bad. I've checked the traces for any stray type numbers (rather than names). I also found what might be a bug from last November (labeled TODO), but we'll verify after this commit.
* 2678Kartik K. Agaram2016-02-201-1/+1
| | | | | | | Start using type names from the type tree rather than the property tree in most places. Hopefully the only occurrences of 'properties.at(0).second' left are ones where we're managing it. Next we can stop writing to it.
* 2677Kartik K. Agaram2016-02-201-1/+1
| | | | Include type names in the type tree. Though we aren't using them yet.
* 2689 - consistently use s-exp syntax in tracesKartik K. Agaram2016-02-191-1/+1
|
* 2685Kartik K. Agaram2016-02-191-3/+3
| | | | | | | | | | | | | | | | Stack of plans for cleaning up replace_type_ingredients() and a couple of other things, from main problem to subproblems: include type names in the type_tree rather than in the separate properties vector make type_tree and string_tree real cons cells, with separate leaf nodes redo the vocabulary for dumping various objects: do we really need to_string and debug_string? can we have a version with *all* information? can we have to_string not call debug_string? This commit nibbles at the edges of the final task, switching from member method syntax to global function like almost everything else. I'm mostly using methods just for STL in this project.
* 2614 - still fixing bugs with missing '['Kartik K. Agaram2015-12-021-2/+1
| | | | | | When skipping past some text (usually whitespace, but also commas and comments) I need to always be aware of whether it's ok to switch to the next line or not.
* 2454Kartik K. Agaram2015-11-171-5/+5
| | | | | | Another gotcha uncovered in the process of sorting out the previous commit: I keep using eof() but forgetting that there are two other states an istream can get into. Just never use eof().
* 2452Kartik K. Agaram2015-11-161-6/+6
|
* 2377 - stop using operator[] in mapKartik K. Agaram2015-11-061-1/+1
| | | | | | | | | | | | | | | | I'm still seeing all sorts of failures in turning on layer 11 of edit/, so I'm backing away and nailing down every culprit I run into. First up: stop accidentally inserting empty objects into maps during lookups. Commands run: $ sed -i 's/\(Recipe_ordinal\|Recipe\|Type_ordinal\|Type\|Memory\)\[\([^]]*\)\] = \(.*\);/put(\1, \2, \3);/' 0[1-9]* $ vi 075scenario_console.cc # manually fix up Memory[Memory[CONSOLE]] $ sed -i 's/\(Memory\)\[\([^]]*\)\]/get_or_insert(\1, \2)/' 0[1-9]* $ sed -i 's/\(Recipe_ordinal\|Type_ordinal\)\[\([^]]*\)\]/get(\1, \2)/' 0[1-9]* $ sed -i 's/\(Recipe\|Type\)\[\([^]]*\)\]/get(\1, \2)/' 0[1-9]* Now mu dies pretty quickly because of all the places I try to lookup a missing value.
* 2334Kartik K. Agaram2015-10-311-2/+1
|
* 2317Kartik K. Agaram2015-10-291-0/+199
#888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
parse/0: instruction: 105
parse/0:   ingredient: {name: "234", value: 0, type: 0, properties: ["234": "literal"]}
parse/0:   product: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "raw": ]}
parse/0: instruction: 1
parse/0:   ingredient: {name: "1", value: 0, type: 2-5-4, properties: ["1": "address":"array":"character", "deref": , "raw": ]}
parse/0:   product: {name: "2", value: 0, type: 5-4, properties: ["2": "array":"character", "raw": ]}
after-brace/0: recipe test-integer-to-decimal-digit-positive
after-brace/0: integer-to-decimal-string ...
after-brace/0: copy ...
run/0: instruction test-integer-to-decimal-digit-positive/0
run/0: instruction integer-to-decimal-string/0
mem/0: new alloc: 1000
mem/0: array size is 30
run/0: instruction integer-to-decimal-string/1
run/0: product 0 is 234
mem/0: storing 234 in location 1002
run/0: instruction integer-to-decimal-string/3
mem/0: location 1002 is 234
run/0: ingredient 0 is 234
run/0: ingredient 1 is 
run/0: jumping to instruction 6
run/0: instruction integer-to-decimal-string/7
run/0: ingredient 0 is 0
mem/0: storing 0 in location 1004
run/0: instruction integer-to-decimal-string/9
run/0: ingredient 0 is n
mem/0: location 1002 is 234
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1005
run/0: instruction integer-to-decimal-string/10
mem/0: location 1005 is 0
run/0: ingredient 0 is 0
run/0: ingredient 1 is 
run/0: jumping to instruction 13
run/0: instruction integer-to-decimal-string/14
run/0: instruction init-buffer/0
mem/0: new alloc: 1030
mem/0: array size is 30
run/0: instruction init-buffer/1
mem/0: new alloc: 1060
mem/0: storing 1060 in location 1032
run/0: instruction init-buffer/2
run/0: ingredient 0 is result
mem/0: location 1032 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: product 0 is 1060
mem/0: storing 1060 in location 1033
run/0: instruction init-buffer/3
run/0: ingredient 0 is 0
mem/0: location 1033 is 1060
mem/0: storing 0 in location 1060
run/0: instruction init-buffer/4
run/0: ingredient 0 is result
mem/0: location 1032 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: product 0 is 1061
mem/0: storing 1061 in location 1034
run/0: instruction init-buffer/5
run/0: product 0 is 30
mem/0: storing 30 in location 1035
run/0: instruction init-buffer/6
mem/0: new alloc: 1062
mem/0: location 1034 is 1061
mem/0: storing 1062 in location 1061
mem/0: location 1035 is 30
mem/0: array size is 30
run/0: instruction init-buffer/7
mem/0: location 1032 is 1060
run/0: result 0 is 1060
mem/0: storing 1060 in location 1006
run/0: instruction integer-to-decimal-string/15
run/0: ingredient 0 is 48
mem/0: storing 48 in location 1007
run/0: instruction integer-to-decimal-string/17
run/0: ingredient 0 is n
mem/0: location 1002 is 234
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1008
run/0: instruction integer-to-decimal-string/18
mem/0: location 1008 is 0
run/0: ingredient 0 is 0
run/0: jump-if fell through
run/0: instruction integer-to-decimal-string/19
run/0: ingredient 0 is n
mem/0: location 1002 is 234
run/0: ingredient 1 is 10
run/0: product 0 is 23
mem/0: storing 23 in location 1002
run/0: product 1 is 4
mem/0: storing 4 in location 1009
run/0: instruction integer-to-decimal-string/20
run/0: ingredient 0 is digit-base
mem/0: location 1007 is 48
run/0: ingredient 1 is digit
mem/0: location 1009 is 4
run/0: product 0 is 52
mem/0: storing 52 in location 1010
run/0: instruction integer-to-decimal-string/21
mem/0: location 1006 is 1060
mem/0: location 1010 is 52
run/0: instruction buffer-append/0
mem/0: new alloc: 1092
mem/0: array size is 30
run/0: instruction buffer-append/1
run/0: product 0 is 1060
mem/0: storing 1060 in location 1094
run/0: instruction buffer-append/2
run/0: product 0 is 52
mem/0: storing 52 in location 1095
run/0: instruction buffer-append/4
mem/0: location 1094 is 1060
run/0: instruction buffer-full?/0
mem/0: new alloc: 1122
mem/0: array size is 30
run/0: instruction buffer-full?/1
run/0: product 0 is 1060
mem/0: storing 1060 in location 1124
run/0: instruction buffer-full?/2
run/0: ingredient 0 is in
mem/0: location 1124 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: its type is 1
mem/0: location 1060 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1125
run/0: instruction buffer-full?/3
run/0: ingredient 0 is in
mem/0: location 1124 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1126
run/0: instruction buffer-full?/4
mem/0: location 1126 is 1062
mem/0: storing 30 in location 1127
run/0: instruction buffer-full?/5
run/0: ingredient 0 is len
mem/0: location 1125 is 0
run/0: ingredient 1 is capacity
mem/0: location 1127 is 30
run/0: product 0 is 0
mem/0: storing 0 in location 1128
run/0: instruction buffer-full?/6
mem/0: location 1128 is 0
run/0: result 0 is 0
mem/0: storing 0 in location 1096
run/0: instruction buffer-append/5
mem/0: location 1096 is 0
run/0: ingredient 0 is 0
run/0: ingredient 1 is 
run/0: jumping to instruction 7
run/0: instruction buffer-append/8
run/0: ingredient 0 is in
mem/0: location 1094 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: product 0 is 1060
mem/0: storing 1060 in location 1097
run/0: instruction buffer-append/9
run/0: ingredient 0 is in
mem/0: location 1094 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1098
run/0: instruction buffer-append/10
run/0: ingredient 0 is s
mem/0: location 1098 is 1062
run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
mem/0: location 1097 is 1060
mem/0: location 1060 is 0
run/0: address to copy is 1063
run/0: product 0 is 1063
mem/0: storing 1063 in location 1099
run/0: instruction buffer-append/11
run/0: ingredient 0 is c
mem/0: location 1095 is 52
mem/0: location 1099 is 1063
mem/0: storing 52 in location 1063
run/0: instruction buffer-append/12
run/0: ingredient 0 is len
mem/0: location 1097 is 1060
mem/0: location 1060 is 0
run/0: ingredient 1 is 1
run/0: product 0 is 1
mem/0: location 1097 is 1060
mem/0: storing 1 in location 1060
run/0: instruction buffer-append/13
mem/0: location 1094 is 1060
run/0: result 0 is 1060
mem/0: storing 1060 in location 1006
run/0: instruction integer-to-decimal-string/22
run/0: ingredient 0 is -6
run/0: pc now 16
run/0: instruction integer-to-decimal-string/17
run/0: ingredient 0 is n
mem/0: location 1002 is 23
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1008
run/0: instruction integer-to-decimal-string/18
mem/0: location 1008 is 0
run/0: ingredient 0 is 0
run/0: jump-if fell through
run/0: instruction integer-to-decimal-string/19
run/0: ingredient 0 is n
mem/0: location 1002 is 23
run/0: ingredient 1 is 10
run/0: product 0 is 2
mem/0: storing 2 in location 1002
run/0: product 1 is 3
mem/0: storing 3 in location 1009
run/0: instruction integer-to-decimal-string/20
run/0: ingredient 0 is digit-base
mem/0: location 1007 is 48
run/0: ingredient 1 is digit
mem/0: location 1009 is 3
run/0: product 0 is 51
mem/0: storing 51 in location 1010
run/0: instruction integer-to-decimal-string/21
mem/0: location 1006 is 1060
mem/0: location 1010 is 51
run/0: instruction buffer-append/0
mem/0: new alloc: 1152
mem/0: array size is 30
run/0: instruction buffer-append/1
run/0: product 0 is 1060
mem/0: storing 1060 in location 1154
run/0: instruction buffer-append/2
run/0: product 0 is 51
mem/0: storing 51 in location 1155
run/0: instruction buffer-append/4
mem/0: location 1154 is 1060
run/0: instruction buffer-full?/0
mem/0: new alloc: 1182
mem/0: array size is 30
run/0: instruction buffer-full?/1
run/0: product 0 is 1060
mem/0: storing 1060 in location 1184
run/0: instruction buffer-full?/2
run/0: ingredient 0 is in
mem/0: location 1184 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: its type is 1
mem/0: location 1060 is 1
run/0: product 0 is 1
mem/0: storing 1 in location 1185
run/0: instruction buffer-full?/3
run/0: ingredient 0 is in
mem/0: location 1184 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1186
run/0: instruction buffer-full?/4
mem/0: location 1186 is 1062
mem/0: storing 30 in location 1187
run/0: instruction buffer-full?/5
run/0: ingredient 0 is len
mem/0: location 1185 is 1
run/0: ingredient 1 is capacity
mem/0: location 1187 is 30
run/0: product 0 is 0
mem/0: storing 0 in location 1188
run/0: instruction buffer-full?/6
mem/0: location 1188 is 0
run/0: result 0 is 0
mem/0: storing 0 in location 1156
run/0: instruction buffer-append/5
mem/0: location 1156 is 0
run/0: ingredient 0 is 0
run/0: ingredient 1 is 
run/0: jumping to instruction 7
run/0: instruction buffer-append/8
run/0: ingredient 0 is in
mem/0: location 1154 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: product 0 is 1060
mem/0: storing 1060 in location 1157
run/0: instruction buffer-append/9
run/0: ingredient 0 is in
mem/0: location 1154 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1158
run/0: instruction buffer-append/10
run/0: ingredient 0 is s
mem/0: location 1158 is 1062
run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
mem/0: location 1157 is 1060
mem/0: location 1060 is 1
run/0: address to copy is 1064
run/0: product 0 is 1064
mem/0: storing 1064 in location 1159
run/0: instruction buffer-append/11
run/0: ingredient 0 is c
mem/0: location 1155 is 51
mem/0: location 1159 is 1064
mem/0: storing 51 in location 1064
run/0: instruction buffer-append/12
run/0: ingredient 0 is len
mem/0: location 1157 is 1060
mem/0: location 1060 is 1
run/0: ingredient 1 is 1
run/0: product 0 is 2
mem/0: location 1157 is 1060
mem/0: storing 2 in location 1060
run/0: instruction buffer-append/13
mem/0: location 1154 is 1060
run/0: result 0 is 1060
mem/0: storing 1060 in location 1006
run/0: instruction integer-to-decimal-string/22
run/0: ingredient 0 is -6
run/0: pc now 16
run/0: instruction integer-to-decimal-string/17
run/0: ingredient 0 is n
mem/0: location 1002 is 2
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1008
run/0: instruction integer-to-decimal-string/18
mem/0: location 1008 is 0
run/0: ingredient 0 is 0
run/0: jump-if fell through
run/0: instruction integer-to-decimal-string/19
run/0: ingredient 0 is n
mem/0: location 1002 is 2
run/0: ingredient 1 is 10
run/0: product 0 is 0
mem/0: storing 0 in location 1002
run/0: product 1 is 2
mem/0: storing 2 in location 1009
run/0: instruction integer-to-decimal-string/20
run/0: ingredient 0 is digit-base
mem/0: location 1007 is 48
run/0: ingredient 1 is digit
mem/0: location 1009 is 2
run/0: product 0 is 50
mem/0: storing 50 in location 1010
run/0: instruction integer-to-decimal-string/21
mem/0: location 1006 is 1060
mem/0: location 1010 is 50
run/0: instruction buffer-append/0
mem/0: new alloc: 1212
mem/0: array size is 30
run/0: instruction buffer-append/1
run/0: product 0 is 1060
mem/0: storing 1060 in location 1214
run/0: instruction buffer-append/2
run/0: product 0 is 50
mem/0: storing 50 in location 1215
run/0: instruction buffer-append/4
mem/0: location 1214 is 1060
run/0: instruction buffer-full?/0
mem/0: new alloc: 1242
mem/0: array size is 30
run/0: instruction buffer-full?/1
run/0: product 0 is 1060
mem/0: storing 1060 in location 1244
run/0: instruction buffer-full?/2
run/0: ingredient 0 is in
mem/0: location 1244 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: its type is 1
mem/0: location 1060 is 2
run/0: product 0 is 2
mem/0: storing 2 in location 1245
run/0: instruction buffer-full?/3
run/0: ingredient 0 is in
mem/0: location 1244 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1246
run/0: instruction buffer-full?/4
mem/0: location 1246 is 1062
mem/0: storing 30 in location 1247
run/0: instruction buffer-full?/5
run/0: ingredient 0 is len
mem/0: location 1245 is 2
run/0: ingredient 1 is capacity
mem/0: location 1247 is 30
run/0: product 0 is 0
mem/0: storing 0 in location 1248
run/0: instruction buffer-full?/6
mem/0: location 1248 is 0
run/0: result 0 is 0
mem/0: storing 0 in location 1216
run/0: instruction buffer-append/5
mem/0: location 1216 is 0
run/0: ingredient 0 is 0
run/0: ingredient 1 is 
run/0: jumping to instruction 7
run/0: instruction buffer-append/8
run/0: ingredient 0 is in
mem/0: location 1214 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: product 0 is 1060
mem/0: storing 1060 in location 1217
run/0: instruction buffer-append/9
run/0: ingredient 0 is in
mem/0: location 1214 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1218
run/0: instruction buffer-append/10
run/0: ingredient 0 is s
mem/0: location 1218 is 1062
run/0: ingredient 1 is {name: "len", value: 4, type: 2-1, properties: ["len": "address":"integer", "deref": ]}
mem/0: location 1217 is 1060
mem/0: location 1060 is 2
run/0: address to copy is 1065
run/0: product 0 is 1065
mem/0: storing 1065 in location 1219
run/0: instruction buffer-append/11
run/0: ingredient 0 is c
mem/0: location 1215 is 50
mem/0: location 1219 is 1065
mem/0: storing 50 in location 1065
run/0: instruction buffer-append/12
run/0: ingredient 0 is len
mem/0: location 1217 is 1060
mem/0: location 1060 is 2
run/0: ingredient 1 is 1
run/0: product 0 is 3
mem/0: location 1217 is 1060
mem/0: storing 3 in location 1060
run/0: instruction buffer-append/13
mem/0: location 1214 is 1060
run/0: result 0 is 1060
mem/0: storing 1060 in location 1006
run/0: instruction integer-to-decimal-string/22
run/0: ingredient 0 is -6
run/0: pc now 16
run/0: instruction integer-to-decimal-string/17
run/0: ingredient 0 is n
mem/0: location 1002 is 0
run/0: ingredient 1 is 0
run/0: product 0 is 1
mem/0: storing 1 in location 1008
run/0: instruction integer-to-decimal-string/18
mem/0: location 1008 is 1
run/0: ingredient 0 is 1
run/0: ingredient 1 is 
run/0: jumping to instruction 23
run/0: instruction integer-to-decimal-string/25
mem/0: location 1004 is 0
run/0: ingredient 0 is 0
run/0: ingredient 1 is 
run/0: jumping to instruction 27
run/0: instruction integer-to-decimal-string/28
run/0: ingredient 0 is tmp
mem/0: location 1006 is 1060
run/0: ingredient 1 is length
run/0: address to copy is 1060
run/0: its type is 1
mem/0: location 1060 is 3
run/0: product 0 is 3
mem/0: storing 3 in location 1011
run/0: instruction integer-to-decimal-string/29
run/0: ingredient 0 is tmp
mem/0: location 1006 is 1060
run/0: ingredient 1 is data
run/0: address to copy is 1061
run/0: its type is 2
mem/0: location 1061 is 1062
run/0: product 0 is 1062
mem/0: storing 1062 in location 1012
run/0: instruction integer-to-decimal-string/30
mem/0: new alloc: 1272
mem/0: storing 1272 in location 1003
mem/0: location 1011 is 3
mem/0: array size is 3
run/0: instruction integer-to-decimal-string/31
run/0: ingredient 0 is len
mem/0: location 1011 is 3
run/0: ingredient 1 is 1
run/0: product 0 is 2
mem/0: storing 2 in location 1013
run/0: instruction integer-to-decimal-string/32
run/0: ingredient 0 is 0
mem/0: storing 0 in location 1014
run/0: instruction integer-to-decimal-string/34
run/0: ingredient 0 is i
mem/0: location 1013 is 2
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1008
run/0: instruction integer-to-decimal-string/35
mem/0: location 1008 is 0
run/0: ingredient 0 is 0
run/0: jump-if fell through
run/0: instruction integer-to-decimal-string/36
run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
mem/0: location 1012 is 1062
run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
mem/0: location 1013 is 2
run/0: address to copy is 1065
run/0: its type is 4
mem/0: location 1065 is 50
run/0: product 0 is 50
mem/0: storing 50 in location 1015
run/0: instruction integer-to-decimal-string/37
run/0: ingredient 0 is result
mem/0: location 1003 is 1272
run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
mem/0: location 1014 is 0
run/0: address to copy is 1273
run/0: product 0 is 1273
mem/0: storing 1273 in location 1016
run/0: instruction integer-to-decimal-string/38
run/0: ingredient 0 is src
mem/0: location 1015 is 50
mem/0: location 1016 is 1273
mem/0: storing 50 in location 1273
run/0: instruction integer-to-decimal-string/39
run/0: ingredient 0 is i
mem/0: location 1013 is 2
run/0: ingredient 1 is 1
run/0: product 0 is 1
mem/0: storing 1 in location 1013
run/0: instruction integer-to-decimal-string/40
run/0: ingredient 0 is j
mem/0: location 1014 is 0
run/0: ingredient 1 is 1
run/0: product 0 is 1
mem/0: storing 1 in location 1014
run/0: instruction integer-to-decimal-string/41
run/0: ingredient 0 is -8
run/0: pc now 33
run/0: instruction integer-to-decimal-string/34
run/0: ingredient 0 is i
mem/0: location 1013 is 1
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1008
run/0: instruction integer-to-decimal-string/35
mem/0: location 1008 is 0
run/0: ingredient 0 is 0
run/0: jump-if fell through
run/0: instruction integer-to-decimal-string/36
run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
mem/0: location 1012 is 1062
run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
mem/0: location 1013 is 1
run/0: address to copy is 1064
run/0: its type is 4
mem/0: location 1064 is 51
run/0: product 0 is 51
mem/0: storing 51 in location 1015
run/0: instruction integer-to-decimal-string/37
run/0: ingredient 0 is result
mem/0: location 1003 is 1272
run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
mem/0: location 1014 is 1
run/0: address to copy is 1274
run/0: product 0 is 1274
mem/0: storing 1274 in location 1016
run/0: instruction integer-to-decimal-string/38
run/0: ingredient 0 is src
mem/0: location 1015 is 51
mem/0: location 1016 is 1274
mem/0: storing 51 in location 1274
run/0: instruction integer-to-decimal-string/39
run/0: ingredient 0 is i
mem/0: location 1013 is 1
run/0: ingredient 1 is 1
run/0: product 0 is 0
mem/0: storing 0 in location 1013
run/0: instruction integer-to-decimal-string/40
run/0: ingredient 0 is j
mem/0: location 1014 is 1
run/0: ingredient 1 is 1
run/0: product 0 is 2
mem/0: storing 2 in location 1014
run/0: instruction integer-to-decimal-string/41
run/0: ingredient 0 is -8
run/0: pc now 33
run/0: instruction integer-to-decimal-string/34
run/0: ingredient 0 is i
mem/0: location 1013 is 0
run/0: ingredient 1 is 0
run/0: product 0 is 0
mem/0: storing 0 in location 1008
run/0: instruction integer-to-decimal-string/35
mem/0: location 1008 is 0
run/0: ingredient 0 is 0
run/0: jump-if fell through
run/0: instruction integer-to-decimal-string/36
run/0: ingredient 0 is {name: "buf", value: 11, type: 2-5-4, properties: ["buf": "address":"array":"character", "deref": ]}
mem/0: location 1012 is 1062
run/0: ingredient 1 is {name: "i", value: 12, type: 1, properties: ["i": "integer"]}
mem/0: location 1013 is 0
run/0: address to copy is 1063
run/0: its type is 4
mem/0: location 1063 is 52
run/0: product 0 is 52
mem/0: storing 52 in location 1015
run/0: instruction integer-to-decimal-string/37
run/0: ingredient 0 is result
mem/0: location 1003 is 1272
run/0: ingredient 1 is {name: "j", value: 13, type: 1, properties: ["j": "integer"]}
mem/0: location 1014 is 2
run/0: address to copy is 1275
run/0: product 0 is 1275
mem/0: storing 1275 in location 1016
run/0: instruction integer-to-decimal-string/38
run/0: ingredient 0 is src
mem/0: location 1015 is 52
mem/0: location 1016 is 1275
mem/0: storing 52 in location 1275
run/0: instruction integer-to-decimal-string/39
run/0: ingredient 0 is i
mem/0: location 1013 is 0
run/0: ingredient 1 is 1
run/0: product 0 is -1
mem/0: storing -1 in location 1013
run/0: instruction integer-to-decimal-string/40
run/0: ingredient 0 is j
mem/0: location 1014 is 2
run/0: ingredient 1 is 1
run/0: product 0 is 3
mem/0: storing 3 in location 1014
run/0: instruction integer-to-decimal-string/41
run/0: ingredient 0 is -8
run/0: pc now 33
run/0: instruction integer-to-decimal-string/34
run/0: ingredient 0 is i
mem/0: location 1013 is -1
run/0: ingredient 1 is 0
run/0: product 0 is 1
mem/0: storing 1 in location 1008
run/0: instruction integer-to-decimal-string/35
mem/0: location 1008 is 1
run/0: ingredient 0 is 1
run/0: ingredient 1 is 
run/0: jumping to instruction 42
run/0: instruction integer-to-decimal-string/43
mem/0: location 1003 is 1272
run/0: result 0 is 1272
mem/0: storing 1272 in location 1
run/0: instruction test-integer-to-decimal-digit-positive/1
run/0: ingredient 0 is 1
mem/0: location 1 is 1272
mem/0: location 1272 is 3
mem/0: location 1273 is 50
mem/0: location 1274 is 51
mem/0: location 1275 is 52
mem/0: storing 3 in location 2
mem/0: storing 50 in location 3
mem/0: storing 51 in location 4
mem/0: storing 52 in location 5