Merge pull request #378 from asarhaddon/test-macro-not-changing-function
[jackhill/mal.git] / plsql / step0_repl.sql
1 --\i init.sql
2 @io.sql
3
4 CREATE OR REPLACE PACKAGE mal IS
5
6 FUNCTION MAIN(args varchar DEFAULT '()') RETURN integer;
7
8 END mal;
9 /
10
11 CREATE OR REPLACE PACKAGE BODY mal IS
12
13 FUNCTION MAIN(args varchar DEFAULT '()') RETURN integer IS
14 line CLOB;
15
16 -- read
17 FUNCTION READ(line varchar) RETURN varchar IS
18 BEGIN
19 RETURN line;
20 END;
21
22 -- eval
23 FUNCTION EVAL(ast varchar, env varchar) RETURN varchar IS
24 BEGIN
25 RETURN ast;
26 END;
27
28 -- print
29 FUNCTION PRINT(exp varchar) RETURN varchar IS
30 BEGIN
31 RETURN exp;
32 END;
33
34 -- repl
35 FUNCTION REP(line varchar) RETURN varchar IS
36 BEGIN
37 RETURN PRINT(EVAL(READ(line), ''));
38 END;
39
40 BEGIN
41 WHILE true LOOP
42 BEGIN
43 line := io.readline('user> ', 0);
44 IF line = EMPTY_CLOB() THEN CONTINUE; END IF;
45 IF line IS NOT NULL THEN
46 io.writeline(REP(line));
47 END IF;
48
49 EXCEPTION WHEN OTHERS THEN
50 IF SQLCODE = -20001 THEN -- io read stream closed
51 io.close(1); -- close output stream
52 RETURN 0;
53 END IF;
54 io.writeline('Error: ' || SQLERRM);
55 io.writeline(dbms_utility.format_error_backtrace);
56 END;
57 END LOOP;
58 END;
59
60 END mal;
61 /
62 show errors;
63
64 quit;