Convert to loccount based stats calculation.
[jackhill/mal.git] / plpgsql / step0_repl.sql
CommitLineData
494792ab
JM
1-- ---------------------------------------------------------
2-- step0_repl.sql
3
adc5b4fb 4\i init.sql
53105a77 5\i io.sql
adc5b4fb
JM
6
7-- ---------------------------------------------------------
494792ab
JM
8
9CREATE SCHEMA mal;
adc5b4fb
JM
10
11-- read
494792ab 12CREATE FUNCTION mal.READ(line varchar) RETURNS varchar AS $$
adc5b4fb
JM
13BEGIN
14 RETURN line;
15END; $$ LANGUAGE plpgsql;
16
17-- eval
494792ab 18CREATE FUNCTION mal.EVAL(ast varchar, env varchar) RETURNS varchar AS $$
adc5b4fb
JM
19BEGIN
20 RETURN ast;
21END; $$ LANGUAGE plpgsql;
22
23-- print
494792ab 24CREATE FUNCTION mal.PRINT(exp varchar) RETURNS varchar AS $$
adc5b4fb
JM
25BEGIN
26 RETURN exp;
27END; $$ LANGUAGE plpgsql;
28
29
30-- repl
31
494792ab 32CREATE FUNCTION mal.REP(line varchar) RETURNS varchar AS $$
53105a77 33BEGIN
494792ab 34 RETURN mal.PRINT(mal.EVAL(mal.READ(line), ''));
53105a77
JM
35END; $$ LANGUAGE plpgsql;
36
494792ab 37CREATE FUNCTION mal.MAIN(pwd varchar) RETURNS integer AS $$
adc5b4fb 38DECLARE
494792ab
JM
39 line varchar;
40 output varchar;
adc5b4fb 41BEGIN
53105a77
JM
42 WHILE true
43 LOOP
44 BEGIN
494792ab
JM
45 line := io.readline('user> ', 0);
46 IF line IS NULL THEN
47 PERFORM io.close(1);
48 RETURN 0;
49 END IF;
50 IF line NOT IN ('', E'\n') THEN
51 output := mal.REP(line);
52 PERFORM io.writeline(output);
53105a77
JM
53 END IF;
54
55 EXCEPTION WHEN OTHERS THEN
494792ab 56 PERFORM io.writeline('Error: ' || SQLERRM);
53105a77
JM
57 END;
58 END LOOP;
adc5b4fb 59END; $$ LANGUAGE plpgsql;