Merge: Removed sockets from 'debugger.nit' to put them in a new module
authorJean Privat <jean@pryen.org>
Wed, 25 Jun 2014 19:56:36 +0000 (15:56 -0400)
committerJean Privat <jean@pryen.org>
Wed, 25 Jun 2014 19:56:36 +0000 (15:56 -0400)
Removed sockets from 'debugger.nit' to put them in 'debugger_socket.nit', because it caused compilation problems for the interpreter in PNaCl.

Pull-Request: #520
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>

src/debugger.nit
src/debugger_socket.nit [new file with mode: 0644]
src/nit.nit

index 697f86b..75486cb 100644 (file)
@@ -23,7 +23,6 @@ import nitx
 intrude import local_var_init
 intrude import scope
 intrude import toolcontext
-import websocket
 
 redef class Model
        # Cleans the model to remove a module and what it defines when semantic analysis fails on injected code
@@ -124,23 +123,11 @@ redef class ToolContext
        # -c
        var opt_debugger_autorun: OptionBool = new OptionBool("Launches the target program with the interpreter, such as when the program fails, the debugging prompt is summoned", "-c")
 
-       # --socket
-       var opt_socket_mode = new OptionBool("Launches the target program with raw output on the network via sockets", "--socket")
-
-       # --websocket
-       var opt_websocket_mode = new OptionBool("Launches the target program with output on the network via websockets", "--websocket")
-
-       # --port
-       var opt_debug_port: OptionInt = new OptionInt("Sets the debug port (Defaults to 22125) - Must be contained between 0 and 65535", 22125, "--port")
-
        redef init
        do
                super
                self.option_context.add_option(self.opt_debugger_mode)
                self.option_context.add_option(self.opt_debugger_autorun)
-               self.option_context.add_option(self.opt_socket_mode)
-               self.option_context.add_option(self.opt_websocket_mode)
-               self.option_context.add_option(self.opt_debug_port)
        end
 end
 
@@ -158,12 +145,8 @@ redef class ModelBuilder
 
                var interpreter = new Debugger(self, mainmodule, arguments)
 
-               set_stdstreams
-
                init_naive_interpreter(interpreter, mainmodule)
 
-               close_stdstreams
-
                var time1 = get_time
                self.toolcontext.info("*** END INTERPRETING: {time1-time0} ***", 2)
        end
@@ -176,53 +159,11 @@ redef class ModelBuilder
                var interpreter = new Debugger(self, mainmodule, arguments)
                interpreter.autocontinue = true
 
-               set_stdstreams
-
                init_naive_interpreter(interpreter, mainmodule)
 
-               close_stdstreams
-
                var time1 = get_time
                self.toolcontext.info("*** END INTERPRETING: {time1-time0} ***", 2)
        end
-
-       redef fun run_naive_interpreter(mmod, args)
-       do
-               set_stdstreams
-               super
-       end
-
-       fun set_stdstreams
-       do
-               if self.toolcontext.opt_socket_mode.value then
-                       var sock = new Socket.server(toolcontext.opt_debug_port.value, 1)
-                       var ns = sock.accept
-                       sock.close
-                       sys.set_io(ns,ns,ns)
-               else if self.toolcontext.opt_websocket_mode.value then
-                       var websock = new WebSocket(toolcontext.opt_debug_port.value, 1)
-                       websock.accept
-                       sys.set_io(websock,websock,websock)
-               end
-       end
-
-       fun close_stdstreams
-       do
-               if sys.stdin isa WebSocket or sys.stdin isa Socket then
-                       sys.stdin.close
-                       sys.stdout.close
-                       sys.stderr.close
-               end
-       end
-end
-
-redef class Sys
-       private fun set_io(istream: PollableIStream, ostream: OStream, errstream: OStream)
-       do
-               self.stdin = istream
-               self.stdout = ostream
-               self.stderr = ostream
-       end
 end
 
 # The class extending `NaiveInterpreter` by adding debugging methods
diff --git a/src/debugger_socket.nit b/src/debugger_socket.nit
new file mode 100644 (file)
index 0000000..07cf16d
--- /dev/null
@@ -0,0 +1,121 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Johan Kayser <kayser.johan@gmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Debugging of a nit program using sockets.
+module debugger_socket
+
+intrude import debugger
+import websocket
+
+redef class ToolContext
+       # --socket
+       var opt_socket_mode = new OptionBool("Launches the target program with raw output on the network via sockets", "--socket")
+
+       # --websocket
+       var opt_websocket_mode = new OptionBool("Launches the target program with output on the network via websockets", "--websocket")
+
+       # --port
+       var opt_debug_port: OptionInt = new OptionInt("Sets the debug port (Defaults to 22125) - Must be contained between 0 and 65535", 22125, "--port")
+
+       redef init
+       do
+               super
+               self.option_context.add_option(self.opt_socket_mode)
+               self.option_context.add_option(self.opt_websocket_mode)
+               self.option_context.add_option(self.opt_debug_port)
+       end
+end
+
+redef class ModelBuilder
+       # Execute the program from the entry point (Sys::main) of the `mainmodule`
+       # `arguments` are the command-line arguments in order
+       # REQUIRE that:
+       #   1. the AST is fully loaded.
+       #   2. the model is fully built.
+       #   3. the instructions are fully analysed.
+       redef fun run_debugger(mainmodule: MModule, arguments: Array[String])
+       do
+               var time0 = get_time
+               self.toolcontext.info("*** START INTERPRETING ***", 1)
+
+               var interpreter = new Debugger(self, mainmodule, arguments)
+
+               set_stdstreams
+
+               init_naive_interpreter(interpreter, mainmodule)
+
+               close_stdstreams
+
+               var time1 = get_time
+               self.toolcontext.info("*** END INTERPRETING: {time1-time0} ***", 2)
+       end
+
+       redef fun run_debugger_autorun(mainmodule: MModule, arguments: Array[String])
+       do
+               var time0 = get_time
+               self.toolcontext.info("*** START INTERPRETING ***", 1)
+
+               var interpreter = new Debugger(self, mainmodule, arguments)
+               interpreter.autocontinue = true
+
+               set_stdstreams
+
+               init_naive_interpreter(interpreter, mainmodule)
+
+               close_stdstreams
+
+               var time1 = get_time
+               self.toolcontext.info("*** END INTERPRETING: {time1-time0} ***", 2)
+       end
+
+       redef fun run_naive_interpreter(mmod, args)
+       do
+               set_stdstreams
+               super
+       end
+
+       fun set_stdstreams
+       do
+               if self.toolcontext.opt_socket_mode.value then
+                       var sock = new Socket.server(toolcontext.opt_debug_port.value, 1)
+                       var ns = sock.accept
+                       sock.close
+                       sys.set_io(ns,ns,ns)
+               else if self.toolcontext.opt_websocket_mode.value then
+                       var websock = new WebSocket(toolcontext.opt_debug_port.value, 1)
+                       websock.accept
+                       sys.set_io(websock,websock,websock)
+               end
+       end
+
+       fun close_stdstreams
+       do
+               if sys.stdin isa WebSocket or sys.stdin isa Socket then
+                       sys.stdin.close
+                       sys.stdout.close
+                       sys.stderr.close
+               end
+       end
+end
+
+redef class Sys
+       private fun set_io(istream: PollableIStream, ostream: OStream, errstream: OStream)
+       do
+               self.stdin = istream
+               self.stdout = ostream
+               self.stderr = ostream
+       end
+end
index 36c3815..dc48db8 100644 (file)
@@ -19,6 +19,7 @@ module nit
 
 import naive_interpreter
 import debugger
+import debugger_socket
 
 # Create a tool context to handle options and paths
 var toolcontext = new ToolContext