github.com/gagliardetto/golang-go@v0.0.0-20201020153340-53909ea70814/cmd/internal/goobj2/builtin.go (about) 1 // Copyright 2019 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package goobj2 6 7 // Builtin (compiler-generated) function references appear 8 // frequently. We assign special indices for them, so they 9 // don't need to be referenced by name. 10 11 // NBuiltin returns the number of listed builtin 12 // symbols. 13 func NBuiltin() int { 14 return len(builtins) 15 } 16 17 // BuiltinName returns the name and ABI of the i-th 18 // builtin symbol. 19 func BuiltinName(i int) (string, int) { 20 return builtins[i].name, builtins[i].abi 21 } 22 23 // BuiltinIdx returns the index of the builtin with the 24 // given name and abi, or -1 if it is not a builtin. 25 func BuiltinIdx(name string, abi int) int { 26 i, ok := builtinMap[name] 27 if !ok { 28 return -1 29 } 30 if builtins[i].abi != abi { 31 return -1 32 } 33 return i 34 } 35 36 //go:generate go run mkbuiltin.go 37 38 var builtinMap map[string]int 39 40 func init() { 41 builtinMap = make(map[string]int, len(builtins)) 42 for i, b := range builtins { 43 builtinMap[b.name] = i 44 } 45 }