Blame POSIX.STD

Packit 575503
  Copyright (C) 1992, 1995, 1998, 2001, 2006, 2007, 2010, 2011, 2015
Packit 575503
  Free Software Foundation, Inc.
Packit 575503
  
Packit 575503
  Copying and distribution of this file, with or without modification,
Packit 575503
  are permitted in any medium without royalty provided the copyright
Packit 575503
  notice and this notice are preserved.
Packit 575503
--------------------------------------------------------------------------
Packit 575503
Thu Feb 12 08:51:22 IST 2015
Packit 575503
============================
Packit 575503
This file documents several things related to the 2008 POSIX standard
Packit 575503
that I noted after reviewing it.
Packit 575503
Packit 575503
1. POSIX leaves undefined what happens for something like
Packit 575503
Packit 575503
	awk '{ print ; exit }' if=42 /etc/passwd
Packit 575503
Packit 575503
   Mawk diagnoses this.  Gawk and BWK awk do not. This doesn't seem to be
Packit 575503
   worth the effort to add the code, but at least I'm aware of it.
Packit 575503
Packit 575503
2. The 2001-2004 standards accidentally required support for hexadecimal
Packit 575503
   floating point constants and for Infinity and Not-A-Number (NaN) values.
Packit 575503
Packit 575503
   The 2008 standard now explicitly allows, but does not require, such
Packit 575503
   support.
Packit 575503
Packit 575503
   More discussion is provided in the node `POSIX Floating Point Problems'
Packit 575503
   in gawk.texi.
Packit 575503
Packit 575503
3. String comparison with <, <= etc is supposed to take the locale's collating
Packit 575503
   sequence into account.  By default gawk doesn't do this. Rather, gawk
Packit 575503
   will do this only if --posix is in effect.
Packit 575503
Packit 575503
4. According to POSIX, the function parameters of one function may not have
Packit 575503
   the same name as another function, making this invalid:
Packit 575503
Packit 575503
	function foo() { ... }
Packit 575503
	function bar(foo) { ...}
Packit 575503
Packit 575503
   Or even:
Packit 575503
Packit 575503
	function bar(foo) { ...}
Packit 575503
	function foo() { ... }
Packit 575503
Packit 575503
   Gawk enforces this only with --posix.
Packit 575503
Packit 575503
The following things aren't described by POSIX but ought to be:
Packit 575503
Packit 575503
1. The value of $0 in an END rule
Packit 575503
Packit 575503
2. The return value of a function that either does return with no value
Packit 575503
   or that falls off the end of the function body.
Packit 575503
Packit 575503
3. What happens with substr() if start is <= 0, or greater than the length
Packit 575503
   of the string, or if length is <= 0.
Packit 575503
Packit 575503
4. Whether "next" can be invoked from a function body.