// Copyright 2014 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.

package importer

import "llvm.org/llgo/third_party/go.tools/go/types"

const (
	magic   = "\n$$ exports $$\n"
	version = "v0"
)

// Tags. Must be < 0.
const (
	// Packages
	packageTag = -(iota + 1)

	// Objects
	constTag
	typeTag
	varTag
	funcTag

	// Types
	arrayTag
	sliceTag
	structTag
	pointerTag
	signatureTag
	interfaceTag
	mapTag
	chanTag
	namedTag

	// Values
	falseTag
	trueTag
	int64Tag
	floatTag
	fractionTag
	complexTag
	stringTag
)

var predeclared = []types.Type{
	// basic types
	types.Typ[types.Bool],
	types.Typ[types.Int],
	types.Typ[types.Int8],
	types.Typ[types.Int16],
	types.Typ[types.Int32],
	types.Typ[types.Int64],
	types.Typ[types.Uint],
	types.Typ[types.Uint8],
	types.Typ[types.Uint16],
	types.Typ[types.Uint32],
	types.Typ[types.Uint64],
	types.Typ[types.Uintptr],
	types.Typ[types.Float32],
	types.Typ[types.Float64],
	types.Typ[types.Complex64],
	types.Typ[types.Complex128],
	types.Typ[types.String],

	// untyped types
	types.Typ[types.UntypedBool],
	types.Typ[types.UntypedInt],
	types.Typ[types.UntypedRune],
	types.Typ[types.UntypedFloat],
	types.Typ[types.UntypedComplex],
	types.Typ[types.UntypedString],
	types.Typ[types.UntypedNil],

	// package unsafe
	types.Typ[types.UnsafePointer],

	// aliases
	types.UniverseByte,
	types.UniverseRune,

	types.Universe.Lookup("error").Type(),
}
