atomo-0.2: prelude/parameter.atomo
operator right 0 =!
Parameter = Object clone
Parameter new: v := Parameter clone do:
{ set-default: v
}
context define: (name: Particle) as: root :=
name define-on: [context] as: (Parameter new: root)
(p: Parameter) show :=
"<" .. p _? show .. ">"
(p: Parameter) _? := p value: self
(p: Parameter) =! v :=
(p) value: (self) = v
(p: Parameter) set-default: v :=
(p) value: _ = v
with: (p: Parameter) as: new do: (action: Block) :=
{ old = p _?
action before: { p =! new } after: { p =! old }
} call
with-default: (p: Parameter) as: new do: (action: Block) :=
{ old = p _?
action before: { p set-default: new } after: { p set-default: old }
} call
with: [] do: (action: Block) := action call
with: (b . bs) do: (action: Block) :=
with: b from as: b to do: { with: bs do: action }
with-defaults: [] do: (action: Block) := action call
with-defaults: (b . bs) do: (action: Block) :=
with-default: b from as: b to do: { with: bs do: action }