iv-phonic 0.0.3 → 0.0.5

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.
@@ -15,6 +15,12 @@ struct Location {
15
15
  inline std::size_t end_position() const {
16
16
  return end_position_;
17
17
  }
18
+ inline void set_begin_position(std::size_t begin) {
19
+ begin_position_ = begin;
20
+ }
21
+ inline void set_end_position(std::size_t end) {
22
+ end_position_ = end;
23
+ }
18
24
  };
19
25
 
20
26
  IV_STATIC_ASSERT(std::tr1::is_pod<Location>::value);
@@ -9,10 +9,10 @@
9
9
  #include "static_assert.h"
10
10
  #include "ast.h"
11
11
  #include "ast-factory.h"
12
- #include "source.h"
13
12
  #include "lexer.h"
14
13
  #include "noncopyable.h"
15
14
  #include "utils.h"
15
+ #include "ustring.h"
16
16
  #include "none.h"
17
17
 
18
18
  #define IS(token)\
@@ -42,6 +42,15 @@
42
42
  } while (0)
43
43
 
44
44
  #define RAISE(str)\
45
+ do {\
46
+ *res = false;\
47
+ error_state_ |= kNotRecoverable;\
48
+ SetErrorHeader(lexer_.line_number());\
49
+ error_.append(str);\
50
+ return NULL;\
51
+ } while (0)
52
+
53
+ #define RAISE_RECOVERVABLE(str)\
45
54
  do {\
46
55
  *res = false;\
47
56
  SetErrorHeader(lexer_.line_number());\
@@ -52,6 +61,7 @@
52
61
  #define RAISE_WITH_NUMBER(str, line)\
53
62
  do {\
54
63
  *res = false;\
64
+ error_state_ |= kNotRecoverable;\
55
65
  SetErrorHeader(line);\
56
66
  error_.append(str);\
57
67
  return NULL;\
@@ -124,11 +134,12 @@ const UString ParserData<T>::kSet(
124
134
 
125
135
  typedef detail::ParserData<None> ParserData;
126
136
 
127
- template<typename Factory>
128
- class Parser : private Noncopyable<Parser<Factory> >::type {
137
+ template<typename Factory, typename Source>
138
+ class Parser : private Noncopyable<Parser<Factory, Source> >::type {
129
139
  public:
130
- typedef Parser<Factory> this_type;
131
- typedef Parser<Factory> parser_type;
140
+ typedef Parser<Factory, Source> this_type;
141
+ typedef Parser<Factory, Source> parser_type;
142
+ typedef Lexer<Source> lexer_type;
132
143
  #define V(AST) typedef typename ast::AST<Factory> AST;
133
144
  AST_NODE_LIST(V)
134
145
  #undef V
@@ -138,6 +149,11 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
138
149
  #define V(S) typedef typename SpaceUString<Factory>::type S;
139
150
  AST_STRING(V)
140
151
  #undef V
152
+
153
+ enum ErrorState {
154
+ kNotRecoverable = 1
155
+ };
156
+
141
157
  class Target : private Noncopyable<Target>::type {
142
158
  public:
143
159
  typedef typename SpaceVector<Factory, Identifier*>::type Identifiers;
@@ -174,7 +190,9 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
174
190
  return !IsAnonymous();
175
191
  }
176
192
  inline BreakableStatement** node() {
177
- node_ = new(parser_->factory())BreakableStatement*();
193
+ if (!node_) {
194
+ node_ = parser_->factory()->template NewPtr<BreakableStatement>();
195
+ }
178
196
  return node_;
179
197
  }
180
198
  inline Identifiers* labels() const {
@@ -193,10 +211,30 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
193
211
  int type_;
194
212
  };
195
213
 
196
- Parser(BasicSource* source, Factory* space)
214
+ class TargetScope : private Noncopyable<Target>::type {
215
+ public:
216
+ TargetScope(parser_type* parser)
217
+ : parser_(parser),
218
+ target_(parser->target()),
219
+ labels_(parser->labels()) {
220
+ parser_->set_target(NULL);
221
+ parser_->set_labels(NULL);
222
+ }
223
+ ~TargetScope() {
224
+ parser_->set_target(target_);
225
+ parser_->set_labels(labels_);
226
+ }
227
+ private:
228
+ parser_type* parser_;
229
+ Target* target_;
230
+ Identifiers* labels_;
231
+ };
232
+
233
+ Parser(Factory* space, const Source* source)
197
234
  : lexer_(source),
198
235
  error_(),
199
236
  strict_(false),
237
+ error_state_(0),
200
238
  factory_(space),
201
239
  scope_(NULL),
202
240
  target_(NULL),
@@ -206,8 +244,9 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
206
244
  // Program
207
245
  // : SourceElements
208
246
  FunctionLiteral* ParseProgram() {
209
- FunctionLiteral* global = factory_->NewFunctionLiteral(
247
+ FunctionLiteral* const global = factory_->NewFunctionLiteral(
210
248
  FunctionLiteral::GLOBAL);
249
+ global->set_strict(strict_);
211
250
  assert(target_ == NULL);
212
251
  bool error_flag = true;
213
252
  bool *res = &error_flag;
@@ -402,7 +441,7 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
402
441
  FunctionLiteral::GENERAL, CHECK);
403
442
  // define named function as FunctionDeclaration
404
443
  scope_->AddFunctionDeclaration(expr);
405
- return factory_->NewFunctionStatement(expr);
444
+ return factory_->NewFunctionDeclaration(expr);
406
445
  }
407
446
 
408
447
  // Block
@@ -552,7 +591,14 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
552
591
 
553
592
  EXPECT(Token::RPAREN);
554
593
 
555
- ExpectSemicolon(CHECK);
594
+ // ex:
595
+ // do {
596
+ // print("valid syntax");
597
+ // } while (0) return true;
598
+ // is syntax valid
599
+ if (token_ == Token::SEMICOLON) {
600
+ Next();
601
+ }
556
602
  DoWhileStatement* const dowhile = factory_->NewDoWhileStatement(stmt, expr);
557
603
  target.set_node(dowhile);
558
604
  return dowhile;
@@ -845,6 +891,7 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
845
891
  Next();
846
892
  // Throw requires Expression
847
893
  if (lexer_.has_line_terminator_before_next()) {
894
+ // TODO(Constellation) more refined parse error system
848
895
  RAISE("missing expression between throw and newline");
849
896
  }
850
897
  Expression* const expr = ParseExpression(true, CHECK);
@@ -1410,7 +1457,7 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1410
1457
  // | MemberExpression '[' Expression ']'
1411
1458
  // | NEW MemberExpression Arguments
1412
1459
  Expression* ParseMemberExpression(bool allow_call, bool *res) {
1413
- Expression *expr;
1460
+ Expression* expr;
1414
1461
  if (token_ != Token::NEW) {
1415
1462
  if (token_ == Token::FUNCTION) {
1416
1463
  // FunctionExpression
@@ -1421,8 +1468,8 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1421
1468
  }
1422
1469
  } else {
1423
1470
  Next();
1424
- Expression *target = ParseMemberExpression(false, CHECK);
1425
- ConstructorCall *con = factory_->NewConstructorCall(target);
1471
+ Expression* const target = ParseMemberExpression(false, CHECK);
1472
+ ConstructorCall* const con = factory_->NewConstructorCall(target);
1426
1473
  if (token_ == Token::LPAREN) {
1427
1474
  ParseArguments(con, CHECK);
1428
1475
  }
@@ -1432,14 +1479,14 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1432
1479
  switch (token_) {
1433
1480
  case Token::LBRACK: {
1434
1481
  Next();
1435
- Expression* index = ParseExpression(true, CHECK);
1482
+ Expression* const index = ParseExpression(true, CHECK);
1436
1483
  expr = factory_->NewIndexAccess(expr, index);
1437
1484
  EXPECT(Token::RBRACK);
1438
1485
  break;
1439
1486
  }
1440
1487
 
1441
1488
  case Token::PERIOD: {
1442
- Next(Lexer::kIgnoreReservedWords); // IDENTIFIERNAME
1489
+ Next<IgnoreReservedWords>(); // IDENTIFIERNAME
1443
1490
  IS(Token::IDENTIFIER);
1444
1491
  Identifier* const ident = ParseIdentifier(lexer_.Buffer());
1445
1492
  expr = factory_->NewIdentifierAccess(expr, ident);
@@ -1507,7 +1554,7 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1507
1554
  case Token::NUMBER:
1508
1555
  // section 7.8.3
1509
1556
  // strict mode forbids Octal Digits Literal
1510
- if (strict_ && lexer_.NumericType() == Lexer::OCTAL) {
1557
+ if (strict_ && lexer_.NumericType() == lexer_type::OCTAL) {
1511
1558
  RAISE("octal integer literal not allowed in strict code");
1512
1559
  }
1513
1560
  result = factory_->NewNumberLiteral(lexer_.Numeric());
@@ -1515,11 +1562,11 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1515
1562
  break;
1516
1563
 
1517
1564
  case Token::STRING: {
1518
- const Lexer::State state = lexer_.StringEscapeType();
1519
- if (strict_ && state == Lexer::OCTAL) {
1565
+ const typename lexer_type::State state = lexer_.StringEscapeType();
1566
+ if (strict_ && state == lexer_type::OCTAL) {
1520
1567
  RAISE("octal excape sequence not allowed in strict code");
1521
1568
  }
1522
- if (state == Lexer::NONE) {
1569
+ if (state == lexer_type::NONE) {
1523
1570
  result = factory_->NewDirectivable(lexer_.Buffer());
1524
1571
  } else {
1525
1572
  result = factory_->NewStringLiteral(lexer_.Buffer());
@@ -1551,7 +1598,7 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1551
1598
  break;
1552
1599
 
1553
1600
  default:
1554
- RAISE("invalid primary expression token");
1601
+ UNEXPECT(token_);
1555
1602
  break;
1556
1603
  }
1557
1604
  return result;
@@ -1564,11 +1611,11 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1564
1611
  // ArgumentList
1565
1612
  // : AssignmentExpression
1566
1613
  // | ArgumentList ',' AssignmentExpression
1567
- Call* ParseArguments(Call* func, bool *res) {
1568
- Expression* expr;
1614
+ template<typename Callable>
1615
+ Callable* ParseArguments(Callable* func, bool *res) {
1569
1616
  Next();
1570
1617
  while (token_ != Token::RPAREN) {
1571
- expr = ParseAssignmentExpression(true, CHECK);
1618
+ Expression* const expr = ParseAssignmentExpression(true, CHECK);
1572
1619
  func->AddArgument(expr);
1573
1620
  if (token_ != Token::RPAREN) {
1574
1621
  EXPECT(Token::COMMA);
@@ -1580,15 +1627,14 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1580
1627
 
1581
1628
  Expression* ParseRegExpLiteral(bool contains_eq, bool *res) {
1582
1629
  if (lexer_.ScanRegExpLiteral(contains_eq)) {
1583
- RegExpLiteral* expr;
1584
1630
  const std::vector<uc16> content(lexer_.Buffer());
1585
1631
  if (!lexer_.ScanRegExpFlags()) {
1586
1632
  RAISE("invalid regular expression flag");
1587
- } else {
1588
- expr = factory_->NewRegExpLiteral(content, lexer_.Buffer());
1589
- if (!expr) {
1590
- RAISE("invalid regular expression");
1591
- }
1633
+ }
1634
+ RegExpLiteral* const expr =
1635
+ factory_->NewRegExpLiteral(content, lexer_.Buffer());
1636
+ if (!expr) {
1637
+ RAISE("invalid regular expression");
1592
1638
  }
1593
1639
  Next();
1594
1640
  return expr;
@@ -1662,12 +1708,12 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1662
1708
  Identifier* ident;
1663
1709
 
1664
1710
  // IDENTIFIERNAME
1665
- Next(Lexer::kIgnoreReservedWordsAndIdentifyGetterOrSetter);
1711
+ Next<IgnoreReservedWordsAndIdentifyGetterOrSetter>();
1666
1712
  while (token_ != Token::RBRACE) {
1667
1713
  if (token_ == Token::GET || token_ == Token::SET) {
1668
1714
  const bool is_get = token_ == Token::GET;
1669
1715
  // this is getter or setter or usual prop
1670
- Next(Lexer::kIgnoreReservedWords); // IDENTIFIERNAME
1716
+ Next<IgnoreReservedWords>(); // IDENTIFIERNAME
1671
1717
  if (token_ == Token::COLON) {
1672
1718
  // property
1673
1719
  ident = ParseIdentifier(
@@ -1720,13 +1766,17 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1720
1766
  it->second |= type;
1721
1767
  }
1722
1768
  } else {
1723
- RAISE("invalid property name");
1769
+ RAISE_RECOVERVABLE("invalid property name");
1724
1770
  }
1725
1771
  }
1726
1772
  } else if (token_ == Token::IDENTIFIER ||
1727
1773
  token_ == Token::STRING ||
1728
1774
  token_ == Token::NUMBER) {
1729
- ident = ParseIdentifier(lexer_.Buffer());
1775
+ if (token_ == Token::NUMBER) {
1776
+ ident = ParseIdentifier(lexer_.Buffer8());
1777
+ } else {
1778
+ ident = ParseIdentifier(lexer_.Buffer());
1779
+ }
1730
1780
  EXPECT(Token::COLON);
1731
1781
  expr = ParseAssignmentExpression(true, CHECK);
1732
1782
  object->AddDataProperty(ident, expr);
@@ -1745,13 +1795,13 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1745
1795
  }
1746
1796
  }
1747
1797
  } else {
1748
- RAISE("invalid property name");
1798
+ RAISE_RECOVERVABLE("invalid property name");
1749
1799
  }
1750
1800
 
1751
1801
  if (token_ != Token::RBRACE) {
1752
1802
  IS(Token::COMMA);
1753
1803
  // IDENTIFIERNAME
1754
- Next(Lexer::kIgnoreReservedWordsAndIdentifyGetterOrSetter);
1804
+ Next<IgnoreReservedWordsAndIdentifyGetterOrSetter>();
1755
1805
  }
1756
1806
  }
1757
1807
  Next();
@@ -1797,7 +1847,8 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1797
1847
  }
1798
1848
 
1799
1849
  const ScopeSwitcher switcher(this, literal->scope());
1800
- literal->set_start_position(lexer_.pos() - 2);
1850
+ const TargetScope scope(this);
1851
+ literal->set_start_position(lexer_.begin_position());
1801
1852
 
1802
1853
  // '(' FormalParameterList_opt ')'
1803
1854
  EXPECT(Token::LPAREN);
@@ -1886,8 +1937,7 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
1886
1937
  break;
1887
1938
  }
1888
1939
  }
1889
- literal->set_end_position(lexer_.pos() - 2);
1890
- literal->SubStringSource(lexer_.source());
1940
+ literal->set_end_position(lexer_.end_position());
1891
1941
  Next();
1892
1942
  return literal;
1893
1943
  }
@@ -2028,12 +2078,15 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
2028
2078
  UNEXPECT(token_);
2029
2079
  }
2030
2080
 
2031
- inline Lexer& lexer() {
2081
+ inline lexer_type& lexer() {
2032
2082
  return lexer_;
2033
2083
  }
2034
- inline Token::Type Next(Lexer::LexType type = Lexer::kIdentifyReservedWords) {
2035
- return token_ = lexer_.Next(
2036
- type | (strict_ ? Lexer::kStrict : Lexer::kClear));
2084
+ template<typename LexType>
2085
+ inline Token::Type Next() {
2086
+ return token_ = lexer_.Next<LexType>(strict_);
2087
+ }
2088
+ inline Token::Type Next() {
2089
+ return token_ = lexer_.Next<IdentifyReservedWords>(strict_);
2037
2090
  }
2038
2091
  inline Token::Type Peek() const {
2039
2092
  return token_;
@@ -2068,6 +2121,9 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
2068
2121
  inline void set_strict(bool strict) {
2069
2122
  strict_ = strict;
2070
2123
  }
2124
+ inline bool RecoverableError() const {
2125
+ return (!(error_state_ & kNotRecoverable)) && token_ == Token::EOS;
2126
+ }
2071
2127
 
2072
2128
  protected:
2073
2129
  class ScopeSwitcher : private Noncopyable<ScopeSwitcher>::type {
@@ -2137,10 +2193,11 @@ class Parser : private Noncopyable<Parser<Factory> >::type {
2137
2193
  }
2138
2194
  }
2139
2195
 
2140
- Lexer lexer_;
2196
+ lexer_type lexer_;
2141
2197
  Token::Type token_;
2142
2198
  std::string error_;
2143
2199
  bool strict_;
2200
+ int error_state_;
2144
2201
  Factory* factory_;
2145
2202
  Scope* scope_;
2146
2203
  Target* target_;
@@ -83,6 +83,7 @@ class Token {
83
83
  ASSIGN_SHL, // <<=
84
84
  ASSIGN_BIT_AND, // &=
85
85
  ASSIGN_BIT_OR, // |=
86
+ ASSIGN_BIT_XOR, // ^=
86
87
  ASSIGN_LAST, // ASSIGN OP LAST
87
88
 
88
89
  DELETE, // delete
@@ -237,6 +238,7 @@ const char* TokenContents<T>::kContents[Token::NUM_TOKENS] = {
237
238
  "<<=",
238
239
  "&=",
239
240
  "|=",
241
+ "~=",
240
242
  NULL, // ASSIGN OP LAST
241
243
  "delete",
242
244
  "typeof",
@@ -4,8 +4,24 @@
4
4
  #include <iv/ast.h>
5
5
  namespace iv {
6
6
  namespace phonic {
7
-
8
7
  class AstFactory;
8
+ } // namespace iv::phonic
9
+ namespace core {
10
+ namespace ast {
11
+ template<>
12
+ class AstNodeBase<iv::phonic::AstFactory>
13
+ : public Inherit<iv::phonic::AstFactory, kAstNode> {
14
+ public:
15
+ void Location(std::size_t begin, std::size_t end) {
16
+ begin_ = begin;
17
+ end_ = end;
18
+ }
19
+ private:
20
+ std::size_t begin_;
21
+ std::size_t end_;
22
+ };
23
+ } } // namespace iv::core::ast
24
+ namespace phonic {
9
25
  #define V(AST) typedef core::ast::AST<AstFactory> AST;
10
26
  AST_NODE_LIST(V)
11
27
  #undef V
@@ -45,6 +45,14 @@ class Creator : public iv::core::ast::AstVisitor<AstFactory>::const_type {
45
45
  ret_ = hash;
46
46
  }
47
47
 
48
+ void Visit(const FunctionDeclaration* decl) {
49
+ VALUE hash = rb_hash_new();
50
+ rb_hash_aset(hash, SYM("type"), rb_str_new_cstr("FunctionDeclaration"));
51
+ Visit(decl->function());
52
+ rb_hash_aset(hash, SYM("body"), ret_);
53
+ ret_ = hash;
54
+ }
55
+
48
56
  void Visit(const VariableStatement* stmt) {
49
57
  VALUE hash = rb_hash_new();
50
58
  rb_hash_aset(hash, SYM("type"), rb_str_new_cstr("VariableStatement"));
@@ -6,7 +6,7 @@
6
6
  #include <iv/alloc.h>
7
7
  #include <iv/ustringpiece.h>
8
8
  #include "encoding.h"
9
- #include "ast.h"
9
+ #include "ast-fwd.h"
10
10
  namespace iv {
11
11
  namespace phonic {
12
12
 
@@ -77,6 +77,11 @@ class AstFactory : public core::Space<2> {
77
77
  Identifiers(Identifiers::allocator_type(this));
78
78
  }
79
79
 
80
+ template<typename T>
81
+ T** NewPtr() {
82
+ return new (New(sizeof(T*))) T*;
83
+ }
84
+
80
85
  NullLiteral* NewNullLiteral() {
81
86
  return null_instance_;
82
87
  }
@@ -109,6 +114,10 @@ class AstFactory : public core::Space<2> {
109
114
  return new (this) FunctionStatement(func);
110
115
  }
111
116
 
117
+ FunctionDeclaration* NewFunctionDeclaration(FunctionLiteral* func) {
118
+ return new (this) FunctionDeclaration(func);
119
+ }
120
+
112
121
  Block* NewBlock() {
113
122
  return new (this) Block(this);
114
123
  }
@@ -3,10 +3,11 @@
3
3
  #include <ruby.h>
4
4
  #include <iv/parser.h>
5
5
  #include "factory.h"
6
+ #include "source.h"
6
7
  namespace iv {
7
8
  namespace phonic {
8
9
 
9
- typedef core::Parser<AstFactory> Parser;
10
+ typedef core::Parser<AstFactory, UTF16Source> Parser;
10
11
 
11
12
  } } // namespace iv::phonic
12
13
  #endif // _IV_PHONIC_PARSER_H_
@@ -2,7 +2,6 @@
2
2
  #define _IV_PHONIC_RPARSER_H_
3
3
  #include <cstdlib>
4
4
  #include <cstring>
5
- #include <tr1/type_traits>
6
5
  #include <ruby.h>
7
6
  #include <ruby/encoding.h>
8
7
  #include <ruby/intern.h>
@@ -27,10 +26,10 @@ class RParser {
27
26
  0,
28
27
  Qnil);
29
28
  const char* str = StringValuePtr(encoded_rb_str);
30
- std::size_t len = RSTRING_LEN(encoded_rb_str);
29
+ const std::size_t len = RSTRING_LEN(encoded_rb_str);
31
30
  UTF16Source source(str, len);
32
- Parser parser(&source, &factory);
33
- FunctionLiteral* global = parser.ParseProgram();
31
+ Parser parser(&factory, &source);
32
+ const FunctionLiteral* global = parser.ParseProgram();
34
33
  if (!global) {
35
34
  rb_raise(cParseError, "%s", parser.error().c_str());
36
35
  } else {
@@ -5,7 +5,6 @@
5
5
  #include <string>
6
6
  #include <tr1/cstdint>
7
7
  #include <ruby.h>
8
- #include <iv/source.h>
9
8
  #include <iv/stringpiece.h>
10
9
  #include <iv/ustring.h>
11
10
  #include <iv/none.h>
@@ -25,7 +24,7 @@ const std::string FilenameData<T>::kFilename = "<anonymous>";
25
24
 
26
25
  typedef detail::FilenameData<core::None> FilenameData;
27
26
 
28
- class AsciiSource : public core::BasicSource {
27
+ class AsciiSource {
29
28
  public:
30
29
  static const int kEOS = -1;
31
30
  explicit AsciiSource(const char* str)
@@ -52,7 +51,7 @@ class AsciiSource : public core::BasicSource {
52
51
  std::string source_;
53
52
  };
54
53
 
55
- class UTF16Source : public core::BasicSource {
54
+ class UTF16Source {
56
55
  public:
57
56
  static const int kEOS = -1;
58
57
  explicit UTF16Source(const char* str, std::size_t len)
@@ -82,7 +81,7 @@ class UTF16Source : public core::BasicSource {
82
81
  std::size_t size_;
83
82
  };
84
83
 
85
- class UTF16LESource : public core::BasicSource {
84
+ class UTF16LESource {
86
85
  public:
87
86
  static const int kEOS = -1;
88
87
  explicit UTF16LESource(const char* str, std::size_t len)
@@ -112,7 +111,7 @@ class UTF16LESource : public core::BasicSource {
112
111
  std::size_t size_;
113
112
  };
114
113
 
115
- class UTF16BESource : public core::BasicSource {
114
+ class UTF16BESource {
116
115
  public:
117
116
  static const int kEOS = -1;
118
117
  explicit UTF16BESource(const char* str, std::size_t len)
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Constellation
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-10 00:00:00 +09:00
17
+ date: 2010-11-28 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -93,8 +93,8 @@ files:
93
93
  - ext/include/iv/ast-visitor.h
94
94
  - ext/include/iv/token.h
95
95
  - ext/include/iv/enable_if.h
96
- - ext/include/iv/source.h
97
96
  - ext/include/iv/any.h
97
+ - ext/include/iv/keyword.h
98
98
  - ext/include/iv/cmdline.h
99
99
  - ext/include/iv/xorshift.h
100
100
  - ext/include/iv/location.h
@@ -103,14 +103,13 @@ files:
103
103
  - ext/include/iv/ustring.h
104
104
  - ext/include/iv/ast-fwd.h
105
105
  - ext/include/iv/utils.h
106
+ - ext/include/iv/ast-info.h
106
107
  - ext/include/iv/alloc.h
107
108
  - ext/include/iv/chars.h
108
109
  - ext/include/iv/fixedcontainer.h
109
110
  - ext/include/iv/ustringpiece.h
110
111
  - ext/include/iv/ast-serializer.h
111
112
  - ext/include/iv/ucdata.h
112
- - ext/iv/phonic/rnode.h
113
- - ext/iv/phonic/ast.h
114
113
  - ext/iv/phonic/factory.h
115
114
  - ext/iv/phonic/parser.h
116
115
  - ext/iv/phonic/encoding.h
@@ -1,27 +0,0 @@
1
- #ifndef _IV_SOURCE_H_
2
- #define _IV_SOURCE_H_
3
- #include <cstddef>
4
- #include <cassert>
5
- #include <string>
6
- #include "ustring.h"
7
- #include "ustringpiece.h"
8
-
9
- namespace iv {
10
- namespace core {
11
-
12
- class BasicSource {
13
- public:
14
- static const int kEOS = -1;
15
- virtual ~BasicSource() = 0;
16
-
17
- virtual uc16 Get(std::size_t pos) const = 0;
18
- virtual std::size_t size() const = 0;
19
- virtual const std::string& filename() const = 0;
20
- virtual UStringPiece SubString(std::size_t n,
21
- std::size_t len = std::string::npos) const = 0;
22
- };
23
-
24
- inline BasicSource::~BasicSource() { }
25
-
26
- } } // namespace iv::core
27
- #endif // _IV_SOURCE_H_
data/ext/iv/phonic/ast.h DELETED
@@ -1,10 +0,0 @@
1
- #ifndef _IV_PHONIC_AST_H_
2
- #define _IV_PHONIC_AST_H_
3
- #include <ruby.h>
4
- #include <iv/ast.h>
5
- #include "ast-fwd.h"
6
- namespace iv {
7
- namespace phonic {
8
-
9
- } } // namespace iv::phonic
10
- #endif // _IV_PHONIC_AST_H_
@@ -1,15 +0,0 @@
1
- #ifndef _IV_PHONIC_RNODE_H_
2
- #define _IV_PHONIC_RNODE_H_
3
- #include <cstdlib>
4
- #include <cstring>
5
- #include <tr1/type_traits>
6
- #include <ruby.h>
7
- #include <ruby/encoding.h>
8
- #include <ruby/intern.h>
9
- #include <iv/ast.h>
10
- #include <iv/static_assert.h>
11
- namespace iv {
12
- namespace phonic {
13
-
14
- } } // namespace iv::phonic
15
- #endif // _IV_PHONIC_RNODE_H_