Commit | Line | Data |
---|---|---|
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 | |
9 | CREATE SCHEMA mal; | |
adc5b4fb JM |
10 | |
11 | -- read | |
494792ab | 12 | CREATE FUNCTION mal.READ(line varchar) RETURNS varchar AS $$ |
adc5b4fb JM |
13 | BEGIN |
14 | RETURN line; | |
15 | END; $$ LANGUAGE plpgsql; | |
16 | ||
17 | -- eval | |
494792ab | 18 | CREATE FUNCTION mal.EVAL(ast varchar, env varchar) RETURNS varchar AS $$ |
adc5b4fb JM |
19 | BEGIN |
20 | RETURN ast; | |
21 | END; $$ LANGUAGE plpgsql; | |
22 | ||
23 | ||
494792ab | 24 | CREATE FUNCTION mal.PRINT(exp varchar) RETURNS varchar AS $$ |
adc5b4fb JM |
25 | BEGIN |
26 | RETURN exp; | |
27 | END; $$ LANGUAGE plpgsql; | |
28 | ||
29 | ||
30 | -- repl | |
31 | ||
494792ab | 32 | CREATE FUNCTION mal.REP(line varchar) RETURNS varchar AS $$ |
53105a77 | 33 | BEGIN |
494792ab | 34 | RETURN mal.PRINT(mal.EVAL(mal.READ(line), '')); |
53105a77 JM |
35 | END; $$ LANGUAGE plpgsql; |
36 | ||
494792ab | 37 | CREATE FUNCTION mal.MAIN(pwd varchar) RETURNS integer AS $$ |
adc5b4fb | 38 | DECLARE |
494792ab JM |
39 | line varchar; |
40 | output varchar; | |
adc5b4fb | 41 | BEGIN |
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 | 59 | END; $$ LANGUAGE plpgsql; |