35 lines
690 B
C

#include "repl.h"
#include <stdio.h>
void init_repl(repl_t *repl)
{
init_memory_pool(&repl->pool);
}
bool step_repl(repl_t *repl)
{
int len;
for (len = 0; len < REPL_LINE_BUFFER_SIZE; ++len) {
const int byte = repl->get_byte();
if (EOF == byte)
return false;
else if ('\n' == byte)
break;
repl->line_buffer[len] = (char)byte;
}
const expression_t *e = repl->read(&repl->pool, repl->line_buffer, len);
const int result = repl->evaluate(e);
const int result_len = snprintf(
repl->result_buffer, REPL_RESULT_BUFFER_SIZE, "%d\n", result);
repl->print(repl->result_buffer, result_len);
return true;
}
void run_repl(repl_t *repl)
{
while (step_repl(repl))
;
}