Skip to content

Commit d39cee4

Browse files
committed
syscall/js: minimize arg slice allocation (see golang#39740)
1 parent b235317 commit d39cee4

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/syscall/js/js.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,9 +358,21 @@ func (v Value) SetIndex(i int, x interface{}) {
358358

359359
func valueSetIndex(v ref, i int, x ref)
360360

361-
func makeArgs(args []interface{}) ([]Value, []ref) {
362-
argVals := make([]Value, len(args))
363-
argRefs := make([]ref, len(args))
361+
var (
362+
argValsSlice []Value
363+
argRefsSlice []ref
364+
)
365+
366+
func makeArgs(args []interface{}) (argVals []Value, argRefs []ref) {
367+
for i, _ := range argValsSlice {
368+
argValsSlice[i] = Value{}
369+
}
370+
if len(args) > cap(argValsSlice) {
371+
argValsSlice = make([]Value, 0, len(args))
372+
argRefsSlice = make([]ref, 0, len(args))
373+
}
374+
argVals = argValsSlice[:len(args)]
375+
argRefs = argRefsSlice[:len(args)]
364376
for i, arg := range args {
365377
v := ValueOf(arg)
366378
argVals[i] = v

0 commit comments

Comments
 (0)