diff --git a/dot.mkshrc b/dot.mkshrc index 1b1f05f..9011fb2 100644 --- a/dot.mkshrc +++ b/dot.mkshrc @@ -1,5 +1,5 @@ # $Id$ -# $MirOS: src/bin/mksh/dot.mkshrc,v 1.106 2016/07/24 23:05:51 tg Exp $ +# $MirOS: src/bin/mksh/dot.mkshrc,v 1.107 2016/07/25 20:41:23 tg Exp $ #- # Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, # 2011, 2012, 2013, 2014, 2015, 2016 @@ -365,8 +365,8 @@ function Lbafh_finish { ((# t = (((Lbafh_v >> 7) & 0x01010101) * 0x1B) ^ \ ((Lbafh_v << 1) & 0xFEFEFEFE) )) - ((# Lbafh_v = t ^ (t >>> 8) ^ (Lbafh_v >>> 8) ^ \ - (Lbafh_v >>> 16) ^ (Lbafh_v >>> 24) )) + ((# Lbafh_v = t ^ (t ^> 8) ^ (Lbafh_v ^> 8) ^ \ + (Lbafh_v ^> 16) ^ (Lbafh_v ^> 24) )) \: } diff --git a/expr.c b/expr.c index 7828183..1ea51b5 100644 --- a/expr.c +++ b/expr.c @@ -23,7 +23,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.86 2016/07/25 00:04:42 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/expr.c,v 1.87 2016/07/25 20:41:23 tg Exp $"); /* the order of these enums is constrained by the order of opinfo[] */ enum token { @@ -66,7 +66,7 @@ enum token { #define P_PRIMARY 0 /* VAR, LIT, (), ! ~ ++ -- */ #define P_MULT 1 /* * / % */ #define P_ADD 2 /* + - */ -#define P_SHIFT 3 /* <<< >>> << >> */ +#define P_SHIFT 3 /* ^< ^> << >> */ #define P_RELATION 4 /* < <= > >= */ #define P_EQUALITY 5 /* == != */ #define P_BAND 6 /* & */ @@ -75,13 +75,13 @@ enum token { #define P_LAND 9 /* && */ #define P_LOR 10 /* || */ #define P_TERN 11 /* ?: */ - /* = += -= *= /= %= <<<= >>>= <<= >>= &= ^= |= */ + /* = += -= *= /= %= ^<= ^>= <<= >>= &= ^= |= */ #define P_ASSIGN 12 #define P_COMMA 13 /* , */ #define MAX_PREC P_COMMA struct opinfo { - char name[5]; + char name[4]; /* name length */ uint8_t len; /* precedence: lower is higher */ @@ -105,8 +105,8 @@ static const struct opinfo opinfo[] = { { "+=", 2, P_ASSIGN }, { "-=", 2, P_ASSIGN }, #ifndef MKSH_LEGACY_MODE - { "<<<=", 4, P_ASSIGN }, /* before <<< */ - { ">>>=", 4, P_ASSIGN }, /* before >>> */ + { "^<=", 3, P_ASSIGN }, /* before ^< */ + { "^>=", 3, P_ASSIGN }, /* before ^> */ #endif { "<<=", 3, P_ASSIGN }, { ">>=", 3, P_ASSIGN }, @@ -114,8 +114,8 @@ static const struct opinfo opinfo[] = { { "^=", 2, P_ASSIGN }, { "|=", 2, P_ASSIGN }, #ifndef MKSH_LEGACY_MODE - { "<<<", 3, P_SHIFT }, /* before << */ - { ">>>", 3, P_SHIFT }, /* before >> */ + { "^<", 2, P_SHIFT }, /* before ^ */ + { "^>", 2, P_SHIFT }, /* before ^ */ #endif { "<<", 2, P_SHIFT }, { ">>", 2, P_SHIFT }, diff --git a/mksh.1 b/mksh.1 index 3ca06a1..f324019 100644 --- a/mksh.1 +++ b/mksh.1 @@ -1,4 +1,4 @@ -.\" $MirOS: src/bin/mksh/mksh.1,v 1.402 2016/07/25 20:38:04 tg Exp $ +.\" $MirOS: src/bin/mksh/mksh.1,v 1.403 2016/07/25 20:41:23 tg Exp $ .\" $OpenBSD: ksh.1,v 1.160 2015/07/04 13:27:04 feinerer Exp $ .\"- .\" Copyright © 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, @@ -2573,7 +2573,7 @@ Unary operators: Binary operators: .Bd -literal -offset indent , -= += \-= *= /= %= \*(Lt\*(Lt\*(Lt= \*(Gt\*(Gt\*(Gt= \*(Lt\*(Lt= \*(Gt\*(Gt= &= \*(ha= \*(Ba= += += \-= *= /= %= \*(Lt\*(Lt= \*(Gt\*(Gt= \*(ha\*(Lt= \*(ha\*(Gt= &= \*(ha= \*(Ba= \*(Ba\*(Ba && \*(Ba @@ -2581,7 +2581,7 @@ Binary operators: & == != \*(Lt \*(Lt= \*(Gt \*(Gt= -\*(Lt\*(Lt\*(Lt \*(Gt\*(Gt\*(Gt \*(Lt\*(Lt \*(Gt\*(Gt +\*(Lt\*(Lt \*(Gt\*(Gt \*(ha\*(Lt \*(ha\*(Gt + \- * / % .Ed @@ -2670,8 +2670,8 @@ The result is the value of the expression on the right-hand side. .It = Assignment; the variable on the left is set to the value on the right. .It Xo -.No += \-= *= /= %= \*(Lt\*(Lt\*(Lt= \*(Gt\*(Gt\*(Gt= -.No \*(Lt\*(Lt= \*(Gt\*(Gt= &= \*(ha= \*(Ba= +.No += \-= *= /= %= \*(Lt\*(Lt= \*(Gt\*(Gt= +.No \*(ha\*(Lt= \*(ha\*(Gt= &= \*(ha= \*(Ba= .Xc Assignment operators. .Sm off @@ -2721,20 +2721,18 @@ not. Less than or equal, greater than, greater than or equal. See .Ic \*(Lt . -.It \*(Lt\*(Lt\*(Lt \*(Gt\*(Gt\*(Gt -Rotate left (right); the result is similar to shift (see -.Ic \*(Lt\*(Lt ) -except that the bits shifted out at one end are shifted in -at the other end, instead of zero or sign bits. -.Pp -.Em Note : -These operators are deprecated; in a subsequent mksh release, -.Ic \*(ha\*(Lt No and Ic \*(ha\*(Gt -.No will replace them, and Ic \*(Gt\*(Gt\*(Gt -will be an arithmetic right shift. .It \*(Lt\*(Lt \*(Gt\*(Gt Shift left (right); the result is the left argument with its bits logically shifted left (right) by the amount given in the right argument. +.It \*(Gt\*(Gt\*(Gt +Shift arithmetically right; the result is similar to shift, +except that the top-most bit is repeated instead of filling +the newly shifted-in bits with zero. +.Em Scheduled to be implemented in R54 ! +.It \*(ha\*(Lt \*(ha\*(Gt +Rotate left (right); the result is similar to shift, +except that the bits shifted out at one end are shifted in +at the other end, instead of zero or sign bits. .It + \- * / Addition, subtraction, multiplication, and division. .It % @@ -6619,7 +6617,7 @@ for the in-memory portion of the history is slow, should use .Xr memmove 3 . .Pp This document attempts to describe -.Nm mksh\ R52d +.Nm mksh\ R53 and up, .\" with vendor patches from insert-your-name-here, compiled without any options impacting functionality, such as