func (l langType) rtypeBuild(i int, sizes types.Sizes, t types.Type, name string) (string, reflect.Kind) { var kind reflect.Kind kind, name = getTypeInfo(t, name) sof := int64(4) aof := int64(4) if kind != reflect.Invalid { sof = sizes.Sizeof(t) aof = sizes.Alignof(t) } ret := "Go_haxegoruntime_newRRtype.callFromRT(0,\n" ret += fmt.Sprintf("\t/*size:*/ %d,\n", sof) ret += fmt.Sprintf("\t/*align:*/ %d,\n", aof) ret += fmt.Sprintf("\t/*fieldAlign:*/ %d,\n", aof) // TODO check correct for fieldAlign ret += fmt.Sprintf("\t/*kind:*/ %d, // %s\n", kind, (kind & ((1 << 5) - 1)).String()) alg := "false" if types.Comparable(t) { alg = "true" } ret += fmt.Sprintf("\t/*comprable:*/ %s,\n", alg) // TODO change this to be the actual function ret += fmt.Sprintf("\t/*string:*/ \"%s\", // %s\n", escapedTypeString(t.String()), t.String()) ret += fmt.Sprintf("\t/*uncommonType:*/ %s,\n", l.uncommonBuild(i, sizes, name, t)) ptt := "null" for pti, pt := range l.hc.typesByID { _, isPtr := pt.(*types.Pointer) if isPtr { ele := l.hc.pte.At(pt.(*types.Pointer).Elem()) if ele != nil { if i == ele.(int) { ptt = fmt.Sprintf("type%d()", pti) } } } } ret += fmt.Sprintf("\t/*ptrToThis:*/ %s", ptt) ret += ")" return ret, kind }