Work in progressYou can always find the latest version of AngelScript in the SVN on SourceForge.net. There you can browse the repository online and download a tarball with all the code for revision of choice.
If you prefer to use an SVN client to download the code, point your client to the following address:
Version 2.30.1 WIP - 2015/04/25
- Bug fixes
- Fixed bug in compiler when using compound assignment on virtual property on temporary variable (Thanks Violet CLM)
- Compiler no longer gives error when access global variable in global namespace from class in namespace (Thanks Sir Ementaler)
- Fixed bug with compiler accepting null handle in initialization lists that didn't support it (Thanks Phong Ba)
- Parser properly handles template type and non-template type of same name in different namespaces (Thanks Polyák István)
- Fixed problem with ternary conditions returning references to global variables (Thanks Jonathan Sandusky)
- Fixed bug with opIndex when global variable had same name as datatype in a different namespace (Thanks dkrusu)
- Saving bytecode that used templates with multiple subtypes is now working properly (Thanks Phong Ba)
- Fixed assert failure in compiler when creating delegate from temporary object (Thanks Solokiller)
- It is now possible to register member properties as references if the member should be dereferenced before access (Thanks cvet)
- Virtual machine
- Implemented asBC_Thiscall1 for faster calls to class methods that take an int argument and return a reference
- Fixed memory leak in serializer when using extra objects
- Fixed bug in serializer with incorrect refcount on registered types when restoring the script object that references them
- Serializer attempted to backup non-pod types that had no user type registered with bitwise copy potentially causing errors
- Added GetBuffer to the CScriptArray object (Thanks Solokiller)
- Added GetRef to the CScriptHandle (Thanks zerochen)
- Added formatUInt for strings (Thanks iraxef)
- Included asserts in CScriptAny to detect improper usage from application (Thanks Solokiller)
- Script array is now constructed even if the current script context has a script exception set (Thanks iraxef)
- None at the moment
Known portability issues
I'll need the community's help to fix these, as I do not have access to all of the different development environments needed.
- 2012/06/11 - 64bit integer arguments are not supported for native functions on XBox 360. status: needs changes
- 2012/08/23 - Android on MIPS doesn't support native functions status: needs changes
- 2012/12/14 - Linux with MIPS doesn't support native functions. Reported by Andris. status: needs investigation
- 2013/02/07 - C++ Builder and Win64 doesn't support native functions status: needs changes
- 2013/02/11 - Linker failure on Linux when trying to build shared object library. status: needs investigation
- 2013/08/11 - Passing std::string by value to app function in debug mode on MSVC2010+ and x86 can cause crash due to the string holding a back-pointer to original location. status: needs changes
- 2013/10/31 - 64bit ARM doesn't support native calling conventions. 2nd thread. status: needs implementation
- 2013/11/22 - Borland C++ Builder 6.00 issues. status: needs changes
- 2014/01/05 - Native calling conventions doesn't work on Windows Phone 8. status: needs investigation
- 2014/01/21 - Dead-code-stripping doesn't work on 32bit MacOS status: needs investigation
- 2014/02/16 - Crash in CallCDeclFuction on 32bit Mac with XCode 5 and OS 10.9. status: needs investigation
- 2014/06/03 - Throwing exception from application causes seg fault on Linux Arm with softfp status: confirmed. needs investigation on to fix
Changes planned for later versions
You're always welcome to send me your comments on current and/or upcoming features. Your feedback is very important for my planning and prioritization of already planned feature.
Planned for 2.30.1
- Add support for Linux with MIPS
- add support for using constructor while performing implicit conversion
- Must be possible to use asOBJ_GC for value types, e.g. the CScriptHandle can indirectly form circular reference with an object
- Study possible improvements with asEP_DISALLOW_VALUE_ASSIGN_FOR_REF_TYPE
- Improve support for nested namespaces
- Loading pre-compiled bytecode should verify the access masks too
- Optimization opportunity
- Implement the TODO's in the debugger add-on
- Allow registering function by request from script and have it prepared without new compilation
Planned for 2.31.0
- Evaluate possibility of having a compiler callback to allow application to verify if function calls should be allowed for specific types when having variable arguments. Should the callback be global? Or should I have a callback for each registered function? Callback must be called when loading bytecode too
- Evaluate possibility of a compiler callback to allow application to determine if a type can be stored in a specific way (e.g. as global variable, as local variable, as class member, by value or by handle).
- Evaluate possibility of implementing allocatable user data ids (suggestion by Brian Ellis)
- Interface: expose methods to get where functions, object types, and global variables were declared
- Include templated typeof add-on. A built-in typeof function is not necessary, since the expression should be evaluated anyway, especially for polymorphic objects that needs to be evaluated at runtime to get the true type.
- Add engine property to disable garbage collector (at the risk of memory leaks)
Before each release
- Platform compatibility tests
- Test with AS_MAX_PORTABILITY
- Test with AS_NO_COMPILER
- Test with valgrind on Linux
Long term goals for 3.0.0
- Redesign the import feature. Use of BindImportedFunction should be removed.
- Remove use of @. All ref types should be treated as handles implicitly, similar to Java. (This is not completely decided upon)
- Change script language parameter references to simplify syntax.
- Change to caller owns object handles.
- TypeId and asIObjectType should be removed. asITypeInfo should be introduced instead.
- Remove the syntax for declaring dynamic array types, i.e. int arr;. Dynamic arrays should be declared as the template type, e.g. array<int> arr;. Static arrays (when implemented) should still be declared with int arr;