CREATE OR REPLACE PACKAGE mal IS
-FUNCTION MAIN(pwd varchar) RETURN integer;
+FUNCTION MAIN(args varchar DEFAULT '()') RETURN integer;
END mal;
/
CREATE OR REPLACE PACKAGE BODY mal IS
-FUNCTION MAIN(pwd varchar) RETURN integer IS
- M mem_type;
- line varchar2(4000);
+FUNCTION MAIN(args varchar DEFAULT '()') RETURN integer IS
+ M mem_type; -- general mal value memory pool
+ H types.map_entry_table; -- hashmap memory pool
+ line CLOB;
-- read
FUNCTION READ(line varchar) RETURN integer IS
BEGIN
- RETURN reader.read_str(M, line);
+ RETURN reader.read_str(M, H, line);
END;
-- eval
-- print
FUNCTION PRINT(exp integer) RETURN varchar IS
BEGIN
- RETURN printer.pr_str(M, exp);
+ RETURN printer.pr_str(M, H, exp);
END;
-- repl
END;
BEGIN
+ -- initialize memory pools
M := types.mem_new();
+ H := types.map_entry_table();
WHILE true LOOP
BEGIN
- line := stream_readline('user> ', 0);
- IF line IS NULL THEN CONTINUE; END IF;
+ line := io.readline('user> ', 0);
+ IF line = EMPTY_CLOB() THEN CONTINUE; END IF;
IF line IS NOT NULL THEN
- stream_writeline(REP(line));
+ io.writeline(REP(line));
END IF;
EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -20001 THEN -- io streams closed
RETURN 0;
END IF;
- stream_writeline('Error: ' || SQLERRM);
- stream_writeline(dbms_utility.format_error_backtrace);
+ io.writeline('Error: ' || SQLERRM);
+ io.writeline(dbms_utility.format_error_backtrace);
END;
END LOOP;
END;