mirror of
https://github.com/golang/go
synced 2024-11-19 03:24:40 -07:00
runtime: remove duplicated Go constants
The C header files are the single point of truth: every C enum constant Foo is available to Go as _Foo. Remove or redirect duplicate Go declarations so they cannot be out of sync. Eventually we will need to put constants in Go, but for now having them be out of sync with C is too risky. These predate the build support for auto-generating Go constants from the C definitions. LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/141510043
This commit is contained in:
parent
8d61334dd5
commit
d2574e2adb
@ -423,6 +423,52 @@ func (w *Walker) parseFile(dir, file string) (*ast.File, error) {
|
|||||||
" _Genqueue = 7;" +
|
" _Genqueue = 7;" +
|
||||||
" _Gcopystack = 8;" +
|
" _Gcopystack = 8;" +
|
||||||
" _NSIG = 32;" +
|
" _NSIG = 32;" +
|
||||||
|
" _FlagNoScan = iota;" +
|
||||||
|
" _FlagNoZero;" +
|
||||||
|
" _TinySize;" +
|
||||||
|
" _TinySizeClass;" +
|
||||||
|
" _MaxSmallSize;" +
|
||||||
|
" _PageShift;" +
|
||||||
|
" _PageSize;" +
|
||||||
|
" _PageMask;" +
|
||||||
|
" _BitsPerPointer;" +
|
||||||
|
" _BitsMask;" +
|
||||||
|
" _PointersPerByte;" +
|
||||||
|
" _MaxGCMask;" +
|
||||||
|
" _BitsDead;" +
|
||||||
|
" _BitsPointer;" +
|
||||||
|
" _MSpanInUse;" +
|
||||||
|
" _ConcurrentSweep;" +
|
||||||
|
" _KindBool;" +
|
||||||
|
" _KindInt;" +
|
||||||
|
" _KindInt8;" +
|
||||||
|
" _KindInt16;" +
|
||||||
|
" _KindInt32;" +
|
||||||
|
" _KindInt64;" +
|
||||||
|
" _KindUint;" +
|
||||||
|
" _KindUint8;" +
|
||||||
|
" _KindUint16;" +
|
||||||
|
" _KindUint32;" +
|
||||||
|
" _KindUint64;" +
|
||||||
|
" _KindUintptr;" +
|
||||||
|
" _KindFloat32;" +
|
||||||
|
" _KindFloat64;" +
|
||||||
|
" _KindComplex64;" +
|
||||||
|
" _KindComplex128;" +
|
||||||
|
" _KindArray;" +
|
||||||
|
" _KindChan;" +
|
||||||
|
" _KindFunc;" +
|
||||||
|
" _KindInterface;" +
|
||||||
|
" _KindMap;" +
|
||||||
|
" _KindPtr;" +
|
||||||
|
" _KindSlice;" +
|
||||||
|
" _KindString;" +
|
||||||
|
" _KindStruct;" +
|
||||||
|
" _KindUnsafePointer;" +
|
||||||
|
" _KindDirectIface;" +
|
||||||
|
" _KindGCProg;" +
|
||||||
|
" _KindNoPointers;" +
|
||||||
|
" _KindMask;" +
|
||||||
")"
|
")"
|
||||||
f, err = parser.ParseFile(fset, filename, src, 0)
|
f, err = parser.ParseFile(fset, filename, src, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
6
src/cmd/dist/buildruntime.c
vendored
6
src/cmd/dist/buildruntime.c
vendored
@ -329,6 +329,8 @@ mkzsys(char *dir, char *file)
|
|||||||
|
|
||||||
static char *runtimedefs[] = {
|
static char *runtimedefs[] = {
|
||||||
"defs.c",
|
"defs.c",
|
||||||
|
"malloc.c",
|
||||||
|
"mgc0.c",
|
||||||
"proc.c",
|
"proc.c",
|
||||||
"parfor.c",
|
"parfor.c",
|
||||||
};
|
};
|
||||||
@ -337,8 +339,8 @@ static char *runtimedefs[] = {
|
|||||||
// which contains Go struct definitions equivalent to the C ones.
|
// which contains Go struct definitions equivalent to the C ones.
|
||||||
// Mostly we just write the output of 6c -q to the file.
|
// Mostly we just write the output of 6c -q to the file.
|
||||||
// However, we run it on multiple files, so we have to delete
|
// However, we run it on multiple files, so we have to delete
|
||||||
// the duplicated definitions, and we don't care about the funcs
|
// the duplicated definitions, and we don't care about the funcs,
|
||||||
// and consts, so we delete those too.
|
// so we delete those too.
|
||||||
//
|
//
|
||||||
void
|
void
|
||||||
mkzruntimedefs(char *dir, char *file)
|
mkzruntimedefs(char *dir, char *file)
|
||||||
|
@ -4,9 +4,5 @@
|
|||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
const (
|
|
||||||
cacheLineSize = 64
|
|
||||||
)
|
|
||||||
|
|
||||||
type uintreg uint32
|
type uintreg uint32
|
||||||
type intptr int32 // TODO(rsc): remove
|
type intptr int32 // TODO(rsc): remove
|
||||||
|
@ -4,9 +4,5 @@
|
|||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
const (
|
|
||||||
cacheLineSize = 64
|
|
||||||
)
|
|
||||||
|
|
||||||
type uintreg uint64
|
type uintreg uint64
|
||||||
type intptr int64 // TODO(rsc): remove
|
type intptr int64 // TODO(rsc): remove
|
||||||
|
@ -4,9 +4,5 @@
|
|||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
const (
|
|
||||||
cacheLineSize = 64
|
|
||||||
)
|
|
||||||
|
|
||||||
type uintreg uint64
|
type uintreg uint64
|
||||||
type intptr int32 // TODO(rsc): remove
|
type intptr int32 // TODO(rsc): remove
|
||||||
|
@ -4,9 +4,5 @@
|
|||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
const (
|
|
||||||
cacheLineSize = 32
|
|
||||||
)
|
|
||||||
|
|
||||||
type uintreg uint32
|
type uintreg uint32
|
||||||
type intptr int32 // TODO(rsc): remove
|
type intptr int32 // TODO(rsc): remove
|
||||||
|
@ -26,7 +26,7 @@ func makechan(t *chantype, size int64) *hchan {
|
|||||||
if hchanSize%maxAlign != 0 || elem.align > maxAlign {
|
if hchanSize%maxAlign != 0 || elem.align > maxAlign {
|
||||||
gothrow("makechan: bad alignment")
|
gothrow("makechan: bad alignment")
|
||||||
}
|
}
|
||||||
if size < 0 || int64(uintptr(size)) != size || (elem.size > 0 && uintptr(size) > (maxMem-hchanSize)/uintptr(elem.size)) {
|
if size < 0 || int64(uintptr(size)) != size || (elem.size > 0 && uintptr(size) > (maxmem-hchanSize)/uintptr(elem.size)) {
|
||||||
panic("makechan: size out of range")
|
panic("makechan: size out of range")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,9 +102,9 @@ uintptr runtime·sizeof_C_MStats = sizeof(MStats) - (NumSizeClasses - 61) * size
|
|||||||
|
|
||||||
#define MaxArena32 (2U<<30)
|
#define MaxArena32 (2U<<30)
|
||||||
|
|
||||||
// For use by Go. It can't be a constant in Go, unfortunately,
|
// For use by Go. If it were a C enum it would be made available automatically,
|
||||||
// because it depends on the OS.
|
// but the value of MaxMem is too large for enum.
|
||||||
uintptr runtime·maxMem = MaxMem;
|
uintptr runtime·maxmem = MaxMem;
|
||||||
|
|
||||||
void
|
void
|
||||||
runtime·mallocinit(void)
|
runtime·mallocinit(void)
|
||||||
|
@ -11,49 +11,41 @@ import (
|
|||||||
const (
|
const (
|
||||||
debugMalloc = false
|
debugMalloc = false
|
||||||
|
|
||||||
flagNoScan = 1 << 0 // GC doesn't have to scan object
|
flagNoScan = _FlagNoScan
|
||||||
flagNoZero = 1 << 1 // don't zero memory
|
flagNoZero = _FlagNoZero
|
||||||
|
|
||||||
maxTinySize = 16
|
maxTinySize = _TinySize
|
||||||
tinySizeClass = 2
|
tinySizeClass = _TinySizeClass
|
||||||
maxSmallSize = 32 << 10
|
maxSmallSize = _MaxSmallSize
|
||||||
|
|
||||||
pageShift = 13
|
pageShift = _PageShift
|
||||||
pageSize = 1 << pageShift
|
pageSize = _PageSize
|
||||||
pageMask = pageSize - 1
|
pageMask = _PageMask
|
||||||
|
|
||||||
bitsPerPointer = 2
|
bitsPerPointer = _BitsPerPointer
|
||||||
bitsMask = 1<<bitsPerPointer - 1
|
bitsMask = _BitsMask
|
||||||
pointersPerByte = 8 / bitsPerPointer
|
pointersPerByte = _PointersPerByte
|
||||||
bitPtrMask = bitsMask << 2
|
maxGCMask = _MaxGCMask
|
||||||
maxGCMask = 64
|
bitsDead = _BitsDead
|
||||||
bitsDead = 0
|
bitsPointer = _BitsPointer
|
||||||
bitsPointer = 2
|
|
||||||
|
|
||||||
bitBoundary = 1
|
mSpanInUse = _MSpanInUse
|
||||||
bitMarked = 2
|
|
||||||
bitMask = bitBoundary | bitMarked
|
|
||||||
|
|
||||||
mSpanInUse = 0
|
concurrentSweep = _ConcurrentSweep != 0
|
||||||
|
|
||||||
concurrentSweep = true
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Page number (address>>pageShift)
|
// Page number (address>>pageShift)
|
||||||
type pageID uintptr
|
type pageID uintptr
|
||||||
|
|
||||||
// All zero-sized allocations return a pointer to this byte.
|
// base address for all 0-byte allocations
|
||||||
var zeroObject byte
|
var zerobase uintptr
|
||||||
|
|
||||||
// Maximum possible heap size.
|
|
||||||
var maxMem uintptr
|
|
||||||
|
|
||||||
// Allocate an object of size bytes.
|
// Allocate an object of size bytes.
|
||||||
// Small objects are allocated from the per-P cache's free lists.
|
// Small objects are allocated from the per-P cache's free lists.
|
||||||
// Large objects (> 32 kB) are allocated straight from the heap.
|
// Large objects (> 32 kB) are allocated straight from the heap.
|
||||||
func mallocgc(size uintptr, typ *_type, flags int) unsafe.Pointer {
|
func mallocgc(size uintptr, typ *_type, flags int) unsafe.Pointer {
|
||||||
if size == 0 {
|
if size == 0 {
|
||||||
return unsafe.Pointer(&zeroObject)
|
return unsafe.Pointer(&zerobase)
|
||||||
}
|
}
|
||||||
size0 := size
|
size0 := size
|
||||||
|
|
||||||
@ -357,7 +349,7 @@ func newarray(typ *_type, n uintptr) unsafe.Pointer {
|
|||||||
if typ.kind&kindNoPointers != 0 {
|
if typ.kind&kindNoPointers != 0 {
|
||||||
flags |= flagNoScan
|
flags |= flagNoScan
|
||||||
}
|
}
|
||||||
if int(n) < 0 || (typ.size > 0 && n > maxMem/uintptr(typ.size)) {
|
if int(n) < 0 || (typ.size > 0 && n > maxmem/uintptr(typ.size)) {
|
||||||
panic("runtime: allocation size out of range")
|
panic("runtime: allocation size out of range")
|
||||||
}
|
}
|
||||||
return mallocgc(uintptr(typ.size)*n, typ, flags)
|
return mallocgc(uintptr(typ.size)*n, typ, flags)
|
||||||
|
@ -123,7 +123,7 @@ static FinBlock *allfin; // list of all blocks
|
|||||||
BitVector runtime·gcdatamask;
|
BitVector runtime·gcdatamask;
|
||||||
BitVector runtime·gcbssmask;
|
BitVector runtime·gcbssmask;
|
||||||
|
|
||||||
extern Mutex runtime·gclock;
|
Mutex runtime·gclock;
|
||||||
|
|
||||||
static Workbuf* getempty(Workbuf*);
|
static Workbuf* getempty(Workbuf*);
|
||||||
static Workbuf* getfull(Workbuf*);
|
static Workbuf* getfull(Workbuf*);
|
||||||
|
@ -69,18 +69,6 @@ func clearpools() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// State of background sweep.
|
|
||||||
// Protected by gclock.
|
|
||||||
// Must match mgc0.c.
|
|
||||||
var sweep struct {
|
|
||||||
g *g
|
|
||||||
parked bool
|
|
||||||
spanidx uint32 // background sweeper position
|
|
||||||
nbgsweep uint32
|
|
||||||
npausesweep uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
var gclock mutex // also in mgc0.c
|
|
||||||
func gosweepone() uintptr
|
func gosweepone() uintptr
|
||||||
func gosweepdone() bool
|
func gosweepdone() bool
|
||||||
|
|
||||||
|
@ -68,9 +68,9 @@ enum {
|
|||||||
// there. On a 64-bit system the off'th word in the arena is tracked by
|
// there. On a 64-bit system the off'th word in the arena is tracked by
|
||||||
// the off/16+1'th word before mheap.arena_start. (On a 32-bit system,
|
// the off/16+1'th word before mheap.arena_start. (On a 32-bit system,
|
||||||
// the only difference is that the divisor is 8.)
|
// the only difference is that the divisor is 8.)
|
||||||
|
enum {
|
||||||
#define bitBoundary ((uintptr)1) // boundary of an object
|
bitBoundary = 1, // boundary of an object
|
||||||
#define bitMarked ((uintptr)2) // marked object
|
bitMarked = 2, // marked object
|
||||||
|
bitMask = bitBoundary | bitMarked,
|
||||||
#define bitMask ((uintptr)bitBoundary|bitMarked)
|
bitPtrMask = BitsMask<<2,
|
||||||
#define bitPtrMask ((uintptr)BitsMask<<2)
|
};
|
||||||
|
@ -22,5 +22,3 @@ func mach_semaphore_wait(sema uint32) int32
|
|||||||
func mach_semaphore_timedwait(sema, sec, nsec uint32) int32
|
func mach_semaphore_timedwait(sema, sec, nsec uint32) int32
|
||||||
func mach_semaphore_signal(sema uint32) int32
|
func mach_semaphore_signal(sema uint32) int32
|
||||||
func mach_semaphore_signal_all(sema uint32) int32
|
func mach_semaphore_signal_all(sema uint32) int32
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
@ -15,5 +15,3 @@ func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, nds
|
|||||||
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
||||||
func raise(sig int32)
|
func raise(sig int32)
|
||||||
func sys_umtx_op(addr unsafe.Pointer, mode int32, val uint32, ptr2, ts unsafe.Pointer) int32
|
func sys_umtx_op(addr unsafe.Pointer, mode int32, val uint32, ptr2, ts unsafe.Pointer) int32
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
@ -15,5 +15,3 @@ func rtsigprocmask(sig int32, new, old unsafe.Pointer, size int32)
|
|||||||
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
||||||
func raise(sig int32)
|
func raise(sig int32)
|
||||||
func sched_getaffinity(pid, len uintptr, buf *uintptr) int32
|
func sched_getaffinity(pid, len uintptr, buf *uintptr) int32
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
@ -23,8 +23,6 @@ func nacl_cond_timed_wait_abs(cond, lock int32, ts unsafe.Pointer) int32
|
|||||||
func nacl_thread_create(fn, stk, tls, xx unsafe.Pointer) int32
|
func nacl_thread_create(fn, stk, tls, xx unsafe.Pointer) int32
|
||||||
func nacl_nanosleep(ts, extra unsafe.Pointer) int32
|
func nacl_nanosleep(ts, extra unsafe.Pointer) int32
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
|
||||||
func os_sigpipe() {
|
func os_sigpipe() {
|
||||||
gothrow("too many writes on closed pipe")
|
gothrow("too many writes on closed pipe")
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,3 @@ func lwp_create(ctxt unsafe.Pointer, flags uintptr, lwpid unsafe.Pointer) int32
|
|||||||
func lwp_park(abstime unsafe.Pointer, unpark int32, hint, unparkhint unsafe.Pointer) int32
|
func lwp_park(abstime unsafe.Pointer, unpark int32, hint, unparkhint unsafe.Pointer) int32
|
||||||
func lwp_unpark(lwp int32, hint unsafe.Pointer) int32
|
func lwp_unpark(lwp int32, hint unsafe.Pointer) int32
|
||||||
func lwp_self() int32
|
func lwp_self() int32
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
@ -15,5 +15,3 @@ func raise(sig int32)
|
|||||||
func tfork(param unsafe.Pointer, psize uintptr, mm, gg, fn unsafe.Pointer) int32
|
func tfork(param unsafe.Pointer, psize uintptr, mm, gg, fn unsafe.Pointer) int32
|
||||||
func thrsleep(ident unsafe.Pointer, clock_id int32, tsp, lock, abort unsafe.Pointer) int32
|
func thrsleep(ident unsafe.Pointer, clock_id int32, tsp, lock, abort unsafe.Pointer) int32
|
||||||
func thrwakeup(ident unsafe.Pointer, n int32) int32
|
func thrwakeup(ident unsafe.Pointer, n int32) int32
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
@ -24,10 +24,6 @@ func setfpmasks()
|
|||||||
func tstart_plan9(newm *m)
|
func tstart_plan9(newm *m)
|
||||||
func errstr() string
|
func errstr() string
|
||||||
|
|
||||||
// The size of the note handler frame varies among architectures,
|
|
||||||
// but 512 bytes should be enough for every implementation.
|
|
||||||
const stackSystem = 512
|
|
||||||
|
|
||||||
type _Plink uintptr
|
type _Plink uintptr
|
||||||
|
|
||||||
func os_sigpipe() {
|
func os_sigpipe() {
|
||||||
|
@ -98,5 +98,3 @@ func sysvicall6(fn *libcFunc, a1, a2, a3, a4, a5, a6 uintptr) uintptr {
|
|||||||
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
|
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
|
||||||
return libcall.r1
|
return libcall.r1
|
||||||
}
|
}
|
||||||
|
|
||||||
const stackSystem = 0
|
|
||||||
|
@ -26,8 +26,6 @@ func netpollopen(fd uintptr, pd *pollDesc) int32
|
|||||||
func netpollclose(fd uintptr) int32
|
func netpollclose(fd uintptr) int32
|
||||||
func netpollarm(pd *pollDesc, mode int)
|
func netpollarm(pd *pollDesc, mode int)
|
||||||
|
|
||||||
const stackSystem = 512 * ptrSize
|
|
||||||
|
|
||||||
func os_sigpipe() {
|
func os_sigpipe() {
|
||||||
gothrow("too many writes on closed pipe")
|
gothrow("too many writes on closed pipe")
|
||||||
}
|
}
|
||||||
|
@ -697,7 +697,6 @@ enum
|
|||||||
* external data
|
* external data
|
||||||
*/
|
*/
|
||||||
extern String runtime·emptystring;
|
extern String runtime·emptystring;
|
||||||
extern uintptr runtime·zerobase;
|
|
||||||
extern G** runtime·allg;
|
extern G** runtime·allg;
|
||||||
extern Slice runtime·allgs; // []*G
|
extern Slice runtime·allgs; // []*G
|
||||||
extern uintptr runtime·allglen;
|
extern uintptr runtime·allglen;
|
||||||
|
@ -35,7 +35,7 @@ const semTabSize = 251
|
|||||||
|
|
||||||
var semtable [semTabSize]struct {
|
var semtable [semTabSize]struct {
|
||||||
root semaRoot
|
root semaRoot
|
||||||
pad [cacheLineSize - unsafe.Sizeof(semaRoot{})]byte
|
pad [_CacheLineSize - unsafe.Sizeof(semaRoot{})]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called from sync/net packages.
|
// Called from sync/net packages.
|
||||||
|
@ -22,11 +22,11 @@ func makeslice(t *slicetype, len64 int64, cap64 int64) sliceStruct {
|
|||||||
// but since the cap is only being supplied implicitly, saying len is clearer.
|
// but since the cap is only being supplied implicitly, saying len is clearer.
|
||||||
// See issue 4085.
|
// See issue 4085.
|
||||||
len := int(len64)
|
len := int(len64)
|
||||||
if len64 < 0 || int64(len) != len64 || t.elem.size > 0 && uintptr(len) > maxMem/uintptr(t.elem.size) {
|
if len64 < 0 || int64(len) != len64 || t.elem.size > 0 && uintptr(len) > maxmem/uintptr(t.elem.size) {
|
||||||
panic(errorString("makeslice: len out of range"))
|
panic(errorString("makeslice: len out of range"))
|
||||||
}
|
}
|
||||||
cap := int(cap64)
|
cap := int(cap64)
|
||||||
if cap < len || int64(cap) != cap64 || t.elem.size > 0 && uintptr(cap) > maxMem/uintptr(t.elem.size) {
|
if cap < len || int64(cap) != cap64 || t.elem.size > 0 && uintptr(cap) > maxmem/uintptr(t.elem.size) {
|
||||||
panic(errorString("makeslice: cap out of range"))
|
panic(errorString("makeslice: cap out of range"))
|
||||||
}
|
}
|
||||||
p := newarray(t.elem, uintptr(cap))
|
p := newarray(t.elem, uintptr(cap))
|
||||||
@ -42,7 +42,7 @@ func growslice(t *slicetype, old sliceStruct, n int64) sliceStruct {
|
|||||||
cap64 := int64(old.cap) + n
|
cap64 := int64(old.cap) + n
|
||||||
cap := int(cap64)
|
cap := int(cap64)
|
||||||
|
|
||||||
if int64(cap) != cap64 || cap < old.cap || t.elem.size > 0 && uintptr(cap) > maxMem/uintptr(t.elem.size) {
|
if int64(cap) != cap64 || cap < old.cap || t.elem.size > 0 && uintptr(cap) > maxmem/uintptr(t.elem.size) {
|
||||||
panic(errorString("growslice: cap out of range"))
|
panic(errorString("growslice: cap out of range"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ func growslice(t *slicetype, old sliceStruct, n int64) sliceStruct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if uintptr(newcap) >= maxMem/uintptr(et.size) {
|
if uintptr(newcap) >= maxmem/uintptr(et.size) {
|
||||||
panic(errorString("growslice: cap out of range"))
|
panic(errorString("growslice: cap out of range"))
|
||||||
}
|
}
|
||||||
lenmem := uintptr(old.len) * uintptr(et.size)
|
lenmem := uintptr(old.len) * uintptr(et.size)
|
||||||
|
@ -225,7 +225,7 @@ func rawbyteslice(size int) (b []byte) {
|
|||||||
|
|
||||||
// rawruneslice allocates a new rune slice. The rune slice is not zeroed.
|
// rawruneslice allocates a new rune slice. The rune slice is not zeroed.
|
||||||
func rawruneslice(size int) (b []rune) {
|
func rawruneslice(size int) (b []rune) {
|
||||||
if uintptr(size) > maxMem/4 {
|
if uintptr(size) > maxmem/4 {
|
||||||
gothrow("out of memory")
|
gothrow("out of memory")
|
||||||
}
|
}
|
||||||
mem := goroundupsize(uintptr(size) * 4)
|
mem := goroundupsize(uintptr(size) * 4)
|
||||||
|
@ -5,37 +5,37 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
const (
|
const (
|
||||||
kindBool = 1 + iota
|
kindBool = _KindBool
|
||||||
kindInt
|
kindInt = _KindInt
|
||||||
kindInt8
|
kindInt8 = _KindInt8
|
||||||
kindInt16
|
kindInt16 = _KindInt16
|
||||||
kindInt32
|
kindInt32 = _KindInt32
|
||||||
kindInt64
|
kindInt64 = _KindInt64
|
||||||
kindUint
|
kindUint = _KindUint
|
||||||
kindUint8
|
kindUint8 = _KindUint8
|
||||||
kindUint16
|
kindUint16 = _KindUint16
|
||||||
kindUint32
|
kindUint32 = _KindUint32
|
||||||
kindUint64
|
kindUint64 = _KindUint64
|
||||||
kindUintptr
|
kindUintptr = _KindUintptr
|
||||||
kindFloat32
|
kindFloat32 = _KindFloat32
|
||||||
kindFloat64
|
kindFloat64 = _KindFloat64
|
||||||
kindComplex64
|
kindComplex64 = _KindComplex64
|
||||||
kindComplex128
|
kindComplex128 = _KindComplex128
|
||||||
kindArray
|
kindArray = _KindArray
|
||||||
kindChan
|
kindChan = _KindChan
|
||||||
kindFunc
|
kindFunc = _KindFunc
|
||||||
kindInterface
|
kindInterface = _KindInterface
|
||||||
kindMap
|
kindMap = _KindMap
|
||||||
kindPtr
|
kindPtr = _KindPtr
|
||||||
kindSlice
|
kindSlice = _KindSlice
|
||||||
kindString
|
kindString = _KindString
|
||||||
kindStruct
|
kindStruct = _KindStruct
|
||||||
kindUnsafePointer
|
kindUnsafePointer = _KindUnsafePointer
|
||||||
|
|
||||||
kindDirectIface = 1 << 5
|
kindDirectIface = _KindDirectIface
|
||||||
kindGCProg = 1 << 6 // Type.gc points to GC program
|
kindGCProg = _KindGCProg
|
||||||
kindNoPointers = 1 << 7
|
kindNoPointers = _KindNoPointers
|
||||||
kindMask = (1 << 5) - 1
|
kindMask = _KindMask
|
||||||
)
|
)
|
||||||
|
|
||||||
// isDirectIface reports whether t is stored directly in an interface value.
|
// isDirectIface reports whether t is stored directly in an interface value.
|
||||||
|
@ -2,9 +2,6 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// PtrSize vs sizeof(void*): This file is also included from src/cmd/ld/...
|
|
||||||
// which defines PtrSize to be different from sizeof(void*) when crosscompiling.
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
KindBool = 1,
|
KindBool = 1,
|
||||||
KindInt,
|
KindInt,
|
||||||
|
Loading…
Reference in New Issue
Block a user