// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by "stringer -bitset -type FuncPropBits"; DO NOT EDIT.

package inlheur

import (
	"bytes"
	"strconv"
)

func _() {
	// An "invalid array index" compiler error signifies that the constant values have changed.
	// Re-run the stringer command to generate them again.
	var x [1]struct{}
	_ = x[FuncPropNeverReturns-1]
}

var _FuncPropBits_value = [...]uint64{
	0x1, /* FuncPropNeverReturns */
}

const _FuncPropBits_name = "FuncPropNeverReturns"

var _FuncPropBits_index = [...]uint8{0, 20}

func (i FuncPropBits) String() string {
	var b bytes.Buffer

	remain := uint64(i)
	seen := false

	for k, v := range _FuncPropBits_value {
		x := _FuncPropBits_name[_FuncPropBits_index[k]:_FuncPropBits_index[k+1]]
		if v == 0 {
			if i == 0 {
				b.WriteString(x)
				return b.String()
			}
			continue
		}
		if (v & remain) == v {
			remain &^= v
			x := _FuncPropBits_name[_FuncPropBits_index[k]:_FuncPropBits_index[k+1]]
			if seen {
				b.WriteString("|")
			}
			seen = true
			b.WriteString(x)
		}
	}
	if remain == 0 {
		return b.String()
	}
	return "FuncPropBits(0x" + strconv.FormatInt(int64(i), 16) + ")"
}
