py: Instead of having "debug on" var, have "optimization level" var.
This allows to have multiple "optimization" levels (CPython has two (-OO removes docstrings), we can have more).
This commit is contained in:
parent
509c7a7854
commit
d3439d0c60
@ -64,12 +64,7 @@ struct _mp_lexer_t {
|
|||||||
mp_token_t tok_cur;
|
mp_token_t tok_cur;
|
||||||
};
|
};
|
||||||
|
|
||||||
// debug flag for __debug__ constant
|
uint mp_optimise_value;
|
||||||
STATIC mp_token_kind_t mp_debug_value;
|
|
||||||
|
|
||||||
void mp_set_debug(bool value) {
|
|
||||||
mp_debug_value = value ? MP_TOKEN_KW_TRUE : MP_TOKEN_KW_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO replace with a call to a standard function
|
// TODO replace with a call to a standard function
|
||||||
bool str_strn_equal(const char *str, const char *strn, int len) {
|
bool str_strn_equal(const char *str, const char *strn, int len) {
|
||||||
@ -703,7 +698,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
|
|||||||
if (str_strn_equal(tok_kw[i], tok->str, tok->len)) {
|
if (str_strn_equal(tok_kw[i], tok->str, tok->len)) {
|
||||||
if (i == ARRAY_SIZE(tok_kw) - 1) {
|
if (i == ARRAY_SIZE(tok_kw) - 1) {
|
||||||
// tok_kw[ARRAY_SIZE(tok_kw) - 1] == "__debug__"
|
// tok_kw[ARRAY_SIZE(tok_kw) - 1] == "__debug__"
|
||||||
tok->kind = mp_debug_value;
|
tok->kind = (mp_optimise_value == 0 ? MP_TOKEN_KW_TRUE : MP_TOKEN_KW_FALSE);
|
||||||
} else {
|
} else {
|
||||||
tok->kind = MP_TOKEN_KW_FALSE + i;
|
tok->kind = MP_TOKEN_KW_FALSE + i;
|
||||||
}
|
}
|
||||||
|
@ -176,3 +176,5 @@ typedef enum {
|
|||||||
|
|
||||||
mp_import_stat_t mp_import_stat(const char *path);
|
mp_import_stat_t mp_import_stat(const char *path);
|
||||||
mp_lexer_t *mp_lexer_new_from_file(const char *filename);
|
mp_lexer_t *mp_lexer_new_from_file(const char *filename);
|
||||||
|
|
||||||
|
extern uint mp_optimise_value;
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include "bc.h"
|
#include "bc.h"
|
||||||
#include "smallint.h"
|
#include "smallint.h"
|
||||||
#include "objgenerator.h"
|
#include "objgenerator.h"
|
||||||
|
#include "lexer.h"
|
||||||
|
|
||||||
#if 0 // print debugging info
|
#if 0 // print debugging info
|
||||||
#define DEBUG_PRINT (1)
|
#define DEBUG_PRINT (1)
|
||||||
@ -74,8 +75,8 @@ void mp_init(void) {
|
|||||||
MICROPY_PORT_INIT_FUNC;
|
MICROPY_PORT_INIT_FUNC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// __debug__ enabled by default
|
// optimization disabled by default
|
||||||
mp_set_debug(true);
|
mp_optimise_value = 0;
|
||||||
|
|
||||||
// init global module stuff
|
// init global module stuff
|
||||||
mp_module_init();
|
mp_module_init();
|
||||||
|
@ -54,8 +54,6 @@ typedef struct _mp_arg_t {
|
|||||||
void mp_init(void);
|
void mp_init(void);
|
||||||
void mp_deinit(void);
|
void mp_deinit(void);
|
||||||
|
|
||||||
void mp_set_debug(bool value); // sets the value of __debug__; see lexer.c
|
|
||||||
|
|
||||||
void mp_arg_check_num(uint n_args, uint n_kw, uint n_args_min, uint n_args_max, bool takes_kw);
|
void mp_arg_check_num(uint n_args, uint n_kw, uint n_args_min, uint n_args_max, bool takes_kw);
|
||||||
void mp_arg_parse_all(uint n_pos, const mp_obj_t *pos, mp_map_t *kws, uint n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
|
void mp_arg_parse_all(uint n_pos, const mp_obj_t *pos, mp_map_t *kws, uint n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
|
||||||
void mp_arg_parse_all_kw_array(uint n_pos, uint n_kw, const mp_obj_t *args, uint n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
|
void mp_arg_parse_all_kw_array(uint n_pos, uint n_kw, const mp_obj_t *args, uint n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
|
||||||
|
12
unix/main.c
12
unix/main.c
@ -30,6 +30,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -188,6 +189,7 @@ int usage(char **argv) {
|
|||||||
"usage: %s [<opts>] [-X <implopt>] [-c <command>] [<filename>]\n"
|
"usage: %s [<opts>] [-X <implopt>] [-c <command>] [<filename>]\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
"-v : verbose (trace various operations); can be multiple\n"
|
"-v : verbose (trace various operations); can be multiple\n"
|
||||||
|
"-O[N] : apply bytecode optimizations of level N\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Implementation specific options:\n", argv[0]
|
"Implementation specific options:\n", argv[0]
|
||||||
);
|
);
|
||||||
@ -346,9 +348,13 @@ int main(int argc, char **argv) {
|
|||||||
a += 1;
|
a += 1;
|
||||||
} else if (strcmp(argv[a], "-v") == 0) {
|
} else if (strcmp(argv[a], "-v") == 0) {
|
||||||
mp_verbose_flag++;
|
mp_verbose_flag++;
|
||||||
} else if (strcmp(argv[a], "-O") == 0) {
|
} else if (strncmp(argv[a], "-O", 2) == 0) {
|
||||||
// optimisation; sets __debug__ to False
|
if (isdigit(argv[a][2])) {
|
||||||
mp_set_debug(false);
|
mp_optimise_value = argv[a][2] & 0xf;
|
||||||
|
} else {
|
||||||
|
mp_optimise_value = 0;
|
||||||
|
for (char *p = argv[a] + 1; *p && *p == 'O'; p++, mp_optimise_value++);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return usage(argv);
|
return usage(argv);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user