Commit Graph

627 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
Nicholas Hastings
5f7e800444 Use new IVEngineServer::GetIServer to get IServer* on Insurgency. 2015-02-22 15:16:26 -05:00
Nicholas Hastings
589482736f Merge pull request #247 from AnthonyIacono/normalshook-upgrade
Improvements for NormalSHook functionality (r=psychonic).
2015-02-18 14:43:33 -05:00
Anthony
3558418ed7 Initializing soundEntry and using something safer than strcpy 2015-02-05 11:12:33 -08:00
Nicholas Hastings
10c62dc0c0 Fix crash when creating and destroying a TopMenu without map change (bug 6303). 2015-02-04 09:57:04 -08:00
Ruben Gonzalez
213e7ced8c Initial CSGO GetWeaponPrice fixes 2015-01-31 12:44:18 -05:00
Nicholas Hastings
e2aab2ab10 Don't allow plugins to block LevelInit (wtf). 2015-01-27 18:01:30 -08:00
Anthony
ee0575bbb0 Adding EmitSoundEntry() for engines >= portal 2 2015-01-21 10:33:29 -08:00
Kyle Sanderson
e3349116cb Establish a default timeout for MySQL connectivity. 2015-01-21 05:58:45 -08:00
Anthony
cddae6f456 Upgrading the normal sound hook for games like CS:GO 2015-01-20 15:08:57 -08:00
Nicholas Hastings
aa38226337 Fix SDKHooks causing crash on plugin load/unload or player connect/disconnect if missing gamedata. 2014-12-30 20:56:28 -05:00
Nicholas Hastings
7f0edd441e Add offset printing to datamap dumps. 2014-12-30 08:36:35 -05:00
Nicholas Hastings
0d67bcc5ba Add null-check on serverclass in gamerules lookup. 2014-12-14 15:21:54 -05:00
Nicholas Hastings
88cb74213c Add support for getting g_pGameRules without a byte signature / symbol. 2014-12-13 16:35:32 -05:00
Nicholas Hastings
939b10bd8e Refactor SDKTools to not expose gamerules ptr ptr outside of vglobals.cpp. 2014-12-13 15:48:51 -05:00
David Anderson
61bf7de101 Revert adminmenu API changes. 2014-12-12 10:10:46 -08:00
Nicholas Hastings
09060c265f Convert TFHoliday values to pubvars. 2014-12-09 20:21:24 -05:00
Nicholas Hastings
e7e43e38a5 Merge pull request #210 from alliedmodders/more-clientprefs-newauth
Fix clientprefs IsAuthIdConnected (again) (r=asherkin).
2014-11-26 18:55:57 -05:00
Nicholas Hastings
b0ceac9d74 Fix clientprefs IsAuthIdConnected (again). 2014-11-22 10:00:40 -08:00
Nicholas Hastings
f38fd6a550 Merge pull request #205 from alliedmodders/tf2condex3
Add support for TF2 player conditions above >= 96 (r=asherkin).
2014-11-19 17:15:56 -05:00
Nicholas Hastings
d3a4c972e2 Add static_assert on ConBitVecAndNot hack so it gets updated on next cond count change. 2014-11-15 11:31:18 -05:00
Nicholas Hastings
1cf43b4ec2 Fix off-by-one error with FindNextSetBit in cond checks. 2014-11-15 11:22:43 -05:00
Nicholas Hastings
849df7895b Update TF2 extension for new m_nPlayerCondEx3 player conditions field. 2014-11-15 10:08:07 -05:00
Nicholas Hastings
ea86eee74e Fix SetAuthIdCookie's IsAuthIdConnect function's issues with mixed auth id types. 2014-11-15 09:34:49 -05:00
Nicholas Hastings
0d24804839 Merge pull request #174 from alliedmodders/eliminate-more-gamedata
Eliminate the need for more gamedata on some games (r=asherkin).
2014-11-08 12:52:53 -05:00
David Anderson
b97335ccb0 Port TopMenus to transitional syntax. 2014-10-30 19:20:33 -07:00
Nicholas Hastings
f0dd129344 Eliminate need for FindEntityByClassname gamedata on sdk2013 and soon css/dods/hl2dm (already on tf2). 2014-10-30 19:25:26 -04:00
Nicholas Hastings
749701014d Eliminate need for sv gamedata on sdk2013 and soon css/dods/hl2dm (already on tf2). 2014-10-30 19:25:13 -04:00
Nicholas Hastings
10cee734dc Eliminate need for s_pTempEnts gamedata on sdk2013 and soon css/dods/hl2dm (already on tf2). 2014-10-30 19:24:53 -04:00
David Anderson
76d26044f6 Fix build. 2014-10-21 21:51:15 -07:00
David Anderson
75335dbef3 Merge pull request #156 from Bara20/patch-2
Fix undefined symbol: clock_gettime.
2014-10-21 12:42:18 -07:00
Nicholas Hastings
77dc5ac7ed Fix build. 2014-10-14 17:47:44 -04:00
Nicholas Hastings
37c29775d4 Fix OnTakeDamage_Alive gamedata lookup in SDKHooks. 2014-10-14 17:36:55 -04:00
Nicholas Hastings
570570f7a0 Fix regression causing inconsistencies in clientprefs auth id handling (r=VoiDeD). 2014-09-12 13:04:37 -07:00
Nicholas Hastings
e4569cb2b9 Disable RTTI for more game-agnostic extensions. 2014-09-11 17:41:25 -07:00
Nicholas Hastings
47450bb98c Disable RTTI for game-agnostic extensions 2014-09-11 17:28:24 -07:00
Bara
d493bc701d Fix undefined symbol: clock_gettime
[SM] Extension dbi.mysql.ext.so failed to load: /home/csgo/csgo/addons/sourcemod/extensions/dbi.mysql.ext.so: undefined symbol: clock_gettime
2014-09-12 01:52:20 +02:00
Nicholas Hastings
6d7115d62f Update the missed steamid nullcheck in clientprefs 2014-09-09 18:04:39 -07:00
Nicholas Hastings
9e6fcc7673 Make OnClientAuthorized use Steam2 ids where available 2014-09-09 17:43:01 -07:00
David Anderson
448c55c0f2 Fix DBI after AMTL changes. 2014-09-03 21:11:17 -07:00
Nicholas Hastings
be55587d70 Add OnTakeDamage_Alive hook support to SDKHooks (bug=6249). 2014-09-03 17:45:34 -04:00
Ryan Stecker
cae1d0dec1 Don't override hook result in BlockedPost. 2014-09-02 13:01:18 -05:00
Ryan Stecker
88c6d3d9a7 Merge remote-tracking branch 'upstream/master' into sdkhooks-blocked 2014-09-02 00:04:54 -05:00
David Anderson
9267d0c803 Eliminate Newborn/NoAddRef (bug 5907, r=ds). 2014-08-22 22:50:25 -07:00
Ryan Stecker
d873b20573 Fix typo related to invalid regex handle errors. 2014-08-14 12:24:51 -05:00
Ryan Stecker
601aac440e Implement SDKHook_Blocked and SDKHook_BlockedPost. 2014-08-01 21:35:41 -05:00
Nicholas Hastings
8d5fe316e0 Merge pull request #114 from VoiDeD/tf2-removewearable
Implement TF2_RemoveWearable native (r=psychonic).
2014-07-30 18:43:34 -04:00
Kyle Sanderson
ab72841704 Rename SDKHooks function and variable to be friendlier. 2014-07-30 15:34:51 -07:00
Ryan Stecker
4a400d9569 Implement TF2_RemoveWearable native. 2014-07-29 20:31:27 -05:00
Kyle Sanderson
ba0406930d Pre-allocate 8 elements to skip trivial reallocations near the beginning of the vectors life. 2014-07-29 02:48:13 -07:00