OSDN Git Service

syscall: Fill out GNU/Linux support.
[pf3gnuchains/gcc-fork.git] / libgo / runtime / reflect.goc
1 // Copyright 2010 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package reflect
6 #include "go-type.h"
7 #include "interface.h"
8 #include "runtime.h"
9 #include "go-panic.h"
10
11 func ifaceE2I(inter *Type, e Eface, ret *Iface) {
12         const Type *t;
13         Eface err;
14
15         if(((uintptr)e.__type_descriptor&reflectFlags) != 0)
16                 runtime_throw("invalid interface value");
17         t = e.__type_descriptor;
18         if(t == nil) {
19                 // explicit conversions require non-nil interface value.
20                 newTypeAssertionError(nil, nil, inter,
21                         nil, nil, inter->__reflection,
22                         nil, &err);
23                 __go_panic(err);
24         }
25         ret->__object = e.__object;
26         ret->__methods = __go_convert_interface(inter, t);
27 }