3232#include "py/reader.h"
3333#include "extmod/vfs.h"
3434
35- #if MICROPY_READER_VFS
35+ #if MICROPY_READER_CUSTOM_VFS
36+
37+ mp_lexer_t * mp_lexer_new_from_file (const char * filename ) {
38+ mp_reader_t reader ;
39+ mp_reader_new_file (& reader , filename );
40+ return mp_lexer_new (qstr_from_str (filename ), reader );
41+ }
3642
3743typedef struct _mp_reader_vfs_t {
3844 mp_obj_t file ;
3945 uint16_t len ;
4046 uint16_t pos ;
41- byte buf [2048 ];
47+ byte buf [4096 ];
4248} mp_reader_vfs_t ;
4349
4450STATIC mp_uint_t mp_reader_vfs_readbyte (void * data ) {
4551 mp_reader_vfs_t * reader = (mp_reader_vfs_t * )data ;
4652 if (reader -> pos >= reader -> len ) {
47- if (reader -> len < sizeof (reader -> buf )) {
53+ int errcode ;
54+ reader -> len = mp_stream_rw (reader -> file , reader -> buf , sizeof (reader -> buf ),
55+ & errcode , MP_STREAM_RW_READ | MP_STREAM_RW_ONCE );
56+ if (errcode != 0 ) {
57+ // TODO handle errors properly
58+ return MP_READER_EOF ;
59+ }
60+ if (reader -> len == 0 ) {
4861 return MP_READER_EOF ;
49- } else {
50- int errcode ;
51- reader -> len = mp_stream_rw (reader -> file , reader -> buf , sizeof (reader -> buf ),
52- & errcode , MP_STREAM_RW_READ | MP_STREAM_RW_ONCE );
53- if (errcode != 0 ) {
54- // TODO handle errors properly
55- return MP_READER_EOF ;
56- }
57- if (reader -> len == 0 ) {
58- return MP_READER_EOF ;
59- }
60- reader -> pos = 0 ;
6162 }
63+ reader -> pos = 0 ;
6264 }
6365 return reader -> buf [reader -> pos ++ ];
6466}
@@ -84,4 +86,4 @@ void mp_reader_new_file(mp_reader_t *reader, const char *filename) {
8486 reader -> close = mp_reader_vfs_close ;
8587}
8688
87- #endif // MICROPY_READER_VFS
89+ #endif // MICROPY_READER_CUSTOM_VFS
0 commit comments