[Gd-chatter] r11767 - trunk/fundev/sources/environment/dswank

hannes at gwydiondylan.org hannes at gwydiondylan.org
Sat Mar 29 07:05:05 CET 2008


Author: hannes
Date: Sat Mar 29 07:05:04 2008
New Revision: 11767

Modified:
   trunk/fundev/sources/environment/dswank/dswank.dylan
Log:
Job: fd
some cleanups

*support for subclasses and superclass of a given symbol-name
*support for symbol:library:module syntax when searching for
  environment objects


Modified: trunk/fundev/sources/environment/dswank/dswank.dylan
==============================================================================
--- trunk/fundev/sources/environment/dswank/dswank.dylan	(original)
+++ trunk/fundev/sources/environment/dswank/dswank.dylan	Sat Mar 29 07:05:04 2008
@@ -146,10 +146,19 @@
   environment-object-description(*project*, env, *module*)
 end;
 
-define function get-environment-object (symbol-name)
+define function get-environment-object (symbols)
+  let env = split(symbols, ":");
+  let symbol-name = env[0];
   let library = #f;
   let module = #f;
   let project = #f;
+
+  if (env.size == 3)
+    project := *project*;
+    library := find-library(project, env[2]);
+    module := find-module(project, env[1], library: library);
+  end;
+
   local method check-and-set-module (p, lib)
           unless(module)
             module := find-module(p, *module*, library: lib);
@@ -168,9 +177,11 @@
       end;
     end;
   end;
-  *project* := project;
-  *library* := library;
-  *module* := module;
+  if (env.size == 1)
+    *project* := project;
+    *library* := library;
+    *module* := module;
+  end;
 
   find-environment-object(project, symbol-name,
                           library: library,
@@ -192,11 +203,11 @@
                              location.source-location-start-line);
     let column = location.source-location-start-column;
     let hname = environment-object-home-name(*project*, env-obj);
-    let name = if (hname)
-                 environment-object-primitive-name(*project*, hname);
-               else
-                 "unknown"
-               end;
+    let name =  if (hname)
+		  environment-object-primitive-name(*project*, hname);
+		else
+		  "unknown"
+		end;
 
     list(name,
          list(#":location",
@@ -226,8 +237,7 @@
   let function = $xref-functions[quoted-arg.tail.head];
   let env-obj = get-environment-object(quoted-name.tail.head);
   let result = function(env-obj);
-  let res = map(curry(get-location-as-sexp, quoted-name.tail.head),
-                reverse(result));
+  let res = map(curry(get-location-as-sexp, quoted-name.tail.head), result);
   res;
 end;
 
@@ -302,11 +312,31 @@
   end;
 end;
 
+define function get-names (env-objs)
+  let module = if (instance?(*module*, <string>))
+		 find-module(*project*, *module*)
+	       else
+		 *module*
+	       end;
+  sort!(map(rcurry(curry(environment-object-display-name, *project*),
+		   module, qualify-names?: #t), env-objs));
+end;
+
+define swank-function dylan-subclasses (symbols)
+  let env-obj = get-environment-object(symbols);
+  get-names(class-direct-subclasses(*project*, env-obj));
+end;
+
+define swank-function dylan-superclasses (symbol)
+  let env-obj = get-environment-object(symbol);
+  get-names(class-direct-superclasses(*project*, env-obj));
+end;
+
 define function write-to-emacs (stream, s-expression)
   let newstream = make(<string-stream>, direction: #"output");
   print-s-expression(newstream, s-expression);
   let s-expression = stream-contents(newstream);
-//  format(*standard-error*, "write: %s\n", s-expression);
+  //format(*standard-error*, "write: %s\n", s-expression);
   let siz = integer-to-string(s-expression.size, base: 16, size: 6);
   format(stream, "%s%s", siz, s-expression);
 end;
@@ -333,7 +363,9 @@
   local method open ()
           block ()
             let socket = make(<server-socket>, port: port);
-            format(*standard-output*, "Waiting for connection on port %d\n", port);
+            format(*standard-output*,
+		   "Waiting for connection on port %d\n",
+		   port);
             if (tmpfile)
               with-open-file (file = tmpfile, direction: #"output")
                 write(file, integer-to-string(port));
@@ -348,8 +380,9 @@
   let socket = open();
   let stream = accept(socket);
   *server* := start-compiler(stream);
-  let greeting = concatenate("Welcome to dswank - the ", release-product-name(), " ",
-                             release-version(), " SLIME interface");
+  let greeting = concatenate("Welcome to dswank - the ",
+			     release-full-name(),
+			     " SLIME interface\n");
   write-to-emacs(stream, list(#":write-string", greeting));
   while(#t)
     let length = string-to-integer(read(stream, 6), base: 16);



More information about the chatter mailing list