iv-phonic 0.0.5 → 0.0.6
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.
- data/Manifest.txt +32 -33
- data/README.rdoc +2 -2
- data/Rakefile +1 -1
- data/ext/include/iv/conversions.h +136 -12
- data/ext/include/iv/lexer.h +1 -20
- data/ext/include/iv/space.h +0 -2
- data/ext/iv/phonic/ast-fwd.h +8 -1
- data/ext/iv/phonic/creator.h +2 -0
- data/ext/iv/phonic/encoding.h +2 -0
- data/ext/iv/phonic/factory.h +2 -0
- data/ext/iv/phonic/parser.h +0 -1
- data/ext/iv/phonic/phonic.cc +40 -5
- data/ext/iv/phonic/source.h +0 -1
- metadata +43 -38
- data/ext/iv/phonic/rparser.h +0 -47
data/Manifest.txt
CHANGED
@@ -3,46 +3,45 @@ Manifest.txt
|
|
3
3
|
README.rdoc
|
4
4
|
Rakefile
|
5
5
|
test/test_iv_phonic.rb
|
6
|
-
ext/include/iv/uchar.h
|
7
|
-
ext/include/iv/space.h
|
8
|
-
ext/include/iv/lexer.h
|
9
|
-
ext/include/iv/conversions.h
|
10
|
-
ext/include/iv/dtoa.h
|
11
6
|
ext/include/iv/mt19937.h
|
12
|
-
ext/include/iv/ast.h
|
13
|
-
ext/include/iv/noncopyable.h
|
14
|
-
ext/include/iv/ast-factory.h
|
15
|
-
ext/include/iv/stringpiece.h
|
16
|
-
ext/include/iv/static_assert.h
|
17
|
-
ext/include/iv/functor.h
|
18
|
-
ext/include/iv/parser.h
|
19
|
-
ext/include/iv/errors.h
|
20
|
-
ext/include/iv/ast-visitor.h
|
21
7
|
ext/include/iv/token.h
|
22
|
-
ext/include/iv/enable_if.h
|
23
8
|
ext/include/iv/any.h
|
9
|
+
ext/include/iv/ast-fwd.h
|
10
|
+
ext/include/iv/static_assert.h
|
11
|
+
ext/include/iv/ast.h
|
12
|
+
ext/include/iv/dtoa.h
|
13
|
+
ext/include/iv/ast-visitor.h
|
14
|
+
ext/include/iv/ustringpiece.h
|
15
|
+
ext/include/iv/ucdata.h
|
16
|
+
ext/include/iv/ustring.h
|
17
|
+
ext/include/iv/noncopyable.h
|
24
18
|
ext/include/iv/keyword.h
|
25
|
-
ext/include/iv/
|
26
|
-
ext/include/iv/
|
19
|
+
ext/include/iv/chars.h
|
20
|
+
ext/include/iv/enable_if.h
|
21
|
+
ext/include/iv/utils.h
|
22
|
+
ext/include/iv/conversions.h
|
27
23
|
ext/include/iv/location.h
|
28
|
-
ext/include/iv/
|
24
|
+
ext/include/iv/lexer.h
|
25
|
+
ext/include/iv/xorshift.h
|
26
|
+
ext/include/iv/space.h
|
29
27
|
ext/include/iv/algorithm.h
|
30
|
-
ext/include/iv/ustring.h
|
31
|
-
ext/include/iv/ast-fwd.h
|
32
|
-
ext/include/iv/utils.h
|
33
|
-
ext/include/iv/ast-info.h
|
34
|
-
ext/include/iv/alloc.h
|
35
|
-
ext/include/iv/chars.h
|
36
28
|
ext/include/iv/fixedcontainer.h
|
37
|
-
ext/include/iv/
|
29
|
+
ext/include/iv/functor.h
|
30
|
+
ext/include/iv/cmdline.h
|
38
31
|
ext/include/iv/ast-serializer.h
|
39
|
-
ext/include/iv/
|
40
|
-
ext/iv/
|
41
|
-
ext/iv/
|
42
|
-
ext/iv/
|
32
|
+
ext/include/iv/stringpiece.h
|
33
|
+
ext/include/iv/uchar.h
|
34
|
+
ext/include/iv/ast-factory.h
|
35
|
+
ext/include/iv/alloc.h
|
36
|
+
ext/include/iv/ast-info.h
|
37
|
+
ext/include/iv/parser.h
|
38
|
+
ext/include/iv/none.h
|
39
|
+
ext/include/iv/errors.h
|
40
|
+
ext/iv/phonic/ast-fwd.h
|
43
41
|
ext/iv/phonic/source.h
|
44
|
-
ext/iv/phonic/phonic.cc
|
45
|
-
ext/iv/phonic/rparser.h
|
46
42
|
ext/iv/phonic/creator.h
|
47
|
-
ext/iv/phonic/
|
48
|
-
ext/iv/phonic/extconf.rb
|
43
|
+
ext/iv/phonic/phonic.cc
|
44
|
+
ext/iv/phonic/extconf.rb
|
45
|
+
ext/iv/phonic/encoding.h
|
46
|
+
ext/iv/phonic/parser.h
|
47
|
+
ext/iv/phonic/factory.h
|
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ directory "ext/include/iv"
|
|
10
10
|
|
11
11
|
HOE = Hoe.spec 'iv-phonic' do
|
12
12
|
developer('Constellation', 'utatane.tea@gmail.com')
|
13
|
-
self.version = '0.0.
|
13
|
+
self.version = '0.0.6'
|
14
14
|
self.readme_file = 'README.rdoc'
|
15
15
|
self.history_file = 'ChangeLog'
|
16
16
|
self.extra_rdoc_files = FileList['*.rdoc']
|
@@ -48,6 +48,7 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
48
48
|
bool is_decimal = true;
|
49
49
|
bool is_signed = false;
|
50
50
|
bool is_sign_found = false;
|
51
|
+
bool is_found_zero = false;
|
51
52
|
std::size_t pos = 0;
|
52
53
|
int significant_digits = 0;
|
53
54
|
int insignificant_digits = 0;
|
@@ -84,9 +85,10 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
84
85
|
|
85
86
|
if (Chars::IsDecimalDigit(*it)) {
|
86
87
|
if (*it == '0') {
|
88
|
+
is_found_zero = true;
|
87
89
|
++it;
|
88
90
|
if (it == last) {
|
89
|
-
return 0;
|
91
|
+
return (is_signed) ? -0.0 : 0.0;
|
90
92
|
}
|
91
93
|
if (!parse_float && (*it == 'x' || *it == 'X')) {
|
92
94
|
if (is_sign_found) {
|
@@ -148,6 +150,7 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
148
150
|
if (*it == '.') {
|
149
151
|
buffer[pos++] = '.';
|
150
152
|
++it;
|
153
|
+
const Iter start = it;
|
151
154
|
while (it != last &&
|
152
155
|
Chars::IsDecimalDigit(*it)) {
|
153
156
|
if (significant_digits < Conversions::kMaxSignificantDigits) {
|
@@ -156,6 +159,9 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
156
159
|
}
|
157
160
|
++it;
|
158
161
|
}
|
162
|
+
if (start == it) {
|
163
|
+
return Conversions::kNaN;
|
164
|
+
}
|
159
165
|
} else {
|
160
166
|
for (std::string::const_iterator inf_it = Conversions::kInfinity.begin(),
|
161
167
|
inf_last = Conversions::kInfinity.end();
|
@@ -190,17 +196,29 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
190
196
|
buffer[pos++] = *it;
|
191
197
|
++it;
|
192
198
|
if (it == last) {
|
199
|
+
if (parse_float) {
|
200
|
+
--it;
|
201
|
+
--pos;
|
202
|
+
goto exponent_pasing_done;
|
203
|
+
}
|
193
204
|
return Conversions::kNaN;
|
194
205
|
}
|
206
|
+
bool is_signed_exp = false;
|
195
207
|
if (*it == '+' || *it == '-') {
|
196
208
|
buffer[pos++] = *it;
|
197
209
|
++it;
|
210
|
+
is_signed_exp = true;
|
198
211
|
}
|
199
|
-
if (it == last) {
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
212
|
+
if (it == last || !Chars::IsDecimalDigit(*it)) {
|
213
|
+
if (parse_float) {
|
214
|
+
--it;
|
215
|
+
--pos;
|
216
|
+
if (is_signed_exp) {
|
217
|
+
--it;
|
218
|
+
--pos;
|
219
|
+
}
|
220
|
+
goto exponent_pasing_done;
|
221
|
+
}
|
204
222
|
return Conversions::kNaN;
|
205
223
|
}
|
206
224
|
int exponent = 0;
|
@@ -220,6 +238,9 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
220
238
|
pos+=4;
|
221
239
|
}
|
222
240
|
|
241
|
+
// exponent_pasing_done label
|
242
|
+
exponent_pasing_done:
|
243
|
+
|
223
244
|
while (it != last &&
|
224
245
|
(Chars::IsWhiteSpace(*it) || Chars::IsLineTerminator(*it))) {
|
225
246
|
++it;
|
@@ -228,7 +249,7 @@ inline double StringToDouble(Iter it, Iter last, bool parse_float) {
|
|
228
249
|
if (it == last || parse_float) {
|
229
250
|
if (pos == 0) {
|
230
251
|
// empty
|
231
|
-
return (parse_float) ? Conversions::kNaN : 0;
|
252
|
+
return (parse_float && !is_found_zero) ? Conversions::kNaN : 0;
|
232
253
|
} else {
|
233
254
|
buffer[pos++] = '\0';
|
234
255
|
return std::strtod(buffer.data(), NULL);
|
@@ -246,6 +267,108 @@ inline double StringToDouble(const UStringPiece& str, bool parse_float) {
|
|
246
267
|
return StringToDouble(str.begin(), str.end(), parse_float);
|
247
268
|
}
|
248
269
|
|
270
|
+
inline int OctalValue(const int c) {
|
271
|
+
if ('0' <= c && c <= '8') {
|
272
|
+
return c - '0';
|
273
|
+
}
|
274
|
+
return -1;
|
275
|
+
}
|
276
|
+
|
277
|
+
inline int HexValue(const int c) {
|
278
|
+
if ('0' <= c && c <= '9') {
|
279
|
+
return c - '0';
|
280
|
+
}
|
281
|
+
if ('a' <= c && c <= 'f') {
|
282
|
+
return c - 'a' + 10;
|
283
|
+
}
|
284
|
+
if ('A' <= c && c <= 'F') {
|
285
|
+
return c - 'A' + 10;
|
286
|
+
}
|
287
|
+
return -1;
|
288
|
+
}
|
289
|
+
|
290
|
+
inline int Radix36Value(const int c) {
|
291
|
+
if ('0' <= c && c <= '9') {
|
292
|
+
return c - '0';
|
293
|
+
}
|
294
|
+
if ('a' <= c && c <= 'z') {
|
295
|
+
return c - 'a' + 10;
|
296
|
+
}
|
297
|
+
if ('A' <= c && c <= 'Z') {
|
298
|
+
return c - 'A' + 10;
|
299
|
+
}
|
300
|
+
return -1;
|
301
|
+
}
|
302
|
+
|
303
|
+
template<typename Iter>
|
304
|
+
inline double StringToIntegerWithRadix(Iter it, Iter last,
|
305
|
+
int radix, bool strip_prefix) {
|
306
|
+
// remove leading white space
|
307
|
+
while (it != last &&
|
308
|
+
(Chars::IsWhiteSpace(*it) || Chars::IsLineTerminator(*it))) {
|
309
|
+
++it;
|
310
|
+
}
|
311
|
+
|
312
|
+
// empty string ""
|
313
|
+
if (it == last) {
|
314
|
+
return Conversions::kNaN;
|
315
|
+
}
|
316
|
+
|
317
|
+
int sign = 1;
|
318
|
+
if (*it == '-') {
|
319
|
+
sign = -1;
|
320
|
+
++it;
|
321
|
+
} else if (*it == '+') {
|
322
|
+
++it;
|
323
|
+
}
|
324
|
+
|
325
|
+
if (it == last) {
|
326
|
+
return Conversions::kNaN;
|
327
|
+
}
|
328
|
+
|
329
|
+
if (strip_prefix) {
|
330
|
+
if (*it == '0') {
|
331
|
+
++it;
|
332
|
+
if (it != last &&
|
333
|
+
(*it == 'x' || *it == 'X')) {
|
334
|
+
// strip_prefix
|
335
|
+
++it;
|
336
|
+
radix = 16;
|
337
|
+
} else {
|
338
|
+
--it;
|
339
|
+
}
|
340
|
+
}
|
341
|
+
}
|
342
|
+
|
343
|
+
if (it == last) {
|
344
|
+
return Conversions::kNaN;
|
345
|
+
}
|
346
|
+
|
347
|
+
double result = 0;
|
348
|
+
const Iter start = it;
|
349
|
+
for (; it != last; ++it) {
|
350
|
+
const int val = Radix36Value(*it);
|
351
|
+
if (val != -1 && val < radix) {
|
352
|
+
result = result * radix + val;
|
353
|
+
} else {
|
354
|
+
return (start == it) ? Conversions::kNaN : sign * result;
|
355
|
+
}
|
356
|
+
}
|
357
|
+
return sign * result;
|
358
|
+
}
|
359
|
+
|
360
|
+
inline double StringToIntegerWithRadix(const StringPiece& range,
|
361
|
+
int radix, bool strip_prefix) {
|
362
|
+
return StringToIntegerWithRadix(range.begin(), range.end(),
|
363
|
+
radix, strip_prefix);
|
364
|
+
}
|
365
|
+
|
366
|
+
inline double StringToIntegerWithRadix(const UStringPiece& range,
|
367
|
+
int radix, bool strip_prefix) {
|
368
|
+
return StringToIntegerWithRadix(range.begin(), range.end(),
|
369
|
+
radix, strip_prefix);
|
370
|
+
}
|
371
|
+
|
249
372
|
inline std::size_t StringToHash(const UStringPiece& x) {
|
250
373
|
std::size_t len = x.size();
|
251
374
|
std::size_t step = (len >> 5) + 1;
|
@@ -284,8 +407,8 @@ inline int32_t DoubleToInt32(double d) {
|
|
284
407
|
d - Conversions::DoubleToInt32_Two32 : d);
|
285
408
|
}
|
286
409
|
|
287
|
-
inline
|
288
|
-
return static_cast<uint32_t>(d);
|
410
|
+
inline uint32_t DoubleToUInt32(double d) {
|
411
|
+
return static_cast<uint32_t>(DoubleToInt32(d));
|
289
412
|
}
|
290
413
|
|
291
414
|
inline double DoubleToInteger(double d) {
|
@@ -299,6 +422,7 @@ inline double DoubleToInteger(double d) {
|
|
299
422
|
}
|
300
423
|
|
301
424
|
inline bool ConvertToUInt32(const UStringPiece& str, uint32_t* value) {
|
425
|
+
static const uint32_t uint32_t_max = std::numeric_limits<uint32_t>::max();
|
302
426
|
uint16_t ch;
|
303
427
|
*value = 0;
|
304
428
|
UStringPiece::const_iterator it = str.begin();
|
@@ -320,9 +444,9 @@ inline bool ConvertToUInt32(const UStringPiece& str, uint32_t* value) {
|
|
320
444
|
return false;
|
321
445
|
}
|
322
446
|
}
|
323
|
-
return (prev < (
|
324
|
-
((prev == (
|
325
|
-
(ch < (
|
447
|
+
return (prev < (uint32_t_max / 10) ||
|
448
|
+
((prev == (uint32_t_max / 10)) &&
|
449
|
+
(ch < (uint32_t_max % 10))));
|
326
450
|
}
|
327
451
|
|
328
452
|
template<typename T>
|
data/ext/include/iv/lexer.h
CHANGED
@@ -12,6 +12,7 @@
|
|
12
12
|
#include "location.h"
|
13
13
|
#include "noncopyable.h"
|
14
14
|
#include "keyword.h"
|
15
|
+
#include "conversions.h"
|
15
16
|
|
16
17
|
namespace iv {
|
17
18
|
namespace core {
|
@@ -840,26 +841,6 @@ class Lexer: private Noncopyable<Lexer<Source> >::type {
|
|
840
841
|
return res;
|
841
842
|
}
|
842
843
|
|
843
|
-
inline int OctalValue(const int c) const {
|
844
|
-
if ('0' <= c && c <= '8') {
|
845
|
-
return c - '0';
|
846
|
-
}
|
847
|
-
return -1;
|
848
|
-
}
|
849
|
-
|
850
|
-
inline int HexValue(const int c) const {
|
851
|
-
if ('0' <= c && c <= '9') {
|
852
|
-
return c - '0';
|
853
|
-
}
|
854
|
-
if ('a' <= c && c <= 'f') {
|
855
|
-
return c - 'a' + 10;
|
856
|
-
}
|
857
|
-
if ('A' <= c && c <= 'F') {
|
858
|
-
return c - 'A' + 10;
|
859
|
-
}
|
860
|
-
return -1;
|
861
|
-
}
|
862
|
-
|
863
844
|
void ScanDecimalDigits() {
|
864
845
|
while (Chars::IsDecimalDigit(c_)) {
|
865
846
|
Record8Advance();
|
data/ext/include/iv/space.h
CHANGED
data/ext/iv/phonic/ast-fwd.h
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
#ifndef _IV_PHONIC_AST_FWD_H_
|
2
2
|
#define _IV_PHONIC_AST_FWD_H_
|
3
|
-
#include <ruby.h>
|
4
3
|
#include <iv/ast.h>
|
4
|
+
|
5
5
|
namespace iv {
|
6
6
|
namespace phonic {
|
7
|
+
|
7
8
|
class AstFactory;
|
9
|
+
|
8
10
|
} // namespace iv::phonic
|
11
|
+
|
9
12
|
namespace core {
|
10
13
|
namespace ast {
|
14
|
+
|
11
15
|
template<>
|
12
16
|
class AstNodeBase<iv::phonic::AstFactory>
|
13
17
|
: public Inherit<iv::phonic::AstFactory, kAstNode> {
|
@@ -20,8 +24,11 @@ class AstNodeBase<iv::phonic::AstFactory>
|
|
20
24
|
std::size_t begin_;
|
21
25
|
std::size_t end_;
|
22
26
|
};
|
27
|
+
|
23
28
|
} } // namespace iv::core::ast
|
29
|
+
|
24
30
|
namespace phonic {
|
31
|
+
|
25
32
|
#define V(AST) typedef core::ast::AST<AstFactory> AST;
|
26
33
|
AST_NODE_LIST(V)
|
27
34
|
#undef V
|
data/ext/iv/phonic/creator.h
CHANGED
data/ext/iv/phonic/encoding.h
CHANGED
data/ext/iv/phonic/factory.h
CHANGED
data/ext/iv/phonic/parser.h
CHANGED
data/ext/iv/phonic/phonic.cc
CHANGED
@@ -1,10 +1,45 @@
|
|
1
|
+
extern "C" {
|
1
2
|
#include <ruby.h>
|
2
|
-
#include
|
3
|
+
#include <ruby/encoding.h>
|
4
|
+
#include <ruby/intern.h>
|
5
|
+
}
|
6
|
+
#include <iv/parser.h>
|
7
|
+
#include "encoding.h"
|
8
|
+
#include "factory.h"
|
9
|
+
#include "parser.h"
|
10
|
+
#include "creator.h"
|
11
|
+
#include "source.h"
|
3
12
|
|
4
13
|
#define RBFUNC(func) (reinterpret_cast<VALUE(*)(...)>(func))
|
5
14
|
|
6
|
-
|
15
|
+
namespace iv {
|
16
|
+
namespace phonic {
|
7
17
|
|
18
|
+
static VALUE cParseError;
|
19
|
+
|
20
|
+
static VALUE Parse(VALUE self, VALUE rb_str) {
|
21
|
+
AstFactory factory;
|
22
|
+
Check_Type(rb_str, T_STRING);
|
23
|
+
VALUE encoded_rb_str = rb_str_encode(rb_str,
|
24
|
+
Encoding::UTF16Encoding(),
|
25
|
+
0,
|
26
|
+
Qnil);
|
27
|
+
const char* str = StringValuePtr(encoded_rb_str);
|
28
|
+
const std::size_t len = RSTRING_LEN(encoded_rb_str);
|
29
|
+
UTF16Source source(str, len);
|
30
|
+
Parser parser(&factory, &source);
|
31
|
+
const FunctionLiteral* global = parser.ParseProgram();
|
32
|
+
if (!global) {
|
33
|
+
rb_raise(cParseError, "%s", parser.error().c_str());
|
34
|
+
} else {
|
35
|
+
Creator creator;
|
36
|
+
return creator.Result(global);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
} } // namespace iv::phonic
|
41
|
+
|
42
|
+
extern "C" {
|
8
43
|
void Init_phonic() {
|
9
44
|
iv::phonic::Encoding::Init();
|
10
45
|
// IV
|
@@ -13,10 +48,10 @@ void Init_phonic() {
|
|
13
48
|
// IV::Phonic
|
14
49
|
VALUE mIVPhonic = rb_define_module_under(mIV, "Phonic");
|
15
50
|
rb_define_module_function(mIVPhonic, "parse",
|
16
|
-
RBFUNC(&iv::phonic::
|
17
|
-
iv::phonic::
|
51
|
+
RBFUNC(&iv::phonic::Parse), 1);
|
52
|
+
iv::phonic::cParseError = rb_define_class_under(
|
53
|
+
mIVPhonic, "ParseError", rb_eStandardError);
|
18
54
|
}
|
19
|
-
|
20
55
|
}
|
21
56
|
|
22
57
|
#undef RBFUNC
|
data/ext/iv/phonic/source.h
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iv-phonic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Constellation
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-12-02 00:00:00 +09:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,6 +26,7 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 7
|
28
30
|
segments:
|
29
31
|
- 2
|
30
32
|
- 0
|
@@ -40,6 +42,7 @@ dependencies:
|
|
40
42
|
requirements:
|
41
43
|
- - ">="
|
42
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
43
46
|
segments:
|
44
47
|
- 0
|
45
48
|
version: "0"
|
@@ -53,11 +56,12 @@ dependencies:
|
|
53
56
|
requirements:
|
54
57
|
- - ">="
|
55
58
|
- !ruby/object:Gem::Version
|
59
|
+
hash: 19
|
56
60
|
segments:
|
57
61
|
- 2
|
58
|
-
-
|
59
|
-
-
|
60
|
-
version: 2.
|
62
|
+
- 7
|
63
|
+
- 0
|
64
|
+
version: 2.7.0
|
61
65
|
type: :development
|
62
66
|
version_requirements: *id003
|
63
67
|
description: phonic is ruby binding for iv AST API
|
@@ -76,49 +80,48 @@ files:
|
|
76
80
|
- README.rdoc
|
77
81
|
- Rakefile
|
78
82
|
- test/test_iv_phonic.rb
|
79
|
-
- ext/include/iv/uchar.h
|
80
|
-
- ext/include/iv/space.h
|
81
|
-
- ext/include/iv/lexer.h
|
82
|
-
- ext/include/iv/conversions.h
|
83
|
-
- ext/include/iv/dtoa.h
|
84
83
|
- ext/include/iv/mt19937.h
|
85
|
-
- ext/include/iv/ast.h
|
86
|
-
- ext/include/iv/noncopyable.h
|
87
|
-
- ext/include/iv/ast-factory.h
|
88
|
-
- ext/include/iv/stringpiece.h
|
89
|
-
- ext/include/iv/static_assert.h
|
90
|
-
- ext/include/iv/functor.h
|
91
|
-
- ext/include/iv/parser.h
|
92
|
-
- ext/include/iv/errors.h
|
93
|
-
- ext/include/iv/ast-visitor.h
|
94
84
|
- ext/include/iv/token.h
|
95
|
-
- ext/include/iv/enable_if.h
|
96
85
|
- ext/include/iv/any.h
|
86
|
+
- ext/include/iv/ast-fwd.h
|
87
|
+
- ext/include/iv/static_assert.h
|
88
|
+
- ext/include/iv/ast.h
|
89
|
+
- ext/include/iv/dtoa.h
|
90
|
+
- ext/include/iv/ast-visitor.h
|
91
|
+
- ext/include/iv/ustringpiece.h
|
92
|
+
- ext/include/iv/ucdata.h
|
93
|
+
- ext/include/iv/ustring.h
|
94
|
+
- ext/include/iv/noncopyable.h
|
97
95
|
- ext/include/iv/keyword.h
|
98
|
-
- ext/include/iv/
|
99
|
-
- ext/include/iv/
|
96
|
+
- ext/include/iv/chars.h
|
97
|
+
- ext/include/iv/enable_if.h
|
98
|
+
- ext/include/iv/utils.h
|
99
|
+
- ext/include/iv/conversions.h
|
100
100
|
- ext/include/iv/location.h
|
101
|
-
- ext/include/iv/
|
101
|
+
- ext/include/iv/lexer.h
|
102
|
+
- ext/include/iv/xorshift.h
|
103
|
+
- ext/include/iv/space.h
|
102
104
|
- ext/include/iv/algorithm.h
|
103
|
-
- ext/include/iv/ustring.h
|
104
|
-
- ext/include/iv/ast-fwd.h
|
105
|
-
- ext/include/iv/utils.h
|
106
|
-
- ext/include/iv/ast-info.h
|
107
|
-
- ext/include/iv/alloc.h
|
108
|
-
- ext/include/iv/chars.h
|
109
105
|
- ext/include/iv/fixedcontainer.h
|
110
|
-
- ext/include/iv/
|
106
|
+
- ext/include/iv/functor.h
|
107
|
+
- ext/include/iv/cmdline.h
|
111
108
|
- ext/include/iv/ast-serializer.h
|
112
|
-
- ext/include/iv/
|
113
|
-
- ext/iv/
|
114
|
-
- ext/iv/
|
115
|
-
- ext/iv/
|
109
|
+
- ext/include/iv/stringpiece.h
|
110
|
+
- ext/include/iv/uchar.h
|
111
|
+
- ext/include/iv/ast-factory.h
|
112
|
+
- ext/include/iv/alloc.h
|
113
|
+
- ext/include/iv/ast-info.h
|
114
|
+
- ext/include/iv/parser.h
|
115
|
+
- ext/include/iv/none.h
|
116
|
+
- ext/include/iv/errors.h
|
117
|
+
- ext/iv/phonic/ast-fwd.h
|
116
118
|
- ext/iv/phonic/source.h
|
117
|
-
- ext/iv/phonic/phonic.cc
|
118
|
-
- ext/iv/phonic/rparser.h
|
119
119
|
- ext/iv/phonic/creator.h
|
120
|
-
- ext/iv/phonic/
|
120
|
+
- ext/iv/phonic/phonic.cc
|
121
121
|
- ext/iv/phonic/extconf.rb
|
122
|
+
- ext/iv/phonic/encoding.h
|
123
|
+
- ext/iv/phonic/parser.h
|
124
|
+
- ext/iv/phonic/factory.h
|
122
125
|
has_rdoc: true
|
123
126
|
homepage: https://github.com/Constellation/iv/tree/master/src/phonic/
|
124
127
|
licenses: []
|
@@ -134,6 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
137
|
requirements:
|
135
138
|
- - ">="
|
136
139
|
- !ruby/object:Gem::Version
|
140
|
+
hash: 49
|
137
141
|
segments:
|
138
142
|
- 1
|
139
143
|
- 9
|
@@ -144,6 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
148
|
requirements:
|
145
149
|
- - ">="
|
146
150
|
- !ruby/object:Gem::Version
|
151
|
+
hash: 3
|
147
152
|
segments:
|
148
153
|
- 0
|
149
154
|
version: "0"
|
data/ext/iv/phonic/rparser.h
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
#ifndef _IV_PHONIC_RPARSER_H_
|
2
|
-
#define _IV_PHONIC_RPARSER_H_
|
3
|
-
#include <cstdlib>
|
4
|
-
#include <cstring>
|
5
|
-
#include <ruby.h>
|
6
|
-
#include <ruby/encoding.h>
|
7
|
-
#include <ruby/intern.h>
|
8
|
-
#include <iv/parser.h>
|
9
|
-
#include "encoding.h"
|
10
|
-
#include "factory.h"
|
11
|
-
#include "parser.h"
|
12
|
-
#include "creator.h"
|
13
|
-
#include "source.h"
|
14
|
-
namespace iv {
|
15
|
-
namespace phonic {
|
16
|
-
|
17
|
-
static VALUE cParseError;
|
18
|
-
|
19
|
-
class RParser {
|
20
|
-
public:
|
21
|
-
static VALUE Parse(VALUE self, VALUE rb_str) {
|
22
|
-
AstFactory factory;
|
23
|
-
Check_Type(rb_str, T_STRING);
|
24
|
-
VALUE encoded_rb_str = rb_str_encode(rb_str,
|
25
|
-
Encoding::UTF16Encoding(),
|
26
|
-
0,
|
27
|
-
Qnil);
|
28
|
-
const char* str = StringValuePtr(encoded_rb_str);
|
29
|
-
const std::size_t len = RSTRING_LEN(encoded_rb_str);
|
30
|
-
UTF16Source source(str, len);
|
31
|
-
Parser parser(&factory, &source);
|
32
|
-
const FunctionLiteral* global = parser.ParseProgram();
|
33
|
-
if (!global) {
|
34
|
-
rb_raise(cParseError, "%s", parser.error().c_str());
|
35
|
-
} else {
|
36
|
-
Creator creator;
|
37
|
-
return creator.Result(global);
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
static void Init(VALUE mIVPhonic) {
|
42
|
-
cParseError = rb_define_class_under(mIVPhonic, "ParseError", rb_eStandardError);
|
43
|
-
}
|
44
|
-
};
|
45
|
-
|
46
|
-
} } // namespace iv::phonic
|
47
|
-
#endif // _IV_PHONIC_RPARSER_H_
|