add readline support
This commit is contained in:
parent
0ccff2f626
commit
17f0c928da
2
Makefile
2
Makefile
|
@ -4,7 +4,7 @@ build:
|
||||||
cd src; \
|
cd src; \
|
||||||
yacc -d parse.y; \
|
yacc -d parse.y; \
|
||||||
lex scan.l
|
lex scan.l
|
||||||
gcc -Wall -o bin/picrin -I./include src/main.c src/state.c src/gc.c src/pair.c src/port.c src/symbol.c src/value.c src/y.tab.c src/lex.yy.c src/bool.c src/vm.c src/init.c src/number.c
|
gcc -Wall -o bin/picrin -I./include -lreadline src/main.c src/state.c src/gc.c src/pair.c src/port.c src/symbol.c src/value.c src/y.tab.c src/lex.yy.c src/bool.c src/vm.c src/init.c src/number.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f src/y.tab.c src/y.tab.h src/lex.yy.c
|
rm -f src/y.tab.c src/y.tab.h src/lex.yy.c
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
/* switch normal VM and direct threaded VM */
|
/* switch normal VM and direct threaded VM */
|
||||||
#define PIC_DIRECT_THREADED_VM 1
|
#define PIC_DIRECT_THREADED_VM 1
|
||||||
|
|
||||||
|
/* enable readline module */
|
||||||
|
#define PIC_ENABLE_READLINE 1
|
||||||
|
|
||||||
/* initial memory size (to be dynamically extended if necessary) */
|
/* initial memory size (to be dynamically extended if necessary) */
|
||||||
#define PIC_ARENA_SIZE 100
|
#define PIC_ARENA_SIZE 100
|
||||||
#define PIC_HEAP_SIZE 8192
|
#define PIC_HEAP_SIZE 8192
|
||||||
|
|
20
src/main.c
20
src/main.c
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
#include "picrin.h"
|
#include "picrin.h"
|
||||||
|
|
||||||
|
#if PIC_ENABLE_READLINE
|
||||||
|
# include <readline/readline.h>
|
||||||
|
# include <readline/history.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
test_object_creation(pic_state *pic)
|
test_object_creation(pic_state *pic)
|
||||||
{
|
{
|
||||||
|
@ -30,7 +35,7 @@ int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
pic_state *pic;
|
pic_state *pic;
|
||||||
char line[LINE_MAX_LENGTH], last_char;
|
char line[LINE_MAX_LENGTH], last_char, *read_line;
|
||||||
int char_index;
|
int char_index;
|
||||||
pic_value v;
|
pic_value v;
|
||||||
struct pic_proc *proc;
|
struct pic_proc *proc;
|
||||||
|
@ -45,6 +50,18 @@ main()
|
||||||
ai = pic_gc_arena_preserve(pic);
|
ai = pic_gc_arena_preserve(pic);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
|
#if PIC_ENABLE_READLINE
|
||||||
|
read_line = readline("> ");
|
||||||
|
if (read_line == NULL) {
|
||||||
|
line[0] = '\0';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strncpy(line, read_line, LINE_MAX_LENGTH - 1);
|
||||||
|
add_history(read_line);
|
||||||
|
free(read_line);
|
||||||
|
}
|
||||||
|
#else
|
||||||
printf("> ");
|
printf("> ");
|
||||||
|
|
||||||
char_index = 0;
|
char_index = 0;
|
||||||
|
@ -56,6 +73,7 @@ main()
|
||||||
line[char_index++] = last_char;
|
line[char_index++] = last_char;
|
||||||
}
|
}
|
||||||
line[char_index] = '\0';
|
line[char_index] = '\0';
|
||||||
|
#endif
|
||||||
|
|
||||||
/* read */
|
/* read */
|
||||||
v = pic_parse(pic, line);
|
v = pic_parse(pic, line);
|
||||||
|
|
Loading…
Reference in New Issue