mirror of
https://github.com/golang/go
synced 2024-11-23 00:20:12 -07:00
Add support for the basic type "bool".
R=r DELTA=51 (51 added, 0 deleted, 0 changed) OCL=18283 CL=18290
This commit is contained in:
parent
613a5c8bc6
commit
16fd356679
@ -161,3 +161,13 @@ TEXT reflect·PtrStringToAddr(SB),7,$-8
|
||||
MOVQ AX, 16(SP)
|
||||
RET
|
||||
|
||||
TEXT reflect·AddrToPtrBool(SB),7,$-8
|
||||
MOVQ 8(SP), AX
|
||||
MOVQ AX, 16(SP)
|
||||
RET
|
||||
|
||||
TEXT reflect·PtrBoolToAddr(SB),7,$-8
|
||||
MOVQ 8(SP), AX
|
||||
MOVQ AX, 16(SP)
|
||||
RET
|
||||
|
||||
|
@ -36,4 +36,5 @@ Float32
|
||||
Float64
|
||||
Float80
|
||||
String
|
||||
Bool
|
||||
!
|
||||
|
@ -77,6 +77,8 @@ func valuedump(s, t string) {
|
||||
v.(reflect.Float64Value).Put(64.0);
|
||||
case reflect.StringKind:
|
||||
v.(reflect.StringValue).Put("stringy cheese");
|
||||
case reflect.BoolKind:
|
||||
v.(reflect.BoolValue).Put(true);
|
||||
}
|
||||
assert(reflect.ValueToString(v), t);
|
||||
}
|
||||
@ -132,6 +134,7 @@ func main() {
|
||||
valuedump("float32", "+3.200000e+01");
|
||||
valuedump("float64", "+6.400000e+01");
|
||||
valuedump("string", "stringy cheese");
|
||||
valuedump("bool", "true");
|
||||
valuedump("*int8", "*int8(0)");
|
||||
valuedump("**int8", "**int8(0)");
|
||||
valuedump("[5]int32", "[5]int32{0, 0, 0, 0, 0}");
|
||||
|
@ -162,6 +162,12 @@ func ValueToString(val Value) string {
|
||||
return "float80";
|
||||
case StringKind:
|
||||
return val.(StringValue).Get();
|
||||
case BoolKind:
|
||||
if val.(BoolValue).Get() {
|
||||
return "true"
|
||||
} else {
|
||||
return "false"
|
||||
}
|
||||
case PtrKind:
|
||||
v := val.(PtrValue);
|
||||
return TypeToString(typ, false) + "(" + integer(int64(v.Get())) + ")";
|
||||
|
@ -16,6 +16,7 @@ export func typestrings() string // implemented in C; declared here
|
||||
export const (
|
||||
MissingKind = iota;
|
||||
ArrayKind;
|
||||
BoolKind;
|
||||
ChanKind;
|
||||
FloatKind;
|
||||
Float32Kind;
|
||||
@ -82,6 +83,7 @@ func NewBasicType(name string, kind int, size uint64) Type {
|
||||
// Prebuilt basic types
|
||||
export var (
|
||||
Missing = NewBasicType(MissingString, MissingKind, 1);
|
||||
Bool = NewBasicType("bool", BoolKind, 1); // TODO: need to know how big a bool is
|
||||
Int = NewBasicType("int", IntKind, 4); // TODO: need to know how big an int is
|
||||
Int8 = NewBasicType("int8", Int8Kind, 1);
|
||||
Int16 = NewBasicType("int16", Int16Kind, 2);
|
||||
@ -409,6 +411,7 @@ func init() {
|
||||
types["float64"] = &Float64;
|
||||
types["float80"] = &Float80;
|
||||
types["string"] = &String;
|
||||
types["bool"] = &Bool;
|
||||
|
||||
// Basics get prebuilt stubs
|
||||
MissingStub = NewStubType(MissingString, Missing);
|
||||
@ -428,6 +431,7 @@ func init() {
|
||||
basicstub["float64"] = NewStubType("float64", Float64);
|
||||
basicstub["float80"] = NewStubType("float80", Float80);
|
||||
basicstub["string"] = NewStubType("string", String);
|
||||
basicstub["bool"] = NewStubType("bool", Bool);
|
||||
|
||||
Unlock();
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ func AddrToPtrFloat32(Addr) *float32
|
||||
func AddrToPtrFloat64(Addr) *float64
|
||||
func AddrToPtrFloat80(Addr) *float80
|
||||
func AddrToPtrString(Addr) *string
|
||||
func AddrToPtrBool(Addr) *bool
|
||||
|
||||
// -- Int
|
||||
|
||||
@ -438,6 +439,31 @@ func (v *StringValueStruct) Put(s string) {
|
||||
*AddrToPtrString(v.addr) = s
|
||||
}
|
||||
|
||||
// -- Bool
|
||||
|
||||
export type BoolValue interface {
|
||||
Kind() int;
|
||||
Get() bool;
|
||||
Put(bool);
|
||||
Type() Type;
|
||||
}
|
||||
|
||||
type BoolValueStruct struct {
|
||||
CommonV
|
||||
}
|
||||
|
||||
func BoolCreator(typ Type, addr Addr) Value {
|
||||
return &BoolValueStruct{ CommonV{BoolKind, typ, addr} }
|
||||
}
|
||||
|
||||
func (v *BoolValueStruct) Get() bool {
|
||||
return *AddrToPtrBool(v.addr)
|
||||
}
|
||||
|
||||
func (v *BoolValueStruct) Put(b bool) {
|
||||
*AddrToPtrBool(v.addr) = b
|
||||
}
|
||||
|
||||
// -- Pointer
|
||||
|
||||
export type PtrValue interface {
|
||||
@ -665,6 +691,7 @@ func init() {
|
||||
creator[Float64Kind] = &Float64Creator;
|
||||
creator[Float80Kind] = &Float80Creator;
|
||||
creator[StringKind] = &StringCreator;
|
||||
creator[BoolKind] = &BoolCreator;
|
||||
creator[PtrKind] = &PtrCreator;
|
||||
creator[ArrayKind] = &ArrayCreator;
|
||||
creator[MapKind] = &MapCreator;
|
||||
|
Loading…
Reference in New Issue
Block a user