加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
lpc.h 2.05 KB
一键复制 编辑 原始数据 按行查看 历史
luanhailiang 提交于 2012-08-09 20:44 . My mudos
#ifndef LPC_H
#define LPC_H
/* It is usually better to include "lpc_incl.h" instead of including this
directly */
typedef struct {
unsigned short ref;
} refed_t;
union u {
char *string;
long number;
float real;
refed_t *refed; /* any of the block below */
#ifndef NO_BUFFER_TYPE
struct buffer_s *buf;
#endif
struct object_s *ob;
struct array_s *arr;
struct mapping_s *map;
struct funptr_s *fp;
struct svalue_s *lvalue;
struct ref_s *ref;
unsigned char *lvalue_byte;
void (*error_handler) PROT((void));
};
/*
* The value stack element.
* If it is a string, then the way that the string has been allocated
* differently, which will affect how it should be freed.
*/
typedef struct svalue_s {
short type;
short subtype;
union u u;
} svalue_t;
typedef struct ref_s {
unsigned short ref;
struct ref_s *next, *prev;
struct control_stack_s *csp;
svalue_t *lvalue;
svalue_t sv;
} ref_t;
/* values for type field of svalue struct */
#define T_INVALID 0x0
#define T_LVALUE 0x1
#define T_NUMBER 0x2
#define T_STRING 0x4
#define T_REAL 0x80
#define T_ARRAY 0x8
#define T_OBJECT 0x10
#define T_MAPPING 0x20
#define T_FUNCTION 0x40
#ifndef NO_BUFFER_TYPE
#define T_BUFFER 0x100
#endif
#define T_CLASS 0x200
#define T_LVALUE_BYTE 0x400 /* byte-sized lvalue */
#define T_LVALUE_RANGE 0x800
#define T_ERROR_HANDLER 0x1000
#define T_FREED 0x2000
#define T_REF 0x4000
#ifdef NO_BUFFER_TYPE
#define T_REFED (T_ARRAY|T_OBJECT|T_MAPPING|T_FUNCTION|T_CLASS|T_REF)
#else
#define T_REFED (T_ARRAY|T_OBJECT|T_MAPPING|T_FUNCTION|T_BUFFER|T_CLASS|T_REF)
#endif
#define T_ANY (T_REFED|T_STRING|T_NUMBER|T_REAL)
/* values for subtype field of svalue struct */
#define STRING_COUNTED 0x1 /* has a length an ref count */
#define STRING_HASHED 0x2 /* is in the shared string table */
#define STRING_MALLOC STRING_COUNTED
#define STRING_SHARED (STRING_COUNTED | STRING_HASHED)
#define STRING_CONSTANT 0
#define T_UNDEFINED 0x4 /* undefinedp() returns true */
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化