Fixed typo.
[riece] / lisp / server.rb
index 0fbb7a7..5de808d 100644 (file)
@@ -98,28 +98,13 @@ class Server
     send_line("S name #{name}\r\n")
     send_line("OK\r\n")
     Thread.current[:rubyserv_name] = name
-    out, log = @out, @log
-    env = Module.new
-    env.module_eval do
-      @out, @log = out, log
-
-      def send_line(line)
-       @out.puts(line)
-       @log.puts(line) if @log
-      end
-      module_function :send_line
-
-      def output(s)
-       send_line("# output #{Thread.current[:rubyserv_name]} #{s}\r\n")
-      end
-      module_function :output
-    end
     begin
       Thread.current[:rubyserv_error] = false
-      Thread.current[:rubyserv_response] = eval(r, env.module_eval {binding()})
+      Thread.current[:rubyserv_response] = eval(r, exec_env.empty_binding)
     rescue Exception => e
       Thread.current[:rubyserv_error] = true
-      Thread.current[:rubyserv_response] = e.to_s.sub(/\A.*?\n/, '')
+      Thread.current[:rubyserv_response] =
+        e.to_s.sub(/\A.*?\n#{Regexp.quote(__FILE__)}:\d+: /o, '')
     end
     send_line("# exit #{name}\r\n")
   end
@@ -186,6 +171,23 @@ class Server
     @out.puts(line)
     @log.puts(line) if @log
   end
+
+  def exec_env
+    env = Object.new
+    def env.empty_binding
+      binding
+    end
+    out, log = @out, @log
+    env.instance_eval {@out, @log = out, log}
+    def env.send_line(line)
+      @out.puts(line)
+      @log.puts(line) if @log
+    end
+    def env.output(s)
+      send_line("# output #{Thread.current[:rubyserv_name]} #{s}\r\n")
+    end
+    env
+  end
 end
 
 if $0 == __FILE__
@@ -202,7 +204,7 @@ End
     opts.on('-e', '--err ERRFILE', 'Send stderr to ERRFILE.') do |errfile|
       opt_errfile = errfile
     end
-    opts.on('-l', '--log LOGFILE', 'Send stdlog to LOGFILE.') do |logfile|
+    opts.on('-l', '--log LOGFILE', 'Send log output to LOGFILE.') do |logfile|
       opt_logfile = logfile
     end
     opts.on_tail('--help', '-h', 'Show this message.') do