Scripting: Some minor cosmetics

This commit is contained in:
d0k3 2017-12-20 01:06:56 +01:00
parent 52b3f128bf
commit 3c4b4236b3

View File

@ -47,6 +47,7 @@
// some useful macros // some useful macros
#define IS_WHITESPACE(c) ((c == ' ') || (c == '\t') || (c == '\r') || (c == '\n')) #define IS_WHITESPACE(c) ((c == ' ') || (c == '\t') || (c == '\r') || (c == '\n'))
#define MATCH_STR(s,l,c) ((l == strlen(c)) && (strncmp(s, c, l) == 0)) #define MATCH_STR(s,l,c) ((l == strlen(c)) && (strncmp(s, c, l) == 0))
#define IS_CTRLFLOW_CMD(id) ((id == CMD_ID_IF) || (id == CMD_ID_ELIF) || (id == CMD_ID_ELSE) || (id == CMD_ID_END) || (id == CMD_ID_GOTO))
#define _FLG(c) (1 << (c - 'a')) #define _FLG(c) (1 << (c - 'a'))
// command ids (also entry into the cmd_list aray below) // command ids (also entry into the cmd_list aray below)
@ -999,26 +1000,27 @@ bool run_line(const char* line_start, const char* line_end, u32* flags, char* er
return false; return false;
} }
// control flow command handling
if (IS_CTRLFLOW_CMD(cmdid)) {
// block out of control flow commands // block out of control flow commands
if (if_cond && ((cmdid == CMD_ID_IF) || (cmdid == CMD_ID_ELIF) || (cmdid == CMD_ID_ELSE) || (cmdid == CMD_ID_END) || if (if_cond) {
(cmdid == CMD_ID_GOTO))) {
if (err_str) snprintf(err_str, _ERR_STR_LEN, "control flow error"); if (err_str) snprintf(err_str, _ERR_STR_LEN, "control flow error");
syntax_error = true; syntax_error = true;
return false; return false;
} }
// handle "if" / elif // shortcuts for "elif" / "else"
if (((cmdid == CMD_ID_ELIF) || (cmdid == CMD_ID_ELSE)) && !skip_state) {
skip_state = _SKIP_TILL_END;
cmdid = 0;
}
// handle "if" / "elif"
if ((cmdid == CMD_ID_IF) || (cmdid == CMD_ID_ELIF)) { if ((cmdid == CMD_ID_IF) || (cmdid == CMD_ID_ELIF)) {
// set defaults // set defaults
argc = 1; argc = 1;
strncpy(argv[0], _ARG_FALSE, _ARG_MAX_LEN); strncpy(argv[0], _ARG_FALSE, _ARG_MAX_LEN);
// elif handling
if ((cmdid == CMD_ID_ELIF) && !skip_state) {
skip_state = _SKIP_TILL_END;
return true;
}
// skip to behind the "if"/"elif" command // skip to behind the "if"/"elif" command
char* line_start_next = (char*) line_start; char* line_start_next = (char*) line_start;
for (; IS_WHITESPACE(*line_start_next); line_start_next++); for (; IS_WHITESPACE(*line_start_next); line_start_next++);
@ -1028,6 +1030,7 @@ bool run_line(const char* line_start, const char* line_end, u32* flags, char* er
if (run_line(line_start_next, line_end, flags, err_str, true)) if (run_line(line_start_next, line_end, flags, err_str, true))
strncpy(argv[0], _ARG_TRUE, _ARG_MAX_LEN); strncpy(argv[0], _ARG_TRUE, _ARG_MAX_LEN);
} }
}
// run the command (if available) // run the command (if available)
if (cmdid && !run_cmd(cmdid, *flags, argv, err_str)) { if (cmdid && !run_cmd(cmdid, *flags, argv, err_str)) {