Various

interactive tclsh

new parser breaks ability to send interactive commands to the shell, add it back

remove .is_space macro

looks like <is_whitespace> opcode will handle this.

PIR Tree

From autrijus's talk. can we use this instead of the current string-based compilation.

Makefile deps

Should be more explicit about the PMC dependencies in the makefile. *something* is causing things to get rebuilt unecessarily each time "make tclsh" is run.

keyed access

tcl is not using Keys when getting from aggregates. It probably should, at least for language interoperability.

interactive tclsh

Still have to:

o catch any real_exceptions thrown.
o respect tcl_prompt1, tcl_prompt2
o deal with incomplete input (needs better error handling)
[interpinfo name]

how to do this from inside parrot? RT#36277

migrate all these issues to RT or TODO tests
update docs [will]

(including add pod to all .pir)

Programming Issues

C-level tasks

string to list

TclList's new_from_string method should use the string to list code ...except that it turnsout this is non-trivial.

PIR-level tasks

__set/__read

All commands should use the __set and __read functions defined in variables.pir instead of get_var. __read's interface conflicts slightly with the way tclparser splits things up - it over-helpfully tries to break the variable part out into array and index - while read is already doing that for us.

On a related note: No builtins or library code should be dealing with var sigils (i.e. $) other than __set and __read.

subcommand processing

Convert any commands that use subcommands to [info] style dispatch to ease maintenance. Subcommands invoked in this style get a single container PMC with all their args, but *NOT* the invoking command. so, given the tcl:

[info args foo]

Tcl::info is called with (args, foo), which then dispatched to:

_Tcl::builtins::info::args((foo))

implement default globals, etc.

global variables provided by tcl libary. tclvars.

global variables provided by tcl interpreter. tclsh

source per-user settings. tclsh

Tests

We should be using the tcl-test target as our language goal. For now, keep enough tests in our local test harness (t/) so that we don't get any regressions. (Running the tcl test suite takes a while). This means we can get by with basic tests in t/ for now.

Long term goal would be to remove any tests in t/ that are testing things that are already tested in tcl. Partcl's checked in test suite should just be checking partcl-specific functionaliity.

Uncategorized Issues

provide a way to access existing library PIR from Tcl.

Perhaps via [namespace import]? Can fake it right now with [inline]

multiple level lists
[expr]

Clean up [expr]. MUUUUCH room for improvement there. [expr] is the source of most of our abysmal performance in bench.tcl.

the expr AST could use a rework. Be nice if it just passed around something invokable.

clean up expr so that it's not passing around type indicators. - just use PMCs everywhere. (Though we may still need to have CONST vs. VARIABLE types.)

The type indicator is also used to disambiguate operators and function calls from operands. We can easily remove it for operands, but how to cleanly remove this for operators?

TBD: strings, floats as operands - (many of the math funcs return floats but you can't specify them, and not everything takes them (try, for example, [expr sin(1) + sin(1)] vs [expr sin(1) * sin(1)].)

TBD: blocks, commands, and strings as operands

TBD: logical binary ops & ternary op (need deferred evaluation) ; unary ops; ops that work on strings only.

TBD: functions that take > 1 arg.

TBD: Argument type requirements - Currently works ONLY on bitand - esp need to get any that require int-only args, as we can now /generate/ floats, even if we cannot specify them. This is all supportable by MMD - we just need to specify the correct errors to throw.