Merge pull request #366 from bjh21/bjh21-unterminated-string-fixes
[jackhill/mal.git] / perl / step1_read_print.pl
index 48c31ec..26c7bbf 100644 (file)
@@ -1,6 +1,9 @@
 use strict;
-use warnings;
-use readline qw(readline);
+use warnings FATAL => qw(all);
+no if $] >= 5.018, warnings => "experimental::smartmatch";
+use File::Basename;
+use lib dirname (__FILE__);
+use readline qw(mal_readline set_rl_mode);
 use feature qw(switch);
 
 use reader;
@@ -30,16 +33,30 @@ sub REP {
     return PRINT(EVAL(READ($str), {}));
 }
 
+if (scalar(@ARGV) > 0 && $ARGV[0] eq "--raw") {
+    set_rl_mode("raw");
+}
 while (1) {
-    my $line = readline("user> ");
+    my $line = mal_readline("user> ");
     if (! defined $line) { last; }
-    eval {
-        use autodie; # always "throw" errors
-        print(REP($line), "\n");
-        1;
-    }; 
-    if (my $err = $@) {
-        chomp $err;
-        print "Error: $err\n";
-    }
+    do {
+        local $@;
+        my $ret;
+        eval {
+            use autodie; # always "throw" errors
+            print(REP($line), "\n");
+            1;
+        } or do {
+            my $err = $@;
+            given (ref $err) {
+                when (/^BlankException/) {
+                    # ignore and continue
+                }
+                default {
+                    chomp $err;
+                    print "Error: $err\n";
+                }
+            }
+        };
+    };
 }