Overview
| Comment: | Added a "tcc4tcl::ccommand" command similar to Critcl |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
d02f5fd83ee81267f094b940f0d9024b |
| User & Date: | rkeene on 2017-01-08 06:13:28.937 |
| Other Links: | manifest | tags |
Context
|
2017-01-08
| ||
| 06:13 | Unexport generic "new" command check-in: 5de78d18ca user: rkeene tags: trunk | |
| 06:13 | Added a "tcc4tcl::ccommand" command similar to Critcl check-in: d02f5fd83e user: rkeene tags: trunk | |
|
2016-12-09
| ||
| 14:48 | tcc4tcl 0.28 check-in: a86f876ef8 user: rkeene tags: trunk, 0.28 | |
Changes
Modified tcc4tcl.tcl
from [200fc77793]
to [a64acdd994].
| ︙ | ︙ | |||
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
catch { load {} tcc4tcl }
}
if {[info command ::tcc4tcl] == ""} {
load [file join $dir tcc4tcl[info sharedlibextension]] tcc4tcl
}
set count 0
proc new {{output ""} {pkgName ""}} {
variable dir
variable count
set handle ::tcc4tcl::tcc_[incr count]
| > > > > > > > > > > > > > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
catch { load {} tcc4tcl }
}
if {[info command ::tcc4tcl] == ""} {
load [file join $dir tcc4tcl[info sharedlibextension]] tcc4tcl
}
set count 0
proc lookupNamespace {name} {
if {![string match "::*" $name]} {
set nsfrom [uplevel 2 {namespace current}]
if {$nsfrom eq "::"} {
set nsfrom ""
}
set name "${nsfrom}::${name}"
}
return $name
}
proc new {{output ""} {pkgName ""}} {
variable dir
variable count
set handle ::tcc4tcl::tcc_[incr count]
|
| ︙ | ︙ | |||
44 45 46 47 48 49 50 |
set cmd "go"
set args [list 1 {*}$args]
}
set callcmd ::tcc4tcl::_$cmd
if {[info command $callcmd] == ""} {
| | > > > > > > > > > > > > > > > > > | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
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, or go"
}
uplevel 1 [list $callcmd $handle {*}$args]
}]
return $handle
}
proc _linktclcommand {handle cSymbol args} {
upvar #0 $handle state
set argc [llength $args]
if {$argc != 1 && $argc != 2} {
return -code error "_linktclcommand handle cSymbol tclCommand ?clientData?"
}
lappend state(procs) $cSymbol $args
}
proc _ccommand {handle tclCommand argList body} {
upvar #0 $handle state
set tclCommand [lookupNamespace $tclCommand]
set cSymbol [cleanname [namespace tail $tclCommand]]
lappend state(procs) $tclCommand [list $cSymbol]
foreach {clientData interp objc objv} $argList {}
set cArgList "ClientData $clientData, Tcl_Interp *$interp, int $objc, Tcl_Obj *CONST $objv\[\]"
append state(code) "int $cSymbol\($cArgList) {\n$body\n}\n"
return
}
proc _add_include_path {handle args} {
upvar #0 $handle state
lappend state(add_inc_path) {*}$args
}
|
| ︙ | ︙ | |||
569 570 571 572 573 574 575 |
if {$cname == ""} {
set cname c_[tcc4tcl::cleanname $name]
}
set wname tcl_[tcc4tcl::cleanname $name]
# Fully qualified proc name
| < < < < < | < < | 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 |
if {$cname == ""} {
set cname c_[tcc4tcl::cleanname $name]
}
set wname tcl_[tcc4tcl::cleanname $name]
# Fully qualified proc name
set name [lookupNamespace $name]
array set types {}
set varnames {}
set cargs {}
set cnames {}
set cbody {}
set code {}
|
| ︙ | ︙ |
Modified test.tcl
from [da5a97590a]
to [bf545477a0].
| ︙ | ︙ | |||
202 203 204 205 206 207 208 209 210 |
return(x + y);
}
set testVal [testClientData 1]
if {$testVal != "4"} {
error "\[ClientData\] Invalid value: $testVal, should have been 4"
}
exit 0
| > > > > > > > > > > > | 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
return(x + y);
}
set testVal [testClientData 1]
if {$testVal != "4"} {
error "\[ClientData\] Invalid value: $testVal, should have been 4"
}
set handle [tcc4tcl::new]
$handle ccommand testCCommand {dummy ip objc objv} {
Tcl_SetObjResult(ip, Tcl_NewStringObj("OKAY", 4));
return(TCL_OK);
}
$handle go
if {[testCCommand] ne "OKAY"} {
error "\[testCCommand\] Invalid result"
}
exit 0
|