Overview
Comment: | Updated to support very basic processing of the command-line |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
dbb450841da8050c38aefd368160471b |
User & Date: | rkeene on 2017-10-13 19:56:05 |
Other Links: | manifest | tags |
Context
2017-10-13
| ||
19:59 | Fixed typo and added test for process_command_line check-in: 6641266e0b user: rkeene tags: trunk | |
19:56 | Updated to support very basic processing of the command-line check-in: dbb450841d user: rkeene tags: trunk | |
17:59 | Updated not produce an error if we cannot load the tcc4tcl shared object since it is possible to use the Tcl-only portion check-in: d1b6ddb9a1 user: rkeene tags: trunk | |
Changes
Modified tcc4tcl.tcl from [a5b9327e8f] to [98a17dca0c].
︙ | ︙ | |||
42 43 44 45 46 47 48 | if {$pkgName == ""} { set type "exe" } else { set type "package" } } | | | | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | if {$pkgName == ""} { set type "exe" } else { set type "package" } } array set $handle [list code "" type $type filename $output package $pkgName add_inc_path "" add_lib_path "" add_lib "" add_macros ""] proc $handle {cmd args} [string map [list @@HANDLE@@ $handle] { set handle {@@HANDLE@@} if {$cmd == "go"} { set args [list 0 {*}$args] } if {$cmd == "code"} { set cmd "go" set args [list 1 {*}$args] } set callcmd ::tcc4tcl::_$cmd if {[info command $callcmd] == ""} { return -code error "unknown or ambiguous subcommand \"$cmd\": must be cwrap, ccode, cproc, ccommand, delete, linktclcommand, code, tk, add_include_path, add_library_path, add_library, process_command_line, or go" } uplevel 1 [list $callcmd $handle {*}$args] }] return $handle } |
︙ | ︙ | |||
154 155 156 157 158 159 160 161 162 163 164 165 166 167 | } proc _tk {handle} { upvar #0 $handle state set state(tk) 1 } proc _delete {handle} { rename $handle "" unset $handle } proc _proc {handle cname adefs rtype body args} { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | } proc _tk {handle} { upvar #0 $handle state set state(tk) 1 } proc _process_command_line {handle cmdStr} { # XXX:TODO: This needs to handle shell-quoted arguments upvar #0 $handle state set cmdStr [regsub -all { *} $cmdStr { }] set work [split $cmdStr " "] foreach arg $work { switch -glob -- $arg { "-I*" { set dir [string range $cmd 2 end] _add_include_path $handle $dir } "-D*" { set symbolval [string range $cmd 2 end] set symbolval [split $symbolval =] set symbol [lindex $symbolval 0] set val [join [lrange $symbolval 1 end] =] dict set state(add_macros) $symbol $val } "-U*" { set symbol [string range $cmd 2 end] dict unset state(add_macros) $symbol $val } "-l*" { set library [string range $cmd 2 end] _add_library $handle $library } "-L*" { set libraryDir [string range $cmd 2 end] _add_library_path $handle $libraryDir } "-g" { # Ignored } } } } proc _delete {handle} { rename $handle "" unset $handle } proc _proc {handle cname adefs rtype body args} { |
︙ | ︙ | |||
419 420 421 422 423 424 425 | } proc _go {handle {outputOnly 0}} { variable dir upvar #0 $handle state | | > > > > > > | 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 | } proc _go {handle {outputOnly 0}} { variable dir upvar #0 $handle state set code "" foreach {macroName macroVal} $state(add_macros) { append code "#define [string trim "$macroName $macroVal"]\n" } append code $state(code) "\n" if {$state(type) == "exe" || $state(type) == "dll"} { if {[info exists state(procs)] && [llength $state(procs)] > 0} { set code "int _initProcs(Tcl_Interp *interp);\n\n$code" } } |
︙ | ︙ |