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.
- data/Manifest.txt +2 -3
- data/Rakefile +1 -1
- data/ext/include/iv/alloc.h +11 -4
- data/ext/include/iv/ast-factory.h +15 -6
- data/ext/include/iv/ast-fwd.h +2 -0
- data/ext/include/iv/ast-info.h +21 -0
- data/ext/include/iv/ast-serializer.h +6 -0
- data/ext/include/iv/ast-visitor.h +1 -0
- data/ext/include/iv/ast.h +522 -105
- data/ext/include/iv/conversions.h +79 -11
- data/ext/include/iv/keyword.h +460 -0
- data/ext/include/iv/lexer.h +77 -464
- data/ext/include/iv/location.h +6 -0
- data/ext/include/iv/parser.h +100 -43
- data/ext/include/iv/token.h +2 -0
- data/ext/iv/phonic/ast-fwd.h +17 -1
- data/ext/iv/phonic/creator.h +8 -0
- data/ext/iv/phonic/factory.h +10 -1
- data/ext/iv/phonic/parser.h +2 -1
- data/ext/iv/phonic/rparser.h +3 -4
- data/ext/iv/phonic/source.h +4 -5
- metadata +5 -6
- data/ext/include/iv/source.h +0 -27
- data/ext/iv/phonic/ast.h +0 -10
- data/ext/iv/phonic/rnode.h +0 -15
data/Manifest.txt
CHANGED
@@ -20,8 +20,8 @@ ext/include/iv/errors.h
|
|
20
20
|
ext/include/iv/ast-visitor.h
|
21
21
|
ext/include/iv/token.h
|
22
22
|
ext/include/iv/enable_if.h
|
23
|
-
ext/include/iv/source.h
|
24
23
|
ext/include/iv/any.h
|
24
|
+
ext/include/iv/keyword.h
|
25
25
|
ext/include/iv/cmdline.h
|
26
26
|
ext/include/iv/xorshift.h
|
27
27
|
ext/include/iv/location.h
|
@@ -30,14 +30,13 @@ ext/include/iv/algorithm.h
|
|
30
30
|
ext/include/iv/ustring.h
|
31
31
|
ext/include/iv/ast-fwd.h
|
32
32
|
ext/include/iv/utils.h
|
33
|
+
ext/include/iv/ast-info.h
|
33
34
|
ext/include/iv/alloc.h
|
34
35
|
ext/include/iv/chars.h
|
35
36
|
ext/include/iv/fixedcontainer.h
|
36
37
|
ext/include/iv/ustringpiece.h
|
37
38
|
ext/include/iv/ast-serializer.h
|
38
39
|
ext/include/iv/ucdata.h
|
39
|
-
ext/iv/phonic/rnode.h
|
40
|
-
ext/iv/phonic/ast.h
|
41
40
|
ext/iv/phonic/factory.h
|
42
41
|
ext/iv/phonic/parser.h
|
43
42
|
ext/iv/phonic/encoding.h
|
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.5'
|
14
14
|
self.readme_file = 'README.rdoc'
|
15
15
|
self.history_file = 'ChangeLog'
|
16
16
|
self.extra_rdoc_files = FileList['*.rdoc']
|
data/ext/include/iv/alloc.h
CHANGED
@@ -117,12 +117,11 @@ class Space {
|
|
117
117
|
: arena_(&init_arenas_[0]),
|
118
118
|
start_malloced_(NULL),
|
119
119
|
malloced_() {
|
120
|
-
|
121
|
-
for (; c < kInitArenas-1; ++c) {
|
120
|
+
for (std::size_t c = 0; c < N-1; ++c) {
|
122
121
|
init_arenas_[c].SetNext(&init_arenas_[c+1]);
|
123
122
|
}
|
124
123
|
}
|
125
|
-
|
124
|
+
~Space() {
|
126
125
|
if (start_malloced_) {
|
127
126
|
Arena *now = start_malloced_, *next = start_malloced_;
|
128
127
|
while (now) {
|
@@ -161,7 +160,7 @@ class Space {
|
|
161
160
|
}
|
162
161
|
}
|
163
162
|
|
164
|
-
|
163
|
+
inline void Clear() {
|
165
164
|
arena_ = init_arenas_;
|
166
165
|
std::for_each(malloced_.begin(), malloced_.end(), &Malloced::Delete);
|
167
166
|
malloced_.clear();
|
@@ -196,5 +195,13 @@ class Space {
|
|
196
195
|
std::vector<void*>malloced_;
|
197
196
|
};
|
198
197
|
|
198
|
+
// surpress compiler warning
|
199
|
+
template<>
|
200
|
+
inline Space<1>::Space()
|
201
|
+
: arena_(&init_arenas_[0]),
|
202
|
+
start_malloced_(NULL),
|
203
|
+
malloced_() {
|
204
|
+
}
|
205
|
+
|
199
206
|
} } // namespace iv::core
|
200
207
|
#endif // _IV_ALLOC_H_
|
@@ -12,10 +12,10 @@ namespace iv {
|
|
12
12
|
namespace core {
|
13
13
|
namespace ast {
|
14
14
|
|
15
|
-
template<
|
16
|
-
class BasicAstFactory
|
15
|
+
template<typename Factory>
|
16
|
+
class BasicAstFactory {
|
17
17
|
public:
|
18
|
-
typedef BasicAstFactory<
|
18
|
+
typedef BasicAstFactory<Factory> this_type;
|
19
19
|
|
20
20
|
#define V(AST) typedef typename ast::AST<Factory> AST;
|
21
21
|
AST_NODE_LIST(V)
|
@@ -28,8 +28,7 @@ class BasicAstFactory : public Space<N> {
|
|
28
28
|
#undef V
|
29
29
|
|
30
30
|
BasicAstFactory()
|
31
|
-
:
|
32
|
-
undefined_instance_(
|
31
|
+
: undefined_instance_(
|
33
32
|
new(static_cast<Factory*>(this))Undefined()),
|
34
33
|
empty_statement_instance_(
|
35
34
|
new(static_cast<Factory*>(this))EmptyStatement()),
|
@@ -90,8 +89,14 @@ class BasicAstFactory : public Space<N> {
|
|
90
89
|
ObjectLiteral(static_cast<Factory*>(this));
|
91
90
|
}
|
92
91
|
|
92
|
+
template<typename T>
|
93
|
+
T** NewPtr() {
|
94
|
+
return new (static_cast<Factory*>(this)->New(sizeof(T*))) T*(NULL);
|
95
|
+
}
|
96
|
+
|
93
97
|
Identifiers* NewLabels() {
|
94
|
-
|
98
|
+
void* place = static_cast<Factory*>(this)->New(sizeof(Identifiers));
|
99
|
+
return new (place)
|
95
100
|
Identifiers(
|
96
101
|
typename Identifiers::allocator_type(static_cast<Factory*>(this)));
|
97
102
|
}
|
@@ -128,6 +133,10 @@ class BasicAstFactory : public Space<N> {
|
|
128
133
|
return new (static_cast<Factory*>(this)) FunctionStatement(func);
|
129
134
|
}
|
130
135
|
|
136
|
+
FunctionDeclaration* NewFunctionDeclaration(FunctionLiteral* func) {
|
137
|
+
return new (static_cast<Factory*>(this)) FunctionDeclaration(func);
|
138
|
+
}
|
139
|
+
|
131
140
|
Block* NewBlock() {
|
132
141
|
return new (static_cast<Factory*>(this)) Block(static_cast<Factory*>(this));
|
133
142
|
}
|
data/ext/include/iv/ast-fwd.h
CHANGED
@@ -24,6 +24,7 @@ V(SwitchStatement)\
|
|
24
24
|
V(ThrowStatement)\
|
25
25
|
V(TryStatement)\
|
26
26
|
V(LabelledStatement)\
|
27
|
+
V(FunctionDeclaration)
|
27
28
|
|
28
29
|
#define STATEMENT_NODE_LIST(V)\
|
29
30
|
V(Statement)\
|
@@ -98,5 +99,6 @@ template<typename Factory>\
|
|
98
99
|
class AST;
|
99
100
|
AST_NODE_LIST(V)
|
100
101
|
#undef V
|
102
|
+
|
101
103
|
} } } // namespace iv::core::ast
|
102
104
|
#endif // _IV_AST_FWD_H_
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#ifndef _IV_AST_INFO_H_
|
2
|
+
#define _IV_AST_INFO_H_
|
3
|
+
#include "ast.h"
|
4
|
+
#include "space.h"
|
5
|
+
namespace iv {
|
6
|
+
namespace core {
|
7
|
+
namespace ast {
|
8
|
+
template<typename Factory>
|
9
|
+
struct AstInfo {
|
10
|
+
#define V(AST) typedef typename AST<Factory> AST;
|
11
|
+
AST_NODE_LIST(V)
|
12
|
+
#undef V
|
13
|
+
#define V(X, XS) typedef typename SpaceVector<Factory, X *>::type XS;
|
14
|
+
AST_LIST_LIST(V)
|
15
|
+
#undef V
|
16
|
+
#define V(S) typedef typename SpaceUString<Factory>::type S;
|
17
|
+
AST_STRING(V)
|
18
|
+
#undef V
|
19
|
+
};
|
20
|
+
} } } // namespace iv::core::ast
|
21
|
+
#endif // _IV_AST_INFO_H_
|
@@ -71,6 +71,12 @@ class AstSerializer: public AstVisitor<Factory>::const_type {
|
|
71
71
|
Append('}');
|
72
72
|
}
|
73
73
|
|
74
|
+
void Visit(const FunctionDeclaration* func) {
|
75
|
+
Append("{\"type\":\"function_declaration\",\"def\":");
|
76
|
+
func->function()->Accept(this);
|
77
|
+
Append('}');
|
78
|
+
}
|
79
|
+
|
74
80
|
void Visit(const VariableStatement* var) {
|
75
81
|
Append("{\"type\":");
|
76
82
|
if (var->IsConst()) {
|
@@ -39,6 +39,7 @@ class BasicAstVisitor
|
|
39
39
|
virtual ~BasicAstVisitor() = 0;
|
40
40
|
virtual void Visit(typename add<Block<Factory> >::type block) = 0; //NOLINT
|
41
41
|
virtual void Visit(typename add<FunctionStatement<Factory> >::type func) = 0; //NOLINT
|
42
|
+
virtual void Visit(typename add<FunctionDeclaration<Factory> >::type func) = 0; //NOLINT
|
42
43
|
virtual void Visit(typename add<VariableStatement<Factory> >::type var) = 0; //NOLINT
|
43
44
|
virtual void Visit(typename add<EmptyStatement<Factory> >::type empty) = 0; //NOLINT
|
44
45
|
virtual void Visit(typename add<IfStatement<Factory> >::type ifstmt) = 0; //NOLINT
|