summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/builtinevex.c9
-rw-r--r--py/builtinimport.c23
-rw-r--r--py/lexer.c4
-rw-r--r--py/lexer.h2
-rw-r--r--py/persistentcode.c8
-rw-r--r--py/persistentcode.h4
-rw-r--r--py/reader.c6
-rw-r--r--py/reader.h2
8 files changed, 33 insertions, 25 deletions
diff --git a/py/builtinevex.c b/py/builtinevex.c
index 97eab7fad..73fca5d39 100644
--- a/py/builtinevex.c
+++ b/py/builtinevex.c
@@ -136,17 +136,18 @@ STATIC mp_obj_t eval_exec_helper(size_t n_args, const mp_obj_t *args, mp_parse_i
}
#endif
- // Extract the source code.
- mp_buffer_info_t bufinfo;
- mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_READ);
// create the lexer
// MP_PARSE_SINGLE_INPUT is used to indicate a file input
mp_lexer_t *lex;
if (MICROPY_PY_BUILTINS_EXECFILE && parse_input_kind == MP_PARSE_SINGLE_INPUT) {
- lex = mp_lexer_new_from_file(bufinfo.buf);
+ lex = mp_lexer_new_from_file(mp_obj_str_get_qstr(args[0]));
parse_input_kind = MP_PARSE_FILE_INPUT;
} else {
+ // Extract the source code.
+ mp_buffer_info_t bufinfo;
+ mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_READ);
+
lex = mp_lexer_new_from_str_len(MP_QSTR__lt_string_gt_, bufinfo.buf, bufinfo.len, 0);
}
diff --git a/py/builtinimport.c b/py/builtinimport.c
index d4cd254fd..009885498 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -164,11 +164,11 @@ STATIC void do_load_from_lexer(mp_module_context_t *context, mp_lexer_t *lex) {
#endif
#if (MICROPY_HAS_FILE_READER && MICROPY_PERSISTENT_CODE_LOAD) || MICROPY_MODULE_FROZEN_MPY
-STATIC void do_execute_raw_code(const mp_module_context_t *context, const mp_raw_code_t *rc, const char *source_name) {
- (void)source_name;
-
+STATIC void do_execute_raw_code(const mp_module_context_t *context, const mp_raw_code_t *rc, qstr source_name) {
#if MICROPY_PY___FILE__
- mp_store_attr(MP_OBJ_FROM_PTR(&context->module), MP_QSTR___file__, MP_OBJ_NEW_QSTR(qstr_from_str(source_name)));
+ mp_store_attr(MP_OBJ_FROM_PTR(&context->module), MP_QSTR___file__, MP_OBJ_NEW_QSTR(source_name));
+ #else
+ (void)source_name;
#endif
// execute the module in its context
@@ -224,7 +224,12 @@ STATIC void do_load(mp_module_context_t *module_obj, vstr_t *file) {
if (frozen_type == MP_FROZEN_MPY) {
const mp_frozen_module_t *frozen = modref;
module_obj->constants = frozen->constants;
- do_execute_raw_code(module_obj, frozen->rc, file_str + frozen_path_prefix_len);
+ #if MICROPY_PY___FILE__
+ qstr frozen_file_qstr = qstr_from_str(file_str + frozen_path_prefix_len);
+ #else
+ qstr frozen_file_qstr = MP_QSTRnull;
+ #endif
+ do_execute_raw_code(module_obj, frozen->rc, frozen_file_qstr);
return;
}
#endif
@@ -232,14 +237,16 @@ STATIC void do_load(mp_module_context_t *module_obj, vstr_t *file) {
#endif // MICROPY_MODULE_FROZEN
+ qstr file_qstr = qstr_from_str(file_str);
+
// If we support loading .mpy files then check if the file extension is of
// the correct format and, if so, load and execute the file.
#if MICROPY_HAS_FILE_READER && MICROPY_PERSISTENT_CODE_LOAD
if (file_str[file->len - 3] == 'm') {
mp_compiled_module_t cm;
cm.context = module_obj;
- mp_raw_code_load_file(file_str, &cm);
- do_execute_raw_code(cm.context, cm.rc, file_str);
+ mp_raw_code_load_file(file_qstr, &cm);
+ do_execute_raw_code(cm.context, cm.rc, file_qstr);
return;
}
#endif
@@ -247,7 +254,7 @@ STATIC void do_load(mp_module_context_t *module_obj, vstr_t *file) {
// If we can compile scripts then load the file and compile and execute it.
#if MICROPY_ENABLE_COMPILER
{
- mp_lexer_t *lex = mp_lexer_new_from_file(file_str);
+ mp_lexer_t *lex = mp_lexer_new_from_file(file_qstr);
do_load_from_lexer(module_obj, lex);
return;
}
diff --git a/py/lexer.c b/py/lexer.c
index 6b28f2215..9587f6b16 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -879,10 +879,10 @@ mp_lexer_t *mp_lexer_new_from_str_len(qstr src_name, const char *str, size_t len
#if MICROPY_READER_POSIX || MICROPY_READER_VFS
-mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
+mp_lexer_t *mp_lexer_new_from_file(qstr filename) {
mp_reader_t reader;
mp_reader_new_file(&reader, filename);
- return mp_lexer_new(qstr_from_str(filename), reader);
+ return mp_lexer_new(filename, reader);
}
#if MICROPY_HELPER_LEXER_UNIX
diff --git a/py/lexer.h b/py/lexer.h
index 8295dec0f..2d9d0447b 100644
--- a/py/lexer.h
+++ b/py/lexer.h
@@ -191,7 +191,7 @@ mp_lexer_t *mp_lexer_new_from_str_len(qstr src_name, const char *str, size_t len
// If MICROPY_READER_POSIX or MICROPY_READER_VFS aren't enabled then
// this function must be implemented by the port.
-mp_lexer_t *mp_lexer_new_from_file(const char *filename);
+mp_lexer_t *mp_lexer_new_from_file(qstr filename);
#if MICROPY_HELPER_LEXER_UNIX
mp_lexer_t *mp_lexer_new_from_fd(qstr filename, int fd, bool close_fd);
diff --git a/py/persistentcode.c b/py/persistentcode.c
index e1218e0b8..0feb93bdb 100644
--- a/py/persistentcode.c
+++ b/py/persistentcode.c
@@ -451,7 +451,7 @@ void mp_raw_code_load_mem(const byte *buf, size_t len, mp_compiled_module_t *con
#if MICROPY_HAS_FILE_READER
-void mp_raw_code_load_file(const char *filename, mp_compiled_module_t *context) {
+void mp_raw_code_load_file(qstr filename, mp_compiled_module_t *context) {
mp_reader_t reader;
mp_reader_new_file(&reader, filename);
mp_raw_code_load(&reader, context);
@@ -638,12 +638,12 @@ STATIC void fd_print_strn(void *env, const char *str, size_t len) {
(void)ret;
}
-void mp_raw_code_save_file(mp_compiled_module_t *cm, const char *filename) {
+void mp_raw_code_save_file(mp_compiled_module_t *cm, qstr filename) {
MP_THREAD_GIL_EXIT();
- int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ int fd = open(qstr_str(filename), O_WRONLY | O_CREAT | O_TRUNC, 0644);
MP_THREAD_GIL_ENTER();
if (fd < 0) {
- mp_raise_OSError_with_filename(errno, filename);
+ mp_raise_OSError_with_filename(errno, qstr_str(filename));
}
mp_print_t fd_print = {(void *)(intptr_t)fd, fd_print_strn};
mp_raw_code_save(cm, &fd_print);
diff --git a/py/persistentcode.h b/py/persistentcode.h
index d363f544a..140a0e7e8 100644
--- a/py/persistentcode.h
+++ b/py/persistentcode.h
@@ -113,10 +113,10 @@ enum {
void mp_raw_code_load(mp_reader_t *reader, mp_compiled_module_t *ctx);
void mp_raw_code_load_mem(const byte *buf, size_t len, mp_compiled_module_t *ctx);
-void mp_raw_code_load_file(const char *filename, mp_compiled_module_t *ctx);
+void mp_raw_code_load_file(qstr filename, mp_compiled_module_t *ctx);
void mp_raw_code_save(mp_compiled_module_t *cm, mp_print_t *print);
-void mp_raw_code_save_file(mp_compiled_module_t *cm, const char *filename);
+void mp_raw_code_save_file(mp_compiled_module_t *cm, qstr filename);
void mp_native_relocate(void *reloc, uint8_t *text, uintptr_t reloc_text);
diff --git a/py/reader.c b/py/reader.c
index 57b12b3b6..d2af62cfb 100644
--- a/py/reader.c
+++ b/py/reader.c
@@ -134,12 +134,12 @@ void mp_reader_new_file_from_fd(mp_reader_t *reader, int fd, bool close_fd) {
#if !MICROPY_VFS_POSIX
// If MICROPY_VFS_POSIX is defined then this function is provided by the VFS layer
-void mp_reader_new_file(mp_reader_t *reader, const char *filename) {
+void mp_reader_new_file(mp_reader_t *reader, qstr filename) {
MP_THREAD_GIL_EXIT();
- int fd = open(filename, O_RDONLY, 0644);
+ int fd = open(qstr_str(filename), O_RDONLY, 0644);
MP_THREAD_GIL_ENTER();
if (fd < 0) {
- mp_raise_OSError_with_filename(errno, filename);
+ mp_raise_OSError_with_filename(errno, qstr_str(filename));
}
mp_reader_new_file_from_fd(reader, fd, true);
}
diff --git a/py/reader.h b/py/reader.h
index 8511c72ce..5cb1e6796 100644
--- a/py/reader.h
+++ b/py/reader.h
@@ -40,7 +40,7 @@ typedef struct _mp_reader_t {
} mp_reader_t;
void mp_reader_new_mem(mp_reader_t *reader, const byte *buf, size_t len, size_t free_len);
-void mp_reader_new_file(mp_reader_t *reader, const char *filename);
+void mp_reader_new_file(mp_reader_t *reader, qstr filename);
void mp_reader_new_file_from_fd(mp_reader_t *reader, int fd, bool close_fd);
#endif // MICROPY_INCLUDED_PY_READER_H