func (a *api) outputDispatchers(f simprogtext.SimProgFile) { mCallParam := simprogtext.NewSimpleVar("mc") errVar := simprogtext.NewSimpleVar("err") argsVar := simprogtext.NewSimpleVar("arg") rcvVar := simprogtext.NewSimpleVar("r") for rcvTypeName, methods := range a.Methods { f.AddLineIndent( "func (%s *%s) Dispatch(%s *vesupro.MethodCall) "+ "(vesupro.VesuproObject, error) {", rcvVar.VarName(), rcvTypeName, mCallParam.VarName()) f.AddLine("var %s error", errVar.VarName()) f.AddLine("%s := %s.Arguments", argsVar.VarName(), mCallParam.VarName()) f.AddLine("switch %s.Name {", mCallParam.VarName()) for _, _m := range methods { m := (*method)(_m) f.AddLineIndent("case %q:", m.Name) m.outputCall(f, mCallParam, argsVar, errVar, rcvVar, []string{"nil"}) f.Unindent() } f.AddLineIndent("default:") f.AddLine(`return nil,fmt.Errorf("Unknown function %%s.", %s.Name)`, mCallParam.VarName()) f.AddLineUnindent("}") // switch f.AddLineUnindent("}") // DispatchCall function } }