-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathlpc.h
91 lines (74 loc) · 2.05 KB
/
lpc.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#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;
int 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