@@ -310,96 +310,68 @@ func gen(outputName string, obj types.Object, iface *types.Interface) error {
310310 sigParam := sig .Results ().At (k )
311311 rgroup .Id (sigParam .Name ()).Add (util .GetQualCode (sigParam .Type ()))
312312 }
313- }).Block (
314- Do (func (s * Statement ) {
315- s .Add (Const ().Id ("methodName" ).Op ("=" ).Lit (mtd .Name ()))
316- s .Line ()
317-
318- s .Add (For (List (Id ("_" ), Id ("impl" )).Op (":=" ).Range ().Id ("d" ).Dot ("impl" + mtd .Name ())).
319- BlockFunc (func (fgroup * Group ) {
320- fgroup .Id ("qctx" ).Op (":=" ).Id ("d" ).Dot ("createContext" ).Call (Id ("methodName" ))
321-
322- call := Id ("impl" ).CallFunc (func (cgroup * Group ) {
323- cgroup .Id ("qctx" )
324- for k := 0 ; k < sig .Params ().Len (); k ++ {
325- sigParam := sig .Params ().At (k )
326- cgroup .Id (util .ParamName (k , sigParam ))
327- }
328- })
313+ }).BlockFunc (func (s * Group ) {
314+ s .Add (Const ().Id ("methodName" ).Op ("=" ).Lit (mtd .Name ()))
315+ s .Line ()
329316
330- if sig .Results ().Len () == 0 {
331- fgroup .Add (call )
332- } else {
333- fgroup .Add (ListFunc (func (fgroup * Group ) {
334- for k := 0 ; k < sig .Results ().Len (); k ++ {
335- fgroup .Id (fmt .Sprintf ("r%d" , k ))
336- }
337- }).Op (":=" ).Add (call ))
338- }
317+ s .Add (For (List (Id ("_" ), Id ("impl" )).Op (":=" ).Range ().Id ("d" ).Dot ("impl" + mtd .Name ())).
318+ BlockFunc (func (fgroup * Group ) {
319+ fgroup .Id ("qctx" ).Op (":=" ).Id ("d" ).Dot ("createContext" ).Call (Id ("methodName" ))
339320
340- // fgroup.ListFunc(func(fgroup *Group) {
341- // for k := 0; k < sig.Results().Len(); k++ {
342- // fgroup.Id(fmt.Sprintf("r%d", k))
343- // }
344- // }).Op(":=").CallFunc(func(cgroup *Group) {
345- // cgroup.Id("qctx")
346- // for k := 0; k < sig.Params().Len(); k++ {
347- // sigParam := sig.Params().At(k)
348- // cgroup.Id(util.ParamName(k, sigParam))
349- // }
350- // })
351- fgroup .If (Op ("!" ).Id ("qctx" ).Dot ("isNotSupported" )).
352- BlockFunc (func (rgroup * Group ) {
353- rgroup .Id ("d" ).Dot ("addCallMethod" ).Call (Id ("methodName" ))
354- rgroup .ReturnFunc (func (retgroup * Group ) {
355- if sig .Results ().Len () == 0 {
356- return
357- }
358- retgroup .ListFunc (func (retlgroup * Group ) {
359- for k := 0 ; k < sig .Results ().Len (); k ++ {
360- retlgroup .Id (fmt .Sprintf ("r%d" , k ))
361- }
362- })
363- })
364- })
365- }))
366-
367- s .Line ()
368- s .Add (If (Id ("d" ).Dot (fallbackParamName ).Op ("!=" ).Nil ()).BlockFunc (func (bgroup * Group ) {
369- icall := Id ("d" ).Dot (fallbackParamName ).Dot (mtd .Name ()).CallFunc (func (igroup * Group ) {
321+ call := Id ("impl" ).CallFunc (func (cgroup * Group ) {
322+ cgroup .Id ("qctx" )
370323 for k := 0 ; k < sig .Params ().Len (); k ++ {
371324 sigParam := sig .Params ().At (k )
372- igroup .Id (util .ParamName (k , sigParam ))
325+ cgroup .Id (util .ParamName (k , sigParam ))
373326 }
374327 })
328+
375329 if sig .Results ().Len () == 0 {
376- bgroup .Add (icall )
377- bgroup .Return ()
330+ fgroup .Add (call )
378331 } else {
379- bgroup .Add (Return (icall ))
332+ fgroup .Add (ListFunc (func (fgroup * Group ) {
333+ for k := 0 ; k < sig .Results ().Len (); k ++ {
334+ fgroup .Id (fmt .Sprintf ("r%d" , k ))
335+ }
336+ }).Op (":=" ).Add (call ))
380337 }
338+
339+ fgroup .If (Op ("!" ).Id ("qctx" ).Dot ("isNotSupported" )).
340+ BlockFunc (func (rgroup * Group ) {
341+ rgroup .Id ("d" ).Dot ("addCallMethod" ).Call (Id ("methodName" ))
342+ rgroup .ReturnFunc (func (retgroup * Group ) {
343+ if sig .Results ().Len () == 0 {
344+ return
345+ }
346+ retgroup .ListFunc (func (retlgroup * Group ) {
347+ for k := 0 ; k < sig .Results ().Len (); k ++ {
348+ retlgroup .Id (fmt .Sprintf ("r%d" , k ))
349+ }
350+ })
351+ })
352+ })
381353 }))
382- s . Line ()
383-
384- s .Add (Panic ( Qual ( "fmt" , "Errorf " ).
385- Call ( Lit ( fmt . Sprintf ( "[%s] method '%%s' not implemented" , objName )), Id ("methodName" ))))
386-
387- // call := Id("d").Dot("impl" + mtd.Name()).CallFunc(func(cgroup *Group) {
388- // cgroup .Id("d").Dot("createContext").Call(
389- // Lit(mtd.Name()), Id("d").Dot("impl"+mtd.Name()).Op("==").Nil(),
390- // )
391- // for k := 0; k < sig.Params ().Len(); k++ {
392- // sigParam := sig.Params().At(k )
393- // cgroup.Id(util.ParamName(k, sigParam) )
394- // }
395- // } )
396- // if sig.Results().Len() == 0 {
397- // s.Add(call )
398- // } else {
399- // s.Add(Return(call))
400- // }
401- }),
402- )
354+
355+ s . Line ()
356+ s .Add (If ( Id ( "d" ). Dot ( fallbackParamName ). Op ( "!= " ).Nil ()). BlockFunc ( func ( bgroup * Group ) {
357+ icall := Id ("d" ). Dot ( fallbackParamName ). Dot ( mtd . Name ()). CallFunc ( func ( igroup * Group ) {
358+ for k := 0 ; k < sig . Params (). Len (); k ++ {
359+ sigParam := sig . Params (). At ( k )
360+ igroup .Id (util . ParamName ( k , sigParam ))
361+ }
362+ } )
363+ if sig .Results ().Len () == 0 {
364+ bgroup . Add ( icall )
365+ bgroup . Return ( )
366+ } else {
367+ bgroup . Add ( Return ( icall ) )
368+ }
369+ }) )
370+ s . Line ()
371+
372+ s . Add ( Panic ( Qual ( "fmt" , "Errorf" ).
373+ Call ( Lit ( fmt . Sprintf ( "[%s] method '%%s' not implemented" , objName )), Id ( "methodName" ))))
374+ } )
403375 }
404376
405377 // helper methods
0 commit comments