Orange C 5.41.1 is released

This release speeds up some of the slower portions of the RTL, including File I/O, sprintf/sscanf and atoi

This release also fixes various problems with the member pointer support

there are also bug fixes

In recent version 5.39.1, the name mangling for C++ has changed, and the object library file format has changed. Please completely rebuild your projects.

Some of the changes are as follows

  • occ: fix member pointer handling in general - both parsing and code gen was broken
  • occ: add an error if trying to implicitly take the address of a member function
  • occ: allow matching of the arguments to pointers to function in template matching
  • occ: allow matching of pointers to class members and any arguments in template matching
  • occ: fix some problems where explicit use of explicit constructors still caused an error
  • occ: fix typeid with class types to use the XT table of the object instance when available
  • occ: instantiation of multiple functions in a class with packed template args could result in bad code
  • occ: &cls->memberdata returned the wrong value when memberdata was a reference type (not dereferenced)
  • occ: fix problem compiling declarations like int (*(xx))() where the pointer variable is surrounded by parenthesis
  • occ: anonymous structures and unions declared inside functions resulted in an error.
  • clibs: problem with fopen caused problems if you opened a TTY, and put all other files in linebuffered mode which resulted in a significant performance penalty
  • clibs: creat() without S_IWRITE made the file readonly
  • clibs: speed up printf() and friends with ints and doubles by using better algorithms
  • clibs: speed up atof() by fixing a bug that made it flush the mantissa to float too soon