Browse Source

Add VS2013 debug natvis. Update changelog format.

Greg 8 years ago
parent
commit
f0689c09bc
2 changed files with 387 additions and 308 deletions
  1. 73 0
      gmsrc/EditorHighlighters/MSVC/gmscript.natvis
  2. 314 308
      gmsrc/doc/ChangeLog.txt

+ 73 - 0
gmsrc/EditorHighlighters/MSVC/gmscript.natvis

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+
+  <Type Name="gmMachine">
+    <DisplayString>{{CurrentMemoryUsage = {m_currentMemoryUsage,d}}}</DisplayString>
+    <Expand>
+      <Item Name="CurrentMemoryUsage">m_currentMemoryUsage</Item>
+      <Item Name="HardMemoryLimit">m_desiredByteMemoryUsageHard</Item>
+      <Item Name="SoftMemoryLimit">m_desiredByteMemoryUsageSoft</Item>
+      <Item Name="AutoSizeMemory">m_autoMem</Item>
+      <Item Name="GC_FullCollects">m_statsGCFullCollect</Item>
+      <Item Name="GC_IncrementalCollects">m_statsGCIncCollect</Item>
+      <Item Name="GC_Warnings">m_statsGCWarnings,d</Item>
+    </Expand>
+  </Type>
+
+  <Type Name="gmThread">
+    <DisplayString>{{this = ( {m_stack[m_base - 2]} )}}</DisplayString>
+    <Expand>
+      <ArrayItems>
+        <Size>m_numParameters</Size>
+        <ValuePointer>((gmVariable*)(m_stack+m_base))</ValuePointer>
+      </ArrayItems>
+    </Expand>
+  </Type>
+
+  <Type Name="gmVariable">
+    <DisplayString Condition="m_type == 0">{{null}}</DisplayString>
+    <DisplayString Condition="m_type == 1">{{int = {m_value.m_int}}}</DisplayString>
+    <DisplayString Condition="m_type == 2">{{float = {m_value.m_float}}}</DisplayString>
+    <DisplayString Condition="m_type == 3">{{string = {((gmStringObject *)m_value.m_ref)->m_string,s}}}</DisplayString>
+    <DisplayString Condition="m_type == 4">{{table[{((gmTableObject*)m_value.m_ref)->m_slotsUsed}]}}</DisplayString>
+    <DisplayString Condition="(m_type == 5) &amp;&amp; (((gmFunctionObject*)m_value.m_ref)->m_cFunction != 0)">{{function(native) = {((gmFunctionObject*)m_value.m_ref)->m_cFunction}}}</DisplayString>	
+    <DisplayString Condition="(m_type == 5) &amp;&amp; (((gmFunctionObject*)m_value.m_ref)->m_cFunction == 0) &amp;&amp; (((gmFunctionObject*)m_value.m_ref)->m_debugInfo != nullptr)">{{function(script) = {((gmFunctionObject*)m_value.m_ref)->m_debugInfo->m_debugName,s}}}</DisplayString>
+    <DisplayString Condition="(m_type == 5) &amp;&amp; (((gmFunctionObject*)m_value.m_ref)->m_cFunction == 0) &amp;&amp; (((gmFunctionObject*)m_value.m_ref)->m_debugInfo == nullptr)">{{function = [no debug name, use gmMachine::SetDebugMode(true)]}}}</DisplayString>
+    <DisplayString Condition="m_type &gt;= 6">{{user = {m_type}}}</DisplayString>
+    <Expand>
+      <Item Condition="m_type == 0" Name="null:">"null"</Item>
+      <Item Condition="m_type == 1" Name="int:">m_value.m_int</Item>
+      <Item Condition="m_type == 2" Name="float:">m_value.m_float</Item>
+      <Item Condition="m_type == 3" Name="string:">((gmStringObject*)m_value.m_ref)->m_string,s</Item>
+      <Item Condition="m_type == 4" Name="table:">((gmTableObject*)m_value.m_ref)</Item>
+      <Item Condition="m_type == 5" Name="function:">((gmFunctionObject*)m_value.m_ref)</Item>
+      <Item Condition="m_type &gt;= 6" Name="user:">((gmUserObject*)m_value.m_ref)</Item>
+    </Expand>
+  </Type>
+
+  <Type Name="gmTableNode">
+    <DisplayString>{{({m_key} , {m_value})}}</DisplayString>
+    <Expand>
+      <Item Name="Key">m_key</Item>
+      <Item Name="Value">m_value</Item>
+    </Expand>
+  </Type>
+
+  <Type Name="gmTableObject">
+    <DisplayString>{{table[{m_slotsUsed}]}}</DisplayString>
+    <Expand>
+      <Item Name="Size">m_slotsUsed</Item>
+      <IndexListItems>
+        <Size>m_tableSize</Size>
+        <ValueNode Condition="m_nodes[$i].m_key.m_type != 0">m_nodes[$i]</ValueNode>
+        <ValueNode Condition="m_nodes[$i].m_key.m_type == 0">"unused slot"</ValueNode> <!-- Want to hide these -->
+      </IndexListItems>
+    </Expand>
+  </Type>
+
+  <Type Name="gmStringObject">
+    <DisplayString>{{string = {m_string}}}</DisplayString>
+  </Type>
+
+</AutoVisualizer>

+ 314 - 308
gmsrc/doc/ChangeLog.txt

@@ -2,423 +2,429 @@
 GameMonkey Script Change Log
 GameMonkey Script Change Log
 
 
 Newer entries are at the bottom.
 Newer entries are at the bottom.
-Dates are dd/mm/yy
+Dates are DD-Mon-YYYY eg. 15 Apr 2013 
 
 
 Note that very minor changes like a renamed variable or 
 Note that very minor changes like a renamed variable or 
 modified comment may not appear in this list.
 modified comment may not appear in this list.
 -----------------------------------------------------------
 -----------------------------------------------------------
 
 
+22 Dec 2017
+o Fix some type casts. 
+o Integrate some changes from DrEvil's gmscripex.
+o Add VS2013 native visualizer debug expansion script based on DrEvil's VS2010 version.
+o Update changelog to be more readable with recent entries first and unambiguous dates.
 
 
-22/12/03
-o Package 1.0 ready for public release.
+22 Nov 2017
+o Updated code and some projects to build with MSVC 2017.
+o Removed older projects and solutions for GME at least.
+o Fixed code to support 32 and 64 bit gmint, gmfloat types.
+  GM files and binds, GME and GML updated and tested only.
 
 
-02/01/04
-o Updated script reference doc with system functions, compiler string concat and other.
+13 Jul 2015
+o Fix 64bit related. Thanks palota.
 
 
-08/01/04
-o Fixed filename case mismatch between filenames and #includes for Unix and other platform.
-o Renamed and modifed gmNetwork to NetClient and NetServer as they are not gm files.
-o Modified GMD project to show gmDebugger in gm file set and use Win32 #defs for windows specific parts.
-o Removed memory display from snake.gm
-o Added sample script descriptions file.
-o Removed GM_MAX() and GM_MIN() macros and replaced with template versions in gmUtil
-o Added gmLog2ge function as faster version of gmHighestBit, and changed gmArraySimple and gmArrayComplex to suit.
-o Fixed buffer overrun bug with gmVariable::AsString function.
-o Removed all warning level 4 warnings bar the warnings generated from flex and bison files.
-o Added GM_VERSION #define to gmMachine.h.  first version @ "1.1".  added gmVersion script binding.
-o Changed some #ifdef DEBUG to #ifdef GM_DEBUG_BUILD
+19 May 2014
+o Fix EndOn bug reported by Korrion
 
 
-09/01/04
-o Added constant folding for ints and floats
-o Added +=, -=, *=, /= etc.  Some more optimisation is required on this to avoid reavaluation of complex l-value.
+18 May 2013
+o Reordered GC descruction sequence to avoid Write Barrier mis-fire.
 
 
-10/01/04
-o Added threadKillAll() binding to allow termination of all threads.
-o Added threadIds() binding to allow access to all threads.
-o Modified BomberRun.gm to allow exit from main menu.
+09 Jun 2012
+o Add back ++,-- pre inc, dec operators (Experimental, code restored from v0.9)
 
 
-16/01/04
-o Added Minimal code to use GM example.
+12 May 2012
+o Fixed Fork stack growth bug. Thanks funkbot.
 
 
-18/01/04
-o Fixed bug in string operator not.  Incorrectly returned true instead of false.
+10 Feb 2012
+o Added experimental project gmddotnet (gmDebuggerNet) which is gmd ported to C# .Net from C++ MFC.
+  This was simply an experiment, this example debugger is as identically terrible as the original version.
 
 
-23/01/04
-o Modified copyright message to be 'GameMonkey Script' as that is the full name.
+13 Jan 2012
+o Improved syntactical sugar for functions. Thanks HenryTran.
 
 
-25/01/04
-o Added GameObject example code.
+7 Oct 2011
+o Fixed GC (Another attempt)
 
 
-07/02/04
-o Remove GM_ASSERT from macro GM_CHECK_FLOAT_PARAM.  Was probably left in from some previous debugging.
+4 Oct 2011
+o Fixed GC tricolor invariance wasn't preserved with local object transfer of ownership.
 
 
-20/02/04
-o gmMachine::Get/SetDesiredByteMemoryUsage() removed and replaced with Get/SetDesiredByteMemoryUsageHard() and Get/SetDesiredByteMemoryUsageSoft().
-o Changed behaviour of gmMachine::SetDesiredByteMemoryUsage***(). No longer sets auto-memory to false, also does not have auto-memory parameter.
-o New incremental garbage collection logic to govern the inc GC system.
-o New GC stats functions: TODO
-o Set gmConfig.h to use incremental GC by default.  Was using atomic GC.
-o Renamed machine bound function threadIds() to threadAllIds() to make it more different from threadId() and more consistent with other naming.
+3 Oct 2011
+o Fixed GC root scan to ignore persistent objects.
 
 
-21/02/04
-o Added paranoid check code to Incremental GC.
-o Fixed serious bug in gmTable with IncGC that caused deleted 'values' to go through write barrier.
-o Added Sleep(0) to WIN32 build of GME to improve windows performance which otherwise suffers from unyielding threads.
+2 Oct 2011
+o Fixed GC root scan. (PS. Failed attempt)
+o Increased GMTHREAD_MAXBYTESIZE to allow samples to run in 64bit
+o Fixed gmTable 64bit gmVariable equality test.
+o Fixed byte code generator. 64bit was mixing 32 and 64 bit patched addresses.
 
 
-26/02/04
-o Changed strtol to strtoul in gmParser.y to convert hex and binary numbers to unsigned ints causing them to not be truncated.  They will appear as full signed ints rather than be clipped to 0-2b range.
+29 Jun 2011
+o Add 64bit MSVC build configurations for GME
 
 
-03/03/04
-o Fixed bug in gmCodeGen.cpp The array container could resize causing pointers to become invalid.  List is now used to hold function pointers.
+17 Jun 2011
+o Fixed gmMachine::GetTypeId(), invalid string returned. Thanks Tiok.
+o Changed project and workspaces from MSVC 8 (2005) to MSVC 10 (2010 SP1)
+  To compile the Windows based examples & utils, you will need at least 'MS Visual C++ 2010 Express SP1' freely downloadable from Microsoft.
+  To run the Windows examples you will need VC10 compatible runtimes installed, The '.Net Framework' redistributables or 'Windows Update' will provide these.
+  (Left VC6 and VC8 projects and workspaces in for now.  Debugger still relies on MFC which is not supported by 2005 Express edition.)
+o Changed #define in MSVC platform file to _M_X64 which is correct 64bit build macro. Also renamed another misspelled macro.
 
 
-06/03/04
-o Generate code target to big/little endian regardless of source platform.
+16 Aug 2010
+o Added syntactical sugar for functions.  'function <name>(<parms>){<statements>}' Thanks 39ster.
 
 
-09/03/04
-o Modified gmMachine::CollectGarbage() AND binding sysCollectGarbage() to take a optional parameter to perform force full collection.
-o Improved VM GC logic so garbage collector will always free memory when it has the chance after a collect cycle.
-o Added sysSetDesiredMemoryUsageAuto() binding to enable auto adjust of memory limits (used to be flag in old set memory limit functions).
+09 Jul 2010
+o Updated code base for 64bit address target. (64bit builds of current binaries not made or tested yet.) 
+o Updated system lib for 64bit Win OS compatibility.
 
 
-11/03/04
-o Fixed excess memory bug in gmCodeGen.cpp as result of previous bug fix.
-o Improved VM GC logic so garbage collector auto sizes soft and hard limits better, but realize logic is still poor as long as only soft limit is exceeded.
+27 May 2010
+o Improved Minimal example.  Not all errors were logged. Also enabled debug mode. Thanks xaxa.
 
 
-01/04/04
-o Fixed gmRandomFloat to use RAND_MAX instead of 65535.  Effects some platforms as these were not equivalent.
+15 Mar 2010
+o Fix GC auto calibration. Thanks DrEvil.
 
 
-21/04/04
-o Improved gmThread::Param(), returns reference to gmVariable instead of instance.
+04 Feb 2010
+o Changed new to GM_NEW in gmCodeGen.cpp for consistency.  Thanks Sunray.
 
 
-18/06/04
-o Removed reseting of error log from gmMachine and gmThread.  Allowed memory limit on log.  Updated examples.
+25 Jan 2010
+o Remove orphaned code in gmBlock dated 25/10/04 "Changed behaviour of Block() to yeild if blocked on 'null'."
+o Changed block on null behavior to cause script thread exception.
+o Fix signal behavior so multiple signals cannot accumulate on a blocked thread. Thanks DrEvil.
+o Changing gm version format from vMajor.Minor.BetaLetter to vMajor.Minor.Build. Probably won't change coded version to store past Minor unless process is automated. Probably won't use 4 components as each can be multi digit.
 
 
-23/08/04
-o Fixed gmMachine::Init().  Global table not initialized after ResetAndFreeMemory().
+05 Jun 2009
+o Fix and improve format() Thanks DrEvil.
+o Add some more gmVariable accessors (similar to gm_ex)
 
 
-10/10/04
-o Fixed bugs in gmCodeGen.cpp.  Removed remaining array resize bugs.
+06 May 2009
+o Add experimental endon() allowing a thread to be killed when signalled. Enabled with GM_USE_ENDON in gmConfig.h.  Thanks Downgraded.
+o Fixed (hopefully) endon() kills threads correctly and gets along with other blocks and signals.
 
 
-24/10/04
-o Remove gmArrayComplex and replaced with gmArraySimple to reduce code as it was not necessary.
-o Removed 'no effect' variables that had been there to remove warning 'unreferenced parameter'.
-o Wrapped new with GM_NEW and GM_PLACEMENT_NEW for simpler replacement eg. debug new.
-o Changed multi char constatns 'abcd' to macro version for better compiler compatability.
-o Aligned memory for allocator in gmLibHooks.cpp for PS2.  Added alignment size #define.
-o Moved #include "assert.h" from gm into gm_Configp.h for better compatability.
-o Other minor changes for compiler compatability or reduction of compiler warnings.
+02 May 2009
+o Fixed getind in gmThread.cpp where usertypes influenced the operator chosen to process. Thanks DrEvil.
 
 
-25/10/04
-o Changed behaviour of Block() to yeild if blocked on 'null'.
-o Made functions in gmThread const.
-o Added memory presizing functions to allocators and gmMachine.
+23 Apr 2009
+o Add gmMachine::GetTypeId() to retrieve type id from string name. Thanks Downgraded.
+o Updated version number, oops.
 
 
-27/10/04
-o Changed malloc,free,realloc to new,delete equivalents in bison.simple and flex.skl files.
-o Aligned memory addresses in gmCodeTree, gmLog.
-o Added ToDoList.txt to the \docs folder.  Removed readme.txt from src\gm folder.
+12 Apr 2009
+o Add experimental foreach support for user types. Configured as GM_USER_FOREACH in gmConfig.h.  Thanks Downgraded.
 
 
-02/11/04
-o Added new line to end of files to remove warnings on some compilers.
-o Fixed some non-commented comments on preprocessor commands to remove warnings on some compilers.
-o Changed some includes to later standard: cassert, new, to remove warnings on some compilers.
-o Moved non gm header includes into gmConfig.h with comments. External includes now only in gmConfig.h and gmConfig_p.h.
-o Renamed platform\win32 to win32msvc.  Added platform\win32gcc. Adjusted paths in projects to reflect this change.
+11 Apr 2009
+o Add GM_CHECK_THIS_* macros to gmThread.h.  Thanks Downgraded.
+o Add experimental and optional fork instruction.  Configured as GM_USE_FORK in gmConfig.h. Thanks HiVision.
 
 
-11/11/04
-o Fixed commented #define in gmParser.y.
-o Fixed bug in gmCallScript.h.  If C called C bound function via script, thread was not exited correctly.
-o Added gmCallScript::BeginFunction() Generic function call, and AddParamTable().
+01 Feb 2008
+o Change gmScanner.l so parser checks for End Of File, to prevent endless loop.
 
 
-07/12/04
-o Removed platform specific #defines and checks from gmConfig.h
+11 Nov 2007
+o Modified all GM_*_PARAM() and added overloads for all gmThread:Param*(), to check if invalid type was present.
+o Modified threadKill() to ignore threads with invalid Id instead of killing current thread.
 
 
-10/12/04
-o Added #include <errno.h> to flex.skl for Linux compile.
-o Fixed bug in GML.  Code used obsolete non 32bit byte code.
+22 Oct 2007
+o Added gmMachine::BindLibToFunction() Just a call through to existing gmLibHooks.
+o Changed gmGCRoot<>::Set() to handle null.
+o Removed a_filename from gmMachine::ExecuteFunction() since it wasn't used and could confuse users.
 
 
-11/12/04
-o Added gmCall.  gmCallScript is now deprecated.
+16 Jun 2007
+o Fix bug relating to thread stack resize gmThread::Touch(). Thanks DrEvil.
+o Build .EXEs with VC2005 SP1, static linked VC runtimes except for Debugger which uses MFC.
+  Get vcredist_x86.exe from http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en or search for "Microsoft Visual C++ 2005 SP1 Redistributable Package" if needed.
 
 
-27/12/04
-o Replaced GC related 'workLeftToDo' variable names with 'workLeftToGo' so a simple 'todo' search won't find these.
-o Implemented file.Seek() as it was not implemented.
+03 May 2007
+o Added Experimental user type op_bool test for conditions. Thanks Kaz.
+o Modified killed threads.  Callback from killed state before recycle/delete.
+o Added const to more functions in gmThread.
 
 
-01/01/05
-o gmfrontend.bat strips CR chars from flex and bison script files before generating compiler files.  This should help Linux & Unix builds.
+20 Mar 2007
+o Modified GC auto calibrate to allow no shrink.
+o Moved GC related settings to gmConfig.h.
+o Added gmMachine::GetAutoMemoryUsage().
+o Changed GME initial memory setting.
+o Added example Vector3 non operator Add for efficiency comparison.
 
 
-24/01/05
-o Fixed more compiler warnings.
+21 Feb 2007
+o Fixed atan2 binding.  Thanks 'blackstormy'.
 
 
-30/01/05
-o Added newline to end of gmDebugger.cpp.  Will have to watch for this in future to keep gcc happy.
+21 Jan 2007
+o Added operators implemented from script.  Thanks Seth 'Nightmare'.
+o Added another GC stats related function.
+o Rearranged pragmas and includes in config headers so order could influence subsequent files.
+o Added 'typename' to some template declarations in gmGCRootUtil.
 
 
-03/02/05
-o Added (experimental) new table creation syntax. eg. t = {1,2,3,}; same as t = table(1,2,3); for simplified config files.
+20 Jan 2007
+o Improved GC stats to reduce false warnings about bad GC config.
 
 
-04/02/05
-o Added explicit gmVariable() constructors for gmTableObject and gmFunctionObject completing the default set.
+17 Jan 2007
+o Fixed bug where GC was not correctly handling persistent strings. Thanks Kaz.
 
 
-10/02/05
-o Modified gmCall to improve access to return variables.
+04 Jan 2007
+o Modified gmKillThread() to behave as its comment describes.
 
 
-21/03/05
-o Added ability for gmMachine to handle cpp owned gmObjects and handle GC for them.
-o Changed gmMachine::Presize() (and related functions) to take named params instead of int array for clarity and future expansion.
-o Modified gmMemFixedSet to have more smaller memory sizes.
+05 Dec 2006
+o Fixed setdot misspelled as getdot in gmOperators.cpp and gmMachineLib.cpp.
 
 
-09/04/05
-o Removed Windows specific hack from gmDebugger.cpp and moved it to the example Windows debugger files.
-o Added gmCall::AddParam() for generic gmVariable params.
+26 Oct 2006
+o Added user data to function registering.  This can be useful when binding C/C++ functions, particularly when registering MANY script functions to ONE C function that redirects to MANY C/C++ member functions.
 
 
-14/04/05
-o Added syntax highlighting to debugger. (Actually added back old files I found, that were meant for an IDE never finished.)
-o Added line numbering to debugger.  A quick hack, but maybe useful.
+18 Oct 2006
+o Changed new gmVariable helpers to be const.
 
 
-16/04/05
-o Changed gmObject derived class constructors to be non-public.  This forces creation by gmMachine.
-o Minor change to gmListDouble to make some compiler happy.
+26 Sep 2006
+o Added #define _USE_32BIT_TIME_T so system binding 32 bit time functions work with MSVC 8 runtimes.
 
 
-21/04/05
-o Minor changes for compatability with MSVS 2005.  gmMathLib, gmStringLib, platform header.
+15 Sep 2006
+o Added #define-able nullify in gmVariable ctor.  Disabled by default.
 
 
-04/05/05
-o Added GM_FLOAT_OR_INT_PARAM and GM_CHECK_FLOAT_OR_INT_PARAM to gmThread.h to help with numerical parameters.
+13 Sep 2006
+o Added a bunch of accessor functions to gmVariable and gmTable for convenience.
 
 
-09/05/05
-o Changed some #defines in gmThread.h gmIncGC.cpp/.h prefixed with GM_ to reduce potential conflict with other code.
+01 Aug 2006
+o Added gmVariable::IsNull().
 
 
-10/05/05
-o Fixed/Changed friend declaration used by gmTableObject and gmFunctionObject non-public constructors, to work with MSVC 6, 2003, 2005.  Handling of friend template functions was different and broken.
-o Added optional UserBreak callback to allow external code to break thread execution. Eg. to exit endless loop when user pressed CTRL-BREAK.
+24 Jul 2006
+o Added two gmMachine function registration wrappers to provide alternate interface.
+o Added %u to bound function 'format' to support unsigned ints.
 
 
-05/08/05
-o Fixed bug in GameObject example, String operator= not always used.
+19 Jun 2006
+o Changed gmMachine::AddCPPOwnedGMObject() and RemoveCPPOwnedGMObject() to ignore NULL ptrs rather than ASSERT on them, for caller convenience.
 
 
-29/09/05
-o Fixed bug in gmTableObject.  GC WriteBarrier was not being called with setting values to null.  Old values, reassigned elsewhere could be lost.
+03 Jun 2006
+o Added optional divide by zero check in operators to create GM exception rather than OS exception, as per DrEvil's suggestion.
 
 
-30/10/05
-o Changed location of thread create event so 'this' should be available for query.
+20 May 2006
+o Added config #define GMMACHINE_REMOVECOMPILER to allow compiler to be removed from gmMachine.  Saves some KBs as well as disables compilation.
 
 
-14/11/05
-o Removed gmShutdownVector3Lib() from Vector3 binds example.
+22 Apr 2006
+o Changed gmThread so that final stack frame including 'this' is still valid when MC_THREAD_DESTROY occurs.
 
 
-11/01/06
-o Fixed bug in gmMachine::RemoveCPPOwnedGMObject().  Was not calling WriteBarrier.
-o Added gmMachine::IsCPPOwnedGMObject().
-o Added gmMachine::GetTypeTable() (as per DrEvil's mod).
-o Modified gmMachine::RegisterLib(), Allow append/modify existing table (as per Oli's mod).
-o Removed gmCallScript. (Had been depricated for a long time.)
-o Added experimental gmGCRoot to \binds.  Current implementation uses STL, but allows custom containers.
+17 Apr 2006
+o Added more info on binding functions to GameMonkeyScriptReference.pdf
+
+16 Apr 2006
+o Changed AsString() default for reference types to display pointer in hex instead of decimal.
+
+05 Apr 2006
+o Fixed bug where local (shared) strings waiting for finalization were reused.  Made them revive properly.
+o Removed old write barrier from gmTable, leaving new correct code only.
+
+02 Apr 2006
+o Fixed gmMachine anomaly where, when a new thread is created just before yielding, and the yield occured in the last running thread, the new thread was skipped until the next execution cycle.
+
+15 Mar 2006
+o Changed GC to start in 'off' state.
+
+10 Mar 2006
+o Removed CrimsonEdit syntax highlighting for binary numbers as it did not behave as expected.
+
+08 Mar 2006
+o Changed doString and (system.)DoFile bindings to take optional 'this' as parameter
+o Added gmThread Param() with default gmVariable param.
 
 
-21/01/06
+21 Jan 2006
 o Changed gmMachine, all non-public members are now protected instead of private to allow derived access.
 o Changed gmMachine, all non-public members are now protected instead of private to allow derived access.
 o Changed project and workspaces from MSVC 6 to MSVC 8 (2005)
 o Changed project and workspaces from MSVC 6 to MSVC 8 (2005)
   To compile the Windows based examples & utils, you will need at least 'MS Visual C++ 2005 Express' and the 'Platform SDK', both freely downloadable from Microsoft.
   To compile the Windows based examples & utils, you will need at least 'MS Visual C++ 2005 Express' and the 'Platform SDK', both freely downloadable from Microsoft.
   To run the Windows examples you will need VC8 compatible runtimes installed, The '.Net Framework 2.0' redistributables or 'Windows Update' will provide these.
   To run the Windows examples you will need VC8 compatible runtimes installed, The '.Net Framework 2.0' redistributables or 'Windows Update' will provide these.
   (Left VC6 projects and workspaces in for now.  Debugger still relies on MFC which is not supported by 2005 Express edition.)
   (Left VC6 projects and workspaces in for now.  Debugger still relies on MFC which is not supported by 2005 Express edition.)
-  
-08/03/06
-o Changed doString and (system.)DoFile bindings to take optional 'this' as parameter
-o Added gmThread Param() with default gmVariable param.
 
 
-10/03/06
-o Removed CrimsonEdit syntax highlighting for binary numbers as it did not behave as expected.
-
-15/03/06
-o Changed GC to start in 'off' state.
-
-02/04/06
-o Fixed gmMachine anomaly where, when a new thread is created just before yielding, and the yield occured in the last running thread, the new thread was skipped until the next execution cycle.
+11 Jan 2006
+o Fixed bug in gmMachine::RemoveCPPOwnedGMObject().  Was not calling WriteBarrier.
+o Added gmMachine::IsCPPOwnedGMObject().
+o Added gmMachine::GetTypeTable() (as per DrEvil's mod).
+o Modified gmMachine::RegisterLib(), Allow append/modify existing table (as per Oli's mod).
+o Removed gmCallScript. (Had been depricated for a long time.)
+o Added experimental gmGCRoot to \binds.  Current implementation uses STL, but allows custom containers.
 
 
-05/04/06
-o Fixed bug where local (shared) strings waiting for finalization were reused.  Made them revive properly.
-o Removed old write barrier from gmTable, leaving new correct code only.
+14 Nov 2005
+o Removed gmShutdownVector3Lib() from Vector3 binds example.
 
 
-16/04/06
-o Changed AsString() default for reference types to display pointer in hex instead of decimal.
+30 Oct 2005
+o Changed location of thread create event so 'this' should be available for query.
 
 
-17/04/06
-o Added more info on binding functions to GameMonkeyScriptReference.pdf
+29 Sep 2005
+o Fixed bug in gmTableObject.  GC WriteBarrier was not being called with setting values to null.  Old values, reassigned elsewhere could be lost.
 
 
-22/04/06
-o Changed gmThread so that final stack frame including 'this' is still valid when MC_THREAD_DESTROY occurs.
+05 Aug 2005
+o Fixed bug in GameObject example, String operator= not always used.
 
 
-20/05/06
-o Added config #define GMMACHINE_REMOVECOMPILER to allow compiler to be removed from gmMachine.  Saves some KBs as well as disables compilation.
+10 May 2005
+o Fixed/Changed friend declaration used by gmTableObject and gmFunctionObject non-public constructors, to work with MSVC 6, 2003, 2005.  Handling of friend template functions was different and broken.
+o Added optional UserBreak callback to allow external code to break thread execution. Eg. to exit endless loop when user pressed CTRL-BREAK.
 
 
-03/06/06
-o Added optional divide by zero check in operators to create GM exception rather than OS exception, as per DrEvil's suggestion.
+09 May 2005
+o Changed some #defines in gmThread.h gmIncGC.cpp/.h prefixed with GM_ to reduce potential conflict with other code.
 
 
-19/06/06
-o Changed gmMachine::AddCPPOwnedGMObject() and RemoveCPPOwnedGMObject() to ignore NULL ptrs rather than ASSERT on them, for caller convenience.
+04 May 2005
+o Added GM_FLOAT_OR_INT_PARAM and GM_CHECK_FLOAT_OR_INT_PARAM to gmThread.h to help with numerical parameters.
 
 
-24/07/06
-o Added two gmMachine function registration wrappers to provide alternate interface.
-o Added %u to bound function 'format' to support unsigned ints.
+21 Apr 2005
+o Minor changes for compatability with MSVS 2005.  gmMathLib, gmStringLib, platform header.
 
 
-01/08/06
-o Added gmVariable::IsNull().
+16 Apr 2005
+o Changed gmObject derived class constructors to be non-public.  This forces creation by gmMachine.
+o Minor change to gmListDouble to make some compiler happy.
 
 
-13/09/06
-o Added a bunch of accessor functions to gmVariable and gmTable for convenience.
+14 Apr 2005
+o Added syntax highlighting to debugger. (Actually added back old files I found, that were meant for an IDE never finished.)
+o Added line numbering to debugger.  A quick hack, but maybe useful.
 
 
-15/09/06
-o Added #define-able nullify in gmVariable ctor.  Disabled by default.
+09 Apr 2005
+o Removed Windows specific hack from gmDebugger.cpp and moved it to the example Windows debugger files.
+o Added gmCall::AddParam() for generic gmVariable params.
 
 
-26/09/06
-o Added #define _USE_32BIT_TIME_T so system binding 32 bit time functions work with MSVC 8 runtimes.
+21 Mar 2005
+o Added ability for gmMachine to handle cpp owned gmObjects and handle GC for them.
+o Changed gmMachine::Presize() (and related functions) to take named params instead of int array for clarity and future expansion.
+o Modified gmMemFixedSet to have more smaller memory sizes.
 
 
-18/10/06
-o Changed new gmVariable helpers to be const.
+10 Feb 2005
+o Modified gmCall to improve access to return variables.
 
 
-26/10/06
-o Added user data to function registering.  This can be useful when binding C/C++ functions, particularly when registering MANY script functions to ONE C function that redirects to MANY C/C++ member functions.
+04 Feb 2005
+o Added explicit gmVariable() constructors for gmTableObject and gmFunctionObject completing the default set.
 
 
-05/12/06
-o Fixed setdot misspelled as getdot in gmOperators.cpp and gmMachineLib.cpp.
+03 Feb 2005
+o Added (experimental) new table creation syntax. eg. t = {1,2,3,}; same as t = table(1,2,3); for simplified config files.
 
 
-04/01/07
-o Modified gmKillThread() to behave as its comment describes.
+30 Jan 2005
+o Added newline to end of gmDebugger.cpp.  Will have to watch for this in future to keep gcc happy.
 
 
-17/01/07
-o Fixed bug where GC was not correctly handling persistent strings. Thanks Kaz.
+24 Jan 2005
+o Fixed more compiler warnings.
 
 
-20/01/07
-o Improved GC stats to reduce false warnings about bad GC config.
+01 Jan 2005
+o gmfrontend.bat strips CR chars from flex and bison script files before generating compiler files.  This should help Linux & Unix builds.
 
 
-21/01/07
-o Added operators implemented from script.  Thanks Seth 'Nightmare'.
-o Added another GC stats related function.
-o Rearranged pragmas and includes in config headers so order could influence subsequent files.
-o Added 'typename' to some template declarations in gmGCRootUtil.
+27 Dec 2004
+o Replaced GC related 'workLeftToDo' variable names with 'workLeftToGo' so a simple 'todo' search won't find these.
+o Implemented file.Seek() as it was not implemented.
 
 
-21/02/07
-o Fixed atan2 binding.  Thanks 'blackstormy'.
+11 Dec 2004
+o Added gmCall.  gmCallScript is now deprecated.
 
 
-20/03/07
-o Modified GC auto calibrate to allow no shrink.
-o Moved GC related settings to gmConfig.h.
-o Added gmMachine::GetAutoMemoryUsage().
-o Changed GME initial memory setting.
-o Added example Vector3 non operator Add for efficiency comparison.
+10 Dec 2004
+o Added #include <errno.h> to flex.skl for Linux compile.
+o Fixed bug in GML.  Code used obsolete non 32bit byte code.
 
 
-03/05/07
-o Added Experimental user type op_bool test for conditions. Thanks Kaz.
-o Modified killed threads.  Callback from killed state before recycle/delete.
-o Added const to more functions in gmThread.
+07 Dec 2004
+o Removed platform specific #defines and checks from gmConfig.h
 
 
-16/06/07
-o Fix bug relating to thread stack resize gmThread::Touch(). Thanks DrEvil.
-o Build .EXEs with VC2005 SP1, static linked VC runtimes except for Debugger which uses MFC.
-  Get vcredist_x86.exe from http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=en or search for "Microsoft Visual C++ 2005 SP1 Redistributable Package" if needed.
+11 Nov 2004
+o Fixed commented #define in gmParser.y.
+o Fixed bug in gmCallScript.h.  If C called C bound function via script, thread was not exited correctly.
+o Added gmCallScript::BeginFunction() Generic function call, and AddParamTable().
 
 
-22/10/07
-o Added gmMachine::BindLibToFunction() Just a call through to existing gmLibHooks.
-o Changed gmGCRoot<>::Set() to handle null.
-o Removed a_filename from gmMachine::ExecuteFunction() since it wasn't used and could confuse users.
+02 Nov 2004
+o Added new line to end of files to remove warnings on some compilers.
+o Fixed some non-commented comments on preprocessor commands to remove warnings on some compilers.
+o Changed some includes to later standard: cassert, new, to remove warnings on some compilers.
+o Moved non gm header includes into gmConfig.h with comments. External includes now only in gmConfig.h and gmConfig_p.h.
+o Renamed platform\win32 to win32msvc.  Added platform\win32gcc. Adjusted paths in projects to reflect this change.
 
 
-11/11/07
-o Modified all GM_*_PARAM() and added overloads for all gmThread:Param*(), to check if invalid type was present.
-o Modified threadKill() to ignore threads with invalid Id instead of killing current thread.
+27 Oct 2004
+o Changed malloc,free,realloc to new,delete equivalents in bison.simple and flex.skl files.
+o Aligned memory addresses in gmCodeTree, gmLog.
+o Added ToDoList.txt to the \docs folder.  Removed readme.txt from src\gm folder.
 
 
-01/02/08
-o Change gmScanner.l so parser checks for End Of File, to prevent endless loop.
+25 Oct 2004
+o Changed behaviour of Block() to yeild if blocked on 'null'.
+o Made functions in gmThread const.
+o Added memory presizing functions to allocators and gmMachine.
 
 
-11/04/09
-o Add GM_CHECK_THIS_* macros to gmThread.h.  Thanks Downgraded.
-o Add experimental and optional fork instruction.  Configured as GM_USE_FORK in gmConfig.h. Thanks HiVision.
+24 Oct 2004
+o Remove gmArrayComplex and replaced with gmArraySimple to reduce code as it was not necessary.
+o Removed 'no effect' variables that had been there to remove warning 'unreferenced parameter'.
+o Wrapped new with GM_NEW and GM_PLACEMENT_NEW for simpler replacement eg. debug new.
+o Changed multi char constatns 'abcd' to macro version for better compiler compatability.
+o Aligned memory for allocator in gmLibHooks.cpp for PS2.  Added alignment size #define.
+o Moved #include "assert.h" from gm into gm_Configp.h for better compatability.
+o Other minor changes for compiler compatability or reduction of compiler warnings.
 
 
-12/04/09
-o Add experimental foreach support for user types. Configured as GM_USER_FOREACH in gmConfig.h.  Thanks Downgraded.
+10 Oct 2004
+o Fixed bugs in gmCodeGen.cpp.  Removed remaining array resize bugs.
 
 
-23/04/09
-o Add gmMachine::GetTypeId() to retrieve type id from string name. Thanks Downgraded.
-o Updated version number, oops.
+23 Aug 2004
+o Fixed gmMachine::Init().  Global table not initialized after ResetAndFreeMemory().
 
 
-02/05/09
-o Fixed getind in gmThread.cpp where usertypes influenced the operator chosen to process. Thanks DrEvil.
+18 Jun 2004
+o Removed reseting of error log from gmMachine and gmThread.  Allowed memory limit on log.  Updated examples.
 
 
-06/05/09
-o Add experimental endon() allowing a thread to be killed when signalled. Enabled with GM_USE_ENDON in gmConfig.h.  Thanks Downgraded.
-o Fixed (hopefully) endon() kills threads correctly and gets along with other blocks and signals.
+21 Apr 2004
+o Improved gmThread::Param(), returns reference to gmVariable instead of instance.
 
 
-05/06/09
-o Fix and improve format() Thanks DrEvil.
-o Add some more gmVariable accessors (similar to gm_ex)
+01 Apr 2004
+o Fixed gmRandomFloat to use RAND_MAX instead of 65535.  Effects some platforms as these were not equivalent.
 
 
-25/01/10
-o Remove orphaned code in gmBlock dated 25/10/04 "Changed behaviour of Block() to yeild if blocked on 'null'."
-o Changed block on null behavior to cause script thread exception.
-o Fix signal behavior so multiple signals cannot accumulate on a blocked thread. Thanks DrEvil.
-o Changing gm version format from vMajor.Minor.BetaLetter to vMajor.Minor.Build. Probably won't change coded version to store past Minor unless process is automated. Probably won't use 4 components as each can be multi digit.
+11 Mar 2004
+o Fixed excess memory bug in gmCodeGen.cpp as result of previous bug fix.
+o Improved VM GC logic so garbage collector auto sizes soft and hard limits better, but realize logic is still poor as long as only soft limit is exceeded.
 
 
-04/02/10
-o Changed new to GM_NEW in gmCodeGen.cpp for consistency.  Thanks Sunray.
+09 Mar 2004
+o Modified gmMachine::CollectGarbage() AND binding sysCollectGarbage() to take a optional parameter to perform force full collection.
+o Improved VM GC logic so garbage collector will always free memory when it has the chance after a collect cycle.
+o Added sysSetDesiredMemoryUsageAuto() binding to enable auto adjust of memory limits (used to be flag in old set memory limit functions).
 
 
-15/03/10
-o Fix GC auto calibration. Thanks DrEvil.
+06 Mar 2004
+o Generate code target to big/little endian regardless of source platform.
 
 
-27/05/10
-o Improved Minimal example.  Not all errors were logged. Also enabled debug mode. Thanks xaxa.
+03 Mar 2004
+o Fixed bug in gmCodeGen.cpp The array container could resize causing pointers to become invalid.  List is now used to hold function pointers.
 
 
-09/07/10
-o Updated code base for 64bit address target. (64bit builds of current binaries not made or tested yet.) 
-o Updated system lib for 64bit Win OS compatibility.
+26 Feb 2004
+o Changed strtol to strtoul in gmParser.y to convert hex and binary numbers to unsigned ints causing them to not be truncated.  They will appear as full signed ints rather than be clipped to 0-2b range.
 
 
-16/08/10
-o Added syntactical sugar for functions.  'function <name>(<parms>){<statements>}' Thanks 39ster.
+21 Feb 2004
+o Added paranoid check code to Incremental GC.
+o Fixed serious bug in gmTable with IncGC that caused deleted 'values' to go through write barrier.
+o Added Sleep(0) to WIN32 build of GME to improve windows performance which otherwise suffers from unyielding threads.
 
 
-17/06/11
-o Fixed gmMachine::GetTypeId(), invalid string returned. Thanks Tiok.
-o Changed project and workspaces from MSVC 8 (2005) to MSVC 10 (2010 SP1)
-  To compile the Windows based examples & utils, you will need at least 'MS Visual C++ 2010 Express SP1' freely downloadable from Microsoft.
-  To run the Windows examples you will need VC10 compatible runtimes installed, The '.Net Framework' redistributables or 'Windows Update' will provide these.
-  (Left VC6 and VC8 projects and workspaces in for now.  Debugger still relies on MFC which is not supported by 2005 Express edition.)
-o Changed #define in MSVC platform file to _M_X64 which is correct 64bit build macro. Also renamed another misspelled macro.
+20 Feb 2004
+o gmMachine::Get/SetDesiredByteMemoryUsage() removed and replaced with Get/SetDesiredByteMemoryUsageHard() and Get/SetDesiredByteMemoryUsageSoft().
+o Changed behaviour of gmMachine::SetDesiredByteMemoryUsage***(). No longer sets auto-memory to false, also does not have auto-memory parameter.
+o New incremental garbage collection logic to govern the inc GC system.
+o New GC stats functions: TODO
+o Set gmConfig.h to use incremental GC by default.  Was using atomic GC.
+o Renamed machine bound function threadIds() to threadAllIds() to make it more different from threadId() and more consistent with other naming.
 
 
-29/06/11
-o Add 64bit MSVC build configurations for GME
+07 Feb 2004
+o Remove GM_ASSERT from macro GM_CHECK_FLOAT_PARAM.  Was probably left in from some previous debugging.
 
 
-2/10/11
-o Fixed GC root scan. (PS. Failed attempt)
-o Increased GMTHREAD_MAXBYTESIZE to allow samples to run in 64bit
-o Fixed gmTable 64bit gmVariable equality test.
-o Fixed byte code generator. 64bit was mixing 32 and 64 bit patched addresses.
+25 Jan 2004
+o Added GameObject example code.
 
 
-3/10/11
-o Fixed GC root scan to ignore persistent objects.
+23 Jan 2004
+o Modified copyright message to be 'GameMonkey Script' as that is the full name.
 
 
-4/10/11
-o Fixed GC tricolor invariance wasn't preserved with local object transfer of ownership.
+18 Jan 2004
+o Fixed bug in string operator not.  Incorrectly returned true instead of false.
 
 
-7/10/11
-o Fixed GC (Another attempt)
+16 Jan 2004
+o Added Minimal code to use GM example.
 
 
-13/01/12
-o Improved syntactical sugar for functions. Thanks HenryTran.
- 
-10/02/12
-o Added experimental project gmddotnet (gmDebuggerNet) which is gmd ported to C# .Net from C++ MFC.
-  This was simply an experiment, this example debugger is as identically terrible as the original version.
-  
-12/05/12
-o Fixed Fork stack growth bug. Thanks funkbot.
+10 Jan 2004
+o Added threadKillAll() binding to allow termination of all threads.
+o Added threadIds() binding to allow access to all threads.
+o Modified BomberRun.gm to allow exit from main menu.
 
 
-09/06/12
-o Add back ++,-- pre inc, dec operators (Experimental, code restored from v0.9)
+09 Jan 2004
+o Added constant folding for ints and floats
+o Added +=, -=, *=, /= etc.  Some more optimisation is required on this to avoid reavaluation of complex l-value.
 
 
-18/05/13
-o Reordered GC descruction sequence to avoid Write Barrier mis-fire.
+08 Jan 2004
+o Fixed filename case mismatch between filenames and #includes for Unix and other platform.
+o Renamed and modifed gmNetwork to NetClient and NetServer as they are not gm files.
+o Modified GMD project to show gmDebugger in gm file set and use Win32 #defs for windows specific parts.
+o Removed memory display from snake.gm
+o Added sample script descriptions file.
+o Removed GM_MAX() and GM_MIN() macros and replaced with template versions in gmUtil
+o Added gmLog2ge function as faster version of gmHighestBit, and changed gmArraySimple and gmArrayComplex to suit.
+o Fixed buffer overrun bug with gmVariable::AsString function.
+o Removed all warning level 4 warnings bar the warnings generated from flex and bison files.
+o Added GM_VERSION #define to gmMachine.h.  first version @ "1.1".  added gmVersion script binding.
+o Changed some #ifdef DEBUG to #ifdef GM_DEBUG_BUILD
 
 
-19/05/14
-o Fix EndOn bug reported by Korrion
+02 Jan 2004
+o Updated script reference doc with system functions, compiler string concat and other.
 
 
-13/07/15
-o Fix 64bit related. Thanks palota.
+22 Dec 2003
+o Package 1.0 ready for public release.
 
 
-22/11/17
-o Updated code and some projects to build with MSVC 2017.
-o Removed older projects and solutions for GME at least.
-o Fixed code to support 32 and 64 bit gmint, gmfloat types.
-  GM files and binds, GME and GML updated and tested only.