zig-pug 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/binding.c +375 -0
  4. package/binding.gyp +28 -0
  5. package/common.gypi +5 -0
  6. package/include/zigpug.h +135 -0
  7. package/index.js +205 -0
  8. package/package.json +87 -0
  9. package/vendor/mujs/COPYING +16 -0
  10. package/vendor/mujs/README +50 -0
  11. package/vendor/mujs/astnames.h +92 -0
  12. package/vendor/mujs/jsarray.c +832 -0
  13. package/vendor/mujs/jsboolean.c +38 -0
  14. package/vendor/mujs/jsbuiltin.c +249 -0
  15. package/vendor/mujs/jscompile.c +1428 -0
  16. package/vendor/mujs/jsdate.c +861 -0
  17. package/vendor/mujs/jsdtoa.c +749 -0
  18. package/vendor/mujs/jserror.c +139 -0
  19. package/vendor/mujs/jsfunction.c +231 -0
  20. package/vendor/mujs/jsgc.c +284 -0
  21. package/vendor/mujs/jsi.h +870 -0
  22. package/vendor/mujs/jsintern.c +137 -0
  23. package/vendor/mujs/jslex.c +878 -0
  24. package/vendor/mujs/jsmath.c +194 -0
  25. package/vendor/mujs/jsnumber.c +198 -0
  26. package/vendor/mujs/jsobject.c +560 -0
  27. package/vendor/mujs/json.c +422 -0
  28. package/vendor/mujs/jsparse.c +1065 -0
  29. package/vendor/mujs/jsproperty.c +341 -0
  30. package/vendor/mujs/jsregexp.c +232 -0
  31. package/vendor/mujs/jsrepr.c +285 -0
  32. package/vendor/mujs/jsrun.c +2096 -0
  33. package/vendor/mujs/jsstate.c +334 -0
  34. package/vendor/mujs/jsstring.c +852 -0
  35. package/vendor/mujs/jsvalue.c +708 -0
  36. package/vendor/mujs/libmujs.a +0 -0
  37. package/vendor/mujs/main.c +396 -0
  38. package/vendor/mujs/mujs.h +253 -0
  39. package/vendor/mujs/one.c +25 -0
  40. package/vendor/mujs/opnames.h +85 -0
  41. package/vendor/mujs/pp.c +980 -0
  42. package/vendor/mujs/regexp.c +1277 -0
  43. package/vendor/mujs/regexp.h +46 -0
  44. package/vendor/mujs/utf.c +305 -0
  45. package/vendor/mujs/utf.h +52 -0
  46. package/vendor/mujs/utfdata.h +2209 -0
@@ -0,0 +1,560 @@
1
+ #include "jsi.h"
2
+
3
+ static void jsB_new_Object(js_State *J)
4
+ {
5
+ if (js_isundefined(J, 1) || js_isnull(J, 1))
6
+ js_newobject(J);
7
+ else
8
+ js_pushobject(J, js_toobject(J, 1));
9
+ }
10
+
11
+ static void jsB_Object(js_State *J)
12
+ {
13
+ if (js_isundefined(J, 1) || js_isnull(J, 1))
14
+ js_newobject(J);
15
+ else
16
+ js_pushobject(J, js_toobject(J, 1));
17
+ }
18
+
19
+ static void Op_toString(js_State *J)
20
+ {
21
+ if (js_isundefined(J, 0))
22
+ js_pushliteral(J, "[object Undefined]");
23
+ else if (js_isnull(J, 0))
24
+ js_pushliteral(J, "[object Null]");
25
+ else {
26
+ js_Object *self = js_toobject(J, 0);
27
+ switch (self->type) {
28
+ case JS_COBJECT: js_pushliteral(J, "[object Object]"); break;
29
+ case JS_CARRAY: js_pushliteral(J, "[object Array]"); break;
30
+ case JS_CFUNCTION: js_pushliteral(J, "[object Function]"); break;
31
+ case JS_CSCRIPT: js_pushliteral(J, "[object Function]"); break;
32
+ case JS_CCFUNCTION: js_pushliteral(J, "[object Function]"); break;
33
+ case JS_CERROR: js_pushliteral(J, "[object Error]"); break;
34
+ case JS_CBOOLEAN: js_pushliteral(J, "[object Boolean]"); break;
35
+ case JS_CNUMBER: js_pushliteral(J, "[object Number]"); break;
36
+ case JS_CSTRING: js_pushliteral(J, "[object String]"); break;
37
+ case JS_CREGEXP: js_pushliteral(J, "[object RegExp]"); break;
38
+ case JS_CDATE: js_pushliteral(J, "[object Date]"); break;
39
+ case JS_CMATH: js_pushliteral(J, "[object Math]"); break;
40
+ case JS_CJSON: js_pushliteral(J, "[object JSON]"); break;
41
+ case JS_CARGUMENTS: js_pushliteral(J, "[object Arguments]"); break;
42
+ case JS_CITERATOR: js_pushliteral(J, "[object Iterator]"); break;
43
+ case JS_CUSERDATA:
44
+ js_pushliteral(J, "[object ");
45
+ js_pushliteral(J, self->u.user.tag);
46
+ js_concat(J);
47
+ js_pushliteral(J, "]");
48
+ js_concat(J);
49
+ break;
50
+ }
51
+ }
52
+ }
53
+
54
+ static void Op_valueOf(js_State *J)
55
+ {
56
+ js_copy(J, 0);
57
+ }
58
+
59
+ static void Op_hasOwnProperty(js_State *J)
60
+ {
61
+ js_Object *self = js_toobject(J, 0);
62
+ const char *name = js_tostring(J, 1);
63
+ js_Property *ref;
64
+ int k;
65
+
66
+ if (self->type == JS_CSTRING) {
67
+ if (js_isarrayindex(J, name, &k) && k >= 0 && k < self->u.s.length) {
68
+ js_pushboolean(J, 1);
69
+ return;
70
+ }
71
+ }
72
+
73
+ if (self->type == JS_CARRAY && self->u.a.simple) {
74
+ if (js_isarrayindex(J, name, &k) && k >= 0 && k < self->u.a.flat_length) {
75
+ js_pushboolean(J, 1);
76
+ return;
77
+ }
78
+ }
79
+
80
+ ref = jsV_getownproperty(J, self, name);
81
+ js_pushboolean(J, ref != NULL);
82
+ }
83
+
84
+ static void Op_isPrototypeOf(js_State *J)
85
+ {
86
+ js_Object *self = js_toobject(J, 0);
87
+ if (js_isobject(J, 1)) {
88
+ js_Object *V = js_toobject(J, 1);
89
+ do {
90
+ V = V->prototype;
91
+ if (V == self) {
92
+ js_pushboolean(J, 1);
93
+ return;
94
+ }
95
+ } while (V);
96
+ }
97
+ js_pushboolean(J, 0);
98
+ }
99
+
100
+ static void Op_propertyIsEnumerable(js_State *J)
101
+ {
102
+ js_Object *self = js_toobject(J, 0);
103
+ const char *name = js_tostring(J, 1);
104
+ js_Property *ref = jsV_getownproperty(J, self, name);
105
+ js_pushboolean(J, ref && !(ref->atts & JS_DONTENUM));
106
+ }
107
+
108
+ static void O_getPrototypeOf(js_State *J)
109
+ {
110
+ js_Object *obj;
111
+ if (!js_isobject(J, 1))
112
+ js_typeerror(J, "not an object");
113
+ obj = js_toobject(J, 1);
114
+ if (obj->prototype)
115
+ js_pushobject(J, obj->prototype);
116
+ else
117
+ js_pushnull(J);
118
+ }
119
+
120
+ static void O_getOwnPropertyDescriptor(js_State *J)
121
+ {
122
+ js_Object *obj;
123
+ js_Property *ref;
124
+ if (!js_isobject(J, 1))
125
+ js_typeerror(J, "not an object");
126
+ obj = js_toobject(J, 1);
127
+ ref = jsV_getproperty(J, obj, js_tostring(J, 2));
128
+ if (!ref) {
129
+ /* TODO: builtin properties (string and array index and length, regexp flags, etc) */
130
+ js_pushundefined(J);
131
+ } else {
132
+ js_newobject(J);
133
+ if (!ref->getter && !ref->setter) {
134
+ js_pushvalue(J, ref->value);
135
+ js_defproperty(J, -2, "value", 0);
136
+ js_pushboolean(J, !(ref->atts & JS_READONLY));
137
+ js_defproperty(J, -2, "writable", 0);
138
+ } else {
139
+ if (ref->getter)
140
+ js_pushobject(J, ref->getter);
141
+ else
142
+ js_pushundefined(J);
143
+ js_defproperty(J, -2, "get", 0);
144
+ if (ref->setter)
145
+ js_pushobject(J, ref->setter);
146
+ else
147
+ js_pushundefined(J);
148
+ js_defproperty(J, -2, "set", 0);
149
+ }
150
+ js_pushboolean(J, !(ref->atts & JS_DONTENUM));
151
+ js_defproperty(J, -2, "enumerable", 0);
152
+ js_pushboolean(J, !(ref->atts & JS_DONTCONF));
153
+ js_defproperty(J, -2, "configurable", 0);
154
+ }
155
+ }
156
+
157
+ static int O_getOwnPropertyNames_walk(js_State *J, js_Property *ref, int i)
158
+ {
159
+ if (ref->left->level)
160
+ i = O_getOwnPropertyNames_walk(J, ref->left, i);
161
+ js_pushstring(J, ref->name);
162
+ js_setindex(J, -2, i++);
163
+ if (ref->right->level)
164
+ i = O_getOwnPropertyNames_walk(J, ref->right, i);
165
+ return i;
166
+ }
167
+
168
+ static void O_getOwnPropertyNames(js_State *J)
169
+ {
170
+ js_Object *obj;
171
+ char name[32];
172
+ int k;
173
+ int i;
174
+
175
+ if (!js_isobject(J, 1))
176
+ js_typeerror(J, "not an object");
177
+ obj = js_toobject(J, 1);
178
+
179
+ js_newarray(J);
180
+
181
+ if (obj->properties->level)
182
+ i = O_getOwnPropertyNames_walk(J, obj->properties, 0);
183
+ else
184
+ i = 0;
185
+
186
+ if (obj->type == JS_CARRAY) {
187
+ js_pushliteral(J, "length");
188
+ js_setindex(J, -2, i++);
189
+ if (obj->u.a.simple) {
190
+ for (k = 0; k < obj->u.a.flat_length; ++k) {
191
+ js_itoa(name, k);
192
+ js_pushstring(J, name);
193
+ js_setindex(J, -2, i++);
194
+ }
195
+ }
196
+ }
197
+
198
+ if (obj->type == JS_CSTRING) {
199
+ js_pushliteral(J, "length");
200
+ js_setindex(J, -2, i++);
201
+ for (k = 0; k < obj->u.s.length; ++k) {
202
+ js_itoa(name, k);
203
+ js_pushstring(J, name);
204
+ js_setindex(J, -2, i++);
205
+ }
206
+ }
207
+
208
+ if (obj->type == JS_CREGEXP) {
209
+ js_pushliteral(J, "source");
210
+ js_setindex(J, -2, i++);
211
+ js_pushliteral(J, "global");
212
+ js_setindex(J, -2, i++);
213
+ js_pushliteral(J, "ignoreCase");
214
+ js_setindex(J, -2, i++);
215
+ js_pushliteral(J, "multiline");
216
+ js_setindex(J, -2, i++);
217
+ js_pushliteral(J, "lastIndex");
218
+ js_setindex(J, -2, i++);
219
+ }
220
+ }
221
+
222
+ static void ToPropertyDescriptor(js_State *J, js_Object *obj, const char *name, js_Object *desc)
223
+ {
224
+ int haswritable = 0;
225
+ int hasvalue = 0;
226
+ int enumerable = 0;
227
+ int configurable = 0;
228
+ int writable = 0;
229
+ int atts = 0;
230
+
231
+ js_pushobject(J, obj);
232
+ js_pushobject(J, desc);
233
+
234
+ if (js_hasproperty(J, -1, "writable")) {
235
+ haswritable = 1;
236
+ writable = js_toboolean(J, -1);
237
+ js_pop(J, 1);
238
+ }
239
+ if (js_hasproperty(J, -1, "enumerable")) {
240
+ enumerable = js_toboolean(J, -1);
241
+ js_pop(J, 1);
242
+ }
243
+ if (js_hasproperty(J, -1, "configurable")) {
244
+ configurable = js_toboolean(J, -1);
245
+ js_pop(J, 1);
246
+ }
247
+ if (js_hasproperty(J, -1, "value")) {
248
+ hasvalue = 1;
249
+ js_defproperty(J, -3, name, 0);
250
+ }
251
+
252
+ if (!writable) atts |= JS_READONLY;
253
+ if (!enumerable) atts |= JS_DONTENUM;
254
+ if (!configurable) atts |= JS_DONTCONF;
255
+
256
+ if (js_hasproperty(J, -1, "get")) {
257
+ if (haswritable || hasvalue)
258
+ js_typeerror(J, "value/writable and get/set attributes are exclusive");
259
+ } else {
260
+ js_pushundefined(J);
261
+ }
262
+
263
+ if (js_hasproperty(J, -2, "set")) {
264
+ if (haswritable || hasvalue)
265
+ js_typeerror(J, "value/writable and get/set attributes are exclusive");
266
+ } else {
267
+ js_pushundefined(J);
268
+ }
269
+
270
+ js_defaccessor(J, -4, name, atts);
271
+
272
+ js_pop(J, 2);
273
+ }
274
+
275
+ static void O_defineProperty(js_State *J)
276
+ {
277
+ if (!js_isobject(J, 1)) js_typeerror(J, "not an object");
278
+ if (!js_isobject(J, 3)) js_typeerror(J, "not an object");
279
+ ToPropertyDescriptor(J, js_toobject(J, 1), js_tostring(J, 2), js_toobject(J, 3));
280
+ js_copy(J, 1);
281
+ }
282
+
283
+ static void O_defineProperties_walk(js_State *J, js_Property *ref)
284
+ {
285
+ if (ref->left->level)
286
+ O_defineProperties_walk(J, ref->left);
287
+ if (!(ref->atts & JS_DONTENUM)) {
288
+ js_pushvalue(J, ref->value);
289
+ ToPropertyDescriptor(J, js_toobject(J, 1), ref->name, js_toobject(J, -1));
290
+ js_pop(J, 1);
291
+ }
292
+ if (ref->right->level)
293
+ O_defineProperties_walk(J, ref->right);
294
+ }
295
+
296
+ static void O_defineProperties(js_State *J)
297
+ {
298
+ js_Object *props;
299
+
300
+ if (!js_isobject(J, 1)) js_typeerror(J, "not an object");
301
+ if (!js_isobject(J, 2)) js_typeerror(J, "not an object");
302
+
303
+ props = js_toobject(J, 2);
304
+ if (props->properties->level)
305
+ O_defineProperties_walk(J, props->properties);
306
+
307
+ js_copy(J, 1);
308
+ }
309
+
310
+ static void O_create_walk(js_State *J, js_Object *obj, js_Property *ref)
311
+ {
312
+ if (ref->left->level)
313
+ O_create_walk(J, obj, ref->left);
314
+ if (!(ref->atts & JS_DONTENUM)) {
315
+ if (ref->value.t.type != JS_TOBJECT)
316
+ js_typeerror(J, "not an object");
317
+ ToPropertyDescriptor(J, obj, ref->name, ref->value.u.object);
318
+ }
319
+ if (ref->right->level)
320
+ O_create_walk(J, obj, ref->right);
321
+ }
322
+
323
+ static void O_create(js_State *J)
324
+ {
325
+ js_Object *obj;
326
+ js_Object *proto;
327
+ js_Object *props;
328
+
329
+ if (js_isobject(J, 1))
330
+ proto = js_toobject(J, 1);
331
+ else if (js_isnull(J, 1))
332
+ proto = NULL;
333
+ else
334
+ js_typeerror(J, "not an object or null");
335
+
336
+ obj = jsV_newobject(J, JS_COBJECT, proto);
337
+ js_pushobject(J, obj);
338
+
339
+ if (js_isdefined(J, 2)) {
340
+ if (!js_isobject(J, 2))
341
+ js_typeerror(J, "not an object");
342
+ props = js_toobject(J, 2);
343
+ if (props->properties->level)
344
+ O_create_walk(J, obj, props->properties);
345
+ }
346
+ }
347
+
348
+ static int O_keys_walk(js_State *J, js_Property *ref, int i)
349
+ {
350
+ if (ref->left->level)
351
+ i = O_keys_walk(J, ref->left, i);
352
+ if (!(ref->atts & JS_DONTENUM)) {
353
+ js_pushstring(J, ref->name);
354
+ js_setindex(J, -2, i++);
355
+ }
356
+ if (ref->right->level)
357
+ i = O_keys_walk(J, ref->right, i);
358
+ return i;
359
+ }
360
+
361
+ static void O_keys(js_State *J)
362
+ {
363
+ js_Object *obj;
364
+ char name[32];
365
+ int i, k;
366
+
367
+ if (!js_isobject(J, 1))
368
+ js_typeerror(J, "not an object");
369
+ obj = js_toobject(J, 1);
370
+
371
+ js_newarray(J);
372
+
373
+ if (obj->properties->level)
374
+ i = O_keys_walk(J, obj->properties, 0);
375
+ else
376
+ i = 0;
377
+
378
+ if (obj->type == JS_CSTRING) {
379
+ for (k = 0; k < obj->u.s.length; ++k) {
380
+ js_itoa(name, k);
381
+ js_pushstring(J, name);
382
+ js_setindex(J, -2, i++);
383
+ }
384
+ }
385
+
386
+ if (obj->type == JS_CARRAY && obj->u.a.simple) {
387
+ for (k = 0; k < obj->u.a.flat_length; ++k) {
388
+ js_itoa(name, k);
389
+ js_pushstring(J, name);
390
+ js_setindex(J, -2, i++);
391
+ }
392
+ }
393
+ }
394
+
395
+ static void O_preventExtensions(js_State *J)
396
+ {
397
+ js_Object *obj;
398
+ if (!js_isobject(J, 1))
399
+ js_typeerror(J, "not an object");
400
+ obj = js_toobject(J, 1);
401
+ jsR_unflattenarray(J, obj);
402
+ obj->extensible = 0;
403
+ js_copy(J, 1);
404
+ }
405
+
406
+ static void O_isExtensible(js_State *J)
407
+ {
408
+ if (!js_isobject(J, 1))
409
+ js_typeerror(J, "not an object");
410
+ js_pushboolean(J, js_toobject(J, 1)->extensible);
411
+ }
412
+
413
+ static void O_seal_walk(js_State *J, js_Property *ref)
414
+ {
415
+ if (ref->left->level)
416
+ O_seal_walk(J, ref->left);
417
+ ref->atts |= JS_DONTCONF;
418
+ if (ref->right->level)
419
+ O_seal_walk(J, ref->right);
420
+ }
421
+
422
+ static void O_seal(js_State *J)
423
+ {
424
+ js_Object *obj;
425
+
426
+ if (!js_isobject(J, 1))
427
+ js_typeerror(J, "not an object");
428
+
429
+ obj = js_toobject(J, 1);
430
+ jsR_unflattenarray(J, obj);
431
+ obj->extensible = 0;
432
+
433
+ if (obj->properties->level)
434
+ O_seal_walk(J, obj->properties);
435
+
436
+ js_copy(J, 1);
437
+ }
438
+
439
+ static int O_isSealed_walk(js_State *J, js_Property *ref)
440
+ {
441
+ if (ref->left->level)
442
+ if (!O_isSealed_walk(J, ref->left))
443
+ return 0;
444
+ if (!(ref->atts & JS_DONTCONF))
445
+ return 0;
446
+ if (ref->right->level)
447
+ if (!O_isSealed_walk(J, ref->right))
448
+ return 0;
449
+ return 1;
450
+ }
451
+
452
+ static void O_isSealed(js_State *J)
453
+ {
454
+ js_Object *obj;
455
+
456
+ if (!js_isobject(J, 1))
457
+ js_typeerror(J, "not an object");
458
+
459
+ obj = js_toobject(J, 1);
460
+ if (obj->extensible) {
461
+ js_pushboolean(J, 0);
462
+ return;
463
+ }
464
+
465
+ if (obj->properties->level)
466
+ js_pushboolean(J, O_isSealed_walk(J, obj->properties));
467
+ else
468
+ js_pushboolean(J, 1);
469
+ }
470
+
471
+ static void O_freeze_walk(js_State *J, js_Property *ref)
472
+ {
473
+ if (ref->left->level)
474
+ O_freeze_walk(J, ref->left);
475
+ ref->atts |= JS_READONLY | JS_DONTCONF;
476
+ if (ref->right->level)
477
+ O_freeze_walk(J, ref->right);
478
+ }
479
+
480
+ static void O_freeze(js_State *J)
481
+ {
482
+ js_Object *obj;
483
+
484
+ if (!js_isobject(J, 1))
485
+ js_typeerror(J, "not an object");
486
+
487
+ obj = js_toobject(J, 1);
488
+ jsR_unflattenarray(J, obj);
489
+ obj->extensible = 0;
490
+
491
+ if (obj->properties->level)
492
+ O_freeze_walk(J, obj->properties);
493
+
494
+ js_copy(J, 1);
495
+ }
496
+
497
+ static int O_isFrozen_walk(js_State *J, js_Property *ref)
498
+ {
499
+ if (ref->left->level)
500
+ if (!O_isFrozen_walk(J, ref->left))
501
+ return 0;
502
+ if (!(ref->atts & JS_READONLY))
503
+ return 0;
504
+ if (!(ref->atts & JS_DONTCONF))
505
+ return 0;
506
+ if (ref->right->level)
507
+ if (!O_isFrozen_walk(J, ref->right))
508
+ return 0;
509
+ return 1;
510
+ }
511
+
512
+ static void O_isFrozen(js_State *J)
513
+ {
514
+ js_Object *obj;
515
+
516
+ if (!js_isobject(J, 1))
517
+ js_typeerror(J, "not an object");
518
+
519
+ obj = js_toobject(J, 1);
520
+
521
+ if (obj->properties->level) {
522
+ if (!O_isFrozen_walk(J, obj->properties)) {
523
+ js_pushboolean(J, 0);
524
+ return;
525
+ }
526
+ }
527
+
528
+ js_pushboolean(J, !obj->extensible);
529
+ }
530
+
531
+ void jsB_initobject(js_State *J)
532
+ {
533
+ js_pushobject(J, J->Object_prototype);
534
+ {
535
+ jsB_propf(J, "Object.prototype.toString", Op_toString, 0);
536
+ jsB_propf(J, "Object.prototype.toLocaleString", Op_toString, 0);
537
+ jsB_propf(J, "Object.prototype.valueOf", Op_valueOf, 0);
538
+ jsB_propf(J, "Object.prototype.hasOwnProperty", Op_hasOwnProperty, 1);
539
+ jsB_propf(J, "Object.prototype.isPrototypeOf", Op_isPrototypeOf, 1);
540
+ jsB_propf(J, "Object.prototype.propertyIsEnumerable", Op_propertyIsEnumerable, 1);
541
+ }
542
+ js_newcconstructor(J, jsB_Object, jsB_new_Object, "Object", 1);
543
+ {
544
+ /* ES5 */
545
+ jsB_propf(J, "Object.getPrototypeOf", O_getPrototypeOf, 1);
546
+ jsB_propf(J, "Object.getOwnPropertyDescriptor", O_getOwnPropertyDescriptor, 2);
547
+ jsB_propf(J, "Object.getOwnPropertyNames", O_getOwnPropertyNames, 1);
548
+ jsB_propf(J, "Object.create", O_create, 2);
549
+ jsB_propf(J, "Object.defineProperty", O_defineProperty, 3);
550
+ jsB_propf(J, "Object.defineProperties", O_defineProperties, 2);
551
+ jsB_propf(J, "Object.seal", O_seal, 1);
552
+ jsB_propf(J, "Object.freeze", O_freeze, 1);
553
+ jsB_propf(J, "Object.preventExtensions", O_preventExtensions, 1);
554
+ jsB_propf(J, "Object.isSealed", O_isSealed, 1);
555
+ jsB_propf(J, "Object.isFrozen", O_isFrozen, 1);
556
+ jsB_propf(J, "Object.isExtensible", O_isExtensible, 1);
557
+ jsB_propf(J, "Object.keys", O_keys, 1);
558
+ }
559
+ js_defglobal(J, "Object", JS_DONTENUM);
560
+ }