Results for var-op-other.test.sh

casedashbashmkshoshosh_ALTdescription
0pass pass pass pass pass String length
1pass pass pass pass pass Length of undefined variable
2ok pass pass pass pass Length of undefined variable with nounset
details
3N-I pass pass FAIL FAIL Cannot take length of substring slice
detailsdetailsdetails
4N-I pass pass FAIL FAIL Pattern replacement
detailsdetailsdetails
5N-I BUG BUG FAIL FAIL Pattern replacement ${v/} is not valid
detailsdetailsdetailsdetailsdetails
6N-I BUG BUG pass pass Pattern replacement ${v//} is not valid
detailsdetailsdetails
7N-I pass pass FAIL FAIL String slice
detailsdetailsdetails
8N-I pass pass FAIL FAIL Negative string slice
detailsdetailsdetails
9N-I pass pass FAIL FAIL String slice with math
detailsdetailsdetails

26 passed, 1 ok, 7 known unimplemented, 4 known bugs, 6 failed, 0 skipped

Details on runs that didn't PASS

dash2 Length of undefined variable with nounset

stdout:
stderr: 
/bin/dash: 2: undef: parameter not set
dash3 Cannot take length of substring slice

stdout:
5
stderr:
osh3 Cannot take length of substring slice

[osh status] Expected 1, got 2

stdout:
stderr: 
Line 2 of '<stdin>'
  echo ${#v:1:3}
           ^
Expected } after length expression, got (token id:VOp2_Colon val:":" span_id:8)
---
Line 2 of '<stdin>'
  echo ${#v:1:3}
           ^
Error reading command word
---
Line 0 of '<unknown>'
  <no position info for token>
Error parsing AndOr in ParseCommandTerm
---
osh_ALT3 Cannot take length of substring slice

[osh_ALT status] Expected 1, got 2

stdout:
stderr: 
Line 2 of '<stdin>'
  echo ${#v:1:3}
           ^
Expected } after length expression, got (token id:VOp2_Colon val:":" span_id:8)
---
Line 2 of '<stdin>'
  echo ${#v:1:3}
           ^
Error reading command word
---
Line 0 of '<unknown>'
  <no position info for token>
Error parsing AndOr in ParseCommandTerm
---
dash4 Pattern replacement

stdout:
stderr: 
/bin/dash: 2: Bad substitution
osh4 Pattern replacement

[osh stdout] Expected 'abXX\n', got ''
[osh status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "bin/osh", line 440, in <module>
    main(sys.argv)
  File "bin/osh", line 427, in main
    sys.exit(OilMain(argv))
  File "bin/osh", line 410, in OilMain
    status = OshMain(main_argv)
  File "bin/osh", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 772, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (PatSub
  pat: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Chars val:"c*" span_id:8))])
  replace: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Chars val:XX span_id:10))])
  do_all: False
  do_prefix: False
  do_suffix: False
)
osh_ALT4 Pattern replacement

[osh_ALT stdout] Expected 'abXX\n', got ''
[osh_ALT status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/andy/git/oil/bin/oil.py", line 440, in <module>
    main(sys.argv)
  File "/home/andy/git/oil/bin/oil.py", line 427, in main
    sys.exit(OilMain(argv))
  File "/home/andy/git/oil/bin/oil.py", line 410, in OilMain
    status = OshMain(main_argv)
  File "/home/andy/git/oil/bin/oil.py", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 772, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (PatSub
  pat: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Chars val:"c*" span_id:8))])
  replace: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Chars val:XX span_id:10))])
  do_all: False
  do_prefix: False
  do_suffix: False
)
dash5 Pattern replacement ${v/} is not valid

stdout:
stderr: 
/bin/dash: 2: Bad substitution
bash5 Pattern replacement ${v/} is not valid

stdout:
-abcde-
status=0
stderr:
mksh5 Pattern replacement ${v/} is not valid

stdout:
-abcde-
status=0
stderr:
osh5 Pattern replacement ${v/} is not valid

[osh status] Expected 2, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "bin/osh", line 440, in <module>
    main(sys.argv)
  File "bin/osh", line 427, in main
    sys.exit(OilMain(argv))
  File "bin/osh", line 410, in OilMain
    status = OshMain(main_argv)
  File "bin/osh", line 321, in OshMain
    node = c_parser.ParseWholeFile()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1568, in ParseWholeFile
    node = self.ParseCommandTerm()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1480, in ParseCommandTerm
    child = self.ParseAndOr()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1349, in ParseAndOr
    left = self.ParsePipeline()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1284, in ParsePipeline
    child = self.ParseCommand()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1266, in ParseCommand
    return self.ParseSimpleCommand()  # echo foo
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 557, in ParseSimpleCommand
    result = self._ScanSimpleCommand()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 358, in _ScanSimpleCommand
    if not self._Peek(): return None
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 154, in _Peek
    w = self.w_parser.ReadWord(self.next_lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1114, in ReadWord
    w, need_more = self._ReadWord(lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1075, in _ReadWord
    w = self._ReadCompoundWord(lex_mode=lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 921, in _ReadCompoundWord
    part = self._ReadLeftParts()
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 541, in _ReadLeftParts
    return self._ReadBracedBracedVarSub(d_quoted=False)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 462, in _ReadBracedBracedVarSub
    part = self._ParseVarExpr(arg_lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 321, in _ParseVarExpr
    op = self._ReadPatSubVarOp(arg_lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 201, in _ReadPatSubVarOp
    first_part = pat.parts[0]
IndexError: list index out of range
osh_ALT5 Pattern replacement ${v/} is not valid

[osh_ALT status] Expected 2, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/andy/git/oil/bin/oil.py", line 440, in <module>
    main(sys.argv)
  File "/home/andy/git/oil/bin/oil.py", line 427, in main
    sys.exit(OilMain(argv))
  File "/home/andy/git/oil/bin/oil.py", line 410, in OilMain
    status = OshMain(main_argv)
  File "/home/andy/git/oil/bin/oil.py", line 321, in OshMain
    node = c_parser.ParseWholeFile()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1568, in ParseWholeFile
    node = self.ParseCommandTerm()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1480, in ParseCommandTerm
    child = self.ParseAndOr()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1349, in ParseAndOr
    left = self.ParsePipeline()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1284, in ParsePipeline
    child = self.ParseCommand()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 1266, in ParseCommand
    return self.ParseSimpleCommand()  # echo foo
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 557, in ParseSimpleCommand
    result = self._ScanSimpleCommand()
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 358, in _ScanSimpleCommand
    if not self._Peek(): return None
  File "/home/andy/git/oil/bin/../osh/cmd_parse.py", line 154, in _Peek
    w = self.w_parser.ReadWord(self.next_lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1114, in ReadWord
    w, need_more = self._ReadWord(lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 1075, in _ReadWord
    w = self._ReadCompoundWord(lex_mode=lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 921, in _ReadCompoundWord
    part = self._ReadLeftParts()
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 541, in _ReadLeftParts
    return self._ReadBracedBracedVarSub(d_quoted=False)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 462, in _ReadBracedBracedVarSub
    part = self._ParseVarExpr(arg_lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 321, in _ParseVarExpr
    op = self._ReadPatSubVarOp(arg_lex_mode)
  File "/home/andy/git/oil/bin/../osh/word_parse.py", line 201, in _ReadPatSubVarOp
    first_part = pat.parts[0]
IndexError: list index out of range
dash6 Pattern replacement ${v//} is not valid

stdout:
stderr: 
/bin/dash: 2: Bad substitution
bash6 Pattern replacement ${v//} is not valid

stdout:
-a/b/c-
status=0
stderr:
mksh6 Pattern replacement ${v//} is not valid

stdout:
-a/b/c-
status=0
stderr:
dash7 String slice

stdout:
stderr: 
/bin/dash: 2: Bad substitution
osh7 String slice

[osh stdout] Expected 'bcd\n', got ''
[osh status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "bin/osh", line 440, in <module>
    main(sys.argv)
  File "bin/osh", line 427, in main
    sys.exit(OilMain(argv))
  File "bin/osh", line 410, in OilMain
    status = OshMain(main_argv)
  File "bin/osh", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 775, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (Slice
  begin: 
    (ArithWord w:(CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:1 span_id:8))]))
  length: 
    (ArithWord
      w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:3 span_id:10))])
    )
)
osh_ALT7 String slice

[osh_ALT stdout] Expected 'bcd\n', got ''
[osh_ALT status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/andy/git/oil/bin/oil.py", line 440, in <module>
    main(sys.argv)
  File "/home/andy/git/oil/bin/oil.py", line 427, in main
    sys.exit(OilMain(argv))
  File "/home/andy/git/oil/bin/oil.py", line 410, in OilMain
    status = OshMain(main_argv)
  File "/home/andy/git/oil/bin/oil.py", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 775, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (Slice
  begin: 
    (ArithWord w:(CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:1 span_id:8))]))
  length: 
    (ArithWord
      w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:3 span_id:10))])
    )
)
dash8 Negative string slice

stdout:
stderr: 
/bin/dash: 2: Bad substitution
osh8 Negative string slice

[osh stdout] Expected 'def\n', got ''
[osh status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "bin/osh", line 440, in <module>
    main(sys.argv)
  File "bin/osh", line 427, in main
    sys.exit(OilMain(argv))
  File "bin/osh", line 410, in OilMain
    status = OshMain(main_argv)
  File "bin/osh", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 775, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (Slice
  begin: 
    (ArithUnary
      op_id: Node_UnaryMinus
      child: 
        (ArithWord
          w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:4 span_id:10))])
        )
    )
  length: 
    (ArithWord
      w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:3 span_id:12))])
    )
)
osh_ALT8 Negative string slice

[osh_ALT stdout] Expected 'def\n', got ''
[osh_ALT status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/andy/git/oil/bin/oil.py", line 440, in <module>
    main(sys.argv)
  File "/home/andy/git/oil/bin/oil.py", line 427, in main
    sys.exit(OilMain(argv))
  File "/home/andy/git/oil/bin/oil.py", line 410, in OilMain
    status = OshMain(main_argv)
  File "/home/andy/git/oil/bin/oil.py", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 775, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (Slice
  begin: 
    (ArithUnary
      op_id: Node_UnaryMinus
      child: 
        (ArithWord
          w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:4 span_id:10))])
        )
    )
  length: 
    (ArithWord
      w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:3 span_id:12))])
    )
)
dash9 String slice with math

stdout:
stderr: 
/bin/dash: 3: Bad substitution
osh9 String slice with math

[osh stdout] Expected 'def\n', got ''
[osh status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "bin/osh", line 440, in <module>
    main(sys.argv)
  File "bin/osh", line 427, in main
    sys.exit(OilMain(argv))
  File "bin/osh", line 410, in OilMain
    status = OshMain(main_argv)
  File "bin/osh", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 775, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (Slice
  begin: 
    (ArithBinary
      op_id: Arith_Minus
      left: 
        (ArithBinary
          op_id: Arith_Minus
          left: (ArithVarRef name:i)
          right: 
            (ArithWord
              w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:3 span_id:14))])
            )
        )
      right: 
        (ArithWord
          w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:2 span_id:16))])
        )
    )
  length: 
    (ArithBinary
      op_id: Arith_Plus
      left: (ArithVarRef name:i)
      right: 
        (ArithWord
          w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:2 span_id:24))])
        )
    )
)
osh_ALT9 String slice with math

[osh_ALT stdout] Expected 'def\n', got ''
[osh_ALT status] Expected 0, got 1

stdout:
stderr: 
Traceback (most recent call last):
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/home/andy/git/oil/Python-2.7.13/Lib/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/andy/git/oil/bin/oil.py", line 440, in <module>
    main(sys.argv)
  File "/home/andy/git/oil/bin/oil.py", line 427, in main
    sys.exit(OilMain(argv))
  File "/home/andy/git/oil/bin/oil.py", line 410, in OilMain
    status = OshMain(main_argv)
  File "/home/andy/git/oil/bin/oil.py", line 373, in OshMain
    status = ex.Execute(node)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 892, in Execute
    status = self._Execute(node, fork_external=fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 674, in _Dispatch
    status = self._ExecuteList(node.children)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 885, in _ExecuteList
    status = self._Execute(child)  # last status wins
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 856, in _Execute
    status, check_errexit = self._Dispatch(node, fork_external)
  File "/home/andy/git/oil/bin/../core/cmd_exec.py", line 571, in _Dispatch
    argv = self.ev.EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1060, in EvalWordSequence
    return self._EvalWordSequence(words)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 1040, in _EvalWordSequence
    args = self._EvalWordAndReframe(w)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 993, in _EvalWordAndReframe
    part_vals = self._EvalParts(word)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 887, in _EvalParts
    for v in self.part_ev._EvalWordPart(p, quoted=quoted):
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 846, in _EvalWordPart
    return self._EvalBracedVarSub(part, quoted)
  File "/home/andy/git/oil/bin/../core/word_eval.py", line 775, in _EvalBracedVarSub
    raise NotImplementedError(op)
NotImplementedError: (Slice
  begin: 
    (ArithBinary
      op_id: Arith_Minus
      left: 
        (ArithBinary
          op_id: Arith_Minus
          left: (ArithVarRef name:i)
          right: 
            (ArithWord
              w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:3 span_id:14))])
            )
        )
      right: 
        (ArithWord
          w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:2 span_id:16))])
        )
    )
  length: 
    (ArithBinary
      op_id: Arith_Plus
      left: (ArithVarRef name:i)
      right: 
        (ArithWord
          w: (CompoundWord parts:[(LiteralPart token:(token id:Lit_Digits val:2 span_id:24))])
        )
    )
)