﻿Sqrat - Squirrel Binding Utility
(c) 2009 Brandon Jones
Version 0.8.2

=== Version History ===

0.8.2   (04/04/2012)
    * Minor documentation update
    
0.8.1.91 (04/01/2012)
    * note for Sourceforge Bug 3507590, documenting the limitations regarding 
      calling sq_suspendvm() from C++ functions exposed to Squirrel, suggested
      by firestar in the forum
    * fix for Sourceforge bug 3426584, maintaining strong reference to the 
      string value of the Var<SQChar*> struct (atai)
    * extending the number of arguments supported in overloaded member methods 
      to 14, in line with the rest of Sqrat (atai)
    * memory leak in Script compile and run fix; properly track object lifetime 
      by maintaining strong references from the Script class; based on 
      suggestion by Marius C in the Squirrel forum and Lican in sourceforge 
      fix for Sourceforge Bugs 3489212 and 3507596
    * fix from Alberto and thaumaturgist on the Squirrel forum; for 
      handling missing member varialbes in Squirrel 3.x
    * patch from pjcabrera, compile and run functions without throwing 
      exception but returning errors via an out string parameter
    
0.8.1.90 (10/21/2011)
    * supporting up to 14 function arguments, with a new unit test (old limit was 9) (atai)
    * sqratimport works for importing scripts on GNU/Linux (and likely other Unix-like systems) (atai)
    * patch from Nimrof; change Visual C++ project files default encoding from Unicode to multi-byte
    * patch from ejulien in the forum; throws an error when no overload exists
    * patch from wayfarer99 (Alston Chen), multiple VMs with class binding fix
    * patch from wayfarer99 (Alston Chen), new feature: sqratArray additions and bug fixes
    * patch from Nimrof, to make sqrat work with both Squirrel 2.0 and 3.0; Squirrel 3.0 before 3.0.1 requires user to define -DSQUIRREL_VERSION_NUMBER=300
    * build and run shell scripts for the unit tests on Unix-like systems (atai)
    * optional autotools support in a single subdirectory so people can use autotools to build and to run the unit tests and to install sqrat header files if desired (atai); note this assumes squirrel is installed in /usr/local/   

0.8.1 (09/23/2009)
 * Fixed heap corruption when binding enumerations (needed an addref)
 * Fixed disambiguation issue when overloading with const member functions
 * Made C++ object variable initialization more consistent (emeyex)
 * Added a NoCopy allocator (emeyex) 

0.8 (09/20/2009)
 * Function overloading now available for classes and tables
 * Added ErrorHandling static settings object to enable or disable error handling (true by defualt)
 * Added Module Import library
 * Added Threading Utility module
	* Thread Scheduling
	* Sleep
	* Get Current Thread
 * GCC Compatibility updates (suggested by Nimrof)
 * 64 bit project setting updates
 * Cleaned up unit tests. None of them print to console now unless there is an error. Makes output more readable and identifying problems faster.
 * Changed unit test STREQ/STRNE bindings to STR_EQ/STR_NE to be more consistent with int and float checks.
 * Additional variations of Property bindings to allow for more flexible get/set definitions
 * Implemented weakref for Sqrat-bound classes (suggested by emeyex)
 * Fixed several issues with Sqrat bindings not properly cleaning up the stack (code provided by emeyex)
	* Changed all instances of sq_pop(v, -1) to sq_pop(v, 1). The effects of -1 are undocumented.
	* Added appropriate pops to Function::Evaluate and Function::Execute.
	  from the sq docs for sq_call:
	  "the function pops all the parameters and leave the closure in the stack; if retval is true the return value of the closure is pushed"
	  so I added one to the sq_pop for all Evaluate() calls, and added sq_pop(vm, 1) for all Execute() calls
	  i.e., need to pop 1 for the closure (always), and 1 for the return value if specified
	* Added appropriate pops to string Var classes.
	  from the sq docs for sq_tostring:
	  "converts the object at position idx in the stack to string and pushes the resulting string in the stack"
	  so needed to add calls to sq_pop(vm,1) after all sq_tostring + sq_getstring sequences
	* Added appropriate pops to class and derived class.
	
 

0.7.1 (07/12/2009)
 * Restructured Function object to facilitate passing Functions as arguments
 * Added Function usage unit tests

0.7 (07/10/2009)
 * Added Script objects to help compile and run scripts
 * Added Properties to Class binding. Allows squirrel to access variables through a getter and setter
 * Corrections and improvements from kanryu to help with Stack Management and Table abstraction
 * Started building Unit tests for Sqrat to serve as "Real world" code examples and as a safeguard against breaking changes
	* Built using the GoogleTest framework
	* Included project file for MSVC 2005
	* The following tests have been implemented:
		- Script Loading
		- Table Binding
		- Class Binding
		- Derived Class Binding
		- Class Instances
		- Class Properties
 * Corrected an issue with Tables not adding references when needed
 * Corrected issue with Derived Classes not recognizing the Default VM 

0.6 (05/21/2009)
 * Small bugfix release to get Sqrat compatible with GCC

0.5 (05/18/2009)
 * Renamed library to 'Sqrat' (now with 100% more 'sq'!)
 * Changed revision number scheme. Will now be simply major.minor 
 * Added Constants and Enumerations (See "Using Sqrat" for details)
 * Moved all files up one directory, from "<sqrat root>/include/scrat" to "<sqrat root>/include"
 * Fixed TypeWrapper issue with Object.Cast
 * Changed how Functions are retrieved. Now you call Table.GetFunction<returnType>("FunctionName")
 * Updated variable get/set routines. Should be a little more lightweight now and responds correctly to std::string&
 * Added support for default Virtual Machines (cuts down on repetitive code while leaving customization open)
 * Converted Usage documents to HTML for easier reading

0.0.4 (05/12/2009)
 * Corrected issue with some types being statically defined as unicode versions (ie: wstring)
 * Added a Scrat::string typedef for ease of use/development in unicode and ASCII (typedef-ed as std::basic_string< SQChar >)
 * Added SquirrelFunc to Class. Allows for binding of unmanaged SQFUNCTION methods. (ported from Table)
 * Added LastErrorString function - returns the last Squirrel Error as a Scrat::string. String is empty if no error
 * Corrected an issue with tables and classes attempting to release their internal objects too early
 * Fixed ambiguous function resolution problem with function calls returning void

0.0.3 (05/09/2009)
 * More updates to class get/set routines
 * Fixed issue with conflicting class templates (moved static class members into their own type)
 * Renamed "NativeManaged" allocator to "NoConstructor" (made more sense)
 * Various other bugfixes

0.0.2 (05/06/2009)
 * Increased possible variable count to 9 for all function bindings and calls
 * Corrected issue where Object.Cast wouldn't convert types properly
 * Updated documentation a bit

0.0.1 (05/05/2009)
 * Initial Release