Commit Graph

41 Commits

Author SHA1 Message Date
David Anderson
a1afa23bc4 Implement a new stack and error handling model for the SourcePawn VM.
This has three major changes to SourcePawn. First, the API now supports the concept of "exceptions". The exception state is a global property of an instance of the SourcePawn VM. Exceptions can be caught or suppressed. Many places in SourceMod have been updated to check exceptions instead of errors.

The new API obsoletes major parts of the embedder API - all but one method of invoking functions is obsoleted, and the debug interface has been scrapped. Extensions using the native API will not be affected, however, ThrowNativeError has been deprecated in favor of ReportError.

Second, the SourcePawn concept of a "stack" has been unified at the API level. A stack frame iterator now iterates over all SourcePawn invocations, rather than the topmost plugin. This makes error handling more consistent and removes another dependency on context-per-plugin.

Finally, the implementation of stack frames has been changed dramatically. Rather than maintain a complicated and expensive return pointer stack, we now rely on the implicit one provided by the CPU. The stack frame iterator now walks the JIT stack directly. This removes many unnecessary bookkeeping instructions from the generated code, in particular making the CALL instruction 40% faster.

These changes required some fair surgery to the JIT. Its error paths are now slightly more complicated, as they have to throw an exception rather than return an error code. In addition, any path that can throw an exception is now responsible for creating an "exit frame", which exists to tell the stack frame iterator about transitions from the JIT to the VM.
2015-03-04 23:45:30 -08:00
Asher Baker
c28426a09f Fix threads leaking if they're not joined. (bug 3460, r=dvander) 2015-01-06 20:29:47 +00:00
Asher Baker
686cf9c5ba Use GCC builtins for bsr/bsf where available. 2014-11-09 04:15:49 +00:00
David Anderson
a00adaf9fb Sync with AMTL one last time. 2014-09-03 22:05:10 -07:00
David Anderson
8686957dee Final sync of AMTL. 2014-09-03 21:48:48 -07:00
David Anderson
e6e90fb8b8 Sync am-string. 2014-09-03 21:45:44 -07:00
David Anderson
6068d341c8 Sync am-hashmap. 2014-09-03 21:44:51 -07:00
David Anderson
105cd27d19 Sync am-utility.h from upstream. 2014-09-03 21:40:03 -07:00
David Anderson
e608057304 Sync a change from AMTL. 2014-09-03 21:31:06 -07:00
David Anderson
9267d0c803 Eliminate Newborn/NoAddRef (bug 5907, r=ds). 2014-08-22 22:50:25 -07:00
Nicholas Hastings
4a75be1c92 Fix KE_OVERRIDE typo in amtl (already fixed upstream). 2014-06-19 20:58:26 -04:00
Kyle Sanderson
05d8622ea9 Quell isNaN MSVC performance warning. 2014-05-28 18:05:55 -07:00
David Anderson
c64edf31fc Fix Windows build, again. 2014-04-22 20:04:12 -07:00
David Anderson
b6792a2c8c Sync am-vector.h with AMTL (fix bug 6090).
--HG--
extra : rebase_source : f27515a516db9bc14779da3721f6378d573584b5
2014-04-19 19:21:40 -07:00
Kyle Sanderson
398b05afed Fix uninit'd memory issues in AMTL AString and Vector (bug 5921, r=psychonic).
--HG--
extra : rebase_source : 17a57dcf815cb3798eaa13af5f4af44fb1930f86
2013-11-30 10:59:05 -05:00
David Anderson
f0e4fe66ba AMTL updates and changes to adapt for them to fix menu crashes (bug 5921, r=psychonic).
AMTL:
Removes isVoid from AString.
Fixes support inserting to Vector at length.

--HG--
extra : rebase_source : 02805fad60c2b759a0e2e91c081144854a8e0b54
2013-11-30 10:51:28 -05:00
David Anderson
96d6cf8def Fix some memory errors (bug 5904, r=ds). 2013-10-29 18:58:34 -04:00
David Anderson
67ce8aff61 Remove memtables from ConCmdManager (bug 5899 part 3, r=fyren). 2013-08-31 19:50:15 -07:00
David Anderson
ba927964c8 Clean up ConCmdManager (bug 5900, r=fyren). 2013-08-31 11:51:23 -07:00
David Anderson
435f2b8e39 Remove MenuManager use of memtables (bug 5899 part 2, r=fyren). 2013-08-31 11:50:28 -07:00
David Anderson
a25f9010cc Remove CoreConfig use of memtables (bug 5899 part 1, r=fyren). 2013-08-31 11:50:11 -07:00
David Anderson
4500964394 Use Refcounted to manage to NativeEntry (bug 5852 part 4, r=ds).
--HG--
extra : rebase_source : 2e08816db6819c9d9957a0e0ade9cd1aa420fd54
2013-08-30 10:16:28 -07:00
David Anderson
da9debda67 Sync AMTL. 2013-08-29 11:45:28 -07:00
David Anderson
f1b0c29815 Sync AMTL. 2013-08-29 10:11:59 -07:00
David Anderson
b261dde858 Refactor Trie natives to use HashMap instead of KTrie; add iteration API (bug 5892, r=ds).
--HG--
extra : rebase_source : a5bcf64a45d6734a97d78b4f4ea9aea48d17bb8b
2013-08-29 10:09:02 -07:00
David Anderson
2c1a398292 Fix build. 2013-08-25 14:04:01 -07:00
David Anderson
3850765759 Switch HalfLife2 off KTrie (bug 5884 part 7, r=ds). 2013-08-25 11:59:48 -07:00
David Anderson
0144062126 Introduce NameHashSet (bug 5884 part 1, r=ds). 2013-08-25 11:59:44 -07:00
David Anderson
d14b5fe00b Switch GameConfigs to hash tables (bug 5878 part 3, r=ds). 2013-08-25 01:42:16 -07:00
David Anderson
3b9037397a Add new StringHashMap container (bug 5878 part 1, r=ds). 2013-08-25 01:42:14 -07:00
David Anderson
57e1c7d55f Fix build problems when using HashMap. 2013-08-24 01:29:43 -07:00
David Anderson
e489b4a570 Fix build problems when using HashTable. 2013-08-24 01:29:26 -07:00
David Anderson
83dc7f0855 Fix performance problems in AString. 2013-08-24 01:29:03 -07:00
David Anderson
90a2d1bb39 Update AMTL with a number of changes.
- Introduce HashMap, a key-value map based on HashTable.
 - Introduce LinkedList, to port from SourceHook::List.
 - Introduce AString, to port from SourceHook::String.
 - Introduce KE_OVERRIDE and KE_DELETE helpers for C++11.
 - HashTable now constructs/destructs only live items.
 - Fix insert-on-removed-item bug in HashTable.
 - Fix Vector keeping a new maxsize if allocation fails.
 - Renamed am-inline-list.h to am-inlinelist.h.

--HG--
rename : public/amtl/am-inline-list.h => public/amtl/am-inlinelist.h
2013-08-23 22:29:44 -07:00
David Anderson
5999b50e10 Fix Windows build errors. 2013-08-23 15:45:07 -07:00
David Anderson
4d43374fde Add atomic reference counting and port DBI (bug 5876 part 3, r=ds).
--HG--
extra : rebase_source : a6defaf477e7a856ce91f92d5f3143f12c141da3
2013-08-23 00:18:13 -07:00
David Anderson
dac42ee272 Add reference counting to IDatabase (bug 5876 part 2, r=ds).
--HG--
extra : rebase_source : 9fef982c3923a2f5cb842b3b8a5cca235ef9c6b9
2013-08-23 00:18:12 -07:00
David Anderson
f7991185ba Add reference counting and use it for CGameConfig (bug 5876 part 1, r=ds).
--HG--
extra : rebase_source : 42b033d005ae3118b6505c530227c84e0e8a7553
2013-08-23 00:18:11 -07:00
David Anderson
d6a6194e68 Make amtl headers BSD-licensed and clean up outstanding style issues. 2013-08-22 17:11:17 -07:00
David Anderson
c373527851 Rename ke_* headers to am-*
--HG--
rename : public/amtl/ke_allocator_policies.h => public/amtl/am-allocator-policies.h
rename : public/amtl/ke_inline_list.h => public/amtl/am-inline-list.h
rename : public/amtl/ke_thread_posix.h => public/amtl/am-thread-posix.h
rename : public/amtl/ke_thread_utils.h => public/amtl/am-thread-utils.h
rename : public/amtl/ke_thread_windows.h => public/amtl/am-thread-windows.h
rename : public/amtl/ke_utility.h => public/amtl/am-utility.h
rename : public/amtl/ke_vector.h => public/amtl/am-vector.h
2013-08-22 17:10:59 -07:00
David Anderson
de8726ab73 Move ke_ headers to new public/amtl folder.
--HG--
rename : public/sourcepawn/ke_allocator_policies.h => public/amtl/ke_allocator_policies.h
rename : public/sourcepawn/ke_inline_list.h => public/amtl/ke_inline_list.h
rename : public/sourcepawn/ke_thread_posix.h => public/amtl/ke_thread_posix.h
rename : public/sourcepawn/ke_thread_utils.h => public/amtl/ke_thread_utils.h
rename : public/sourcepawn/ke_thread_windows.h => public/amtl/ke_thread_windows.h
rename : public/sourcepawn/ke_utility.h => public/amtl/ke_utility.h
rename : public/sourcepawn/ke_vector.h => public/amtl/ke_vector.h
2013-08-22 16:30:44 -07:00