TODO
Fix the makefiles in examples/ and t/ so that they are nicely generated like the primary makefile.
scalar variables - (new_pad, find_lex, store_lex) - for global (tcl, not imc) variables, we only need one pad for now. I think. need to know how static depth pads interacted with the #@#$ stack.
return, stacktraces, errors...
array variables (this is going to require writing PMCs, I think.)
list variables (non fast, we can just use strings. A real implmementation will use an array type PMC under the hood, I think.)
Here's a list of commands from the 7.3 Ousterhout book that have yet to be implemented. Just because something is implemented doesn't mean it's a full implementation, either. That's what the test suite is for. =-) I've tried to group them so that any procs that depend on another proc to really work are so listed, and that related procs are grouped together. Some are SMOPs at this point, others require me to add features, or refactor. Many will require updating after features are added - "unset", for example, will need to be fixed when arrays are supported.
a partial version of "expr" and "proc" must happen RSN.
eval source unset array proc -> upvar uplevel global trace expr -> if while for foreach list -> concat llength linsert lreplace lrange lappend lsearch lsort split join regexp regsub -> switch cd file glob pwd pid seek tell open close eof flush read gets format string scan catch error return break continue info time trace* exec auto_mkindex* unknown history * isn't a recent distro of tcl And, here are more from a more recent tcl in no order. after bgerror binary case clock dde encoding fblocked fconfigure fcopy fileevent filename http interp library lindex load lset memory msgcat namespace package packagens pkgMkIndex re_syntax registry resource safe socket subst tcltest tclvars update variable vwait
Long term goal: Run the tcl test suite. Preferably an older one, it'll probably be easier to pass. (I wonder how much of the test suite is tied up to the implementation - I'm ok with failing tests that suck. =-)
Get imcc to report on where the error is pre-macro expansion. (if you introduce an error into the is_space macro, for example, the error is reported in a completely different location - presumably the error checking occurs post macro-subst.)
Get imcc to complain if you call a macro without passing all the arguments.
Get imcc to complain if you try to define the same .local symbol twice.
Optimizations... I'm primarily concerned about functionality at this point, and have probably got some brain dead stuff that can be optimized now. There are more clever things, like keeping track of where a [ ] pair is - I have to find it twice (once for determining where the word ends, once for finding it so I can execute it.) Could save a bit of time, I'm sure, if someone clued up the parser.