// Copyright 2019 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 impl

import (
	

	
	
)

// weakFields adds methods to the exported WeakFields type for internal use.
//
// The exported type is an alias to an unnamed type, so methods can't be
// defined directly on it.
type weakFields WeakFields

func ( weakFields) ( protoreflect.FieldNumber) (protoreflect.ProtoMessage, bool) {
	,  := [int32()]
	return , 
}

func ( *weakFields) ( protoreflect.FieldNumber,  protoreflect.ProtoMessage) {
	if * == nil {
		* = make(weakFields)
	}
	(*)[int32()] = 
}

func ( *weakFields) ( protoreflect.FieldNumber) {
	delete(*, int32())
}

func (Export) ( WeakFields,  protoreflect.FieldNumber) bool {
	,  := [int32()]
	return 
}

func (Export) ( *WeakFields,  protoreflect.FieldNumber) {
	delete(*, int32())
}

func (Export) ( WeakFields,  protoreflect.FieldNumber,  protoreflect.FullName) protoreflect.ProtoMessage {
	if ,  := [int32()];  {
		return 
	}
	,  := protoregistry.GlobalTypes.FindMessageByName()
	if  == nil {
		panic(fmt.Sprintf("message %v for weak field is not linked in", ))
	}
	return .Zero().Interface()
}

func (Export) ( *WeakFields,  protoreflect.FieldNumber,  protoreflect.FullName,  protoreflect.ProtoMessage) {
	if  != nil {
		,  := protoregistry.GlobalTypes.FindMessageByName()
		if  == nil {
			panic(fmt.Sprintf("message %v for weak field is not linked in", ))
		}
		if  != .ProtoReflect().Type() {
			panic(fmt.Sprintf("invalid message type for weak field: got %T, want %T", , .Zero().Interface()))
		}
	}
	if  == nil || !.ProtoReflect().IsValid() {
		delete(*, int32())
		return
	}
	if * == nil {
		* = make(weakFields)
	}
	(*)[int32()] = 
}