#include <stdlib.h>

#include "py/lexer.h"
#include "py/runtime.h"
#include "py/mperrno.h"
#include "memzip.h"

mp_lexer_t *mp_lexer_new_from_file(const char *filename)
{
    void *data;
    size_t len;

    if (memzip_locate(filename, &data, &len) != MZ_OK) {
        mp_raise_OSError(MP_ENOENT);
    }

    return mp_lexer_new_from_str_len(qstr_from_str(filename), (const char *)data, (mp_uint_t)len, 0);
}


#include <stdlib.h>

#include "py/lexer.h"
#include "memzip.h"

mp_lexer_t *mp_lexer_new_from_file(const char *filename)
{
    void *data;
    size_t len;

    if (memzip_locate(filename, &data, &len) != MZ_OK) {
        return NULL;
    }

    return mp_lexer_new_from_str_len(qstr_from_str(filename), (const char *)data, (mp_uint_t)len, 0);
}


--- 
+++ 
@@ -1,6 +1,8 @@
 #include <stdlib.h>
 
 #include "py/lexer.h"
+#include "py/runtime.h"
+#include "py/mperrno.h"
 #include "memzip.h"
 
 mp_lexer_t *mp_lexer_new_from_file(const char *filename)
@@ -9,7 +11,7 @@
     size_t len;
 
     if (memzip_locate(filename, &data, &len) != MZ_OK) {
-        return NULL;
+        mp_raise_OSError(MP_ENOENT);
     }
 
     return mp_lexer_new_from_str_len(qstr_from_str(filename), (const char *)data, (mp_uint_t)len, 0);
lib/memzip: Make lexer constructor raise exception when file not found.
