Commit | Line | Data |
---|---|---|
97df14cd JM |
1 | @io.sql |
2 | @types.sql | |
3 | @reader.sql | |
4 | @printer.sql | |
5 | ||
0fc03918 | 6 | CREATE OR REPLACE PACKAGE mal IS |
97df14cd | 7 | |
10cc781f | 8 | FUNCTION MAIN(args varchar DEFAULT '()') RETURN integer; |
97df14cd | 9 | |
0fc03918 | 10 | END mal; |
97df14cd JM |
11 | / |
12 | ||
0fc03918 | 13 | CREATE OR REPLACE PACKAGE BODY mal IS |
97df14cd | 14 | |
10cc781f | 15 | FUNCTION MAIN(args varchar DEFAULT '()') RETURN integer IS |
6a085103 JM |
16 | M mem_type; -- general mal value memory pool |
17 | H types.map_entry_table; -- hashmap memory pool | |
02936b42 | 18 | line CLOB; |
97df14cd | 19 | |
7836cfa3 | 20 | -- read |
0fc03918 | 21 | FUNCTION READ(line varchar) RETURN integer IS |
7836cfa3 | 22 | BEGIN |
6a085103 | 23 | RETURN reader.read_str(M, H, line); |
7836cfa3 | 24 | END; |
97df14cd | 25 | |
7836cfa3 | 26 | -- eval |
0fc03918 | 27 | FUNCTION EVAL(ast integer, env varchar) RETURN integer IS |
7836cfa3 JM |
28 | BEGIN |
29 | RETURN ast; | |
30 | END; | |
97df14cd | 31 | |
7836cfa3 | 32 | |
0fc03918 | 33 | FUNCTION PRINT(exp integer) RETURN varchar IS |
7836cfa3 | 34 | BEGIN |
6a085103 | 35 | RETURN printer.pr_str(M, H, exp); |
7836cfa3 JM |
36 | END; |
37 | ||
7836cfa3 JM |
38 | -- repl |
39 | FUNCTION REP(line varchar) RETURN varchar IS | |
40 | BEGIN | |
41 | RETURN PRINT(EVAL(READ(line), '')); | |
42 | END; | |
97df14cd | 43 | |
97df14cd | 44 | BEGIN |
6a085103 | 45 | -- initialize memory pools |
0fc03918 | 46 | M := types.mem_new(); |
6a085103 | 47 | H := types.map_entry_table(); |
0fc03918 | 48 | |
9fc524f1 | 49 | WHILE true LOOP |
97df14cd | 50 | BEGIN |
02936b42 JM |
51 | line := io.readline('user> ', 0); |
52 | IF line = EMPTY_CLOB() THEN CONTINUE; END IF; | |
97df14cd | 53 | IF line IS NOT NULL THEN |
02936b42 | 54 | io.writeline(REP(line)); |
97df14cd JM |
55 | END IF; |
56 | ||
57 | EXCEPTION WHEN OTHERS THEN | |
150011e4 | 58 | IF SQLCODE = -20001 THEN -- io streams closed |
97df14cd JM |
59 | RETURN 0; |
60 | END IF; | |
02936b42 JM |
61 | io.writeline('Error: ' || SQLERRM); |
62 | io.writeline(dbms_utility.format_error_backtrace); | |
97df14cd JM |
63 | END; |
64 | END LOOP; | |
65 | END; | |
7836cfa3 | 66 | |
0fc03918 | 67 | END mal; |
97df14cd | 68 | / |
7836cfa3 | 69 | show errors; |
97df14cd JM |
70 | |
71 | quit; |