AGS: Move cc_script.cpp globals to Globals
This commit is contained in:
parent
dfbcfd212c
commit
1e327a63f8
9 changed files with 31 additions and 29 deletions
|
@ -104,7 +104,7 @@ int32_t ccGetObjectHandleFromAddress(const char *address) {
|
|||
|
||||
int32_t handl = _GP(pool).AddressToHandle(address);
|
||||
|
||||
ManagedObjectLog("Line %d WritePtr: %08X to %d", currentline, address, handl);
|
||||
ManagedObjectLog("Line %d WritePtr: %08X to %d", _G(currentline), address, handl);
|
||||
|
||||
if (handl == 0) {
|
||||
cc_error("Pointer cast failure: the object being pointed to is not in the managed object pool");
|
||||
|
@ -119,7 +119,7 @@ const char *ccGetObjectAddressFromHandle(int32_t handle) {
|
|||
}
|
||||
const char *addr = _GP(pool).HandleToAddress(handle);
|
||||
|
||||
ManagedObjectLog("Line %d ReadPtr: %d to %08X", currentline, handle, addr);
|
||||
ManagedObjectLog("Line %d ReadPtr: %d to %08X", _G(currentline), handle, addr);
|
||||
|
||||
if (addr == nullptr) {
|
||||
cc_error("Error retrieving pointer: invalid handle %d", handle);
|
||||
|
|
|
@ -56,7 +56,7 @@ int ManagedObjectPool::Remove(ManagedObject &o, bool force) {
|
|||
handleByAddress.erase(o.addr);
|
||||
o = ManagedObject();
|
||||
|
||||
ManagedObjectLog("Line %d Disposed managed object handle=%d", currentline, handle);
|
||||
ManagedObjectLog("Line %d Disposed managed object handle=%d", _G(currentline), handle);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ int32_t ManagedObjectPool::AddRef(int32_t handle) {
|
|||
}
|
||||
|
||||
o.refCount += 1;
|
||||
ManagedObjectLog("Line %d AddRef: handle=%d new refcount=%d", currentline, o.handle, o.refCount);
|
||||
ManagedObjectLog("Line %d AddRef: handle=%d new refcount=%d", _G(currentline), o.handle, o.refCount);
|
||||
return o.refCount;
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ int32_t ManagedObjectPool::SubRef(int32_t handle) {
|
|||
CheckDispose(handle);
|
||||
}
|
||||
// object could be removed at this point, don't use any values.
|
||||
ManagedObjectLog("Line %d SubRef: handle=%d new refcount=%d canBeDisposed=%d", currentline, handle, newRefCount, canBeDisposed);
|
||||
ManagedObjectLog("Line %d SubRef: handle=%d new refcount=%d canBeDisposed=%d", _G(currentline), handle, newRefCount, canBeDisposed);
|
||||
return newRefCount;
|
||||
}
|
||||
|
||||
|
|
|
@ -282,7 +282,7 @@ void debug_script_print(const String &msg, MessageType mt) {
|
|||
scriptname = "D ";
|
||||
else
|
||||
scriptname = "? ";
|
||||
script_ref.Format("[%s%d]", scriptname.GetCStr(), currentline);
|
||||
script_ref.Format("[%s%d]", scriptname.GetCStr(), _G(currentline));
|
||||
}
|
||||
|
||||
Debug::Printf(kDbgGroup_Game, mt, "(room:%d)%s %s", displayed_room, script_ref.GetCStr(), msg.GetCStr());
|
||||
|
|
|
@ -277,7 +277,7 @@ void ccInstance::AbortAndDestroy() {
|
|||
|
||||
int ccInstance::CallScriptFunction(const char *funcname, int32_t numargs, const RuntimeScriptValue *params) {
|
||||
_G(ccError) = 0;
|
||||
currentline = 0;
|
||||
_G(currentline) = 0;
|
||||
|
||||
if (numargs > 0 && !params) {
|
||||
cc_error("internal error in ccInstance::CallScriptFunction");
|
||||
|
@ -402,7 +402,7 @@ int ccInstance::CallScriptFunction(const char *funcname, int32_t numargs, const
|
|||
} \
|
||||
callStackSize--;\
|
||||
line_number = callStackLineNumber[callStackSize];\
|
||||
currentline = line_number
|
||||
_G(currentline) = line_number
|
||||
|
||||
#define MAXNEST 50 // number of recursive function calls allowed
|
||||
int ccInstance::Run(int32_t curpc) {
|
||||
|
@ -531,9 +531,9 @@ int ccInstance::Run(int32_t curpc) {
|
|||
switch (codeOp.Instruction.Code) {
|
||||
case SCMD_LINENUM:
|
||||
line_number = arg1.IValue;
|
||||
currentline = arg1.IValue;
|
||||
_G(currentline) = arg1.IValue;
|
||||
if (new_line_hook)
|
||||
new_line_hook(this, currentline);
|
||||
new_line_hook(this, _G(currentline));
|
||||
break;
|
||||
case SCMD_ADD:
|
||||
// If the the register is SREG_SP, we are allocating new variable on the stack
|
||||
|
@ -1288,7 +1288,7 @@ bool ccInstance::IsBeingRun() const {
|
|||
|
||||
bool ccInstance::_Create(PScript scri, ccInstance *joined) {
|
||||
int i;
|
||||
currentline = -1;
|
||||
_G(currentline) = -1;
|
||||
if ((scri == nullptr) && (joined != nullptr))
|
||||
scri = joined->instanceof;
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "ags/shared/script/cc_error.h"
|
||||
#include "ags/shared/util/file.h"
|
||||
#include "ags/shared/util/stream.h"
|
||||
#include "ags/globals.h"
|
||||
|
||||
namespace AGS3 {
|
||||
|
||||
|
@ -47,12 +48,11 @@ class RoomStruct;
|
|||
using namespace AGS::Shared;
|
||||
|
||||
extern void quit(const char *);
|
||||
extern int currentline; // in script/script_common
|
||||
|
||||
std::pair<String, String> cc_error_at_line(const char *error_msg) {
|
||||
ccInstance *sci = ccInstance::GetCurrentInstance();
|
||||
if (!sci) {
|
||||
return std::make_pair(String::FromFormat("Error (line %d): %s", currentline, error_msg), String());
|
||||
return std::make_pair(String::FromFormat("Error (line %d): %s", _G(currentline), error_msg), String());
|
||||
} else {
|
||||
return std::make_pair(String::FromFormat("Error: %s\n", error_msg), ccInstance::GetCurrentInstance()->GetCallStack(5));
|
||||
}
|
||||
|
|
|
@ -164,6 +164,18 @@ public:
|
|||
|
||||
/**@}*/
|
||||
|
||||
/**
|
||||
* \defgroup cc_script globals
|
||||
* @{
|
||||
*/
|
||||
|
||||
// currently executed line
|
||||
int _currentline = 0;
|
||||
// script file format signature
|
||||
const char _scfilesig[5] = "SCOM";
|
||||
|
||||
/**@}*/
|
||||
|
||||
/**
|
||||
* \defgroup debug globals
|
||||
* @{
|
||||
|
|
|
@ -46,7 +46,7 @@ void cc_error(const char *descr, ...) {
|
|||
String displbuf = String::FromFormatV(descr, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (currentline > 0) {
|
||||
if (_G(currentline) > 0) {
|
||||
// [IKM] Implementation is project-specific
|
||||
std::pair<String, String> errinfo = cc_error_at_line(displbuf);
|
||||
_G(ccErrorString) = errinfo.first;
|
||||
|
@ -57,7 +57,7 @@ void cc_error(const char *descr, ...) {
|
|||
}
|
||||
|
||||
_G(ccError) = 1;
|
||||
_G(ccErrorLine) = currentline;
|
||||
_G(ccErrorLine) = _G(currentline);
|
||||
}
|
||||
|
||||
} // namespace AGS3
|
||||
|
|
|
@ -25,16 +25,12 @@
|
|||
#include "ags/shared/script/script_common.h"
|
||||
#include "ags/shared/util/stream.h"
|
||||
#include "ags/shared/util/string_compat.h"
|
||||
#include "ags/globals.h"
|
||||
|
||||
namespace AGS3 {
|
||||
|
||||
using AGS::Shared::Stream;
|
||||
|
||||
// currently executed line
|
||||
int currentline;
|
||||
// script file format signature
|
||||
const char scfilesig[5] = "SCOM";
|
||||
|
||||
// [IKM] I reckon this function is almost identical to fgetstring in string_utils
|
||||
void freadstring(char **strptr, Stream *in) {
|
||||
static char ibuffer[300];
|
||||
|
@ -177,7 +173,7 @@ ccScript::~ccScript() {
|
|||
|
||||
void ccScript::Write(Shared::Stream *out) {
|
||||
int n;
|
||||
out->Write(scfilesig, 4);
|
||||
out->Write(_G(scfilesig), 4);
|
||||
out->WriteInt32(SCOM_VERSION);
|
||||
out->WriteInt32(globaldatasize);
|
||||
out->WriteInt32(codesize);
|
||||
|
@ -213,14 +209,14 @@ bool ccScript::Read(Shared::Stream *in) {
|
|||
instances = 0;
|
||||
int n;
|
||||
char gotsig[5];
|
||||
currentline = -1;
|
||||
_G(currentline) = -1;
|
||||
// MACPORT FIX: swap 'size' and 'nmemb'
|
||||
in->Read(gotsig, 4);
|
||||
gotsig[4] = 0;
|
||||
|
||||
int fileVer = in->ReadInt32();
|
||||
|
||||
if ((strcmp(gotsig, scfilesig) != 0) || (fileVer > SCOM_VERSION)) {
|
||||
if ((strcmp(gotsig, _G(scfilesig)) != 0) || (fileVer > SCOM_VERSION)) {
|
||||
cc_error("file was not written by ccScript::Write or seek position is incorrect");
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -132,12 +132,6 @@ namespace AGS3 {
|
|||
#define FIXUP_DATADATA 5 // globaldata[fixup] += &globaldata[0]
|
||||
#define FIXUP_STACK 6 // code[fixup] += &stack[0]
|
||||
|
||||
|
||||
|
||||
|
||||
extern int currentline;
|
||||
// Script file signature
|
||||
extern const char scfilesig[5];
|
||||
#define ENDFILESIG 0xbeefcafe
|
||||
|
||||
} // namespace AGS3
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue