18 JsValueTypeRawPointer,
28 JsValueTypeMask = 0xff,
31 JsValueTypeEnumSize1 = (1 << 8),
32 JsValueTypeEnumSize2 = (2 << 8),
33 JsValueTypeEnumSize4 = (4 << 8),
36 JsValueTypePermitNull = (1 << 16),
39#define JS_VALUE_TYPE_ENUM_SIZE(x) ((x) << 8)
42 const char* string_value;
69 const char* field_name;
78#define JS_VALUE_ENUM(c_type, variants) \
80 .type = JsValueTypeEnum | JS_VALUE_TYPE_ENUM_SIZE(sizeof(c_type)), \
81 .n_children = COUNT_OF(variants), \
82 .enum_variants = variants, \
85#define JS_VALUE_ENUM_W_DEFAULT(c_type, variants, default) \
87 .type = JsValueTypeEnum | JsValueTypePermitNull | \
88 JS_VALUE_TYPE_ENUM_SIZE(sizeof(c_type)), \
89 .default_value.enum_val = default, \
90 .n_children = COUNT_OF(variants), \
91 .enum_variants = variants, \
94#define JS_VALUE_OBJECT(fields) \
96 .type = JsValueTypeObject, \
97 .n_children = COUNT_OF(fields), \
98 .object_fields = fields, \
101#define JS_VALUE_OBJECT_W_DEFAULTS(fields) \
103 .type = JsValueTypeObject | JsValueTypePermitNull, \
104 .n_children = COUNT_OF(fields), \
105 .object_fields = fields, \
108#define JS_VALUE_SIMPLE(t) {.type = t}
110#define JS_VALUE_SIMPLE_W_DEFAULT(t, name, val) \
111 {.type = (t) | JsValueTypePermitNull, .default_value.name = (val)}
113#define JS_VALUE_ARGS(args) \
115 .n_children = COUNT_OF(args), \
120 JsValueParseFlagNone = 0,
121 JsValueParseFlagReturnOnError =
127 JsValueParseStatusOk,
128 JsValueParseStatusJsError,
132 JsValueParseSourceValue,
133 JsValueParseSourceArguments,
137 JsValueParseSource source;
144#define JS_VALUE_PARSE_SOURCE_VALUE(declaration) \
145 ((JsValueParseDeclaration){.source = JsValueParseSourceValue, .value_decl = declaration})
146#define JS_VALUE_PARSE_SOURCE_ARGS(declaration) \
147 ((JsValueParseDeclaration){ \
148 .source = JsValueParseSourceArguments, .argument_decl = declaration})
181JsValueParseStatus js_value_parse(
184 JsValueParseFlag flags,
191#define JS_VALUE_PARSE(mjs, declaration, flags, status_ptr, value_ptr, ...) \
192 void* _args[] = {__VA_ARGS__}; \
193 size_t _n_args = COUNT_OF(_args); \
194 size_t _temp_buf_len = js_value_buffer_size(declaration); \
195 mjs_val_t _temp_buffer[_temp_buf_len]; \
196 *(status_ptr) = js_value_parse( \
197 mjs, declaration, flags, _temp_buffer, _temp_buf_len, value_ptr, _n_args, __VA_ARGS__);
199#define JS_VALUE_PARSE_ARGS_OR_RETURN(mjs, declaration, ...) \
200 JsValueParseStatus _status; \
203 JS_VALUE_PARSE_SOURCE_ARGS(declaration), \
204 JsValueParseFlagReturnOnError, \
208 if(_status != JsValueParseStatusOk) return;
Definition js_value.h:136