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

//go:build !goexperiment.staticlockranking

package runtime

const staticLockRanking = false

// // lockRankStruct is embedded in mutex, but is empty when staticklockranking is
// disabled (the default)
type lockRankStruct struct {
}

func lockInit( *mutex,  lockRank) {
}

func getLockRank( *mutex) lockRank {
	return 0
}

func lockWithRank( *mutex,  lockRank) {
	lock2()
}

// This function may be called in nosplit context and thus must be nosplit.
//
//go:nosplit
func acquireLockRankAndM( lockRank) {
	acquirem()
}

func unlockWithRank( *mutex) {
	unlock2()
}

// This function may be called in nosplit context and thus must be nosplit.
//
//go:nosplit
func releaseLockRankAndM( lockRank) {
	releasem(getg().m)
}

func lockWithRankMayAcquire( *mutex,  lockRank) {
}

//go:nosplit
func assertLockHeld( *mutex) {
}

//go:nosplit
func assertRankHeld( lockRank) {
}

//go:nosplit
func worldStopped() {
}

//go:nosplit
func worldStarted() {
}

//go:nosplit
func assertWorldStopped() {
}

//go:nosplit
func assertWorldStoppedOrLockHeld( *mutex) {
}