|
From: <cr...@us...> - 2009-08-21 13:24:47
|
Revision: 5658
http://jnode.svn.sourceforge.net/jnode/?rev=5658&view=rev
Author: crawley
Date: 2009-08-21 13:24:37 +0000 (Fri, 21 Aug 2009)
Log Message:
-----------
Arithmetic Expression evaluation using $((...)) now works ... modulo
that the POSIX spec is so unclear that it is difficult to figure
out exactly what is correct in edge-cases.
Modified Paths:
--------------
trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java
trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml
Modified: trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java
===================================================================
--- trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java 2009-08-20 15:31:54 UTC (rev 5657)
+++ trunk/shell/src/shell/org/jnode/shell/bjorne/BjorneContext.java 2009-08-21 13:24:37 UTC (rev 5658)
@@ -1029,10 +1029,6 @@
}
private CharSequence dollarParenParenExpand(CharIterator ci) throws ShellException {
- // Different shells handle $(( ... )) differently, but dash seems to do what
- // the POSIX spec seems to say. In the first phase, we look for the matching '))'
- // keeping track of nested parentheses and performing any $ expansions. Double
- // quotes should be treated as literal.
StringBuilder sb = new StringBuilder();
int nesting = 0;
boolean done = false;
@@ -1054,16 +1050,15 @@
sb.append(')');
}
break;
- case '$':
- sb.append(dollarExpand(ci, '\000'));
- break;
case -1:
throw new ShellSyntaxException("Unmatched \"((\" (double left parenthesis)");
default:
sb.append((char) ch);
}
+ ci.nextCh();
} while (!done);
- return new BjorneArithmeticEvaluator(this).evaluateExpression(sb);
+ CharSequence tmp = dollarBacktickExpand(new CharIterator(sb), '\000');
+ return new BjorneArithmeticEvaluator(this).evaluateExpression(tmp);
}
int execute(CommandLine command, CommandIO[] streams, boolean isBuiltin) throws ShellException {
Modified: trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml
===================================================================
--- trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml 2009-08-20 15:31:54 UTC (rev 5657)
+++ trunk/shell/src/test/org/jnode/test/shell/bjorne/bjorne-shell-tests.xml 2009-08-21 13:24:37 UTC (rev 5658)
@@ -98,6 +98,20 @@
1 1
</output>
</testSpec>
+ <testSpec title="$((...))" command="test" runMode="AS_SCRIPT" rc="0">
+ <script>#!bjorne
+A=1
+echo $A
+B="$((A + 1))"
+echo $B
+C="$(($B + 1))"
+echo $C
+</script>
+ <output>1
+2
+3
+</output>
+ </testSpec>
<testSpec title="if ... then ... fi" command="test" runMode="AS_SCRIPT" rc="0">
<script>#!bjorne
if true ; then echo HI ; fi
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|