1
0
Fork 0
forked from fun/fun

Added echo to output data wthout a newline. (0.36.2)

This commit is contained in:
Johannes Findeisen 2025-12-10 00:30:24 +01:00
commit b1e1160bff
6 changed files with 35 additions and 2 deletions

View file

@ -2806,6 +2806,21 @@ static void parse_simple_statement(Bytecode *bc, const char *src, size_t len, si
return;
}
if (strcmp(name, "echo") == 0) {
free(name);
skip_spaces(src, len, &local_pos);
(void)consume_char(src, len, &local_pos, '(');
if (emit_expression(bc, src, len, &local_pos)) {
(void)consume_char(src, len, &local_pos, ')');
bytecode_add_instruction(bc, OP_ECHO, 0);
} else {
(void)consume_char(src, len, &local_pos, ')');
}
*pos = local_pos;
skip_to_eol(src, len, pos);
return;
}
/* assignment or simple call */
int lidx = local_find(name);
int gi = (lidx < 0) ? sym_index(name) : -1;
@ -3120,6 +3135,21 @@ static void parse_simple_statement(Bytecode *bc, const char *src, size_t len, si
return;
}
/* echo(expr): like print but does not add a newline (immediate output) */
if (starts_with(src, len, *pos, "echo")) {
*pos += 4;
skip_spaces(src, len, pos);
(void)consume_char(src, len, pos, '(');
if (emit_expression(bc, src, len, pos)) {
(void)consume_char(src, len, pos, ')');
bytecode_add_instruction(bc, OP_ECHO, 0);
} else {
(void)consume_char(src, len, pos, ')');
}
skip_to_eol(src, len, pos);
return;
}
/* unknown token: report error */
parser_fail(*pos, "Unknown token at start of statement");
}