You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2009/07/09 17:18:55 UTC

svn commit: r792577 - in /felix/trunk/gogo/runtime/src: main/java/org/apache/felix/gogo/runtime/shell/Closure.java test/java/org/apache/felix/gogo/runtime/shell/TestParser.java

Author: gnodet
Date: Thu Jul  9 15:18:54 2009
New Revision: 792577

URL: http://svn.apache.org/viewvc?rev=792577&view=rev
Log:
Fix  expansion

Modified:
    felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
    felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java

Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java?rev=792577&r1=792576&r2=792577&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java Thu Jul  9 15:18:54 2009
@@ -101,29 +101,37 @@
 
     Object executeStatement(List<CharSequence> statement) throws Exception
     {
-        Object result;
-        List<Object> values = new ArrayList<Object>();
-        CharSequence statement0 = statement.remove(0);
-
         // derek: FEATURE: add set -x facility if echo is set
         if (Boolean.TRUE.equals(session.get("echo"))) {
             StringBuilder buf = new StringBuilder("+ ");
-            buf.append(statement0);
             for (CharSequence token : statement)
             {
-                buf.append(' ');
+                if (buf.length() > 0)
+                {
+                    buf.append(' ');
+                }
                 buf.append(token);
             }
             System.err.println(buf);
         }
 
-        Object cmd = eval(statement0);
+        Object result;
+        List<Object> values = new ArrayList<Object>();
         for (CharSequence token : statement)
         {
-            values.add(eval(token));
+            Object v = eval(token);
+            if (v != null && v == parms)
+            {
+                for (Object p : parms)
+                {
+                    values.add(p);
+                }
+            }
+            else {
+                values.add(v);
+            }
         }
-
-        result = execute(cmd, values);
+        result = execute(values.remove(0), values);
         return result;
     }
 
@@ -227,7 +235,21 @@
                         }
                         if (res != null)
                         {
-                            sb.append(res);
+                            if (res == parms)
+                            {
+                                for (int i = 0; i < parms.size(); i++)
+                                {
+                                    if (i > 0)
+                                    {
+                                        sb.append(' ');
+                                    }
+                                    sb.append(parms.get(i));
+                                }
+                            }
+                            else
+                            {
+                                sb.append(res);
+                            }
                             res = null;
                         }
                         if (start != p.current)
@@ -285,7 +307,17 @@
             }
             if (res != null)
             {
-                sb.append(res);
+                if (res == parms)
+                {
+                    for (Object v : parms)
+                    {
+                        sb.append(v);
+                    }
+                }
+                else
+                {
+                    sb.append(res);
+                }
                 res = null;
             }
             sb.append(new Parser(p.text.subSequence(start, p.current)).unescape());
@@ -294,7 +326,21 @@
         {
             if (res != null)
             {
-                sb.append(res);
+                if (res == parms)
+                {
+                    for (int i = 0; i < parms.size(); i++)
+                    {
+                        if (i > 0)
+                        {
+                            sb.append(' ');
+                        }
+                        sb.append(parms.get(i));
+                    }
+                }
+                else
+                {
+                    sb.append(res);
+                }
             }
             res = sb;
         }

Modified: felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java?rev=792577&r1=792576&r2=792577&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java (original)
+++ felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java Thu Jul  9 15:18:54 2009
@@ -63,6 +63,11 @@
         assertEquals("aa", c.execute("echo $c$c | capture"));
         assertEquals("a ;a", c.execute("echo a\\ \\;a | capture"));
         assertEquals("baabab", c.execute("echo b${c}${c}b${c}b | capture"));
+
+        c.set("d", "a  b ");
+        assertEquals("a  b ", c.execute("echo \"$d\" | capture"));
+//        assertEquals("a b", c.execute("echo $d | capture"));
+//        assertEquals("a b", c.execute("echo <echo $d> | capture"));
     }
 
     public void testScope() throws Exception
@@ -123,7 +128,10 @@
         assertEquals(5, c.execute("[1 2 [3 4] 5 6] size"));
         assertEquals("a", c.execute("e = { echo $0 } ; <e a   b | capture>"));
         assertEquals("b", c.execute("e = { echo $1 } ; <e a   b | capture>"));
-        assertEquals("a b", c.execute("e = { echo $args } ; <e a   b | capture>"));
+        assertEquals("b", c.execute("e = { $args } ; <e echo  b | capture>"));
+        assertEquals("ca b", c.execute("e = { echo c$args } ; <e a  b | capture>"));
+        assertEquals("c a b", c.execute("e = { echo c $args } ; <e a  b | capture>"));
+        assertEquals("ca  b", c.execute("e = { echo c$args } ; <e 'a  b' | capture>"));
     }
 
     public void testArray() throws Exception