Orange C 5.60.1 is released

This version has some major updates.

  • The compiler package compiles itself, and the resulting executables compile other programs
  • The compiler has been sped up and by some accounts generates faster code.
  • The linker links C++ programs much faster
  • The post-linker (downloader) exits faster due to changes in the RTL.
  • Bug fixes and other enhancements to the IDE

    In addition there have been many bug fixes, and some problematic C++ 11 code compiles better.

    In recent versions, 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: package compiles itself now, and the results can be used to build other files
  • occ: speed up aliasing code; compiles itself faster now
  • olink: speed up processing of C++ files by an order of magnitude
  • occ: exception table pointers were not being placed in the vtab. (typeid failed)
  • occ: address of structures could get an extra dereference when accessed as a reference member
  • occ: cast operators would not be called as part of a return statement.
  • occ: could generate the exception handling structures for C++ on non-dword boundaries, and windows does not like this. (exception handling broken)
  • occ: didn't throw non-structured types properly
  • occ: smart exception table generation for functions that don't allow exceptions to be thrown
  • occ: add profiler functionality
  • occ: taking the address of a templated function could cause the function to be undefined in the object file if the address was taken as a function argument.
  • occ: fix problems with aliasing of structure assignments
  • occ: declarations like : int a[][]; where multiple braces are empty could crash the compiler
  • occ: do branch optimizations at the beginning of the optimizer pass; this will result in better optimizations.
  • occ: sometimes as with a return at the end of the first part of an if statement multiple gotos could be generated in the back end, and this would confuse the flow analyzer and result in invalid code being generated.
  • occ: treat nullptr_t as a first-class citizen in function arguments (argument matching was allowing nonnull pointers to match)
  • occ: fix problems the types of template selectors that are found in the shared_ptr constructors
  • occ: fix problems with internally generated qualifiers on class assigners causing a crash
  • occ: remove some test code that performed an infinite loop
  • occ: if a pointer to a structure was returned from a function, the copy by rvalue would be done instead of copy by lvalue
  • olink: virtual sections were not matched to externals in the same file, so they would be dragged out of a library if they existed in the library and this could cause collisions
  • oasm: virtual sections were sent to the object file with the wrong attributes, so link failed
  • ocide: fix problem with 'flashing' gui
  • ocide: fix database problems: colorization and hints were broken
  • ocide: fix ctrl-f and ctrl-h to do the expected thing when the find/replace window has focus
  • ocide: after a replace in selection, restore the selection.
  • ocide: after a replace in selection, don't scroll the screen.
  • ocide: debugger: stepping over a windows function call didn't stop after the call.
  • ocide: call stack window function name list doesn;t work for static functions
  • ocide: call stack window can correlate last line of a function to first line of next function
  • ocide: when bringing up find/replace window, fetch word under cursor (or word in toolbar)
  • occpr: fix crash condition
  • clibs: couldn't throw a non-structured type without it crashing.
  • clibs: fix profiler to work with orange c; fix problems in profiler code; Use QueryPerformanceCounter
  • clibs: set_unexpected would set the unexpected handler but return the terminate handler
  • clibs: realloc(ptr, 0) did not free ptr and return NULL.
  • clibs: fix the definition of NEWTEXTMETRICEX