erbal 1.2.rc3 → 1.2.rc4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -2
- data/ext/erbal/erbal.c +20 -0
- data/ext/erbal/parser.c +12 -30
- data/ext/erbal/parser.h +1 -1
- data/ext/erbal/parser.rl +1 -19
- data/tasks/gem.rake +1 -1
- metadata +7 -6
data/README.rdoc
CHANGED
@@ -67,7 +67,7 @@ Erubis: 2.6.6
|
|
67
67
|
|
68
68
|
Erbal: 1.1
|
69
69
|
|
70
|
-
|
70
|
+
<b>Parsing Benchmark</b>
|
71
71
|
|
72
72
|
=> Erb
|
73
73
|
0.851 0.853 0.848 0.847 0.849 0.847
|
@@ -85,7 +85,7 @@ Erbal: 1.1
|
|
85
85
|
0.036 0.039 0.066 0.038 0.067 0.039
|
86
86
|
=> Average: 0.047
|
87
87
|
|
88
|
-
|
88
|
+
<b>eval() Benchmark</b>
|
89
89
|
|
90
90
|
=> Erb
|
91
91
|
0.203 0.192 0.180 0.180 0.179 0.191
|
data/ext/erbal/erbal.c
CHANGED
@@ -10,6 +10,7 @@ void rb_erbal_free(erbal_parser *parser) {
|
|
10
10
|
void rb_erbal_mark(erbal_parser *parser) {
|
11
11
|
rb_gc_mark_maybe(parser->str);
|
12
12
|
rb_gc_mark_maybe(parser->src);
|
13
|
+
rb_gc_mark_maybe(parser->initial_src);
|
13
14
|
rb_gc_mark_maybe(parser->buffer_name);
|
14
15
|
rb_gc_mark_maybe(parser->options);
|
15
16
|
rb_gc_mark_maybe(parser->safe_concat_method);
|
@@ -65,6 +66,25 @@ VALUE rb_erbal_initialize(int argc, VALUE *argv, VALUE self) {
|
|
65
66
|
rb_erbal_setup_option(self, parser, &parser->unsafe_concat_method, "unsafe_concat_method", "concat");
|
66
67
|
rb_erbal_setup_option(self, parser, &parser->safe_concat_keyword, "safe_concat_keyword", "");
|
67
68
|
|
69
|
+
if (strcmp(RSTRING(parser->safe_concat_method)->ptr, RSTRING(parser->unsafe_concat_method)->ptr) == 0) {
|
70
|
+
parser->concat_methods_identical = 1;
|
71
|
+
} else {
|
72
|
+
parser->concat_methods_identical = 0;
|
73
|
+
}
|
74
|
+
|
75
|
+
parser->initial_src = rb_str_dup(parser->buffer_name);
|
76
|
+
|
77
|
+
VALUE buffer_init_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer_initial_value")));
|
78
|
+
|
79
|
+
if (!NIL_P(buffer_init_val)) {
|
80
|
+
Check_Type(buffer_init_val, T_STRING);
|
81
|
+
rb_str_buf_cat(parser->initial_src, " = ", 3);
|
82
|
+
rb_str_concat(parser->initial_src, buffer_init_val);
|
83
|
+
rb_str_buf_cat(parser->initial_src, ";", 1);
|
84
|
+
} else {
|
85
|
+
rb_str_buf_cat(parser->initial_src, " = '';", 6);
|
86
|
+
}
|
87
|
+
|
68
88
|
return self;
|
69
89
|
}
|
70
90
|
|
data/ext/erbal/parser.c
CHANGED
@@ -218,28 +218,10 @@ void erbal_parser_init(VALUE self, erbal_parser *parser) {
|
|
218
218
|
parser->state->chars_seen = 0;
|
219
219
|
parser->state->concat = OUTSIDE_CONCAT;
|
220
220
|
parser->state->tag = OUTSIDE_TAG;
|
221
|
-
|
222
|
-
if (strcmp(RSTRING(parser->safe_concat_method)->ptr, RSTRING(parser->unsafe_concat_method)->ptr) == 0) {
|
223
|
-
parser->concat_methods_identical = 1;
|
224
|
-
} else {
|
225
|
-
parser->concat_methods_identical = 0;
|
226
|
-
}
|
227
|
-
|
228
|
-
parser->src = rb_str_dup(parser->buffer_name);
|
229
|
-
|
230
|
-
VALUE buffer_init_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer_initial_value")));
|
231
|
-
|
232
|
-
if (!NIL_P(buffer_init_val)) {
|
233
|
-
Check_Type(buffer_init_val, T_STRING);
|
234
|
-
rb_str_buf_cat(parser->src, " = ", 3);
|
235
|
-
rb_str_concat(parser->src, buffer_init_val);
|
236
|
-
rb_str_buf_cat(parser->src, ";", 1);
|
237
|
-
} else {
|
238
|
-
rb_str_buf_cat(parser->src, " = '';", 6);
|
239
|
-
}
|
221
|
+
parser->src = rb_str_dup(parser->initial_src);
|
240
222
|
|
241
223
|
|
242
|
-
#line
|
224
|
+
#line 225 "parser.c"
|
243
225
|
{
|
244
226
|
cs = erbal_parser_start;
|
245
227
|
ts = 0;
|
@@ -247,14 +229,14 @@ void erbal_parser_init(VALUE self, erbal_parser *parser) {
|
|
247
229
|
act = 0;
|
248
230
|
}
|
249
231
|
|
250
|
-
#line
|
232
|
+
#line 238 "parser.rl"
|
251
233
|
}
|
252
234
|
|
253
235
|
void erbal_parser_exec(erbal_parser *parser) {
|
254
236
|
p = RSTRING(parser->str)->ptr;
|
255
237
|
pe = p + strlen(p);
|
256
238
|
|
257
|
-
#line
|
239
|
+
#line 240 "parser.c"
|
258
240
|
{
|
259
241
|
if ( p == pe )
|
260
242
|
goto _test_eof;
|
@@ -314,7 +296,7 @@ st4:
|
|
314
296
|
case 4:
|
315
297
|
#line 1 "NONE"
|
316
298
|
{ts = p;}
|
317
|
-
#line
|
299
|
+
#line 300 "parser.c"
|
318
300
|
switch( (*p) ) {
|
319
301
|
case 37: goto st5;
|
320
302
|
case 45: goto tr10;
|
@@ -336,7 +318,7 @@ st6:
|
|
336
318
|
if ( ++p == pe )
|
337
319
|
goto _test_eof6;
|
338
320
|
case 6:
|
339
|
-
#line
|
321
|
+
#line 322 "parser.c"
|
340
322
|
if ( (*p) == 37 )
|
341
323
|
goto st0;
|
342
324
|
goto tr12;
|
@@ -372,7 +354,7 @@ st9:
|
|
372
354
|
if ( ++p == pe )
|
373
355
|
goto _test_eof9;
|
374
356
|
case 9:
|
375
|
-
#line
|
357
|
+
#line 358 "parser.c"
|
376
358
|
switch( (*p) ) {
|
377
359
|
case 32: goto tr21;
|
378
360
|
case 33: goto tr22;
|
@@ -396,7 +378,7 @@ st1:
|
|
396
378
|
if ( ++p == pe )
|
397
379
|
goto _test_eof1;
|
398
380
|
case 1:
|
399
|
-
#line
|
381
|
+
#line 382 "parser.c"
|
400
382
|
switch( (*p) ) {
|
401
383
|
case 32: goto st1;
|
402
384
|
case 33: goto tr4;
|
@@ -426,7 +408,7 @@ st2:
|
|
426
408
|
if ( ++p == pe )
|
427
409
|
goto _test_eof2;
|
428
410
|
case 2:
|
429
|
-
#line
|
411
|
+
#line 412 "parser.c"
|
430
412
|
if ( (*p) == 32 )
|
431
413
|
goto tr6;
|
432
414
|
goto tr2;
|
@@ -441,7 +423,7 @@ st10:
|
|
441
423
|
if ( ++p == pe )
|
442
424
|
goto _test_eof10;
|
443
425
|
case 10:
|
444
|
-
#line
|
426
|
+
#line 427 "parser.c"
|
445
427
|
if ( (*p) == 32 )
|
446
428
|
goto st10;
|
447
429
|
goto tr24;
|
@@ -459,7 +441,7 @@ st3:
|
|
459
441
|
if ( ++p == pe )
|
460
442
|
goto _test_eof3;
|
461
443
|
case 3:
|
462
|
-
#line
|
444
|
+
#line 445 "parser.c"
|
463
445
|
if ( (*p) == 32 )
|
464
446
|
goto tr6;
|
465
447
|
if ( 97 <= (*p) && (*p) <= 122 )
|
@@ -497,6 +479,6 @@ case 3:
|
|
497
479
|
|
498
480
|
}
|
499
481
|
|
500
|
-
#line
|
482
|
+
#line 244 "parser.rl"
|
501
483
|
erbal_parser_finish(parser);
|
502
484
|
}
|
data/ext/erbal/parser.h
CHANGED
@@ -13,7 +13,7 @@ typedef struct parser_state {
|
|
13
13
|
typedef struct erbal_parser {
|
14
14
|
parser_state *state;
|
15
15
|
unsigned int debug, concat_methods_identical;
|
16
|
-
VALUE str, src, buffer_name, options, safe_concat_method, unsafe_concat_method, keyword, safe_concat_keyword;
|
16
|
+
VALUE str, src, initial_src, buffer_name, options, safe_concat_method, unsafe_concat_method, keyword, safe_concat_keyword;
|
17
17
|
char *keyword_start, *keyword_end, *keyword_trailing_whitespace, *keyword_preceding_whitespace;
|
18
18
|
} erbal_parser;
|
19
19
|
|
data/ext/erbal/parser.rl
CHANGED
@@ -232,25 +232,7 @@ void erbal_parser_init(VALUE self, erbal_parser *parser) {
|
|
232
232
|
parser->state->chars_seen = 0;
|
233
233
|
parser->state->concat = OUTSIDE_CONCAT;
|
234
234
|
parser->state->tag = OUTSIDE_TAG;
|
235
|
-
|
236
|
-
if (strcmp(RSTRING(parser->safe_concat_method)->ptr, RSTRING(parser->unsafe_concat_method)->ptr) == 0) {
|
237
|
-
parser->concat_methods_identical = 1;
|
238
|
-
} else {
|
239
|
-
parser->concat_methods_identical = 0;
|
240
|
-
}
|
241
|
-
|
242
|
-
parser->src = rb_str_dup(parser->buffer_name);
|
243
|
-
|
244
|
-
VALUE buffer_init_val = rb_hash_aref(parser->options, ID2SYM(rb_intern("buffer_initial_value")));
|
245
|
-
|
246
|
-
if (!NIL_P(buffer_init_val)) {
|
247
|
-
Check_Type(buffer_init_val, T_STRING);
|
248
|
-
rb_str_buf_cat(parser->src, " = ", 3);
|
249
|
-
rb_str_concat(parser->src, buffer_init_val);
|
250
|
-
rb_str_buf_cat(parser->src, ";", 1);
|
251
|
-
} else {
|
252
|
-
rb_str_buf_cat(parser->src, " = '';", 6);
|
253
|
-
}
|
235
|
+
parser->src = rb_str_dup(parser->initial_src);
|
254
236
|
|
255
237
|
%% write init;
|
256
238
|
}
|
data/tasks/gem.rake
CHANGED
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erbal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 15424237
|
5
|
+
prerelease: 4
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
|
9
|
+
- rc
|
10
|
+
- 4
|
11
|
+
version: 1.2.rc4
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Ian Leitch
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2011-01-
|
19
|
+
date: 2011-01-10 00:00:00 +11:00
|
19
20
|
default_executable:
|
20
21
|
dependencies: []
|
21
22
|
|
@@ -78,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
79
|
requirements: []
|
79
80
|
|
80
81
|
rubyforge_project:
|
81
|
-
rubygems_version: 1.
|
82
|
+
rubygems_version: 1.4.2
|
82
83
|
signing_key:
|
83
84
|
specification_version: 3
|
84
85
|
summary: Very small, very fast Ragel/C based ERB parser
|