func toJavaScriptType(t *types.Basic) string { switch t.Kind() { case types.UntypedInt: return "Int" case types.Byte: return "Uint8" case types.Rune: return "Int32" case types.UnsafePointer: return "UnsafePointer" default: name := t.String() return strings.ToUpper(name[:1]) + name[1:] } }
func (c *funcContext) fixNumber(value *expression, basic *types.Basic) *expression { switch basic.Kind() { case types.Int8: return c.formatParenExpr("%s << 24 >> 24", value) case types.Uint8: return c.formatParenExpr("%s << 24 >>> 24", value) case types.Int16: return c.formatParenExpr("%s << 16 >> 16", value) case types.Uint16: return c.formatParenExpr("%s << 16 >>> 16", value) case types.Int32, types.Int, types.UntypedInt: return c.formatParenExpr("%s >> 0", value) case types.Uint32, types.Uint, types.Uintptr: return c.formatParenExpr("%s >>> 0", value) case types.Float32: return c.formatExpr("$fround(%s)", value) case types.Float64: return value default: panic(fmt.Sprintf("fixNumber: unhandled basic.Kind(): %s", basic.String())) } }
func (d *DIBuilder) descriptorBasic(t *types.Basic, name string) llvm.Value { switch t.Kind() { case types.String: return d.typeDebugDescriptor(types.NewStruct([]*types.Var{ types.NewVar(0, nil, "ptr", types.NewPointer(types.Typ[types.Uint8])), types.NewVar(0, nil, "len", types.Typ[types.Int]), }, nil), name) case types.UnsafePointer: return d.builder.CreateBasicType(llvm.DIBasicType{ Name: name, SizeInBits: uint64(d.sizes.Sizeof(t) * 8), AlignInBits: uint64(d.sizes.Alignof(t) * 8), Encoding: llvm.DW_ATE_unsigned, }) default: bt := llvm.DIBasicType{ Name: t.String(), SizeInBits: uint64(d.sizes.Sizeof(t) * 8), AlignInBits: uint64(d.sizes.Alignof(t) * 8), } switch bi := t.Info(); { case bi&types.IsBoolean != 0: bt.Encoding = llvm.DW_ATE_boolean case bi&types.IsUnsigned != 0: bt.Encoding = llvm.DW_ATE_unsigned case bi&types.IsInteger != 0: bt.Encoding = llvm.DW_ATE_signed case bi&types.IsFloat != 0: bt.Encoding = llvm.DW_ATE_float case bi&types.IsComplex != 0: bt.Encoding = llvm.DW_ATE_imaginary_float case bi&types.IsUnsigned != 0: bt.Encoding = llvm.DW_ATE_unsigned default: panic(fmt.Sprintf("unhandled: %#v", t)) } return d.builder.CreateBasicType(bt) } }
func isUnsigned(t *types.Basic) bool { return t.Info()&types.IsUnsigned != 0 }
func isString(t *types.Basic) bool { return t.Info()&types.IsString != 0 }
func isNumeric(t *types.Basic) bool { return t.Info()&types.IsNumeric != 0 }
func isInteger(t *types.Basic) bool { return t.Info()&types.IsInteger != 0 }
func isFloat(t *types.Basic) bool { return t.Info()&types.IsFloat != 0 }
func isComplex(t *types.Basic) bool { return t.Info()&types.IsComplex != 0 }
func isBoolean(t *types.Basic) bool { return t.Info()&types.IsBoolean != 0 }
func is64Bit(t *types.Basic) bool { return t.Kind() == types.Int64 || t.Kind() == types.Uint64 }