15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
-
-
+
+
+
-
-
-
+
+
+
-
-
+
-
+
|
# This should work
tcc4tcl::cproc test3 {int i} int { return(i+42); }
# Multiple arguments
tcc4tcl::cproc add {int a int b} int { return(a+b); }
# Add external functions
tcc4tcl::cproc mkdir {char* dir} ok {
int rv;
tcc4tcl::cproc mkdir {Tcl_Interp* interp char* dir} ok {
int mkdir_ret;
mkdir_ret = mkdir(dir);
rv = mkdir(dir);
if (rv == 0) {
return(TCL_OK);
if (mkdir_ret != 0) {
Tcl_SetObjResult(interp, Tcl_NewStringObj("failed", -1));
return(TCL_ERROR);
};
return(TCL_ERROR);
return(TCL_OK);
}
puts [test 1]
puts [test1 1]
puts [test3 1]
puts [::bob::test1 1]
puts [add [test 1] 1]
catch {
puts [mkdir "/"]
} err
if {$err != ""} {
if {$err != "failed"} {
error "\[mkdir\] did not return the expected error"
}
|