Commit 2b2ec471 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent a8202f5c
......@@ -416,6 +416,7 @@ func newGhost(class string, oid Oid, jar *Connection) IPersistent {
var xpobj reflect.Value // *typ
zc := classTab[class]
if zc == nil {
zc = brokenZClass
xpobj = reflect.ValueOf(&Broken{class: class})
} else {
xpobj = reflect.New(zc.typ)
......@@ -423,6 +424,7 @@ func newGhost(class string, oid Oid, jar *Connection) IPersistent {
xobj := xpobj.Elem() // typ
pbase := xobj.FieldByName("Persistent").Addr().Interface().(*Persistent)
pbase.zclass = zc
pbase.jar = jar
pbase.oid = oid
pbase.serial = 0
......@@ -458,3 +460,10 @@ func (b *brokenState) SetState(state *mem.Buf) error {
b.state = state
return nil
}
// brokenZClass is used for Persistent.zclass for Broken objects.
var brokenZClass = &zclass{
class: "",
typ: reflect.TypeOf(Broken{}),
stateType: reflect.TypeOf(brokenState{}),
}
......@@ -61,15 +61,23 @@ func TestPersistent(t *testing.T) {
// checkObj verifies current state of persistent object.
checkObj := func(obj IPersistent, jar *Connection, oid Oid, serial Tid, state ObjectState, refcnt int32, loading *loadState) {
t.Helper()
xbase := reflect.ValueOf(obj).Elem().FieldByName("Persistent")
pbase := xbase.Addr().Interface().(*Persistent)
badf := func(format string, argv ...interface{}) {
t.Helper()
msg := fmt.Sprintf(format, argv...)
t.Fatalf("%#v: %s", obj, msg)
}
// XXX .zclass ?
zc := pbase.zclass
//zc.class
if typ := reflect.TypeOf(obj).Elem(); typ != zc.typ {
badf("invalid zclass: .typ = %s ; want %s", zc.typ, typ)
}
//zc.stateType
if pbase.jar != jar {
badf("invalid jar")
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment