@@ -40,14 +40,22 @@ def read(self):
40
40
self .i += 1
41
41
return char
42
42
43
- def fast_forward (self , closer , buffer = None ):
43
+ def fast_forward (self , closer , * , return_object = False ):
44
44
"""Read through the stream until the character is ``closer``, ``]``
45
45
(ending a list) or ``}`` (ending an object.) Intermediate lists and
46
46
objects are skipped."""
47
47
48
48
closer = ord (closer )
49
49
close_stack = [closer ]
50
50
count = 0
51
+
52
+ buffer = None
53
+ if return_object :
54
+ buffer = bytearray (32 )
55
+ # ] = 93, [ = 91
56
+ # } = 125, { = 123
57
+ buffer [0 ] = closer - 2
58
+
51
59
while close_stack :
52
60
char = self .read ()
53
61
count += 1
@@ -114,7 +122,6 @@ def __init__(self, stream):
114
122
self .done = False
115
123
self .has_read = False
116
124
self .finish_char = ""
117
- self .start_char = ""
118
125
119
126
def finish (self ):
120
127
"""Consume all of the characters for this list from the stream."""
@@ -130,10 +137,8 @@ def as_object(self):
130
137
if self .has_read :
131
138
raise BufferError ("Object has already been partly read." )
132
139
133
- buffer = bytearray (32 )
134
- buffer [0 ] = ord (self .start_char )
135
140
self .done = True
136
- return self .data .fast_forward (self .finish_char , buffer )
141
+ return self .data .fast_forward (self .finish_char , return_object = True )
137
142
138
143
139
144
class TransientList (Transient ):
@@ -142,7 +147,6 @@ class TransientList(Transient):
142
147
def __init__ (self , stream ):
143
148
super ().__init__ (stream )
144
149
self .finish_char = "]"
145
- self .start_char = "["
146
150
147
151
def __iter__ (self ):
148
152
return self
@@ -173,7 +177,6 @@ class TransientObject(Transient):
173
177
def __init__ (self , stream ):
174
178
super ().__init__ (stream )
175
179
self .finish_char = "}"
176
- self .start_char = "{"
177
180
self .active_child_key = None
178
181
179
182
def __getitem__ (self , key ):
0 commit comments