6 CREATE OR REPLACE PACKAGE mal
IS
8 FUNCTION MAIN(args
varchar DEFAULT '()') RETURN integer;
13 CREATE OR REPLACE PACKAGE BODY mal
IS
15 FUNCTION MAIN(args
varchar DEFAULT '()') RETURN integer IS
16 M types.mal_table
; -- general mal value memory pool
17 H types.map_entry_table
; -- hashmap memory pool
21 FUNCTION READ(line
varchar) RETURN integer IS
23 RETURN reader.
read_str(M
, H
, line
);
27 FUNCTION EVAL(ast
integer, env
varchar) RETURN integer IS
33 FUNCTION PRINT(exp integer) RETURN varchar IS
35 RETURN printer.
pr_str(M
, H
, exp);
39 FUNCTION REP(line
varchar) RETURN varchar IS
41 RETURN PRINT(EVAL(READ(line
), ''));
45 -- initialize memory pools
47 H
:= types.
map_entry_table();
51 line
:= io.
readline('user> ', 0);
52 IF line
= EMPTY_CLOB() THEN CONTINUE; END IF;
53 IF line
IS NOT NULL THEN
54 io.
writeline(REP(line
));
57 EXCEPTION WHEN OTHERS THEN
58 IF SQLCODE = -20001 THEN -- io read stream closed
59 io.
writeline('closing stream 1');
60 io.
close(1); -- close output stream
63 io.
writeline('Error: ' || SQLERRM
);
64 io.
writeline(dbms_utility.format_error_backtrace
);