@@ -50,14 +50,14 @@ const (
50
50
// Reads an object from the input
51
51
func ReadObject (r io.Reader ) (obj py.Object , err error ) {
52
52
var code byte
53
+ defer func () { fmt .Printf ("ReadObject(%c) returning %#v with error %v\n " , code , obj , err ) }()
53
54
err = binary .Read (r , binary .LittleEndian , & code )
54
55
if err != nil {
55
56
return
56
57
}
57
58
58
59
//flag := code & FLAG_REF
59
60
Type := code &^ FLAG_REF
60
- fmt .Printf ("Type = %q\n " , Type )
61
61
62
62
switch Type {
63
63
case TYPE_NULL :
@@ -83,8 +83,9 @@ func ReadObject(r io.Reader) (obj py.Object, err error) {
83
83
var n int32
84
84
err = binary .Read (r , binary .LittleEndian , & n )
85
85
if err != nil {
86
- return py . Int64 ( n ), nil
86
+ return
87
87
}
88
+ return py .Int64 (n ), nil
88
89
case TYPE_FLOAT :
89
90
// Floating point number as a string
90
91
var length uint8
@@ -203,8 +204,23 @@ func ReadObject(r io.Reader) (obj py.Object, err error) {
203
204
return
204
205
}
205
206
}
206
- // FIXME differentiate the types TYPE_TUPLE, TYPE_LIST, TYPE_SET, TYPE_FROZENSET
207
- return py .Tuple (tuple ), nil
207
+ switch Type {
208
+ case TYPE_TUPLE :
209
+ return py .Tuple (tuple ), nil
210
+ case TYPE_LIST :
211
+ return py .List (tuple ), nil
212
+ }
213
+
214
+ set := make (py.Set , len (tuple ))
215
+ for _ , obj := range tuple {
216
+ set [obj ] = py.SetValue {}
217
+ }
218
+ switch Type {
219
+ case TYPE_SET :
220
+ return py .Set (set ), nil
221
+ case TYPE_FROZENSET :
222
+ return py .FrozenSet (set ), nil
223
+ }
208
224
case TYPE_DICT :
209
225
// FIXME should be py.Dict
210
226
dict := py .NewStringDict ()
@@ -234,6 +250,7 @@ func ReadObject(r io.Reader) (obj py.Object, err error) {
234
250
if err != nil {
235
251
return
236
252
}
253
+ fmt .Printf ("FIXME unimplemented TYPE_REF in unmarshal\n " )
237
254
// FIXME
238
255
case TYPE_CODE :
239
256
var argcount int32
0 commit comments