quickjs 0.1.2
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/LICENSE +21 -0
- data/Rakefile +22 -0
- data/ext/quickjsrb/extconf.rb +45 -0
- data/ext/quickjsrb/quickjs/LICENSE +22 -0
- data/ext/quickjsrb/quickjs/cutils.c +631 -0
- data/ext/quickjsrb/quickjs/cutils.h +347 -0
- data/ext/quickjsrb/quickjs/libbf.c +8475 -0
- data/ext/quickjsrb/quickjs/libbf.h +535 -0
- data/ext/quickjsrb/quickjs/libregexp-opcode.h +57 -0
- data/ext/quickjsrb/quickjs/libregexp.c +2501 -0
- data/ext/quickjsrb/quickjs/libregexp.h +55 -0
- data/ext/quickjsrb/quickjs/libunicode-table.h +4557 -0
- data/ext/quickjsrb/quickjs/libunicode.c +1910 -0
- data/ext/quickjsrb/quickjs/libunicode.h +182 -0
- data/ext/quickjsrb/quickjs/list.h +99 -0
- data/ext/quickjsrb/quickjs/qjs.c +564 -0
- data/ext/quickjsrb/quickjs/qjsc.c +761 -0
- data/ext/quickjsrb/quickjs/qjscalc.c +4005 -0
- data/ext/quickjsrb/quickjs/quickjs-atom.h +273 -0
- data/ext/quickjsrb/quickjs/quickjs-libc.c +4052 -0
- data/ext/quickjsrb/quickjs/quickjs-libc.h +60 -0
- data/ext/quickjsrb/quickjs/quickjs-opcode.h +372 -0
- data/ext/quickjsrb/quickjs/quickjs.c +55978 -0
- data/ext/quickjsrb/quickjs/quickjs.h +1087 -0
- data/ext/quickjsrb/quickjs/repl.c +2057 -0
- data/ext/quickjsrb/quickjs/run-test262.c +2216 -0
- data/ext/quickjsrb/quickjs/unicode_gen.c +3225 -0
- data/ext/quickjsrb/quickjs/unicode_gen_def.h +291 -0
- data/ext/quickjsrb/quickjsrb.c +105 -0
- data/ext/quickjsrb/quickjsrb.h +14 -0
- data/lib/quickjs/version.rb +5 -0
- data/lib/quickjs.rb +28 -0
- data/sig/quickjs.rbs +4 -0
- metadata +81 -0
@@ -0,0 +1,291 @@
|
|
1
|
+
#ifdef UNICODE_GENERAL_CATEGORY
|
2
|
+
DEF(Cn, "Unassigned") /* must be zero */
|
3
|
+
DEF(Lu, "Uppercase_Letter")
|
4
|
+
DEF(Ll, "Lowercase_Letter")
|
5
|
+
DEF(Lt, "Titlecase_Letter")
|
6
|
+
DEF(Lm, "Modifier_Letter")
|
7
|
+
DEF(Lo, "Other_Letter")
|
8
|
+
DEF(Mn, "Nonspacing_Mark")
|
9
|
+
DEF(Mc, "Spacing_Mark")
|
10
|
+
DEF(Me, "Enclosing_Mark")
|
11
|
+
DEF(Nd, "Decimal_Number,digit")
|
12
|
+
DEF(Nl, "Letter_Number")
|
13
|
+
DEF(No, "Other_Number")
|
14
|
+
DEF(Sm, "Math_Symbol")
|
15
|
+
DEF(Sc, "Currency_Symbol")
|
16
|
+
DEF(Sk, "Modifier_Symbol")
|
17
|
+
DEF(So, "Other_Symbol")
|
18
|
+
DEF(Pc, "Connector_Punctuation")
|
19
|
+
DEF(Pd, "Dash_Punctuation")
|
20
|
+
DEF(Ps, "Open_Punctuation")
|
21
|
+
DEF(Pe, "Close_Punctuation")
|
22
|
+
DEF(Pi, "Initial_Punctuation")
|
23
|
+
DEF(Pf, "Final_Punctuation")
|
24
|
+
DEF(Po, "Other_Punctuation")
|
25
|
+
DEF(Zs, "Space_Separator")
|
26
|
+
DEF(Zl, "Line_Separator")
|
27
|
+
DEF(Zp, "Paragraph_Separator")
|
28
|
+
DEF(Cc, "Control,cntrl")
|
29
|
+
DEF(Cf, "Format")
|
30
|
+
DEF(Cs, "Surrogate")
|
31
|
+
DEF(Co, "Private_Use")
|
32
|
+
/* synthetic properties */
|
33
|
+
DEF(LC, "Cased_Letter")
|
34
|
+
DEF(L, "Letter")
|
35
|
+
DEF(M, "Mark,Combining_Mark")
|
36
|
+
DEF(N, "Number")
|
37
|
+
DEF(S, "Symbol")
|
38
|
+
DEF(P, "Punctuation,punct")
|
39
|
+
DEF(Z, "Separator")
|
40
|
+
DEF(C, "Other")
|
41
|
+
#endif
|
42
|
+
|
43
|
+
#ifdef UNICODE_SCRIPT
|
44
|
+
/* scripts aliases names in PropertyValueAliases.txt */
|
45
|
+
DEF(Unknown, "Zzzz")
|
46
|
+
DEF(Adlam, "Adlm")
|
47
|
+
DEF(Ahom, "Ahom")
|
48
|
+
DEF(Anatolian_Hieroglyphs, "Hluw")
|
49
|
+
DEF(Arabic, "Arab")
|
50
|
+
DEF(Armenian, "Armn")
|
51
|
+
DEF(Avestan, "Avst")
|
52
|
+
DEF(Balinese, "Bali")
|
53
|
+
DEF(Bamum, "Bamu")
|
54
|
+
DEF(Bassa_Vah, "Bass")
|
55
|
+
DEF(Batak, "Batk")
|
56
|
+
DEF(Bengali, "Beng")
|
57
|
+
DEF(Bhaiksuki, "Bhks")
|
58
|
+
DEF(Bopomofo, "Bopo")
|
59
|
+
DEF(Brahmi, "Brah")
|
60
|
+
DEF(Braille, "Brai")
|
61
|
+
DEF(Buginese, "Bugi")
|
62
|
+
DEF(Buhid, "Buhd")
|
63
|
+
DEF(Canadian_Aboriginal, "Cans")
|
64
|
+
DEF(Carian, "Cari")
|
65
|
+
DEF(Caucasian_Albanian, "Aghb")
|
66
|
+
DEF(Chakma, "Cakm")
|
67
|
+
DEF(Cham, "Cham")
|
68
|
+
DEF(Cherokee, "Cher")
|
69
|
+
DEF(Chorasmian, "Chrs")
|
70
|
+
DEF(Common, "Zyyy")
|
71
|
+
DEF(Coptic, "Copt,Qaac")
|
72
|
+
DEF(Cuneiform, "Xsux")
|
73
|
+
DEF(Cypriot, "Cprt")
|
74
|
+
DEF(Cyrillic, "Cyrl")
|
75
|
+
DEF(Cypro_Minoan, "Cpmn")
|
76
|
+
DEF(Deseret, "Dsrt")
|
77
|
+
DEF(Devanagari, "Deva")
|
78
|
+
DEF(Dives_Akuru, "Diak")
|
79
|
+
DEF(Dogra, "Dogr")
|
80
|
+
DEF(Duployan, "Dupl")
|
81
|
+
DEF(Egyptian_Hieroglyphs, "Egyp")
|
82
|
+
DEF(Elbasan, "Elba")
|
83
|
+
DEF(Elymaic, "Elym")
|
84
|
+
DEF(Ethiopic, "Ethi")
|
85
|
+
DEF(Georgian, "Geor")
|
86
|
+
DEF(Glagolitic, "Glag")
|
87
|
+
DEF(Gothic, "Goth")
|
88
|
+
DEF(Grantha, "Gran")
|
89
|
+
DEF(Greek, "Grek")
|
90
|
+
DEF(Gujarati, "Gujr")
|
91
|
+
DEF(Gunjala_Gondi, "Gong")
|
92
|
+
DEF(Gurmukhi, "Guru")
|
93
|
+
DEF(Han, "Hani")
|
94
|
+
DEF(Hangul, "Hang")
|
95
|
+
DEF(Hanifi_Rohingya, "Rohg")
|
96
|
+
DEF(Hanunoo, "Hano")
|
97
|
+
DEF(Hatran, "Hatr")
|
98
|
+
DEF(Hebrew, "Hebr")
|
99
|
+
DEF(Hiragana, "Hira")
|
100
|
+
DEF(Imperial_Aramaic, "Armi")
|
101
|
+
DEF(Inherited, "Zinh,Qaai")
|
102
|
+
DEF(Inscriptional_Pahlavi, "Phli")
|
103
|
+
DEF(Inscriptional_Parthian, "Prti")
|
104
|
+
DEF(Javanese, "Java")
|
105
|
+
DEF(Kaithi, "Kthi")
|
106
|
+
DEF(Kannada, "Knda")
|
107
|
+
DEF(Katakana, "Kana")
|
108
|
+
DEF(Kawi, "Kawi")
|
109
|
+
DEF(Kayah_Li, "Kali")
|
110
|
+
DEF(Kharoshthi, "Khar")
|
111
|
+
DEF(Khmer, "Khmr")
|
112
|
+
DEF(Khojki, "Khoj")
|
113
|
+
DEF(Khitan_Small_Script, "Kits")
|
114
|
+
DEF(Khudawadi, "Sind")
|
115
|
+
DEF(Lao, "Laoo")
|
116
|
+
DEF(Latin, "Latn")
|
117
|
+
DEF(Lepcha, "Lepc")
|
118
|
+
DEF(Limbu, "Limb")
|
119
|
+
DEF(Linear_A, "Lina")
|
120
|
+
DEF(Linear_B, "Linb")
|
121
|
+
DEF(Lisu, "Lisu")
|
122
|
+
DEF(Lycian, "Lyci")
|
123
|
+
DEF(Lydian, "Lydi")
|
124
|
+
DEF(Makasar, "Maka")
|
125
|
+
DEF(Mahajani, "Mahj")
|
126
|
+
DEF(Malayalam, "Mlym")
|
127
|
+
DEF(Mandaic, "Mand")
|
128
|
+
DEF(Manichaean, "Mani")
|
129
|
+
DEF(Marchen, "Marc")
|
130
|
+
DEF(Masaram_Gondi, "Gonm")
|
131
|
+
DEF(Medefaidrin, "Medf")
|
132
|
+
DEF(Meetei_Mayek, "Mtei")
|
133
|
+
DEF(Mende_Kikakui, "Mend")
|
134
|
+
DEF(Meroitic_Cursive, "Merc")
|
135
|
+
DEF(Meroitic_Hieroglyphs, "Mero")
|
136
|
+
DEF(Miao, "Plrd")
|
137
|
+
DEF(Modi, "Modi")
|
138
|
+
DEF(Mongolian, "Mong")
|
139
|
+
DEF(Mro, "Mroo")
|
140
|
+
DEF(Multani, "Mult")
|
141
|
+
DEF(Myanmar, "Mymr")
|
142
|
+
DEF(Nabataean, "Nbat")
|
143
|
+
DEF(Nag_Mundari, "Nagm")
|
144
|
+
DEF(Nandinagari, "Nand")
|
145
|
+
DEF(New_Tai_Lue, "Talu")
|
146
|
+
DEF(Newa, "Newa")
|
147
|
+
DEF(Nko, "Nkoo")
|
148
|
+
DEF(Nushu, "Nshu")
|
149
|
+
DEF(Nyiakeng_Puachue_Hmong, "Hmnp")
|
150
|
+
DEF(Ogham, "Ogam")
|
151
|
+
DEF(Ol_Chiki, "Olck")
|
152
|
+
DEF(Old_Hungarian, "Hung")
|
153
|
+
DEF(Old_Italic, "Ital")
|
154
|
+
DEF(Old_North_Arabian, "Narb")
|
155
|
+
DEF(Old_Permic, "Perm")
|
156
|
+
DEF(Old_Persian, "Xpeo")
|
157
|
+
DEF(Old_Sogdian, "Sogo")
|
158
|
+
DEF(Old_South_Arabian, "Sarb")
|
159
|
+
DEF(Old_Turkic, "Orkh")
|
160
|
+
DEF(Old_Uyghur, "Ougr")
|
161
|
+
DEF(Oriya, "Orya")
|
162
|
+
DEF(Osage, "Osge")
|
163
|
+
DEF(Osmanya, "Osma")
|
164
|
+
DEF(Pahawh_Hmong, "Hmng")
|
165
|
+
DEF(Palmyrene, "Palm")
|
166
|
+
DEF(Pau_Cin_Hau, "Pauc")
|
167
|
+
DEF(Phags_Pa, "Phag")
|
168
|
+
DEF(Phoenician, "Phnx")
|
169
|
+
DEF(Psalter_Pahlavi, "Phlp")
|
170
|
+
DEF(Rejang, "Rjng")
|
171
|
+
DEF(Runic, "Runr")
|
172
|
+
DEF(Samaritan, "Samr")
|
173
|
+
DEF(Saurashtra, "Saur")
|
174
|
+
DEF(Sharada, "Shrd")
|
175
|
+
DEF(Shavian, "Shaw")
|
176
|
+
DEF(Siddham, "Sidd")
|
177
|
+
DEF(SignWriting, "Sgnw")
|
178
|
+
DEF(Sinhala, "Sinh")
|
179
|
+
DEF(Sogdian, "Sogd")
|
180
|
+
DEF(Sora_Sompeng, "Sora")
|
181
|
+
DEF(Soyombo, "Soyo")
|
182
|
+
DEF(Sundanese, "Sund")
|
183
|
+
DEF(Syloti_Nagri, "Sylo")
|
184
|
+
DEF(Syriac, "Syrc")
|
185
|
+
DEF(Tagalog, "Tglg")
|
186
|
+
DEF(Tagbanwa, "Tagb")
|
187
|
+
DEF(Tai_Le, "Tale")
|
188
|
+
DEF(Tai_Tham, "Lana")
|
189
|
+
DEF(Tai_Viet, "Tavt")
|
190
|
+
DEF(Takri, "Takr")
|
191
|
+
DEF(Tamil, "Taml")
|
192
|
+
DEF(Tangut, "Tang")
|
193
|
+
DEF(Telugu, "Telu")
|
194
|
+
DEF(Thaana, "Thaa")
|
195
|
+
DEF(Thai, "Thai")
|
196
|
+
DEF(Tibetan, "Tibt")
|
197
|
+
DEF(Tifinagh, "Tfng")
|
198
|
+
DEF(Tirhuta, "Tirh")
|
199
|
+
DEF(Tangsa, "Tnsa")
|
200
|
+
DEF(Toto, "Toto")
|
201
|
+
DEF(Ugaritic, "Ugar")
|
202
|
+
DEF(Vai, "Vaii")
|
203
|
+
DEF(Vithkuqi, "Vith")
|
204
|
+
DEF(Wancho, "Wcho")
|
205
|
+
DEF(Warang_Citi, "Wara")
|
206
|
+
DEF(Yezidi, "Yezi")
|
207
|
+
DEF(Yi, "Yiii")
|
208
|
+
DEF(Zanabazar_Square, "Zanb")
|
209
|
+
#endif
|
210
|
+
|
211
|
+
#ifdef UNICODE_PROP_LIST
|
212
|
+
/* Prop list not exported to regexp */
|
213
|
+
DEF(Hyphen, "")
|
214
|
+
DEF(Other_Math, "")
|
215
|
+
DEF(Other_Alphabetic, "")
|
216
|
+
DEF(Other_Lowercase, "")
|
217
|
+
DEF(Other_Uppercase, "")
|
218
|
+
DEF(Other_Grapheme_Extend, "")
|
219
|
+
DEF(Other_Default_Ignorable_Code_Point, "")
|
220
|
+
DEF(Other_ID_Start, "")
|
221
|
+
DEF(Other_ID_Continue, "")
|
222
|
+
DEF(Prepended_Concatenation_Mark, "")
|
223
|
+
/* additional computed properties for smaller tables */
|
224
|
+
DEF(ID_Continue1, "")
|
225
|
+
DEF(XID_Start1, "")
|
226
|
+
DEF(XID_Continue1, "")
|
227
|
+
DEF(Changes_When_Titlecased1, "")
|
228
|
+
DEF(Changes_When_Casefolded1, "")
|
229
|
+
DEF(Changes_When_NFKC_Casefolded1, "")
|
230
|
+
|
231
|
+
/* Prop list exported to JS */
|
232
|
+
DEF(ASCII_Hex_Digit, "AHex")
|
233
|
+
DEF(Bidi_Control, "Bidi_C")
|
234
|
+
DEF(Dash, "")
|
235
|
+
DEF(Deprecated, "Dep")
|
236
|
+
DEF(Diacritic, "Dia")
|
237
|
+
DEF(Extender, "Ext")
|
238
|
+
DEF(Hex_Digit, "Hex")
|
239
|
+
DEF(IDS_Binary_Operator, "IDSB")
|
240
|
+
DEF(IDS_Trinary_Operator, "IDST")
|
241
|
+
DEF(Ideographic, "Ideo")
|
242
|
+
DEF(Join_Control, "Join_C")
|
243
|
+
DEF(Logical_Order_Exception, "LOE")
|
244
|
+
DEF(Noncharacter_Code_Point, "NChar")
|
245
|
+
DEF(Pattern_Syntax, "Pat_Syn")
|
246
|
+
DEF(Pattern_White_Space, "Pat_WS")
|
247
|
+
DEF(Quotation_Mark, "QMark")
|
248
|
+
DEF(Radical, "")
|
249
|
+
DEF(Regional_Indicator, "RI")
|
250
|
+
DEF(Sentence_Terminal, "STerm")
|
251
|
+
DEF(Soft_Dotted, "SD")
|
252
|
+
DEF(Terminal_Punctuation, "Term")
|
253
|
+
DEF(Unified_Ideograph, "UIdeo")
|
254
|
+
DEF(Variation_Selector, "VS")
|
255
|
+
DEF(White_Space, "space")
|
256
|
+
DEF(Bidi_Mirrored, "Bidi_M")
|
257
|
+
DEF(Emoji, "")
|
258
|
+
DEF(Emoji_Component, "EComp")
|
259
|
+
DEF(Emoji_Modifier, "EMod")
|
260
|
+
DEF(Emoji_Modifier_Base, "EBase")
|
261
|
+
DEF(Emoji_Presentation, "EPres")
|
262
|
+
DEF(Extended_Pictographic, "ExtPict")
|
263
|
+
DEF(Default_Ignorable_Code_Point, "DI")
|
264
|
+
DEF(ID_Start, "IDS")
|
265
|
+
DEF(Case_Ignorable, "CI")
|
266
|
+
|
267
|
+
/* other binary properties */
|
268
|
+
DEF(ASCII,"")
|
269
|
+
DEF(Alphabetic, "Alpha")
|
270
|
+
DEF(Any, "")
|
271
|
+
DEF(Assigned,"")
|
272
|
+
DEF(Cased, "")
|
273
|
+
DEF(Changes_When_Casefolded, "CWCF")
|
274
|
+
DEF(Changes_When_Casemapped, "CWCM")
|
275
|
+
DEF(Changes_When_Lowercased, "CWL")
|
276
|
+
DEF(Changes_When_NFKC_Casefolded, "CWKCF")
|
277
|
+
DEF(Changes_When_Titlecased, "CWT")
|
278
|
+
DEF(Changes_When_Uppercased, "CWU")
|
279
|
+
DEF(Grapheme_Base, "Gr_Base")
|
280
|
+
DEF(Grapheme_Extend, "Gr_Ext")
|
281
|
+
DEF(ID_Continue, "IDC")
|
282
|
+
DEF(Lowercase, "Lower")
|
283
|
+
DEF(Math, "")
|
284
|
+
DEF(Uppercase, "Upper")
|
285
|
+
DEF(XID_Continue, "XIDC")
|
286
|
+
DEF(XID_Start, "XIDS")
|
287
|
+
|
288
|
+
/* internal tables with index */
|
289
|
+
DEF(Cased1, "")
|
290
|
+
|
291
|
+
#endif
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#include "quickjsrb.h"
|
2
|
+
|
3
|
+
VALUE rb_mQuickjs;
|
4
|
+
VALUE rb_mQuickjsValue;
|
5
|
+
const char *undefinedId = "undefined";
|
6
|
+
const char *nanId = "NaN";
|
7
|
+
|
8
|
+
VALUE rb_module_eval_js_code(
|
9
|
+
VALUE klass,
|
10
|
+
VALUE r_code,
|
11
|
+
VALUE r_memoryLimit,
|
12
|
+
VALUE r_maxStackSize,
|
13
|
+
VALUE r_enableStd,
|
14
|
+
VALUE r_enableOs
|
15
|
+
) {
|
16
|
+
JSRuntime *rt = JS_NewRuntime();
|
17
|
+
JSContext *ctx = JS_NewContext(rt);
|
18
|
+
|
19
|
+
JS_SetMemoryLimit(rt, NUM2UINT(r_memoryLimit));
|
20
|
+
JS_SetMaxStackSize(rt, NUM2UINT(r_maxStackSize));
|
21
|
+
|
22
|
+
JS_AddIntrinsicBigFloat(ctx);
|
23
|
+
JS_AddIntrinsicBigDecimal(ctx);
|
24
|
+
JS_AddIntrinsicOperators(ctx);
|
25
|
+
JS_EnableBignumExt(ctx, TRUE);
|
26
|
+
|
27
|
+
JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);
|
28
|
+
js_std_add_helpers(ctx, 0, NULL);
|
29
|
+
|
30
|
+
js_std_init_handlers(rt);
|
31
|
+
if (r_enableStd == Qtrue) {
|
32
|
+
js_init_module_std(ctx, "std");
|
33
|
+
const char *enableStd = "import * as std from 'std';\n"
|
34
|
+
"globalThis.std = std;\n";
|
35
|
+
JSValue stdEval = JS_Eval(ctx, enableStd, strlen(enableStd), "<code>", JS_EVAL_TYPE_MODULE);
|
36
|
+
JS_FreeValue(ctx, stdEval);
|
37
|
+
}
|
38
|
+
|
39
|
+
if (r_enableOs == Qtrue) {
|
40
|
+
js_init_module_os(ctx, "os");
|
41
|
+
|
42
|
+
const char *enableOs = "import * as os from 'os';\n"
|
43
|
+
"globalThis.os = os;\n";
|
44
|
+
JSValue osEval = JS_Eval(ctx, enableOs, strlen(enableOs), "<code>", JS_EVAL_TYPE_MODULE);
|
45
|
+
JS_FreeValue(ctx, osEval);
|
46
|
+
}
|
47
|
+
|
48
|
+
char *code = StringValueCStr(r_code);
|
49
|
+
JSValue res = JS_Eval(ctx, code, strlen(code), "<code>", JS_EVAL_TYPE_GLOBAL);
|
50
|
+
|
51
|
+
VALUE result;
|
52
|
+
int r = 0;
|
53
|
+
if (JS_IsException(res)) {
|
54
|
+
rb_raise(rb_eRuntimeError, "Something happened by evaluating as JavaScript code");
|
55
|
+
result = Qnil;
|
56
|
+
} else if (JS_IsObject(res)) {
|
57
|
+
JSValue global = JS_GetGlobalObject(ctx);
|
58
|
+
JSValue jsonClass = JS_GetPropertyStr(ctx, global, "JSON");
|
59
|
+
JSValue stringifyFunc = JS_GetPropertyStr(ctx, jsonClass, "stringify");
|
60
|
+
JSValue strigified = JS_Call(ctx, stringifyFunc, jsonClass, 1, &res);
|
61
|
+
|
62
|
+
const char *msg = JS_ToCString(ctx, strigified);
|
63
|
+
result = rb_str_new2(msg);
|
64
|
+
|
65
|
+
JS_FreeValue(ctx, global);
|
66
|
+
JS_FreeValue(ctx, strigified);
|
67
|
+
JS_FreeValue(ctx, stringifyFunc);
|
68
|
+
JS_FreeValue(ctx, jsonClass);
|
69
|
+
} else if (JS_VALUE_IS_NAN(res)) {
|
70
|
+
result = ID2SYM(rb_intern(nanId));
|
71
|
+
} else if (JS_IsNumber(res)) {
|
72
|
+
JS_ToInt32(ctx, &r, res);
|
73
|
+
result = INT2NUM(r);
|
74
|
+
} else if (JS_IsString(res)) {
|
75
|
+
JSValue maybeString = JS_ToString(ctx, res);
|
76
|
+
const char *msg = JS_ToCString(ctx, maybeString);
|
77
|
+
result = rb_str_new2(msg);
|
78
|
+
} else if (JS_IsBool(res)) {
|
79
|
+
result = JS_ToBool(ctx, res) > 0 ? Qtrue : Qfalse;
|
80
|
+
} else if (JS_IsUndefined(res)) {
|
81
|
+
result = ID2SYM(rb_intern(undefinedId));
|
82
|
+
} else if (JS_IsNull(res)) {
|
83
|
+
result = Qnil;
|
84
|
+
} else {
|
85
|
+
result = Qnil;
|
86
|
+
}
|
87
|
+
JS_FreeValue(ctx, res);
|
88
|
+
|
89
|
+
js_std_free_handlers(rt);
|
90
|
+
JS_FreeContext(ctx);
|
91
|
+
JS_FreeRuntime(rt);
|
92
|
+
|
93
|
+
return result;
|
94
|
+
}
|
95
|
+
|
96
|
+
RUBY_FUNC_EXPORTED void
|
97
|
+
Init_quickjsrb(void)
|
98
|
+
{
|
99
|
+
rb_mQuickjs = rb_define_module("Quickjs");
|
100
|
+
rb_define_module_function(rb_mQuickjs, "_evalCode", rb_module_eval_js_code, 5);
|
101
|
+
|
102
|
+
VALUE valueClass = rb_define_class_under(rb_mQuickjs, "Value", rb_cObject);
|
103
|
+
rb_define_const(valueClass, "UNDEFINED", ID2SYM(rb_intern(undefinedId)));
|
104
|
+
rb_define_const(valueClass, "NAN", ID2SYM(rb_intern(nanId)));
|
105
|
+
}
|
data/lib/quickjs.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "quickjs/version"
|
4
|
+
require_relative "quickjs/quickjsrb"
|
5
|
+
|
6
|
+
module Quickjs
|
7
|
+
FEATURE_STD = :std
|
8
|
+
FEATURE_OS = :os
|
9
|
+
|
10
|
+
def evalCode(
|
11
|
+
code,
|
12
|
+
opts = {
|
13
|
+
memoryLimit: nil,
|
14
|
+
maxStackSize: nil,
|
15
|
+
features: []
|
16
|
+
}
|
17
|
+
)
|
18
|
+
|
19
|
+
_evalCode(
|
20
|
+
code,
|
21
|
+
opts[:memoryLimit] || 1024 * 1024 * 128,
|
22
|
+
opts[:maxStackSize] || 1024 * 1024 * 4,
|
23
|
+
opts[:features].include?(Quickjs::FEATURE_STD),
|
24
|
+
opts[:features].include?(Quickjs::FEATURE_OS),
|
25
|
+
)
|
26
|
+
end
|
27
|
+
module_function :evalCode
|
28
|
+
end
|
data/sig/quickjs.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: quickjs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- hmsk
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-06-14 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A native wrapper to run QuickJS in Ruby
|
14
|
+
email:
|
15
|
+
- k.hamasaki@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions:
|
18
|
+
- ext/quickjsrb/extconf.rb
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- CHANGELOG.md
|
22
|
+
- LICENSE
|
23
|
+
- Rakefile
|
24
|
+
- ext/quickjsrb/extconf.rb
|
25
|
+
- ext/quickjsrb/quickjs/LICENSE
|
26
|
+
- ext/quickjsrb/quickjs/cutils.c
|
27
|
+
- ext/quickjsrb/quickjs/cutils.h
|
28
|
+
- ext/quickjsrb/quickjs/libbf.c
|
29
|
+
- ext/quickjsrb/quickjs/libbf.h
|
30
|
+
- ext/quickjsrb/quickjs/libregexp-opcode.h
|
31
|
+
- ext/quickjsrb/quickjs/libregexp.c
|
32
|
+
- ext/quickjsrb/quickjs/libregexp.h
|
33
|
+
- ext/quickjsrb/quickjs/libunicode-table.h
|
34
|
+
- ext/quickjsrb/quickjs/libunicode.c
|
35
|
+
- ext/quickjsrb/quickjs/libunicode.h
|
36
|
+
- ext/quickjsrb/quickjs/list.h
|
37
|
+
- ext/quickjsrb/quickjs/qjs.c
|
38
|
+
- ext/quickjsrb/quickjs/qjsc.c
|
39
|
+
- ext/quickjsrb/quickjs/qjscalc.c
|
40
|
+
- ext/quickjsrb/quickjs/quickjs-atom.h
|
41
|
+
- ext/quickjsrb/quickjs/quickjs-libc.c
|
42
|
+
- ext/quickjsrb/quickjs/quickjs-libc.h
|
43
|
+
- ext/quickjsrb/quickjs/quickjs-opcode.h
|
44
|
+
- ext/quickjsrb/quickjs/quickjs.c
|
45
|
+
- ext/quickjsrb/quickjs/quickjs.h
|
46
|
+
- ext/quickjsrb/quickjs/repl.c
|
47
|
+
- ext/quickjsrb/quickjs/run-test262.c
|
48
|
+
- ext/quickjsrb/quickjs/unicode_gen.c
|
49
|
+
- ext/quickjsrb/quickjs/unicode_gen_def.h
|
50
|
+
- ext/quickjsrb/quickjsrb.c
|
51
|
+
- ext/quickjsrb/quickjsrb.h
|
52
|
+
- lib/quickjs.rb
|
53
|
+
- lib/quickjs/version.rb
|
54
|
+
- sig/quickjs.rbs
|
55
|
+
homepage: https://github.com/hmsk/quickjs.rb
|
56
|
+
licenses:
|
57
|
+
- MIT
|
58
|
+
metadata:
|
59
|
+
homepage_uri: https://github.com/hmsk/quickjs.rb
|
60
|
+
source_code_uri: https://github.com/hmsk/quickjs.rb
|
61
|
+
changelog_uri: https://github.com/hmsk/quickjs.rb/blob/main/CHANGELOG.md
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 3.0.0
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubygems_version: 3.5.9
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: Run binding of QuickJS
|
81
|
+
test_files: []
|