OSDN Git Service

Upgrade to mksh R40.
[android-x86/external-mksh.git] / src / expr.c
index e40108f..f259b0c 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "sh.h"
 
-__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.88 2016/07/27 00:55:27 tg Exp $");
+__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.90 2016/11/07 16:58:48 tg Exp $");
 
 #define EXPRTOK_DEFNS
 #include "exprtok.h"
@@ -326,7 +326,15 @@ evalexpr(Expr_state *es, unsigned int prec)
        vl = evalexpr(es, prec - 1);
        while ((int)(op = es->tok) >= (int)O_EQ && (int)op <= (int)O_COMMA &&
            opprec[(int)op] == prec) {
-               exprtoken(es);
+               switch ((int)op) {
+               case O_TERN:
+               case O_LAND:
+               case O_LOR:
+                       break;
+               default:
+                       exprtoken(es);
+               }
+
                vasn = vl;
                if (op != O_ASN)
                        /* vl may not have a value yet */
@@ -340,14 +348,15 @@ evalexpr(Expr_state *es, unsigned int prec)
 
                        if (!ev)
                                es->noassign++;
+                       exprtoken(es);
                        vl = evalexpr(es, MAX_PREC);
                        if (!ev)
                                es->noassign--;
                        if (es->tok != CTERN)
                                evalerr(es, ET_STR, "missing :");
-                       exprtoken(es);
                        if (ev)
                                es->noassign++;
+                       exprtoken(es);
                        vr = evalexpr(es, P_TERN);
                        if (ev)
                                es->noassign--;
@@ -502,6 +511,7 @@ evalexpr(Expr_state *es, unsigned int prec)
                case O_LAND:
                        if (!t1)
                                es->noassign++;
+                       exprtoken(es);
                        vr = intvar(es, evalexpr(es, prec - 1));
                        res = t1 && vr->val.u;
                        if (!t1)
@@ -510,6 +520,7 @@ evalexpr(Expr_state *es, unsigned int prec)
                case O_LOR:
                        if (t1)
                                es->noassign++;
+                       exprtoken(es);
                        vr = intvar(es, evalexpr(es, prec - 1));
                        res = t1 || vr->val.u;
                        if (t1)
@@ -857,7 +868,7 @@ ksh_access(const char *fn, int mode)
 }
 
 #ifndef MIRBSD_BOOTFLOPPY
-/* From: X11/xc/programs/xterm/wcwidth.c,v 1.8 2014/06/24 19:53:53 tg Exp $ */
+/* From: X11/xc/programs/xterm/wcwidth.c,v 1.9 */
 
 struct mb_ucsrange {
        unsigned short beg;
@@ -868,8 +879,8 @@ static int mb_ucsbsearch(const struct mb_ucsrange arr[], size_t elems,
     unsigned int val) MKSH_A_PURE;
 
 /*
- * Generated by MirOS: contrib/code/Snippets/eawparse,v 1.2 2013/11/30 13:45:17 tg Exp $
- * from the Unicode Character Database, Version 7.0.0
+ * Generated from the Unicode Character Database, Version 9.0.0, by
+ * MirOS: contrib/code/Snippets/eawparse,v 1.3 2014/11/16 12:16:24 tg Exp $
  */
 
 static const struct mb_ucsrange mb_ucs_combining[] = {
@@ -899,7 +910,7 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x0825, 0x0827 },
        { 0x0829, 0x082D },
        { 0x0859, 0x085B },
-       { 0x08E4, 0x0902 },
+       { 0x08D4, 0x0902 },
        { 0x093A, 0x093A },
        { 0x093C, 0x093C },
        { 0x0941, 0x0948 },
@@ -994,6 +1005,7 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x17C9, 0x17D3 },
        { 0x17DD, 0x17DD },
        { 0x180B, 0x180E },
+       { 0x1885, 0x1886 },
        { 0x18A9, 0x18A9 },
        { 0x1920, 0x1922 },
        { 0x1927, 0x1928 },
@@ -1032,7 +1044,7 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x1CF4, 0x1CF4 },
        { 0x1CF8, 0x1CF9 },
        { 0x1DC0, 0x1DF5 },
-       { 0x1DFC, 0x1DFF },
+       { 0x1DFB, 0x1DFF },
        { 0x200B, 0x200F },
        { 0x202A, 0x202E },
        { 0x2060, 0x2064 },
@@ -1045,13 +1057,13 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0x3099, 0x309A },
        { 0xA66F, 0xA672 },
        { 0xA674, 0xA67D },
-       { 0xA69F, 0xA69F },
+       { 0xA69E, 0xA69F },
        { 0xA6F0, 0xA6F1 },
        { 0xA802, 0xA802 },
        { 0xA806, 0xA806 },
        { 0xA80B, 0xA80B },
        { 0xA825, 0xA826 },
-       { 0xA8C4, 0xA8C4 },
+       { 0xA8C4, 0xA8C5 },
        { 0xA8E0, 0xA8F1 },
        { 0xA926, 0xA92D },
        { 0xA947, 0xA951 },
@@ -1078,14 +1090,47 @@ static const struct mb_ucsrange mb_ucs_combining[] = {
        { 0xABED, 0xABED },
        { 0xFB1E, 0xFB1E },
        { 0xFE00, 0xFE0F },
-       { 0xFE20, 0xFE2D },
+       { 0xFE20, 0xFE2F },
        { 0xFEFF, 0xFEFF },
        { 0xFFF9, 0xFFFB }
 };
 
 static const struct mb_ucsrange mb_ucs_fullwidth[] = {
        { 0x1100, 0x115F },
+       { 0x231A, 0x231B },
        { 0x2329, 0x232A },
+       { 0x23E9, 0x23EC },
+       { 0x23F0, 0x23F0 },
+       { 0x23F3, 0x23F3 },
+       { 0x25FD, 0x25FE },
+       { 0x2614, 0x2615 },
+       { 0x2648, 0x2653 },
+       { 0x267F, 0x267F },
+       { 0x2693, 0x2693 },
+       { 0x26A1, 0x26A1 },
+       { 0x26AA, 0x26AB },
+       { 0x26BD, 0x26BE },
+       { 0x26C4, 0x26C5 },
+       { 0x26CE, 0x26CE },
+       { 0x26D4, 0x26D4 },
+       { 0x26EA, 0x26EA },
+       { 0x26F2, 0x26F3 },
+       { 0x26F5, 0x26F5 },
+       { 0x26FA, 0x26FA },
+       { 0x26FD, 0x26FD },
+       { 0x2705, 0x2705 },
+       { 0x270A, 0x270B },
+       { 0x2728, 0x2728 },
+       { 0x274C, 0x274C },
+       { 0x274E, 0x274E },
+       { 0x2753, 0x2755 },
+       { 0x2757, 0x2757 },
+       { 0x2795, 0x2797 },
+       { 0x27B0, 0x27B0 },
+       { 0x27BF, 0x27BF },
+       { 0x2B1B, 0x2B1C },
+       { 0x2B50, 0x2B50 },
+       { 0x2B55, 0x2B55 },
        { 0x2E80, 0x303E },
        { 0x3040, 0xA4CF },
        { 0xA960, 0xA97F },