1 Legend: - means planned/unreleased
3 * means finished/released
7 - hierachical expansion parser (start with '--' then, else if '-..')
8 - accumulate errorchecking (less if()'s compound check)
9 - segv handler instead ENOMEM checking in experimental branch
10 - back to free functions die with NULL argument
11 - *_dump needs stream handle (instead stderr fixed)
12 - prereserve objects in freelists/wordtable for errorhandlers
15 Function: int wordexp (const char *WORDS, wordexp_t *WORD-VECTOR-PTR, int FLAGS)
18 Derived from the first hackerlab reference implementation
20 + expansions while pushback_program .. less bucket/string copy issues
21 + refactor stringlist api (no direct CIRCLEQ calls)
22 - define order of expansions
23 - actioninit takes 'parent' char* , brief/help become own actions
24 * new mala_strings shared, buckets, lookup, copy on write
25 - ringbuffer for the program
26 + array for common names (instead string lookup)
27 - primary/secondary types within the descriptor
37 - for data (MRU dead queue, whatever) (maybe)
39 + constant initialized strings (descriptor is dynamic, char* is const)
40 - tabling (cache for results chksum:result[N] in actiondesc or action)
41 - modules/loaders produce macros instead engine->program (--MALARC --COMMANDLINE ...)
43 - prepend unknown words with --DEFAULT-PARSER (defaults to --LITERAL)
44 - '--LITERAL' puts the parameter to the arglist
45 - '--DELAY' dont evaluate the next argument
46 - expansions dont do magic
47 - foo=bar becomes --SETENV foo bar
48 - ! --FOO becomes --NOT --FOO
49 - remove the negated flag, use MALA_NEGATED vm state?
50 - store the 'end of scope' within the engine and --PARAM x reads args after the end
51 err reading new args as coroutine?
52 - implement general --BEGIN --END blocks (compile to --BLOCK-nnnn with delayed evaluation)
53 - named blocks --BLOCK-name ... --END-name
55 + macros for common parsers MALA_SUBSTITUTE_PARSER("FOO","BAR") etc.