@@ -27,11 +27,6 @@ tag file_type {
27
27
28
28
type ty_or_bang = util:: common:: ty_or_bang[ @ast:: ty ] ;
29
29
30
- // Temporary: to introduce a tag in order to make a recursive type work
31
- tag syntax_extension {
32
- x( syntax_expander) ;
33
- }
34
-
35
30
state type parser =
36
31
state obj {
37
32
fn peek( ) -> token:: token;
@@ -53,15 +48,12 @@ state type parser =
53
48
fn get_reader ( ) -> lexer:: reader ;
54
49
fn get_filemap ( ) -> codemap:: filemap ;
55
50
fn get_bad_expr_words ( ) -> hashmap [ str, ( ) ] ;
56
- fn get_syntax_expanders ( ) -> hashmap [ str, syntax_extension] ;
51
+ fn get_syntax_expanders ( ) -> hashmap [ str, ext :: syntax_extension] ;
57
52
fn get_chpos ( ) -> uint ;
58
53
fn get_ann ( ) -> ast:: ann ;
59
54
fn next_ann_num ( ) -> uint ;
60
55
} ;
61
56
62
- type syntax_expander = fn ( & parser , common:: span , & vec[ @ast:: expr] ,
63
- option:: t[ str ] ) -> @ast:: expr ;
64
-
65
57
fn new_parser ( session:: session sess,
66
58
eval:: env env,
67
59
ast:: def_id initial_def ,
@@ -80,7 +72,8 @@ fn new_parser(session::session sess,
80
72
vec[ op_spec] precs,
81
73
mutable uint next_ann_var,
82
74
hashmap[ str, ( ) ] bad_words,
83
- hashmap[ str, syntax_extension] syntax_expanders)
75
+ hashmap[ str, ext:: syntax_extension]
76
+ syntax_expanders)
84
77
{
85
78
fn peek ( ) -> token:: token {
86
79
ret tok;
@@ -153,7 +146,7 @@ fn new_parser(session::session sess,
153
146
ret bad_words;
154
147
}
155
148
156
- fn get_syntax_expanders ( ) -> hashmap [ str, syntax_extension] {
149
+ fn get_syntax_expanders ( ) -> hashmap [ str, ext :: syntax_extension] {
157
150
ret syntax_expanders;
158
151
}
159
152
@@ -183,7 +176,7 @@ fn new_parser(session::session sess,
183
176
ret stdio_parser ( sess, env, ftype, lexer:: next_token ( rdr) ,
184
177
npos, npos, npos, initial_def. _1 , UNRESTRICTED ,
185
178
initial_def. _0 , rdr, prec_table ( ) , next_ann,
186
- bad_expr_word_table ( ) , syntax_expander_table ( ) ) ;
179
+ bad_expr_word_table ( ) , ext :: syntax_expander_table ( ) ) ;
187
180
}
188
181
189
182
// These are the words that shouldn't be allowed as value identifiers,
@@ -227,13 +220,6 @@ fn bad_expr_word_table() -> hashmap[str, ()] {
227
220
ret words;
228
221
}
229
222
230
- fn syntax_expander_table ( ) -> hashmap [ str, syntax_extension] {
231
- auto syntax_expanders = new_str_hash[ syntax_extension] ( ) ;
232
- syntax_expanders. insert ( "fmt" , x ( extfmt:: expand_syntax_ext) ) ;
233
- syntax_expanders. insert ( "env" , x ( extenv:: expand_syntax_ext) ) ;
234
- ret syntax_expanders;
235
- }
236
-
237
223
fn unexpected ( & parser p, token:: token t) -> ! {
238
224
let str s = "unexpected token: " ;
239
225
s += token:: to_str ( p. get_reader ( ) , t) ;
@@ -1060,11 +1046,13 @@ fn expand_syntax_ext(&parser p, common::span sp,
1060
1046
auto extname = path. node . idents . ( 0 ) ;
1061
1047
1062
1048
alt ( p. get_syntax_expanders ( ) . find ( extname) ) {
1063
- case ( none[ syntax_extension ] ) {
1049
+ case ( none) {
1064
1050
p. err ( "unknown syntax expander: '" + extname + "'" ) ;
1065
1051
}
1066
- case ( some[ syntax_extension] ( x ( ?ext) ) ) {
1067
- ret ast:: expr_ext ( path, args, body, ext ( p, sp, args, body) ,
1052
+ case ( some ( ext:: x ( ?ext) ) ) {
1053
+ auto ext_cx = ext:: mk_ctxt ( p. get_session ( ) ) ;
1054
+ ret ast:: expr_ext ( path, args, body,
1055
+ ext ( ext_cx, p, sp, args, body) ,
1068
1056
p. get_ann ( ) ) ;
1069
1057
}
1070
1058
}
0 commit comments