# AngelScript Change Log

## Version 2.16.1 - 2009/05/09

- Bug fixes
  - Fixed bug with implicit conversion from temporary 'const obj @' to 'obj &' (Thanks Jeff Slutter)
  - Fixed problem with float values and locale (Thanks scypior)
  - Fixed incorrect conversion of null handle to primitive (Thanks cvet)
  - Fixed crash when assigning array to itself (Thanks cvet)
  - Fixed assert failure after invalid conditional expression (Thanks Jeff Slutter)
  - Fixed bug in compiler when attempting to return null handle for a function declared to return object by value (Thanks marvi)
  - Compiler is now giving a proper error when script function returns reference (Thanks marvi)
  - Fixed crash when a script constructor that receives object handle throws an exception (Thanks cvet)
  - Fixed implicit value cast to another object type (Thanks SiCrane)
  - Fixed multithread support on FreeBSD (Thanks droz)
  - Character literals for characters above ASCII 127 are now compiled correctly (Thanks cvet)
  - Fixed rare bug when script called application function with float args and the application uses full optimization (Thanks Jeff Slutter and DaBono)
- Library
  - The built-in array type is now implemented using a template type.
  - The tokenizer now recognizes the UTF8 byte-order-mark as whitespace permitting the compilation of UTF8 encoded scripts.
  - Added support for multibyte character sets through the preprocessor flag AS_DOUBLEBYTE_CHARSET, it's recommended to use UTF8 instead though. (Thanks loverlin)
  - Added asEP_REQUIRE_ENUM_SCOPE to force the use of enum scope when accessing enum values. (Thanks Jeff Slutter)
  - The value cast behaviour can now be used to instanciate an object type if the type doesn't have the appropriate constructor. (Thanks SiCrane)
  - The callstack is no longer cleaned up immediately on an exception, thus allowing the examination of it even after Execute returns.
- Script language
  - Enum values can now be prefixed with the enum type to give the exact enum value when multiple enums declare the same name. (Thanks Jeff Slutter)
- Add-ons
  - CScriptBuilder is now better at handling relative include paths (Stuart Golodetz)

## Version 2.16.0 - 2009/03/30

- Bug fixes
  - Fixed bug in compiler where temporary variable was freed twice during compound assignments with some complex lvalue expressions (Thanks _Vicious_)
  - Fixed crash when parsing invalid typedefs.
  - Typedefs declared in scripts now accept float and double as well.
  - Fixed crash when compiling handle comparison with invalid types (Thanks _Vicious_)
  - It's now possible to determine type id for handle to scoped reference types (Thanks Jeff Slutter)
  - Unary operators weren't supported for enum types (Thanks jal_)
  - Fixed crash when declaring a script class that inherits from a class declared below it (Thanks Zeu5)
  - Fixed bug when registering an interface after previously removing dynamic config group (Thanks Zeu5)
  - Fixed bug in CScriptBuilder add-on that broke global declarations with array types (Thanks except134)
  - Fixed problem with class inheritance and order of declaration (Thanks Zeu5)
  - Fixed assert failure after compile error (Thanks Cliff Cawley)
- Library
  - All primitive types now have fixed type ids, so it is no longer necessary to call the GetTypeIdByDecl method to obtain their ids.
  - Removed the AS_NO_USER_ALLOC config option.
  - Enumeration of functions in the modules now only return global functions.
  - Enumeration of object types in modules now only return classes and interfaces.
  - Added engine property asEP_BUILD_WITHOUT_LINE_CUES (replaces the config option).
  - Added engine property asEP_INIT_GLOBAL_VARS_AFTER_BUILD, which will allow compiling scripts without having the implementation of the application functions.
  - Enumeration of object types in the engine now only return registered object types.
- Library interface
  - Removed some functions that had been deprecated in version 2.14.0.
  - Renamed asIScriptStruct to asIScriptObject.
  - Renamed GetStructTypeId to GetTypeId in asIScriptObject.
  - Added enumeration of factory functions and behaviours to asIObjectType.
  - Added GetBaseType, GetFlags, GetSize, and GetPropertyOffset to asIObjectType.
  - Deprecated GetSubType and IsInterface in asIObjectType.
  - Added enumeration of enums and typedefs to asIScriptModule.
  - Added enumeration of registered functions, properties, enums, and typedefs to asIScriptEngine.
  - Added parameter to asIScriptFunction::GetDeclaration to include or not the object name in the returned string.
  - Removed all output length parameters for functions that returned strings, all strings are null terminated anyway.
  - Deprecated GetReturnPointer in asIScriptGeneric, replaced by GetAddressOfReturnLocation.
- Add-ons
  - Added registration of std::string as a standard add-on, complementing the CScriptString
  - Added resize method to the string add-ons
  - Changed CScriptFile to be compatible with both std::string and CScriptString
  - Modified CScriptBuilder to permit enabling/disabling metadata processing through preprocessor define
  - Added autowrapper add-on that automatically generates wrappers for the generic calling convention for functions and class methods (Thanks George Yohng)
  - Added registration of the double counter parts to the math functions

## Version 2.15.2 - 2009/02/22

- Bug fixes
  - The pre-compiled bytecode didn't store the script class destructors, nor the implemented interfaces
  - Script class factories didn't work for constructors with more than 1 argument (Thanks BornToCode and scypior)
  - Changed as_atomic.cpp to use critical sections for older versions of GCC on Linux (Thanks _Vicious_)
  - Fixed some 64bit compatibility issues (Thanks Ionut "gargltk" Leonte and _Vicious_)
  - Fixed dangling pointer problem after removing dynamic configuration group (Thanks Ionut "gargltk" Leonte)
- Script language
  - Added support for single inheritance for script classes
  - Added support for scope resolution operator
- Library
  - Added support for native calling conventions on 64bit Linux (Thanks Ionut "gargltk" Leonte)
- Add-ons
  - Implemented readLine, isEndOfFile, writeString, getPos, setPos, and movePos for the CScriptFile
  - Removed use of bool in the C library header (Thanks Gibbon_99)
  - Added support for #if/#endif preprocessor directives to the CScriptBuilder

## Version 2.15.1 - 2009/01/25

- Bug fixes
  - Fixed a bug with bitwise operators and 8/16 bit integer types (Thanks jkhax0r)
  - Fixed the error message when no matching constructor is found for a construct call
  - Fixed bug when compiling expressions that called index operator that returned an object by value on a temporary variable (Thanks dxj19831029)
  - Saved pre-compiled bytecode didn't store the read-only flag for class methods
  - Fixed bug where class method calls that returned a reference to a member of the class would release the class before the reference was used
  - Fixed bug that allowed object handles for value types (Thanks Wavesonics)
  - Modified as_atomic.h to avoid use of kernel specific atomic.h on Linux (Thanks namtabmai)
  - Fixed compile error in as_callfunc_x86.cpp on GNUC when using -O3 option (Thanks bigjo)
  - Fixed the calling conventions for MinGW on Windows
- Library
  - Internally reference types (including script classes) are now allocated by calling the factory function directly
  - Updated as_config to properly identify operating system, thus improving multithreading performance
  - Created script factory stub functions for instanciating template types, thus simplifying script compiler
  - The memory for global variables declared in scripts is now allocated individually, which will allow more flexibility
- Add-ons
  - Added the generic interface to the CScriptFile object

## Version 2.15.0 - 2008/12/13

- Bug fixes
  - Fixed assignments where the rvalue is a temporary object instanciated with a construct call (Thanks SiCrane)
  - The parser no longer accepts other digits than 0 to initiate a hex literal value (Thanks SiCrane)
  - Fixed compiler error in as_callfunc_ppc_64.cpp (Thanks James Chan)
  - Fixed saving bytecode with enums (Thanks loboWu)
  - Fixed the index operator call on temporary object that caused an invalid reference (Thanks dxj19831029)
  - Fixed bug in the tokenizer and the !in token versus identifier (Thanks xivVerge)
  - Script functions can now be declared to return const types (Thanks SiCrane)
  - Fixed multithread problem in memory manager for the script node pool (Thanks xivVerge)
  - Fixed assert failure after compilation error with ref cast operator (Thanks Jeff Slutter)
  - Fixed compiler warnings for g++ 4.3.2 (Thanks Matt Williams)
- Library interface
  - Changed the parameters for the engine's GarbageCollect method to give more control to the application
  - Replaced GetObjectsInGarbageCollectorCount in the engine interface with GetGCStatistics
  - Added GetEngine to asIScriptStruct and asIScriptArray
  - Replaced GetVarPointer and GetReturnPointer in the context interface with GetAddressOfVar and GetAddressOfReturnValue respectively
  - Replaced GetArgPointer in the generic interface with GetAddressOfArg
  - Added SetUserData/GetUserData to the engine interface
  - Added the ParseToken method to the engine interface, useful for IDEs that provide syntax highlighting or intellisense
  - Removed deprecated GetMethodDescriptorByIndex, GetMethodCount, GetMethodIDByIndex, GetMethodIDByName, GetMethodIDByDecl from engine interface
  - Removed deprecated GetFunctionDeclaration, GetFunctionModule, GetFunctionSection, GetFunctionName from engine interface
  - Removed deprecated SetDefaultContextStackSize from engine interface
  - Added asIScriptModule, which will be used to interact with the modules directly, instead of through the engine interface
  - Added GetModule to the engine
  - Deprecated the methods in the engine for interacting with the modules, as these methods are now available in the module interface
  - Added GetGlobalVarTypeId to the module interface. There were no corresponding method for this in the engine interface
  - Renamed Discard in the engine interface to DiscardModule
  - Modified the GetTypeIdByDecl in the engine interface to take only the declaration and not the module name
- Library
  - Configured the library to work with Nintendo Wii (Thanks James Chan)
- Project
  - Added as_criticalsection.h
  - Moved as_c.cpp out of the main project, and into the C lib add-on project
- Add-ons
  - Added CScriptBuilder with support for include directive and metadata through a pre-processing pass
  - Improved const correctness to CScriptAny and CScriptDictionary
  - Removed the 'as' prefix from CScriptString and CScriptFile

## Version 2.14.1 - 2008/11/02

- Bug fixes
  - Removed the need to inform @ when performing explicit ref cast with an implicit ref cast behaviour
  - Added the namespace macros to the scriptnode module (Thanks SiCrane)
  - Fixed an application crash in the asCThreadManager when the script engine was released by a global var upon application exit (Thanks BornToCode and SiCrane)
  - Fixed application freeze on compiling scripts that declare a const return value for class methods (Thanks SiCrane)
  - Fixed some assert failures after compilation errors (Thanks SiCrane)
- Library
  - Added engine property asEP_ALLOW_IMPLICIT_HANDLE_TYPES to turn on the experimental feature.
  - Added compiler warning when compiling handle comparison where either of the operands have not been explicitly set as handle.
  - Updated as_config.h to support MSVC 2008 + x64 processor (native calling conventions is still not supported). (Thanks wildmild and SiCrane)
  - Improved thread safety in the library.
  - Added multithread support for MacOS X, x86 and ppc
- Script language
  - Added experimental support for implicit handle types. These are declared with 'class@ name {}' (Thanks George Yohng)
  - Class methods can now be declared as 'const' in the script class declaration.
  - Implemented the 'is' operator for identity comparisons, i.e. comparing two object handles.
- Project
  - Added as_gc.h and as_gc.cpp, which holds the garbage collector previously in the script engine module.
  - Added as_atomic.h and as_atomic.cpp, which provides a threadsafe reference counter.

## Version 2.14.0 - 2008/10/05

- Bug fixes
  - Fixed some issues with the scoped reference type (Thanks Jeff Slutter)
  - Improved validation of type flags on RegisterObjectType with asOBJ_VALUE (Thanks dxj19831029)
  - Fixed bug with for loop that was not using primitives in the loop increment statement (Thanks jal)
- Library interface
  - The C interface now has a dedicated header file with it's own project in the add_on directory.
  - Added WriteMessage to the engine interface, for writing to the message callback.
  - Deprecated GetGlobalVarIDByIndex, GetGlobalVarIDByName, GetGlobalVarIDByDecl, and GetGlobalVarPointer.
  - Added GetGlobalVarIndexByName, GetGlobalVarIndexByDecl, and GetAddressOfGlobalVar.
  - The method GetAddressOfGlobalVar that replaces GetGlobalVarPointer now returns the address of objects directly, rather than a pointer to the address of the objects, for object variables.
  - Added asBEHAVE_IMPLICIT_VALUE_CAST to differenciate between implicit and explicit value cast behaviours.
- Library
  - Identical interfaces declared in different modules will now share type id.
  - Added constraint against multiple threads trying to compile scripts at the same time.
  - The script compiler no longer uses constructor/factory behaviours in implicit value casts.
  - The engine's GetObjectTypeCount and GetObjectTypeByIndex now return application registered types as well.
  - The context can be used to call registered functions/class methods directly.
- Script language
  - The cast<type>(expr) operator can now only be used for reference casts. Value casts must use the construct cast, i.e. type(expr).

## Version 2.13.1 - 2008/08/17

- Bug fixes
  - Fixed reference casts when the source handle is a script class member (Thanks Marcin "Pris" Musial)
  - Fixed the declaration of the CRITICAL_SECTION on 64 bit Windows (Thanks Viktor Levitin)
  - Fixed bug with temporary variables being reused too early (Thanks loboWu and Dentoid)
  - Fixed bug with temporary variable not being released (Thanks dxj19831029)
  - Fixed bug with enum lists not ended with comma (Thanks Shurwint)
  - Fixed bug with compiler optimization of constant expressions (Thanks loboWu)
- Script language
  - Single quoted strings can now be used instead of double quoted strings.
- Library interface
  - Added asEP_USE_CHARACTER_LITERALS to allow applications to interpret single quoted strings as character literals.
  - Added asEP_ALLOW_MULTILINE_STRINGS that will allow the compiler to accept string constants with line breaks.
  - Added extra validation to register functions to minimize user errors.
  - Added support for asBEHAVE_IMPLICIT_REF_CAST.
- Library
  - Added support for posix threads on the platforms that support it (Thanks kunitoki)
  - Support for multithreading is now turned on by default, it can be turned off by defining AS_NO_THREADS.

## Version 2.13.0 - 2008/06/08

- Bug fixes
  - Fixed compile error on non-standards compliant compilers, e.g. MSVC6 (Thanks Shurwint)
  - Updated as_config.h to remove compiler warning for stdcall on 64bit linux (Thanks Alraz)
  - Moved enum declarations to top of header to fix compile error on GNUC (Thanks Samuel E. Henley)
  - Global variables declared with enum types crashed the engine (Thanks mono2k)
  - Fixed bug with shift operators and byte operands that should have been converted to dword (Thanks loboWu)
  - Fixed compile error on GNUC/Linux. (Thanks droz)
  - bool[] objects didn't use the correct element size on Mac OS X with PPC (Thanks Edward Rudd)
  - Enum values are now correct on big endian CPUs as well.
  - Illegal casts without arguments would crash the compiler (Thanks loboWu)
  - Fixed a bug in compiler that could make the script engine release invalid objects (Thanks Milleniumas)
  - Fixed a bug where global arrays of handles where initialized with handles of other global variables (Thanks sunwoolee)
- Library interface
  - Added engine property asEP_MAX_STACK_SIZE
  - Added methods for enumerating object type methods and properties to the asIObjectType interface
  - Added methods for enumerating parameter types to the asIScriptFunction interface
  - Added GetFunctionDescriptorById to the asIScriptEngine interface
  - Added methods for getting function declaration and script section to asIScriptFunction
  - Deprecated SetDefaultContextStackSize in asIScriptEngine
  - Deprecated GetFunctionName, GetFunctionDeclaration, GetFunctionModule, GetFunctionSection in asIScriptEngine
  - Deprecated GetMethodCount, GetMethodIDByIndex, GetMethodIDByName, GetMethodIDByDecl, GetMethodDescriptorByIndex in asIScriptEngine
  - Deprecated global behaviours LOGICAL_OR and LOGICAL_AND as these operators are exclusive to boolean types
  - Added global behaviour asBEHAVE_REF_CAST, that allow explicit casts between handles to application registered types
- Library
  - Added initial support for native calling conventions on 64bit platforms (Thanks niteice)
  - Updated as_config.h to add support for native calling conventions on FreeBSD (Thanks Jeremy "droz" Harmon)
- Project
  - Added as_callfunc_x64_gcc.cpp

## Version 2.12.0 - 2008/03/22

- Bug fixes
  - Fixed assert failure when compiling if statement with incorrect expression (Thanks Chet Simpson)
  - Fixed assert failure when returning an input reference by reference from script function (Thanks Chet Simpson)
  - Fixed potential heap corruption when internally copying system function information (Thanks Chet Simpson)
  - Fixed asOBJ_VALUE | asOBJ_APP_FLOAT with RegisterObjectType (Thanks RsblsbShawn)
  - Fixed access to global variables when the object method is from another module (Thanks Chet Simpson)
  - A const object can now be passed to a function expecting a non-const object by making a copy (Thanks Jeff Slutter)
  - Fixed a bug in tokenizer on 64 bit platforms (Thanks DaBono)
- Script language
  - Added typedef. Currently it allows to define aliases of built-in primitive types (Thanks Chet Simpson)
  - Added enum. (Thanks Chet Simpson)
- Library interface
  - Added RegisterEnum and RegisterEnumValue to asIScriptEngine (Thanks Chet Simpson)
  - Added RegisterTypedef to asIScriptEngine (Thanks Chet Simpson)
  - Added GetObjectTypeId, GetArgCount, and GetReturnTypeId to asIScriptGeneric.
  - Added the asIObjectType interface (Thanks Chet Simpson)
  - AngelScript is now capable of differentiating between global functions, class methods, and functions using the generic calling convention.
  - Added asWRONG_CALLING_CONV return code when the wrong calling convention is used.
  - Changed constants to enums for better grouping.
  - Added asIScriptFunction interface (Thanks Chet Simpson)

## Version 2.11.2 - 2008/01/21

- Bug fixes
  - Compiler didn't warn when using post incremental/decremental operator on uninitialized variable (Thanks Noelia Rodriguez Matilla)
  - Switch cases didn't work properly for uint8 and uint16 types (Thanks Noelia Rodriguez Matilla)
  - Compound assignments in conjunction with arrays could give incorrect results (Thanks loboWu)
- Library interface
  - Added behaviour asBEHAVE_VALUE_CAST that allow objects to be cast to other types, including primitives
- Library
  - ExecuteString no longer locks dynamic configuration groups. (Thanks mono2k)
  - Compiler gives better error message when it cannot match class methods for a call (Thanks Jeremy Harmon)

## Version 2.11.1 - 2007/12/16

- Bug fixes
  - Expressions that tried to use indexing operator on primitive types caused assert failure (Thanks Anders Hansson)
  - GetFunctionIDByDecl returned asINVALID_DECLARATION for functions that returned or passed reference types by value (Thanks loboWu)
  - Corrected as_config.h in regards to vsnprintf for MSVC9 (Thanks Schrompf)
- Library interface
  - Added the new object type flag asOBJ_SCOPED, that allows applications to register reference types that behaves like value types but with special memory management needs
- Library
  - Compiler emits less error messages that are concequences of previously detected errors

## Version 2.11.0 - 2007/11/30

- Bug fixes
  - Copying script classes that held object handles crashed (Thanks Jeff Slutter)
  - Script class methods with the same name as an object type was incorrectly causing compilation error
  - Compiler didn't find objects methods when compiling a method call if the method had the same name as an object type (Thanks Jeff Slutter)
  - The bytecode optimizer failed in a specific situation (Thanks Jeff Slutter)
  - The multithread support in as_thread.cpp was broken (Thanks Martin Kaeser)
  - Garbage collector could in certain cases removed type definitions that were still needed causing application crashes (Thanks Jeff Slutter)
  - Script classes inheriting from other classes didn't give a compiler error (Thanks Pris)
  - The script allow called to non const methods for handles to const objects (Thanks virtualcodewarrior)
  - Fixed a few null pointer accesses when passing null handles to and from application (Thanks behc)
  - asIScriptContext::GetState can now return asEXECUTION_ABORTED as well (Thanks Anders Hansson)
  - Fixed uint64 to double conversion
- Library interface
  - Added new flags asOBJ_REF, asOBJ_VALUE, asOBJ_GC, asOBJ_POD, and asOBJ_NOHANDLE that represents how the type is intended to work in AngelScript
  - Changed prefix for previous asOBJ flags to asOBJ_APP. They should only be used with asOBJ_VALUE.
  - AngelScript now validates the behaviours, to check for missing behaviours or behaviours that shouldn't be registered for the type
  - Types registered as reference counted won't be allowed to be passed by value to system functions, nor returned by value
  - Reference types must now use the new FACTORY behaviour instead of the CONSTRUCT behaviour.
  - Removed the asBEHAVE_ALLOC and asBEHAVE_FREE behaviours.
  - Added Unprepare to context interface.
- Library
  - Added native calling conventions for XBox 360 (Thanks Laszlo Perneky)

## Version 2.10.0 - 2007/09/23

- Bug fixes
  - Fixed a bug with matching functions with boolean arguments (Thanks Jeff Slutter)
  - CopyScriptObject is now able to copy registered types that have no registered copy behaviour (Thanks Jeff Slutter)
  - Script classes crashed on construction with AS_MAX_PORTABILITY (Thanks Carlos Campaña)
  - Fixed a null pointer access on stack clean up (Thanks Thomas Cowell)
  - Fixed an assert failure in the compiler (Thanks Jeff Slutter)
  - When compiling assignment the compiler made incorrect implicit conversions to object type (Thanks Anders Hansson)
  - Fixed access violation in RegisterGlobalProperty when the property had already been registered in another group (Thanks mono2k)
  - The condition operator didn't handle void expressions in the results (Thanks Anders Hansson)
  - Comparison with local boolean variable toggled the variable's value (Thanks Anders Hansson)
- Script language
  - The any type is no longer a built-in type
  - Bitwise operators will maintain the signed/unsigned type of the left operand (Thanks Trikko)
- Library interface
  - Added GCEnumCallback and NotifyGarbageCollectorOfNewObject to engine
  - Added behaviours GETREFCOUNT, SETGCFLAG, GETGCFLAG, ENUMREFS, RELEASEREFS
  - The any type is no longer a built-in type, thus the asIScriptAny interface and the asTYPEID_SCRIPTANY constant have been removed (CScriptAny add-on was created to replace them)
  - Added CompareScriptObjects method to engine (Thanks Jeff Slutter)
- Project
  - Removed as_gcobject.cpp and as_gcobject.h
  - Removed as_anyobject.cpp and as_anyobject.h

## Version 2.9.1 - 2007/08/19

- Bug fixes
  - The default constructor wasn't called for script class members of script class types (Thanks Jeff Slutter)
  - ReleaseScriptObject failed for types that didn't have the release behaviour, nor the destructor (Thanks Jeff Slutter)
- Script language
  - Implemented support for destructors in the script classes. (Thanks Jeff Slutter)

## Version 2.9.0 - 2007/08/12

- Bug fixes
  - Parser could hang on scripts with non-terminated strings. (Thanks derefed)
  - Compiler died when compiling a return statement with a void expression. (Thanks SiCrane)
  - A bug when calling class methods with 1 or 2 byte arguments was fixed for PPC, both 32bit and 64bit. (Thanks Jeff Slutter)
  - Fixed a bug with &inout references and script class member variables (Thanks Jeff Slutter)
- Library interface
  - GetGlobalVarPointer returns the pointer to the pointer to the object for object variables. Likewise for object handles a pointer to the object handle is returned (Thanks Jeff Slutter)
  - Added GetArgByte(), GetArgWord(), SetReturnByte(), SetReturnWord() to asIScriptGeneric for better support on big endian processors
  - Added SetArgByte(), SetArgWord(), GetReturnByte(), GetReturnWord() to asIScriptContext for better support on big endian processors
  - GetArgDWord(), SetReturnDWord(), SetArgDWord(), and GetReturnDWord() now validates that type is 4 bytes
  - Added GetThisTypeId and GetThisPointer to asIScriptContext (Thanks Jeff Slutter)
  - GetTypeIdByDecl is now able to understand const type declarations. (Thanks Jeff Slutter)
  - Added GetArgTypeId and GetFunctionId to the generic interface
  - Removed the makeCopy parameter from AddScriptSection, and instead added a new engine property asEP_COPY_SCRIPT_SECTIONS
  - Added CreateScriptObjectCopy, CopyScriptObject, AddRefScriptObject, ReleaseScriptObject, and GetSizeOfPrimitiveType to engine for easier development of generic container classes
  - All methods for registering functions, methods, or behaviours are now returning the function id as a success indicator. Negative values still indicate an error.
  - Implemented support for variable parameter type, ?&, in object constructor, object methods, and global functions

## Version 2.8.1 - 2007/07/09

- Bug fixes
  - Fixed the behaviour of the AS_USE_NAMESPACE macro (Thanks SkunkGuru)
  - Fixed misleading message when compiling statement like 'Object &ref' (Thanks Steve Williams)
  - Fixed bug in compiler where it didn't reuse temporary variables properly
  - Fixed problem with C++ compiler optimizations that changed the result of AngelScript code and thus breaking (Thanks Jeff Slutter)
  - Fixed the as_config.h file for GNUC/Apple
  - Fixed conversion of negative floating point values to unsigned int on GNUC based compilers
  - Fixed bug with booleans returned from functions that didn't evaluate to false when expected. (Thanks Rakkar2)
  - Fixed bug where the compiler failed when passing constant references as function parameters. (Thanks Rakkar2)
  - Engine no longer permits the registration of functions with void parameters (Thanks Juan Pablo Bettini)
  - Fixed compiler assert when assigning a void value to a variable (Thanks Anders Hansson)
  - Fixed bug in compiler where the property name wasn't validated correctly for name conflicts (Thanks Andy R)
  - Fixed intermittent bug in the byte code optimization that affected only big endian processors.
  - Fixed incorrect name conflict between script class methods and global functions (Thanks Anders Hansson)
  - Fixed assertion failure when declaring variables as void (Thanks Anders Hansson)
  - Fixed bug with GetGlobalVarID that didn't return the id with the moduleId (Thanks Julian Storer)
  - Fixed bug with initialization lists for arrays of object handles.
  - Fixed bug with loading bytecode that used registered array types. (Thanks Juan Pablo Bettini)
  - Fixed bug with loading bytecode with script classes that were declared out of order. (Thanks Juan Pablo Bettini)
  - Fixed bug where CHKREF was placed incorrectly to verify only the first parameter on the stack. (Thanks CyberGorgolith)
  - Fixed bug with boolean operations that treated false values as true due to trash data in upper bytes of the boolean variable.
  - The default constructor for script classes wasn't called for classes in arrays. (Thanks Jeff Slutter)
  - Fixed bug with explicit handle for class members and array elements (Thanks Juan Pablo Bettini)
- Library
  - Improved memory foot print of the compiler.
  - When parsing statements the parser now has full knowledge of available types so it is able to better distinguish the true semantic of identifiers.
  - Added support for PS3 native calling conventions. (Thanks Jeff Slutter)
  - GNUC assembler for native calling conventions now guarantee stack pointer alignment on 16 bytes.
  - Added support for Mac OS X with Intel native calling conventions.
  - Added support for Mac OS X with PPC native calling conventions.
- Library interface
  - Added OPTIMIZE_BYTECODE as engine property.
  - Removed restriction on registered object type's sizes, they can now be of any size, even non-multiple of 4. (Thanks Tonin)
- Virtual machine
  - New byte codes: ChkNullS, ClrHi
- Project
  - Added as_callfunc_ppc_64.cpp

## Version 2.8.0a - 2007/02/18

- Bug fixes
  - Fixed memory leak with exception handler inside script class method
  - Fixed the DELETEARRAY macro that didn't work on gnuc (Thanks Jeremy "droz" Harmon)
- Library
  - Improved the memory management facility
  - Added the config option AS_NO_USER_ALLOC. Define this to turn off the user defined memory managements. The default memory management in the library may not be compatible with all compilers yet. By defining this macro when you compile the library, you should be able to use the library anyway, though without the functionality of asSetGlobalMemoryFunctions().
- Project
  - Removed as_objectarray.h

## Version 2.8.0 - 2007/02/04

- Bug fixes
  - Fixed incorrect use of temporary variables during evaluation of function argument expressions (Thanks Gilad Novik)
  - Fixed error with exception handler inside script class method (Thanks Anders "Dentoid" Stenberg)
- Library interface
  - Added Set/GetEngineProperty() that will allow you to dynamically changes some settings that previously required a recompilation of the library.
  - ALLOW_UNSAFE_REFERENCES is now an engine property instead of a compile time flag.
  - Removed some deprecated functions.
  - Added GetArgPointer() and GetReturnPointer() to asIScriptContext and asIScriptGeneric.
  - Removed the SetCommonObjectMemoryFunctions() from the script engine.
  - Added the global SetGlobalMemoryFunctions() and ResetGlobalMemoryFunctions().
  - Added SetUserData() and GetUserData() to the context interface (Thanks Steve Williams)
- Library
  - Fixed a lot of compiler warnings (Thanks Manu Evans)
  - All dynamically allocated memory now uses the memory functions registered with SetGlobalMemoryFunctions.
  - By changing the asCString implementation I was able to decrease the number of memory allocations by 15%.
- Script language
  - Deprecated the bits type. All bitwise operators are now performed on the uint type. There is no longer any bitwise conversion of float to uint.
  - Added the int64 and uint64 types.
  - The this keyword is now optional when accessing class members from within a class method.
  - Object constructors can now be used to perform implicit conversions in expressions.
- Virtual machine
  - New byte codes: i64TOi, uTOi64, iTOi64, fTOi64, dTOi64, fTOu64, dTOu64, i64TOf, u64TOf, i64TOd, u64TOd, NEGi64, INCi64, DECi64, BNOT64, ADDi64, SUBi64, MULi64, DIVi64, MODi64, BAND64, BOR64, BXOR64, BSLL64, BSRL64, BSRA64 CMPi64, CMPu64
- Project
  - Added as_memory.h, as_memory.cpp, and as_objectarray.h

## Version 2.7.1b - 2006/12/03

- Bug fixes
  - Save/load of bytecode followed by ExecuteString() that called one of the script functions failed during compilation. (Thanks coollofty)

## Version 2.7.1a - 2006/11/04

- Bug fixes
  - Constant bits8 and bits16 variables didn't work properly (Thanks Cheetah3d)

## Version 2.7.1 - 2006/11/02

- Bug fixes
  - Minor bug fix with an incorrect error message (Thanks Alraz)
  - Empty switch statements would crash the compiler (Thanks the_bateman)
  - Registering global properties didn't update a cache in compiled script modules, sometimes invalidating pointers (Thanks Anthony Rufrano, a.k.a "paradoxnj")
  - Fixed compiler differences for 64bit integer constants
  - Fixed some compiler asserts (Thanks Anders Hansson)
  - The index operator on handles to array objects didn't work (Thanks Anders Hansson)
  - The compiler would crash if a script class inherited from an undeclared type (Thanks Anders Hansson)
  - The compiler incorrectly reused temporary variables (Thanks MrC_XBMC)
- Library
  - The non-reserved tokens, any, from, and this, are now also defined in the as_tokendef.h file (Thanks Deyja)
  - Adjustments have been made to make the library indepentent of CPU memory layout of words. This if for PPC. (Thanks Edward Rudd)
  - Cleaned up as_config.h to make it easier to maintain
  - Changed compiler to do proper conversion between types of different sizes, for the sake of big-endian CPUs.
- Script language
  - Added the reserved keyword 'cast'
  - Support for dynamic casts between object handles with cast<type>(expr)
- Virtual machine
  - Added byte codes iTOb, iTOw, SetV1, and SetV2 to support big endian CPUs
  - Added byte code Cast for dynamic casts of object handles

## Version 2.7.0 - 2006/07/23

- Bug fixes
  - Fixed a problem with script classes and multiple modules where the engine failed to find the class methods (Thanks Dentoid)
  - Fixed bug where an assert fails when the operands for an assignment has compiler errors (Thanks Dentoid)
  - Parser entered endless loop if the script ended before closing the class declaration (Thanks Dentoid)
  - Parser entered endless loop if a method declaration had syntax error (Thanks kunitoki)
  - Fixed assert hit for some compiler errors (Thanks kunitoki)
  - Discard() would remove array types from the configuration, leading to failure in following builds (Thanks loboWu)
  - Fixed bug with the any type and AS_MAX_PORTABILITY
  - Fixed bug with AS_MAX_PORTABILITY and script classes that were not constructed properly
  - Fixed a bug with the bytecode optimization for 64bit processors
  - Fixed some bugs with the internal array object and AS_MAX_PORTABILITY and AS_64BIT_PTR
  - Fixed bug with null value and AS_64BIT_PTR
  - Fixed some bugs in the virtual machine on 64bit processors
  - Added check to see if script property has a size 0 (Thanks Maddi)
- Library interface
  - The engine methods GetMethodCount(), GetMethodIDByIndex(), GetMethodIDByName(), and GetMethodIDByDecl() were changed to take the typeId instead of the module name and object type name. This makes it unnecessary to know the module if you only have the type id, and it is also much more efficient.
  - Added methods RegisterInterface() and RegisterInterfaceMethod() that allow the application to register a script interface which can be passed to the application
  - Added method GetFunctionModule()
  - Deprecated the methods GetModuleIndex() and GetModuleNameFromIndex()
  - Added GetVarTypeId() to the context interface
  - Replaced SetCommonMessageStream() with SetMessageCallback() which is more flexible in that it receives a structure with info instead of a string
  - asIOutputStream is removed
  - Added asGetLibraryOptions() which returns a string with the compile time options. Mostly used for testing.
- Library
  - Applied changes to make the library work better with 64bit platforms (Thanks Yiannis Mandravellos)
  - Fixed a couple of compiler warnings (Thanks Alraz)
  - Added support for native calling conventions on MIPS processors. (Contribution by Manu Evans)
  - Added first support for native calling conventions on PPC processors. (Contribution by Pecan Heber)
  - Unified the way registered functions and script functions are stored in the engine
  - Improved performance of Prepare() when using the same function as last Prepare()
- Script language
  - Added new token 'interface'
  - Semi-colon after class declaration is now optional
  - It's now possible to declare interfaces in the scripts
  - Added support for the '\t' escape sequence in strings. (Thanks Lbas)
  - Deprecated the keyword 'struct' in the script language
- Virtual machine
  - Added bytecode CALLINTF which resolves interface methods to the real class method
- Project
  - Added as_callfunc_mips.cpp
  - Added as_callfunc_ppc.cpp

## Version 2.6.0 - 2006/04/08

- Bug fixes
  - Fixed a bug with RegisterGlobalProperty() (Thanks loboWu)
  - Type conversions may now be used in initialization of global variables. (Thanks iram)
- Script language
  - It's now possible to define class methods and constructors for the script declared structures. The definition of the method must be written inside the struct declaration.
  - The this keyword can be used to access the object and its members from within the class method. It's not yet possible to access the struct members without using the this keyword.
  - Added the keyword 'class' as synonym for 'struct'
  - For &inout parameter references the 'inout' keyword is now optional
  - Only object types that support object handles can now use the &inout parameter references. Other types must use &in or &out, unless AS_ALLOW_UNSAFE_REFERENCES is defined.
  - Added the reserved keyword: int64. Currently this is only used internally, but in time it will be a fully implemented primitive.
- Library interface
  - Removed the deprecated version of the Build() method.
  - Added SetArgAddress() and GetReturnAddress() methods to the context interface. These should be used to handle references
  - Added GetArgAddress() and SetReturnAddress() methods to the generic interface.
  - Changed AddScriptSection() to accept a size_t for the script length instead of int
  - Improved the way the [Set|Get][Arg|Return][Address|Object]() methods work.
  - Added the method SetObject() to the context for calling object methods
  - ExecuteString() now adds a line break after the given string. This allows for one-line comments to be used without producing an invalid script. (Thanks B_old)
  - Added the methods GetMethodCount(), GetMethodIDByIndex(), GetMethodIDByName(), and GetMethodIDByDecl() that should be used to obtain the function id for a script declared class method.
- Library
  - Fixed a lot but not all of the compiler warnings that MSVC8 reports for 64bit incompatibilities.
  - If native calling conventions are not supported for the target platform, then AS_MAX_PORTABILITY will automatically be defined to allow compilation of the library. (Thanks mandrav)
  - Added a new compiler flag AS_64BIT_PTR, which should be defined for 64bit platforms. Ideally the as_config.h file should automatically set the flag according to the target platform. When this flag is defined, all pointers will be stored in the bytecode as 64bit words.
  - Made improvements to better handle 64bit platforms

## Version 2.5.0c - 2006/02/16

- Bug fixes
  - Using named constants, i.e. variables declared and initialized with constants, would in certain situations give the wrong value. (Thanks Villemon)
  - Added null checks to fix memory access failure related to dynamic configurations. (Thanks mandrav)
- Project
  - Removed as_structs.h

## Version 2.5.0b - 2006/01/31

- Bug fixes
  - Comparison with object handle in a local variable produced incorrect byte code. (Thanks Villemon)
  - A bug in the VM for the BC_ChkNullV byte code caused script exceptions when using asCScriptString compiled with VC++ 2005. (Thanks topcatse)
  - When releasing the engine, the internal resources were released in the wrong order, causing assert failures in the memory manager with VC++ 2005.
  - The assignment operator for the internal type 'any' wasn't properly registered, causing memory management problems.
  - Global variables were not initialized properly when loading pre-compiled bytecode. (Thanks Villemon)

## Version 2.5.0a - 2006/01/20

- Bug fixes
  - Using assignment behaviours that took a reference as &inout with asALLOW_UNSAFE_REFERENCES would crash the application. (Thanks Deyja)
  - Using the default constructor for script structures to create temporary objects didn't work.

## Version 2.5.0 - 2006/01/12

- Bug fixes
  - asCALL_CDECL_OBJLAST that returned objects by value didn't work correctly (Thanks Deyja)
- Script language
  - Primitive types can be implicitly converted to a reference of another primitive type for function calls. This is something C++ doesn't accept.
  - Parameter reference specified as &inout no longer copies the value. The argument is only computed once. The function receives a reference to the true value. Expressions where the reference cannot be guaranteed during the execution of the function generates a compiler error. The value must then be copied to a local variable instead.
  - Added support for character literals.
- Library interface
  - Overloaded operators may now use &inout references. Since this type of references now guarantees a pointer to the true object this is useful if the operand has to be modified, e.g. a stream class.
  - Overloaded operators may now use &out references. The order of evaluation will change, but precedence order is kept.
  - Added functions to the asIScriptContext interface that allow the application to enumerate variables on the stack and examine their values. (Thanks Ivan Marinov)
- Library
  - A couple of minor code changes to make it easier to compile the library on Metrowerks CodeWarrior for NintendoDS (Thanks Fumihiro KanaYA)
  - The script compiler was changed to generate less copies of objects when doing function parameters by reference.
  - Added a new compile time flag: AS_ALLOW_UNSAFE_REFERENCES. When this is defined the library will allow parameter references without the in, out, or inout keywords. These parameters references will also work just like normal C++ parameter references, without any restrictions.
- Virtual Machine
  - The VM has been changed to use three op instructions instead of stack based instructions. In some situations the new VM is faster, in others it is about the same.
- Project
  - as_types.h was removed.

## Version 2.4.1e - 2006/02/04

- Bug fixes
  - When releasing the engine, the internal resources were released in the wrong order, causing assert failures in the memory manager with VC++ 2005.
  - The assignment operator for the internal type 'any' wasn't properly registered, causing memory management problems.
  - asCALL_CDECL_OBJLAST that returned objects by value didn't work correctly (Thanks Deyja)
  - Global variables were not initialized properly when loading pre-compiled bytecode. (Thanks Villemon)
  - Using the default constructor for script structures to create temporary objects didn't work.
  - Comparison with boolean values resulted in the value -1 instead of 1.

## Version 2.4.1d - 2005/12/09

- Bug fixes
  - The compiler didn't raise an error when doing an handle assignment where the lvalue was a normal object (Thanks Lbas)

## Version 2.4.1c - 2005/11/22

- Bug fixes
  - Overloaded indexing operators that take an object as parameter and returns a reference, crashed the application when compiling the script. (Thanks Desdemona)

## Version 2.4.1b - 2005/11/08

- Bug fixes
  - Chained expressions with overloaded operators and registered types could cause null pointer violations (continued) (Thanks __Avatar__)

## Version 2.4.1a - 2005/10/18

- Bug fixes
  - Registering global properties, after removing a config group with global properties, caused a null pointer violation. (Thanks DaesDemon)
  - An assert failed when initializing variables with a function that took reference parameters. (Thanks mandrav)
  - Chained expressions with overloaded operators and registered types could cause null pointer violations. (Thanks Anders Stenberg, a.k.a Dentoid)
  - Expressions with multiple levels of indirections (.) and object handles as arguments in each level, caused incorrect bytecode. (Thanks Vexorian)

## Version 2.4.1 - 2005/09/23

- Script language
  - Added support for heredoc string constants. (Thanks Ashish Ranjan)
  - Added support for array initialization lists.

## Version 2.4.0 - 2005/09/15

- Bug fixes
  - The bitwise negate operator, ~, now works with integer types as well, e.g. int and uint. (Thanks Suudy)
  - Save and load of compiled bytecode with script arrays now work. (Thanks Evgeny Efremov, a.k.a wolfenstein)
- Library interface
  - Added methods BeginConfigGroup(), EndConfigGroup(), and RemoveConfigGroup() for asIScriptEngine.
  - The engine no longer allow overriding the array types if they are already being used elsewhere.
  - All methods taking asUPtr as parameter was changed to take const asUPtr& instead, which ought to help avoid ESP problems that some people have encountered.
  - Added an optional namespace. Define the flag AS_USE_NAMESPACE when compiling to put the script engine in the namespace AngelScript.
  - Added a method SetCommonObjectMemoryFunctions() that allow the application to register an alloc()/free() function pair that will be used for all script objects.
  - asIBinaryStream was changed to use asUINT instead of int for the block size, and const void * instead of void * for Write().
  - Added a method SetCommonMessageStream(). The engine uses this output stream to output error messages when registering configurations, and also if the Build() method is called with a null pointer for the output stream. A second version of this method is available that takes a simple function pointer and an optional parameter, like a normal callback function.
  - Build() and ExecuteString() no longer takes a pointer to an asIOutputStream. The old version is still available by defining the flag AS_DEPRECATED.
  - Added method SetConfigGroupModuleAccess() which is used to set both default module access mode and individual module accesses.
- Script language
  - Constant variables that are initialized with a constant expression, can now be used as named constants in for example switch cases. (Thanks juhnu)
- Library
  - Changed the way the modules free global variables. Instead of a script function, it is now just a simple loop freeing each of the variables.
  - asBSTR is no longer used internally to store constant strings, asCString is used instead.
  - Converted the asCMap to template code.
  - The assembler VM was removed as it will no longer be possible to keep it compatible with the C++ VM.
- Project
  - Added as_configgroup.cpp and as_configgroup.h.
  - Removed as_map.cpp
  - Removed as_context_x86.cpp
  - Removed as_bstr_util.cpp and as_bstr_util.h.

## Version 2.3.0b - 2005/08/09

- Bug fixes
  - Parameters where freed before the returned reference was used, which caused errors if the reference pointed to one of the parameters. (Thanks Suudy)

## Version 2.3.0a - 2005/07/29

- Bug fixes
  - Structure definitions and function declarations where not order independent. (Thanks Carl Ådahl)
  - Added the old CreateContext() and GetGlobalVarPointer() as deprecated methods.
  - Fixed some more compiler warnings.

## Version 2.3.0 - 2005/07/14

- Bug fixes
  - RegisterGlobalProperty() for object handles wasn't working correctly, the wrong address was used by the VM.
  - The C interface for asIScriptGeneric wasn't declared correctly.
  - Fixed a few compiler warnings. (Thanks Rain Dog)
  - When calling methods on null handles, the application crashed with a memory access violation (Thanks Robert Manuszewski)
  - If accessing the elements of a script array handle, the compiler wrongly made the elements handles as well (Thanks Scott Dillman, a.k.a AlphaDog)
- Library interface
  - Added an interface to manipulate the any type, asIScriptAny.
  - Added an interface to manipulate script structures, asIScriptStruct.
  - Added an interface to manipulate script arrays, asIScriptArray.
  - Added methods GetTypeIdByDecl() and GetTypeDeclaration().
  - Added the method asIScriptEngine::CreateScriptObject() that allow the application to create objects from a type id.
  - Added the method asIScriptEngine::GetObjectsInGarbageCollectorCount() which can be used to finetune how often the GarbageCollect() is called.
  - Changed the asIScriptEngine::CreateContext() to return the context pointer instead of placing it in the parameter.
  - asIScriptEngine::GetGlobalVarPointer() now returns the pointer directly, instead of putting it in the argument.
  - Removed the deprecated asIScriptContext::ExecuteStep().
- Script language
  - New built-in type: any. This type will be able to hold any other type, as a generic container, though currently it can only hold object handles. It is possible to pass this type to the application.
- Library
  - Changed the implementation for asCGCObject, since it is not possible to use multiple inheritance with anonymous pointers.
  - Slimmed down the internal datatype representation, for the typeid feature.
- Virtual machine
  - A new bytecode TYPEID has been implemented.
  - The object types are now passed as pointers directly in the bytecode, instead of by index.
- Project
  - Added as_anyobject.h and as_anyobject.cpp

## Version 2.2.0 - 2005/06/08

- Script language
  - New reserved keyword: struct
  - The scripts can now declare and use structures.
  - The compiler now automatically converts objects to object handles, when it is obvious a handle is wanted, i.e. there will be less need to use the @ operator.
- Library interface
  - It is now possible to tell the library to automatically handle reference for handles passed to and from application functions. Simply add a + after the @. This makes it possible to pass handles to functions that do not call the release method before returning.
  - A new method GarbageCollect() has been implemented that will free unused script objects. For long running programs it is necessary to call this every now and then. It can do either a full cycle or just a small incremental step, depending on the needs of the application.
- Virtual machine
  - The bytecode now identifies object types locally to each module.
  - There is a new bytecode OBJTYPE that translates a local object type id to the engine's object type id.
- Library
  - Added a new preprocessor flag, AS_MAX_PORTABILITY, which removes all calls to assembler routines, which should make the library work on all platforms. In this mode, only asCALL_GENERIC can be used for application functions.
  - Changed the internal data type description class to be easier to work with. The intention is to allow the application to access this to get information about types for global variables, function declarations, etc.
  - Changed the implementation of the internal script array object to work more similar to the way script structures work.
- Project
  - New files: as_scriptstruct.cpp and as_scriptstruct.h
  - Added as_callfunc.cpp which implements the portable functions when AS_MAX_PORTABILITY is defined.
  - Added the files as_gcobject.h and as_gcobject.cpp

## Version 2.1.0c - 2005/05/26

- Bug fixes
  - When getting the function declaration the library didn't set the 'in', 'out', 'inout' flags for parameter references (Thanks Andrey Kraynov, a.k.a _Dreamer)
  - After loading precompiled bytecode script functions that took objects by handle couldn't be identified (Thanks Andrey Kraynov, a.k.a _Dreamer)

## Version 2.1.0b - 2005/04/25

- Bug fixes
  - The C interface wasn't exporting the functions. (Thanks Lars Peter Christiansen)
  - Variables of types int and uint of any size weren't implicitly converted to bits.
  - Uninitialized variables passed to &out parameters were incorrectly reported as uninitialized.
  - The compiler was accepting assignments of any type to objects with no registered assignment operator.

## Version 2.1.0a - 2005/04/11

- Bug fixes
  - The null pointer access in the compiler when matching function arguments was removed (Thanks Lennart Denninger)
  - The ?: operator was reusing temporary variables incorrectly.
  - The compiler failed to compile the boolean not operator for variables. (Thanks SharkBait)

## Version 2.1.0 - 2005/04/03

- Bug fixes
  - The line numbers reported by the VM were incorrect.
  - GetGlobalVarPointer() was returning a pointer to a pointer for registered object types. (Thanks Rain Dog)
  - Fixed a possible crash when calling AddScriptSection() with 0 for section name.
  - The operands for overloaded operators are now evaluated left-to-right.
  - Output parameters weren't working correctly for object methods (Thanks Mårten Svanfeldt, a.k.a thebolt00)
  - The engine failed when calling registered functions that received objects both by value and by reference (Thanks Lennart Denninger)
  - Registered object types without registered constructor couldn't be used to create temporary objects in expressions.
  - Global variables couldn't use overloaded assignment operators to initialize the variables.
  - Object properties declared as object handles were not handled correctly by the compiler.
  - Fixed a bug that crashed the application when compiling a function declared with a void parameter. (Thanks SharkBait)
  - Sending complex objects by value to class methods caused a crash on GNUC based compilers. (Thanks Torsten, a.k.a torsten_pf)
  - Passing objects by reference to constructors in declarations caused an assert failure. (Thanks Rain Dog)
- Script language
  - The script language now allows statements like: func(expr), where the function doesn't take any arguments and the expression evaluates to a void type. This is especially useful when using dynamically generating scripts where the expression type isn't known before hand.
  - Object variables and properties can be declared as const again
  - Properties of a const object are automatically const as well
  - When the object is const, the compiler doesn't allow non-const methods to be called
  - It is possible to take a handle for a const object, but it can only be assigned to a handle to a const object
  - The object held by a handle that is member of a const object, is not automatically const
  - An object handle that is member of a const object is also const
  - Const can be used for parameters again
- Virtual machine
  - The calling convention used by the script engine now passes the object pointer as the first parameter instead of the last.
  - GETOBJ was changed to read the offset from the stack instead of the address to the variable.
  - Added GETOBJREF and GETREF to handle parameter references.
  - Parameter references to overloaded operators are also protected by copying them to temporary variables.
  - Added SWAP48 and SWAP84 to swap two values of different bytesizes.
  - The compiler has been changed to output bytecode that don't keep unprotected pointers on the stack where they cannot be controlled. This will prove especially useful when I will later implement context serialization and co-routines.
  - Calling the constructors with arguments are now also protected by not pushing the object pointer on the stack before the arguments.
- Library interface
  - Implemented a C wrapper for the library. Compile the library with AS_C_INTERFACE to use it.
  - Added a dummy array in asUPtr to make the size equal on all compilers (even when the C++ interface is disabled)
  - Added SetLineCallback()/ClearLineCallback() to the context interface. These should be used instead of ExecuteStep() to control how much is executed each frame.
  - Added SetExceptionCallback()/ClearExceptionCallback() to the context interface. These methods can be used for debugging purposes and allow the application to examine the callstack when an exception is raised.
  - Added GetCallstackSize() and GetCallstackFunction() to the context interface.
  - Added the possibility to turn off support for registering class methods. Compile the library with AS_NO_CLASS_METHODS. This can be used on compilers where class methods don't currently work.
  - Added GetFunctionSection() to the engine interface.
  - ExecuteStep() is now a deprecated method. Use the line callback method instead, which is much more flexible.
  - Added GetCallstackLineNumber() to the context interface.
  - All methods that return line numbers can now optionally return column number as well.
  - Added the asCALL_GENERIC flag for functions using the generic calling convention.
  - Added a new asIScriptGeneric interface for handling generic functions.
  - Added GetObject() to the generic interface, that will return the object pointer when a method function using the generic calling convention is called.
  - Added GetArgDWord(), GetArgQWord(), GetArgFloat(), GetArgDouble(), and GetArgObject() to the generic interface.
  - Added SetReturnDWord(), SetReturnQWord(), SetReturnFloat(), SetReturnDouble(), and SetReturnObject() to the generic interface.
  - Added two new behaviours asBEHAVE_ALLOC and asBEHAVE_FREE, that can be used to register custom memory allocation functions for an object type.
  - Overloaded operators have been limited to only allow parameter references marked as 'in' (non-references are still allowed). This means that you cannot rely on that you receive a reference to the actual operand, as it might be a copy.
  - The extra call to addref/release for the object pointer when calling class methods has been removed. The responsibility of making sure the pointer is valid during the call has been moved to the application.
  - RegisterObjectType() now returns asALREADY_REGISTERED if name has already been registered as a type. (Suggestion by Adrian Licu)
  - It is now possible to declare object methods as const, so that they can be called for constant objects. Ex: "void GetVal() const"
  - Const overloading is now available for object behaviours and methods, i.e. if the object is const then the const version will be used, otherwise the non-const version will be used.
  - AddScriptSection() now has an extra parameter that can be used to tell the library not to make a copy of the script code, and instead use the original pointer directly. (Thanks Adrian Licu)
  - A new method ResetModule() was added to the engine. This can be used to reset the value of global variables for a module.
- Project
  - Added as_generic.cpp and as_generic.h with the interface for generic functions.
  - Removed the #include <memory.h> from the angelscript.h file.
  - Added as_c.cpp with the C wrapper functions.

## Version 2.0.0a - 2005/01/31

- Bug fixes
  - GetCurrentFunction() and GetExceptionFunction() didn't return the function ID with the module index, affecting applications that were using module bindings (Thanks Tomas Stepanek)
  - The library crashed when trying to register a function that used a handle to a type that had no addref/release behaviours registered (Thanks Adrian Licu)
  - It wasn't possible to return null in a function which return type is a handle (Thanks Adrian Licu)
  - Passing object handles by value to application functions could cause a crash (Thanks Adrian Licu)
  - Fixed a minor memory leak when RegisterGlobalFunction() failed.

## Version 2.0.0 - 2005/01/23

- Bug fixes
  - GNUC: Classes with destructors can now be sent by value to system functions
  - The compiler failed to successfully parse/compile temporary array constructors, e.g. int[](3).
  - On GCC/Linux all classes/structs are returned in memory regardless of size, complexity, or calling convention. (Thanks Fredrik Ehnbom)
  - Some compilers complained about the negative array size in the template code that is never instanciated. The code was commented.
  - Overloaded assignment operators that take types other than the target can now be used in initializations. (Thanks Alan Kemp)
  - asGetActiveContext() would cause an assert failure if called when no context was active. (Thanks Chee Chong Tay, a.k.a Iram)
  - It was not possible to register arrays of registered types. (Thanks Tomas Stepanek)
- Library interface
  - Removed deprecated functionality
  - Removed the flag asOBJ_GUESS for RegisterObjectType().
  - Removed the macros asFUNCTIONP() and asMETHODP().
  - Removed GetReturnValue()
  - Added GetReturnDWord(), GetReturnQWord(), GetReturnFloat(), GetReturnDouble(), and GetReturnObject()
  - Removed SetArguments()
  - Added SetArgDWord(), SetArgQWord(), SetArgFloat(), SetArgDouble(), SetArgObject()
  - Protected destructors have been added to the interfaces so that the application doesn't call them by mistake (thanks Dan "Aggrav8d" Royer)
  - Function declarations with arguments by ref must use the in, out, or inout flags
  - Added the behaviours ADDREF and RELEASE that will be used by object handles to do memory management
  - New context state: asEXECUTION_ERROR, that is set if one of the SetArg...() functions failed.
- Script language
  - Removed the pointer type modifier
  - Removed the -> operator
  - In declarations the array brackets are now part of the type, i.e. for "int[] a, b;" both a and b are arrays
  - Arrays can now be resized by using the method resize().
  - Parameter references are now protected by copying the value into a temporary variable when calling the function, and then copying the temporary variable back to the original location when the function returns. The expression is computed twice for in/out references.
  - Function parameters by reference should use the flags in, out, or inout to allow the compiler to optimize the use of the parameters.
  - Added the object handle type modifier so that object handles can be declared. The token @ is used so as not to confuse it with C++ pointers or references.
  - Added the null keyword for object handles.
  - const is now only available for variable and property declarations, and only for primitive types. This change was made for consistency and because the script language was not able to guarantee that an object isn't changed by object methods.
  - Arrays have been limited to only allow four dimensions
- Virtual machine
  - Removed the bytecode ADDOFF
  - Objects are stored in dynamically allocated memory. A pointer to the memory is stored on the stack
  - Created ALLOC/FREE instructions for allocating and freeing the objects
  - Objects are returned in a register
  - Created LOADOBJ/STOREOBJ that moves an object pointer from a variable into the object register, and vice versa
  - Created GETOBJ which moves an object pointer from a reference to the stack, overwriting the reference
  - Removed END and PEID.
  - Simplified the exception handler to free objects based only on their position on the stack
  - A script function receives an object by value and by ref the same way. The difference is if the function is the owner of the object or not.
  - Added REFCPY to support reference assignments for object handles
  - Added CHKREF to validate object handles when used as normal objects
  - Added the bytecodes RD1 and RD2 to fix alignment problems on CPUs that requires data to be aligned.
  - The VM keeps a reference to the object when calling a method, to protect the object from being released before the method returns.
- Library
  - The library was made to work with Dreamcast once more. (Thanks Fredrik Ehnbom)
  - The compile time flag BUILD_WITH_LINE_CUES was replaced with BUILD_WITHOUT_LINE_CUES. This flag is not defined by default making ExecuteStep() work as specified, but for those that do not use this function the performance may be increased a little by specifying this flag when compiling the library.