1 # vim: foldmarker=<<<,>>>
3 class tlc
::Expression {
6 constructor
{accessvar args
} {
7 upvar $accessvar scopevar
8 eval tlc
::Signal::constructor scopevar
14 method set_expression
{rawexpr
}
15 method reassess
{args
}
16 method add_term
{var_ref
}
20 variable expression
{}
26 body tlc
::Expression::constructor {accessvar args
} { #<<<1
29 tlc
::Domino #auto dominos(need_reassess) -name "$name need_reassess"
30 $dominos(need_reassess
) attach_output
[code
$this reassess
]
36 body tlc
::Expression::set_expression {rawexpr
} { #<<<1
41 %[ {\[code
[list $this] }
43 %< {\[set [list [scope
}
48 set expression
[string map
$map $rawexpr]
49 debug trivia
"processed first stage expression: ($expression)"
50 set expression
[uplevel [list subst $expression]]
51 debug trivia
"processed second stage expression: ($expression)"
56 body tlc
::Expression::reassess {args
} { #<<<1
58 set_state
[expr $expression]
59 debug debug
"Reassessing ($name) == [state]\n$expression\n----------------\n[subst $expression]"
61 debug debug
"Error assessing expression ($name): ($::errorInfo)"
63 error "Error assessing expression ($name): ($::errorInfo)"
68 body tlc
::Expression::add_term {var_ref
} { #<<<1
69 tlc
::Vardomino #auto dominos($var_ref) -name "$name term $var_ref" \
70 -textvariable $var_ref
71 $dominos(need_reassess
) attach_input
$dominos($var_ref)