Filled out more license headers
Completed lots of missing documentation Fixed /** on one-liners, must be /**< --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40377
This commit is contained in:
@@ -1,26 +1,46 @@
|
||||
/**
|
||||
* ================================================================
|
||||
* SourcePawn (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* ================================================================
|
||||
*
|
||||
* This file is part of the SourceMod/SourcePawn SDK. This file may only be used
|
||||
* or modified under the Terms and Conditions of its License Agreement, which is found
|
||||
* in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins
|
||||
* may change at any time. To view the latest information, see:
|
||||
* http://www.sourcemod.net/license.php
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SPFILE_HEADERS_H
|
||||
#define _INCLUDE_SPFILE_HEADERS_H
|
||||
|
||||
/**
|
||||
* @file sp_file_headers.h
|
||||
* @brief Defines the structure present in a SourcePawn compiled binary.
|
||||
*
|
||||
* Note: These structures should be 1-byte packed to match the file format.
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#if defined __GNUC__ || defined HAVE_STDINT_
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#if !defined HAVE_STDINT_H
|
||||
typedef unsigned __int64 uint64_t;
|
||||
typedef __int64 int64_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef __int32 int32_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef __int16 int16_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef __int8 int8_t;
|
||||
typedef unsigned __int64 uint64_t; /**< 64bit unsigned integer */
|
||||
typedef __int64 int64_t; /**< 64bit signed integer */
|
||||
typedef unsigned __int32 uint32_t; /**< 32bit unsigned integer */
|
||||
typedef __int32 int32_t; /**< 32bit signed integer */
|
||||
typedef unsigned __int16 uint16_t; /**< 16bit unsigned integer */
|
||||
typedef __int16 int16_t; /**< 16bit signed integer */
|
||||
typedef unsigned __int8 uint8_t; /**< 8bit unsigned integer */
|
||||
typedef __int8 int8_t; /**< 8bit signed integer */
|
||||
#define HAVE_STDINT_H
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define SPFILE_MAGIC 0x53504646 /* Source Pawn File Format (SPFF) */
|
||||
//#define SPFILE_VERSION 0x0100
|
||||
#define SPFILE_VERSION 0x0101 /* Uncompressed bytecode */
|
||||
#define SPFILE_MAGIC 0x53504646 /**< Source Pawn File Format (SPFF) */
|
||||
#define SPFILE_VERSION 0x0101 /**< Uncompressed bytecode */
|
||||
|
||||
//:TODO: better compiler/nix support
|
||||
#if defined __linux__
|
||||
@@ -30,78 +50,92 @@
|
||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||
#endif
|
||||
|
||||
#define SPFILE_COMPRESSION_NONE 0
|
||||
#define SPFILE_COMPRESSION_GZ 1
|
||||
#define SPFILE_COMPRESSION_NONE 0 /**< No compression in file */
|
||||
#define SPFILE_COMPRESSION_GZ 1 /**< GZ compression */
|
||||
|
||||
/**
|
||||
* @brief File section header format.
|
||||
*/
|
||||
typedef struct sp_file_section_s
|
||||
{
|
||||
uint32_t nameoffs; /* rel offset into global string table */
|
||||
uint32_t dataoffs;
|
||||
uint32_t size;
|
||||
uint32_t nameoffs; /**< Relative offset into global string table */
|
||||
uint32_t dataoffs; /**< Offset into the data section of the file */
|
||||
uint32_t size; /**< Size of the section's entry in the data section */
|
||||
} sp_file_section_t;
|
||||
|
||||
/**
|
||||
* If compression is 0, then
|
||||
* disksize may be 0 to mean that
|
||||
* only the imagesize is needed.
|
||||
* @brief File header format. If compression is 0, then disksize may be 0
|
||||
* to mean that only the imagesize is needed.
|
||||
*/
|
||||
typedef struct sp_file_hdr_s
|
||||
{
|
||||
uint32_t magic; /* magic number */
|
||||
uint16_t version; /* version code */
|
||||
uint8_t compression;/* compression algorithm */
|
||||
uint32_t disksize; /* size on disk */
|
||||
uint32_t imagesize; /* size in memory */
|
||||
uint8_t sections; /* number of sections */
|
||||
uint32_t stringtab; /* offset to string table */
|
||||
uint32_t dataoffs; /* offset to file proper (any compression starts here) */
|
||||
uint32_t magic; /**< Magic number */
|
||||
uint16_t version; /**< Version code */
|
||||
uint8_t compression;/**< Compression algorithm */
|
||||
uint32_t disksize; /**< Size on disk */
|
||||
uint32_t imagesize; /**< Size in memory */
|
||||
uint8_t sections; /**< Number of sections */
|
||||
uint32_t stringtab; /**< Offset to string table */
|
||||
uint32_t dataoffs; /**< Offset to file proper (any compression starts here) */
|
||||
} sp_file_hdr_t;
|
||||
|
||||
#define SP_FLAG_DEBUG (1<<0)
|
||||
#define SP_FLAG_DEBUG (1<<0) /**< Debug information is present in the file */
|
||||
|
||||
/* section is ".code" */
|
||||
/**
|
||||
* @brief File-encoded format of the ".code" section.
|
||||
*/
|
||||
typedef struct sp_file_code_s
|
||||
{
|
||||
uint32_t codesize; /* codesize in bytes */
|
||||
uint8_t cellsize; /* cellsize in bytes */
|
||||
uint8_t codeversion; /* version of opcodes supported */
|
||||
uint16_t flags; /* flags */
|
||||
uint32_t main; /* address to "main" if any */
|
||||
uint32_t code; /* rel offset to code */
|
||||
uint32_t codesize; /**< Codesize in bytes */
|
||||
uint8_t cellsize; /**< Cellsize in bytes */
|
||||
uint8_t codeversion; /**< Version of opcodes supported */
|
||||
uint16_t flags; /**< Flags */
|
||||
uint32_t main; /**< Address to "main," if any */
|
||||
uint32_t code; /**< Relative offset to code */
|
||||
} sp_file_code_t;
|
||||
|
||||
/* section is .data */
|
||||
/**
|
||||
* @brief File-encoded format of the ".data" section.
|
||||
*/
|
||||
typedef struct sp_file_data_s
|
||||
{
|
||||
uint32_t datasize; /* size of data section in memory */
|
||||
uint32_t memsize; /* total mem required (includes data) */
|
||||
uint32_t data; /* file offset to data (helper) */
|
||||
uint32_t datasize; /**< Size of data section in memory */
|
||||
uint32_t memsize; /**< Total mem required (includes data) */
|
||||
uint32_t data; /**< File offset to data (helper) */
|
||||
} sp_file_data_t;
|
||||
|
||||
/* section is .publics */
|
||||
/**
|
||||
* @brief File-encoded format of the ".publics" section.
|
||||
*/
|
||||
typedef struct sp_file_publics_s
|
||||
{
|
||||
uint32_t address; /* address rel to code section */
|
||||
uint32_t name; /* index into nametable */
|
||||
uint32_t address; /**< Address relative to code section */
|
||||
uint32_t name; /**< Index into nametable */
|
||||
} sp_file_publics_t;
|
||||
|
||||
/* section is .natives */
|
||||
/**
|
||||
* @brief File-encoded format of the ".natives" section.
|
||||
*/
|
||||
typedef struct sp_file_natives_s
|
||||
{
|
||||
uint32_t name; /* name of native at index */
|
||||
uint32_t name; /**< Index into nametable */
|
||||
} sp_file_natives_t;
|
||||
|
||||
/* section is .libraries */
|
||||
/**
|
||||
* @brief File-encoded format of the ".libraries" section (UNUSED).
|
||||
*/
|
||||
typedef struct sp_file_libraries_s
|
||||
{
|
||||
uint32_t name; /* index into nametable */
|
||||
uint32_t name; /**< Index into nametable */
|
||||
} sp_file_libraries_t;
|
||||
|
||||
/* section is .pubvars */
|
||||
/**
|
||||
* @brief File-encoded format of the ".pubvars" section.
|
||||
*/
|
||||
typedef struct sp_file_pubvars_s
|
||||
{
|
||||
uint32_t address; /* address rel to dat section */
|
||||
uint32_t name; /* index into nametable */
|
||||
uint32_t address; /**< Address relative to the DAT section */
|
||||
uint32_t name; /**< Index into nametable */
|
||||
} sp_file_pubvars_t;
|
||||
|
||||
#if defined __linux__
|
||||
@@ -110,54 +144,66 @@ typedef struct sp_file_pubvars_s
|
||||
#pragma pack(pop) /* reset previous packing */
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief File-encoded debug information table.
|
||||
*/
|
||||
typedef struct sp_fdbg_info_s
|
||||
{
|
||||
uint32_t num_files; /* number of files */
|
||||
uint32_t num_lines; /* number of lines */
|
||||
uint32_t num_syms; /* number of symbols */
|
||||
uint32_t num_arrays; /* number of symbols which are arrays */
|
||||
uint32_t num_files; /**< number of files */
|
||||
uint32_t num_lines; /**< number of lines */
|
||||
uint32_t num_syms; /**< number of symbols */
|
||||
uint32_t num_arrays; /**< number of symbols which are arrays */
|
||||
} sp_fdbg_info_t;
|
||||
|
||||
/**
|
||||
* Debug information structures
|
||||
* @brief File-encoded debug file table.
|
||||
*/
|
||||
typedef struct sp_fdbg_file_s
|
||||
{
|
||||
uint32_t addr; /* address into code */
|
||||
uint32_t name; /* offset into debug nametable */
|
||||
uint32_t addr; /**< Address into code */
|
||||
uint32_t name; /**< Offset into debug nametable */
|
||||
} sp_fdbg_file_t;
|
||||
|
||||
/**
|
||||
* @brief File-encoded debug line table.
|
||||
*/
|
||||
typedef struct sp_fdbg_line_s
|
||||
{
|
||||
uint32_t addr; /* address into code */
|
||||
uint32_t line; /* line number */
|
||||
uint32_t addr; /**< Address into code */
|
||||
uint32_t line; /**< Line number */
|
||||
} sp_fdbg_line_t;
|
||||
|
||||
#define SP_SYM_VARIABLE 1 /* cell that has an address and that can be fetched directly (lvalue) */
|
||||
#define SP_SYM_REFERENCE 2 /* VARIABLE, but must be dereferenced */
|
||||
#define SP_SYM_ARRAY 3
|
||||
#define SP_SYM_REFARRAY 4 /* an array passed by reference (i.e. a pointer) */
|
||||
#define SP_SYM_FUNCTION 9
|
||||
#define SP_SYM_VARIABLE 1 /**< Cell that has an address and that can be fetched directly (lvalue) */
|
||||
#define SP_SYM_REFERENCE 2 /**< VARIABLE, but must be dereferenced */
|
||||
#define SP_SYM_ARRAY 3 /**< Symbol is an array */
|
||||
#define SP_SYM_REFARRAY 4 /**< An array passed by reference (i.e. a pointer) */
|
||||
#define SP_SYM_FUNCTION 9 /**< Symbol is a function */
|
||||
|
||||
/**
|
||||
* @brief File-encoded debug symbol information.
|
||||
*/
|
||||
typedef struct sp_fdbg_symbol_s
|
||||
{
|
||||
int32_t addr; /* address rel to DAT or stack frame */
|
||||
int16_t tagid; /* tag id */
|
||||
uint32_t codestart; /* start scope validity in code */
|
||||
uint32_t codeend; /* end scope validity in code */
|
||||
uint8_t ident; /* variable type */
|
||||
uint8_t vclass; /* scope class (local vs global) */
|
||||
uint16_t dimcount; /* dimension count (for arrays) */
|
||||
uint32_t name; /* offset into debug nametable */
|
||||
int32_t addr; /**< Address rel to DAT or stack frame */
|
||||
int16_t tagid; /**< Tag id */
|
||||
uint32_t codestart; /**< Start scope validity in code */
|
||||
uint32_t codeend; /**< End scope validity in code */
|
||||
uint8_t ident; /**< Variable type */
|
||||
uint8_t vclass; /**< Scope class (local vs global) */
|
||||
uint16_t dimcount; /**< Dimension count (for arrays) */
|
||||
uint32_t name; /**< Offset into debug nametable */
|
||||
} sp_fdbg_symbol_t;
|
||||
|
||||
/**
|
||||
* @brief File-encoded debug symbol array dimension info.
|
||||
*/
|
||||
typedef struct sp_fdbg_arraydim_s
|
||||
{
|
||||
int16_t tagid; /* tag id */
|
||||
uint32_t size; /* size of dimension */
|
||||
int16_t tagid; /**< Tag id */
|
||||
uint32_t size; /**< Size of dimension */
|
||||
} sp_fdbg_arraydim_t;
|
||||
|
||||
/* section is .names */
|
||||
/** Typedef for .names table */
|
||||
typedef char * sp_file_nametab_t;
|
||||
|
||||
#endif //_INCLUDE_SPFILE_HEADERS_H
|
||||
|
||||
@@ -1,12 +1,44 @@
|
||||
/**
|
||||
* ================================================================
|
||||
* SourcePawn (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* ================================================================
|
||||
*
|
||||
* This file is part of the SourceMod/SourcePawn SDK. This file may only be used
|
||||
* or modified under the Terms and Conditions of its License Agreement, which is found
|
||||
* in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins
|
||||
* may change at any time. To view the latest information, see:
|
||||
* http://www.sourcemod.net/license.php
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SOURCEPAWN_VM_TYPEUTIL_H_
|
||||
#define _INCLUDE_SOURCEPAWN_VM_TYPEUTIL_H_
|
||||
|
||||
/**
|
||||
* @file sp_typeutil.h
|
||||
* @brief Defines type utility functions.
|
||||
*/
|
||||
|
||||
#include "sp_vm_types.h"
|
||||
|
||||
/**
|
||||
* @brief Reinterpret-casts a float to a cell (requires -fno-strict-aliasing for GCC).
|
||||
*
|
||||
* @param val Float value.
|
||||
* @return Cell typed version.
|
||||
*/
|
||||
inline cell_t sp_ftoc(float val)
|
||||
{
|
||||
return *(cell_t *)&val;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reinterpret-casts a cell to a float (requires -fno-strict-aliasing for GCC).
|
||||
*
|
||||
* @param val Cell-packed float value.
|
||||
* @return Float typed version.
|
||||
*/
|
||||
inline float sp_ctof(cell_t val)
|
||||
{
|
||||
return *(float *)&val;
|
||||
|
||||
@@ -1,9 +1,29 @@
|
||||
/**
|
||||
* ================================================================
|
||||
* SourcePawn (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* ================================================================
|
||||
*
|
||||
* This file is part of the SourceMod/SourcePawn SDK. This file may only be used
|
||||
* or modified under the Terms and Conditions of its License Agreement, which is found
|
||||
* in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins
|
||||
* may change at any time. To view the latest information, see:
|
||||
* http://www.sourcemod.net/license.php
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SOURCEPAWN_VM_API_H_
|
||||
#define _INCLUDE_SOURCEPAWN_VM_API_H_
|
||||
|
||||
/**
|
||||
* @file sp_vm_api.h
|
||||
* @brief Contains all of the object structures used in the SourcePawn API.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "sp_vm_types.h"
|
||||
|
||||
/** SourcePawn VM API Version */
|
||||
#define SOURCEPAWN_VM_API_VERSION 1
|
||||
|
||||
#if defined SOURCEMOD_BUILD
|
||||
@@ -17,10 +37,9 @@ namespace SourcePawn
|
||||
{
|
||||
class IVirtualMachine;
|
||||
|
||||
#define SM_PARAM_COPYBACK (1<<0) /* Copy an array/reference back after call */
|
||||
|
||||
#define SM_PARAM_STRING_UTF8 (1<<0) /* String should be UTF-8 handled */
|
||||
#define SM_PARAM_STRING_COPY (1<<1) /* String should be copied into the plugin */
|
||||
#define SM_PARAM_COPYBACK (1<<0) /**< Copy an array/reference back after call */
|
||||
#define SM_PARAM_STRING_UTF8 (1<<0) /**< String should be UTF-8 handled */
|
||||
#define SM_PARAM_STRING_COPY (1<<1) /**< String should be copied into the plugin */
|
||||
|
||||
/**
|
||||
* @brief Represents what a function needs to implement in order to be callable.
|
||||
@@ -52,7 +71,7 @@ namespace SourcePawn
|
||||
/**
|
||||
* @brief Pushes a float onto the current call.
|
||||
*
|
||||
* @param float Parameter value to push.
|
||||
* @param number Parameter value to push.
|
||||
* @return Error code, if any.
|
||||
*/
|
||||
virtual int PushFloat(float number) =0;
|
||||
@@ -64,7 +83,7 @@ namespace SourcePawn
|
||||
* This means you cannot push a pointer, change it, and push it again and expect
|
||||
* two different values to come out.
|
||||
*
|
||||
* @param float Parameter value to push.
|
||||
* @param number Parameter value to push.
|
||||
& @param flags Copy-back flags.
|
||||
* @return Error code, if any.
|
||||
*/
|
||||
@@ -119,6 +138,7 @@ namespace SourcePawn
|
||||
|
||||
/**
|
||||
* @brief Encapsulates a function call in a plugin.
|
||||
*
|
||||
* NOTE: Function calls must be atomic to one execution context.
|
||||
* NOTE: This object should not be deleted. It lives for the lifetime of the plugin.
|
||||
*/
|
||||
@@ -139,7 +159,7 @@ namespace SourcePawn
|
||||
* NOTE: You will get an error if you attempt to use CallFunction() with
|
||||
* previously pushed parameters.
|
||||
*
|
||||
* @param param Array of cell parameters.
|
||||
* @param params Array of cell parameters.
|
||||
* @param num_params Number of parameters to push.
|
||||
* @param result Pointer to store result of function on return.
|
||||
* @return SourcePawn error code (if any).
|
||||
@@ -156,7 +176,7 @@ namespace SourcePawn
|
||||
/**
|
||||
* @brief Returns the physical address of a by-reference parameter.
|
||||
*
|
||||
* @param Parameter index to read (beginning at 0).
|
||||
* @param param Parameter index to read (beginning at 0).
|
||||
* @return Address, or NULL if invalid parameter specified.
|
||||
*/
|
||||
virtual cell_t *GetAddressOfPushedParam(unsigned int param) =0;
|
||||
@@ -200,6 +220,7 @@ namespace SourcePawn
|
||||
class IPluginContext
|
||||
{
|
||||
public:
|
||||
/** Virtual destructr */
|
||||
virtual ~IPluginContext() { };
|
||||
public:
|
||||
/**
|
||||
@@ -525,9 +546,9 @@ namespace SourcePawn
|
||||
*/
|
||||
struct CallStackInfo
|
||||
{
|
||||
const char *filename; /* NULL if not found */
|
||||
unsigned int line; /* 0 if not found */
|
||||
const char *function; /* NULL if not found */
|
||||
const char *filename; /**< NULL if not found */
|
||||
unsigned int line; /**< 0 if not found */
|
||||
const char *function; /**< NULL if not found */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -690,6 +711,7 @@ namespace SourcePawn
|
||||
class ICompilation
|
||||
{
|
||||
public:
|
||||
/** Virtual destructor */
|
||||
virtual ~ICompilation() { };
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,25 @@
|
||||
/**
|
||||
* ================================================================
|
||||
* SourcePawn (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* ================================================================
|
||||
*
|
||||
* This file is part of the SourceMod/SourcePawn SDK. This file may only be used
|
||||
* or modified under the Terms and Conditions of its License Agreement, which is found
|
||||
* in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins
|
||||
* may change at any time. To view the latest information, see:
|
||||
* http://www.sourcemod.net/license.php
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SOURCEPAWN_VM_BASE_H_
|
||||
#define _INCLUDE_SOURCEPAWN_VM_BASE_H_
|
||||
|
||||
/**
|
||||
* @file sp_vm_base.h
|
||||
* @brief Contains JIT export/linkage macros.
|
||||
*/
|
||||
|
||||
#include <sp_vm_api.h>
|
||||
|
||||
/* :TODO: rename this to sp_vm_linkage.h */
|
||||
@@ -11,6 +30,7 @@
|
||||
#define EXPORT_LINK extern "C" __attribute__((visibility("default")))
|
||||
#endif
|
||||
|
||||
/** No longer used */
|
||||
typedef SourcePawn::IVirtualMachine *(*SP_GETVM_FUNC)(SourcePawn::ISourcePawnEngine *);
|
||||
|
||||
#endif //_INCLUDE_SOURCEPAWN_VM_BASE_H_
|
||||
|
||||
+148
-136
@@ -1,45 +1,64 @@
|
||||
/**
|
||||
* ================================================================
|
||||
* SourcePawn (C)2004-2007 AlliedModders LLC. All rights reserved.
|
||||
* ================================================================
|
||||
*
|
||||
* This file is part of the SourceMod/SourcePawn SDK. This file may only be used
|
||||
* or modified under the Terms and Conditions of its License Agreement, which is found
|
||||
* in LICENSE.txt. The Terms and Conditions for making SourceMod extensions/plugins
|
||||
* may change at any time. To view the latest information, see:
|
||||
* http://www.sourcemod.net/license.php
|
||||
*
|
||||
* Version: $Id$
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE_SOURCEPAWN_VM_TYPES_H
|
||||
#define _INCLUDE_SOURCEPAWN_VM_TYPES_H
|
||||
|
||||
/**
|
||||
* @file sp_vm_types.h
|
||||
* @brief Contains all run-time SourcePawn structures.
|
||||
*/
|
||||
|
||||
#include "sp_file_headers.h"
|
||||
|
||||
typedef uint32_t ucell_t;
|
||||
typedef int32_t cell_t;
|
||||
typedef uint32_t funcid_t;
|
||||
typedef uint32_t ucell_t; /**< Unsigned 32bit integer */
|
||||
typedef int32_t cell_t; /**< Basic 32bit signed integer type for plugins */
|
||||
typedef uint32_t funcid_t; /**< Function index code */
|
||||
|
||||
#include "sp_typeutil.h"
|
||||
|
||||
#define SP_MAX_EXEC_PARAMS 32 /* Maximum number of parameters in a function */
|
||||
#define SP_MAX_EXEC_PARAMS 32 /**< Maximum number of parameters in a function */
|
||||
|
||||
/**
|
||||
* Error codes
|
||||
* NOTE: Be sure to update the error string table when changing these
|
||||
* @brief Error codes for SourcePawn routines.
|
||||
*/
|
||||
#define SP_ERROR_NONE 0
|
||||
#define SP_ERROR_FILE_FORMAT 1 /* File format unrecognized */
|
||||
#define SP_ERROR_DECOMPRESSOR 2 /* A decompressor was not found */
|
||||
#define SP_ERROR_HEAPLOW 3 /* Not enough space left on the heap */
|
||||
#define SP_ERROR_PARAM 4 /* Invalid parameter or parameter type */
|
||||
#define SP_ERROR_INVALID_ADDRESS 5 /* A memory address was not valid */
|
||||
#define SP_ERROR_NOT_FOUND 6 /* The object in question was not found */
|
||||
#define SP_ERROR_INDEX 7 /* Invalid index parameter */
|
||||
#define SP_ERROR_STACKLOW 8 /* Nnot enough space left on the stack */
|
||||
#define SP_ERROR_NOTDEBUGGING 9 /* Debug mode was not on or debug section not found */
|
||||
#define SP_ERROR_INVALID_INSTRUCTION 10 /* Invalid instruction was encountered */
|
||||
#define SP_ERROR_MEMACCESS 11 /* Invalid memory access */
|
||||
#define SP_ERROR_STACKMIN 12 /* Stack went beyond its minimum value */
|
||||
#define SP_ERROR_HEAPMIN 13 /* Heap went beyond its minimum value */
|
||||
#define SP_ERROR_DIVIDE_BY_ZERO 14 /* Division by zero */
|
||||
#define SP_ERROR_ARRAY_BOUNDS 15 /* Array index is out of bounds */
|
||||
#define SP_ERROR_INSTRUCTION_PARAM 16 /* Instruction had an invalid parameter */
|
||||
#define SP_ERROR_STACKLEAK 17 /* A native leaked an item on the stack */
|
||||
#define SP_ERROR_HEAPLEAK 18 /* A native leaked an item on the heap */
|
||||
#define SP_ERROR_ARRAY_TOO_BIG 19 /* A dynamic array is too big */
|
||||
#define SP_ERROR_TRACKER_BOUNDS 20 /* Tracker stack is out of bounds */
|
||||
#define SP_ERROR_INVALID_NATIVE 21 /* Native was pending or invalid */
|
||||
#define SP_ERROR_PARAMS_MAX 22 /* Maximum number of parameters reached */
|
||||
#define SP_ERROR_NATIVE 23 /* Error originates from a native */
|
||||
#define SP_ERROR_NOT_RUNNABLE 24 /* Function or plugin is not runnable */
|
||||
#define SP_ERROR_NONE 0 /**< No error occurred */
|
||||
#define SP_ERROR_FILE_FORMAT 1 /**< File format unrecognized */
|
||||
#define SP_ERROR_DECOMPRESSOR 2 /**< A decompressor was not found */
|
||||
#define SP_ERROR_HEAPLOW 3 /**< Not enough space left on the heap */
|
||||
#define SP_ERROR_PARAM 4 /**< Invalid parameter or parameter type */
|
||||
#define SP_ERROR_INVALID_ADDRESS 5 /**< A memory address was not valid */
|
||||
#define SP_ERROR_NOT_FOUND 6 /**< The object in question was not found */
|
||||
#define SP_ERROR_INDEX 7 /**< Invalid index parameter */
|
||||
#define SP_ERROR_STACKLOW 8 /**< Nnot enough space left on the stack */
|
||||
#define SP_ERROR_NOTDEBUGGING 9 /**< Debug mode was not on or debug section not found */
|
||||
#define SP_ERROR_INVALID_INSTRUCTION 10 /**< Invalid instruction was encountered */
|
||||
#define SP_ERROR_MEMACCESS 11 /**< Invalid memory access */
|
||||
#define SP_ERROR_STACKMIN 12 /**< Stack went beyond its minimum value */
|
||||
#define SP_ERROR_HEAPMIN 13 /**< Heap went beyond its minimum value */
|
||||
#define SP_ERROR_DIVIDE_BY_ZERO 14 /**< Division by zero */
|
||||
#define SP_ERROR_ARRAY_BOUNDS 15 /**< Array index is out of bounds */
|
||||
#define SP_ERROR_INSTRUCTION_PARAM 16 /**< Instruction had an invalid parameter */
|
||||
#define SP_ERROR_STACKLEAK 17 /**< A native leaked an item on the stack */
|
||||
#define SP_ERROR_HEAPLEAK 18 /**< A native leaked an item on the heap */
|
||||
#define SP_ERROR_ARRAY_TOO_BIG 19 /**< A dynamic array is too big */
|
||||
#define SP_ERROR_TRACKER_BOUNDS 20 /**< Tracker stack is out of bounds */
|
||||
#define SP_ERROR_INVALID_NATIVE 21 /**< Native was pending or invalid */
|
||||
#define SP_ERROR_PARAMS_MAX 22 /**< Maximum number of parameters reached */
|
||||
#define SP_ERROR_NATIVE 23 /**< Error originates from a native */
|
||||
#define SP_ERROR_NOT_RUNNABLE 24 /**< Function or plugin is not runnable */
|
||||
//Hey you! Update the string table if you add to the end of me! */
|
||||
|
||||
/**********************************************
|
||||
*** The following structures are reference structures.
|
||||
@@ -49,60 +68,56 @@ typedef uint32_t funcid_t;
|
||||
**********************************************/
|
||||
|
||||
/**
|
||||
* Information about the core plugin tables.
|
||||
* These may or may not be present!
|
||||
* @brief Information about the core plugin tables. These may or may not be present!
|
||||
*/
|
||||
typedef struct sp_plugin_infotab_s
|
||||
{
|
||||
const char *stringbase; /* base of string table */
|
||||
uint32_t publics_num; /* number of publics */
|
||||
sp_file_publics_t *publics; /* public table */
|
||||
uint32_t natives_num; /* number of natives */
|
||||
sp_file_natives_t *natives; /* native table */
|
||||
uint32_t pubvars_num; /* number of pubvars */
|
||||
sp_file_pubvars_t *pubvars; /* pubvars table */
|
||||
uint32_t libraries_num; /* number of libraries */
|
||||
sp_file_libraries_t *lib; /* library table */
|
||||
const char *stringbase; /**< base of string table */
|
||||
uint32_t publics_num; /**< number of publics */
|
||||
sp_file_publics_t *publics; /**< public table */
|
||||
uint32_t natives_num; /**< number of natives */
|
||||
sp_file_natives_t *natives; /**< native table */
|
||||
uint32_t pubvars_num; /**< number of pubvars */
|
||||
sp_file_pubvars_t *pubvars; /**< pubvars table */
|
||||
uint32_t libraries_num; /**< number of libraries */
|
||||
sp_file_libraries_t *lib; /**< library table */
|
||||
} sp_plugin_infotab_t;
|
||||
|
||||
/**
|
||||
* Information about the plugin's debug tables.
|
||||
* These are all present if one is present.
|
||||
* @brief Information about the plugin's debug tables. These are all present if one is present.
|
||||
*/
|
||||
typedef struct sp_plugin_debug_s
|
||||
{
|
||||
const char *stringbase; /* base of string table */
|
||||
uint32_t files_num; /* number of files */
|
||||
sp_fdbg_file_t *files; /* files table */
|
||||
uint32_t lines_num; /* number of lines */
|
||||
sp_fdbg_line_t *lines; /* lines table */
|
||||
uint32_t syms_num; /* number of symbols */
|
||||
sp_fdbg_symbol_t *symbols; /* symbol table */
|
||||
const char *stringbase; /**< base of string table */
|
||||
uint32_t files_num; /**< number of files */
|
||||
sp_fdbg_file_t *files; /**< files table */
|
||||
uint32_t lines_num; /**< number of lines */
|
||||
sp_fdbg_line_t *lines; /**< lines table */
|
||||
uint32_t syms_num; /**< number of symbols */
|
||||
sp_fdbg_symbol_t *symbols; /**< symbol table */
|
||||
} sp_plugin_debug_t;
|
||||
|
||||
#define SP_FA_SELF_EXTERNAL (1<<0)
|
||||
#define SP_FA_BASE_EXTERNAL (1<<1)
|
||||
#define SP_FA_SELF_EXTERNAL (1<<0) /**< Allocation of structure is external */
|
||||
#define SP_FA_BASE_EXTERNAL (1<<1) /**< Allocation of base is external */
|
||||
|
||||
/**
|
||||
* The rebased, in-memory format of a plugin.
|
||||
* This differs from the on-disk structure to ensure
|
||||
* that the format is properly read.
|
||||
* @brief The rebased memory format of a plugin. This differs from the on-disk structure
|
||||
* to ensure that the format is properly read.
|
||||
*/
|
||||
typedef struct sp_plugin_s
|
||||
{
|
||||
uint8_t *base; /* base of memory */
|
||||
uint8_t *pcode; /* p-code */
|
||||
uint32_t pcode_size; /* size of p-code */
|
||||
uint8_t *data; /* data size */
|
||||
uint32_t data_size; /* size of data */
|
||||
uint32_t memory; /* required memory */
|
||||
uint16_t flags; /* code flags */
|
||||
uint32_t allocflags; /* allocation flags */
|
||||
sp_plugin_infotab_t info; /* base info table */
|
||||
sp_plugin_debug_t debug; /* debug info table */
|
||||
uint8_t *base; /**< Base of memory for this plugin. */
|
||||
uint8_t *pcode; /**< P-Code of plugin */
|
||||
uint32_t pcode_size; /**< Size of p-code */
|
||||
uint8_t *data; /**< Data/memory layout */
|
||||
uint32_t data_size; /**< Size of data */
|
||||
uint32_t memory; /**< Required memory space */
|
||||
uint16_t flags; /**< Code flags */
|
||||
uint32_t allocflags; /**< Allocation flags */
|
||||
sp_plugin_infotab_t info; /**< Base info table */
|
||||
sp_plugin_debug_t debug; /**< Debug info table */
|
||||
} sp_plugin_t;
|
||||
|
||||
/** Forward declarations */
|
||||
|
||||
namespace SourcePawn
|
||||
{
|
||||
@@ -112,6 +127,10 @@ namespace SourcePawn
|
||||
|
||||
struct sp_context_s;
|
||||
|
||||
/**
|
||||
* @brief Native callback prototype, passed a context and a parameter stack (0=count, 1+=args).
|
||||
* A cell must be returned.
|
||||
*/
|
||||
typedef cell_t (*SPVM_NATIVE_FUNC)(SourcePawn::IPluginContext *, const cell_t *);
|
||||
|
||||
/**********************************************
|
||||
@@ -120,84 +139,82 @@ typedef cell_t (*SPVM_NATIVE_FUNC)(SourcePawn::IPluginContext *, const cell_t *)
|
||||
**********************************************/
|
||||
|
||||
/**
|
||||
* Offsets and names to a public function.
|
||||
* By default, these point back to the string table
|
||||
* in the sp_plugin_infotab_t structure.
|
||||
* @brief Offsets and names to a public function.
|
||||
*/
|
||||
typedef struct sp_public_s
|
||||
{
|
||||
funcid_t funcid; /* encoded function id */
|
||||
uint32_t code_offs; /* code offset */
|
||||
const char *name; /* name */
|
||||
funcid_t funcid; /**< Encoded function id */
|
||||
uint32_t code_offs; /**< Relocated code offset */
|
||||
const char *name; /**< Name of function */
|
||||
} sp_public_t;
|
||||
|
||||
/**
|
||||
* Offsets and names to public variables.
|
||||
* The offset is relocated and the name by default
|
||||
* points back to the sp_plugin_infotab_t structure.
|
||||
* @brief Offsets and names to public variables.
|
||||
*
|
||||
* The offset is relocated and the name by default points back to the sp_plugin_infotab_t structure.
|
||||
*/
|
||||
typedef struct sp_pubvar_s
|
||||
{
|
||||
cell_t *offs; /* pointer to data */
|
||||
const char *name; /* name */
|
||||
cell_t *offs; /**< Pointer to data */
|
||||
const char *name; /**< Name */
|
||||
} sp_pubvar_t;
|
||||
|
||||
#define SP_NATIVE_UNBOUND (0) /* Native is undefined */
|
||||
#define SP_NATIVE_BOUND (1) /* Native is bound */
|
||||
#define SP_NATIVE_UNBOUND (0) /**< Native is undefined */
|
||||
#define SP_NATIVE_BOUND (1) /**< Native is bound */
|
||||
|
||||
/**
|
||||
* Native lookup table, by default names
|
||||
* point back to the sp_plugin_infotab_t structure.
|
||||
* A native is NULL if unit
|
||||
* @brief Native lookup table, by default names point back to the sp_plugin_infotab_t structure.
|
||||
*/
|
||||
typedef struct sp_native_s
|
||||
{
|
||||
SPVM_NATIVE_FUNC pfn; /* function pointer */
|
||||
const char * name; /* name of function */
|
||||
uint32_t status; /* status flags */
|
||||
SPVM_NATIVE_FUNC pfn; /**< Function pointer */
|
||||
const char * name; /**< Name of function */
|
||||
uint32_t status; /**< Status flags */
|
||||
} sp_native_t;
|
||||
|
||||
/**
|
||||
* Used for setting natives from modules/host apps.
|
||||
* @brief Used for setting natives from modules/host apps.
|
||||
*/
|
||||
typedef struct sp_nativeinfo_s
|
||||
{
|
||||
const char *name;
|
||||
SPVM_NATIVE_FUNC func;
|
||||
const char *name; /**< Name of the native */
|
||||
SPVM_NATIVE_FUNC func; /**< Address of native implementation */
|
||||
} sp_nativeinfo_t;
|
||||
|
||||
/**
|
||||
* Debug file table
|
||||
* @brief Run-time debug file table
|
||||
*/
|
||||
typedef struct sp_debug_file_s
|
||||
{
|
||||
uint32_t addr; /* address into code */
|
||||
const char * name; /* name of file */
|
||||
uint32_t addr; /**< Address into code */
|
||||
const char * name; /**< Name of file */
|
||||
} sp_debug_file_t;
|
||||
|
||||
/**
|
||||
* Note that line is missing. It is not necessary since
|
||||
* this can be retrieved from the base plugin info.
|
||||
* @brief Contains run-time debug line table.
|
||||
*/
|
||||
typedef struct sp_debug_line_s
|
||||
{
|
||||
uint32_t addr; /* address into code */
|
||||
uint32_t line; /* line no. */
|
||||
uint32_t addr; /**< Address into code */
|
||||
uint32_t line; /**< Line number */
|
||||
} sp_debug_line_t;
|
||||
|
||||
/**
|
||||
* @brief These structures are equivalent.
|
||||
*/
|
||||
typedef sp_fdbg_arraydim_t sp_debug_arraydim_t;
|
||||
|
||||
/**
|
||||
* The majority of this struct is already located in the parent
|
||||
* block. Thus, only the relocated portions are required.
|
||||
* @brief The majority of this struct is already located in the parent
|
||||
* block. Thus, only the relocated portions are required.
|
||||
*/
|
||||
typedef struct sp_debug_symbol_s
|
||||
{
|
||||
uint32_t codestart; /* relocated code address */
|
||||
uint32_t codeend; /* relocated code end address */
|
||||
const char * name; /* relocated name */
|
||||
sp_debug_arraydim_t *dims; /* relocated dimension struct, if any */
|
||||
sp_fdbg_symbol_t *sym; /* pointer to original symbol */
|
||||
uint32_t codestart; /**< Relocated code address */
|
||||
uint32_t codeend; /**< relocated code end address */
|
||||
const char * name; /**< Relocated name */
|
||||
sp_debug_arraydim_t *dims; /**< Relocated dimension struct, if any */
|
||||
sp_fdbg_symbol_t *sym; /**< Pointer to original symbol */
|
||||
} sp_debug_symbol_t;
|
||||
|
||||
/**
|
||||
@@ -209,44 +226,39 @@ typedef struct sp_debug_symbol_s
|
||||
*/
|
||||
typedef int (*SPVM_DEBUGBREAK)(struct sp_context_s *, uint32_t, uint32_t);
|
||||
|
||||
#define SPFLAG_PLUGIN_DEBUG (1<<0) /* plugin is in debug mode */
|
||||
#define SPFLAG_PLUGIN_DEBUG (1<<0) /**< plugin is in debug mode */
|
||||
|
||||
/**
|
||||
* This is the heart of the VM. It contains all of the runtime
|
||||
* information about a plugin context.
|
||||
* Note that user[0..3] can be used for any user based pointers.
|
||||
* vm[0..3] should not be touched, as it is reserved for the VM.
|
||||
* @brief This is the heart of the VM. It contains all of the runtime
|
||||
* information about a plugin context. Note that user[0..3] can be used for any user based pointers.
|
||||
* However, vm[0..3] should not be touched, as it is reserved for the VM.
|
||||
*/
|
||||
typedef struct sp_context_s
|
||||
{
|
||||
/* general/parent information */
|
||||
void *codebase; /* base of generated code and memory */
|
||||
sp_plugin_t *plugin; /* pointer back to parent information */
|
||||
SourcePawn::IPluginContext *context; /* pointer to IPluginContext */
|
||||
SourcePawn::IVirtualMachine *vmbase; /* pointer to IVirtualMachine */
|
||||
void *user[4]; /* user specific pointers */
|
||||
void *vm[4]; /* VM specific pointers */
|
||||
uint32_t flags; /* compilation flags */
|
||||
SPVM_DEBUGBREAK dbreak; /* debug break function */
|
||||
/* context runtime information */
|
||||
uint8_t *memory; /* data chunk */
|
||||
ucell_t mem_size; /* total memory size; */
|
||||
cell_t data_size; /* data chunk size, always starts at 0 */
|
||||
cell_t heap_base; /* where the heap starts */
|
||||
/* execution specific data */
|
||||
cell_t hp; /* heap pointer */
|
||||
cell_t sp; /* stack pointer */
|
||||
cell_t frm; /* frame pointer */
|
||||
uint32_t pushcount; /* push count */
|
||||
int32_t n_err; /* error code set by a native */
|
||||
uint32_t n_idx; /* current native index being executed */
|
||||
/* context rebased database */
|
||||
sp_public_t *publics; /* public functions table */
|
||||
sp_pubvar_t *pubvars; /* public variables table */
|
||||
sp_native_t *natives; /* natives table */
|
||||
sp_debug_file_t *files; /* files */
|
||||
sp_debug_line_t *lines; /* lines */
|
||||
sp_debug_symbol_t *symbols; /* symbols */
|
||||
void *codebase; /**< Base of generated code and memory */
|
||||
sp_plugin_t *plugin; /**< Pointer back to parent information */
|
||||
SourcePawn::IPluginContext *context; /**< Pointer to IPluginContext */
|
||||
SourcePawn::IVirtualMachine *vmbase; /**< Pointer to IVirtualMachine */
|
||||
void *user[4]; /**< User specific pointers */
|
||||
void *vm[4]; /**< VM specific pointers */
|
||||
uint32_t flags; /**< Compilation flags */
|
||||
SPVM_DEBUGBREAK dbreak; /**< Debug break function */
|
||||
uint8_t *memory; /**< Data chunk */
|
||||
ucell_t mem_size; /**< Total memory size; */
|
||||
cell_t data_size; /**< Data chunk size, always starts at 0 */
|
||||
cell_t heap_base; /**< Where the heap starts */
|
||||
cell_t hp; /**< Heap pointer */
|
||||
cell_t sp; /**< Stack pointer */
|
||||
cell_t frm; /**< Frame pointer */
|
||||
uint32_t pushcount; /**< Push count */
|
||||
int32_t n_err; /**< Error code set by a native */
|
||||
uint32_t n_idx; /**< Current native index being executed */
|
||||
sp_public_t *publics; /**< Public functions table */
|
||||
sp_pubvar_t *pubvars; /**< Public variables table */
|
||||
sp_native_t *natives; /**< Natives table */
|
||||
sp_debug_file_t *files; /**< Files */
|
||||
sp_debug_line_t *lines; /**< Lines */
|
||||
sp_debug_symbol_t *symbols; /**< Symbols */
|
||||
} sp_context_t;
|
||||
|
||||
#endif //_INCLUDE_SOURCEPAWN_VM_TYPES_H
|
||||
|
||||
Reference in New Issue
Block a user