User-visible changes from version 0.9.9 to 0.9.10 (20020416)
============================================================

***

/configure
----------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* configure:
	if the host compiler supports 64-bit integral types, R_LONG_LONG_MAX,
	  R_LONG_LONG_MIN, R_ULONG_LONG_MAX constants are generated to
	  <p_integral.h>.

2002-03-16  Alexander Chernov  <cher@ispras.ru>

	* configure:
	if `long long' type is supported, CONF_HAS_INT64 and CONT_INT64_TYPE
	  configuration variables are set;
	new check for `__int64' type as supported by Visual C++ compiler,
	  if the type is present, CONF___INT64 variable is set to 1,
	  CONF___INT64_BITS is set to 64, CONF_HAS_INT64 is set to 1,
	  CONF_INT64_TYPE is set to "__int64";
	new check how to specify 64-bit literals in program code. Currently
	  "ll" and "i64" variants are checked. CONF_INT64_SUFFIX macro is
	  defined to be the supported suffix; this check is performed only
	  if CONF_HAS_INT64 is set to 1.
	new check for unsigned 64-bit integral literals in program code.
	  "ull" and "ui64" are checked. CONF_UINT64_SUFFIX variable is set.
	  this check is performed only if CONF_HAS_INT64 is set to 1.
	new check for printf function format to print 64-bit integer
	  quantities. The following are checked "%lld", "%I64d", "%Ld",
	  "%qd". CONF_INT64_FORMAT variable is set to suffix "ll", "I64", "L"
	  or "q".
	new check whether `long double' is equivalent to `double'
	  (as for Visual C++). CONF_LONG_DOUBLE_IS_DOUBLE variable is set to 1,
	  if it is so.
	if the compiler supports `__int64', definitions of `rullong_t',
	  `rllong_t' are emitted to p_integral.h;
	`__int64' type is included into the list of types searched to emit
	  explicitly-sized typedefs;
	if CONF_HAS_INT64 is set to 1, definitions of R_I64, R_U64, R_F64
	  macros are emited to p_integral.h;
	if CONF_LONG_DOUBLE_IS_DOUBLE is set to 1, definition of
	  R_LONG_DOUBLE_IS_DOUBLE is emited to p_integral.h.

/sources/reuse
--------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* files.make: added c_value.[ch] and c_value_ops.[ch].

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* files.make: reuse/init_fp.c file added.

/sources/reuse/reuse
--------------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* c_value.c, c_value.h, c_value_ops.c:
	Fixes to compile with Visual C.

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* c_value.c, c_value_ops.c:
	include directives are updates, since this file is now a part of
	  reuse library.

	* strtoll.c: removed definitions of LONG_LONG_MAX, etc;
	(reuse_strtoll) R_LONG_LONG_MAX, R_LONG_LONG_MIN are used instead.

	* strtoull.c: removed definitions of ULONG_LONG_MAX, etc.
	(reuse_strtoull) R_ULONG_LONG_MAX is used instead.

2002-04-15  Alexander Chernov  <cher@ispras.ru>

	* c_value.h:
	(c_operation_t) a new enumerated type for C operations. Actually,
	  this type was previously called `teOperation' and located in
	  "ast/ttype.h";
	(c_value_print,c_value_sprint,c_value_size,c_value_cast,c_value_balanced_type,c_value_operation,c_value_fits,c_value_compare,c_value_is_false,c_value_is_true,c_value_is_zero,c_value_is_positive,c_value_is_negative,c_value_is_integral,c_value_is_large,c_get_balanced_type,c_is_unsigned_type,c_value_enable_float_arith,c_builtin_str,c_operation_str) prototypes are moved from "ast/ttypes.h".

	* c_value_ops.c: <p_integral.h> is included;
	"ast/c_value.h" is included instead of "ast/ttypes.h";
	`c_builtin_str' function name is used instead of `teBuiltin_str';
	definitions of `LONG_LONG' limits are moved to <p_integral.h>;
	(ull_fits_ll) `R_LONG_LONG_MAX' is used instead of `LONG_LONG_MAX';
	(c_operation_to_VO_OP) renamed from `teOperation_to_VO_OP';
	(c_operation_is_relation) from `teOperation_is_relation';
	(c_operation_to_VO_LB) from `teOperation_to_VO_LB';
	(VO_LB_to_c_operation) from `VO_LB_to_teOperation';
	(c_operation_is_binary) from `teOperation_is_binary';
	(c_operation_to_VO_BIN) from `teOperation_to_VO_BIN';
	(VO_BIN_to_c_operation) from `VO_BIN_to_teOperation';
	(c_operation_is_logic_unary) from `teOperation_is_logic_unary';
	(c_operation_to_VO_LU) from `teOperation_to_VO_LU';
	(VO_LU_to_c_operation) from `VO_LU_to_teOperation';
	(c_operation_is_unary) from `teOperation_is_unary';
	(c_operation_to_VO_UN) from `teOperation_to_VO_UN';
	(VO_UN_to_c_operation) from `VO_UN_to_teOperation';
	(c_operation_is_update) from `teOperation_is_update';
	(c_operation_to_VO_UPD) from `teOperation_to_VO_UPD';
	(VO_UPD_to_teOperation) from `VO_UPD_to_c_operation'.

	* c_value_ops.h:
	(c_operation_to_VO_OP) renamed from `teOperation_to_VO_OP';
	(c_operation_is_relation) from `teOperation_is_relation';
	(c_operation_to_VO_LB) from `teOperation_to_VO_LB';
	(VO_LB_to_c_operation) from `VO_LB_to_teOperation';
	(c_operation_is_binary) from `teOperation_is_binary';
	(c_operation_to_VO_BIN) from `teOperation_to_VO_BIN';
	(VO_BIN_to_c_operation) from `VO_BIN_to_teOperation';
	(c_operation_is_logic_unary) from `teOperation_is_logic_unary';
	(c_operation_to_VO_LU) from `teOperation_to_VO_LU';
	(VO_LU_to_c_operation) from `VO_LU_to_teOperation';
	(c_operation_is_unary) from `teOperation_is_unary';
	(c_operation_to_VO_UN) from `teOperation_to_VO_UN';
	(VO_UN_to_c_operation) from `VO_UN_to_teOperation';
	(c_operation_is_update) from `teOperation_is_update';
	(c_operation_to_VO_UPD) from `teOperation_to_VO_UPD';
	(VO_UPD_to_teOperation) from `VO_UPD_to_c_operation'.

	* c_value.c: Initial revision

2002-03-26  Alexander Chernov  <cher@ispras.ru>

	* hash.c: copyright notice is updated;
	(ident_put) `str' parameter now has type `const char *'.

	* hash.h: copyright notice is updated;
	`lconfig.h' is no longer included;
	`ident_put' now accepts `const char *' in its string parameter.

2002-03-16  Alexander Chernov  <cher@ispras.ru>

	* writedld.c:
	(reuse_writedld) if `R_LONG_DOUBLE_IS_DOUBLE' feature macro is defined
	  to 1, the given value is printed as `double'.

	* writeull.c:
	`rullong_t' type name is used instead of `unsigned long long'.

	* writell.c: `rllong_t' type name is used instead of `long long'.

	* writehld.c:
	(reuse_writehld) if `R_LONG_DOUBLE_IS_DOUBLE' feature macro is
	  defined to 1, `reuse_writehd' function is called.

	* writehd.c, strtoull.c, strtoll.c:
	`R_I64' macro is used to construct `long long' literals;
	`R_U64' macro is used to construct `unsigned long long' literals;
	`rllong_t' type name is used instead of `long long';
	`rullong_t' type name is used instead of `unsigned long long'.

	* strtold.c:
	if `R_LONG_DOUBLE_IS_DOUBLE' feature macro is defined, get10pow
	  function is commented out;
	(reuse_strtold) if `R_LONG_DOUBLE_IS_DOUBLE' feature macro is defined,
	  `strtod' function is called.

	* snprintf.c:
	`R_HAS_INT64' feature test is used instead of `R_HAS_LONGLONG';
	`rullong_t' type name is used instead of `unsigned long long';
	`rllong_t' type name is used instead of `long long'.

	* readhld.c:
	(reuse_readhld) is `R_LONG_DOUBLE_IS_DOUBLE' feature macro is defined,
	  `reuse_readhd' macro is called.

	* readhd.c:
	(reuse_readhd) `rullong_t' type name is used instead of `unsigned long
	  long';
	  `R_I64' macro is used to construct literals of long long type.

	* number_io.c:
	feature macro `R_HAS_INT64' is checked in order to declare strtoll
	  function;
	`rllong_t' type is used instead of `long long' type;
	`rullong_t' type is used instead of `unsigned long long' type;
	(os_readdld) if `R_LONG_DOUBLE_IS_DOUBLE' feature macro is defined,
	  `os_readdd' function is called.

	* fp_props_ld.c:
	if `R_LONG_DOUBLE_IS_DOUBLE' feature macro is defined to 1,
	  `long double' is assumed to be equivalent to `double', so for each
	  *_ld function the corresponding *_d function is called.

	* fp_props_d.c:
	`rullong_t' type is used instead of `unsigned long long';
	R_I64 macro is used to construct unsigned long long literals.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* writehd.c:
	(reuse_writehd) explicit `ULL' suffix added to one literal value.

	* memfile.c: copyright notice is updated;
	minor indentation changes;
	(memfile_write) previously `buf' parameter is renamed as `vbuf', and
	  new local variable `buf' of `unsigned char *' type added.

	* fp_props_f.c:
	(reuse_is_infinity_f) fixed a hexadecimal literal value, which vere
	  too large for `unsigned long' type.

	* Sets.c: copyright notice is updated;
	minor indentation changes;
	(WriteSet) structure `Out' is assigned a value separately from its
	  definition.

2002-02-20  Alexander Chernov  <cher@ispras.ru>

	* Memory.c: copyright notice is updated;
	minor indentation changes in copyright clause;
	(Alloc) `register' removed from parameter list.

	* Memory.h: minor indentation changes in copyright clause;
	(Alloc) `register' removed from parameter list.

	* Idents.h, Idents.c: copyright notice is updated;
	minor indentation changes in copyright clause;
	(MakeIdent) `register' removed from parameter list.

	* General.h, General.c: copyright notice is updated;
	minor indentation changes in copyright clause;
	(Log2) `register' is removed from parameters;
	(Exp2) `register' is removed from parameters.

	* xalloc.h: copyright notice is updated;
	minor indentation changes;
	fancy XALLOC stuff is enabled when compiled under RCC.

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* init_fp.c: Initial revision

	* number_io.h: 
	(reuse_init_fp) prototype added.

/sources/reuse/reuse/unix
-------------------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* exec.c: <time.h> is included.

2002-02-20  Alexander Chernov  <cher@ispras.ru>

	* exec.c: minor indentation changes;
	__FUNCTION__ variable is defined to "???" by macro, if not gcc;
	ERR_R usage is eliminated, since rcc's preprocessor does not yet
	  support variadic macros.

/sources/reuse/reuse/unix
-------------------------

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* tempfile.c: 
	(temp_Create) commented out the mysterious fprintf operator;
	  ERROR_FILE_EXIST error code is handled properly.

/sources/c_cpp/src
------------------

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* macrotbl.h:
	added forward structure definitions for `tTokArray' and `tMacroDef'.

/sources/clib
-------------

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* build.make: `arpa' and `netinet' directories are installed.

2002-02-22  Alexander Chernov  <cher@ispras.ru>

	* build.make:
	(log) ChangeLog is updated in include/sys and include/p2c directories.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* build.make: copyright notice is updated;
	installation of `include/sys' directory is added.

/sources/clib/include
---------------------

2002-03-09  Alexander Chernov  <cher@ispras.ru>

	* pwd.h, stdio.h:
	`FILE' declared as typedef'ed anonymous structure, so it will be
	  generated back to C exactly as `FILE'.

	* ctype.h: prototype of `isascii' added.

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* signal.h:
	`#define' directives added for various signal-related constants.

	* limits.h: added many POSIX limit constants.

	* fcntl.h: a `#define' directive added for each fcntl constant.

	* errno.h: a define directive added for each errno code.

	* dirent.h: added definitions for _DIRENT_HAVE_* macros.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* alloca.h, ar.h, dirent.h, fnmatch.h, glob.h, inttypes.h, pwd.h, stdint.h:
	initial revision

	* unistd.h: POSIX feature test macros are added;
	`lseek', `vfork' functions are declared;
	`environ' is commented out;
	POSIX system configuration constants are declared;
	`pathconf' ... `confstr' functions are declared.

	* string.h: `strsignal' function is declared.

	* stdlib.h: `atoi', `atol', ..., `atof' functions are declared.

	* stdio.h: `FILE' type is checked to be defined prior to definition;
	`setbuf', ..., `setvbuf' functions are added.

	* stdarg.h:
	added structure __force_include_stdarg in order to preserve the fact,
	  that the file was included.

	* signal.h: macrodefinitions for each signal name are added;
	`sig_atomic_t', `sigset_t', `sigval_t', `siginfo_t',
	   `struct sigaction' types are added;
	many functions for POSIX signal handling are added.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* assert.h: assert macro now uses __FUNCTION__ built-in variable.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* setjmp.h: jmp_buf is declared exactly as in Glibc-2.1.

	* stdio.h: FILE is declared exactly as in Glibc-2.1.

2002-02-25  Alexander Chernov  <cher@ispras.ru>

	* unistd.h, time.h, stdio.h: copyright notice is slightly updated;
	all enumerated type definitions are marked with `int' type.

	* signal.h: excessive commas removed.

	* signal.h, locale.h, fcntl.h, errno.h:
	copyright notice is slightly updated;
	all enumerated type definitions are marked with `int' type.

2002-02-22  Alexander Chernov  <cher@ispras.ru>

	* string.h:
	prototypes added: strerror_r, strndup, strdupa, strndupa, stpcpy.

	* libintl.h, locale.h, stddef.h: initial revision

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* errno.h, fcntl.h, limits.h, memory.h, setjmp.h, signal.h, time.h, unistd.h, assert.h:
	initial revision

	* stdlib.h: added:
	  definition of `ssize_t' type;
	  definition of `ptrdiff_t' type;
	  `alloca', defined as macros expanding to `__builtin_alloca';
	  proto for `abort';
	  protos for `strtol', `strtoul', `strtoll', `strtoull';
	  protos for `strtod', `strtof', `strtold';
	  protos for `qsort', `system', `atexit';
	  protos for `clearenv', `putenv', `getenv';
	  protos for `random', `srandom', `initstate', `setstate'.

	* string.h: copyright notice is updated;
	minor indentation changes in copying conditions statement;
	prototypes for `strcasecmp', `strncasecmp' added.

	* stdio.h: added definition of `va_list' type;
	added definition of `SEEK_*' constants;
	`FILE' type is declared as opaque structure;
	added prototypes for `fdopen', `freopen', `popen', `pclose';
	added prototypes for `asprintf', `snprintf', `vprintf', `vfprintf',
	  `vsprintf', `vsnprintf', `vasprintf';
	added prototypes for `fread', `fwrite';
	added prototypes for `clearerr', `feof', `ferror', `fileno';
	`EOF' is defined as constant with value -1;
	`NULL' is defined as just `0';
	added prototypes for `tempnam', `rename', `remove', `perror'.

	* stdarg.h:
	definition of `va_list' type is put under conditional compilation.

2002-02-07  Alexander Chernov  <cher@ispras.ru>

	* stdio.h: copyright notice is updated;
	added definition of `size_t' type.

/sources/clib/include/arpa
--------------------------

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* inet.h: initial revision

/sources/clib/include/netinet
-----------------------------

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* in.h: initial revision

/sources/clib/include/sys
-------------------------

2002-03-09  Alexander Chernov  <cher@ispras.ru>

	* socket.h:
	enumerated definitions are provided for all socket constants.

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* socket.h: many definitions and functions added.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* time.h: `gettimeofday', `settimeofday' added.

	* types.h: Added definition of `__ptr_t' type.

	* param.h, timeb.h: initial revision

2002-02-25  Alexander Chernov  <cher@ispras.ru>

	* wait.h, utsname.h, stat.h, resource.h:
	copyright notice is slightly updated;
	all enumerated type definitions are marked with `int' type.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* times.h, types.h, utsname.h, wait.h, resource.h, socket.h, stat.h, time.h:
	initial revision

/sources/testdrv/src
--------------------

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* main.c:
	(run_test) is the comparison between the result and the correct answer
	  is successful, the working files are deleted immediately.

/sources/c
----------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* files.make: ast/c_value.[ch], ast/c_value_ops.[ch] are removed;
	backend/cvm_output.[ch], backend/cvm_process_mif.[ch],
	backend/cvm_generate.[ch] are added.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* build.make: copyright notice is updated;
	`backend' directory is added to the list processed by `log' target.

	* files.make: backend directory is added to SRCFILES.

	* files.make: copyright notice is updated;
	backend/cvm_entry.[ch] files are added;
	backend/cvm_output.[ch] files are added.

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* files.make:
	`ast/c_values.[ch]' are renamed to `ast/c_value_ops.[ch]';
	new file `ast/c_value.h' is added.

2002-02-22  Alexander Chernov  <cher@ispras.ru>

	* runtests.sh: Tests directory is moved out of the c-sema tree.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* runtests.sh: testdrv test program is used.

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* gen_files.make: copyright notice is updated;
	modified bison skeleton (bison.simple) is no longer used.

/sources/c/ast
--------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* ttypes.h, ttypes.c:
	conditional compilation for NO_AST_DIR is removed;
	many functions and global variables, which manipulate with c_value
	  are moved to c_value.[ch], which is now part of REUSE library.
	  The function list is as follows: teBuiltin_str, c_value_print,
	  c_value_sprint, c_is_unsigned_type, c_value_size,
	  c_get_balanced_type, c_value_balanced_type, c_value_cast,
	  c_value_fits, c_value_is_false, c_value_is_true, c_value_is_zero,
	  c_value_is_positive, c_value_is_negative, c_value_is_integral,
	  c_value_is_large, c_value_compare, c_value_operation, tOperation_str.

	* tree_sema.ast:
	(ExprIdent) `MIFElem' field is added to store the MIF reference to
	  STRING instruction in case of __FUNCTION__ pseudovariable;
	(ExprString) `MIFElem' field is added.

	* tree_base.ast: <reuse/c_value.h> is included;
	(Operation) `teOperation' type is renamed to `c_operation_t'.

2002-03-25  Alexander Chernov  <cher@ispras.ru>

	* ttypes.h:
	if `NO_AST_DIR' preprocessor symbol is defined, `c_value.h' is included
	  from the current directory.

	* ttypes.c, c_value_ops.c:
	if `NO_AST_DIR' preprocessor symbol is defined, `ttypes.h' and
	  `c_value_ops.h' are included from the current directory.

	* ttypes.c:
	CVSID macro is replaced with ordinary `cvsid' var. definitions.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* tree_utils.c:
	(treeAux) new node types `ExprAsm', `AsmArgs', `NoAsmArg', `AsmArg'
	  are handled;
	(treeNodes) the same as above.

	* tree_sema.ast: (AsmArg) `ParamArg' field is added.

	* tree_pars.ast: copyright notice is updated;
	(AsmArg) this node type has `Last' field.

	* tree_cons.h: 
	(m2ExprAsm) prototype added;
	(m2AsmArg) prototype added.

	* tree_cons.c:
	(m2ExprAsm) a new function, which constructs `ExprAsm' node;
	(m2AsmArg) a new function.

	* tree_base.ast:
	(ExprAsm) a new node type to store the information about `asm'
	  expressions.

2002-03-11  Alexander Chernov  <cher@ispras.ru>

	* ttypes.h:
	definition of `semainfo_t' and `afaccess_t' types is added.

	* tree_sema.ast:
	(Node) `Sema' attribute is declared as having `semainfo_t' type;
	(ExprArray) `AccessChain' attribute is declared of type `afaccess_t';
	(ExprField) the same as above.

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* ttypes.h:
	"ast/c_value.h" file is included since it contains definition for
	  C value types;
	definitions of `teBuiltin' and `tValue' types are moved to
	  "ast/c_value.h" file;
	new type name `c_value_t' is used instead of the old name `tValue';
	function name prefix `tValue' is replaced with new prefix `c_value'.

	* ttypes.c:
	"ast/c_value_ops.h" is included since it is the new name for
	  "ast/c_values.h";
	`tValue' prefix is replaced with `c_value' prefix in all the
	  function names;
	`c_value_t' type name is used instead of `tValue'.

	* tree_base.ast:
	(TypeAtom) `c_builtin_t' type is used instead of `teBuiltin';
	(ExprConst) `pc_value_t' type is used instead of `tpValue'.

	* c_value_ops.c: renamed from `c_values.c' to `c_value_ops.c'.

	* c_value.h: Initial revision

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* c_value_ops.c:
	new type C_SCHAR (explicitly signed char) is handled in all type
	  operations.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* ttypes.c: new type `C_SCHAR' (explicitly signed char) is handled.

	* ttypes.h: 
	(teBuiltin) new type C_SCHAR (explicitly signed char) is added;
	(tValue) new field `ct_schar' is added.

	* c_values.c:
	new type C_SCHAR (explicitly signed char) is handled in all type
	  operations.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* tree_sema.ast:
	(ExprIdent) a new attribute `Function' is added to store the name of
	  the function for __FUNCTION__ built-in variable.

2002-02-22  Alexander Chernov  <cher@ispras.ru>

	* ttypes.c:
	(balance_table_3) a new "balancing" table for comparison operations,
	  pointer to char may be safely compared with pointer to
	  unsigned char;
	(balance_tables) added reference to `balance_table_3';
	(c_get_balanced_type) added fourth table.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* ttextra.h: copyright notice is updated;
	minor formating changes in copying conditions clause;
	forward declaration of `union CTree_Node' added.

	* tree_base.ast: 
	(yyALLOC) typecast added to reduce the number of warnings.

2002-02-17  Alexander Chernov  <cher@ispras.ru>

	* tree_base.ast: 
	(Init1,Init2) field `IndExpr' is added to support GNU-style
	  initializers "... = { [1] 1 }", `refs' array signatures are updated
	  accordingly.

	* tree_cons.c:
	(m2Init1,m2Init2) updated because the node type signature is changed;
	(ctree_SetInitIndex) a new function, which sets only index expression
	  of an initializer node.

	* tree_cons.h:
	(m2Init1,m2Init2) prototypes are change as tree node signatures are
	  changed;
	(ctree_SetInitIndex) the prototype added.

2002-02-16  Alexander Chernov  <cher@ispras.ru>

	* ttypes.h: cosmetic changes.

	* ttypes.c:
	(tValue_cast) supported case, where the source pointer is the same
	  as the target pointer.

	* tree_utils.c: 
	(treeAux) description of TypeTypeof node type is added;
	(treeNodes) node of TypeTypeof is added.

	* tree_cons.h: 
	(m2TypeTypeof) the prototype added;
	(m2DirLabel2) the prototype updated.

	* tree_cons.c:
	(m2TypeTypeof) a new function to create TypeTypeof AST tree node;
	(m2DirLabel2) updated to support new tree node structure.

	* tree_base.ast:
	(TypeTypeof) a new node to support `typeof' type specifier like
	  `typeof(a) b;' (GNU extension);
	(DirLabel2) added field `Expr2' to support case intervals like
	  `case 1...10:' (GNU extension).

2002-02-04  Alexander Chernov  <cher@ispras.ru>

	* tree_sema.ast:
	(ExprArray) new attribute `AccessChain' to store array and field
	  access chains;
	(ExprField) new attribute `AccessChain', `OffsetDef' is removed.

2002-02-01  Alexander Chernov  <cher@ispras.ru>

	* ttypes.c:
	(c_is_unsigned_type) a new function, which returns 1, if the given
	  type (C_* tag) is an unsigned type.

	* ttypes.h: 
	(c_is_unsigned_type) prototype added.

/sources/c/backend
------------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* cvm_entry.h, cvm_entry.c: in progress...

	* cvm_generate.c, cvm_generate.h, cvm_process_mif.c, cvm_process_mif.h:
	initial revision

2002-03-26  Alexander Chernov  <cher@ispras.ru>

	* cvm_module.h: updated according to the last changes in CVM specs.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* cvm_module.h: initial revision

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* cvm_entry.c, cvm_entry.h, cvm_output.c, cvm_output.h:
	initial revision

/sources/c/driver
-----------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* options.c: "sema/sema_entry.h" is included;
	new options are added: `--mif-no-inline-strings',
	  `--mif-inline-strings', `--mif-no-float-incr', `--mif-float-incr',
	  `--mif-no-ptr-incr', `--mif-ptr-incr', `--mif-no-comp-incr',
	  `--mif-comp-incr', `--mif-var-load', `--mif-no-var-load',
	  `--sema-float-arith', `--sema-no-float-arith'.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* batch.c: "backend/cvm_entry.h" is included;
	MIF generation is enabled by default;
	new `cvm_backend_flag' variable;
	`-S' is handled distictly from `--mif';
	`--cvm' option is handled;
	(open_output) a new function, which opens output file by the input
	  file, output file suffix, and the output file name;
	(close_output) a new function, which closes the output stream;
	(run_cvm_backend) a new function;
	(run_mif_backend) parameters are changed: the first parameter is
	  the name of the input file, and the second parameter is the AST
	  reference;
	  new `open_output' and `close_output' functions are used;
	  MIF is generated always, unless --no-mif is specified;
	  if cvm output file is requested, `run_cvm_backend' is called after
	  mif is generated;
	  a separate function is used to print MIF to output file;
	(drv_ProcessFiles) use of `run_mif_backend' is updated.

	* options.c: added include of "backend/cvm_entry.h";
	`-S' option is distict from `--mif' option;
	new `--cvm' option is added to generate code for CVM machine.

2002-03-17  Alexander Chernov  <cher@ispras.ru>

	* options.c: 
	(drv_options) description of `--mif-stats' options is added.

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* entry.c:
	(main) call of `reuse_init_fp' added to switch 64-bit floating-point
	  precision on win32.

2002-02-04  Alexander Chernov  <cher@ispras.ru>

	* options.c:
	(drv_options) new option `--mif-load' which is opposite to
	  `--mif-no-load', which is made default.

/sources/c/frontend
-------------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* tokens.h: <reuse/c_value.h> is included instead of <ast/ttypes.h>.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* parser.y:
	(asm_specification) a new rule to handle `asm' expressions;
	(asm_arg_list_opt) a new rule;
	(asm_arg_list) a new rule;
	(asm_arg_spec) a new rule;
	(asm_reg_list_opt) a new rule;
	(asm_reg_list) a new rule;
	(asm_reg) a new rule.

	* scan2.c:
	(cscan2_GetToken2) a special handling of TOK___asm__ is commented
	  out.

	* tokens.c: `asm' is marked as plain keyword.

2002-03-11  Alexander Chernov  <cher@ispras.ru>

	* scoping.c: copyright notice is updated;
	(scope_SaveState) warning of assignment from `void*' type is
	  eliminated.

	* scan2.c:
	(cscan2_SaveState) eliminated warning of assignment from `void*' type.

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* tokens.h: copyright notice is updated;
	`pc_value_t' type name is used instead of `tpValue'.

	* tokens.c:
	(ctok_PrintOut) new function name `c_value_print' is used instead of
	  the `tValue_print'.

	* scan2.c:
	new type name `c_value_t' is used instead of the old `tValue';
	updated use of function, which prefixes now start from `c_value'.

	* scan.lex:
	new type name `c_value_t' is used instead of old `tValue'.

	* scan.h: copyright notice is updated;
	new type name `c_value_t' is used instead of `tValue'.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* parser.y:
	(primary_expression) no `ExprBracket' node is created for `(expr)'
	  construct, the subexpression pointer is rather passed up, thus
	  the parse tree never contains `ExprBracket' nodes now.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* parser.y: 
	(initializer) added support for empty initialization "{ }".

2002-02-17  Alexander Chernov  <cher@ispras.ru>

	* parser.y:
	(initializer) use of `m2Init1' and `m2Init2' constructors is updated
	  since their signatures are changed;
	(initializer_item) GNU-style initialization index is added into the
	  parse tree.

2002-02-16  Alexander Chernov  <cher@ispras.ru>

	* tokens.c: 
	(tokenName) added `typeof' token (GNUism).

	* scan2.c: copyright notice is updated;
	(cscan2_GetToken) `cparse_state' variable is not used, also
	  `parse_EOFRecovery' is disabled.

	* parser.y: 
	(cparse_state) this global variable is no longer defined;
	(restricted_actual_type_specifier) added alternative for `typeof';
	(actual_type_specifier) added alternative for `typeof';
	(typeof_specifier) a new rule to support `typeof(expr)' GNUism;
	(initializer_list) rule `initializer_item' is used;
	(initializer_item) a new rule to support named initialization of
	  arrays and structures, for example "int x[10] = { [5] 3 };" GNUism;
	(direct_label) added support for case ranges "case 1 ... 10" GNUism.

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* parser.y: 4 shift/reduce conflicts are expected;
	(jump_statement) removed the last alternative to eliminate
	  reduce/reduce conflict (in error recovery).

2002-02-07  Alexander Chernov  <cher@ispras.ru>

	* parser.y: 
	(cparse_Parse) `ctree_FixKRParLists' is called.

	* fixtree.h: copyright notice is updated;
	(ctree_FixKRParLists) prototype added.

	* fixtree.c: copyright notice is updated;
	(parse_StartFunction) `refs' array is updated when DirDeclr4 is
	  converted into DirDeclr5;
	(ctree_FixKRParLists) a new function, which checks function
	  declarations in all the parse tree.

/sources/c/mif
--------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* mif_entry.c: <string.h> is included;
	new global flags: `mif_inline_strings', `mif_float_incr',
	  `mif_ptr_incr', `mif_comp_incr', `mif_var_load';
	new options: `--mif-no-inline-strings', `--mif-inline-strings',
	  `--mif-no-float-incr', `--mif-float-incr', `--mif-no-ptr-incr',
	  `--mif-ptr-incr', `--mif-no-comp-incr', `--mif-comp-incr',
	  `--mif-var-load', `--mif-no-var-load'.

	* mif2.h: <reuse/c_value.h> is included instead of "ast/c_value.h";
	INCR2, DECR2 instructons are added;
	(struct s_mifelem_g) layout of structure is changed to accomodate
	  instruction codes >= 256.

	* mif2.c: (tagss) INCR2, DECR2 instructions are added;
	(class_names) `ATOM' class name is added.

	* generate_mif2.c:
	(emit___FUNCTION__) `--mif-no-inline-strings' option is supported;
	(EXPR_HANDLER(ExprIdent,VALUE)) `--mif-var-load' option is supported;
	(EXPR_HANDLER(ExprString,ANY)) `--mif-no-inline-strings' option is
	  supported;
	(OP_HANDLER(ANYARITH,ANY)) `--mif-var-load' option is supported;
	(OP_HANDLER(PTRARITH,LVALUE)) `c_operation_str' is used instead of
	  `teOperation_str';
	(emit_strings) a new function, which generates STRING instructions
	  for all the string literals in function body;
	(generate_function) `emit_strings' is called, if
	  `--mif-no-inline-strings' option is specified.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(EXPR_HANDLER(ExprAsm,VOID)) a new function, which handles `asm'
	  expressions;
	(expr_handler_arr_init) handler for ExprAsm is added.

	* mif2.c:
	(mif_new_atom) a new function, which allocates memory for an atom
	  and creates a new atom;
	(tagss) new instructions added: (atom), ATTRIB, ATTRLIST, ASM,
	  ASMPAR;
	(atomss) a new string table to output atoms;
	(mif_print_arg) `MIF_ATOM' element type is supported;
	(mifelem_class_map) new instructions ATOM, ATTRIB, ATTRLIST, ASM,
	  ASMPAR are added.

	* mif2.h:
	new MIF instructions: MIF_ATOM, MIF_ATTRIB, MIF_ATTRLIST, MIF_ASM,
	  MIF_ASMPAR;
	new enum, which lists all defined atoms;
	new mif element class MIF_CLASS_ATOM;
	(struct s_mifelem_a) a new structure to store atom-specific
	  information;
	(union s_mifelem) `a' is added for atom-specific information;
	(mif_new_atom) a new function, which allocates memory for a new
	  atom and returns it.

	* mif_entry.c: (mif_gate) pointer to mif_print function is added;
	(mif_entry) accepts two parameters: pointers to the input and the
	  output structures;
	  MIF is not printed to the output file;
	(mif_print) a new function to print the MIF to output file.

	* mif_entry.h:
	duplicated include guard is fixed to be __MIF_ENTRY_H__;
	added include of <stdio.h>;
	`mif_t' type is defined as opaque typedef;
	`tAST' type is defined as opaque typedef;
	(struct mif_mod_in) a new structure to pass arguments to the
	  mif generator;
	(struct mif_mod_out) a new structure to store the result of the
	  mif generator;
	(struct mif_gate) `init_func', `fini_func' accept no parameters;
	  `entry_func' accept the pointers to the input and output structures;
	  `print_func' a new function pointer to print the generated mif.

2002-03-17  Alexander Chernov  <cher@ispras.ru>

	* mif2.c:
	(struct s_mif_stats) a new structure to collect various statistical
	  information about MIF;
	(struct s_mif) field `instr_index' is added to assign serial numbers
	  to MIF elements;
	  field `alloc_list' is added to hold the list of allocated mifelems;
	  field `free_list' is added to hold the list of mifelems available
	  for reuse, currently is not used;
	  field `reg_alloc' is added to hold the current size of array of
	  register references - currently not used;
	  field `regs' the array of references to all the created registers
	  - currently not used;
	  field `stats' added to store various statistical information;
	(mif_alloc) a new function, which allocates a new mifelem. It keeps all
	  the allocated mifelems in `alloc_list', so the garbage collection
	  is possible;
	(mif_new_elem) uses `mif_alloc';
	(mif_new_name) uses `mif_alloc';
	(mif_new_reg) uses `mif_alloc';
	(mif_new_undef) uses `mif_alloc';
	(mif_new_instr_va) uses `mif_alloc';
	(mif_fix_instr_va) uses `mif_alloc';
	(mif_empty_instr) uses `mif_alloc';
	(mif_new_null) uses `mif_alloc';
	(mif_new_string) uses `mif_alloc';
	(mif_new_value) uses `mif_alloc';
	(mif_new_value_type) uses `mif_alloc';
	(mif_new_int_value) uses `mif_alloc';
	(mif_new_uint_value) uses `mif_alloc';
	(mif_new_false) uses `mif_alloc';
	(mif_new_true) uses `mif_alloc';
	(mif_resolve_undef_m) calls of `xfree' are commented out;
	(mif_pipehole_handle_nop_jumps_m) calls of `xfree' are commented out;
	(class_names) a new array to map MIF_CLASS_* constants to strings;
	(mif_class_to_string) a new function, which returns string for the
	  given MIF class tag;
	(mif_clear_visited_m) a new function, cleans up reference counter,
	  visited flag and serial number of all allocated items;
	(mif_assign_serial_m) a new function, which assigns serial number
	  to all mifelems, which are referenced;
	(find_unreferenced_mifelems_m) a new function, which finds in the
	  mifelems list unreferenced elements, also it collects memory
	  usage statistics;
	(count_elem_rec) a new function, which recursively traverses MIF
	  counting references and collecting element usage statistics;
	(mark_mifelem_list) a new function, which traverses mifelems list;
	(mif_mark_m) a new function, which calculates reference counters
	  for MIF, also it collects usage statistics;
	(mif_print_stats_m) a new function, which prints MIF statistics.

	* mif_entry.h: copyright notice is updated.

	* mif2.h: `MIF_CLASS_LAST' enumerated constant is added;
	(struct s_mifelem_g) `serial' field is added;
	(mif_class_to_string) a new function prototype;
	(mif_clear_visited_m) a new function prototype;
	(mif_assign_serial_m) a new function prototype;
	(mif_mark_m) a new function prototype;
	(mif_print_stats_m) a new function prototype.

	* mif_entry.c: minor indentation change in copyright notice.

2002-03-11  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	numerous warnings of assigment from `void*' type are eliminated.

2002-03-09  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(generate_variable) forward use of extern variables is supported, the
	  code uses `gen_data', if it's already set.

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(OP_HANDLER(SIZEOF,ANY)) forward variable name references are
	  supported, a new empty instruction is generated.

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(generate_function) `emit_assorted_types' and `emit_aggreg_offsets'
	  are called to process only CompStat of the function, not the
	  function tree node, because if the function tree node is given
	  to these function, they will follow Next pointer and process
	  all the remaing AST, which is probably not yet prepared for these
	  operations.

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* mif2.c:
	(struct s_mif) a new field `scope_list_list' is added to hold
	  the list of already generated scope lists;
	accesses to mifelem_t structure are updated in all the functions
	  according to the changes of this structure;
	(mif_c_to_type) a new function, which converts C type tag into
	  MIF type tag, it uses a static conversion table;
	(mif_c_to_value) a new function, which converts C type tag into
	  MIF value tag;
	(mif_type_to_value) a new function, which converts MIF type tag
	  into MIF value tag;
	(mif_value_to_type) a new function, which converts MIF value tag
	  into MIF type tag;
	(mif_to_c) a new function, which converts MIF value and type tags
	  int C type tag;
	(mif_new_string) a new function, which creates VSTRING MIF element;
	(mif_new_value) now accept parameter of type `c_value_t*', the
	  MIF value tag is determined by the parameter;
	(mif_new_value_type) a new function, which creates MIF type element
	  by C value structure;
	(mif_print_arg) handling of all MIF value elements is updated;
	(mif_get_scope_list) a new function, which returns the MIF scope
	  list from the list of already generated scope lists, or creates
	  a new one, if such does not yet exists;
	(mif_elem_class) a new function, which returns MIF element class by
	  its tag.

	* mif2.h:
	file "ast/c_value.h" is included, which contains definition for
	  C value type;
	new enumeration for MIF elements classes (MIF_CLASS_INSTR, etc);
	`struct s_mifelem' is completely reimplimented as union of structs;
	a separate structure is defined for each MIF element class;
	values are stored directly in this structure using `union s_cvalue';
	strings are stored as its length and its bytes instead of tStringRef;
	provisions for the future garbage collector are also added to
	  `union s_mifelem';
	new function prototypes `mif_c_to_type', `mif_c_to_value',
	  `mif_type_to_value', `mif_value_to_type', `mif_to_c' which map
	  different kind of tags (C type tags, MIF type tags, MIF value tags)
	  into each other;
	(mif_elem_class) new function prototype for function, which returns
	  MIF element class by its tag;
	(mif_new_value) now accepts `c_value_t', MIF value tag is determined
	  by this parameter;
	(mif_new_value_type) a new function, which creates MIF elem type
	  for the given c_value_t structure;
	(mif_new_string) a new function, which creates MIF_VSTRING element;
	(mif_get_scope_list) a new function, which gives out a reference
	  to scope list with the given list of scopes.

	* generate_mif2.c: `c_value_t' type is used instead `tValue';
	`c_value' prefix is used for functions, which operate with `c_value_t'
	  type (defined in ttypes.c);
	(type_ast2mif_map) this variable is removed, since conversion
	  functions are moved to `mif2.c' module;
	(mif_new_stringref) a new function, which creates MIF string
	  element from tStringRef parameter;
	(value2typetag) removed, superseded by `mif_c_to_type';
	(emit_type_declr) `mif_c_to_type' function is used;
	(emit___FUNCTION__) `mif_new_stringref' function is used;
	(EXPR_HANDLER(ExprString,ANY)) `mif_new_stringref' function is used;
	(EXPR_HANDLER(ExprConst,VALUE)) use of `mif_new_value' is updated;
	  `mif_new_value_type' is used;
	(EXPR_HANDLER(ExprConst,VOID)) use of `mif_new_value' is updated;
	  `mif_new_value_type' is used;
	(OP_HANDLER(LOGOR,VALUE)) access to instruction-specific fields
	  of mifelem_t is updated;
	(OP_HANDLER(LOGOR,TEST)) the same as above;
	(OP_HANDLER(LOGAND,VALUE)) the same as above;
	(OP_HANDLER(LOGAND,TEST)) the same as above;
	(OP_HANDLER(LOGNOT,VALUE)) the same as above;
	(EXPR_HANDLER(ExprTernary,VOID)) the same;
	(EXPR_HANDLER(ExprTernary,VALUE)) the same;
	(EXPR_HANDLER(ExprTernary,TEST)) the same;
	(emit_af_access) the same;
	(generate_local_initialization) `mif_new_stringref' is used;
	(generate_stmt_list) access to instruction-specific fields
	  of mifelem_t is updated;
	(emit_enum) use of `mif_new_value' is updated;
	(emit_initializers) use of `mif_new_value' is updated;
	  `mif_new_stringref' is used;
	(scope_list_compare) a new function, which compares MIF scope
	  list with sema scope_list;
	(scope_list_add) a new function, which generates new MIF scope list;
	(emit_scope_list) `mif_get_scope_list' is used;
	  definition of `struct mifelem_list' is removed;
	(type_ast2mif_map_init) removed as no longer used;
	(mif_generate_init_module) initialization of `type_ast2mif_map'
	  is removed.

2002-03-07  Alexander Chernov  <cher@ispras.ru>

	* mif2.h:
	new mifelem_t types TCLONG, TCULONG, VCLONG, VCULONG are added.

	* mif2.c:
	(tagss) new mifelem_t types TCLONG, TCULONG, VCLONG, VCULONG are added;
	(mif_print_arg) the mentioned above types are handled.

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	functions for `mif_t' type now have `mif_' prefix instead of `mif2_';
	parameter of type mif_t is removed from all the functions, since
	  mif_t functions no longer accept explicif MIF pointer;

	* mif2.c:
	(struct s_mifelem_list) this is new name for what was `struct
	  mif_type_list';
	(struct s_mif) moved here from the `mif2.h' file;
	  the structure now contains all type lists, previously was in
	  separate static variables;
	(mif_current) new global variable is defined. The value of this
	  variable is used as MIF to operate over by the most functions;
	`mif2_' function name prefix is replaced with `mif_' prefix;
	parameter of type `mif_t' denoting the MIF to operate over is
	  removed, the value of global variable `mif_current' is used
	  instead;
	the few functions, which do accept mif_t parameter now have `_m'
	  suffix;
	(mif_resolve_undef) a new function, just a stub to
	  `mif_resolve_undef_m';
	(mtl_add) the name of mifelem_t list type is changed;
	(mif_get_basic_type) the array of mifelem_t for primitive types
	  is now stored in s_mif structure;
	(mif_type1_list) the name of mifelem_t list type is changed;
	(mif_get_const_type) the list of already made elements is stored
	  in s_mif structure;
	(mif_get_volatile_type) the same as above;
	(mif_get_ptr_type) the same as above;
	(mif_get_array_type) the same as above;
	(mif_get_oarray_type) the same as above;
	(mif_get_tfunc_type) the same as above;
	(mif_get_offset) the same as above;
	(mif_get_string) the same as above;
	(mif_create_m,mif_create) new functions, which creates a new
	  empty MIF.

	* mif2.h:
	definition of `struct s_mif' is moved to mif2.c, so `mif_t' is now
	  an opaque type;
	massive function renaming: `mif2_' prefix is replaced with `mif_'
	  prefix;
	new variable `mif_current' is declared as extern;
	(mif_create,mif_create_m) new functions are prototyped;
	the mif parameter (of type `mif_t') is removed from most functions,
	  these functions use the value stored in `mif_current';
	the function, which do accept mif_t parameter now have `_m' suffix.

	* generate_mif2.h: copyright notice is updated;
	mif_t type is declared;
	`mif2_' prefix of function names is replaced with `mif_' prefix.

	* mif_entry.c:
	(mif_entry) updates due to massive function renaming: `mif2_' prefix
	  is replaced with `mif_' prefix;
	  the variable, which holds the MIF is now called mif and has the
	  proper type.

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c, mif2.c:
	changed usage of `mifelem_t' and `mif_t' types.

	* mif2.h:
	`mifelem_t' type is defined as pointer to `struct s_mifelem' instead
	  of being alias to this structure, so in the code just `mifelem_t'
	  type is used instead of `mifelem_t*'.
	`mif_t' type is defined in the same manner, as mifelem_t.

2002-03-05  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(emit_local_displays) enumerated constants are ignored in local
	  displays.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(get_sema_def) a new helper function to get sema_def node by to tree
	  node;
	(EXPR_HANDLER(ExprIdent,VALUE)) use before definition cases are
	  supported;
	(EXPR_HANDLER(ExprIdent,LVALUE)) the same as above;
	(EXPR_HANDLER(ExprIdent,TEST)) the same as above;
	(EXPR_HANDLER(ExprIdent,VOID)) the same as above;
	(EXPR_HANDLER(ExprConst,VALUE)) $null literals are typed;
	(EXPR_HANDLER(ExprConst,VOID)) $null literals are typed;
	(OP_HANDLER(SIZEOF,ANY)) VSIZE instruction is generated in case of
	  variable names;
	(generate_local_initialization) local typedefs are skipped;
	(generate_stmt_list) handling of CompStat is fixed;
	  DoStat is fixed;
	  ForStat is fixed;
	(emit_local_types) renamed from `emit_scope_types';
	  new parameter `no_rec' is added;
	  typedefs are handled;
	  calls itself recursively, if `no_rec' is not set;
	(emit_local_displays) renamed from `emit_scope_display';
	  new parameter `no_rec' is added;
	  static variables and typedefs are skipped;
	  calls itself recursively, if `no_rec' is not set;
	(emit_initializers) POINTER type is handled properly (typed $null
	  is generated);
	(emit_var) parameter `in' is added, which is passed to
	  `mif2_fix_instr';
	  `mif2_fix_instr' is used instead of `mif2_new_instr';
	(generate_variable) source position for system typedefs is generated;
	  use of `emit_var' is fixed;
	(emit_scope) removed as separated into two independent functions:
	  `emit_local_types', `emit_local_displays';
	(emit_funcdef_types) `emit_local_types', `emit_local_displays' are
	  used;
	(emit_assorted_types) ExprConst node type is handled, types for
	  $null pointers are generated;
	(emit_local_compound_inits) use of `emit_var' is fixed;
	(emit_static_vars) use of `emit_var' is fixed;
	(generate_function) `emit_local_types', `emit_local_displays' are
	  used instead of `emit_scope';
	(type_ast2mif_map_init) C_SCHAR is supported.

	* mif2.h: TSCHAR, VSCHAR mif elements are added;
	(mif2_new_null) a new prototype.

	* mif2.c: (mifval_table) `TSCHAR' type is handled;
	(mif2_new_null) a new function to create mif element corresponding
	  to $null literal;
	(mif2_new_value) aborts, if TPOINTER is passed;
	(tagss) `TSCHAR', `VSCHAR' tags are added;
	(mif2_print_arg) `TSCHAR', `VSCHAR' are handled;
	  $null literal is printed with its type.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(emit___FUNCTION__) a new function, which is generates code for
	  __FUNCTION__ built-in variable;
	(EXPR_HANDLER(ExprIdent,*)) __FUNCTION__ built-in variable is
	  suported.

	* mif2.c: 
	(requires_label) `CONST', `VOLATILE' instructions are added.

	* mif2.c:
	(mif2_pipehole_handle_nop_jumps) jump instructions with display lists
	  are supported properly;
	(mif2_pipehole_handle_cond_jumps) jump instructions with display
	  lists are supported properly.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(add_system_pos) a new functions, which generates POS instruction
	  for object, which has position from the file from the list
	  of system files;
	(emit_enum) `add_system_pos' is used;
	(emit_aggregate) `add_system_pos' is used;
	(generate_variable) `add_system_pos' is used;
	(generate_function_proto) `add_system_pos' is used.

	* mif2.c: 
	(tagss) instructions `POS', `STRING' are added;
	(mif2_get_string) a new function, which keeps the list of generated
	  `STRING' instructions and thus eliminates duplicates.

	* mif2.h: 
	(mifnodekind_t) new instructions `STRING', `POS' are added;
	(mif2_get_string) new prototype.

2002-02-27  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c: 
	(emit_test_jumps) `mif2_addnn' functions are used;
	(get_nested_compound_scope) the function returns `struct sema_scope';
	(get_upper_used_scope) a new function, which returns a reference to
	  upper scope, which has `use_instr' field set;
	(generate_stmt_list) handling of nested scopes is reworked;
	(generate_function) function's local variable display reference is
	  added to FUNC instruction instead of creating a separate NEWDISP.

	* mif2.c:
	(mif2_add) the function returns reference to newly added MIF element;
	(mif2_addn) a new function, which creates a new MIF element and adds
	  it to MIF;
	(mif2_addnl) a new function, which additionally to `mif2_addn'
	  generates a new label name;
	(mif2_addnn) a new function, which always sets label number to 0, and
	  thus does not accept `label' parameter;
	(mif2_new_instr_va) a new function, which accepts va_list of instr.
	  arguments;
	(mif2_new_instr) `mif2_new_instr_va' is used;
	(mif2_fix_instr_va) a new function, which accepts va_list of instr.
	  arguments;
	(mif2_fix_instr) `mif2_fix_instr_va' is used.

	* mif2.h:
	(mif2_add) the function returns reference to newly added MIF element;
	(mif2_addn) new prototype;
	(mif2_addnl) new prototype;
	(mif2_addnn) new prototype.

2002-02-25  Alexander Chernov  <cher@ispras.ru>

	* mif2.h:
	new instructions: IFIELD, IBFIELD, PIFIELD, PIBFIELD, PPIFIELD,
	  PPIBFIELD, AIFIELD, PAIFIELD, PPAIFIELD, MIFIELD, MIBFIELD,
	  PMIFIELD, PMIBFIELD, PPMIFIELD, PPMIBFIELD, IFINCR, IFDECR,
	  PIFINCR, PIFDECR, PPIFINCR, PPIFDECR, IBFINCR, IBFDECR,
	  PIBFINCR, PIBFDECR, PPIBFINCR, PPIBFDECR.

	* mif2.c: 
	(tagss) many new instructions added.

	* generate_mif2.c:
	(OP_HANDLER(ANYPREOP,ANY)) PINCR/PDECR instructions now have an extra
	  parameter - type of the incremented value;
	(OP_HANDLER(ANYPOSTOP,ANY)) PINCR/PDECR instructions now have an extra
	  parameter;
	(OP_HANDLER(DEREF, LVALUE)) bug in pointer type handling fixed;
	(emit_af_access) almost complete rewrite.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(emit_type_declr) if `gen_data' is already calculated, it is returned
	  instead of recalculating;
	  forward ENUM type generation is allowed;
	(EXPR_HANDLER(ExprString,ANY)) use of `mif2_new_value' is updated;
	(EXPR_HANDLER(ExprConst,VALUE)) use of `mif2_new_value' is updated;
	(EXPR_HANDLER(ExprConst,VOID)) use of `mif2_new_value' is updated;
	(OP_HANDLER(ADDRESS, ANY)) `LVALUE' context is supported for
	  TO_AFACCESS operation;
	(EXPR_HANDLER(ExprBinary,ANY)) `sema_get_expr_opcode' is used;
	(EXPR_HANDLER(ExprUnary,ANY)) `sema_get_expr_opcode' is used;
	(emit_af_list) `tree_expr' is used instead of `expr' field;
	(emit_af_access) `sema_get_expr_opcode' is used;
	  ExprBracket expression node type is handled;
	(EXPR_HANDLER(ExprCast,ANY)) `LVALUE' context is supported for
	  TO_AFACCESS operation;
	(generate_local_initialization) static variables are skipped;
	  use of `mif2_new_value' is updated;
	  compound initializers are handled;
	(emit_enum) use of `mif2_new_value' is updated;
	(emit_aggregate) opaque type is generated for structures and unions
	  without field specified;
	(emit_assorted_types) a new function to generate misc. types to
	  be used in initializers;
	(emit_initializers) a new function to generate code for static
	  initializers;
	(emit_var) a new function to generate a variable definition, possibly
	  initialized;
	(generate_variable) `emit_var' function is used;
	(emit_assorted_types) `sema_get_expr_opcode' is used;
	(emit_switch_table) use of `mif2_new_value' is updated;
	(generate_static_offsets) `tree_expr' field is used instead of `tree';
	(emit_local_compound_inits) a new function to emit initializers for
	  local variables;
	(emit_static_vars) `emit_var' function is used;
	(generate_function) `emit_local_compound_inits' is used;
	(expr_handler_arr_init) ExprCast is handled in LVALUE context;
	  ADDRESS operation is handled in lvalue context.

	* mif2.c: 
	(requires_label) OPAQUE type is added.

2002-02-17  Alexander Chernov  <cher@ispras.ru>

	* mif2.c, mif2.h: 
	(mif2_new_value) prototype is chaned, the first parameter now is
	  instruction tag instead of mifelem.

2002-02-16  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(struct mifelem_list) a new structure, which is used to keep all the
	  emitted displaylist to avoid generating duplicates;
	(emit_scope_list) the list of all the emitted display lists is
	  maintained in order to avoid generating duplicate display lists;
	(emit_switch_table) two passes are performed over the list of all the
	  case labels before `SWITEM' instruction generation in order to
	  handle case ranges correctly.

	* mif2.c: 
	(requires_label) OARRAY and ARRAY instructions added.

2002-02-08  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c: 
	(MANY_FUNCTIONS) use of `mif2_new_reg_alloc' is updated;
	(EXPR_HANDLER(ExprConst,VALUE)) `mif2_new_reg_alloc' is used instead
	  of `mif2_new_reg';
	(EXPR_HANDLER(ExprConst,VOID)) `mif2_new_reg_alloc' is used instead
	  of `mif2_new_reg';
	(OP_HANDLER(ADDRESS, ANY)) the result type of address operation is
	  passed to argument generation in parameter `e2';
	  ADDR instruction now has 2 parameters;
	  the result register type is set correctly;
	(aflist_get_type) a new function which returns the target type of the
	  array/field access chain;
	(emit_af_list) return type changed to `mifelem_t *', the function
	  returns the target type of the array/field access chain;
	(emit_af_access) the result register type is set correctly;
	(emit_assorted_afaccess_list_types) a new function to generate types,
	  which might be used in array/field access operations;
	(emit_assorted_types) `emit_assorted_afaccess_list_types' is used
	  for ExprField and ExprArray nodes;
	  switch logic is simplified.

	* mif2.c: 
	(mif2_new_reg) defined as static function;
	  parameter `type' is added to set the type of the pseudoregister;
	(mif2_new_reg_alloc) parameter `type' is added to set the type of
	  the pseudoregister;
	(mif2_set_reg_type) a new function to set the type of pseudoregister;
	(mif2_print_arg) a new function to print mifelem_t as an argument
	  of an instruction;
	(mif2_print) type of the pseudoregister is set to 0 in case of
	  function;
	  `mif2_print_arg' is used.

	* mif2.h: 
	(mif2_new_reg) prototype removed;
	(mif2_new_reg_alloc) added a parameter `type' to set the type of
	  the pseudoregister;
	(mif2_set_reg_type) new function prototype.

2002-02-05  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(emit_type_declr) `TANYARGS' pseudodisplay is used as parameter display
	  for K&R function types (`f()');
	(EXPR_HANDLER(ExprCall,ANY)) `TANYARGS' pseudodisplay is used when
	  K&R function is called;
	(emit_funcdef_types) display is marked variadic only for FVAR
	  functions;
	(generate_function_proto) `TANYARGS' pseudodisplay is used as parameter
	  display for K&R function protytypes;
	(generate_function) `FUNC' instruction now has 5 parameters
	  instead of 4; 3rd parameter is a "caller display". For example,
	  if K&R function is called, its caller display is always `TANYARGS',
	  but since the function might have local variables, it also might
	  have own "parameter  display", which is 4th parameter.

	* mif2.c: (tagss) `TANYARGS' instruction added;
	(mif2_print) `TANYARGS' instruction handled;
	(mif2_get_basic_type) `TANYARGS' instruction handled.

	* mif2.h:
	new psedotype `TANYARGS' added, which is used for K&R function
	parameter displays.

2002-02-04  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	new LVALUE flag `TO_DONE' which is set by the child, when lvalue
	  expression generation is completed in lvalue (for example, for
	  increment operations);
	new LVALUE flag `TO_OPASSIGN_2' which is set by the parent on the
	  stage 2 (READ) of operation assignment operation;
	new LVALUE flags `TO_POSTINCR', `TO_POSTDECR' for the corresponding
	  increment/decrement operations;
	LVALUE flags `TO_ARRAY', `TO_FIELD' are removed;
	new LVALUE flag `TO_AFACCESS' for unified array/field access;
	(debug_print_sema) removed;
	(EXPR_HANDLER(ExprIdent,LVALUE)) updated for the new array/field
	  code generation model;
	(EXPR_HANDLER(ExprConst,TEST)) unreachable code is removed;
	(OP_HANDLER(ANYOPASSIGN,ANY)) three-stage code generation model is
	  implemented: 1 stage (TO_OPASSIGN) - LVALUE is evaluated and write
	  instruction is generated, but not added to mif;
	  2 stage (TO_OPASSIGN_2) - read instruction is generated to mif,
	  operation is generated to mif, 3 stage (TO_ASSIGN_2) - write
	  instruction added to mif;
	(OP_HANDLER(PTRARITH,LVALUE)) assertion statement is updated;
	(OP_HANDLER(ANYPREOP,ANY)) `TO_DONE' is used instead of `TO_COMPLEX';
	(OP_HANDLER(ANYPOSTOP,ANY)) reworked significantly;
	(OP_HANDLER(DEREF, LVALUE)) updated for the new array/field access
	  model;
	(OP_HANDLER(ADDRESS, ANY)) updated for the new array/field access
	  model;
	(emit_af_list) a new function to emit offset calculation code for
	  array/field access;
	(emit_af_access) a new function to emit array/field access;
	(EXPR_HANDLER(ExprArray,LVALUE)) uses `emit_af_access';
	(EXPR_HANDLER(ExprArray,ANY)) uses `emit_af_access';
	(EXPR_HANDLER(ExprCall,ANY)) assert statement is updated;
	(gen_fieldref_lvalue) removed;
	(gen_field_lvalue) removed;
	(EXPR_HANDLER(ExprField,LVALUE)) uses `emit_af_access';
	(EXPR_HANDLER(ExprField,ANY)) uses `emit_af_access';
	(generate_stmt_list) return expression is not generated, if return
	  variable is not set;
	(generate_static_offsets) a new function to emit static offsets;
	(emit_aggreg_offsets) uses `generate_static_offsets'.

	* mif_entry.c: `--mif-no-load' option is default;
	added `--mif-load' option to enable generation of LOAD instructions.

2002-02-01  Alexander Chernov  <cher@ispras.ru>

	* generate_mif2.c:
	(EXPR_HANDLER(ExprConst,TEST)) expression is folded. Depending on
	  the constant's value either jump to true, or jump to false is
	  generated;
	(generate_goto) reference to the list of scopes is generated;
	(get_nested_compound_scope) a new function, which returns the
	  reference to MIF display for CompStat tree node;
	(generate_stmt_list) a new parameter `cont_flag' is added, which
	  is set to 1, if the function is called to generate the loop body;
	  `return' may quit variable scopes;
	  `break' may quit variable scopes;
	  `continue' may quit variable scopes;
	  display creation and deletion is generated for compound statement,
	  if it defines block variables;
	  `while', `for', `do while' support block variables in their
	  statements;
	(emit_scope_list) a new function, which generates MIF scope list;
	(emit_switch_table) jumps into nested variable scopes are supported;
	(emit_scope_lists) a new function to generate all MIF scope lists
	  in the scope;
	(generate_function) scope lists are generated for gotos in the
	  function;
	  use of `generate_stmt_list' is updated.

/sources/c/sema
---------------

2002-04-16  Alexander Chernov  <cher@ispras.ru>

	* sema_entry.h: copyright notice is updated;
	added enumerated constants `OPTION_SEMA_*' for command line option
	  codes.

	* sema_entry.c: copyright notice is updated;
	global flag `sema_flag_float_arith' is added;
	description of `--sema-float-arith' option is added;
	description of `--sema-no-float-arith' option is added.

	* sema_an.c:
	(sema_analyze) if `sema_flag_float_arith' is set, `float' arithmetic is
	  enabled;
	(analyze_field_definition) `c_builtin_str' function name is used
	  instead of `teBuiltin_str';
	(make_kr_params) the same as above;
	(sema_get_expr_opcode) the same as above;
	(analyze_binop) the same as above;
	(analyze_unop) if `sema_flag_float_arith' is set, `float' arithmetic is
	  enabled;
	(print_builtin)  `c_builtin_str' function name is used instead of
	  `teBuiltin_str'.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(sema_ptr_offset_table) information about new node types `ExprAsm',
	  `AsmArgs', `NoAsmArg', `AsmArg' are added;
	(analyze_asmargs) a new function, which checks input/output arguments
	  of `asm' expression;
	(analyze_asm) a new function, which handles `asm' expressions;
	(analyze_expr) `ExprAsm' node type is handled;
	(is_static_init_expr) `ExprAsm' node type is handled.

2002-03-11  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(ALLOC) macro is redefined to eliminate `assignment from void *'
	  warnings for GCC and RCC compilers (typeof is used);
	(sema_analyze) local variable `global' is added to hold the
	  reference to the global scope;
	 `TranslUnit' field's `Sema' pointer now contains `semainfo_t'
	  reference instead of direct `struct sema_scope' reference;
	(sema_get_sema_ptr) `ptr' local variable now has `void*' type;
	(sema_put_ident) `tree' parameter now has type `tCTree';
	  cast to `void*' type in assignment to `ppos' field is removed;
	(sema_put_ident2) `tree' parameter now has type `tCTree';
	(make_params) `vppos' field is renamed to `ppos' field;
	(analyze_string) explicit cast added in `alloca' call;
	(analyze_labels) `vppos' field is renamed to `ppos' field;
	(analyze_switch) `struct switem' is now called `struct sema_switem';
	  `vppos' field is renamed to `ppos' field.

	* ctree_fold.c:
	(ALLOC) macro is redefined to eliminate `assignment from void *'
	  warnings for GCC and RCC compilers (typeof is used);
	(sema_fold_some_operations) explicit cast from `void*' is added.

	* sema_data.c:
	numerous warnings of assignment from `void*' type are fixed.

	* sema_data.h:
	(struct s_params) `ppos' field now has type `tPosition*';
	(struct sema_def) `tree' field now has type `tCTree';
	  `value' field now has type `c_value_t*';
	  `ppos' field now has type `tPosition*';
	(struct sema_switem) `vppos' field is renamed to `ppos' field;
	  `ppos' field now has type `tPosition*';
	  `tree' type now has type `tCTree';
	(struct sema_scope) `pos' field is renamed to `ppos' field;
	  `ppos' field now has type `tPosition*';
	definition of `semainfo_t' type is guarded by RCC_SEMAINFO_T_DEFINED
	  macro;
	(struct s_afaccess) `tree' field now has `tCTree' type;
	  `static_offset' now has `mifelem_t' type;
	  `gen_type' now has mifelem_t' type;
	definition of `afaccess_t' type is guarded by RCC_AFACCESS_T_DEFINED
	  macro;
	(struct sema_init) `tree' field now has `tCTree' type.

2002-03-09  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(copy_to_string_buf) function now returns int -- the position where the
	  currently appended string ends;
	  strings are concatenated in the reverse order to that was before
	  since that order was incorrect (but why?).

2002-03-08  Alexander Chernov  <cher@ispras.ru>

	* sema_an.h: copyright notice is updated.

	* sema_func.h:
	prototype of `sema_get_value_type' is updated as struct name for C
	  values is changed.

	* sema_data.h:
	`struct s_c_value' type name is used of `struct tValue'.

	* ctree_fold.h:
	prototype of ctree_fold is updated as struct name for C values is
	  changed.

	* sema_an.c, ctree_fold.c:
	new `c_value_t' type name is used instead of the old `tValue';
	functions with previx `tValue' are renamed as functions with
	  prefix `c_value', so their use is updated.

2002-03-06  Alexander Chernov  <cher@ispras.ru>

	* sema_data.h: all `gen_data' fields now have `mifelem_t' type.

	* ctree_fold.c: 
	(ctree_fold) unary `~' operation is supported.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(analyze_string) character string literals now have type `char*'
	  to eliminate lots of warnings about qualifier discards;
	(analyze___FUNCTION__) the same, as above.

	* sema_an.c: 
	(sema_is_character_type) `C_SCHAR' type is handled;
	(sema_get_base_type_align) `C_SCHAR' type is handled;
	(match_prototype) a new parameter `is_func' added;
	  K&R function definition is accepted against ANSI function prototype,
	  if the number and type of parameters match;
	(make_integral) `C_SCHAR' type is supported;
	(make_kr_params) parameter types are not promoted to int or double
	  even if a warning is printed;
	(base_type_sizes) `C_SCHAR' type is supported;
	(make_cast_node) `C_SCHAR' type is supported;
	(analyze_string) character literal has type `char const *';
	(analyze___FUNCTION__) character literal has type `char const *';
	(analyze_function) `match_prototype' use is updated;
	(analyze_local_declaration) handling of typedef declarations is fixed.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* sema_func.h: 
	(is___FUNCTION__) prototype added.

	* sema_an.c: removed definition of __FUNCTION__ to empty macro;
	(analyze___FUNCTION__) a new function to analyze use of __FUNCTION__
	  built-in variable;
	(analyze_expr) __FUNCTION__ built-in is supported;
	(is___FUNCTION__) a new function, which returns 1, if the given ident
	  if `__FUNCTION__';
	(put_builtin_prototypes) `__FUNCTION__' is added to identifier table.

	* ctree_fold.c:
	(try_fold_cast) __FUNCTION__ built-in variable is supported.

2002-02-27  Alexander Chernov  <cher@ispras.ru>

	* sema_data.h:
	(struct sema_scope) new field `use_instr' which is used by the code
	  generator to store the place, where this display is created using
	  `NEWDISP' instruction.

	* sema_an.c:
	(analyze_local_declaration) aggregate variable initialization via
	  assignment is supported.

2002-02-25  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(analyze_enum)  parameter `base' is added, which is the base type for
	  this enumerated type;
	  if `base' parameter is specified, best type is not guessed;
	(make_integral) a new function, which constructs arithmetic typeinfo
	  taking various flags;
	(make_declspec) a base type might be provided for an enumerated type,
	  for example, "int enum a { int c1 };";
	  `make_integral' function is used.

2002-02-22  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c: (UNSUPPORTED_FEATURE) macro is removed;
	(sema_get_base_type_align) a new function;
	(sema_get_type_align) a new function;
	(sema_to_next_align) a new function;
	(sema_are_types_compatible) a special compatibility table is used
	  for built-in types;
	(sema_types_compatible_no_CV) a special compatibility table is used
	  for built-in arithmetic types;
	(analyze_enum) size and alignment of the type are stored in
	  the sema_def structure of the type;
	(analyze_struct) size and alignment of structure is calculated and
	  stored in the sema_def structure of the type;
	(sema_get_type_size) `size' field of the sema_def structure is used;
	(are_comparable_pointers) qualifiers are ignored in type comparison;
	(analyze_binop) subexpressions in "," (comma) operations are
	  analyzed in VOID context;
	(analyze_ternary) if "pointer type mismatch" warning is issued, both
	  pointers are casted to "void*";
	  if two pointers have different types, the second is casted to the
	  type of the first;
	  if one argument is pointer, but the second is 0, no warning is
	  given.

	* sema_data.c: 
	(ti_create_void_pointer) new function.

	* sema_data.h:
	(struct sema_def) new field `size' to store size of object or type;
	  new field `align' to store the align for object or type;
	(ti_create_void_pointer) new function prototype.

	* sema_func.h: 
	(sema_get_base_type_align) new function prototype;
	(sema_get_type_align) new function prototype;
	(sema_to_next_align) new function prototype.

	* ctree_fold.c: <stdlib.h> header included;
	(ctree_fold) `ExprSizeof' node type is handled.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	added definition of __FUNCTION__ as macro, which is used in some
	  macros;
	(sema_SSC_to_string) string for `SSC_GLOBAL' is changed;
	  `SSC_COMMON' is removed.
	(sema_types_compatible_no_CV) a new function, which checks types
	  compatibility disregarding const and volatile qualifiers;
	(match_prototype) if prototype declared as `f(void)', but the
	  function is `f()', the function is also declared as `f(void)';
	(analyze_enum) enumeration type is set to `int' when the type
	  is added, this is needed to handle constructions like
	  `enum { a, b = a };'. The current solution is bad, though;
	(make_kr_params) parameters are marked as STI_LVALUE and STI_ADDRESS;
	(make_params) `register' storage class is ignored in parameters, and
	  warning is printed;
	(sema_get_type_size) is defined as non-static function;
	(sema_get_expr_opcode) a new function, which extracts operation code
	  from ExprBinary, ExprUnary and ExprField nodes;
	(analyze_arithmetic_opassign) `sema_get_expr_opcode' is used;
	(analyze_binop) `sema_get_expr_opcode' is used;
	  pointer substraction is disallowed for function pointers;
	  if two pointers substracted have different types, typecast is
	  inserted;
	(sema_is_postfix_unop) `sema_get_expr_opcode' is used;
	(analyze_unop) `sema_get_expr_opcode' is used;
	(analyze_array) `tree_expr' field name is used instead of `expr';
	(analyze_field) `sema_get_expr_opcode' is used;
	  `tree_expr' field name is used instead of `expr';
	(analyze_labels) case expression is analyzed before being folded;
	(analyze_switch) `struct switem' typename is used instead of
	  `struct swlab';
	(analyze_function) STI_ADDRESS bit is set for functions;
	(count_array_size) removed as no longer used;
	(analyze_local_declaration) typedefs cannot be initialized;
	  compound initializers are supported;
	(is_static_init_expr) returns 1, if the expression can be used
	  in static initializer;
	(analyze_global_init_assign) a new function, which handles simple
	  global initializations;
	(analyze_global_init_array) a new function, which handles array type
	  initialization;
	(analyze_global_init_struct) a new function, which handles structure
	  type initialization;
	(analyze_global_init) a new function, which handles global
	  initialization;
	(analyze_global_declaration) `typedef's cannot be initialized;
	  redefinition checks are changed to conform to C rules;
	  initializers are handled.

	* sema_func.h: added SEMA_NO_SIZE constant definition;
	added prototype of `sema_get_type_size'.

	* sema_data.h: added forward declaration of all structures defined;
	`SSC_COMMON' storage class is removed;
	(struct sema_def) `init' field has the `struct sema_init' type;
	  added another code generation data pointer `gen_data2', used
	  for compound initialization of local variables;
	(struct s_afaccess) `expr' field is renamed to `tree_expr';
	(struct sema_init) a new structure to store initializers.

	* ctree_fold.c: 
	(ctree_fold) invalid handling of binary operations is fixed;
	  `sizeof' unary operation is handled properly;
	  `ExprBracket' expression node is handled;
	  `ExprCast' expression node is handled;
	(try_fold_cast) casts from character string literals to any
	  character pointer types are handled and eliminated.

2002-02-17  Alexander Chernov  <cher@ispras.ru>

	* ctree_fold.c:
	(sema_fold_some_operations) handing of `Init1' node type is updated,
	  as node signature is changed.

	* sema_data.h:
	(struct sema_def) field `init' is added, which holds the initializer
	  tree node.

	* sema_func.h: 
	(sema_get_expr_opcode) the prototype added.

2002-02-16  Alexander Chernov  <cher@ispras.ru>

	* sema_data.h:
	(struct sema_switem) `gnext' field is added to support case ranges.

	* sema_an.c: 
	(sema_ptr_offset_table) added description of TypeTypeof;
	(analyze_field_definition) array checking is relaxed a bit to allow
	  arrays of size 0;
	(make_declspec) `TypeTypeof' tree node type is supported;
	(analyze_labels) case ranges "case 1 ... 10:" are supported;
	(analyze_switch) scope lists are calculated for each case label.

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(simple_sort) is compiled only if __MSVCRT__ symbol is defined.

2002-02-10  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(simple_sort) a new function, which sorts the given array. This
	  function is used on Win32 platform, since the standard (MSVCRT)
	  function `qsort' do not perform _stable_ sort;
	(analyze_switch) `simple_sort' is used on win32 platform.

2002-02-08  Alexander Chernov  <cher@ispras.ru>

	* sema_data.h:
	(struct s_afaccess) new field `gen_type' added, which is used to
	  store a reference to the type of the afaccess operation.

2002-02-07  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(analyze_field_definition) use of `make_typeinfo' is fixed;
	(make_kr_params) completely rewritten to support KR functions
	  correctly;
	(make_params) use of `make_typeinfo' is fixed;
	(make_dirdeclr) a new parameter added `pkr_par' which is a pointer
	  to tree reference, where KR parameter declarations are stored;
	(make_declr) a new parameter added `pkr_par';
	(make_typeinfo) a new parameter `pkr_par' added;
	(analyze_cast) use of `make_typeinfo' is fixed;
	(analyze_sizeof) use of `make_typeinfo' is fixed;
	(analyze_va_arg) use of `make_typeinfo' is fixed;
	(analyze_function) K&R function definitions are supported;
	(analyze_local_declaration) use of `make_typeinfo' is fixed;
	(analyze_declarations) use of `make_typeinfo' is fixed;
	(analyze_global_declaration) use of `make_typeinfo' is fixed;
	(analyze_global_declarations) use of `make_typeinfo' is fixed.

2002-02-04  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c:
	(analyze_expr) a new parameter `pafacc' added to calculate
	  array/field access chains;
	(many functions) uses of `analyze_expr' are updated;
	(analyze_array) a new parameter `pafacc' added;
	  array/field access chains are generated;
	(analyze_field) a new parameter `pafacc' added;
	  array/field access chains are generated;
	(analyze_return) goto scopes information is generated in warning
	  cases.

	* sema_data.h:
	(enum s_aftag) a new type to be used as tag in array/field access
	  chains;
	(struct s_afaccess) a new structure for array/field access chains;
	(afaccess_t) a new typedef.

2002-02-01  Alexander Chernov  <cher@ispras.ru>

	* sema_an.c: (adv_ident_get) function is removed;
	(myidchar) moved down to the place, where used;
	(analyze_field_definition) if bitfield exceeds 64 bits, its size is
	  truncated to 64 bits and a warning is issued;
	  if bitfield width exceeds the width of its type, its type is
	  changed to be wide enough, and a warning is issued;
	(inv_unop) a spelling fix;
	(analyze_field) address taking operation cannot be applied to
	  bitfields;
	(build_scope_list) a new function, which takes two scopes and
	  elaborates the list of scopes to exit and the list of scopes to
	  enter to jump from one scope to another;
	(finalize_gotos) scope lists are calculated for all `goto' operators;
	(analyze_goto) use of `sinfo_create_goto' is updated;
	  goto added to the list of all goto operators of the function scope;
	(struct scopes_info) a new structure, which contains the scopes for
	  return, continue and break statements;
	(analyze_return) a new parameter `jmp_scopes' is added;
	  scope list is calculated;
	  return statement is added to the list of all control transfer
	  statements of the function;
	(analyze_break) a new function to analyze break statement;
	(analyze_continue) a new function to analyze continue statement;
	(analyze_switch) a new parameter `jmp_scopes' added;
	(analyze_stmt_list) two new parameters added: `jmp_scopes' and
	  `cont_flag';
	  use of `analyze_return' is updated;
	  compound statement may update `jmp_scopes' for subtrees;
	  `while', `do while', `for' change `jmp_scopes' for subtrees;
	  unreachable code in `switch' handling is removed;
	  `break', `continue' statements are handled;
	(analyze_function) use of `analyze_stmt_list' is updated;
	(analyze_local_declaration) address of `register' variables cannot be
	  taken;
	(analyze_declarations) inner blocks with variable definitions are
	  now properly supported;
	(print_deflist) `ident_get' is used instead of `adv_ident_get'.

	* sema_data.c:
	(sema_add_to_gotos) a new function, which adds a reference to the
	  list of gotos of the scope;
	(sinfo_create_goto) two parameters `use_scope' and `scopes' added
	  to set the corresponding fields.

	* sema_data.h:
	(struct sema_switem) a new field `scopes' added to contain the
	  list of scopes to create;
	  a new field `gen_scope_list' to contain the reference to the
	  generated scope list;
	(struct sema_list) a new structure - generic list;
	(struct sema_scope) a new field `gotos' to contain the list of all
	  control transfer operators (goto, return, break, continue);
	ST_SCOPE_ENTRY, ST_SCOPE_EXIT - new constants for use in
	  `sema_scope_list';
	(struct sema_scope_list) a new field `mode' either of two constants,
	  described above;
	(struct s_goto) a new field `use_scope' to contain a reference to
	  scope, where the transfer control operator is located;
	(sema_add_to_gotos) a new function prototype;
	(sinfo_create_goto) two parameters added to set `use_scope' and
	  `scopes' field.

/sources/c/stubs
----------------

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* ast_export.h: copyright notice is updated;
	`tAST' typedef is guarded with `RCC_TAST_DEFINED' macro.

2002-03-04  Alexander Chernov  <cher@ispras.ru>

	* frontend.c: 
	(set_gcpp) GNU preprocessor is called `cpp';
	  clib include directory is added to the invocation options.

2002-02-28  Alexander Chernov  <cher@ispras.ru>

	* frontend.c: <number_io.h> file is included;
	(system_includes) a new variable to store the list of system include
	  directories;
	(frontend_Initialize) system include directories are saved in
	  `system_includes' variable;
	(frontend_IsSystemFile) a new function, which searches the given file
	  name in system include paths, and transforms the name to #include
	  directive syntax.

2002-02-21  Alexander Chernov  <cher@ispras.ru>

	* frontend.c: minor indentation changes in LGPL manifest;
	removed unused include directives.

***


User-visible changes from version 0.9.8 to 0.9.9 (20020131)
===========================================================

 1. General
    o C regression tests are moved to `tests-c' directory under
      `sources'.

 2. Configuration
    o Wrappers are disable by default for win32 platforms.
    o A new script `mingwenv.sh' added to set up environment variables
      for compilation under gcc for win32.

 3. REUSE library
    o Routines from `number_io' module are moved each into a separate
      file.

 4. CLIB headers
    o <stdarg.h> header is implemented using the built-in functions.

 5. rcc - the C converter
    o Support for `va_list', `va_start', `va_arg', `va_end' macros
      is built-in into the converter. The corresponding built-ins
      are named __builtin_va_list, etc.
    o Support for `alloca' function is built-in. The corresponding
      function is named __builtin_alloca.
    o A new option `--mif-decode-labels' to be a bit more verbose
      when printing the MIF (for debugging purposes).
    o A new option `--mif-no-load' which has the effect, that MIF
      generator does not generate LOAD instructions, instead literals
      are used directly in operation instructions. This option is
      currently off by default, since it may cause all regression
      fail.
    o Empty declarations are permitted inside structure definitions.
    o Long double literals are read and printed correctly even on
      platforms (Win32 MSVCRT), where conversions from string to
      long double and back are not implemented.
    o Aggregate types (struct, union) are fully supported. Bitfield
      support is spotty yet.
    o String concatenation is supported like "a" "b" -> "ab".
    o Partial constant folding is implemented in cases like `-6',
      `(char) 1', `(void*) 0'.
    o Switch operator is supported.

 6. The MIF intermediate form
    o Lots of new instructions added
      BFIELD, PBFIELD, MBFIELD, PMBFIELD - bit field access;
      AOFFSET, FOFFSET - dynamic offset calculation;
      VASTART, VAARG, VAEND - variadic arguments;
      TOFFSET - dynamic offset pseudoregister type;
      TVALIST - va_list type;
      BFINCR, BFDECR, PBFINCR, PBFDECR - bit field manipulation;
      FALLOC - function-wide stack allocation;
      LALLOC - scope-wide stack allocation.

User-visible changes from version 0.9.7 to 0.9.8 (20020110)
===========================================================

 1. General
    o A new regression testing framework is implemented. Test driver
      is located in `sources/testdrv' (executable is called `testdrv'),
      regression tests for C converter are located in
      `sources/c/tests'. Checking of exit code, error messages and
      generated MIF code is possible.

 2. REUSE library.
    o A new module `number_io' is created which contains routines
      to convert values of various types to character strings and back.
      All such stuff, previously in osdeps, is moved there.
    o New functions (`reuse_set_binary_stderr', `reuse_set_binary_stdout'
      are added to `xfile'.
    o New functions (`task_PutEnv', `task_ClearEnv', `task_DisableCoreDump',
      `task_SetStackSize', `task_SetDataSize', `task_SetVMSize',
      `task_SetKillSignal') are added to `exec'.
    o New functions (`err_SaveCounters', `err_RestoreCounters') are added
      to `errors'.

 3. CLIB headers.
    o Prototypes for many functions added.

 4. c_cpp - the preprocessor
    o New options `-be', `-bo' are supported.
    o Process exit code is calculated correctly depending on preprocessing
      status.

 5. rcc - the C converter
    o The converter prints a message containing the source position
      and aborts in case of currently unsupported language construct.
    o Enumerated types and constants are fully supported.
    o Operation assignments are fully and properly supported.
    o `goto' operator is supported, but cannot bypass definition and
      initialization of variables in blocks.
    o Constant folding is implemented.
    o Local scalar initializers are supported.
    o Hexadecimal floating-point literals are supported in C.
    o A character literal with code >= 128 is tagged as `unsigned char'.
    o New options `--text-output', `--binary-output' to toggle between
      text and binary mode on win32 for MIF output file.
    o New options `--binary-stderr', `--text-stderr' to toggle between
      text and binary output to the standard errors on win32.
    o `-' is handled as a valid file name (stdin for input, stdout for
      output).
    o Option `--mif' is no longer a default.
    o Option `-S' is alias for `--mif' option.
    o If `--mif' is specified, stdardard output is no longer a default
      stream to print MIF. Instead an output file with suffix `.mif'
      is created.
    o Lots of bug fixed (see the ChangeLogs).

 6. The MIF intermediate form
    o VOID type added to handle properly such constructs, as `const void *'.
    o BMOVE instruction added for block memory copies.
    o Each unique composite type (TFUNC, PTR, OPAQUE, ALIAS, ARRAY, OARRAY)
      is emitted into MIF only once, then reference to this instruction used
      every time the type is used.

User-visible changes from version 0.9.6 to 0.9.7 (20010917)
===========================================================

 1. We added our implementation of some Standard C header files.
    These files are installed by default to $P_HOME/include/stdlib.
    The reason is that the standard system header files are
    too complex and contains lots of stuff, which we do not use,
    like inlined function definition. Another reason is that
    the current version of rcc chokes on the full system header
    files.

 2. The rcc compiler does not use preprocessor options, taken from
    gnu C compiler invocation. Instead it sets the standard
    include path to the directory $P_HOME/include/stdlib,
    where our C header files reside.

 3. Semantic analyzer is improved. Pointer assignments are checked
    better. Pointer comparisons are checked better. Ternary operation
    is supported. Typecast operation is supported. Sizeof operation
    is supported. Bitwise "&" operation is properly supported.

 4. MIF code generator is improved. Relation operation are generated
    properly in any context.
    Comma `,' operation is supported.
    `sizeof' operation is supported.
    Address `&' operation is supported.
    Ternary `?:' operation is supported.
    Return statement without expression supported.

    
