Author: coke
Date: Wed Nov  2 09:34:07 2005
New Revision: 9711

Modified:
   trunk/languages/tcl/lib/tclcommand.pir
Log:
pass more tcl tests. (or, don't use sprintf on random text that
might include %'s)



Modified: trunk/languages/tcl/lib/tclcommand.pir
==============================================================================
--- trunk/languages/tcl/lib/tclcommand.pir      (original)
+++ trunk/languages/tcl/lib/tclcommand.pir      Wed Nov  2 09:34:07 2005
@@ -87,7 +87,7 @@ no_command_non_interactive:
 
 .sub compile :method
    .param int register_num
- 
+
    inc register_num
 
    .local string label_num
@@ -95,12 +95,12 @@ no_command_non_interactive:
    .local int inline_result_num
    .local int inline_available
    inline_available=0
-
    .local pmc compile
    compile = find_global "_Tcl", "compile_dispatch"
 
-   .local string pir_code
+   .local string pir_code,pir_code2
    pir_code = ".include \"languages/tcl/lib/returncodes.pir\"\n"
+   pir_code2 = ''
 
    .local string retval
    # Generate partial code for each of our arguments
@@ -137,7 +137,7 @@ arg_loop_done:
      $S0 = name
      $P1 = find_global "_Tcl::builtins", $S0
    clear_eh
- 
+
    (inline_result_num,retval) = $P1(register_num,self)
    
    register_num = inline_result_num + 1
@@ -146,23 +146,24 @@ arg_loop_done:
    pir_code .= label_num
    pir_code .= ":\n"
    pir_code .= retval
-   pir_code .= "$P%i=$P" # placeholder for final result PMC.
+ 
    $S0 = inline_result_num
-   pir_code .= $S0
-   pir_code .= "\n"
-   pir_code .= "goto done_command"
-   pir_code .= label_num
-   pir_code .= "\n"
+   pir_code2 .= $S0
+   pir_code2 .= "\n"
+   pir_code2 .= "goto done_command"
+   pir_code2 .= label_num
+   pir_code2 .= "\n"
    inline_available = 1
 dynamic:
-   pir_code .= "dynamic_command"
-   pir_code .= label_num
-   pir_code .= ":\n"
+   $P99 = P5 # XXX Curse you, variable register frames!
+   pir_code2 .= "dynamic_command"
+   pir_code2 .= label_num
+   pir_code2 .= ":\n"
    .local int name_register
    (name_register,retval) = compile(name,register_num)
    register_num = name_register
 
-   pir_code .= retval
+   pir_code2 .= retval
    $S1 = "$P"
    $S0 = register_num
    $S1 .= $S0
@@ -173,69 +174,69 @@ dynamic:
    $S2 .= $S0
 
    # Get a string version of the name
-   pir_code .= $S2
-   pir_code .= "="
-   pir_code .= $S1
-   pir_code .= "\n"
+   pir_code2 .= $S2
+   pir_code2 .= "="
+   pir_code2 .= $S1
+   pir_code2 .= "\n"
    
    # Prepend a "&"
-   pir_code .= $S2
-   pir_code .= " = \"&\" . "
-   pir_code .= $S2
-   pir_code .= "\n"
+   pir_code2 .= $S2
+   pir_code2 .= " = \"&\" . "
+   pir_code2 .= $S2
+   pir_code2 .= "\n"
 
-   pir_code .= "push_eh bad_command"
+   pir_code2 .= "push_eh bad_command"
    $S0 = register_num
-   pir_code .= $S0
-   pir_code .= "\n"
-   pir_code .= "command = find_global \"Tcl\", "
-   pir_code .= $S2
-   pir_code .= "\nclear_eh\nif_null command, bad_command"
-   pir_code .= $S0
-   pir_code .= "\n$P"
-   pir_code .= $S0
-   pir_code .= " = command("
+   pir_code2 .= $S0
+   pir_code2 .= "\n"
+   pir_code2 .= "command = find_global \"Tcl\", "
+   pir_code2 .= $S2
+   pir_code2 .= "\nclear_eh\nif_null command, bad_command"
+   pir_code2 .= $S0
+   pir_code2 .= "\n$P"
+   pir_code2 .= $S0
+   pir_code2 .= " = command("
 
    ii = 0
 elem_loop:
    if ii == num_args goto elem_loop_done   
    $S0 = compiled_args[ii]
-   pir_code .= "$P"
-   pir_code .= $S0
+   pir_code2 .= "$P"
+   pir_code2 .= $S0
    inc ii 
    if ii == num_args goto elem_loop_done
-   pir_code .= ","
+   pir_code2 .= ","
    goto elem_loop 
 elem_loop_done:
-   pir_code .= ")\ngoto resume"
+   pir_code2 .= ")\ngoto resume"
    $S0 = register_num
-   pir_code .= $S0
-   pir_code .="\n" 
-   pir_code .= "bad_command"
-   pir_code .= $S0
-   pir_code .= ":\n$S"
-   pir_code .= $S0
-   pir_code .= "=$P"
+   pir_code2 .= $S0
+   pir_code2 .="\n" 
+   pir_code2 .= "bad_command"
+   pir_code2 .= $S0
+   pir_code2 .= ":\n$S"
+   pir_code2 .= $S0
+   pir_code2 .= "=$P"
    $S1 = name_register
-   pir_code .= $S1
-   pir_code .= "\n$S"
-   pir_code .= $S0
-   pir_code .= "=concat \"invalid command name \\\"\" ,"
-   pir_code .= "$S"
-   pir_code .= $S0
-   pir_code .= "\n$S"
-   pir_code .= $S0
-   pir_code .= ".=\"\\\"\"\n.throw($S"
-   pir_code .= $S0
-   pir_code .= ")\n"  
-
-   pir_code .= "resume"
-   pir_code .= $S0
-   pir_code .= ":\n"
+   pir_code2 .= $S1
+   pir_code2 .= "\n$S"
+   pir_code2 .= $S0
+   pir_code2 .= "=concat \"invalid command name \\\"\" ,"
+   pir_code2 .= "$S"
+   pir_code2 .= $S0
+   pir_code2 .= "\n$S"
+   pir_code2 .= $S0
+   pir_code2 .= ".=\"\\\"\"\n.throw($S"
+   pir_code2 .= $S0
+   pir_code2 .= ")\n"  
+
+   pir_code2 .= "resume"
+   pir_code2 .= $S0
+   pir_code2 .= ":\n"
    # return the code and the new register_num 
-   pir_code .= "done_command"
-   pir_code .= label_num
-   pir_code .= ":\n"
+   pir_code2 .= "done_command"
+   pir_code2 .= label_num
+   pir_code2 .= ":\n"
 
    unless inline_available goto done
 
@@ -244,9 +245,11 @@ elem_loop_done:
    printf_args = 1
    printf_args[0] = register_num
 
-   pir_code = sprintf pir_code, printf_args
+   $S1 = sprintf '$P%i=$P', printf_args
+   pir_code .= $S1
 
 done:
 
+  pir_code .= pir_code2
   .return (register_num,pir_code)
 .end

Reply via email to