Heap space exhausted - solution and why

Coming back to this now, I think the issue is in the data structure Dialog uses to hold the word-to-object mappings, known as the “wordmap”. This data structure is entirely undocumented, but this is the code that generates it, in backend_z.c:

static int generate_wordmap(struct wordmap *map, int *nptr) {
	int n, j, k, id, len;
	uint8_t data[1 + 2 * MAXWORDMAP];
	uint16_t words[map->nmap * 2];

	n = map->nmap;
	if(map->map[n - 1].key == 0xffff) n--;
	assert(n > 0);
	*nptr = n;
	for(j = 0; j < n; j++) {
		words[2 * j + 0] = map->map[j].key;
		if(map->map[j].count > MAXWORDMAP) {
			words[2 * j + 1] = 0;
		} else if(map->map[j].count == 1) {
			words[2 * j + 1] = 1 + map->map[j].onumtable[0];
		} else {
			len = 1;
			for(k = 0; k < map->map[j].count; k++) {
				id = 1 + map->map[j].onumtable[k];
				if(id < 0xe0) {
					data[len++] = id;
				} else {
					assert(id <= 0x1fff);
					data[len++] = 0xe0 | (id >> 8);
					data[len++] = id & 0xff;
				}
			}
			data[0] = len - 1;
			for(k = 0; k < ndatatable; k++) {
				if(datatable[k].length == len
				&& !memcmp(datatable[k].data, data, len)) {
					break;
				}
			}
			if(k == ndatatable) {
				datatable = realloc(datatable, ++ndatatable * sizeof(*datatable));
				datatable[k].label = make_global_label();
				datatable[k].length = len;
				datatable[k].data = malloc(len);
				memcpy(datatable[k].data, data, len);
			}
			words[2 * j + 1] = 0x8000 | datatable[k].label;
		}
	}
	for(j = 0; j < nwordtable; j++) {
		if(wordtable[j].length == n * 2
		&& !memcmp(wordtable[j].words, words, n * 2 * sizeof(uint16_t))) {
			break;
		}
	}
	if(j == nwordtable) {
		wordtable = realloc(wordtable, ++nwordtable * sizeof(*wordtable));
		wordtable[j].label = make_global_label();
		wordtable[j].length = n * 2;
		wordtable[j].words = malloc(n * 2 * sizeof(uint16_t));
		memcpy(wordtable[j].words, words, n * 2 * sizeof(uint16_t));
	}
	return j;
}

And this is how it’s called, when it encounters the instruction CHECK_WORDMAP in the intermediate representation of the code:

assert(ci->oper[0].tag == OPER_NUM);
assert(ci->oper[2].tag == OPER_PRED);
assert(ci->oper[0].value < prg->predicates[ci->oper[2].value]->pred->nwordmap);
map = &prg->predicates[ci->oper[2].value]->pred->wordmaps[ci->oper[0].value];
id = generate_wordmap(map, &n);
zi = append_instr(r, Z_CALLVS);
zi->oper[0] = ROUTINE(R_WORDMAP);
zi->oper[1] = REF(wordtable[id].label);
zi->oper[2] = SMALL_OR_LARGE(n);
zi->oper[3] = VALUE(REG_IDX);
zi->store = REG_TEMP;
zi = append_instr(r, Z_JNZ);
zi->oper[0] = VALUE(REG_TEMP);
if(ci->oper[1].tag == OPER_FAIL) {
	zi->branch = RFALSE;
} else {
	assert(ci->oper[1].tag == OPER_RLAB);
	if(pred->routines[ci->oper[1].value].reftrack == r_id) {
		zi->branch = llabel[ci->oper[1].value];
		if(!encountered[ci->oper[1].value]) {
			rstack[rsp++] = ci->oper[1].value;
			encountered[ci->oper[1].value] = 1;
		}
	} else {
		ll = r->next_label++;
		zi->op ^= OP_NOT;
		zi->branch = ll;
		zi = append_instr(r, Z_RET);
		zi->oper[0] = ROUTINE(rlabel[ci->oper[1].value]);
		zi = append_instr(r, OP_LABEL(ll));
	}
}
break;

I’m utterly baffled by what’s going on here, but maybe someone with better C or Z-machine skills will recognize what’s happening. If only there were comments!

4 Likes

Blimey! That’s some seriously inscrutable code.

1 Like

This seems to be the implementation for (determine object $) .. (from words) .. (matching all of $) built-in predicate, described in the I/O chapter.

2 Likes

My hypothesis was that the error arose when the number of steps of binary search needed to find a word in some data structure exceeded a certain amount. That would explain why the error appears not at all below a certain number of words, unpredictably for a while beyond that (because unless the number of words is an exact power of two, some words will require one more step than others), and consistently once you reach some further point.

The veneer routine R_WORDMAP (in runtime_z.c) does indeed contain logic to do a binary search on the wordmap if it contains at least 16 entries. But it’s a pretty small loop and certainly doesn’t appear to contain anything that could lead to a heap allocation, so I don’t think that can be it at all:

R_WORDMAP
R_WORDMAP,
		5,
			// 0 (param): raw pointer to wordmap, then entry address, then payload pos
			// 1 (param): number of entries in wordmap, then payload pointer
			// 2 (param): deref'd key, then payload size
			// 3: pivot index, payload byte
			// 4: pivot element, object number
		(struct zinstr []) {
			{Z_JL, {VALUE(REG_LOCAL+1), SMALL(16)}, 0, 3},

			// If the table is very large, use binary search.
			{OP_LABEL(5)},
			{Z_AND, {VALUE(REG_LOCAL+1), LARGE(0xfffe)}, REG_LOCAL+3}, // divide length by two, then multiply by two
			{Z_LOADW, {VALUE(REG_LOCAL+0), VALUE(REG_LOCAL+3)}, REG_LOCAL+4},
			{Z_JL, {VALUE(REG_LOCAL+2), VALUE(REG_LOCAL+4)}, 0, 4},

			{Z_ADD, {VALUE(REG_LOCAL+0), VALUE(REG_LOCAL+3)}, REG_LOCAL+0},
			{Z_ADD, {VALUE(REG_LOCAL+0), VALUE(REG_LOCAL+3)}, REG_LOCAL+0},
			{Z_INC, {SMALL(REG_LOCAL+1)}}, // round up in the shift

			{OP_LABEL(4)},
			{Z_LSHIFT, {VALUE(REG_LOCAL+1), VALUE(REG_FFFF)}, REG_LOCAL+1},
			{Z_JGE, {VALUE(REG_LOCAL+1), SMALL(16)}, 0, 5},

			{OP_LABEL(3)},

			// For an unknown word, perhaps a verb, return true without pushing anything.
			{Z_SCANTABLE_N, {VALUE(REG_LOCAL+2), VALUE(REG_LOCAL+0), VALUE(REG_LOCAL+1), SMALL(0x84)}, REG_LOCAL+0, RTRUE},

			{Z_LOADW, {VALUE(REG_LOCAL+0), SMALL(1)}, REG_LOCAL+1},
			// For a common word, perhaps 'of', return false without pushing anything.
			{Z_JZ, {VALUE(REG_LOCAL+1)}, 0, RFALSE},

			// For a known word, push a number of objects and return true.
			{Z_JG, {VALUE(REG_LOCAL+1), REF(G_OBJECT_ID_END)}, 0, 2},

			// Special treatment for single-element lists: The
			// object table is located before the wordmaps, so
			// object numbers can't collide with addresses.
			{Z_CALL2N, {ROUTINE(R_AUX_PUSH1), VALUE(REG_LOCAL+1)}},
			{Z_RTRUE},

			{OP_LABEL(2)},
			{Z_LOADB, {VALUE(REG_LOCAL+1), SMALL(0)}, REG_LOCAL+2},
			{Z_STORE, {SMALL(REG_LOCAL+0), SMALL(1)}},

			{OP_LABEL(1)},
			{Z_LOADB, {VALUE(REG_LOCAL+1), VALUE(REG_LOCAL+0)}, REG_LOCAL+4},
			{Z_JL, {VALUE(REG_LOCAL+4), SMALL(0xe0)}, 0, 6},

			{Z_INC, {SMALL(REG_LOCAL+0)}},
			{Z_LOADB, {VALUE(REG_LOCAL+1), VALUE(REG_LOCAL+0)}, REG_LOCAL+3},

			{Z_AND, {VALUE(REG_LOCAL+4), SMALL(0x1f)}, REG_LOCAL+4},
			{Z_LSHIFT, {VALUE(REG_LOCAL+4), SMALL(8)}, REG_LOCAL+4},
			{Z_OR, {VALUE(REG_LOCAL+4), VALUE(REG_LOCAL+3)}, REG_LOCAL+4},

			{OP_LABEL(6)},
			{Z_CALL2N, {ROUTINE(R_AUX_PUSH1), VALUE(REG_LOCAL+4)}},
			{Z_INC_JLE, {SMALL(REG_LOCAL+0), VALUE(REG_LOCAL+2)}, 0, 1},

			{Z_RTRUE},
			{Z_END},
		}
3 Likes

Notably, backend_z.c does contain a specific limit on how many dictionary words there can be:

	if(prg->ndictword >= 0x1e00) {
		report(LVL_ERR, 0, "Too many dictionary words.");
		exit(1);
	}

Which suggests that this code is supposed to be robust enough to work up to 7680 words, and this crash is not expected behavior.

3 Likes

From the Å-machine documentation, this is how the I_CHECK_WORDMAP instruction is supposed to work:

local variable objs[] = find_in_wordmap(wordmaps[arg1], IDX)
if(objs == null) {
	// The word was not in the table, and should not
	// match anything.
	// Nothing was pushed, so jump to enforce that.
	INST = arg2
} else if(objs.length == 0) {
	// The word is a wildcard, so don't jump.
} else {
	// The word matches a limited number of objects.
	// Push them and jump to enforce that.
	if(AUX + objs.length > TRL) runtime_error(2)
	for(local variable i = 0; i < objs.length; i++) {
		aux[AUX++] = objs[i]
	}
	INST = arg2
}

IDX is a general-purpose register, INST is the program counter.

Each wordmap is an array of entries, where each entry consists of a dictionary word and a payload; the payload is either null, a single object ID, or a pointer to a null-terminated array of object IDs in memory.

I think the next thing I want to do is add various debugging output to the wordmap generator in the compiler, then take some code that doesn’t trigger the bug, and some code that does trigger the bug, and see what the difference in the data structures is.

Do we have a good test case that’s right at the edge of reliably triggering this behavior?

1 Like

@bkirwi had a post above…

…that might be useful.

(sorry for the formatting, i don’t know how to cleanly insert a link to another post).

Based on our experiences so far, taking any PD/open source code with lots of objects and adding per object variables to an object is a promising way to trigger those parsing fails in z-machine.

@Pacian posted an example here: Heap space exhausted - solution and why - #31 by Pacian

… and I posted a partial list of which vocab words do and don’t appear to lead to crashes a few posts later: Heap space exhausted - solution and why - #33 by jwalrus

2 Likes

Here’s the output of compiling the original explode.dg for Z5 format with default heap sizes, with the new tracing added.

Long output follows
Wordtable #0, length 72
	above #up below #down ceiling #up down #down 
	east #east eastern #east in #in ne #northeast 
	north #north north-east #northeast north-west #northwest northeast #northeast 
	northern #north northwest #northwest nw #northwest out #out 
	outside #out outwards #out se #southeast sky #up 
	south #south south-east #southeast south-west #southwest southeast #southeast 
	southern #south southwest #southwest sw #southwest up #up 
	west #west western #west 'd' #down 'e' #east 
	'n' #north 's' #south 'u' #up 'w' #west 
Wordtable #1, length 208
	acceptable ->0 acceptance ->1 battery ->2 bedroom ->3 
	bill ->4 bleed ->5 breast ->6 burial ->7 
	cause ->8 charismatic ->9 cheek ->10 column ->11 
	convulsion ->12 crisis ->13 dark #darkness darkness #darkness 
	depend ->14 detector ->15 diet ->16 dip ->17 
	ear ->18 efflux ->19 electronics ->20 emphasis ->21 
	essential ->22 execute ->23 fairy ->24 familiar ->25 
	few ->26 fibre ->27 flagged (none) foot ->28 
	fountain ->29 halt ->30 hammer ->31 harsh ->32 
	hay ->33 helpless ->34 herd ->35 hide ->36 
	holiday ->37 hostage ->38 ice ->39 identity ->40 
	ignore ->41 incentive ->42 jail (none) jockey ->43 
	kick ->44 latest ->45 learn ->46 lifestyle ->47 
	lift ->48 litigation ->49 location #Room1 loop ->50 
	manufacture ->51 ministry ->52 miss ->53 mist ->54 
	modernize ->55 mosque ->56 need ->57 organize ->58 
	party ->59 patience ->60 peace ->61 pension ->62 
	pin ->63 plain ->64 preparation ->65 provoke ->66 
	publisher ->67 pyramid ->68 receipt ->69 relief ->70 
	remunerate ->71 requirement ->72 rider ->73 robot ->74 
	room #Room1 salt ->75 satellite ->76 scrap ->77 
	secular ->78 shake ->79 slant ->80 soprano ->81 
	soul ->82 splurge ->83 standard ->84 stride ->85 
	suburb ->86 suspicion ->87 temporary ->88 theory ->89 
	thumb ->90 tidy ->91 toss ->92 tower ->93 
	tropical ->94 upset ->95 wake ->96 worm ->97 
Wordtable #2, length 210
	acceptable ->0 acceptance ->1 battery ->2 bedroom ->3 
	bill ->4 bleed ->5 breast ->6 burial ->7 
	cause ->8 charismatic ->9 cheek ->10 column ->11 
	convulsion ->12 crisis ->13 darkness #darkness depend ->14 
	detector ->15 diet ->16 dip ->17 ear ->18 
	efflux ->19 electronics ->20 emphasis ->21 essential ->22 
	execute ->23 fairy ->24 familiar ->25 few ->26 
	fibre ->27 foot ->28 fountain ->29 halt ->30 
	hammer ->31 harsh ->32 hay ->33 helpless ->34 
	herd ->35 hide ->36 holiday ->37 hostage ->38 
	ice ->39 identity ->40 ignore ->41 incentive ->42 
	jail (none) jockey ->43 kick ->44 latest ->45 
	learn ->46 lifestyle ->47 lift ->48 litigation ->49 
	location (none) loop ->50 manufacture ->51 ministry ->52 
	miss ->53 mist ->54 modernize ->55 mosque ->56 
	need ->57 organize ->58 party ->59 patience ->60 
	peace ->61 pension ->62 pin ->63 plain ->64 
	preparation ->65 provoke ->66 publisher ->67 pyramid ->68 
	receipt ->69 relief ->70 remunerate ->71 requirement ->72 
	rider ->73 robot ->74 room #Room1 salt ->75 
	satellite ->76 scrap ->77 secular ->78 shake ->79 
	slant ->80 soprano ->81 soul ->82 splurge ->83 
	standard ->84 stride ->85 suburb ->86 suspicion ->87 
	temporary ->88 the (none) theory ->89 this (none) 
	thumb ->90 tidy ->91 toss ->92 tower ->93 
	tropical ->94 upset ->95 wake ->96 worm ->97 
	yourself (none) 
Datatable #0, length 29, address 6e32
	#Object23 #Object91 #Object104 #Object120 
	#Object203 #Object250 #Object272 #Object276 
	#Object341 #Object348 #Object352 #Object385 
	#Object450 #Object460 #Object523 #Object561 
	#Object798 
Datatable #1, length 23, address 6e4f
	#Object17 #Object46 #Object63 #Object108 
	#Object161 #Object192 #Object206 #Object268 
	#Object291 #Object308 #Object422 #Object442 
	#Object452 #Object490 #Object772 
Datatable #2, length 32, address 6e66
	#Object26 #Object85 #Object100 #Object118 
	#Object145 #Object208 #Object293 #Object306 
	#Object331 #Object428 #Object442 #Object443 
	#Object558 #Object595 #Object609 #Object613 
	#Object672 #Object681 #Object694 
Datatable #3, length 37, address 6e86
	#Object31 #Object55 #Object119 #Object143 
	#Object172 #Object271 #Object282 #Object290 
	#Object292 #Object382 #Object394 #Object404 
	#Object430 #Object547 #Object559 #Object598 
	#Object602 #Object665 #Object669 #Object709 
	#Object782 
Datatable #4, length 25, address 6eab
	#Object19 #Object4 #Object24 #Object109 
	#Object182 #Object264 #Object340 #Object384 
	#Object391 #Object401 #Object415 #Object452 
	#Object637 #Object640 #Object722 
Datatable #5, length 27, address 6ec4
	#Object21 #Object2 #Object37 #Object48 
	#Object62 #Object114 #Object122 #Object165 
	#Object201 #Object296 #Object397 #Object495 
	#Object522 #Object529 #Object549 #Object589 
	#Object723 #Object779 
Datatable #6, length 25, address 6edf
	#Object19 #Object48 #Object84 #Object238 
	#Object252 #Object338 #Object358 #Object506 
	#Object535 #Object603 #Object617 #Object646 
	#Object667 #Object706 
Datatable #7, length 19, address 6ef8
	#Object13 #Object72 #Object164 #Object183 
	#Object196 #Object311 #Object326 #Object362 
	#Object448 #Object470 #Object586 #Object632 
Datatable #8, length 35, address 6f0b
	#Object29 #Object155 #Object210 #Object228 
	#Object252 #Object333 #Object335 #Object352 
	#Object403 #Object436 #Object453 #Object456 
	#Object476 #Object498 #Object578 #Object592 
	#Object677 #Object695 #Object756 
Datatable #9, length 48, address 6f2e
	#Object42 #Object67 #Object154 #Object166 
	#Object180 #Object209 #Object269 #Object279 
	#Object280 #Object315 #Object320 #Object336 
	#Object396 #Object415 #Object447 #Object472 
	#Object499 #Object559 #Object560 #Object562 
	#Object608 #Object677 #Object730 #Object756 
	#Object761 #Object786 #Object788 
Datatable #10, length 39, address 6f5e
	#Object33 #Object92 #Object99 #Object120 
	#Object138 #Object186 #Object216 #Object251 
	#Object314 #Object327 #Object354 #Object390 
	#Object408 #Object409 #Object511 #Object557 
	#Object566 #Object625 #Object634 #Object653 
	#Object675 #Object730 #Object740 
Datatable #11, length 33, address 6f85
	#Object27 #Object21 #Object41 #Object73 
	#Object78 #Object128 #Object204 #Object222 
	#Object258 #Object306 #Object313 #Object528 
	#Object535 #Object542 #Object574 #Object604 
	#Object620 #Object631 #Object635 #Object655 
Datatable #12, length 21, address 6fa6
	#Object15 #Object86 #Object125 #Object149 
	#Object179 #Object295 #Object473 #Object517 
	#Object630 #Object633 #Object701 #Object724 
	#Object738 
Datatable #13, length 27, address 6fbb
	#Object21 #Object108 #Object126 #Object132 
	#Object159 #Object286 #Object288 #Object335 
	#Object368 #Object376 #Object395 #Object445 
	#Object457 #Object499 #Object530 #Object586 
Datatable #14, length 38, address 6fd6
	#Object32 #Object20 #Object23 #Object126 
	#Object139 #Object141 #Object152 #Object159 
	#Object162 #Object167 #Object226 #Object240 
	#Object261 #Object285 #Object403 #Object475 
	#Object492 #Object513 #Object550 #Object664 
	#Object708 #Object742 #Object752 #Object766 
Datatable #15, length 20, address 6ffc
	#Object14 #Object72 #Object111 #Object131 
	#Object183 #Object201 #Object212 #Object215 
	#Object302 #Object422 #Object483 #Object612 
	#Object714 #Object791 
Datatable #16, length 28, address 7010
	#Object22 #Object9 #Object19 #Object27 
	#Object39 #Object54 #Object68 #Object93 
	#Object130 #Object213 #Object366 #Object416 
	#Object427 #Object488 #Object492 #Object546 
	#Object685 #Object753 #Object789 
Datatable #17, length 31, address 702c
	#Object25 #Object12 #Object101 #Object110 
	#Object122 #Object270 #Object312 #Object405 
	#Object493 #Object544 #Object622 #Object637 
	#Object647 #Object660 #Object661 #Object704 
	#Object741 #Object780 
Datatable #18, length 31, address 704b
	#Object25 #Object15 #Object127 #Object135 
	#Object202 #Object247 #Object342 #Object388 
	#Object418 #Object478 #Object619 #Object639 
	#Object645 #Object657 #Object686 #Object758 
	#Object764 #Object786 
Datatable #19, length 34, address 706a
	#Object28 #Object40 #Object141 #Object143 
	#Object144 #Object157 #Object228 #Object289 
	#Object297 #Object317 #Object497 #Object532 
	#Object541 #Object547 #Object598 #Object629 
	#Object667 #Object670 #Object690 #Object752 
Datatable #20, length 30, address 708c
	#Object24 #Object40 #Object163 #Object168 
	#Object241 #Object275 #Object321 #Object322 
	#Object328 #Object387 #Object420 #Object459 
	#Object485 #Object550 #Object650 #Object723 
	#Object789 
Datatable #21, length 25, address 70aa
	#Object19 #Object14 #Object36 #Object76 
	#Object215 #Object309 #Object366 #Object378 
	#Object399 #Object472 #Object534 #Object589 
	#Object599 #Object744 #Object746 
Datatable #22, length 25, address 70c3
	#Object19 #Object16 #Object106 #Object131 
	#Object135 #Object206 #Object210 #Object234 
	#Object278 #Object369 #Object381 #Object395 
	#Object439 #Object596 #Object693 #Object768 
Datatable #23, length 20, address 70dc
	#Object14 #Object17 #Object416 #Object462 
	#Object495 #Object508 #Object542 #Object545 
	#Object621 #Object689 #Object745 
Datatable #24, length 33, address 70f0
	#Object27 #Object36 #Object46 #Object60 
	#Object88 #Object129 #Object205 #Object372 
	#Object392 #Object549 #Object566 #Object594 
	#Object626 #Object711 #Object712 #Object739 
	#Object753 #Object759 #Object764 #Object798 
Datatable #25, length 21, address 7111
	#Object15 #Object7 #Object98 #Object136 
	#Object171 #Object227 #Object248 #Object405 
	#Object445 #Object514 #Object548 #Object554 
	#Object627 
Datatable #26, length 34, address 7126
	#Object28 #Object17 #Object112 #Object185 
	#Object221 #Object224 #Object256 #Object305 
	#Object312 #Object402 #Object409 #Object425 
	#Object473 #Object552 #Object572 #Object615 
	#Object649 #Object710 #Object726 
Datatable #27, length 32, address 7148
	#Object26 #Object56 #Object116 #Object147 
	#Object149 #Object193 #Object347 #Object360 
	#Object367 #Object407 #Object413 #Object454 
	#Object487 #Object508 #Object600 #Object609 
	#Object652 #Object736 #Object769 
Datatable #28, length 23, address 7168
	#Object17 #Object5 #Object113 #Object307 
	#Object344 #Object362 #Object364 #Object406 
	#Object671 #Object691 #Object706 #Object719 
	#Object791 
Datatable #29, length 31, address 717f
	#Object25 #Object8 #Object88 #Object101 
	#Object106 #Object137 #Object204 #Object237 
	#Object272 #Object323 #Object414 #Object590 
	#Object620 #Object641 #Object665 #Object668 
	#Object692 #Object748 #Object765 
Datatable #30, length 29, address 719e
	#Object23 #Object7 #Object32 #Object134 
	#Object138 #Object261 #Object297 #Object302 
	#Object326 #Object552 #Object568 #Object583 
	#Object601 #Object664 #Object689 #Object703 
	#Object738 
Datatable #31, length 43, address 71bb
	#Object37 #Object3 #Object24 #Object35 
	#Object50 #Object174 #Object198 #Object300 
	#Object313 #Object324 #Object343 #Object383 
	#Object388 #Object434 #Object530 #Object545 
	#Object635 #Object682 #Object696 #Object734 
	#Object737 #Object757 #Object759 #Object796 
	#Object799 
Datatable #32, length 19, address 71e6
	#Object13 #Object84 #Object153 #Object167 
	#Object189 #Object237 #Object599 #Object651 
	#Object684 #Object700 #Object744 #Object787 
Datatable #33, length 27, address 71f9
	#Object21 #Object45 #Object71 #Object102 
	#Object169 #Object187 #Object189 #Object229 
	#Object288 #Object322 #Object407 #Object474 
	#Object605 #Object679 #Object728 #Object761 
	#Object780 
Datatable #34, length 46, address 7214
	#Object40 #Object37 #Object60 #Object117 
	#Object177 #Object198 #Object219 #Object254 
	#Object338 #Object348 #Object349 #Object353 
	#Object386 #Object392 #Object500 #Object510 
	#Object561 #Object569 #Object583 #Object590 
	#Object618 #Object636 #Object654 #Object729 
	#Object767 #Object779 
Datatable #35, length 24, address 7242
	#Object18 #Object47 #Object156 #Object214 
	#Object263 #Object361 #Object520 #Object521 
	#Object539 #Object555 #Object576 #Object668 
	#Object696 #Object704 
Datatable #36, length 19, address 725a
	#Object13 #Object168 #Object196 #Object380 
	#Object453 #Object480 #Object486 #Object683 
	#Object733 #Object748 #Object775 
Datatable #37, length 21, address 726d
	#Object15 #Object169 #Object207 #Object267 
	#Object318 #Object397 #Object432 #Object464 
	#Object467 #Object576 #Object592 #Object631 
Datatable #38, length 31, address 7282
	#Object25 #Object14 #Object52 #Object110 
	#Object115 #Object139 #Object142 #Object173 
	#Object197 #Object199 #Object202 #Object243 
	#Object269 #Object389 #Object436 #Object555 
	#Object602 #Object607 #Object688 #Object690 
	#Object749 
Datatable #39, length 25, address 72a1
	#Object19 #Object25 #Object97 #Object114 
	#Object184 #Object264 #Object291 #Object304 
	#Object355 #Object406 #Object413 #Object417 
	#Object456 #Object519 #Object531 
Datatable #40, length 29, address 72ba
	#Object23 #Object61 #Object69 #Object87 
	#Object174 #Object220 #Object266 #Object365 
	#Object398 #Object414 #Object437 #Object516 
	#Object523 #Object680 #Object770 #Object793 
	#Object794 
Datatable #41, length 25, address 72d7
	#Object19 #Object115 #Object161 #Object253 
	#Object287 #Object309 #Object396 #Object494 
	#Object525 #Object684 #Object715 #Object743 
	#Object760 #Object790 
Datatable #42, length 42, address 72f0
	#Object36 #Object26 #Object34 #Object57 
	#Object59 #Object140 #Object307 #Object329 
	#Object358 #Object361 #Object383 #Object429 
	#Object435 #Object505 #Object507 #Object546 
	#Object553 #Object570 #Object573 #Object626 
	#Object642 #Object676 #Object717 #Object718 
Datatable #43, length 44, address 731a
	#Object38 #Object3 #Object22 #Object132 
	#Object170 #Object212 #Object236 #Object240 
	#Object250 #Object263 #Object298 #Object303 
	#Object357 #Object384 #Object400 #Object431 
	#Object435 #Object468 #Object538 #Object541 
	#Object607 #Object656 #Object672 #Object733 
	#Object755 
Datatable #44, length 29, address 7346
	#Object23 #Object42 #Object64 #Object95 
	#Object100 #Object146 #Object147 #Object148 
	#Object190 #Object221 #Object259 #Object364 
	#Object412 #Object440 #Object483 #Object502 
	#Object517 #Object621 #Object751 
Datatable #45, length 36, address 7363
	#Object30 #Object34 #Object85 #Object89 
	#Object356 #Object382 #Object400 #Object427 
	#Object479 #Object509 #Object531 #Object537 
	#Object582 #Object614 #Object697 #Object709 
	#Object731 #Object736 #Object750 #Object781 
Datatable #46, length 36, address 7387
	#Object30 #Object6 #Object38 #Object162 
	#Object177 #Object211 #Object333 #Object350 
	#Object489 #Object503 #Object511 #Object540 
	#Object570 #Object585 #Object623 #Object624 
	#Object644 #Object673 #Object745 #Object775 
	#Object792 
Datatable #47, length 20, address 73ab
	#Object14 #Object51 #Object349 #Object451 
	#Object455 #Object476 #Object481 #Object629 
	#Object702 #Object715 #Object718 
Datatable #48, length 21, address 73bf
	#Object15 #Object27 #Object175 #Object241 
	#Object410 #Object490 #Object565 #Object581 
	#Object593 #Object707 #Object713 #Object727 
Datatable #49, length 22, address 73d4
	#Object16 #Object179 #Object238 #Object275 
	#Object446 #Object458 #Object507 #Object675 
	#Object716 #Object734 #Object737 #Object772 
Datatable #50, length 41, address 73ea
	#Object35 #Object102 #Object140 #Object187 
	#Object195 #Object298 #Object305 #Object311 
	#Object325 #Object344 #Object393 #Object439 
	#Object447 #Object518 #Object532 #Object611 
	#Object623 #Object639 #Object644 #Object697 
	#Object773 #Object783 #Object794 
Datatable #51, length 35, address 7413
	#Object29 #Object18 #Object66 #Object78 
	#Object173 #Object229 #Object247 #Object259 
	#Object268 #Object347 #Object374 #Object454 
	#Object475 #Object477 #Object524 #Object617 
	#Object735 #Object770 #Object795 #Object797 
Datatable #52, length 25, address 7436
	#Object19 #Object49 #Object70 #Object75 
	#Object144 #Object223 #Object342 #Object429 
	#Object480 #Object527 #Object597 #Object611 
	#Object616 #Object659 #Object731 
Datatable #53, length 27, address 744f
	#Object21 #Object94 #Object119 #Object232 
	#Object328 #Object339 #Object377 #Object450 
	#Object522 #Object563 #Object666 #Object673 
	#Object699 #Object717 #Object774 
Datatable #54, length 35, address 746a
	#Object29 #Object107 #Object124 #Object128 
	#Object146 #Object156 #Object166 #Object176 
	#Object178 #Object186 #Object193 #Object225 
	#Object266 #Object336 #Object346 #Object500 
	#Object504 #Object563 #Object719 #Object743 
	#Object762 #Object763 #Object787 
Datatable #55, length 29, address 748d
	#Object23 #Object22 #Object90 #Object93 
	#Object112 #Object205 #Object209 #Object257 
	#Object283 #Object289 #Object315 #Object321 
	#Object337 #Object417 #Object455 #Object465 
	#Object624 #Object636 
Datatable #56, length 36, address 74aa
	#Object30 #Object92 #Object103 #Object124 
	#Object273 #Object296 #Object319 #Object331 
	#Object370 #Object471 #Object491 #Object498 
	#Object537 #Object540 #Object596 #Object606 
	#Object651 #Object655 #Object662 #Object663 
Datatable #57, length 37, address 74ce
	#Object31 #Object9 #Object74 #Object75 
	#Object89 #Object242 #Object265 #Object373 
	#Object444 #Object464 #Object591 #Object608 
	#Object648 #Object658 #Object663 #Object681 
	#Object683 #Object707 #Object716 #Object747 
	#Object765 
Datatable #58, length 25, address 74f3
	#Object19 #Object44 #Object79 #Object137 
	#Object151 #Object226 #Object248 #Object411 
	#Object424 #Object441 #Object575 #Object642 
	#Object674 #Object729 #Object777 
Datatable #59, length 28, address 750c
	#Object22 #Object83 #Object90 #Object191 
	#Object256 #Object378 #Object404 #Object446 
	#Object501 #Object604 #Object630 #Object638 
	#Object646 #Object657 #Object708 #Object788 
Datatable #60, length 31, address 7528
	#Object25 #Object65 #Object81 #Object136 
	#Object171 #Object207 #Object217 #Object230 
	#Object277 #Object314 #Object365 #Object438 
	#Object474 #Object502 #Object503 #Object686 
	#Object705 #Object712 #Object797 
Datatable #61, length 16, address 7547
	#Object10 #Object69 #Object294 #Object350 
	#Object371 #Object659 #Object679 #Object687 
	#Object754 
Datatable #62, length 37, address 7557
	#Object31 #Object96 #Object129 #Object180 
	#Object203 #Object231 #Object249 #Object274 
	#Object334 #Object379 #Object401 #Object448 
	#Object463 #Object465 #Object479 #Object515 
	#Object525 #Object558 #Object579 #Object758 
	#Object762 
Datatable #63, length 28, address 757c
	#Object22 #Object28 #Object43 #Object105 
	#Object127 #Object178 #Object283 #Object353 
	#Object356 #Object360 #Object419 #Object421 
	#Object441 #Object488 #Object505 #Object573 
	#Object678 
Datatable #64, length 28, address 7598
	#Object22 #Object1 #Object19 #Object82 
	#Object133 #Object185 #Object284 #Object380 
	#Object457 #Object501 #Object580 #Object597 
	#Object601 #Object605 #Object652 #Object755 
	#Object776 
Datatable #65, length 24, address 75b4
	#Object18 #Object10 #Object121 #Object213 
	#Object219 #Object224 #Object310 #Object368 
	#Object389 #Object418 #Object421 #Object462 
	#Object469 #Object593 
Datatable #66, length 37, address 75cc
	#Object31 #Object6 #Object25 #Object57 
	#Object181 #Object273 #Object301 #Object345 
	#Object471 #Object514 #Object524 #Object526 
	#Object527 #Object569 #Object578 #Object613 
	#Object653 #Object691 #Object725 #Object774 
	#Object784 
Datatable #67, length 29, address 75f1
	#Object23 #Object2 #Object86 #Object134 
	#Object165 #Object222 #Object246 #Object304 
	#Object351 #Object377 #Object504 #Object551 
	#Object584 #Object647 #Object713 #Object763 
	#Object773 
Datatable #68, length 26, address 760e
	#Object20 #Object4 #Object80 #Object107 
	#Object111 #Object158 #Object172 #Object190 
	#Object255 #Object292 #Object433 #Object444 
	#Object518 #Object528 #Object577 #Object666 
	#Object721 
Datatable #69, length 19, address 7628
	#Object13 #Object68 #Object117 #Object254 
	#Object431 #Object491 #Object574 #Object614 
	#Object648 #Object669 #Object676 
Datatable #70, length 24, address 763b
	#Object18 #Object62 #Object63 #Object197 
	#Object251 #Object287 #Object332 #Object345 
	#Object373 #Object379 #Object424 #Object489 
	#Object497 #Object649 
Datatable #71, length 23, address 7653
	#Object17 #Object47 #Object65 #Object97 
	#Object182 #Object232 #Object246 #Object299 
	#Object351 #Object367 #Object460 #Object484 
	#Object591 #Object685 
Datatable #72, length 27, address 766a
	#Object21 #Object29 #Object44 #Object51 
	#Object103 #Object113 #Object123 #Object239 
	#Object317 #Object410 #Object449 #Object461 
	#Object556 #Object585 #Object625 #Object645 
	#Object654 
Datatable #73, length 35, address 7685
	#Object29 #Object13 #Object15 #Object26 
	#Object76 #Object79 #Object154 #Object236 
	#Object242 #Object257 #Object357 #Object371 
	#Object433 #Object443 #Object451 #Object470 
	#Object496 #Object556 #Object656 #Object746 
	#Object776 
Datatable #74, length 30, address 76a8
	#Object24 #Object11 #Object12 #Object66 
	#Object95 #Object130 #Object160 #Object216 
	#Object340 #Object375 #Object419 #Object467 
	#Object487 #Object572 #Object580 #Object588 
	#Object727 #Object769 #Object771 
Datatable #75, length 32, address 76c6
	#Object26 #Object5 #Object121 #Object184 
	#Object244 #Object290 #Object329 #Object372 
	#Object390 #Object394 #Object516 #Object564 
	#Object579 #Object658 #Object680 #Object698 
	#Object771 #Object795 
Datatable #76, length 19, address 76e6
	#Object13 #Object29 #Object77 #Object105 
	#Object118 #Object512 #Object515 #Object536 
	#Object693 #Object698 #Object778 #Object785 
Datatable #77, length 26, address 76f9
	#Object20 #Object145 #Object194 #Object214 
	#Object258 #Object262 #Object327 #Object370 
	#Object458 #Object493 #Object513 #Object634 
	#Object732 #Object749 #Object754 
Datatable #78, length 29, address 7713
	#Object23 #Object61 #Object87 #Object91 
	#Object163 #Object245 #Object270 #Object284 
	#Object325 #Object398 #Object423 #Object449 
	#Object484 #Object486 #Object581 #Object619 
	#Object768 
Datatable #79, length 28, address 7730
	#Object22 #Object35 #Object199 #Object208 
	#Object260 #Object293 #Object381 #Object426 
	#Object430 #Object438 #Object481 #Object628 
	#Object674 #Object699 #Object750 #Object766 
Datatable #80, length 25, address 774c
	#Object19 #Object30 #Object31 #Object160 
	#Object195 #Object227 #Object233 #Object393 
	#Object425 #Object560 #Object584 #Object595 
	#Object682 #Object702 #Object720 
Datatable #81, length 17, address 7765
	#Object11 #Object1 #Object30 #Object50 
	#Object99 #Object223 #Object267 #Object303 
	#Object478 #Object519 #Object588 
Datatable #82, length 22, address 7776
	#Object16 #Object11 #Object42 #Object64 
	#Object192 #Object211 #Object233 #Object249 
	#Object301 #Object310 #Object477 #Object506 
	#Object533 #Object548 
Datatable #83, length 32, address 778c
	#Object26 #Object52 #Object53 #Object80 
	#Object96 #Object98 #Object116 #Object155 
	#Object191 #Object218 #Object245 #Object285 
	#Object286 #Object332 #Object399 #Object466 
	#Object521 #Object536 #Object587 #Object622 
	#Object767 
Datatable #84, length 29, address 77ac
	#Object23 #Object18 #Object56 #Object94 
	#Object217 #Object231 #Object234 #Object359 
	#Object374 #Object376 #Object428 #Object469 
	#Object534 #Object565 #Object735 #Object784 
	#Object790 
Datatable #85, length 19, address 77c9
	#Object13 #Object104 #Object200 #Object308 
	#Object324 #Object330 #Object375 #Object437 
	#Object529 #Object594 #Object610 
Datatable #86, length 25, address 77dc
	#Object19 #Object38 #Object73 #Object170 
	#Object188 #Object391 #Object461 #Object539 
	#Object557 #Object661 #Object678 #Object687 
	#Object714 #Object725 #Object781 
Datatable #87, length 28, address 77f5
	#Object22 #Object109 #Object142 #Object181 
	#Object278 #Object282 #Object341 #Object363 
	#Object420 #Object512 #Object567 #Object571 
	#Object577 #Object616 #Object778 #Object799 
Datatable #88, length 16, address 7811
	#Object10 #Object49 #Object54 #Object74 
	#Object175 #Object176 #Object359 #Object387 
	#Object544 #Object567 #Object796 
Datatable #89, length 37, address 7821
	#Object31 #Object43 #Object70 #Object150 
	#Object158 #Object239 #Object271 #Object277 
	#Object281 #Object330 #Object337 #Object510 
	#Object551 #Object603 #Object610 #Object650 
	#Object692 #Object695 #Object732 #Object782 
	#Object785 
Datatable #90, length 25, address 7846
	#Object19 #Object20 #Object53 #Object58 
	#Object77 #Object83 #Object150 #Object225 
	#Object363 #Object386 #Object538 #Object554 
	#Object643 #Object688 #Object783 #Object793 
Datatable #91, length 19, address 785f
	#Object13 #Object58 #Object67 #Object244 
	#Object295 #Object299 #Object440 #Object543 
	#Object553 #Object612 #Object701 
Datatable #92, length 21, address 7872
	#Object15 #Object59 #Object81 #Object235 
	#Object294 #Object346 #Object354 #Object482 
	#Object628 #Object638 #Object694 #Object728 
Datatable #93, length 25, address 7887
	#Object19 #Object21 #Object33 #Object123 
	#Object200 #Object262 #Object281 #Object463 
	#Object482 #Object485 #Object562 #Object600 
	#Object632 #Object710 #Object747 
Datatable #94, length 25, address 78a0
	#Object19 #Object28 #Object157 #Object253 
	#Object276 #Object323 #Object343 #Object494 
	#Object533 #Object543 #Object568 #Object641 
	#Object670 #Object705 
Datatable #95, length 32, address 78b9
	#Object26 #Object10 #Object41 #Object151 
	#Object188 #Object218 #Object255 #Object279 
	#Object280 #Object355 #Object423 #Object432 
	#Object434 #Object459 #Object466 #Object496 
	#Object564 #Object615 #Object671 
Datatable #96, length 35, address 78d9
	#Object29 #Object8 #Object31 #Object39 
	#Object133 #Object148 #Object153 #Object220 
	#Object230 #Object274 #Object316 #Object369 
	#Object411 #Object426 #Object468 #Object526 
	#Object582 #Object587 #Object627 #Object739 
	#Object751 
Datatable #97, length 11, address 78fc
	#Object5 #Object45 #Object82 #Object318 
	#Object320 #Object711 #Object741 

Nothing is obviously jumping out at me. If you want to try this yourself, check out the debug-wordmaps branch, and compile with verbosity 3 or higher.

1 Like

Wait, hold the phone! The original explode.dg crashed on the word “jail”, right?

In this case, jail isn’t assigned a datatable, because it applies to more than 32 objects.

Let me try the modified explode(1).dg, which crashes on “wing”.

1 Like

Here’s the output of explode(1).dg, which crashes on “receipt”.

Even longer output
Wordtable #0, length 72
	above #up below #down ceiling #up down #down 
	east #east eastern #east in #in ne #northeast 
	north #north north-east #northeast north-west #northwest northeast #northeast 
	northern #north northwest #northwest nw #northwest out #out 
	outside #out outwards #out se #southeast sky #up 
	south #south south-east #southeast south-west #southwest southeast #southeast 
	southern #south southwest #southwest sw #southwest up #up 
	west #west western #west 'd' #down 'e' #east 
	'n' #north 's' #south 'u' #up 'w' #west 
Wordtable #1, length 482
	abandon ->0 abortion ->1 absence ->2 absorb #Object207 
	abstract ->3 acceptable ->4 action ->5 advice ->6 
	aids ->7 album #Object109 allowance ->8 ample ->9 
	appendix ->10 argument ->11 attack ->12 authority ->13 
	bank ->14 battery ->15 bedroom ->16 bill ->17 
	bleed ->18 bowel ->19 breast ->20 burial ->21 
	cable ->22 carpet ->23 carriage #Object147 cause ->24 
	challenge ->25 charismatic ->26 cheek #Object260 chest ->27 
	coal ->28 column ->29 commitment ->30 contact ->31 
	contrast ->32 convenience ->33 convulsion ->34 correspondence ->35 
	crackpot ->36 crisis ->37 cycle #Object356 damn ->38 
	dark ->39 darkness #darkness definite #Object49 demand ->40 
	demonstration ->41 departure ->42 depend ->43 detector #Object164 
	diet #Object186 dip ->44 dragon ->45 ear #Object216 
	earthwax ->46 efflux ->47 elaborate #Object99 electron ->48 
	electronics ->49 elite ->50 emphasis ->51 engineer ->52 
	environment #Object245 essential ->53 execute ->54 fairy ->55 
	familiar ->56 fashion ->57 few #Object25 fibre ->58 
	first ->59 flag1 (none) flag2 (none) flag3 (none) 
	flag4 (none) flag5 (none) flag6 (none) flag7 (none) 
	flag8 (none) flag9 (none) foot ->60 fountain ->61 
	frighten ->62 fun ->63 future ->64 gap #Object60 
	glasses ->65 grimace ->66 guest #Object170 halt ->67 
	harsh ->68 have ->69 hay ->70 health ->71 
	help ->72 helpless #Object290 herd ->73 hide #Object93 
	holiday ->74 hostage ->75 identity ->76 ignite ->77 
	ignore ->78 import ->79 important ->80 incentive #Object252 
	interface ->81 ivory ->82 jail #Object110 jockey ->83 
	kick ->84 lane ->85 latest ->86 leaflet ->87 
	learn #Object164 lease ->88 liberal ->89 lifestyle ->90 
	lift ->91 litigation ->92 liver ->93 lobby ->94 
	location ->95 loop ->96 lounge ->97 maid ->98 
	manager ->99 manufacture ->100 ministry ->101 misery #Object328 
	mist ->102 model ->103 modernize ->104 mosque ->105 
	movie ->106 myth ->107 need ->108 net ->109 
	oh ->110 opponent ->111 oral ->112 order ->113 
	organize ->114 overeat ->115 pair #Object17 palace ->116 
	panic ->117 partner ->118 party ->119 past ->120 
	patience ->121 peace ->122 pension ->123 perfect ->124 
	pier #Object144 pig ->125 pigeon ->126 pin #Object233 
	plain #Object70 poll #Object283 praise ->127 preparation ->128 
	principle ->129 profile ->130 projection ->131 promise ->132 
	provoke ->133 publisher #Object272 pupil ->134 pyramid ->135 
	rack ->136 receipt ->137 reform ->138 reject ->139 
	relevance ->140 relief ->141 remunerate ->142 requirement ->143 
	revoke ->144 rib #Object74 rider ->145 riot #Object120 
	robot ->146 room ->147 rung ->148 salt ->149 
	sand ->150 satellite ->151 scatter ->152 scrap ->153 
	secular ->154 set ->155 shake ->156 shiver #Object306 
	slant ->157 slide ->158 soprano ->159 soul ->160 
	speech ->161 splurge ->162 stage ->163 standard ->164 
	steward ->165 sticky ->166 strength ->167 stride ->168 
	suburb ->169 suspicion ->170 teach ->171 television ->172 
	tell ->173 temporary ->174 term ->175 test ->176 
	theory ->177 thumb ->178 tidy ->179 tooth ->180 
	toss ->181 tough ->182 tower #Object157 track ->183 
	traction ->184 trail ->185 training ->186 tropical ->187 
	understanding ->188 upset ->189 valley ->190 venus #Object86 
	version ->191 wage #Object330 warm ->192 weight ->193 
	willpower ->194 wing ->195 wonder ->196 worm ->197 
	yard ->198 
Wordtable #2, length 470
	abandon ->0 abortion ->1 absence ->2 absorb #Object207 
	abstract ->3 acceptable ->4 action ->5 advice ->6 
	aids ->7 album #Object109 allowance ->8 ample ->9 
	appendix ->10 argument ->11 attack ->12 authority ->13 
	bank ->14 battery ->15 bedroom ->16 bill ->17 
	bleed ->18 bowel ->19 breast ->20 burial ->21 
	cable ->22 carpet ->23 carriage #Object147 cause ->24 
	challenge ->25 charismatic ->26 cheek #Object260 chest ->27 
	coal ->28 column ->29 commitment ->30 contact ->31 
	contrast ->32 convenience ->33 convulsion ->34 correspondence ->35 
	crackpot ->36 crisis ->37 cycle #Object356 damn ->38 
	dark ->199 darkness #darkness definite #Object49 demand ->40 
	demonstration ->41 departure ->42 depend ->43 detector #Object164 
	diet #Object186 dip ->44 dragon ->45 ear #Object216 
	earthwax ->46 efflux ->47 elaborate #Object99 electron ->48 
	electronics ->49 elite ->50 emphasis ->51 engineer ->52 
	environment #Object245 essential ->53 execute ->54 fairy ->55 
	familiar ->56 fashion ->57 few #Object25 fibre ->58 
	first ->59 foot ->60 fountain ->61 frighten ->62 
	fun ->63 future ->64 gap #Object60 glasses ->65 
	grimace ->66 guest #Object170 halt ->67 harsh ->68 
	have ->69 hay ->70 health ->71 help ->72 
	helpless #Object290 herd ->73 hide #Object93 holiday ->74 
	hostage ->75 identity ->76 ignite ->77 ignore ->78 
	import ->79 important ->80 incentive #Object252 interface ->81 
	ivory ->82 jail #Object110 jockey ->83 kick ->84 
	lane ->85 latest ->86 leaflet ->87 learn #Object164 
	lease ->88 liberal ->89 lifestyle ->90 lift ->91 
	litigation ->92 liver ->93 lobby ->94 location (none) 
	loop ->96 lounge ->97 maid ->98 manager ->99 
	manufacture ->100 ministry ->101 misery #Object328 mist ->102 
	model ->103 modernize ->104 mosque ->105 movie ->106 
	myth ->107 need ->108 net ->109 oh ->110 
	opponent ->111 oral ->112 order ->113 organize ->114 
	overeat ->115 pair #Object17 palace ->116 panic ->117 
	partner ->118 party ->119 past ->120 patience ->121 
	peace ->122 pension ->123 perfect ->124 pier #Object144 
	pig ->125 pigeon ->126 pin #Object233 plain #Object70 
	poll #Object283 praise ->127 preparation ->128 principle ->129 
	profile ->130 projection ->131 promise ->132 provoke ->133 
	publisher #Object272 pupil ->134 pyramid ->135 rack ->136 
	receipt ->137 reform ->138 reject ->139 relevance ->140 
	relief ->141 remunerate ->142 requirement ->143 revoke ->144 
	rib #Object74 rider ->145 riot #Object120 robot ->146 
	room ->147 rung ->148 salt ->149 sand ->150 
	satellite ->151 scatter ->152 scrap ->153 secular ->154 
	set ->155 shake ->156 shiver #Object306 slant ->157 
	slide ->158 soprano ->159 soul ->160 speech ->161 
	splurge ->162 stage ->163 standard ->164 steward ->165 
	sticky ->166 strength ->167 stride ->168 suburb ->169 
	suspicion ->170 teach ->171 television ->172 tell ->173 
	temporary ->174 term ->175 test ->176 the (none) 
	theory ->177 this (none) thumb ->178 tidy ->179 
	tooth ->180 toss ->181 tough ->182 tower #Object157 
	track ->183 traction ->184 trail ->185 training ->186 
	tropical ->187 understanding ->188 upset ->189 valley ->190 
	venus #Object86 version ->191 wage #Object330 warm ->192 
	weight ->193 willpower ->194 wing ->195 wonder ->196 
	worm ->197 yard ->198 yourself (none) 
Datatable #0, length 3, address 448a
	#Object122 #Object131 
Datatable #1, length 9, address 448d
	#Object46 #Object86 #Object213 #Object322 
	#Object348 
Datatable #2, length 4, address 4496
	#Object75 #Object319 
Datatable #3, length 5, address 449a
	#Object153 #Object180 #Object308 
Datatable #4, length 5, address 449f
	#Object40 #Object160 #Object368 
Datatable #5, length 8, address 44a4
	#Object6 #Object19 #Object210 #Object235 
	#Object291 
Datatable #6, length 4, address 44ac
	#Object34 #Object359 
Datatable #7, length 3, address 44b0
	#Object13 #Object115 
Datatable #8, length 8, address 44b3
	#Object104 #Object158 #Object191 #Object312 
	#Object314 
Datatable #9, length 4, address 44bb
	#Object133 #Object226 
Datatable #10, length 5, address 44bf
	#Object13 #Object136 #Object140 #Object156 
Datatable #11, length 4, address 44c4
	#Object97 #Object225 
Datatable #12, length 9, address 44c8
	#Object137 #Object142 #Object263 #Object303 
	#Object337 
Datatable #13, length 11, address 44d1
	#Object2 #Object168 #Object215 #Object270 
	#Object343 #Object357 
Datatable #14, length 4, address 44dc
	#Object181 #Object345 
Datatable #15, length 5, address 44e0
	#Object43 #Object62 #Object160 #Object184 
Datatable #16, length 4, address 44e5
	#Object129 #Object346 
Datatable #17, length 7, address 44e9
	#Object46 #Object100 #Object163 #Object196 
	#Object298 
Datatable #18, length 7, address 44f0
	#Object83 #Object193 #Object282 #Object333 
Datatable #19, length 8, address 44f7
	#Object24 #Object94 #Object134 #Object222 
	#Object265 
Datatable #20, length 8, address 44ff
	#Object37 #Object99 #Object187 #Object222 
	#Object228 
Datatable #21, length 4, address 4507
	#Object27 #Object52 #Object67 
Datatable #22, length 4, address 450b
	#Object35 #Object68 #Object91 
Datatable #23, length 10, address 450f
	#Object96 #Object138 #Object143 #Object259 
	#Object267 #Object297 
Datatable #24, length 4, address 4519
	#Object178 #Object369 
Datatable #25, length 10, address 451d
	#Object14 #Object50 #Object114 #Object152 
	#Object192 #Object220 #Object329 
Datatable #26, length 10, address 4527
	#Object81 #Object139 #Object162 #Object266 
	#Object334 #Object336 
Datatable #27, length 4, address 4531
	#Object139 #Object356 
Datatable #28, length 8, address 4535
	#Object170 #Object212 #Object258 #Object363 
Datatable #29, length 11, address 453d
	#Object35 #Object107 #Object131 #Object150 
	#Object228 #Object334 #Object354 
Datatable #30, length 5, address 4548
	#Object146 #Object206 #Object283 
Datatable #31, length 6, address 454d
	#Object76 #Object93 #Object158 #Object362 
Datatable #32, length 5, address 4553
	#Object91 #Object152 #Object184 #Object201 
Datatable #33, length 7, address 4558
	#Object37 #Object106 #Object299 #Object317 
Datatable #34, length 3, address 455f
	#Object15 #Object121 
Datatable #35, length 3, address 4562
	#Object123 #Object144 
Datatable #36, length 7, address 4565
	#Object242 #Object287 #Object364 
Datatable #37, length 6, address 456c
	#Object24 #Object119 #Object167 #Object214 
Datatable #38, length 3, address 4572
	#Object72 #Object107 
Datatable #39, length 8, address 4575
	#Object84 #Object255 #Object291 #darkness 
Datatable #40, length 5, address 457d
	#Object73 #Object100 #Object218 
Datatable #41, length 5, address 4582
	#Object65 #Object69 #Object243 
Datatable #42, length 6, address 4587
	#Object57 #Object61 #Object70 #Object316 
Datatable #43, length 7, address 458d
	#Object32 #Object166 #Object307 #Object359 
Datatable #44, length 9, address 4594
	#Object154 #Object181 #Object244 #Object313 
	#Object369 
Datatable #45, length 3, address 459d
	#Object118 #Object126 
Datatable #46, length 8, address 45a0
	#Object7 #Object29 #Object119 #Object219 
	#Object366 
Datatable #47, length 7, address 45a8
	#Object64 #Object188 #Object234 #Object311 
Datatable #48, length 7, address 45af
	#Object90 #Object180 #Object256 #Object350 
Datatable #49, length 6, address 45b6
	#Object4 #Object223 #Object288 
Datatable #50, length 10, address 45bc
	#Object5 #Object8 #Object121 #Object294 
	#Object321 #Object358 
Datatable #51, length 7, address 45c6
	#Object51 #Object85 #Object237 #Object344 
Datatable #52, length 7, address 45cd
	#Object280 #Object306 #Object362 
Datatable #53, length 4, address 45d4
	#Object171 #Object293 
Datatable #54, length 10, address 45d8
	#Object19 #Object246 #Object248 #Object313 
	#Object370 
Datatable #55, length 6, address 45e2
	#Object10 #Object78 #Object125 #Object325 
Datatable #56, length 4, address 45e8
	#Object129 #Object176 #Object209 
Datatable #57, length 4, address 45ec
	#Object6 #Object9 #Object140 
Datatable #58, length 10, address 45f0
	#Object159 #Object218 #Object250 #Object273 
	#Object341 
Datatable #59, length 3, address 45fa
	#Object179 #Object210 
Datatable #60, length 8, address 45fd
	#Object98 #Object269 #Object325 #Object332 
Datatable #61, length 6, address 4605
	#Object80 #Object168 #Object169 #Object243 
Datatable #62, length 9, address 460b
	#Object1 #Object118 #Object239 #Object315 
	#Object353 
Datatable #63, length 4, address 4614
	#Object10 #Object26 #Object207 
Datatable #64, length 9, address 4618
	#Object52 #Object102 #Object264 #Object355 
	#Object373 
Datatable #65, length 5, address 4621
	#Object18 #Object194 #Object296 
Datatable #66, length 6, address 4626
	#Object98 #Object103 #Object196 #Object354 
Datatable #67, length 6, address 462c
	#Object26 #Object75 #Object110 #Object226 
Datatable #68, length 5, address 4632
	#Object253 #Object277 
Datatable #69, length 6, address 4637
	#Object111 #Object256 #Object281 
Datatable #70, length 4, address 463d
	#Object105 #Object372 
Datatable #71, length 6, address 4641
	#Object47 #Object95 #Object132 #Object360 
Datatable #72, length 4, address 4647
	#Object58 #Object80 #Object149 
Datatable #73, length 7, address 464b
	#Object36 #Object163 #Object288 #Object294 
Datatable #74, length 6, address 4652
	#Object195 #Object237 #Object372 
Datatable #75, length 6, address 4658
	#Object178 #Object326 #Object361 
Datatable #76, length 4, address 465e
	#Object20 #Object342 
Datatable #77, length 7, address 4662
	#Object54 #Object174 #Object290 #Object324 
Datatable #78, length 8, address 4669
	#Object33 #Object48 #Object77 #Object130 
	#Object202 #Object329 
Datatable #79, length 5, address 4671
	#Object114 #Object175 #Object234 
Datatable #80, length 5, address 4676
	#Object27 #Object189 #Object340 
Datatable #81, length 6, address 467b
	#Object42 #Object347 #Object373 
Datatable #82, length 5, address 4681
	#Object145 #Object203 #Object319 
Datatable #83, length 8, address 4686
	#Object33 #Object250 #Object299 #Object368 
Datatable #84, length 10, address 468e
	#Object51 #Object261 #Object333 #Object351 
	#Object352 
Datatable #85, length 4, address 4698
	#Object25 #Object358 
Datatable #86, length 3, address 469c
	#Object82 #Object112 
Datatable #87, length 7, address 469f
	#Object71 #Object96 #Object230 #Object367 
Datatable #88, length 3, address 46a6
	#Object16 #Object161 
Datatable #89, length 10, address 46a9
	#Object50 #Object109 #Object197 #Object212 
	#Object219 #Object233 
Datatable #90, length 5, address 46b3
	#Object23 #Object115 #Object279 
Datatable #91, length 3, address 46b8
	#Object41 #Object55 
Datatable #92, length 12, address 46bb
	#Object43 #Object59 #Object127 #Object134 
	#Object204 #Object224 #Object227 #Object236 
Datatable #93, length 4, address 46c7
	#Object56 #Object246 
Datatable #94, length 6, address 46cb
	#Object54 #Object71 #Object186 #Object295 
Datatable #95, length 17, address 46d1
	#Room1 #Room2 #Room3 #Room4 
	#Room5 #Room6 #Room7 #Room8 
	#Room9 #Object15 #Object106 #Object172 
	#Object268 #Object289 
Datatable #96, length 10, address 46e2
	#Object173 #Object271 #Object300 #Object349 
	#Object366 
Datatable #97, length 3, address 46ec
	#Object58 #Object190 
Datatable #98, length 6, address 46ef
	#Object12 #Object116 #Object185 #Object259 
Datatable #99, length 5, address 46f5
	#Object89 #Object200 #Object309 
Datatable #100, length 5, address 46fa
	#Object254 #Object314 
Datatable #101, length 12, address 46ff
	#Object38 #Object48 #Object79 #Object148 
	#Object189 #Object301 #Object311 #Object346 
Datatable #102, length 3, address 470b
	#Object187 #Object204 
Datatable #103, length 7, address 470e
	#Object220 #Object224 #Object279 
Datatable #104, length 5, address 4715
	#Object85 #Object176 #Object278 
Datatable #105, length 9, address 471a
	#Object231 #Object244 #Object302 #Object370 
Datatable #106, length 7, address 4723
	#Object23 #Object128 #Object263 #Object349 
Datatable #107, length 8, address 472a
	#Object89 #Object95 #Object141 #Object285 
	#Object320 
Datatable #108, length 5, address 4732
	#Object31 #Object126 #Object179 #Object188 
Datatable #109, length 4, address 4737
	#Object175 #Object236 
Datatable #110, length 4, address 473b
	#Object74 #Object347 
Datatable #111, length 4, address 473f
	#Object22 #Object261 
Datatable #112, length 8, address 4743
	#Object3 #Object307 #Object323 #Object339 
Datatable #113, length 7, address 474b
	#Object92 #Object101 #Object240 #Object269 
Datatable #114, length 6, address 4752
	#Object5 #Object11 #Object30 #Object59 
	#Object62 
Datatable #115, length 7, address 4758
	#Object112 #Object194 #Object251 #Object257 
Datatable #116, length 8, address 475f
	#Object16 #Object63 #Object161 #Object239 
	#Object260 
Datatable #117, length 6, address 4767
	#Object200 #Object241 #Object265 
Datatable #118, length 5, address 476d
	#Object17 #Object153 #Object217 
Datatable #119, length 6, address 4772
	#Object4 #Object278 #Object352 
Datatable #120, length 11, address 4778
	#Object7 #Object148 #Object182 #Object195 
	#Object225 #Object365 #Object367 
Datatable #121, length 10, address 4783
	#Object169 #Object232 #Object277 #Object280 
	#Object374 
Datatable #122, length 6, address 478d
	#Object172 #Object241 #Object332 
Datatable #123, length 5, address 4793
	#Object270 #Object335 
Datatable #124, length 5, address 4798
	#Object227 #Object276 
Datatable #125, length 4, address 479d
	#Object73 #Object90 #Object102 
Datatable #126, length 5, address 47a1
	#Object65 #Object191 #Object292 
Datatable #127, length 6, address 47a6
	#Object2 #Object84 #Object174 #Object267 
Datatable #128, length 10, address 47ac
	#Object166 #Object266 #Object282 #Object342 
	#Object363 
Datatable #129, length 6, address 47b6
	#Object66 #Object122 #Object197 #Object336 
Datatable #130, length 8, address 47bc
	#Object47 #Object64 #Object69 #Object310 
	#Object327 
Datatable #131, length 4, address 47c4
	#Object44 #Object338 
Datatable #132, length 8, address 47c8
	#Object3 #Object221 #Object293 #Object341 
Datatable #133, length 6, address 47d0
	#Object94 #Object231 #Object365 
Datatable #134, length 5, address 47d6
	#Object55 #Object108 #Object371 
Datatable #135, length 5, address 47db
	#Object29 #Object150 #Object301 
Datatable #136, length 6, address 47e0
	#Object97 #Object252 #Object276 
Datatable #137, length 5, address 47e6
	#Object40 #Object66 #Object323 
Datatable #138, length 4, address 47eb
	#Object88 #Object230 
Datatable #139, length 4, address 47ef
	#Object14 #Object364 
Datatable #140, length 8, address 47f3
	#Object1 #Object229 #Object275 #Object320 
Datatable #141, length 4, address 47fb
	#Object167 #Object262 
Datatable #142, length 7, address 47ff
	#Object211 #Object296 #Object321 
Datatable #143, length 9, address 4806
	#Object275 #Object284 #Object308 #Object315 
Datatable #144, length 5, address 480f
	#Object31 #Object113 #Object343 
Datatable #145, length 9, address 4814
	#Object22 #Object68 #Object173 #Object199 
	#Object304 #Object350 
Datatable #146, length 3, address 481d
	#Object21 #Object67 
Datatable #147, length 10, address 4820
	#Room1 #Room2 #Room3 #Room4 
	#Room5 #Room6 #Room7 #Room8 
	#Room9 
Datatable #148, length 6, address 482a
	#Object205 #Object317 #Object353 
Datatable #149, length 8, address 4830
	#Object156 #Object245 #Object254 #Object348 
Datatable #150, length 4, address 4838
	#Object28 #Object34 #Object49 
Datatable #151, length 17, address 483c
	#Object78 #Object104 #Object117 #Object155 
	#Object255 #Object274 #Object302 #Object318 
	#Object324 #Object330 
Datatable #152, length 4, address 484d
	#Object155 #Object305 
Datatable #153, length 5, address 4851
	#Object142 #Object165 #Object309 
Datatable #154, length 4, address 4856
	#Object159 #Object335 
Datatable #155, length 3, address 485a
	#Object44 #Object137 
Datatable #156, length 7, address 485d
	#Object125 #Object154 #Object286 #Object351 
Datatable #157, length 5, address 4864
	#Object38 #Object209 #Object286 
Datatable #158, length 9, address 4869
	#Object53 #Object157 #Object183 #Object205 
	#Object211 #Object238 
Datatable #159, length 8, address 4872
	#Object88 #Object214 #Object249 #Object292 
Datatable #160, length 8, address 487a
	#Object56 #Object81 #Object83 #Object289 
	#Object374 
Datatable #161, length 9, address 4882
	#Object297 #Object318 #Object331 #Object344 
Datatable #162, length 5, address 488b
	#Object18 #Object146 #Object251 
Datatable #163, length 5, address 4890
	#Object185 #Object201 #Object327 
Datatable #164, length 8, address 4895
	#Object76 #Object258 #Object316 #Object357 
Datatable #165, length 6, address 489d
	#Object20 #Object36 #Object182 #Object339 
Datatable #166, length 7, address 48a3
	#Object216 #Object303 #Object345 
Datatable #167, length 4, address 48aa
	#Object151 #Object249 
Datatable #168, length 6, address 48ae
	#Object124 #Object253 #Object271 
Datatable #169, length 12, address 48b4
	#Object123 #Object242 #Object248 #Object264 
	#Object273 #Object361 
Datatable #170, length 6, address 48c0
	#Object63 #Object133 #Object198 #Object304 
Datatable #171, length 5, address 48c6
	#Object42 #Object183 #Object223 
Datatable #172, length 4, address 48cb
	#Object135 #Object312 
Datatable #173, length 4, address 48cf
	#Object87 #Object177 #Object190 
Datatable #174, length 9, address 48d3
	#Object124 #Object128 #Object268 #Object310 
	#Object322 
Datatable #175, length 5, address 48dc
	#Object79 #Object87 #Object217 
Datatable #176, length 5, address 48e1
	#Object45 #Object208 #Object232 
Datatable #177, length 11, address 48e6
	#Object9 #Object61 #Object141 #Object145 
	#Object213 #Object229 #Object338 
Datatable #178, length 3, address 48f1
	#Object32 #Object151 
Datatable #179, length 5, address 48f4
	#Object92 #Object136 #Object295 
Datatable #180, length 5, address 48f9
	#Object272 #Object274 
Datatable #181, length 7, address 48fe
	#Object12 #Object101 #Object337 #Object355 
Datatable #182, length 4, address 4905
	#Object165 #Object360 
Datatable #183, length 10, address 4909
	#Object41 #Object138 #Object162 #Object221 
	#Object287 #Object331 
Datatable #184, length 8, address 4913
	#Object77 #Object111 #Object116 #Object262 
	#Object284 
Datatable #185, length 4, address 491b
	#Object198 #Object247 
Datatable #186, length 8, address 491f
	#Object21 #Object39 #Object130 #Object143 
	#Object171 #Object371 
Datatable #187, length 4, address 4927
	#Object53 #Object240 
Datatable #188, length 4, address 492b
	#Object192 #Object328 
Datatable #189, length 3, address 492f
	#Object120 #Object127 
Datatable #190, length 4, address 4932
	#Object28 #Object177 #Object208 
Datatable #191, length 10, address 4936
	#Object39 #Object103 #Object113 #Object247 
	#Object257 #Object340 
Datatable #192, length 5, address 4940
	#Object60 #Object117 #Object132 #Object202 
Datatable #193, length 8, address 4945
	#Object82 #Object135 #Object199 #Object285 
	#Object305 
Datatable #194, length 5, address 494d
	#Object215 #Object300 
Datatable #195, length 5, address 4952
	#Object72 #Object206 #Object235 
Datatable #196, length 6, address 4957
	#Object11 #Object105 #Object193 #Object298 
Datatable #197, length 11, address 495d
	#Object30 #Object45 #Object57 #Object147 
	#Object149 #Object203 #Object281 #Object326 
Datatable #198, length 5, address 4968
	#Object8 #Object108 #Object238 
Datatable #199, length 6, address 496d
	#Object84 #Object255 #Object291

Well, this helped me find an error in my instrumentation: the first entry in each datatable shouldn’t be read as an object ID, but as the length of the table. So disregard that one.

But the datatables are assigned alphabetically, and it looks like something bad is happening at table 137. We’re getting close, I think!

2 Likes

Aha. Wait. You said this only crashed if the heap size was at its maximum, right?

I think I’ve found it. Look at this version.

VERY LONG OUTPUT
Wordtable #0, length 72
	above #up below #down ceiling #up down #down 
	east #east eastern #east in #in ne #northeast 
	north #north north-east #northeast north-west #northwest northeast #northeast 
	northern #north northwest #northwest nw #northwest out #out 
	outside #out outwards #out se #southeast sky #up 
	south #south south-east #southeast south-west #southwest southeast #southeast 
	southern #south southwest #southwest sw #southwest up #up 
	west #west western #west 'd' #down 'e' #east 
	'n' #north 's' #south 'u' #up 'w' #west 
Wordtable #1, length 482
	abandon ->0 abortion ->1 absence ->2 absorb #Object207 
	abstract ->3 acceptable ->4 action ->5 advice ->6 
	aids ->7 album #Object109 allowance ->8 ample ->9 
	appendix ->10 argument ->11 attack ->12 authority ->13 
	bank ->14 battery ->15 bedroom ->16 bill ->17 
	bleed ->18 bowel ->19 breast ->20 burial ->21 
	cable ->22 carpet ->23 carriage #Object147 cause ->24 
	challenge ->25 charismatic ->26 cheek #Object260 chest ->27 
	coal ->28 column ->29 commitment ->30 contact ->31 
	contrast ->32 convenience ->33 convulsion ->34 correspondence ->35 
	crackpot ->36 crisis ->37 cycle #Object356 damn ->38 
	dark ->39 darkness #darkness definite #Object49 demand ->40 
	demonstration ->41 departure ->42 depend ->43 detector #Object164 
	diet #Object186 dip ->44 dragon ->45 ear #Object216 
	earthwax ->46 efflux ->47 elaborate #Object99 electron ->48 
	electronics ->49 elite ->50 emphasis ->51 engineer ->52 
	environment #Object245 essential ->53 execute ->54 fairy ->55 
	familiar ->56 fashion ->57 few #Object25 fibre ->58 
	first ->59 flag1 (none) flag2 (none) flag3 (none) 
	flag4 (none) flag5 (none) flag6 (none) flag7 (none) 
	flag8 (none) flag9 (none) foot ->60 fountain ->61 
	frighten ->62 fun ->63 future ->64 gap #Object60 
	glasses ->65 grimace ->66 guest #Object170 halt ->67 
	harsh ->68 have ->69 hay ->70 health ->71 
	help ->72 helpless #Object290 herd ->73 hide #Object93 
	holiday ->74 hostage ->75 identity ->76 ignite ->77 
	ignore ->78 import ->79 important ->80 incentive #Object252 
	interface ->81 ivory ->82 jail #Object110 jockey ->83 
	kick ->84 lane ->85 latest ->86 leaflet ->87 
	learn #Object164 lease ->88 liberal ->89 lifestyle ->90 
	lift ->91 litigation ->92 liver ->93 lobby ->94 
	location ->95 loop ->96 lounge ->97 maid ->98 
	manager ->99 manufacture ->100 ministry ->101 misery #Object328 
	mist ->102 model ->103 modernize ->104 mosque ->105 
	movie ->106 myth ->107 need ->108 net ->109 
	oh ->110 opponent ->111 oral ->112 order ->113 
	organize ->114 overeat ->115 pair #Object17 palace ->116 
	panic ->117 partner ->118 party ->119 past ->120 
	patience ->121 peace ->122 pension ->123 perfect ->124 
	pier #Object144 pig ->125 pigeon ->126 pin #Object233 
	plain #Object70 poll #Object283 praise ->127 preparation ->128 
	principle ->129 profile ->130 projection ->131 promise ->132 
	provoke ->133 publisher #Object272 pupil ->134 pyramid ->135 
	rack ->136 receipt ->137 reform ->138 reject ->139 
	relevance ->140 relief ->141 remunerate ->142 requirement ->143 
	revoke ->144 rib #Object74 rider ->145 riot #Object120 
	robot ->146 room ->147 rung ->148 salt ->149 
	sand ->150 satellite ->151 scatter ->152 scrap ->153 
	secular ->154 set ->155 shake ->156 shiver #Object306 
	slant ->157 slide ->158 soprano ->159 soul ->160 
	speech ->161 splurge ->162 stage ->163 standard ->164 
	steward ->165 sticky ->166 strength ->167 stride ->168 
	suburb ->169 suspicion ->170 teach ->171 television ->172 
	tell ->173 temporary ->174 term ->175 test ->176 
	theory ->177 thumb ->178 tidy ->179 tooth ->180 
	toss ->181 tough ->182 tower #Object157 track ->183 
	traction ->184 trail ->185 training ->186 tropical ->187 
	understanding ->188 upset ->189 valley ->190 venus #Object86 
	version ->191 wage #Object330 warm ->192 weight ->193 
	willpower ->194 wing ->195 wonder ->196 worm ->197 
	yard ->198 
Wordtable #2, length 470
	abandon ->0 abortion ->1 absence ->2 absorb #Object207 
	abstract ->3 acceptable ->4 action ->5 advice ->6 
	aids ->7 album #Object109 allowance ->8 ample ->9 
	appendix ->10 argument ->11 attack ->12 authority ->13 
	bank ->14 battery ->15 bedroom ->16 bill ->17 
	bleed ->18 bowel ->19 breast ->20 burial ->21 
	cable ->22 carpet ->23 carriage #Object147 cause ->24 
	challenge ->25 charismatic ->26 cheek #Object260 chest ->27 
	coal ->28 column ->29 commitment ->30 contact ->31 
	contrast ->32 convenience ->33 convulsion ->34 correspondence ->35 
	crackpot ->36 crisis ->37 cycle #Object356 damn ->38 
	dark ->199 darkness #darkness definite #Object49 demand ->40 
	demonstration ->41 departure ->42 depend ->43 detector #Object164 
	diet #Object186 dip ->44 dragon ->45 ear #Object216 
	earthwax ->46 efflux ->47 elaborate #Object99 electron ->48 
	electronics ->49 elite ->50 emphasis ->51 engineer ->52 
	environment #Object245 essential ->53 execute ->54 fairy ->55 
	familiar ->56 fashion ->57 few #Object25 fibre ->58 
	first ->59 foot ->60 fountain ->61 frighten ->62 
	fun ->63 future ->64 gap #Object60 glasses ->65 
	grimace ->66 guest #Object170 halt ->67 harsh ->68 
	have ->69 hay ->70 health ->71 help ->72 
	helpless #Object290 herd ->73 hide #Object93 holiday ->74 
	hostage ->75 identity ->76 ignite ->77 ignore ->78 
	import ->79 important ->80 incentive #Object252 interface ->81 
	ivory ->82 jail #Object110 jockey ->83 kick ->84 
	lane ->85 latest ->86 leaflet ->87 learn #Object164 
	lease ->88 liberal ->89 lifestyle ->90 lift ->91 
	litigation ->92 liver ->93 lobby ->94 location (none) 
	loop ->96 lounge ->97 maid ->98 manager ->99 
	manufacture ->100 ministry ->101 misery #Object328 mist ->102 
	model ->103 modernize ->104 mosque ->105 movie ->106 
	myth ->107 need ->108 net ->109 oh ->110 
	opponent ->111 oral ->112 order ->113 organize ->114 
	overeat ->115 pair #Object17 palace ->116 panic ->117 
	partner ->118 party ->119 past ->120 patience ->121 
	peace ->122 pension ->123 perfect ->124 pier #Object144 
	pig ->125 pigeon ->126 pin #Object233 plain #Object70 
	poll #Object283 praise ->127 preparation ->128 principle ->129 
	profile ->130 projection ->131 promise ->132 provoke ->133 
	publisher #Object272 pupil ->134 pyramid ->135 rack ->136 
	receipt ->137 reform ->138 reject ->139 relevance ->140 
	relief ->141 remunerate ->142 requirement ->143 revoke ->144 
	rib #Object74 rider ->145 riot #Object120 robot ->146 
	room ->147 rung ->148 salt ->149 sand ->150 
	satellite ->151 scatter ->152 scrap ->153 secular ->154 
	set ->155 shake ->156 shiver #Object306 slant ->157 
	slide ->158 soprano ->159 soul ->160 speech ->161 
	splurge ->162 stage ->163 standard ->164 steward ->165 
	sticky ->166 strength ->167 stride ->168 suburb ->169 
	suspicion ->170 teach ->171 television ->172 tell ->173 
	temporary ->174 term ->175 test ->176 the (none) 
	theory ->177 this (none) thumb ->178 tidy ->179 
	tooth ->180 toss ->181 tough ->182 tower #Object157 
	track ->183 traction ->184 trail ->185 training ->186 
	tropical ->187 understanding ->188 upset ->189 valley ->190 
	venus #Object86 version ->191 wage #Object330 warm ->192 
	weight ->193 willpower ->194 wing ->195 wonder ->196 
	worm ->197 yard ->198 yourself (none) 
Datatable #0, length 3, address 7cba
	#Object122 #Object131 
Datatable #1, length 9, address 7cbd
	#Object46 #Object86 #Object213 #Object322 
	#Object348 
Datatable #2, length 4, address 7cc6
	#Object75 #Object319 
Datatable #3, length 5, address 7cca
	#Object153 #Object180 #Object308 
Datatable #4, length 5, address 7ccf
	#Object40 #Object160 #Object368 
Datatable #5, length 8, address 7cd4
	#Object6 #Object19 #Object210 #Object235 
	#Object291 
Datatable #6, length 4, address 7cdc
	#Object34 #Object359 
Datatable #7, length 3, address 7ce0
	#Object13 #Object115 
Datatable #8, length 8, address 7ce3
	#Object104 #Object158 #Object191 #Object312 
	#Object314 
Datatable #9, length 4, address 7ceb
	#Object133 #Object226 
Datatable #10, length 5, address 7cef
	#Object13 #Object136 #Object140 #Object156 
Datatable #11, length 4, address 7cf4
	#Object97 #Object225 
Datatable #12, length 9, address 7cf8
	#Object137 #Object142 #Object263 #Object303 
	#Object337 
Datatable #13, length 11, address 7d01
	#Object2 #Object168 #Object215 #Object270 
	#Object343 #Object357 
Datatable #14, length 4, address 7d0c
	#Object181 #Object345 
Datatable #15, length 5, address 7d10
	#Object43 #Object62 #Object160 #Object184 
Datatable #16, length 4, address 7d15
	#Object129 #Object346 
Datatable #17, length 7, address 7d19
	#Object46 #Object100 #Object163 #Object196 
	#Object298 
Datatable #18, length 7, address 7d20
	#Object83 #Object193 #Object282 #Object333 
Datatable #19, length 8, address 7d27
	#Object24 #Object94 #Object134 #Object222 
	#Object265 
Datatable #20, length 8, address 7d2f
	#Object37 #Object99 #Object187 #Object222 
	#Object228 
Datatable #21, length 4, address 7d37
	#Object27 #Object52 #Object67 
Datatable #22, length 4, address 7d3b
	#Object35 #Object68 #Object91 
Datatable #23, length 10, address 7d3f
	#Object96 #Object138 #Object143 #Object259 
	#Object267 #Object297 
Datatable #24, length 4, address 7d49
	#Object178 #Object369 
Datatable #25, length 10, address 7d4d
	#Object14 #Object50 #Object114 #Object152 
	#Object192 #Object220 #Object329 
Datatable #26, length 10, address 7d57
	#Object81 #Object139 #Object162 #Object266 
	#Object334 #Object336 
Datatable #27, length 4, address 7d61
	#Object139 #Object356 
Datatable #28, length 8, address 7d65
	#Object170 #Object212 #Object258 #Object363 
Datatable #29, length 11, address 7d6d
	#Object35 #Object107 #Object131 #Object150 
	#Object228 #Object334 #Object354 
Datatable #30, length 5, address 7d78
	#Object146 #Object206 #Object283 
Datatable #31, length 6, address 7d7d
	#Object76 #Object93 #Object158 #Object362 
Datatable #32, length 5, address 7d83
	#Object91 #Object152 #Object184 #Object201 
Datatable #33, length 7, address 7d88
	#Object37 #Object106 #Object299 #Object317 
Datatable #34, length 3, address 7d8f
	#Object15 #Object121 
Datatable #35, length 3, address 7d92
	#Object123 #Object144 
Datatable #36, length 7, address 7d95
	#Object242 #Object287 #Object364 
Datatable #37, length 6, address 7d9c
	#Object24 #Object119 #Object167 #Object214 
Datatable #38, length 3, address 7da2
	#Object72 #Object107 
Datatable #39, length 8, address 7da5
	#Object84 #Object255 #Object291 #darkness 
Datatable #40, length 5, address 7dad
	#Object73 #Object100 #Object218 
Datatable #41, length 5, address 7db2
	#Object65 #Object69 #Object243 
Datatable #42, length 6, address 7db7
	#Object57 #Object61 #Object70 #Object316 
Datatable #43, length 7, address 7dbd
	#Object32 #Object166 #Object307 #Object359 
Datatable #44, length 9, address 7dc4
	#Object154 #Object181 #Object244 #Object313 
	#Object369 
Datatable #45, length 3, address 7dcd
	#Object118 #Object126 
Datatable #46, length 8, address 7dd0
	#Object7 #Object29 #Object119 #Object219 
	#Object366 
Datatable #47, length 7, address 7dd8
	#Object64 #Object188 #Object234 #Object311 
Datatable #48, length 7, address 7ddf
	#Object90 #Object180 #Object256 #Object350 
Datatable #49, length 6, address 7de6
	#Object4 #Object223 #Object288 
Datatable #50, length 10, address 7dec
	#Object5 #Object8 #Object121 #Object294 
	#Object321 #Object358 
Datatable #51, length 7, address 7df6
	#Object51 #Object85 #Object237 #Object344 
Datatable #52, length 7, address 7dfd
	#Object280 #Object306 #Object362 
Datatable #53, length 4, address 7e04
	#Object171 #Object293 
Datatable #54, length 10, address 7e08
	#Object19 #Object246 #Object248 #Object313 
	#Object370 
Datatable #55, length 6, address 7e12
	#Object10 #Object78 #Object125 #Object325 
Datatable #56, length 4, address 7e18
	#Object129 #Object176 #Object209 
Datatable #57, length 4, address 7e1c
	#Object6 #Object9 #Object140 
Datatable #58, length 10, address 7e20
	#Object159 #Object218 #Object250 #Object273 
	#Object341 
Datatable #59, length 3, address 7e2a
	#Object179 #Object210 
Datatable #60, length 8, address 7e2d
	#Object98 #Object269 #Object325 #Object332 
Datatable #61, length 6, address 7e35
	#Object80 #Object168 #Object169 #Object243 
Datatable #62, length 9, address 7e3b
	#Object1 #Object118 #Object239 #Object315 
	#Object353 
Datatable #63, length 4, address 7e44
	#Object10 #Object26 #Object207 
Datatable #64, length 9, address 7e48
	#Object52 #Object102 #Object264 #Object355 
	#Object373 
Datatable #65, length 5, address 7e51
	#Object18 #Object194 #Object296 
Datatable #66, length 6, address 7e56
	#Object98 #Object103 #Object196 #Object354 
Datatable #67, length 6, address 7e5c
	#Object26 #Object75 #Object110 #Object226 
Datatable #68, length 5, address 7e62
	#Object253 #Object277 
Datatable #69, length 6, address 7e67
	#Object111 #Object256 #Object281 
Datatable #70, length 4, address 7e6d
	#Object105 #Object372 
Datatable #71, length 6, address 7e71
	#Object47 #Object95 #Object132 #Object360 
Datatable #72, length 4, address 7e77
	#Object58 #Object80 #Object149 
Datatable #73, length 7, address 7e7b
	#Object36 #Object163 #Object288 #Object294 
Datatable #74, length 6, address 7e82
	#Object195 #Object237 #Object372 
Datatable #75, length 6, address 7e88
	#Object178 #Object326 #Object361 
Datatable #76, length 4, address 7e8e
	#Object20 #Object342 
Datatable #77, length 7, address 7e92
	#Object54 #Object174 #Object290 #Object324 
Datatable #78, length 8, address 7e99
	#Object33 #Object48 #Object77 #Object130 
	#Object202 #Object329 
Datatable #79, length 5, address 7ea1
	#Object114 #Object175 #Object234 
Datatable #80, length 5, address 7ea6
	#Object27 #Object189 #Object340 
Datatable #81, length 6, address 7eab
	#Object42 #Object347 #Object373 
Datatable #82, length 5, address 7eb1
	#Object145 #Object203 #Object319 
Datatable #83, length 8, address 7eb6
	#Object33 #Object250 #Object299 #Object368 
Datatable #84, length 10, address 7ebe
	#Object51 #Object261 #Object333 #Object351 
	#Object352 
Datatable #85, length 4, address 7ec8
	#Object25 #Object358 
Datatable #86, length 3, address 7ecc
	#Object82 #Object112 
Datatable #87, length 7, address 7ecf
	#Object71 #Object96 #Object230 #Object367 
Datatable #88, length 3, address 7ed6
	#Object16 #Object161 
Datatable #89, length 10, address 7ed9
	#Object50 #Object109 #Object197 #Object212 
	#Object219 #Object233 
Datatable #90, length 5, address 7ee3
	#Object23 #Object115 #Object279 
Datatable #91, length 3, address 7ee8
	#Object41 #Object55 
Datatable #92, length 12, address 7eeb
	#Object43 #Object59 #Object127 #Object134 
	#Object204 #Object224 #Object227 #Object236 
Datatable #93, length 4, address 7ef7
	#Object56 #Object246 
Datatable #94, length 6, address 7efb
	#Object54 #Object71 #Object186 #Object295 
Datatable #95, length 17, address 7f01
	#Room1 #Room2 #Room3 #Room4 
	#Room5 #Room6 #Room7 #Room8 
	#Room9 #Object15 #Object106 #Object172 
	#Object268 #Object289 
Datatable #96, length 10, address 7f12
	#Object173 #Object271 #Object300 #Object349 
	#Object366 
Datatable #97, length 3, address 7f1c
	#Object58 #Object190 
Datatable #98, length 6, address 7f1f
	#Object12 #Object116 #Object185 #Object259 
Datatable #99, length 5, address 7f25
	#Object89 #Object200 #Object309 
Datatable #100, length 5, address 7f2a
	#Object254 #Object314 
Datatable #101, length 12, address 7f2f
	#Object38 #Object48 #Object79 #Object148 
	#Object189 #Object301 #Object311 #Object346 
Datatable #102, length 3, address 7f3b
	#Object187 #Object204 
Datatable #103, length 7, address 7f3e
	#Object220 #Object224 #Object279 
Datatable #104, length 5, address 7f45
	#Object85 #Object176 #Object278 
Datatable #105, length 9, address 7f4a
	#Object231 #Object244 #Object302 #Object370 
Datatable #106, length 7, address 7f53
	#Object23 #Object128 #Object263 #Object349 
Datatable #107, length 8, address 7f5a
	#Object89 #Object95 #Object141 #Object285 
	#Object320 
Datatable #108, length 5, address 7f62
	#Object31 #Object126 #Object179 #Object188 
Datatable #109, length 4, address 7f67
	#Object175 #Object236 
Datatable #110, length 4, address 7f6b
	#Object74 #Object347 
Datatable #111, length 4, address 7f6f
	#Object22 #Object261 
Datatable #112, length 8, address 7f73
	#Object3 #Object307 #Object323 #Object339 
Datatable #113, length 7, address 7f7b
	#Object92 #Object101 #Object240 #Object269 
Datatable #114, length 6, address 7f82
	#Object5 #Object11 #Object30 #Object59 
	#Object62 
Datatable #115, length 7, address 7f88
	#Object112 #Object194 #Object251 #Object257 
Datatable #116, length 8, address 7f8f
	#Object16 #Object63 #Object161 #Object239 
	#Object260 
Datatable #117, length 6, address 7f97
	#Object200 #Object241 #Object265 
Datatable #118, length 5, address 7f9d
	#Object17 #Object153 #Object217 
Datatable #119, length 6, address 7fa2
	#Object4 #Object278 #Object352 
Datatable #120, length 11, address 7fa8
	#Object7 #Object148 #Object182 #Object195 
	#Object225 #Object365 #Object367 
Datatable #121, length 10, address 7fb3
	#Object169 #Object232 #Object277 #Object280 
	#Object374 
Datatable #122, length 6, address 7fbd
	#Object172 #Object241 #Object332 
Datatable #123, length 5, address 7fc3
	#Object270 #Object335 
Datatable #124, length 5, address 7fc8
	#Object227 #Object276 
Datatable #125, length 4, address 7fcd
	#Object73 #Object90 #Object102 
Datatable #126, length 5, address 7fd1
	#Object65 #Object191 #Object292 
Datatable #127, length 6, address 7fd6
	#Object2 #Object84 #Object174 #Object267 
Datatable #128, length 10, address 7fdc
	#Object166 #Object266 #Object282 #Object342 
	#Object363 
Datatable #129, length 6, address 7fe6
	#Object66 #Object122 #Object197 #Object336 
Datatable #130, length 8, address 7fec
	#Object47 #Object64 #Object69 #Object310 
	#Object327 
Datatable #131, length 4, address 7ff4
	#Object44 #Object338 
Datatable #132, length 8, address 7ff8
	#Object3 #Object221 #Object293 #Object341 
Datatable #133, length 6, address 8000
	#Object94 #Object231 #Object365 
Datatable #134, length 5, address 8006
	#Object55 #Object108 #Object371 
Datatable #135, length 5, address 800b
	#Object29 #Object150 #Object301 
Datatable #136, length 6, address 8010
	#Object97 #Object252 #Object276 
Datatable #137, length 5, address 8016
	#Object40 #Object66 #Object323 
Datatable #138, length 4, address 801b
	#Object88 #Object230 
Datatable #139, length 4, address 801f
	#Object14 #Object364 
Datatable #140, length 8, address 8023
	#Object1 #Object229 #Object275 #Object320 
Datatable #141, length 4, address 802b
	#Object167 #Object262 
Datatable #142, length 7, address 802f
	#Object211 #Object296 #Object321 
Datatable #143, length 9, address 8036
	#Object275 #Object284 #Object308 #Object315 
Datatable #144, length 5, address 803f
	#Object31 #Object113 #Object343 
Datatable #145, length 9, address 8044
	#Object22 #Object68 #Object173 #Object199 
	#Object304 #Object350 
Datatable #146, length 3, address 804d
	#Object21 #Object67 
Datatable #147, length 10, address 8050
	#Room1 #Room2 #Room3 #Room4 
	#Room5 #Room6 #Room7 #Room8 
	#Room9 
Datatable #148, length 6, address 805a
	#Object205 #Object317 #Object353 
Datatable #149, length 8, address 8060
	#Object156 #Object245 #Object254 #Object348 
Datatable #150, length 4, address 8068
	#Object28 #Object34 #Object49 
Datatable #151, length 17, address 806c
	#Object78 #Object104 #Object117 #Object155 
	#Object255 #Object274 #Object302 #Object318 
	#Object324 #Object330 
Datatable #152, length 4, address 807d
	#Object155 #Object305 
Datatable #153, length 5, address 8081
	#Object142 #Object165 #Object309 
Datatable #154, length 4, address 8086
	#Object159 #Object335 
Datatable #155, length 3, address 808a
	#Object44 #Object137 
Datatable #156, length 7, address 808d
	#Object125 #Object154 #Object286 #Object351 
Datatable #157, length 5, address 8094
	#Object38 #Object209 #Object286 
Datatable #158, length 9, address 8099
	#Object53 #Object157 #Object183 #Object205 
	#Object211 #Object238 
Datatable #159, length 8, address 80a2
	#Object88 #Object214 #Object249 #Object292 
Datatable #160, length 8, address 80aa
	#Object56 #Object81 #Object83 #Object289 
	#Object374 
Datatable #161, length 9, address 80b2
	#Object297 #Object318 #Object331 #Object344 
Datatable #162, length 5, address 80bb
	#Object18 #Object146 #Object251 
Datatable #163, length 5, address 80c0
	#Object185 #Object201 #Object327 
Datatable #164, length 8, address 80c5
	#Object76 #Object258 #Object316 #Object357 
Datatable #165, length 6, address 80cd
	#Object20 #Object36 #Object182 #Object339 
Datatable #166, length 7, address 80d3
	#Object216 #Object303 #Object345 
Datatable #167, length 4, address 80da
	#Object151 #Object249 
Datatable #168, length 6, address 80de
	#Object124 #Object253 #Object271 
Datatable #169, length 12, address 80e4
	#Object123 #Object242 #Object248 #Object264 
	#Object273 #Object361 
Datatable #170, length 6, address 80f0
	#Object63 #Object133 #Object198 #Object304 
Datatable #171, length 5, address 80f6
	#Object42 #Object183 #Object223 
Datatable #172, length 4, address 80fb
	#Object135 #Object312 
Datatable #173, length 4, address 80ff
	#Object87 #Object177 #Object190 
Datatable #174, length 9, address 8103
	#Object124 #Object128 #Object268 #Object310 
	#Object322 
Datatable #175, length 5, address 810c
	#Object79 #Object87 #Object217 
Datatable #176, length 5, address 8111
	#Object45 #Object208 #Object232 
Datatable #177, length 11, address 8116
	#Object9 #Object61 #Object141 #Object145 
	#Object213 #Object229 #Object338 
Datatable #178, length 3, address 8121
	#Object32 #Object151 
Datatable #179, length 5, address 8124
	#Object92 #Object136 #Object295 
Datatable #180, length 5, address 8129
	#Object272 #Object274 
Datatable #181, length 7, address 812e
	#Object12 #Object101 #Object337 #Object355 
Datatable #182, length 4, address 8135
	#Object165 #Object360 
Datatable #183, length 10, address 8139
	#Object41 #Object138 #Object162 #Object221 
	#Object287 #Object331 
Datatable #184, length 8, address 8143
	#Object77 #Object111 #Object116 #Object262 
	#Object284 
Datatable #185, length 4, address 814b
	#Object198 #Object247 
Datatable #186, length 8, address 814f
	#Object21 #Object39 #Object130 #Object143 
	#Object171 #Object371 
Datatable #187, length 4, address 8157
	#Object53 #Object240 
Datatable #188, length 4, address 815b
	#Object192 #Object328 
Datatable #189, length 3, address 815f
	#Object120 #Object127 
Datatable #190, length 4, address 8162
	#Object28 #Object177 #Object208 
Datatable #191, length 10, address 8166
	#Object39 #Object103 #Object113 #Object247 
	#Object257 #Object340 
Datatable #192, length 5, address 8170
	#Object60 #Object117 #Object132 #Object202 
Datatable #193, length 8, address 8175
	#Object82 #Object135 #Object199 #Object285 
	#Object305 
Datatable #194, length 5, address 817d
	#Object215 #Object300 
Datatable #195, length 5, address 8182
	#Object72 #Object206 #Object235 
Datatable #196, length 6, address 8187
	#Object11 #Object105 #Object193 #Object298 
Datatable #197, length 11, address 818d
	#Object30 #Object45 #Object57 #Object147 
	#Object149 #Object203 #Object281 #Object326 
Datatable #198, length 5, address 8198
	#Object8 #Object108 #Object238 
Datatable #199, length 6, address 819d
	#Object84 #Object255 #Object291 

This crashes on “pupil” but not on “provoke”. That means the issue is between tables 133 and 134—that is, the ones above 0x8000. And 0x8000 is the lowest address that is treated as negative when doing signed math.

Something in the Z-machine code is doing signed math on the datatable address, or the addresses around it, and going into an infinite loop if the result is negative.

3 Likes

Yep, here it is. The logic of R_WORDMAP is:

  • If the number of entries ≥ 16, divide in half until it’s less than 16. (Not relevant here.)
  • Do a linear search through the table, looking at the first two bytes of each four-byte block. If none of them match, return true.
  • Load the two-byte word immediately after the matching address.
  • If it’s zero, return false.
  • If it’s ≤ the maximum object ID, push it and return true.
  • Go to that address and unpack the list, pushing each value in turn. Then return true. (Not relevant here.)

And a datatable address that’s greater than 0x8000 will always be lower than the maximum object ID, because this is a signed comparison! This also needs to check if the address is less than zero.

7 Likes

Yep, that did it! I think we can consider this bug officially fixed!

explode1.z5 (157.7 KB)

7 Likes

does this mean i can use per-object variables again without holding my breath?

I think so, yes! Those are stored in memory before the wordtables and datatables, and now you no longer need to worry about them pushing the wordtables over the $8000 limit.

Per-object variables are still horribly unoptimized at present compared to Inform, but this should give you a lot more breathing room.

And if they do still become a problem, the biggest issue with per-object variables is that every object in the game gets them, you can’t restrict them to specific objects or kinds of objects. But you can use access predicates to get around that too. Suppose you’re writing Adventure, and need to keep track of the last time you visited a room, and the previous location of each dwarf. You can store those in the same variable, since dwarves and rooms have no overlap!

@($Room was last visited $Time)
    (generic object variable $Room $Time)
@($Dwarf was last in $Location)
    (generic object variable $Dwarf $Location)
2 Likes

I regret that Discourse allows me to click the “like” button only once.

3 Likes

Ewoks celebrate the destruction of the Heap Space Death Star

1 Like

I have some further good news!

Thinking on it more, Dialog isn’t really that inefficient about per-object variables. Inform 6 has several properties that apply to all objects that Dialog doesn’t, like the dictionary words, short name, and description. So why is it such a problem to use per-object variables in Dialog?

Well, with this bug fixed, it seems like it isn’t! I added twenty extra per-object variables to Miss Gosling and it caused no problems whatsoever on a full-game runthrough. I think we can officially stop telling people that they need to avoid those!

8 Likes