| 1 | namespace 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 | |
|---|
| 21 | proc toltcl::genid { Type } { |
|---|
| 22 | variable idcounter |
|---|
| 23 | |
|---|
| 24 | return "__tmp_${Type}_[ incr idcounter($Type) ]__" |
|---|
| 25 | } |
|---|
| 26 | |
|---|
| 27 | proc 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 | |
|---|
| 51 | proc 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 | |
|---|
| 81 | proc 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 | |
|---|
| 90 | proc toltcl::test_00 { } { |
|---|
| 91 | toltcl::eval Set { |
|---|
| 92 | Set TolConfigManager::Config::Upgrading::TolPackage::Repositories; |
|---|
| 93 | } |
|---|
| 94 | } |
|---|
| 95 | |
|---|
| 96 | proc toltcl::test_01 { } { |
|---|
| 97 | toltcl::eval Set { |
|---|
| 98 | TolPackage::Client::_.versSyncInfo |
|---|
| 99 | } |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | proc toltcl::test_03 { } { |
|---|
| 103 | puts toltcl::eval {Real a = 1; Set kk = [[ a ]]; Real b = Card(kk)+1} -named 1 |
|---|
| 104 | } |
|---|