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  }