44 "context"
55 "flag"
66 "fmt"
7- "os"
87 "strings"
98
109 "github.com/cristalhq/acmd"
@@ -26,8 +25,7 @@ func main() {
2625 Version : version ,
2726 })
2827 if err := r .Run (); err != nil {
29- fmt .Printf ("go-perf: %v\n " , err )
30- os .Exit (1 )
28+ r .Exit (err )
3129 }
3230}
3331
@@ -36,31 +34,43 @@ var cmds = []acmd.Command{
3634 Name : "almostInlined" ,
3735 Alias : "inl" ,
3836 Description : "find functions that cross inlining threshold just barely" ,
39- ExecFunc : func (_ context.Context , _ []string ) error {
37+ ExecFunc : func (_ context.Context , args []string ) error {
38+ if err := parseArgs ("almostInlined" , args ); err != nil {
39+ return err
40+ }
4041 return run (& almostInlinedRunner {})
4142 },
4243 },
4344 {
4445 Name : "escapedVariables" ,
4546 Alias : "esc" ,
4647 Description : "find variables that are escaped to the heap" ,
47- ExecFunc : func (_ context.Context , _ []string ) error {
48+ ExecFunc : func (_ context.Context , args []string ) error {
49+ if err := parseArgs ("escapedVariables" , args ); err != nil {
50+ return err
51+ }
4852 return run (& escapeAnalysisRunner {})
4953 },
5054 },
5155 {
5256 Name : "boundChecks" ,
5357 Alias : "bce" ,
5458 Description : "find slice/array that has bound check" ,
55- ExecFunc : func (_ context.Context , _ []string ) error {
59+ ExecFunc : func (_ context.Context , args []string ) error {
60+ if err := parseArgs ("boundChecks" , args ); err != nil {
61+ return err
62+ }
5663 return run (& boundCheckRunner {})
5764 },
5865 },
5966 {
6067 Name : "funcSize" ,
6168 Alias : "fsize" ,
6269 Description : "list function machine code sizes in bytes" ,
63- ExecFunc : func (_ context.Context , _ []string ) error {
70+ ExecFunc : func (_ context.Context , args []string ) error {
71+ if err := parseArgs ("funcSize" , args ); err != nil {
72+ return err
73+ }
6474 return run (& funcSizeRunner {})
6575 },
6676 },
@@ -74,13 +84,24 @@ type subCommandRunner interface {
7484func run (cmd subCommandRunner ) error {
7585 cmd .Init ()
7686 for _ , pkg := range flag .Args ()[1 :] {
87+ // skip - and -- paramets
88+ if strings .HasPrefix (pkg , "-" ) {
89+ continue
90+ }
7791 if err := cmd .Run (pkg ); err != nil {
7892 fmt .Printf ("%s: %v" , pkg , err )
7993 }
8094 }
8195 return nil
8296}
8397
98+ func parseArgs (cmd string , args []string ) error {
99+ fset := flag .NewFlagSet (cmd , flag .ContinueOnError )
100+ fset .StringVar (& flagMod , "mod" , "" , `-mod compiler flag(readonly|vendor)` )
101+ fset .BoolVar (& asJSON , "json" , false , `return result as JSON` )
102+ return fset .Parse (args )
103+ }
104+
84105type goArgFunc func () []string
85106
86107func goArgs (pkg string , argFuncs ... goArgFunc ) (args []string ) {
0 commit comments