MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1#ifndef COMMON_H
2#define COMMON_H
3
4#include <stdint.h>
5#include <stdio.h>
6#include <stdlib.h>
7
8#define ANT_INTERNAL_SLOT_LIST(X) \
9 X(SLOT_NONE) \
10 X(SLOT_ASYNC) \
11 X(SLOT_CODE) \
12 X(SLOT_CODE_LEN) \
13 X(SLOT_CFUNC) \
14 X(SLOT_CORO) \
15 X(SLOT_PROTO) \
16 X(SLOT_FUNC_PROTO) \
17 X(SLOT_ASYNC_PROTO) \
18 X(SLOT_GENERATOR_PROTO) \
19 X(SLOT_ASYNC_GENERATOR_PROTO) \
20 X(SLOT_AUX) \
21 X(SLOT_TARGET_FUNC) \
22 X(SLOT_MODULE_CTX) \
23 X(SLOT_MODULE_LOADING) \
24 X(SLOT_MAP) \
25 X(SLOT_SET) \
26 X(SLOT_PRIMITIVE) \
27 X(SLOT_PROXY_REF) \
28 X(SLOT_BUILTIN) \
29 X(SLOT_BRAND) \
30 X(SLOT_PRIVATE_ELEMENTS) \
31 X(SLOT_DATA) \
32 X(SLOT_EVENT_MAX_LISTENERS) \
33 X(SLOT_CTOR) \
34 X(SLOT_FS_FLAGS) \
35 X(SLOT_DEFAULT) \
36 X(SLOT_CONSOLE_STDOUT) \
37 X(SLOT_CONSOLE_STDERR) \
38 X(SLOT_CONSOLE_COUNTS) \
39 X(SLOT_CONSOLE_TIMERS) \
40 X(SLOT_CONSOLE_GROUP_INDENT) \
41 X(SLOT_CONSOLE_GROUP_LEVEL) \
42 X(SLOT_ERROR_BRAND) \
43 X(SLOT_ERR_TYPE) \
44 X(SLOT_OBSERVABLE_SUBSCRIBER) \
45 X(SLOT_SUBSCRIPTION_OBSERVER) \
46 X(SLOT_SUBSCRIPTION_CLEANUP) \
47 X(SLOT_STRICT_ARGS) \
48 X(SLOT_ITER_STATE) \
49 X(SLOT_ENTRIES) \
50 X(SLOT_SETTLED) \
51 X(SLOT_WT_ON_MESSAGE) \
52 X(SLOT_WT_ONCE_MESSAGE) \
53 X(SLOT_WT_ON_EXIT) \
54 X(SLOT_WT_ONCE_EXIT) \
55 X(SLOT_WT_PORT_TAG) \
56 X(SLOT_WT_PORT_QUEUE) \
57 X(SLOT_WT_PORT_HEAD) \
58 X(SLOT_WT_PORT_PEER) \
59 X(SLOT_WT_PORT_CLOSED) \
60 X(SLOT_WT_PORT_STARTED) \
61 X(SLOT_WT_PORT_ON_MESSAGE) \
62 X(SLOT_WT_PORT_ONCE_MESSAGE) \
63 X(SLOT_WT_PORT_PROTO) \
64 X(SLOT_WT_ENV_STORE) \
65 X(SLOT_NAPI_EXTERNAL_ID) \
66 X(SLOT_NAPI_WRAP_ID) \
67 X(SLOT_RS_PULL) \
68 X(SLOT_RS_CANCEL) \
69 X(SLOT_RS_SIZE) \
70 X(SLOT_RS_CLOSED) \
71 X(SLOT_WS_WRITE) \
72 X(SLOT_WS_CLOSE) \
73 X(SLOT_WS_ABORT) \
74 X(SLOT_WS_READY) \
75 X(SLOT_WS_SIGNAL) \
76 X(SLOT_HEADERS_GUARD) \
77 X(SLOT_REQUEST_HEADERS) \
78 X(SLOT_REQUEST_SIGNAL) \
79 X(SLOT_REQUEST_ABORT_REASON) \
80 X(SLOT_REQUEST_BODY_STREAM) \
81 X(SLOT_RESPONSE_HEADERS) \
82 X(SLOT_RESPONSE_BODY_STREAM) \
83 X(SLOT_PIPE_ABORT_LISTENER) \
84 X(SLOT_REGEXP_FLAGS_MASK) \
85 X(SLOT_REGEXP_FLAGS_STRING) \
86 X(SLOT_REGEXP_NAMED_GROUPS) \
87 X(SLOT_REGEXP_RESULT_GROUPS) \
88 X(SLOT_REGEXP_GROUPS_CACHE) \
89 X(SLOT_MATCHALL_RX) \
90 X(SLOT_MATCHALL_STR) \
91 X(SLOT_MATCHALL_DONE)
92
93#define ANT_DECLARE_INTERNAL_SLOT(name) name,
94typedef enum {
95 ANT_INTERNAL_SLOT_LIST(ANT_DECLARE_INTERNAL_SLOT)
96 SLOT_MAX = 255
97} internal_slot_t;
98#undef ANT_DECLARE_INTERNAL_SLOT
99
100typedef enum {
101 BUILTIN_NONE = 0,
102 BUILTIN_OBJECT = 1
103} builtin_fn_id_t;
104
105typedef enum {
106 BRAND_NONE = 0,
107 BRAND_BLOB,
108 BRAND_FILE,
109 BRAND_HEADERS,
110 BRAND_FORMDATA,
111 BRAND_URLSEARCHPARAMS,
112 BRAND_DATAVIEW,
113 BRAND_REQUEST,
114 BRAND_RESPONSE,
115 BRAND_READABLE_STREAM,
116 BRAND_READABLE_STREAM_READER,
117 BRAND_READABLE_STREAM_CONTROLLER,
118 BRAND_WRITABLE_STREAM,
119 BRAND_WRITABLE_STREAM_WRITER,
120 BRAND_WRITABLE_STREAM_CONTROLLER,
121 BRAND_TRANSFORM_STREAM,
122 BRAND_TRANSFORM_STREAM_CONTROLLER,
123 BRAND_WASM_MODULE,
124 BRAND_WASM_INSTANCE,
125 BRAND_WASM_GLOBAL,
126 BRAND_WASM_MEMORY,
127 BRAND_WASM_TABLE,
128 BRAND_WASM_TAG,
129 BRAND_WASM_EXCEPTION,
130 BRAND_DATE,
131 BRAND_MODULE_NAMESPACE,
132 BRAND_ABORT_SIGNAL,
133 BRAND_EVENTEMITTER,
134 BRAND_EVENTTARGET,
135 BRAND_DISPOSABLE_STACK,
136 BRAND_ASYNC_DISPOSABLE_STACK,
137 BRAND_TEMPLATE_OBJECT
138} object_brand_id_t;
139
140static inline void *mantissa_chk(void *p, const char *func) {
141 if (!p || ((uintptr_t)p >> 47) == 0) goto ok;
142
143 fprintf(
144 stderr,
145 "FATAL: %s returned pointer %p outside 47-bit NaN-boxing range\n"
146 "Please report this issue with your OS/architecture details.\n", func, p
147 );
148
149 abort();
150 ok: return p;
151}
152
153#define ant_calloc(size) mantissa_chk(calloc(1, size), "calloc")
154#define ant_realloc(ptr, size) mantissa_chk(realloc(ptr, size), "realloc")
155
156#endif