at least _parse_ the construct ${foo+(bar)} correctly
(whether the output is correct is still up for debate)
This commit is contained in:
parent
0d1083fc9c
commit
5beee95d6b
93
check.t
93
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.360 2010/02/18 17:30:19 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.361 2010/02/18 17:31:22 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -25,7 +25,7 @@
|
|||||||
# http://www.research.att.com/~gsf/public/ifs.sh
|
# http://www.research.att.com/~gsf/public/ifs.sh
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R39 2010/01/29
|
@(#)MIRBSD KSH R39 2010/02/18
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
@ -1000,6 +1000,95 @@ expected-stdout:
|
|||||||
expected-stderr: !
|
expected-stderr: !
|
||||||
XX
|
XX
|
||||||
---
|
---
|
||||||
|
name: expand-unglob
|
||||||
|
description:
|
||||||
|
Check that ${foo+bar} constructs are parsed correctly
|
||||||
|
XXX this output differs from bash/dash/ksh93/zsh but
|
||||||
|
XXX the exact interpretation of “word” in the construct
|
||||||
|
XXX ${var+word} is still open and to be solved…
|
||||||
|
stdin:
|
||||||
|
tl_norm() {
|
||||||
|
v=$2
|
||||||
|
(echo "$1 plus norm foo ${v+'bar'} baz")
|
||||||
|
(echo "$1 dash norm foo ${v-'bar'} baz")
|
||||||
|
(echo "$1 eqal norm foo ${v='bar'} baz")
|
||||||
|
(echo "$1 qstn norm foo ${v?'bar'} baz") 2>&- || \
|
||||||
|
echo "$1 qstn norm -> error"
|
||||||
|
(echo "$1 PLUS norm foo ${v:+'bar'} baz")
|
||||||
|
(echo "$1 DASH norm foo ${v:-'bar'} baz")
|
||||||
|
(echo "$1 EQAL norm foo ${v:='bar'} baz")
|
||||||
|
(echo "$1 QSTN norm foo ${v:?'bar'} baz") 2>&- || \
|
||||||
|
echo "$1 QSTN norm -> error"
|
||||||
|
}
|
||||||
|
tl_paren() {
|
||||||
|
v=$2
|
||||||
|
(echo "$1 plus parn foo ${v+(bar)} baz")
|
||||||
|
(echo "$1 dash parn foo ${v-(bar)} baz")
|
||||||
|
(echo "$1 eqal parn foo ${v=(bar)} baz")
|
||||||
|
(echo "$1 qstn parn foo ${v?(bar)} baz") 2>&- || \
|
||||||
|
echo "$1 qstn parn -> error"
|
||||||
|
(echo "$1 PLUS parn foo ${v:+(bar)} baz")
|
||||||
|
(echo "$1 DASH parn foo ${v:-(bar)} baz")
|
||||||
|
(echo "$1 EQAL parn foo ${v:=(bar)} baz")
|
||||||
|
(echo "$1 QSTN parn foo ${v:?(bar)} baz") 2>&- || \
|
||||||
|
echo "$1 QSTN parn -> error"
|
||||||
|
}
|
||||||
|
tl_norm 1
|
||||||
|
tl_norm 2 ''
|
||||||
|
tl_norm 3 x
|
||||||
|
tl_paren 4
|
||||||
|
tl_paren 5 ''
|
||||||
|
tl_paren 6 x
|
||||||
|
expected-stdout:
|
||||||
|
1 plus norm foo bar baz
|
||||||
|
1 dash norm foo baz
|
||||||
|
1 eqal norm foo baz
|
||||||
|
1 qstn norm foo baz
|
||||||
|
1 PLUS norm foo baz
|
||||||
|
1 DASH norm foo bar baz
|
||||||
|
1 EQAL norm foo bar baz
|
||||||
|
1 QSTN norm -> error
|
||||||
|
2 plus norm foo bar baz
|
||||||
|
2 dash norm foo baz
|
||||||
|
2 eqal norm foo baz
|
||||||
|
2 qstn norm foo baz
|
||||||
|
2 PLUS norm foo baz
|
||||||
|
2 DASH norm foo bar baz
|
||||||
|
2 EQAL norm foo bar baz
|
||||||
|
2 QSTN norm -> error
|
||||||
|
3 plus norm foo bar baz
|
||||||
|
3 dash norm foo x baz
|
||||||
|
3 eqal norm foo x baz
|
||||||
|
3 qstn norm foo x baz
|
||||||
|
3 PLUS norm foo bar baz
|
||||||
|
3 DASH norm foo x baz
|
||||||
|
3 EQAL norm foo x baz
|
||||||
|
3 QSTN norm foo x baz
|
||||||
|
4 plus parn foo (bar) baz
|
||||||
|
4 dash parn foo baz
|
||||||
|
4 eqal parn foo baz
|
||||||
|
4 qstn parn foo baz
|
||||||
|
4 PLUS parn foo baz
|
||||||
|
4 DASH parn foo (bar) baz
|
||||||
|
4 EQAL parn foo (bar) baz
|
||||||
|
4 QSTN parn -> error
|
||||||
|
5 plus parn foo (bar) baz
|
||||||
|
5 dash parn foo baz
|
||||||
|
5 eqal parn foo baz
|
||||||
|
5 qstn parn foo baz
|
||||||
|
5 PLUS parn foo baz
|
||||||
|
5 DASH parn foo (bar) baz
|
||||||
|
5 EQAL parn foo (bar) baz
|
||||||
|
5 QSTN parn -> error
|
||||||
|
6 plus parn foo (bar) baz
|
||||||
|
6 dash parn foo x baz
|
||||||
|
6 eqal parn foo x baz
|
||||||
|
6 qstn parn foo x baz
|
||||||
|
6 PLUS parn foo (bar) baz
|
||||||
|
6 DASH parn foo x baz
|
||||||
|
6 EQAL parn foo x baz
|
||||||
|
6 QSTN parn foo x baz
|
||||||
|
---
|
||||||
name: eglob-bad-1
|
name: eglob-bad-1
|
||||||
description:
|
description:
|
||||||
Check that globbing isn't done when glob has syntax error
|
Check that globbing isn't done when glob has syntax error
|
||||||
|
4
lex.c
4
lex.c
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.107 2010/01/29 09:34:28 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.108 2010/02/18 17:31:23 tg Exp $");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* states while lexing word
|
* states while lexing word
|
||||||
@ -685,7 +685,7 @@ yylex(int cf)
|
|||||||
*wp++ = CSUBST;
|
*wp++ = CSUBST;
|
||||||
*wp++ = /*{*/ '}';
|
*wp++ = /*{*/ '}';
|
||||||
} else
|
} else
|
||||||
goto Sbase1;
|
goto Sbase2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STBRACE:
|
case STBRACE:
|
||||||
|
4
sh.h
4
sh.h
@ -150,9 +150,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.380 2010/01/29 09:34:30 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.381 2010/02/18 17:31:23 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R39 2010/01/29"
|
#define MKSH_VERSION "R39 2010/02/18"
|
||||||
|
|
||||||
#ifndef MKSH_INCLUDES_ONLY
|
#ifndef MKSH_INCLUDES_ONLY
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user