4
4
"context"
5
5
"flag"
6
6
"fmt"
7
- "os"
8
7
"strings"
9
8
10
9
"github.com/cristalhq/acmd"
@@ -26,8 +25,7 @@ func main() {
26
25
Version : version ,
27
26
})
28
27
if err := r .Run (); err != nil {
29
- fmt .Printf ("go-perf: %v\n " , err )
30
- os .Exit (1 )
28
+ r .Exit (err )
31
29
}
32
30
}
33
31
@@ -36,31 +34,43 @@ var cmds = []acmd.Command{
36
34
Name : "almostInlined" ,
37
35
Alias : "inl" ,
38
36
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
+ }
40
41
return run (& almostInlinedRunner {})
41
42
},
42
43
},
43
44
{
44
45
Name : "escapedVariables" ,
45
46
Alias : "esc" ,
46
47
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
+ }
48
52
return run (& escapeAnalysisRunner {})
49
53
},
50
54
},
51
55
{
52
56
Name : "boundChecks" ,
53
57
Alias : "bce" ,
54
58
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
+ }
56
63
return run (& boundCheckRunner {})
57
64
},
58
65
},
59
66
{
60
67
Name : "funcSize" ,
61
68
Alias : "fsize" ,
62
69
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
+ }
64
74
return run (& funcSizeRunner {})
65
75
},
66
76
},
@@ -74,13 +84,24 @@ type subCommandRunner interface {
74
84
func run (cmd subCommandRunner ) error {
75
85
cmd .Init ()
76
86
for _ , pkg := range flag .Args ()[1 :] {
87
+ // skip - and -- paramets
88
+ if strings .HasPrefix (pkg , "-" ) {
89
+ continue
90
+ }
77
91
if err := cmd .Run (pkg ); err != nil {
78
92
fmt .Printf ("%s: %v" , pkg , err )
79
93
}
80
94
}
81
95
return nil
82
96
}
83
97
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
+
84
105
type goArgFunc func () []string
85
106
86
107
func goArgs (pkg string , argFuncs ... goArgFunc ) (args []string ) {
0 commit comments