Move REPL logic into application
This commit is contained in:
@@ -1,16 +0,0 @@
|
||||
#ifndef REPL_H
|
||||
#define REPL_H
|
||||
|
||||
#include "memory_pool.h"
|
||||
|
||||
#define REPL_BUFFER_SIZE 128
|
||||
|
||||
typedef struct {
|
||||
memory_pool_t pool;
|
||||
char buffer[REPL_BUFFER_SIZE];
|
||||
} repl_t;
|
||||
|
||||
bool step_repl(repl_t *repl);
|
||||
void run_repl(repl_t *repl);
|
||||
|
||||
#endif
|
||||
32
lib/repl.c
32
lib/repl.c
@@ -1,32 +0,0 @@
|
||||
#include "repl.h"
|
||||
|
||||
#include "evaluator.h"
|
||||
#include "reader.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
bool step_repl(repl_t *repl)
|
||||
{
|
||||
init_memory_pool(&repl->pool);
|
||||
|
||||
const int len = read_line(getchar, repl->buffer, REPL_BUFFER_SIZE);
|
||||
if (len < 0)
|
||||
return false;
|
||||
const expression_t *e = read_expression(&repl->pool, repl->buffer, len);
|
||||
if (NULL == e) {
|
||||
puts("Invalid expression\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
const int result = evaluate(e);
|
||||
printf("%d\n", result);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void run_repl(repl_t *repl)
|
||||
{
|
||||
while (step_repl(repl))
|
||||
;
|
||||
}
|
||||
Reference in New Issue
Block a user