Require bind.tcl
Require Class/basicCurveFromCurve

basicCurveFromCurve Subclass CurveFromCurve {
  Var "domain {[basicCurveFromCurve get domain]}"
  Method <Domain> {domain} {set [var domain] $domain}
  ClassVar "Domain-template {{[basicCurveFromCurve get domain]}}"

  Var "param {[basicCurveFromCurve get param]}" cfunction
  Var "frame [basicCurveFromCurve get frame]"
  Method <Function> {param script args} {
    global errorCode errorInfo
    if [set code [catch [list _bind(Rest) {} {{frame ""} {absolute ""}} \
        $args [Self method <Function>]] err]] \
	{return -code $code -errorcode $errorCode -errorinfo $errorInfo $err}
    if {[llength $param] != 1} {Error "Function must be of one variable"}
    set [var param] $param
    set [var cfunction] $script
    if {$frame != ""} {set [var frame] 1} else {set [var frame] 0}
  }
  ClassVar "Function-template {{t} {\n  let (x,y,z) = (0,1,0)\n} -frame}"

  ClassVar {script-templates {Domain Function}}

  Method ScriptBegin {} {
    Vars domain param cfunction frame
    Parent ScriptBegin
    set domain [Parent get domain]
    set param [Parent get param]
    set cfunction {}
    set frame [Parent get frame]
  }
}

CurveFromCurve Register
