*added a reset parameter to mb_load_string.
This commit is contained in:
parent
18665824de
commit
b3a461e796
Binary file not shown.
@ -1253,6 +1253,7 @@ static mb_input_func_t _get_inputer(mb_interpreter_t* s);
|
|||||||
|
|
||||||
/** Parsing helpers */
|
/** Parsing helpers */
|
||||||
static char* _load_file(mb_interpreter_t* s, const char* f, const char* prefix);
|
static char* _load_file(mb_interpreter_t* s, const char* f, const char* prefix);
|
||||||
|
static void _end_of_file(_parsing_context_t* context);
|
||||||
|
|
||||||
static bool_t _is_blank(char c);
|
static bool_t _is_blank(char c);
|
||||||
static bool_t _is_eof(char c);
|
static bool_t _is_eof(char c);
|
||||||
@ -4190,6 +4191,12 @@ static char* _load_file(mb_interpreter_t* s, const char* f, const char* prefix)
|
|||||||
#endif /* ARDUINO */
|
#endif /* ARDUINO */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _end_of_file(_parsing_context_t* context) {
|
||||||
|
/* Finish loading a file */
|
||||||
|
if(context)
|
||||||
|
context->parsing_state = _PS_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
static bool_t _is_blank(char c) {
|
static bool_t _is_blank(char c) {
|
||||||
/* Determine whether a character is blank */
|
/* Determine whether a character is blank */
|
||||||
return
|
return
|
||||||
@ -4707,7 +4714,7 @@ static _data_e _get_symbol_type(mb_interpreter_t* s, char* sym, _raw_t* value) {
|
|||||||
char* lf = (char*)(_ls_back(context->imported)->data);
|
char* lf = (char*)(_ls_back(context->imported)->data);
|
||||||
int pos; unsigned short row, col;
|
int pos; unsigned short row, col;
|
||||||
lf = _prev_import(s, lf, &pos, &row, &col);
|
lf = _prev_import(s, lf, &pos, &row, &col);
|
||||||
mb_load_string(s, buf);
|
mb_load_string(s, buf, true);
|
||||||
safe_free(buf);
|
safe_free(buf);
|
||||||
_post_import(s, lf, &pos, &row, &col);
|
_post_import(s, lf, &pos, &row, &col);
|
||||||
}
|
}
|
||||||
@ -9638,6 +9645,7 @@ static _parsing_context_t* _reset_parsing_context(_parsing_context_t* context) {
|
|||||||
if(!imp)
|
if(!imp)
|
||||||
imp = _ls_create();
|
imp = _ls_create();
|
||||||
context->imported = imp;
|
context->imported = imp;
|
||||||
|
_end_of_file(context);
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
@ -11526,7 +11534,7 @@ _exit:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mb_load_string(struct mb_interpreter_t* s, const char* l) {
|
int mb_load_string(struct mb_interpreter_t* s, const char* l, bool_t reset) {
|
||||||
/* Load and parse a script string */
|
/* Load and parse a script string */
|
||||||
int result = MB_FUNC_OK;
|
int result = MB_FUNC_OK;
|
||||||
char ch = 0;
|
char ch = 0;
|
||||||
@ -11565,10 +11573,10 @@ int mb_load_string(struct mb_interpreter_t* s, const char* l) {
|
|||||||
++context->parsing_pos;
|
++context->parsing_pos;
|
||||||
};
|
};
|
||||||
status = _parse_char(s, MB_EOS, context->parsing_pos, context->parsing_row, context->parsing_col);
|
status = _parse_char(s, MB_EOS, context->parsing_pos, context->parsing_row, context->parsing_col);
|
||||||
status = _parse_char(s, EOF, context->parsing_pos, context->parsing_row, context->parsing_col);
|
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
context->parsing_state = _PS_NORMAL;
|
if(reset)
|
||||||
|
_end_of_file(context);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -11587,7 +11595,7 @@ int mb_load_file(struct mb_interpreter_t* s, const char* f) {
|
|||||||
|
|
||||||
buf = _load_file(s, f, 0);
|
buf = _load_file(s, f, 0);
|
||||||
if(buf) {
|
if(buf) {
|
||||||
result = mb_load_string(s, buf);
|
result = mb_load_string(s, buf, true);
|
||||||
safe_free(buf);
|
safe_free(buf);
|
||||||
|
|
||||||
if(result)
|
if(result)
|
||||||
|
@ -502,7 +502,7 @@ MBAPI int mb_get_routine(struct mb_interpreter_t* s, void** l, const char* n, mb
|
|||||||
MBAPI int mb_set_routine(struct mb_interpreter_t* s, void** l, const char* n, mb_routine_func_t f, bool_t force);
|
MBAPI int mb_set_routine(struct mb_interpreter_t* s, void** l, const char* n, mb_routine_func_t f, bool_t force);
|
||||||
MBAPI int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_value_t* args, unsigned argc);
|
MBAPI int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_value_t* args, unsigned argc);
|
||||||
|
|
||||||
MBAPI int mb_load_string(struct mb_interpreter_t* s, const char* l);
|
MBAPI int mb_load_string(struct mb_interpreter_t* s, const char* l, bool_t reset);
|
||||||
MBAPI int mb_load_file(struct mb_interpreter_t* s, const char* f);
|
MBAPI int mb_load_file(struct mb_interpreter_t* s, const char* f);
|
||||||
MBAPI int mb_run(struct mb_interpreter_t* s);
|
MBAPI int mb_run(struct mb_interpreter_t* s);
|
||||||
MBAPI int mb_suspend(struct mb_interpreter_t* s, void** l);
|
MBAPI int mb_suspend(struct mb_interpreter_t* s, void** l);
|
||||||
|
Binary file not shown.
@ -622,7 +622,7 @@ static bool_t _try_import(struct mb_interpreter_t* s, const char* p) {
|
|||||||
buf[m + n] = '\0';
|
buf[m + n] = '\0';
|
||||||
t = _load_file(buf);
|
t = _load_file(buf);
|
||||||
if(t) {
|
if(t) {
|
||||||
if(mb_load_string(bas, t) == MB_FUNC_OK)
|
if(mb_load_string(bas, t, true) == MB_FUNC_OK)
|
||||||
result = true;
|
result = true;
|
||||||
free(t);
|
free(t);
|
||||||
}
|
}
|
||||||
@ -902,7 +902,7 @@ static int _do_line(void) {
|
|||||||
if(result)
|
if(result)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
result = mb_load_string(bas, _code()->lines[i]);
|
result = mb_load_string(bas, _code()->lines[i], false);
|
||||||
}
|
}
|
||||||
if(result == MB_FUNC_OK)
|
if(result == MB_FUNC_OK)
|
||||||
result = mb_run(bas);
|
result = mb_run(bas);
|
||||||
@ -998,7 +998,7 @@ static void _evaluate_expression(char* p) {
|
|||||||
e[l + k] = '\0';
|
e[l + k] = '\0';
|
||||||
p = e;
|
p = e;
|
||||||
}
|
}
|
||||||
if(mb_load_string(bas, p) == MB_FUNC_OK) {
|
if(mb_load_string(bas, p, true) == MB_FUNC_OK) {
|
||||||
mb_run(bas);
|
mb_run(bas);
|
||||||
} else {
|
} else {
|
||||||
_printf("Invalid expression.\n");
|
_printf("Invalid expression.\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user