ESH

Executive Shell
git clone http://git.omkov.net/ESH
Log | Tree | Refs | README | Download

ESH/src/eval.c (24 lines, 452 B) -rw-r--r-- file download

8344335 Jakob Wakeling 2023-12-27 15:41:39
0
// Copyright (C) 2023, Jakob Wakeling
8344335 Jakob Wakeling 2023-12-27 15:41:39
1
// All rights reserved.
8344335 Jakob Wakeling 2023-12-27 15:41:39
2
8344335 Jakob Wakeling 2023-12-27 15:41:39
3
#include "eval.h"
da120bb Jakob Wakeling 2023-12-27 17:28:40
4
#include "exec.h"
8344335 Jakob Wakeling 2023-12-27 15:41:39
5
#include "lex.h"
4681f43 Jakob Wakeling 2023-12-27 16:22:43
6
#include "parse.h"
da120bb Jakob Wakeling 2023-12-27 17:28:40
7
da120bb Jakob Wakeling 2023-12-27 17:28:40
8
#include <unistd.h>
8344335 Jakob Wakeling 2023-12-27 15:41:39
9
8344335 Jakob Wakeling 2023-12-27 15:41:39
10
bool Eflag, pflag;
8344335 Jakob Wakeling 2023-12-27 15:41:39
11
8344335 Jakob Wakeling 2023-12-27 15:41:39
12
void eval(char *src, u64 len) {
8344335 Jakob Wakeling 2023-12-27 15:41:39
13
	lex l = lex_init(src, len);
8344335 Jakob Wakeling 2023-12-27 15:41:39
14
	if (Eflag) { lex_debug(&l); return; }
4a1246f Jakob Wakeling 2023-12-28 14:53:40
15
4681f43 Jakob Wakeling 2023-12-27 16:22:43
16
	for (ast *a; l.t.k != TK_EOF; ast_free(a)) {
4681f43 Jakob Wakeling 2023-12-27 16:22:43
17
		a = parse(&l); if (!a) { return; }
4681f43 Jakob Wakeling 2023-12-27 16:22:43
18
		if (pflag) { ast_debug(a, 0); continue; }
4a1246f Jakob Wakeling 2023-12-28 14:53:40
19
da120bb Jakob Wakeling 2023-12-27 17:28:40
20
		_ret = execute(a, STDIN_FILENO, NULL);
4681f43 Jakob Wakeling 2023-12-27 16:22:43
21
	}
8344335 Jakob Wakeling 2023-12-27 15:41:39
22
}
23