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

//go:build (!cgo || (!darwin && !linux && !openbsd)) && !windows
// +build !cgo !darwin,!linux,!openbsd
// +build !windows

package gl

// This file contains stub implementations of what the other work*.go files
// provide. These stubs don't do anything, other than compile (e.g. when cgo is
// disabled).

type context struct{}

func (*context) enqueue(c call) uintptr {
	panic("unimplemented; GOOS/CGO combination not supported")
}

func (*context) cString(str string) (uintptr, func()) {
	panic("unimplemented; GOOS/CGO combination not supported")
}

func (*context) cStringPtr(str string) (uintptr, func()) {
	panic("unimplemented; GOOS/CGO combination not supported")
}

type context3 = context

func NewContext() (Context, Worker) {
	panic("unimplemented; GOOS/CGO combination not supported")
}

func Version() string {
	panic("unimplemented; GOOS/CGO combination not supported")
}
