diff options
author | md5 | 2011-03-26 02:37:10 +0200 |
---|---|---|
committer | md5 | 2011-03-26 02:37:10 +0200 |
commit | cc074b013f36338d070699b9e5916debe6b93ff8 (patch) | |
tree | 19e45fc4f6f1f5aa572fe20c704dafb5b462edd9 /engines/sci/engine/vm.h | |
parent | 68908773ac0ef335f491a257473358269616ab69 (diff) | |
download | scummvm-rg350-cc074b013f36338d070699b9e5916debe6b93ff8.tar.gz scummvm-rg350-cc074b013f36338d070699b9e5916debe6b93ff8.tar.bz2 scummvm-rg350-cc074b013f36338d070699b9e5916debe6b93ff8.zip |
SCI: Refactored and cleaned up the VM call stack handling code
- Removed the CallsStruct intermediate stack. Calls are inserted directly
in the execution stack
- Added a constructor for the ExecStack struct and removed
add_exec_stack_varselector() and add_exec_stack_entry()
Diffstat (limited to 'engines/sci/engine/vm.h')
-rw-r--r-- | engines/sci/engine/vm.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h index ee22e03310..9ff332d23b 100644 --- a/engines/sci/engine/vm.h +++ b/engines/sci/engine/vm.h @@ -92,9 +92,10 @@ struct ExecStack { StackPtr fp; // Frame pointer StackPtr sp; // Stack pointer - int argc; + int argc; StackPtr variables_argp; // Argument pointer + SegmentId local_segment; // local variables etc Selector debugSelector; // The selector which was used to call or -1 if not applicable @@ -104,6 +105,29 @@ struct ExecStack { ExecStackType type; reg_t* getVarPointer(SegManager *segMan) const; + + ExecStack(reg_t objp_, reg_t sendp_, StackPtr sp_, int argc_, StackPtr argp_, + SegmentId localsSegment_, reg_t pc_, Selector debugSelector_, + int debugExportId_, int debugLocalCallOffset_, int debugOrigin_, + ExecStackType type_) { + objp = objp_; + sendp = sendp_; + // varp is set separately for varselector calls + addr.pc = pc_; + fp = sp = sp_; + argc = argc_; + variables_argp = argp_; + *variables_argp = make_reg(0, argc); // The first argument is argc + if (localsSegment_ != 0xFFFF) + local_segment = localsSegment_; + else + local_segment = pc_.segment; + debugSelector = debugSelector_; + debugExportId = debugExportId_; + debugLocalCallOffset = debugLocalCallOffset_; + debugOrigin = debugOrigin_; + type = type_; + } }; enum { |