Changeset 196
- Timestamp:
- 06/30/06 04:07:42 (2 years ago)
- Files:
-
- pyyaml/trunk/ext/_yaml.pyx (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
pyyaml/trunk/ext/_yaml.pyx
r195 r196 10 10 return (major, minor, patch) 11 11 12 def test_scanner(data): 13 cdef yaml_parser_t *parser 14 cdef yaml_token_t *token 15 cdef int done 16 if PyString_CheckExact(data) == 0: 17 raise TypeError("string input required") 18 parser = yaml_parser_new() 19 if parser == NULL: 20 raise MemoryError 21 yaml_parser_set_input_string(parser, PyString_AS_STRING(data), PyString_GET_SIZE(data)) 22 done = 0 23 while done == 0: 24 token = yaml_parser_get_token(parser) 25 if token == NULL: 26 raise MemoryError 27 if token.type == YAML_STREAM_END_TOKEN: 28 done = 1 29 yaml_token_delete(token) 30 yaml_parser_delete(parser) 31 12 32 cdef class Scanner: 13 33 … … 15 35 cdef int eof 16 36 cdef object stream 37 cdef yaml_token_t *cached_token 38 cdef object cached_obj 17 39 18 40 def __init__(self, stream): 19 cdef char *input20 cdef int size21 41 if hasattr(stream, 'read'): 22 42 stream = stream.read() … … 31 51 self.eof = 0 32 52 self.stream = stream 53 self.cached_token = NULL 54 self.cached_obj = None 33 55 34 56 def __dealloc__(self): … … 143 165 def get_token(self): 144 166 cdef yaml_token_t *token 167 if self.cached_token != NULL: 168 yaml_token_delete(yaml_parser_get_token(self.parser)) 169 obj = self.cached_obj 170 self.cached_token = NULL 171 self.cached_obj = None 172 return obj 145 173 if self.eof != 0: 146 174 return None … … 154 182 def peek_token(self): 155 183 cdef yaml_token_t *token 184 if self.cached_token != NULL: 185 return self.cached_obj 156 186 if self.eof != 0: 157 187 return None 158 188 token = yaml_parser_peek_token(self.parser) 159 return self._convert(token) 189 obj = self._convert(token) 190 if token.type == YAML_STREAM_END_TOKEN: 191 self.eof = 1 192 self.cached_token = token 193 self.cached_obj = obj 194 return obj 160 195 161 196 def check_token(self, *choices): 162 197 cdef yaml_token_t *token 163 if self.eof != 0: 198 if self.cached_token != NULL: 199 obj = self.cached_obj 200 elif self.eof != 0: 164 201 return False 165 token = yaml_parser_peek_token(self.parser) 166 obj = self._convert(token) 202 else: 203 token = yaml_parser_peek_token(self.parser) 204 obj = self._convert(token) 205 if token.type == YAML_STREAM_END_TOKEN: 206 self.eof = 1 207 self.cached_token = token 208 self.cached_obj = obj 167 209 if not choices: 168 210 return True
