gcc/libgo/runtime/go-construct-map.c
Ian Lance Taylor 4a14082645 compile, runtime: permit anonymous and empty fields in C header
Permit putting structs with anonymous and empty fields in the C header
    file runtime.inc that is used to build the C runtime code.  This is
    required for upcoming 1.13 support, as the m struct has picked up an
    anonymous field.
    
    Doing this lets the C header contain all the type descriptor structs,
    so start using those in the C code.  This cuts the number of copies of
    type descriptor definitions from 3 to 2.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/192343

From-SVN: r275227
2019-08-30 21:49:49 +00:00

41 lines
1.0 KiB
C

/* go-construct-map.c -- construct a map from an initializer.
Copyright 2009 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. */
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include "runtime.h"
extern void *makemap (const struct maptype *, intgo hint, void *)
__asm__ (GOSYM_PREFIX "runtime.makemap");
extern void *mapassign (const struct maptype *, void *hmap, const void *key)
__asm__ (GOSYM_PREFIX "runtime.mapassign");
void *
__go_construct_map (const struct maptype *type, uintptr_t count,
uintptr_t entry_size, uintptr_t val_offset,
const void *ventries)
{
void *ret;
const unsigned char *entries;
uintptr_t i;
void *p;
ret = makemap(type, (intgo) count, NULL);
entries = (const unsigned char *) ventries;
for (i = 0; i < count; ++i)
{
p = mapassign (type, ret, entries);
typedmemmove (type->elem, p, entries + val_offset);
entries += entry_size;
}
return ret;
}