1
0
mirror of https://github.com/golang/go synced 2024-11-21 22:24:40 -07:00

to improve the chances for compatibility, open a window of unused ids

and specify a lowest id granted to users.

R=rsc
CC=golang-dev
https://golang.org/cl/186081
This commit is contained in:
Rob Pike 2010-01-13 12:06:43 +11:00
parent 632a98592d
commit 24dafbaa37

View File

@ -37,6 +37,7 @@ type typeId int32
var nextId typeId // incremented for each new type we build var nextId typeId // incremented for each new type we build
var typeLock sync.Mutex // set while building a type var typeLock sync.Mutex // set while building a type
const firstUserId = 64 // lowest id number granted to user
type gobType interface { type gobType interface {
id() typeId id() typeId
@ -101,6 +102,7 @@ var tString = bootstrapType("string", "", 6)
var tWireType = mustGetTypeInfo(reflect.Typeof(wireType{})).id var tWireType = mustGetTypeInfo(reflect.Typeof(wireType{})).id
func init() { func init() {
// Some magic numbers to make sure there are no surprises.
checkId(7, tWireType) checkId(7, tWireType)
checkId(9, mustGetTypeInfo(reflect.Typeof(commonType{})).id) checkId(9, mustGetTypeInfo(reflect.Typeof(commonType{})).id)
checkId(11, mustGetTypeInfo(reflect.Typeof(structType{})).id) checkId(11, mustGetTypeInfo(reflect.Typeof(structType{})).id)
@ -109,6 +111,12 @@ func init() {
for k, v := range idToType { for k, v := range idToType {
builtinIdToType[k] = v builtinIdToType[k] = v
} }
// Move the id space upwards to allow for growth in the predefined world
// without breaking existing files.
if nextId > firstUserId {
panicln("nextId too large:", nextId)
}
nextId = firstUserId
} }
// Array type // Array type