http://wiki.squirrel-lang.org/default.aspx/SquirrelWiki/SqPlus.html
1. Integrated the latest remote debugger code.
2. Added automated support for arbitrary class/struct script arguments.
3. Changed constant() defs to use values at bind time (as opposed to addresses). Old style behavior supported with staticVar() and read-only flag.
4. Removed global*() for class defs: static*() makes more sense, and global*() was duplicating code.
5. Added UserPointer (void *) support to allow arbitrary objects to be passed from C/C++ to script. This differs from (2) above as the type is never directly exposed to script (for example, I use this system to pass sound effects objects to C/C++ code).
6. Code cleaned up/simplified.
7. Rewriting the code to support (OS) multithreaded script may be a future update. For now, changing the global VM pointer should be sufficient to handle multiple VMs (but not multithreaded). A simplification/optimization would be to remove all VM args and always use SquirrelVM::GetVMPtr(). Passing the VM to every function appears to only benefit an (OS) multithreaded script application.
New example code (see testSqPlus2.cpp for more information):
#define SQ_10 10
#define SQ_E 2.71828182845904523536f
#define SQ_PI 3.14159265358979323846264338327950288f
#define SQ_CONST_STRING "A constant string"
const int intConstant = 7;
const float floatConstant = 8.765f;
const bool boolConstant = true;
SQClassDef<Vector3>("Vector3").
var(&Vector3::x,"x").
var(&Vector3::y,"y").
var(&Vector3::z,"z").
func(Vector3::Inc,"Inc").
staticFunc(Add2,"Add2").
staticFuncVarArgs(Add,"Add").
#if 1
staticVar(&Vector3::staticVar,"staticVar").
#else
staticVar(&Vector3::staticVar,"staticVar",VAR_ACCESS_READ_ONLY). // Use this method for a read-only var.
#endif
staticVar(&globalVar,"globalVar").
constant(SQ_10,"SQ_10").
constant(SQ_E,"SQ_E").
constant(SQ_PI,"SQ_PI").
constant(SQ_CONST_STRING,"SQ_CONST_STRING").
constant((int)SQ_ENUM_TEST,"SQ_ENUM_TEST").
constant(intConstant,"intConstant").
constant(floatConstant,"floatConstant").
constant(true,"boolTrue").
constant(false,"boolFalse").
constant(boolConstant,"boolConstant");
#endif
BindConstant(SQ_PI*2,"SQ_PI_2");
BindConstant(SQ_10*2,"SQ_10_2");
BindConstant("Global String","GLOBAL_STRING");
John