aboutsummaryrefslogtreecommitdiff
path: root/bin/sh/arith_yacc.c
Commit message (Collapse)AuthorAgeFilesLines
* Remove $FreeBSD$: one-line .c patternWarner Losh2023-08-161-2/+0
| | | | Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
* sh: Restore $((x)) error checking after fix for $((-9223372036854775808))Jilles Tjoelker2019-02-101-1/+1
| | | | | | | | | | | | | | | | | | SVN r342880 was designed to fix $((-9223372036854775808)) and things like $((0x8000000000000000)) but also broke error detection for values of variables without dollar sign ($((x))). For compatibility, overflow in plain literals continues to be ignored and the value is clamped to the boundary (except 9223372036854775808 which is changed to -9223372036854775808). Reviewed by: se (although he would like error checking to be removed) MFC after: 2 weeks X-MFC-with: r342880 Differential Revision: https://reviews.freebsd.org/D18926 Notes: svn path=/head/; revision=343981
* sh: Remove two redundant (uintmax_t) casts.Jilles Tjoelker2014-08-201-3/+2
| | | | | | | Submitted by: jmallett Notes: svn path=/head/; revision=270246
* sh: Mask off shift distance (<< and >>) in arithmetic.Jilles Tjoelker2014-08-151-2/+3
| | | | | | | | | | | | | | In C, shift distances equal to or larger than the number of bits in the operand result in undefined behaviour. As part of eliminating undefined behaviour in arithmetic, mask off the distance like Java and JavaScript specify and C on x86 usually does. Assumption: conversion from unsigned to signed retains the two's complement bits. Assumption: uintmax_t has no padding bits. Notes: svn path=/head/; revision=270029
* sh: Avoid undefined behaviour shifting negative values left in arithmetic.Jilles Tjoelker2014-06-011-1/+1
| | | | | | | With i386 base clang, arith_yacc.o remains unchanged. Notes: svn path=/head/; revision=266947
* Add prototypes, ANSIfy functions definitions to reduce WARNS=6 output.Philippe Charnier2012-01-251-1/+2
| | | | Notes: svn path=/head/; revision=230530
* sh: Remove undefined behaviour due to overflow in +/-/* in arithmetic.Jilles Tjoelker2011-11-081-3/+3
| | | | | | | With i386 base gcc and i386 base clang, arith_yacc.o remains unchanged. Notes: svn path=/head/; revision=227369
* sh: Include <limits.h> instead of non-standard <sys/limits.h>.Jilles Tjoelker2011-06-261-1/+1
| | | | Notes: svn path=/head/; revision=223580
* sh: Remove the "exp" builtin.Jilles Tjoelker2011-05-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | The "exp" builtin is undocumented, non-standard and not very useful. If exp's return value is not used, something like VAR=$(exp EXPRESSION) is equivalent to VAR=$((EXPRESSION)) except that errors in the expression are fatal and quoting special characters is not needed in the latter case. If exp's return value is used, something like if exp EXPRESSION >/dev/null can be replaced by if [ $((EXPRESSION)) -ne 0 ] with similar differences. The exp-run showed that "let" is close enough to bash's and ksh's builtin that removing it would break a few ports. Therefore, "let" remains in 9.x. PR: bin/104432 Exp-run done by: pav (with some other sh(1) changes) Notes: svn path=/head/; revision=222386
* sh: Apply set -u to variables in arithmetic.Jilles Tjoelker2011-05-041-0/+2
| | | | | | | | | | Note that this only applies to variables that are actually used. Things like (0 && unsetvar) do not cause an error. Exp-run done by: pav (with some other sh(1) changes) Notes: svn path=/head/; revision=221463
* sh: Fix some warnings in code for arithmetic expressions.Jilles Tjoelker2011-03-051-2/+2
| | | | | | | Submitted by: eadler Notes: svn path=/head/; revision=219306
* sh: Detect dividing the smallest integer by -1.Jilles Tjoelker2011-02-121-0/+2
| | | | | | | | This overflows and on some architectures such as amd64 it generates SIGFPE. Generate an error on all architectures. Notes: svn path=/head/; revision=218626
* sh: Import arithmetic expression code from dash.Jilles Tjoelker2011-02-081-0/+376
New features: * proper lazy evaluation of || and && * ?: ternary operator * executable is considerably smaller (8K on i386) because lex and yacc are no longer used Differences from dash: * arith_t instead of intmax_t * imaxdiv() not used * unset or null variables default to 0 * let/exp builtin (undocumented, will probably be removed later) Obtained from: dash Notes: svn path=/head/; revision=218466