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
5package goobj
6
7import "internal/buildcfg"
8
9// Builtin (compiler-generated) function references appear
10// frequently. We assign special indices for them, so they
11// don't need to be referenced by name.
12
13// NBuiltin returns the number of listed builtin
14// symbols.
15func NBuiltin() int {
16	return len(builtins)
17}
18
19// BuiltinName returns the name and ABI of the i-th
20// builtin symbol.
21func BuiltinName(i int) (string, int) {
22	return builtins[i].name, builtins[i].abi
23}
24
25// BuiltinIdx returns the index of the builtin with the
26// given name and abi, or -1 if it is not a builtin.
27func BuiltinIdx(name string, abi int) int {
28	i, ok := builtinMap[name]
29	if !ok {
30		return -1
31	}
32	if buildcfg.Experiment.RegabiWrappers && builtins[i].abi != abi {
33		return -1
34	}
35	return i
36}
37
38//go:generate go run mkbuiltin.go
39
40var builtinMap map[string]int
41
42func init() {
43	builtinMap = make(map[string]int, len(builtins))
44	for i, b := range builtins {
45		builtinMap[b.name] = i
46	}
47}
48