Commit Graph

410 Commits

Author SHA1 Message Date
Fyren
dd8fa985c1 Reapply ancient patch to allow space in spcomp options. 2015-03-06 09:08:24 +00:00
Fyren
d3da389f9f Signed comparison warning fixes. 2015-03-06 08:08:41 +00:00
David Anderson
782eee3c58 Merge pull request #291 from VoiDeD/spcomp-error25-improvements
Improve the diagnostic given when a function prototype doesn't match an existing definition
2015-03-05 23:04:19 -08:00
Kyle Sanderson
d0d0ea5051 Merge pull request #269 from KyleSanderson/wnoerrorsign
Add Wno-error=sign-compare for gcc to Compiler. r=dvander
2015-03-05 20:05:06 -08:00
Ryan Stecker
3509f963ee Improve the diagnostic given when a function prototype doesn't match an existing definition. 2015-03-05 18:45:15 -06:00
David Anderson
90d3841ab2 Fix mac build. 2015-03-05 11:51:08 -08:00
David Anderson
715a51d01f Merge pull request #285 from alliedmodders/frames
Implement a new stack and error handling model for the SourcePawn VM.
2015-03-04 23:45:59 -08:00
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
b43da7b7f0 Fix Mac build. 2015-02-27 04:53:31 -08:00
David Anderson
04827466b0 Rewrite the .smx parser.
This removes one the last remnants of the SourceMod 1.0 VM implementation.

The new parser introduces a number of design changes in the VM. First, the VM now takes greater responsibility for validating and sanity checking the structure of the SMX container format. Previously, malformed SMX files could easily crash SourcePawn. The loader now rejects files that have out-of-bounds offsets or incomplete sections. Complex sections, like debug info or the code stream, are verified lazily.

Internally, the sp_plugin_t structure has been removed. It has been replaced by a new LegacyImage class, designed to be independent from the SPVM API. This potentially lets us load code streams from non-.smx containers. More importantly, it removes a lot of bookkeeping and pre-computed state from PluginRuntime. The LegacyImage class is now responsible for handling debug info as well.

PluginRuntime is now intended to hold only cached or immutable data, and PluginContext holds all VM state. As such PluginContext is now responsible for allocating a plugin's runtime memory, not PluginRuntime.

Finally, some aspects of the loading process have been cleaned up. The
decompression and image handoff logic should now be easier to
understand.
2015-02-25 22:28:10 -08:00
David Anderson
acf6dcac86 Remove the interpreter. 2015-02-24 23:57:08 -08:00
David Anderson
fcec0ee7c7 Use AutoPtr in more places in the JIT. 2015-02-24 23:50:42 -08:00
David Anderson
b9b0ec865c Simplify the JIT function cache. 2015-02-24 23:43:07 -08:00
David Anderson
fcaa5361c8 Don't expose mutable sp_native_t. 2015-02-24 23:10:18 -08:00
David Anderson
33588b65ce Remove sp_context_t. 2015-02-24 21:54:34 -08:00
David Anderson
c09c65e4c7 Remove sp_context_t::plugin. 2015-02-24 21:54:34 -08:00
David Anderson
11ea385169 Remove sp_context_t::rval. 2015-02-24 21:54:34 -08:00
David Anderson
3a0310e832 Remove sp_context_t::basecx. 2015-02-24 21:54:34 -08:00
David Anderson
31ab1ced06 Move hp from sp_context_t to PluginContext. 2015-02-24 21:54:34 -08:00
David Anderson
b2c61a341a Move sp from sp_context_t to PluginContext. 2015-02-24 21:54:30 -08:00
David Anderson
4c9321f02a Move frm from sp_context_t to PluginContext. 2015-02-24 21:01:05 -08:00
David Anderson
d2005bd42a Move cip from sp_context_t to PluginContext. 2015-02-24 20:53:44 -08:00
David Anderson
8817de8a55 Remove err from sp_context_t. 2015-02-24 20:41:51 -08:00
David Anderson
97dbc7ff07 Move n_err from sp_context_t to PluginContext. 2015-02-24 20:16:13 -08:00
dvander@alliedmods.net
9c104ef310 Move nidx from sp_context_t to PluginContext. 2015-02-24 19:59:45 -08:00
dvander@alliedmods.net
5502fbbdc1 Move the tracker from sp_context_t to PluginContext. 2015-02-24 15:43:41 -08:00
dvander@alliedmods.net
deedc1aaa6 Remove unused fields from sp_context_t. 2015-02-24 15:21:52 -08:00
dvander@alliedmods.net
37af05c456 Move the debug return stack into PluginContext. 2015-02-24 15:20:00 -08:00
dvander@alliedmods.net
8eed58a467 Rename sp_vm_basecontext to plugin-context. 2015-02-24 12:55:00 -08:00
dvander@alliedmods.net
2e77155b4e Rename BaseContext to PluginContext. 2015-02-24 12:50:09 -08:00
dvander@alliedmods.net
8b8edf6e70 Remove dead file and fix gcc build. 2015-02-24 11:39:28 -08:00
David Anderson
781c5129a9 Remove the JITX86 class. 2015-02-24 02:03:58 -08:00
David Anderson
111dd7eb68 Factor code stubs out of JITX86. 2015-02-24 02:03:58 -08:00
David Anderson
21f5400d9c Remove ICompilationData. 2015-02-24 02:03:57 -08:00
David Anderson
8cf3e227ea Move context var initialization into BaseContext. 2015-02-24 02:03:56 -08:00
David Anderson
8c95919b32 Move watchdog/runtime interaction into Environment. 2015-02-24 02:03:55 -08:00
David Anderson
b406c3d03d Merge sp_vm_engine and engine2. 2015-02-24 02:03:55 -08:00
David Anderson
c70e87d582 Move the code cache into Environment, and out of knight/shared. 2015-02-24 01:57:50 -08:00
David Anderson
57ba8fd09b De-singleton-ify the watchdog timer. 2015-02-24 01:53:37 -08:00
David Anderson
3cf3f6c3f8 Merge sp_vm_engine and engine2. 2015-02-24 01:52:14 -08:00
David Anderson
499f7b3929 Refactor the public API entrypoint for SourcePawn. 2015-02-24 01:52:13 -08:00
David Anderson
e58415f94a Fix shell build on Windows. 2015-02-24 01:49:03 -08:00
David Anderson
4212fb88c8 Build the debug spshell as part of AMBuild. 2015-02-23 20:21:17 -08:00
dvander@alliedmods.net
1f9b898702 Rename BaseRuntime files to plugin-runtime. 2015-02-23 16:44:15 -08:00
dvander@alliedmods.net
2f71cb4cd7 Rename BaseRuntime to PluginRuntime. 2015-02-23 16:40:36 -08:00
dvander@alliedmods.net
b2d8dde3a5 Rename Function to CompiledFunction. 2015-02-23 16:27:57 -08:00
dvander@alliedmods.net
0ee4885056 Rename sp_vm_function to scripted-invoker. 2015-02-23 16:14:59 -08:00
dvander@alliedmods.net
45bac7feb0 Rename jit_function to compiled-function. 2015-02-23 16:04:57 -08:00
dvander@alliedmods.net
892b8c05b1 Rename JitFunction to CompiledFunction and CFunction to ScriptedInvoker. 2015-02-23 16:03:08 -08:00
dvander@alliedmods.net
45c43f4aee Modernize sp_vm_basecontext. 2015-02-23 13:40:01 -08:00