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.