@@ -21,6 +21,7 @@ package ast
2121
2222import (
2323 "fmt"
24+ "strings"
2425
2526 "github.com/apmckinlay/gsuneido/compile/lexer"
2627 tok "github.com/apmckinlay/gsuneido/compile/tokens"
@@ -299,22 +300,24 @@ type Nary struct {
299300}
300301
301302func (a * Nary ) String () string {
302- s := "Nary(" + a .Tok .String ()
303+ var s strings.Builder
304+ s .WriteString ("Nary(" + a .Tok .String ())
303305 for _ , e := range a .Exprs {
304- s += " " + e .String ()
306+ s . WriteString ( " " + e .String () )
305307 }
306- return s + ")"
308+ return s . String () + ")"
307309}
308310
309311func (a * Nary ) Echo () string {
310312 if len (a .Exprs ) == 0 {
311313 return ""
312314 }
313- s := a .Exprs [0 ].Echo ()
315+ var s strings.Builder
316+ s .WriteString (a .Exprs [0 ].Echo ())
314317 for _ , e := range a .Exprs [1 :] {
315- s += tokEcho [a .Tok ] + e .Echo ()
318+ s . WriteString ( tokEcho [a .Tok ] + e .Echo () )
316319 }
317- return s
320+ return s . String ()
318321}
319322
320323func (a * Nary ) Children (fn func (Node ) Node ) {
@@ -413,27 +416,29 @@ type In struct {
413416}
414417
415418func (a * In ) String () string {
416- s := "In(" + a .E .String () + " ["
419+ var s strings.Builder
420+ s .WriteString ("In(" + a .E .String () + " [" )
417421 sep := ""
418422 for _ , e := range a .Exprs {
419- s += sep + e .String ()
423+ s . WriteString ( sep + e .String () )
420424 sep = " "
421425 }
422- return s + "])"
426+ return s . String () + "])"
423427}
424428
425429func (a * In ) Echo () string {
426430 return a .E .Echo () + a .echo ()
427431}
428432
429433func (a * In ) echo () string {
430- s := " in ("
434+ var s strings.Builder
435+ s .WriteString (" in (" )
431436 sep := ""
432437 for _ , e := range a .Exprs {
433- s += sep + e .Echo ()
438+ s . WriteString ( sep + e .Echo () )
434439 sep = ", "
435440 }
436- return s + ")"
441+ return s . String () + ")"
437442}
438443
439444func (a * In ) Children (fn func (Node ) Node ) {
@@ -482,21 +487,23 @@ type Call struct {
482487}
483488
484489func (a * Call ) String () string {
485- s := "Call(" + a .Fn .String ()
490+ var s strings.Builder
491+ s .WriteString ("Call(" + a .Fn .String ())
486492 for _ , arg := range a .Args {
487- s += " " + arg .String ()
493+ s . WriteString ( " " + arg .String () )
488494 }
489- return s + ")"
495+ return s . String () + ")"
490496}
491497
492498func (a * Call ) Echo () string {
493- s := a .Fn .Echo () + "("
499+ var s strings.Builder
500+ s .WriteString (a .Fn .Echo () + "(" )
494501 sep := ""
495502 for _ , arg := range a .Args {
496- s += sep + arg .Echo ()
503+ s . WriteString ( sep + arg .Echo () )
497504 sep = ", "
498505 }
499- return s + ")"
506+ return s . String () + ")"
500507}
501508
502509func (a * Call ) Children (fn func (Node ) Node ) {
@@ -555,26 +562,27 @@ func (a *Function) String() string {
555562}
556563
557564func (a * Function ) str (which string ) string {
558- s := which + "(" + params (a .Params )
565+ var s strings.Builder
566+ s .WriteString (which + "(" + params (a .Params ))
559567 for _ , stmt := range a .Body {
560568 if stmt != nil {
561- s += "\n \t " + stmt .String ()
569+ s . WriteString ( "\n \t " + stmt .String () )
562570 }
563571 }
564- return s + ")"
572+ return s . String () + ")"
565573}
566574
567575func params (ps []Param ) string {
568- s := ""
576+ var s strings. Builder
569577 sep := ""
570578 for _ , p := range ps {
571579 if sep == "" && p .String () == "this" {
572580 continue
573581 }
574- s += sep + p .String ()
582+ s . WriteString ( sep + p .String () )
575583 sep = ","
576584 }
577- return s
585+ return s . String ()
578586}
579587
580588func childStmt (fn func (Node ) Node , pstmt * Statement ) {
@@ -680,13 +688,14 @@ func (a *Compound) String() string {
680688 if len (a .Body ) == 1 {
681689 return a .Body [0 ].String ()
682690 }
683- s := "{\n "
691+ var s strings.Builder
692+ s .WriteString ("{\n " )
684693 for _ , stmt := range a .Body {
685694 if stmt != nil {
686- s += stmt .String () + "\n "
695+ s . WriteString ( stmt .String () + "\n " )
687696 }
688697 }
689- return s + "}"
698+ return s . String () + "}"
690699}
691700
692701func (a * Compound ) Children (fn func (Node ) Node ) {
@@ -845,23 +854,24 @@ type For struct {
845854}
846855
847856func (a * For ) String () string {
848- s := "For("
857+ var s strings.Builder
858+ s .WriteString ("For(" )
849859 sep := ""
850860 for _ , e := range a .Init {
851- s += sep + e .String ()
861+ s . WriteString ( sep + e .String () )
852862 sep = ","
853863 }
854- s += "; "
864+ s . WriteString ( "; " )
855865 if a .Cond != nil {
856- s += a .Cond .String ()
866+ s . WriteString ( a .Cond .String () )
857867 }
858- s += "; "
868+ s . WriteString ( "; " )
859869 sep = ""
860870 for _ , e := range a .Inc {
861- s += sep + e .String ()
871+ s . WriteString ( sep + e .String () )
862872 sep = ","
863873 }
864- return s + "\n " + a .Body .String () + ")"
874+ return s . String () + "\n " + a .Body .String () + ")"
865875}
866876
867877func (a * For ) Children (fn func (Node ) Node ) {
@@ -941,11 +951,12 @@ type MultiAssign struct {
941951}
942952
943953func (a * MultiAssign ) String () string {
944- s := "MultiAssign("
954+ var s strings.Builder
955+ s .WriteString ("MultiAssign(" )
945956 for _ , e := range a .Lhs {
946- s += e .Echo () + " "
957+ s . WriteString ( e .Echo () + " " )
947958 }
948- return s + a .Rhs .String () + ")"
959+ return s . String () + a .Rhs .String () + ")"
949960}
950961
951962func (a * MultiAssign ) Children (fn func (Node ) Node ) {
@@ -973,37 +984,39 @@ type Case struct {
973984}
974985
975986func (a * Switch ) String () string {
976- s := "Switch(" + a .E .String ()
987+ var s strings.Builder
988+ s .WriteString ("Switch(" + a .E .String ())
977989 for _ , c := range a .Cases {
978- s += "\n " + c .String ()
990+ s . WriteString ( "\n " + c .String () )
979991 }
980992 if a .Default != nil {
981993 if len (a .Default ) == 0 {
982- s += "\n ()"
994+ s . WriteString ( "\n ()" )
983995 }
984996 for _ , stmt := range a .Default {
985997 if stmt != nil {
986- s += "\n " + stmt .String ()
998+ s . WriteString ( "\n " + stmt .String () )
987999 }
9881000 }
9891001 }
990- return s + ")"
1002+ return s . String () + ")"
9911003}
9921004
9931005func (a * Case ) String () string {
994- s := "Case("
1006+ var s strings.Builder
1007+ s .WriteString ("Case(" )
9951008 sep := ""
9961009 for _ , e := range a .Exprs {
997- s += sep + e .String ()
1010+ s . WriteString ( sep + e .String () )
9981011 sep = ","
9991012 }
10001013 for _ , stmt := range a .Body {
10011014 if stmt != nil {
1002- s += "\n " + stmt .String ()
1015+ s . WriteString ( "\n " + stmt .String () )
10031016 }
10041017 }
1005- s += ")"
1006- return s
1018+ s . WriteString ( ")" )
1019+ return s . String ()
10071020}
10081021
10091022func (a * Switch ) Children (fn func (Node ) Node ) {
0 commit comments