source: tol/toltcl/library/toltcl.tcl @ 1a27dd0

1941-docker-image-to-testdevel
Last change on this file since 1a27dd0 was 1a27dd0, checked in by Jorge Pérez <josp.jorge@…>, 15 years ago

helper functions to invoke tol code from tcl and collect results

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@3892 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 2.5 KB
Line 
1namespace eval toltcl {
2
3  proc init { } {
4    variable idcounter
5
6    foreach g [ tol::info grammars ] {
7      set idcounter($g) 0
8    }
9  }
10
11  if { [ info commands initkernel ] eq "" } {
12    rename ::tol::initkernel initkernel
13  }
14 
15  proc ::tol::initkernel { args } {
16    eval toltcl::initkernel $args
17    toltcl::init
18  } 
19}
20
21proc toltcl::genid { Type } {
22  variable idcounter
23
24  return "__tmp_${Type}_[ incr idcounter($Type) ]__"
25}
26
27proc toltcl::eval { TolScript args } {
28  set id [ genid Anything ]
29  set script [ string map \
30                   [ list %s% [ string trim $TolScript " \t\n;" ] %v% $id ] { Set %v% = { Set tmp = { [[ %s% ]] }; Set [[ tmp[Card(tmp)] ]] } } ]
31  tol::console eval $script
32  set idx [ llength [ tol::console stack list ] ]
33  #puts [ tol::info var [ list "Console" $idx ] ]
34  #set result [ ::eval tolist [ list [ list $_Type $id ] ] $args ]
35  set result [ ::eval tolist [ list [ list "Console" $idx ] ] $args ]
36  tol::console stack release $id
37  array set opts {
38    -named 0
39  }
40  return $result
41  array set opts $args
42  if { $Type eq "Set" || $Type eq "NameBlock" } {
43    return $result
44  } elseif { $opts(-named) } {
45    return [ lrange $result end-1 end ]
46  } else {
47    return [ lindex $result end ]
48  }
49}
50
51proc toltcl::__tolist { tolobj named recursive } {
52  set vinfo [ tol::info variable $tolobj ]
53  set grammar [ lindex $vinfo 0 ]
54  if { $grammar eq "Set" || $grammar eq "NameBlock" } {
55    set result [ list ]
56    set idx 1
57    tol::foreach it $tolobj {
58      array set it_info $it
59      if { $named } {
60        lappend result $it_info(name)
61      }
62      lappend result [ __tolist [ linsert $tolobj end $idx ] $named $recursive ]
63      incr idx
64    }
65    return $result
66  } else {
67    if { $grammar eq "Text" } {
68      set contents [ lindex $vinfo 2 ]
69      regexp {^"(.*)"$} $contents ==> retval
70    } else {
71      set retval [ lindex $vinfo 2 ]
72    }
73    if { $named && [ llength $tolobj ] < 3 } {
74      return [ list [ lindex $vinfo 1 ] $retval ]
75    } else {
76      return $retval
77    }
78  } 
79}
80
81proc toltcl::tolist { tolobj args } {
82  array set opts {
83    -named 0
84    -recursive 1
85  }
86  array set opts $args
87  set result [ __tolist $tolobj $opts(-named) $opts(-recursive) ]
88}
89
90proc toltcl::test_00 { } {
91  toltcl::eval Set {
92    Set TolConfigManager::Config::Upgrading::TolPackage::Repositories;
93  }
94}
95
96proc toltcl::test_01 { } {
97  toltcl::eval Set {
98    TolPackage::Client::_.versSyncInfo
99  }
100}
101
102proc toltcl::test_03 { } {
103  puts toltcl::eval {Real a = 1; Set kk = [[ a ]]; Real b = Card(kk)+1} -named 1
104}
Note: See TracBrowser for help on using the repository browser.