ebb 0.0.4 → 0.1.0

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/src/ebb.h CHANGED
@@ -4,20 +4,16 @@
4
4
  */
5
5
  #ifndef ebb_h
6
6
  #define ebb_h
7
-
7
+ #define EV_STANDALONE 1
8
+ #include <ev.h>
8
9
  #include <sys/socket.h>
9
10
  #include <netinet/in.h>
10
11
  #include <glib.h>
11
-
12
- #define EV_STANDALONE 1
13
- #include <ev.h>
14
-
15
12
  #include "parser.h"
16
13
 
17
-
18
14
  typedef struct ebb_server ebb_server;
19
15
  typedef struct ebb_client ebb_client;
20
-
16
+ #define EBB_VERSION "0.1.0"
21
17
  #define EBB_BUFFERSIZE (1024 * (80 + 33))
22
18
  #define EBB_MAX_CLIENTS 200
23
19
  #define EBB_TIMEOUT 30.0
@@ -29,12 +25,13 @@ typedef struct ebb_client ebb_client;
29
25
 
30
26
  /*** Ebb Client ***/
31
27
  void ebb_client_close(ebb_client*);
28
+ /* user MUST call this function on each client passed by the request_cb */
29
+ void ebb_client_release(ebb_client*);
32
30
  int ebb_client_read(ebb_client *client, char *buffer, int length);
33
31
  void ebb_client_write_status(ebb_client*, int status, const char *human_status);
34
32
  void ebb_client_write_header(ebb_client*, const char *field, const char *value);
35
33
  void ebb_client_write(ebb_client*, const char *data, int length);
36
- void ebb_client_finished( ebb_client *client);
37
-
34
+ void ebb_client_begin_transmission( ebb_client *client);
38
35
 
39
36
  struct ebb_env_item {
40
37
  enum { EBB_FIELD_VALUE_PAIR
@@ -44,7 +41,6 @@ struct ebb_env_item {
44
41
  , EBB_REQUEST_PATH
45
42
  , EBB_QUERY_STRING
46
43
  , EBB_HTTP_VERSION
47
- , EBB_SERVER_NAME
48
44
  , EBB_SERVER_PORT
49
45
  , EBB_CONTENT_LENGTH
50
46
  } type;
@@ -57,10 +53,12 @@ struct ebb_env_item {
57
53
  struct ebb_client {
58
54
  EBB_TCP_COMMON
59
55
 
56
+ unsigned int in_use : 1;
57
+
60
58
  ebb_server *server;
61
59
  http_parser parser;
62
60
 
63
- char request_buffer[EBB_BUFFERSIZE];
61
+ char *request_buffer;
64
62
  ev_io read_watcher;
65
63
  size_t read, nread_from_body;
66
64
 
@@ -75,9 +73,10 @@ struct ebb_client {
75
73
 
76
74
  ev_timer timeout_watcher;
77
75
 
78
- int status_sent;
79
- int headers_sent;
80
- int body_sent;
76
+ unsigned int status_written : 1;
77
+ unsigned int headers_written : 1;
78
+ unsigned int body_written : 1;
79
+ unsigned int began_transmission : 1;
81
80
 
82
81
  /* the ENV structure */
83
82
  int env_size;
@@ -110,4 +109,4 @@ struct ebb_server {
110
109
  ebb_request_cb request_cb;
111
110
  };
112
111
 
113
- #endif
112
+ #endif
@@ -3,12 +3,13 @@
3
3
  * License. See README file for details.
4
4
  */
5
5
  #include <ruby.h>
6
+ #include <rubyio.h>
7
+ #include <rubysig.h>
6
8
  #include <assert.h>
7
9
  #include <fcntl.h>
8
10
  #include <ebb.h>
9
11
  #include <ev.h>
10
12
 
11
- static VALUE cServer;
12
13
  static VALUE cClient;
13
14
  static VALUE global_http_prefix;
14
15
  static VALUE global_request_method;
@@ -18,99 +19,102 @@ static VALUE global_request_path;
18
19
  static VALUE global_query_string;
19
20
  static VALUE global_http_version;
20
21
  static VALUE global_request_body;
21
- static VALUE global_server_name;
22
22
  static VALUE global_server_port;
23
23
  static VALUE global_path_info;
24
24
  static VALUE global_content_length;
25
25
  static VALUE global_http_host;
26
26
 
27
+ /* You don't want to run more than one server per Ruby VM. Really
28
+ * I'm making this explicit by not defining a Ebb::Server class but instead
29
+ * initializing a single server and single event loop on module load.
30
+ */
31
+ static ebb_server *server;
32
+ struct ev_loop *loop;
33
+ struct ev_idle idle_watcher;
34
+
27
35
  /* Variables with a leading underscore are C-level variables */
28
36
 
29
37
  #define ASCII_UPPER(ch) ('a' <= ch && ch <= 'z' ? ch - 'a' + 'A' : ch)
38
+ #ifndef RSTRING_PTR
39
+ # define RSTRING_PTR(s) (RSTRING(s)->ptr)
40
+ # define RSTRING_LEN(s) (RSTRING(s)->len)
41
+ #endif
30
42
 
31
- VALUE client_new(ebb_client *_client)
43
+ static void attach_idle_watcher()
32
44
  {
33
- VALUE client = Data_Wrap_Struct(cClient, 0, 0, _client);
34
- return client;
45
+ if(!ev_is_active(&idle_watcher)) {
46
+ ev_idle_start (loop, &idle_watcher);
47
+ }
35
48
  }
36
49
 
37
50
 
38
- void request_cb(ebb_client *_client, void *data)
51
+ static void detach_idle_watcher()
39
52
  {
40
- VALUE server = (VALUE)data;
41
- VALUE waiting_clients;
42
- VALUE client = client_new(_client);
43
-
44
- waiting_clients = rb_iv_get(server, "@waiting_clients");
45
- rb_ary_push(waiting_clients, client);
53
+ ev_idle_stop(loop, &idle_watcher);
46
54
  }
47
55
 
48
-
49
- VALUE server_alloc(VALUE self)
56
+ static int clients_in_use_p()
50
57
  {
51
- struct ev_loop *loop = ev_default_loop (0);
52
- ebb_server *_server = ebb_server_alloc();
53
- VALUE server = Qnil;
54
- server = Data_Wrap_Struct(cServer, 0, ebb_server_free, _server);
55
- ebb_server_init(_server, loop, request_cb, (void*)server);
56
- return server;
58
+ int i;
59
+ for(i = 0; i < EBB_MAX_CLIENTS; i++)
60
+ if(server->clients[i].in_use) return TRUE;
61
+ return FALSE;
57
62
  }
58
63
 
59
-
60
- VALUE server_listen_on_port(VALUE x, VALUE server, VALUE port)
64
+ void request_cb(ebb_client *client, void *data)
61
65
  {
62
- ebb_server *_server;
63
- Data_Get_Struct(server, ebb_server, _server);
64
- int r = ebb_server_listen_on_port(_server, FIX2INT(port));
65
- return r < 0 ? Qfalse : Qtrue;
66
+ VALUE waiting_clients = (VALUE)data;
67
+ VALUE rb_client = Data_Wrap_Struct(cClient, 0, 0, client);
68
+ rb_ary_push(waiting_clients, rb_client);
69
+ attach_idle_watcher();
66
70
  }
67
71
 
68
-
69
- VALUE server_listen_on_socket(VALUE x, VALUE server, VALUE socketpath)
72
+ VALUE server_listen_on_port(VALUE _, VALUE port)
70
73
  {
71
- ebb_server *_server;
72
- Data_Get_Struct(server, ebb_server, _server);
73
- int r = ebb_server_listen_on_socket(_server, StringValuePtr(socketpath));
74
- return r < 0 ? Qfalse : Qtrue;
74
+ if(ebb_server_listen_on_port(server, FIX2INT(port)) < 0)
75
+ rb_sys_fail("Problem listening on port");
76
+ return Qnil;
75
77
  }
76
78
 
77
-
78
79
  static void
79
- oneshot_timeout (struct ev_loop *loop, struct ev_timer *w, int revents) {;}
80
-
80
+ idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents) {
81
+ if(clients_in_use_p()) {
82
+ rb_thread_schedule();
83
+ } else if(!rb_thread_alone()) {
84
+ /* if you have another long running thread running besides the ones used
85
+ * for the webapp's requests you will run into performance problems in
86
+ * ruby 1.8.x because rb_thread_select is slow.
87
+ * (Don't worry - you're probably not doing this.)
88
+ */
89
+ struct timeval select_timeout = { tv_sec: 0, tv_usec: 50000 };
90
+ fd_set server_fd_set;
91
+ FD_ZERO(&server_fd_set);
92
+ FD_SET(server->fd, &server_fd_set);
93
+ rb_thread_select(server->fd+1, &server_fd_set, 0, 0, &select_timeout);
94
+ } else {
95
+ detach_idle_watcher();
96
+ }
97
+ }
81
98
 
82
- VALUE server_process_connections(VALUE x, VALUE server)
99
+ VALUE server_process_connections(VALUE _)
83
100
  {
84
- ebb_server *_server;
85
- VALUE host, port;
86
-
87
- Data_Get_Struct(server, ebb_server, _server);
88
-
89
- ev_timer timeout;
90
- ev_timer_init (&timeout, oneshot_timeout, 0.5, 0.);
91
- ev_timer_start (_server->loop, &timeout);
92
-
93
- ev_loop(_server->loop, EVLOOP_ONESHOT);
94
- /* XXX: Need way to know when the loop is finished...
95
- * should return true or false */
96
-
97
- ev_timer_stop(_server->loop, &timeout);
98
-
99
- if(_server->open)
100
- return Qtrue;
101
- else
102
- return Qfalse;
101
+ TRAP_BEG;
102
+ ev_loop(loop, EVLOOP_ONESHOT);
103
+ TRAP_END;
104
+ return Qnil;
103
105
  }
104
106
 
105
107
 
106
- VALUE server_unlisten(VALUE x, VALUE server)
108
+ VALUE server_unlisten(VALUE _)
107
109
  {
108
- ebb_server *_server;
109
- Data_Get_Struct(server, ebb_server, _server);
110
- ebb_server_unlisten(_server);
110
+ ebb_server_unlisten(server);
111
111
  return Qnil;
112
112
  }
113
113
 
114
+ VALUE server_open(VALUE _)
115
+ {
116
+ return server->open ? Qtrue : Qfalse;
117
+ }
114
118
 
115
119
  VALUE env_field(struct ebb_env_item *item)
116
120
  {
@@ -134,7 +138,6 @@ VALUE env_field(struct ebb_env_item *item)
134
138
  case EBB_REQUEST_PATH: return global_request_path;
135
139
  case EBB_QUERY_STRING: return global_query_string;
136
140
  case EBB_HTTP_VERSION: return global_http_version;
137
- case EBB_SERVER_NAME: return global_server_name;
138
141
  case EBB_SERVER_PORT: return global_server_port;
139
142
  case EBB_CONTENT_LENGTH: return global_content_length;
140
143
  }
@@ -152,24 +155,26 @@ VALUE env_value(struct ebb_env_item *item)
152
155
  }
153
156
 
154
157
 
155
- VALUE client_env(VALUE x, VALUE client)
158
+ VALUE client_env(VALUE _, VALUE rb_client)
156
159
  {
157
- ebb_client *_client;
158
- VALUE hash = rb_hash_new();
159
- int i;
160
- Data_Get_Struct(client, ebb_client, _client);
160
+ ebb_client *client;
161
+ VALUE field, value, hash = rb_hash_new();
162
+ int i;
161
163
 
162
- for(i=0; i < _client->env_size; i++) {
163
- rb_hash_aset(hash, env_field(&_client->env[i])
164
- , env_value(&_client->env[i])
165
- );
164
+ Data_Get_Struct(rb_client, ebb_client, client);
165
+ for(i=0; i < client->env_size; i++) {
166
+ field = env_field(&client->env[i]);
167
+ value = env_value(&client->env[i]);
168
+ rb_hash_aset(hash, field, value);
169
+ //printf("(%s, %s)\n", StringValuePtr(field), StringValuePtr(value));
166
170
  }
171
+ //printf("\n\n");
167
172
  rb_hash_aset(hash, global_path_info, rb_hash_aref(hash, global_request_path));
168
173
  return hash;
169
174
  }
170
175
 
171
176
 
172
- VALUE client_read_input(VALUE x, VALUE client, VALUE size)
177
+ VALUE client_read_input(VALUE _, VALUE client, VALUE size)
173
178
  {
174
179
  ebb_client *_client;
175
180
  GString *_string;
@@ -192,7 +197,7 @@ VALUE client_read_input(VALUE x, VALUE client, VALUE size)
192
197
  return string;
193
198
  }
194
199
 
195
- VALUE client_write_status(VALUE x, VALUE client, VALUE status, VALUE human_status)
200
+ VALUE client_write_status(VALUE _, VALUE client, VALUE status, VALUE human_status)
196
201
  {
197
202
  ebb_client *_client;
198
203
  Data_Get_Struct(client, ebb_client, _client);
@@ -200,7 +205,7 @@ VALUE client_write_status(VALUE x, VALUE client, VALUE status, VALUE human_statu
200
205
  return Qnil;
201
206
  }
202
207
 
203
- VALUE client_write_header(VALUE x, VALUE client, VALUE field, VALUE value)
208
+ VALUE client_write_header(VALUE _, VALUE client, VALUE field, VALUE value)
204
209
  {
205
210
  ebb_client *_client;
206
211
  Data_Get_Struct(client, ebb_client, _client);
@@ -208,7 +213,7 @@ VALUE client_write_header(VALUE x, VALUE client, VALUE field, VALUE value)
208
213
  return Qnil;
209
214
  }
210
215
 
211
- VALUE client_write(VALUE x, VALUE client, VALUE string)
216
+ VALUE client_write(VALUE _, VALUE client, VALUE string)
212
217
  {
213
218
  ebb_client *_client;
214
219
  Data_Get_Struct(client, ebb_client, _client);
@@ -217,20 +222,40 @@ VALUE client_write(VALUE x, VALUE client, VALUE string)
217
222
  }
218
223
 
219
224
 
220
- VALUE client_finished(VALUE x, VALUE client)
225
+ VALUE client_begin_transmission(VALUE _, VALUE rb_client)
221
226
  {
222
- ebb_client *_client;
223
- Data_Get_Struct(client, ebb_client, _client);
224
- ebb_client_finished(_client);
227
+ ebb_client *client;
228
+ Data_Get_Struct(rb_client, ebb_client, client);
229
+ client->status_written = TRUE;
230
+ client->headers_written = TRUE;
231
+ ebb_client_begin_transmission(client);
225
232
  return Qnil;
226
233
  }
227
234
 
235
+ VALUE client_release(VALUE _, VALUE rb_client)
236
+ {
237
+ ebb_client *client;
238
+ Data_Get_Struct(rb_client, ebb_client, client);
239
+ ebb_client_release(client);
240
+ return Qnil;
241
+ }
242
+
243
+
244
+ VALUE client_set_body_written(VALUE _, VALUE rb_client, VALUE v)
245
+ {
246
+ ebb_client *client;
247
+ Data_Get_Struct(rb_client, ebb_client, client);
248
+ client->body_written = RTEST(v);
249
+ return client->body_written ? Qtrue : Qfalse;
250
+ }
228
251
 
229
252
  void Init_ebb_ext()
230
253
  {
231
254
  VALUE mEbb = rb_define_module("Ebb");
232
255
  VALUE mFFI = rb_define_module_under(mEbb, "FFI");
233
256
 
257
+ rb_define_const(mEbb, "VERSION", rb_str_new2(EBB_VERSION));
258
+
234
259
  /** Defines global strings in the init method. */
235
260
  #define DEF_GLOBAL(N, val) global_##N = rb_obj_freeze(rb_str_new2(val)); rb_global_variable(&global_##N)
236
261
  DEF_GLOBAL(http_prefix, "HTTP_");
@@ -241,24 +266,34 @@ void Init_ebb_ext()
241
266
  DEF_GLOBAL(query_string, "QUERY_STRING");
242
267
  DEF_GLOBAL(http_version, "HTTP_VERSION");
243
268
  DEF_GLOBAL(request_body, "REQUEST_BODY");
244
- DEF_GLOBAL(server_name, "SERVER_NAME");
245
269
  DEF_GLOBAL(server_port, "SERVER_PORT");
246
270
  DEF_GLOBAL(path_info, "PATH_INFO");
247
271
  DEF_GLOBAL(content_length, "CONTENT_LENGTH");
248
272
  DEF_GLOBAL(http_host, "HTTP_HOST");
249
273
 
250
- cServer = rb_define_class_under(mEbb, "Server", rb_cObject);
251
- rb_define_alloc_func(cServer, server_alloc);
252
- rb_define_singleton_method(mFFI, "server_process_connections", server_process_connections, 1);
253
- rb_define_singleton_method(mFFI, "server_listen_on_port", server_listen_on_port, 2);
254
- rb_define_singleton_method(mFFI, "server_listen_on_socket", server_listen_on_socket, 2);
255
- rb_define_singleton_method(mFFI, "server_unlisten", server_unlisten, 1);
274
+ rb_define_singleton_method(mFFI, "server_process_connections", server_process_connections, 0);
275
+ rb_define_singleton_method(mFFI, "server_listen_on_port", server_listen_on_port, 1);
276
+ rb_define_singleton_method(mFFI, "server_unlisten", server_unlisten, 0);
277
+ rb_define_singleton_method(mFFI, "server_open?", server_open, 0);
256
278
 
257
279
  cClient = rb_define_class_under(mEbb, "Client", rb_cObject);
258
280
  rb_define_singleton_method(mFFI, "client_read_input", client_read_input, 2);
259
281
  rb_define_singleton_method(mFFI, "client_write_status", client_write_status, 3);
260
282
  rb_define_singleton_method(mFFI, "client_write_header", client_write_header, 3);
261
283
  rb_define_singleton_method(mFFI, "client_write", client_write, 2);
262
- rb_define_singleton_method(mFFI, "client_finished", client_finished, 1);
284
+ rb_define_singleton_method(mFFI, "client_begin_transmission", client_begin_transmission, 1);
285
+ rb_define_singleton_method(mFFI, "client_set_body_written", client_set_body_written, 2);
263
286
  rb_define_singleton_method(mFFI, "client_env", client_env, 1);
287
+ rb_define_singleton_method(mFFI, "client_release", client_release, 1);
288
+
289
+ /* initialize ebb_server */
290
+ loop = ev_default_loop (0);
291
+
292
+ ev_idle_init (&idle_watcher, idle_cb);
293
+ attach_idle_watcher();
294
+
295
+ server = ebb_server_alloc();
296
+ VALUE waiting_clients = rb_ary_new();
297
+ rb_iv_set(mFFI, "@waiting_clients", waiting_clients);
298
+ ebb_server_init(server, loop, request_cb, (void*)waiting_clients);
264
299
  }
@@ -24,7 +24,7 @@
24
24
 
25
25
  #line 26 "src/parser.c"
26
26
  static const int http_parser_start = 1;
27
- static const int http_parser_first_final = 82;
27
+ static const int http_parser_first_final = 73;
28
28
  static const int http_parser_error = 0;
29
29
 
30
30
  static const int http_parser_en_main = 1;
@@ -108,17 +108,17 @@ case 2:
108
108
  #line 109 "src/parser.c"
109
109
  switch( (*p) ) {
110
110
  case 32: goto tr2;
111
- case 36: goto st63;
112
- case 95: goto st63;
111
+ case 36: goto st54;
112
+ case 95: goto st54;
113
113
  }
114
114
  if ( (*p) < 48 ) {
115
115
  if ( 45 <= (*p) && (*p) <= 46 )
116
- goto st63;
116
+ goto st54;
117
117
  } else if ( (*p) > 57 ) {
118
118
  if ( 65 <= (*p) && (*p) <= 90 )
119
- goto st63;
119
+ goto st54;
120
120
  } else
121
- goto st63;
121
+ goto st54;
122
122
  goto st0;
123
123
  tr2:
124
124
  #line 50 "src/parser.rl"
@@ -172,7 +172,7 @@ tr8:
172
172
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
173
173
  }
174
174
  goto st5;
175
- tr58:
175
+ tr50:
176
176
  #line 22 "src/parser.rl"
177
177
  {MARK(mark, p); }
178
178
  #line 88 "src/parser.rl"
@@ -186,7 +186,7 @@ tr58:
186
186
  parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p));
187
187
  }
188
188
  goto st5;
189
- tr61:
189
+ tr53:
190
190
  #line 88 "src/parser.rl"
191
191
  {
192
192
  /* Don't know if this length is specified somewhere or not */
@@ -198,7 +198,7 @@ tr61:
198
198
  parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p));
199
199
  }
200
200
  goto st5;
201
- tr69:
201
+ tr61:
202
202
  #line 79 "src/parser.rl"
203
203
  {
204
204
  if(LEN(mark, p) > 1024) {
@@ -218,7 +218,7 @@ tr69:
218
218
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
219
219
  }
220
220
  goto st5;
221
- tr80:
221
+ tr72:
222
222
  #line 64 "src/parser.rl"
223
223
  {MARK(query_start, p); }
224
224
  #line 65 "src/parser.rl"
@@ -240,7 +240,7 @@ tr80:
240
240
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
241
241
  }
242
242
  goto st5;
243
- tr84:
243
+ tr76:
244
244
  #line 65 "src/parser.rl"
245
245
  {
246
246
  if(LEN(query_start, p) > 10 * 1024) {
@@ -434,18 +434,18 @@ tr23:
434
434
  {
435
435
  if(parser->nread > 1024 * (80 + 32)) {
436
436
  parser->overflow_error = TRUE;
437
- {p++; cs = 82; goto _out;}
437
+ {p++; cs = 73; goto _out;}
438
438
  }
439
439
  parser->body_start = p - buffer + 1;
440
440
  if(parser->header_done != NULL)
441
441
  parser->header_done(parser->data, p + 1, pe - p - 1);
442
- {p++; cs = 82; goto _out;}
442
+ {p++; cs = 73; goto _out;}
443
443
  }
444
- goto st82;
445
- st82:
444
+ goto st73;
445
+ st73:
446
446
  if ( ++p == pe )
447
- goto _test_eof82;
448
- case 82:
447
+ goto _test_eof73;
448
+ case 73:
449
449
  #line 450 "src/parser.c"
450
450
  goto st0;
451
451
  tr21:
@@ -977,104 +977,25 @@ case 35:
977
977
  if ( (*p) == 13 )
978
978
  goto tr47;
979
979
  if ( 48 <= (*p) && (*p) <= 57 )
980
- goto st36;
981
- goto st19;
982
- st36:
983
- if ( ++p == pe )
984
- goto _test_eof36;
985
- case 36:
986
- if ( (*p) == 13 )
987
- goto tr47;
988
- if ( 48 <= (*p) && (*p) <= 57 )
989
- goto st37;
990
- goto st19;
991
- st37:
992
- if ( ++p == pe )
993
- goto _test_eof37;
994
- case 37:
995
- if ( (*p) == 13 )
996
- goto tr47;
997
- if ( 48 <= (*p) && (*p) <= 57 )
998
- goto st38;
999
- goto st19;
1000
- st38:
1001
- if ( ++p == pe )
1002
- goto _test_eof38;
1003
- case 38:
1004
- if ( (*p) == 13 )
1005
- goto tr47;
1006
- if ( 48 <= (*p) && (*p) <= 57 )
1007
- goto st39;
1008
- goto st19;
1009
- st39:
1010
- if ( ++p == pe )
1011
- goto _test_eof39;
1012
- case 39:
1013
- if ( (*p) == 13 )
1014
- goto tr47;
1015
- if ( 48 <= (*p) && (*p) <= 57 )
1016
- goto st40;
1017
- goto st19;
1018
- st40:
1019
- if ( ++p == pe )
1020
- goto _test_eof40;
1021
- case 40:
1022
- if ( (*p) == 13 )
1023
- goto tr47;
1024
- if ( 48 <= (*p) && (*p) <= 57 )
1025
- goto st41;
1026
- goto st19;
1027
- st41:
1028
- if ( ++p == pe )
1029
- goto _test_eof41;
1030
- case 41:
1031
- if ( (*p) == 13 )
1032
- goto tr47;
1033
- if ( 48 <= (*p) && (*p) <= 57 )
1034
- goto st42;
1035
- goto st19;
1036
- st42:
1037
- if ( ++p == pe )
1038
- goto _test_eof42;
1039
- case 42:
1040
- if ( (*p) == 13 )
1041
- goto tr47;
1042
- if ( 48 <= (*p) && (*p) <= 57 )
1043
- goto st43;
1044
- goto st19;
1045
- st43:
1046
- if ( ++p == pe )
1047
- goto _test_eof43;
1048
- case 43:
1049
- if ( (*p) == 13 )
1050
- goto tr47;
1051
- if ( 48 <= (*p) && (*p) <= 57 )
1052
- goto st44;
1053
- goto st19;
1054
- st44:
1055
- if ( ++p == pe )
1056
- goto _test_eof44;
1057
- case 44:
1058
- if ( (*p) == 13 )
1059
- goto tr47;
980
+ goto st35;
1060
981
  goto st19;
1061
982
  tr9:
1062
983
  #line 55 "src/parser.rl"
1063
984
  {
1064
985
  if(LEN(mark, p) > 12 * 1024) {
1065
986
  parser->overflow_error = TRUE;
1066
- {p++; cs = 45; goto _out;}
987
+ {p++; cs = 36; goto _out;}
1067
988
  }
1068
989
  if(parser->request_uri != NULL)
1069
990
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
1070
991
  }
1071
- goto st45;
1072
- tr70:
992
+ goto st36;
993
+ tr62:
1073
994
  #line 79 "src/parser.rl"
1074
995
  {
1075
996
  if(LEN(mark, p) > 1024) {
1076
997
  parser->overflow_error = TRUE;
1077
- {p++; cs = 45; goto _out;}
998
+ {p++; cs = 36; goto _out;}
1078
999
  }
1079
1000
  if(parser->request_path != NULL)
1080
1001
  parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
@@ -1083,20 +1004,20 @@ tr70:
1083
1004
  {
1084
1005
  if(LEN(mark, p) > 12 * 1024) {
1085
1006
  parser->overflow_error = TRUE;
1086
- {p++; cs = 45; goto _out;}
1007
+ {p++; cs = 36; goto _out;}
1087
1008
  }
1088
1009
  if(parser->request_uri != NULL)
1089
1010
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
1090
1011
  }
1091
- goto st45;
1092
- tr81:
1012
+ goto st36;
1013
+ tr73:
1093
1014
  #line 64 "src/parser.rl"
1094
1015
  {MARK(query_start, p); }
1095
1016
  #line 65 "src/parser.rl"
1096
1017
  {
1097
1018
  if(LEN(query_start, p) > 10 * 1024) {
1098
1019
  parser->overflow_error = TRUE;
1099
- {p++; cs = 45; goto _out;}
1020
+ {p++; cs = 36; goto _out;}
1100
1021
  }
1101
1022
  if(parser->query_string != NULL)
1102
1023
  parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
@@ -1105,18 +1026,18 @@ tr81:
1105
1026
  {
1106
1027
  if(LEN(mark, p) > 12 * 1024) {
1107
1028
  parser->overflow_error = TRUE;
1108
- {p++; cs = 45; goto _out;}
1029
+ {p++; cs = 36; goto _out;}
1109
1030
  }
1110
1031
  if(parser->request_uri != NULL)
1111
1032
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
1112
1033
  }
1113
- goto st45;
1114
- tr85:
1034
+ goto st36;
1035
+ tr77:
1115
1036
  #line 65 "src/parser.rl"
1116
1037
  {
1117
1038
  if(LEN(query_start, p) > 10 * 1024) {
1118
1039
  parser->overflow_error = TRUE;
1119
- {p++; cs = 45; goto _out;}
1040
+ {p++; cs = 36; goto _out;}
1120
1041
  }
1121
1042
  if(parser->query_string != NULL)
1122
1043
  parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
@@ -1125,20 +1046,20 @@ tr85:
1125
1046
  {
1126
1047
  if(LEN(mark, p) > 12 * 1024) {
1127
1048
  parser->overflow_error = TRUE;
1128
- {p++; cs = 45; goto _out;}
1049
+ {p++; cs = 36; goto _out;}
1129
1050
  }
1130
1051
  if(parser->request_uri != NULL)
1131
1052
  parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
1132
1053
  }
1133
- goto st45;
1134
- st45:
1054
+ goto st36;
1055
+ st36:
1135
1056
  if ( ++p == pe )
1136
- goto _test_eof45;
1137
- case 45:
1138
- #line 1139 "src/parser.c"
1057
+ goto _test_eof36;
1058
+ case 36:
1059
+ #line 1060 "src/parser.c"
1139
1060
  switch( (*p) ) {
1140
- case 32: goto tr58;
1141
- case 37: goto tr59;
1061
+ case 32: goto tr50;
1062
+ case 37: goto tr51;
1142
1063
  case 60: goto st0;
1143
1064
  case 62: goto st0;
1144
1065
  case 127: goto st0;
@@ -1148,19 +1069,19 @@ case 45:
1148
1069
  goto st0;
1149
1070
  } else if ( (*p) >= 0 )
1150
1071
  goto st0;
1151
- goto tr57;
1152
- tr57:
1072
+ goto tr49;
1073
+ tr49:
1153
1074
  #line 22 "src/parser.rl"
1154
1075
  {MARK(mark, p); }
1155
- goto st46;
1156
- st46:
1076
+ goto st37;
1077
+ st37:
1157
1078
  if ( ++p == pe )
1158
- goto _test_eof46;
1159
- case 46:
1160
- #line 1161 "src/parser.c"
1079
+ goto _test_eof37;
1080
+ case 37:
1081
+ #line 1082 "src/parser.c"
1161
1082
  switch( (*p) ) {
1162
- case 32: goto tr61;
1163
- case 37: goto st47;
1083
+ case 32: goto tr53;
1084
+ case 37: goto st38;
1164
1085
  case 60: goto st0;
1165
1086
  case 62: goto st0;
1166
1087
  case 127: goto st0;
@@ -1170,622 +1091,622 @@ case 46:
1170
1091
  goto st0;
1171
1092
  } else if ( (*p) >= 0 )
1172
1093
  goto st0;
1173
- goto st46;
1174
- tr59:
1094
+ goto st37;
1095
+ tr51:
1175
1096
  #line 22 "src/parser.rl"
1176
1097
  {MARK(mark, p); }
1177
- goto st47;
1178
- st47:
1098
+ goto st38;
1099
+ st38:
1179
1100
  if ( ++p == pe )
1180
- goto _test_eof47;
1181
- case 47:
1182
- #line 1183 "src/parser.c"
1101
+ goto _test_eof38;
1102
+ case 38:
1103
+ #line 1104 "src/parser.c"
1183
1104
  if ( (*p) < 65 ) {
1184
1105
  if ( 48 <= (*p) && (*p) <= 57 )
1185
- goto st48;
1106
+ goto st39;
1186
1107
  } else if ( (*p) > 70 ) {
1187
1108
  if ( 97 <= (*p) && (*p) <= 102 )
1188
- goto st48;
1109
+ goto st39;
1189
1110
  } else
1190
- goto st48;
1111
+ goto st39;
1191
1112
  goto st0;
1192
- st48:
1113
+ st39:
1193
1114
  if ( ++p == pe )
1194
- goto _test_eof48;
1195
- case 48:
1115
+ goto _test_eof39;
1116
+ case 39:
1196
1117
  if ( (*p) < 65 ) {
1197
1118
  if ( 48 <= (*p) && (*p) <= 57 )
1198
- goto st46;
1119
+ goto st37;
1199
1120
  } else if ( (*p) > 70 ) {
1200
1121
  if ( 97 <= (*p) && (*p) <= 102 )
1201
- goto st46;
1122
+ goto st37;
1202
1123
  } else
1203
- goto st46;
1124
+ goto st37;
1204
1125
  goto st0;
1205
1126
  tr5:
1206
1127
  #line 22 "src/parser.rl"
1207
1128
  {MARK(mark, p); }
1208
- goto st49;
1209
- st49:
1129
+ goto st40;
1130
+ st40:
1210
1131
  if ( ++p == pe )
1211
- goto _test_eof49;
1212
- case 49:
1213
- #line 1214 "src/parser.c"
1132
+ goto _test_eof40;
1133
+ case 40:
1134
+ #line 1135 "src/parser.c"
1214
1135
  switch( (*p) ) {
1215
- case 43: goto st49;
1216
- case 58: goto st50;
1136
+ case 43: goto st40;
1137
+ case 58: goto st41;
1217
1138
  }
1218
1139
  if ( (*p) < 48 ) {
1219
1140
  if ( 45 <= (*p) && (*p) <= 46 )
1220
- goto st49;
1141
+ goto st40;
1221
1142
  } else if ( (*p) > 57 ) {
1222
1143
  if ( (*p) > 90 ) {
1223
1144
  if ( 97 <= (*p) && (*p) <= 122 )
1224
- goto st49;
1145
+ goto st40;
1225
1146
  } else if ( (*p) >= 65 )
1226
- goto st49;
1147
+ goto st40;
1227
1148
  } else
1228
- goto st49;
1149
+ goto st40;
1229
1150
  goto st0;
1230
1151
  tr7:
1231
1152
  #line 22 "src/parser.rl"
1232
1153
  {MARK(mark, p); }
1233
- goto st50;
1234
- st50:
1154
+ goto st41;
1155
+ st41:
1235
1156
  if ( ++p == pe )
1236
- goto _test_eof50;
1237
- case 50:
1238
- #line 1239 "src/parser.c"
1157
+ goto _test_eof41;
1158
+ case 41:
1159
+ #line 1160 "src/parser.c"
1239
1160
  switch( (*p) ) {
1240
1161
  case 32: goto tr8;
1241
1162
  case 34: goto st0;
1242
1163
  case 35: goto tr9;
1243
- case 37: goto st51;
1164
+ case 37: goto st42;
1244
1165
  case 60: goto st0;
1245
1166
  case 62: goto st0;
1246
1167
  case 127: goto st0;
1247
1168
  }
1248
1169
  if ( 0 <= (*p) && (*p) <= 31 )
1249
1170
  goto st0;
1250
- goto st50;
1251
- st51:
1171
+ goto st41;
1172
+ st42:
1252
1173
  if ( ++p == pe )
1253
- goto _test_eof51;
1254
- case 51:
1174
+ goto _test_eof42;
1175
+ case 42:
1255
1176
  if ( (*p) < 65 ) {
1256
1177
  if ( 48 <= (*p) && (*p) <= 57 )
1257
- goto st52;
1178
+ goto st43;
1258
1179
  } else if ( (*p) > 70 ) {
1259
1180
  if ( 97 <= (*p) && (*p) <= 102 )
1260
- goto st52;
1181
+ goto st43;
1261
1182
  } else
1262
- goto st52;
1183
+ goto st43;
1263
1184
  goto st0;
1264
- st52:
1185
+ st43:
1265
1186
  if ( ++p == pe )
1266
- goto _test_eof52;
1267
- case 52:
1187
+ goto _test_eof43;
1188
+ case 43:
1268
1189
  if ( (*p) < 65 ) {
1269
1190
  if ( 48 <= (*p) && (*p) <= 57 )
1270
- goto st50;
1191
+ goto st41;
1271
1192
  } else if ( (*p) > 70 ) {
1272
1193
  if ( 97 <= (*p) && (*p) <= 102 )
1273
- goto st50;
1194
+ goto st41;
1274
1195
  } else
1275
- goto st50;
1196
+ goto st41;
1276
1197
  goto st0;
1277
1198
  tr6:
1278
1199
  #line 22 "src/parser.rl"
1279
1200
  {MARK(mark, p); }
1280
- goto st53;
1281
- st53:
1201
+ goto st44;
1202
+ st44:
1282
1203
  if ( ++p == pe )
1283
- goto _test_eof53;
1284
- case 53:
1285
- #line 1286 "src/parser.c"
1204
+ goto _test_eof44;
1205
+ case 44:
1206
+ #line 1207 "src/parser.c"
1286
1207
  switch( (*p) ) {
1287
- case 32: goto tr69;
1208
+ case 32: goto tr61;
1288
1209
  case 34: goto st0;
1289
- case 35: goto tr70;
1290
- case 37: goto st54;
1291
- case 59: goto tr72;
1210
+ case 35: goto tr62;
1211
+ case 37: goto st45;
1212
+ case 59: goto tr64;
1292
1213
  case 60: goto st0;
1293
1214
  case 62: goto st0;
1294
- case 63: goto tr73;
1215
+ case 63: goto tr65;
1295
1216
  case 127: goto st0;
1296
1217
  }
1297
1218
  if ( 0 <= (*p) && (*p) <= 31 )
1298
1219
  goto st0;
1299
- goto st53;
1300
- st54:
1220
+ goto st44;
1221
+ st45:
1301
1222
  if ( ++p == pe )
1302
- goto _test_eof54;
1303
- case 54:
1223
+ goto _test_eof45;
1224
+ case 45:
1304
1225
  if ( (*p) < 65 ) {
1305
1226
  if ( 48 <= (*p) && (*p) <= 57 )
1306
- goto st55;
1227
+ goto st46;
1307
1228
  } else if ( (*p) > 70 ) {
1308
1229
  if ( 97 <= (*p) && (*p) <= 102 )
1309
- goto st55;
1230
+ goto st46;
1310
1231
  } else
1311
- goto st55;
1232
+ goto st46;
1312
1233
  goto st0;
1313
- st55:
1234
+ st46:
1314
1235
  if ( ++p == pe )
1315
- goto _test_eof55;
1316
- case 55:
1236
+ goto _test_eof46;
1237
+ case 46:
1317
1238
  if ( (*p) < 65 ) {
1318
1239
  if ( 48 <= (*p) && (*p) <= 57 )
1319
- goto st53;
1240
+ goto st44;
1320
1241
  } else if ( (*p) > 70 ) {
1321
1242
  if ( 97 <= (*p) && (*p) <= 102 )
1322
- goto st53;
1243
+ goto st44;
1323
1244
  } else
1324
- goto st53;
1245
+ goto st44;
1325
1246
  goto st0;
1326
- tr72:
1247
+ tr64:
1327
1248
  #line 79 "src/parser.rl"
1328
1249
  {
1329
1250
  if(LEN(mark, p) > 1024) {
1330
1251
  parser->overflow_error = TRUE;
1331
- {p++; cs = 56; goto _out;}
1252
+ {p++; cs = 47; goto _out;}
1332
1253
  }
1333
1254
  if(parser->request_path != NULL)
1334
1255
  parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
1335
1256
  }
1336
- goto st56;
1337
- st56:
1257
+ goto st47;
1258
+ st47:
1338
1259
  if ( ++p == pe )
1339
- goto _test_eof56;
1340
- case 56:
1341
- #line 1342 "src/parser.c"
1260
+ goto _test_eof47;
1261
+ case 47:
1262
+ #line 1263 "src/parser.c"
1342
1263
  switch( (*p) ) {
1343
1264
  case 32: goto tr8;
1344
1265
  case 34: goto st0;
1345
1266
  case 35: goto tr9;
1346
- case 37: goto st57;
1267
+ case 37: goto st48;
1347
1268
  case 60: goto st0;
1348
1269
  case 62: goto st0;
1349
- case 63: goto st59;
1270
+ case 63: goto st50;
1350
1271
  case 127: goto st0;
1351
1272
  }
1352
1273
  if ( 0 <= (*p) && (*p) <= 31 )
1353
1274
  goto st0;
1354
- goto st56;
1355
- st57:
1275
+ goto st47;
1276
+ st48:
1356
1277
  if ( ++p == pe )
1357
- goto _test_eof57;
1358
- case 57:
1278
+ goto _test_eof48;
1279
+ case 48:
1359
1280
  if ( (*p) < 65 ) {
1360
1281
  if ( 48 <= (*p) && (*p) <= 57 )
1361
- goto st58;
1282
+ goto st49;
1362
1283
  } else if ( (*p) > 70 ) {
1363
1284
  if ( 97 <= (*p) && (*p) <= 102 )
1364
- goto st58;
1285
+ goto st49;
1365
1286
  } else
1366
- goto st58;
1287
+ goto st49;
1367
1288
  goto st0;
1368
- st58:
1289
+ st49:
1369
1290
  if ( ++p == pe )
1370
- goto _test_eof58;
1371
- case 58:
1291
+ goto _test_eof49;
1292
+ case 49:
1372
1293
  if ( (*p) < 65 ) {
1373
1294
  if ( 48 <= (*p) && (*p) <= 57 )
1374
- goto st56;
1295
+ goto st47;
1375
1296
  } else if ( (*p) > 70 ) {
1376
1297
  if ( 97 <= (*p) && (*p) <= 102 )
1377
- goto st56;
1298
+ goto st47;
1378
1299
  } else
1379
- goto st56;
1300
+ goto st47;
1380
1301
  goto st0;
1381
- tr73:
1302
+ tr65:
1382
1303
  #line 79 "src/parser.rl"
1383
1304
  {
1384
1305
  if(LEN(mark, p) > 1024) {
1385
1306
  parser->overflow_error = TRUE;
1386
- {p++; cs = 59; goto _out;}
1307
+ {p++; cs = 50; goto _out;}
1387
1308
  }
1388
1309
  if(parser->request_path != NULL)
1389
1310
  parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
1390
1311
  }
1391
- goto st59;
1392
- st59:
1312
+ goto st50;
1313
+ st50:
1393
1314
  if ( ++p == pe )
1394
- goto _test_eof59;
1395
- case 59:
1396
- #line 1397 "src/parser.c"
1315
+ goto _test_eof50;
1316
+ case 50:
1317
+ #line 1318 "src/parser.c"
1397
1318
  switch( (*p) ) {
1398
- case 32: goto tr80;
1319
+ case 32: goto tr72;
1399
1320
  case 34: goto st0;
1400
- case 35: goto tr81;
1401
- case 37: goto tr82;
1321
+ case 35: goto tr73;
1322
+ case 37: goto tr74;
1402
1323
  case 60: goto st0;
1403
1324
  case 62: goto st0;
1404
1325
  case 127: goto st0;
1405
1326
  }
1406
1327
  if ( 0 <= (*p) && (*p) <= 31 )
1407
1328
  goto st0;
1408
- goto tr79;
1409
- tr79:
1329
+ goto tr71;
1330
+ tr71:
1410
1331
  #line 64 "src/parser.rl"
1411
1332
  {MARK(query_start, p); }
1412
- goto st60;
1413
- st60:
1333
+ goto st51;
1334
+ st51:
1414
1335
  if ( ++p == pe )
1415
- goto _test_eof60;
1416
- case 60:
1417
- #line 1418 "src/parser.c"
1336
+ goto _test_eof51;
1337
+ case 51:
1338
+ #line 1339 "src/parser.c"
1418
1339
  switch( (*p) ) {
1419
- case 32: goto tr84;
1340
+ case 32: goto tr76;
1420
1341
  case 34: goto st0;
1421
- case 35: goto tr85;
1422
- case 37: goto st61;
1342
+ case 35: goto tr77;
1343
+ case 37: goto st52;
1423
1344
  case 60: goto st0;
1424
1345
  case 62: goto st0;
1425
1346
  case 127: goto st0;
1426
1347
  }
1427
1348
  if ( 0 <= (*p) && (*p) <= 31 )
1428
1349
  goto st0;
1429
- goto st60;
1430
- tr82:
1350
+ goto st51;
1351
+ tr74:
1431
1352
  #line 64 "src/parser.rl"
1432
1353
  {MARK(query_start, p); }
1433
- goto st61;
1434
- st61:
1354
+ goto st52;
1355
+ st52:
1435
1356
  if ( ++p == pe )
1436
- goto _test_eof61;
1437
- case 61:
1438
- #line 1439 "src/parser.c"
1357
+ goto _test_eof52;
1358
+ case 52:
1359
+ #line 1360 "src/parser.c"
1439
1360
  if ( (*p) < 65 ) {
1440
1361
  if ( 48 <= (*p) && (*p) <= 57 )
1441
- goto st62;
1362
+ goto st53;
1442
1363
  } else if ( (*p) > 70 ) {
1443
1364
  if ( 97 <= (*p) && (*p) <= 102 )
1444
- goto st62;
1365
+ goto st53;
1445
1366
  } else
1446
- goto st62;
1367
+ goto st53;
1447
1368
  goto st0;
1448
- st62:
1369
+ st53:
1449
1370
  if ( ++p == pe )
1450
- goto _test_eof62;
1451
- case 62:
1371
+ goto _test_eof53;
1372
+ case 53:
1452
1373
  if ( (*p) < 65 ) {
1453
1374
  if ( 48 <= (*p) && (*p) <= 57 )
1454
- goto st60;
1375
+ goto st51;
1455
1376
  } else if ( (*p) > 70 ) {
1456
1377
  if ( 97 <= (*p) && (*p) <= 102 )
1457
- goto st60;
1378
+ goto st51;
1458
1379
  } else
1459
- goto st60;
1380
+ goto st51;
1460
1381
  goto st0;
1461
- st63:
1382
+ st54:
1462
1383
  if ( ++p == pe )
1463
- goto _test_eof63;
1464
- case 63:
1384
+ goto _test_eof54;
1385
+ case 54:
1465
1386
  switch( (*p) ) {
1466
1387
  case 32: goto tr2;
1467
- case 36: goto st64;
1468
- case 95: goto st64;
1388
+ case 36: goto st55;
1389
+ case 95: goto st55;
1469
1390
  }
1470
1391
  if ( (*p) < 48 ) {
1471
1392
  if ( 45 <= (*p) && (*p) <= 46 )
1472
- goto st64;
1393
+ goto st55;
1473
1394
  } else if ( (*p) > 57 ) {
1474
1395
  if ( 65 <= (*p) && (*p) <= 90 )
1475
- goto st64;
1396
+ goto st55;
1476
1397
  } else
1477
- goto st64;
1398
+ goto st55;
1478
1399
  goto st0;
1479
- st64:
1400
+ st55:
1480
1401
  if ( ++p == pe )
1481
- goto _test_eof64;
1482
- case 64:
1402
+ goto _test_eof55;
1403
+ case 55:
1483
1404
  switch( (*p) ) {
1484
1405
  case 32: goto tr2;
1485
- case 36: goto st65;
1486
- case 95: goto st65;
1406
+ case 36: goto st56;
1407
+ case 95: goto st56;
1487
1408
  }
1488
1409
  if ( (*p) < 48 ) {
1489
1410
  if ( 45 <= (*p) && (*p) <= 46 )
1490
- goto st65;
1411
+ goto st56;
1491
1412
  } else if ( (*p) > 57 ) {
1492
1413
  if ( 65 <= (*p) && (*p) <= 90 )
1493
- goto st65;
1414
+ goto st56;
1494
1415
  } else
1495
- goto st65;
1416
+ goto st56;
1496
1417
  goto st0;
1497
- st65:
1418
+ st56:
1498
1419
  if ( ++p == pe )
1499
- goto _test_eof65;
1500
- case 65:
1420
+ goto _test_eof56;
1421
+ case 56:
1501
1422
  switch( (*p) ) {
1502
1423
  case 32: goto tr2;
1503
- case 36: goto st66;
1504
- case 95: goto st66;
1424
+ case 36: goto st57;
1425
+ case 95: goto st57;
1505
1426
  }
1506
1427
  if ( (*p) < 48 ) {
1507
1428
  if ( 45 <= (*p) && (*p) <= 46 )
1508
- goto st66;
1429
+ goto st57;
1509
1430
  } else if ( (*p) > 57 ) {
1510
1431
  if ( 65 <= (*p) && (*p) <= 90 )
1511
- goto st66;
1432
+ goto st57;
1512
1433
  } else
1513
- goto st66;
1434
+ goto st57;
1514
1435
  goto st0;
1515
- st66:
1436
+ st57:
1516
1437
  if ( ++p == pe )
1517
- goto _test_eof66;
1518
- case 66:
1438
+ goto _test_eof57;
1439
+ case 57:
1519
1440
  switch( (*p) ) {
1520
1441
  case 32: goto tr2;
1521
- case 36: goto st67;
1522
- case 95: goto st67;
1442
+ case 36: goto st58;
1443
+ case 95: goto st58;
1523
1444
  }
1524
1445
  if ( (*p) < 48 ) {
1525
1446
  if ( 45 <= (*p) && (*p) <= 46 )
1526
- goto st67;
1447
+ goto st58;
1527
1448
  } else if ( (*p) > 57 ) {
1528
1449
  if ( 65 <= (*p) && (*p) <= 90 )
1529
- goto st67;
1450
+ goto st58;
1530
1451
  } else
1531
- goto st67;
1452
+ goto st58;
1532
1453
  goto st0;
1533
- st67:
1454
+ st58:
1534
1455
  if ( ++p == pe )
1535
- goto _test_eof67;
1536
- case 67:
1456
+ goto _test_eof58;
1457
+ case 58:
1537
1458
  switch( (*p) ) {
1538
1459
  case 32: goto tr2;
1539
- case 36: goto st68;
1540
- case 95: goto st68;
1460
+ case 36: goto st59;
1461
+ case 95: goto st59;
1541
1462
  }
1542
1463
  if ( (*p) < 48 ) {
1543
1464
  if ( 45 <= (*p) && (*p) <= 46 )
1544
- goto st68;
1465
+ goto st59;
1545
1466
  } else if ( (*p) > 57 ) {
1546
1467
  if ( 65 <= (*p) && (*p) <= 90 )
1547
- goto st68;
1468
+ goto st59;
1548
1469
  } else
1549
- goto st68;
1470
+ goto st59;
1550
1471
  goto st0;
1551
- st68:
1472
+ st59:
1552
1473
  if ( ++p == pe )
1553
- goto _test_eof68;
1554
- case 68:
1474
+ goto _test_eof59;
1475
+ case 59:
1555
1476
  switch( (*p) ) {
1556
1477
  case 32: goto tr2;
1557
- case 36: goto st69;
1558
- case 95: goto st69;
1478
+ case 36: goto st60;
1479
+ case 95: goto st60;
1559
1480
  }
1560
1481
  if ( (*p) < 48 ) {
1561
1482
  if ( 45 <= (*p) && (*p) <= 46 )
1562
- goto st69;
1483
+ goto st60;
1563
1484
  } else if ( (*p) > 57 ) {
1564
1485
  if ( 65 <= (*p) && (*p) <= 90 )
1565
- goto st69;
1486
+ goto st60;
1566
1487
  } else
1567
- goto st69;
1488
+ goto st60;
1568
1489
  goto st0;
1569
- st69:
1490
+ st60:
1570
1491
  if ( ++p == pe )
1571
- goto _test_eof69;
1572
- case 69:
1492
+ goto _test_eof60;
1493
+ case 60:
1573
1494
  switch( (*p) ) {
1574
1495
  case 32: goto tr2;
1575
- case 36: goto st70;
1576
- case 95: goto st70;
1496
+ case 36: goto st61;
1497
+ case 95: goto st61;
1577
1498
  }
1578
1499
  if ( (*p) < 48 ) {
1579
1500
  if ( 45 <= (*p) && (*p) <= 46 )
1580
- goto st70;
1501
+ goto st61;
1581
1502
  } else if ( (*p) > 57 ) {
1582
1503
  if ( 65 <= (*p) && (*p) <= 90 )
1583
- goto st70;
1504
+ goto st61;
1584
1505
  } else
1585
- goto st70;
1506
+ goto st61;
1586
1507
  goto st0;
1587
- st70:
1508
+ st61:
1588
1509
  if ( ++p == pe )
1589
- goto _test_eof70;
1590
- case 70:
1510
+ goto _test_eof61;
1511
+ case 61:
1591
1512
  switch( (*p) ) {
1592
1513
  case 32: goto tr2;
1593
- case 36: goto st71;
1594
- case 95: goto st71;
1514
+ case 36: goto st62;
1515
+ case 95: goto st62;
1595
1516
  }
1596
1517
  if ( (*p) < 48 ) {
1597
1518
  if ( 45 <= (*p) && (*p) <= 46 )
1598
- goto st71;
1519
+ goto st62;
1599
1520
  } else if ( (*p) > 57 ) {
1600
1521
  if ( 65 <= (*p) && (*p) <= 90 )
1601
- goto st71;
1522
+ goto st62;
1602
1523
  } else
1603
- goto st71;
1524
+ goto st62;
1604
1525
  goto st0;
1605
- st71:
1526
+ st62:
1606
1527
  if ( ++p == pe )
1607
- goto _test_eof71;
1608
- case 71:
1528
+ goto _test_eof62;
1529
+ case 62:
1609
1530
  switch( (*p) ) {
1610
1531
  case 32: goto tr2;
1611
- case 36: goto st72;
1612
- case 95: goto st72;
1532
+ case 36: goto st63;
1533
+ case 95: goto st63;
1613
1534
  }
1614
1535
  if ( (*p) < 48 ) {
1615
1536
  if ( 45 <= (*p) && (*p) <= 46 )
1616
- goto st72;
1537
+ goto st63;
1617
1538
  } else if ( (*p) > 57 ) {
1618
1539
  if ( 65 <= (*p) && (*p) <= 90 )
1619
- goto st72;
1540
+ goto st63;
1620
1541
  } else
1621
- goto st72;
1542
+ goto st63;
1622
1543
  goto st0;
1623
- st72:
1544
+ st63:
1624
1545
  if ( ++p == pe )
1625
- goto _test_eof72;
1626
- case 72:
1546
+ goto _test_eof63;
1547
+ case 63:
1627
1548
  switch( (*p) ) {
1628
1549
  case 32: goto tr2;
1629
- case 36: goto st73;
1630
- case 95: goto st73;
1550
+ case 36: goto st64;
1551
+ case 95: goto st64;
1631
1552
  }
1632
1553
  if ( (*p) < 48 ) {
1633
1554
  if ( 45 <= (*p) && (*p) <= 46 )
1634
- goto st73;
1555
+ goto st64;
1635
1556
  } else if ( (*p) > 57 ) {
1636
1557
  if ( 65 <= (*p) && (*p) <= 90 )
1637
- goto st73;
1558
+ goto st64;
1638
1559
  } else
1639
- goto st73;
1560
+ goto st64;
1640
1561
  goto st0;
1641
- st73:
1562
+ st64:
1642
1563
  if ( ++p == pe )
1643
- goto _test_eof73;
1644
- case 73:
1564
+ goto _test_eof64;
1565
+ case 64:
1645
1566
  switch( (*p) ) {
1646
1567
  case 32: goto tr2;
1647
- case 36: goto st74;
1648
- case 95: goto st74;
1568
+ case 36: goto st65;
1569
+ case 95: goto st65;
1649
1570
  }
1650
1571
  if ( (*p) < 48 ) {
1651
1572
  if ( 45 <= (*p) && (*p) <= 46 )
1652
- goto st74;
1573
+ goto st65;
1653
1574
  } else if ( (*p) > 57 ) {
1654
1575
  if ( 65 <= (*p) && (*p) <= 90 )
1655
- goto st74;
1576
+ goto st65;
1656
1577
  } else
1657
- goto st74;
1578
+ goto st65;
1658
1579
  goto st0;
1659
- st74:
1580
+ st65:
1660
1581
  if ( ++p == pe )
1661
- goto _test_eof74;
1662
- case 74:
1582
+ goto _test_eof65;
1583
+ case 65:
1663
1584
  switch( (*p) ) {
1664
1585
  case 32: goto tr2;
1665
- case 36: goto st75;
1666
- case 95: goto st75;
1586
+ case 36: goto st66;
1587
+ case 95: goto st66;
1667
1588
  }
1668
1589
  if ( (*p) < 48 ) {
1669
1590
  if ( 45 <= (*p) && (*p) <= 46 )
1670
- goto st75;
1591
+ goto st66;
1671
1592
  } else if ( (*p) > 57 ) {
1672
1593
  if ( 65 <= (*p) && (*p) <= 90 )
1673
- goto st75;
1594
+ goto st66;
1674
1595
  } else
1675
- goto st75;
1596
+ goto st66;
1676
1597
  goto st0;
1677
- st75:
1598
+ st66:
1678
1599
  if ( ++p == pe )
1679
- goto _test_eof75;
1680
- case 75:
1600
+ goto _test_eof66;
1601
+ case 66:
1681
1602
  switch( (*p) ) {
1682
1603
  case 32: goto tr2;
1683
- case 36: goto st76;
1684
- case 95: goto st76;
1604
+ case 36: goto st67;
1605
+ case 95: goto st67;
1685
1606
  }
1686
1607
  if ( (*p) < 48 ) {
1687
1608
  if ( 45 <= (*p) && (*p) <= 46 )
1688
- goto st76;
1609
+ goto st67;
1689
1610
  } else if ( (*p) > 57 ) {
1690
1611
  if ( 65 <= (*p) && (*p) <= 90 )
1691
- goto st76;
1612
+ goto st67;
1692
1613
  } else
1693
- goto st76;
1614
+ goto st67;
1694
1615
  goto st0;
1695
- st76:
1616
+ st67:
1696
1617
  if ( ++p == pe )
1697
- goto _test_eof76;
1698
- case 76:
1618
+ goto _test_eof67;
1619
+ case 67:
1699
1620
  switch( (*p) ) {
1700
1621
  case 32: goto tr2;
1701
- case 36: goto st77;
1702
- case 95: goto st77;
1622
+ case 36: goto st68;
1623
+ case 95: goto st68;
1703
1624
  }
1704
1625
  if ( (*p) < 48 ) {
1705
1626
  if ( 45 <= (*p) && (*p) <= 46 )
1706
- goto st77;
1627
+ goto st68;
1707
1628
  } else if ( (*p) > 57 ) {
1708
1629
  if ( 65 <= (*p) && (*p) <= 90 )
1709
- goto st77;
1630
+ goto st68;
1710
1631
  } else
1711
- goto st77;
1632
+ goto st68;
1712
1633
  goto st0;
1713
- st77:
1634
+ st68:
1714
1635
  if ( ++p == pe )
1715
- goto _test_eof77;
1716
- case 77:
1636
+ goto _test_eof68;
1637
+ case 68:
1717
1638
  switch( (*p) ) {
1718
1639
  case 32: goto tr2;
1719
- case 36: goto st78;
1720
- case 95: goto st78;
1640
+ case 36: goto st69;
1641
+ case 95: goto st69;
1721
1642
  }
1722
1643
  if ( (*p) < 48 ) {
1723
1644
  if ( 45 <= (*p) && (*p) <= 46 )
1724
- goto st78;
1645
+ goto st69;
1725
1646
  } else if ( (*p) > 57 ) {
1726
1647
  if ( 65 <= (*p) && (*p) <= 90 )
1727
- goto st78;
1648
+ goto st69;
1728
1649
  } else
1729
- goto st78;
1650
+ goto st69;
1730
1651
  goto st0;
1731
- st78:
1652
+ st69:
1732
1653
  if ( ++p == pe )
1733
- goto _test_eof78;
1734
- case 78:
1654
+ goto _test_eof69;
1655
+ case 69:
1735
1656
  switch( (*p) ) {
1736
1657
  case 32: goto tr2;
1737
- case 36: goto st79;
1738
- case 95: goto st79;
1658
+ case 36: goto st70;
1659
+ case 95: goto st70;
1739
1660
  }
1740
1661
  if ( (*p) < 48 ) {
1741
1662
  if ( 45 <= (*p) && (*p) <= 46 )
1742
- goto st79;
1663
+ goto st70;
1743
1664
  } else if ( (*p) > 57 ) {
1744
1665
  if ( 65 <= (*p) && (*p) <= 90 )
1745
- goto st79;
1666
+ goto st70;
1746
1667
  } else
1747
- goto st79;
1668
+ goto st70;
1748
1669
  goto st0;
1749
- st79:
1670
+ st70:
1750
1671
  if ( ++p == pe )
1751
- goto _test_eof79;
1752
- case 79:
1672
+ goto _test_eof70;
1673
+ case 70:
1753
1674
  switch( (*p) ) {
1754
1675
  case 32: goto tr2;
1755
- case 36: goto st80;
1756
- case 95: goto st80;
1676
+ case 36: goto st71;
1677
+ case 95: goto st71;
1757
1678
  }
1758
1679
  if ( (*p) < 48 ) {
1759
1680
  if ( 45 <= (*p) && (*p) <= 46 )
1760
- goto st80;
1681
+ goto st71;
1761
1682
  } else if ( (*p) > 57 ) {
1762
1683
  if ( 65 <= (*p) && (*p) <= 90 )
1763
- goto st80;
1684
+ goto st71;
1764
1685
  } else
1765
- goto st80;
1686
+ goto st71;
1766
1687
  goto st0;
1767
- st80:
1688
+ st71:
1768
1689
  if ( ++p == pe )
1769
- goto _test_eof80;
1770
- case 80:
1690
+ goto _test_eof71;
1691
+ case 71:
1771
1692
  switch( (*p) ) {
1772
1693
  case 32: goto tr2;
1773
- case 36: goto st81;
1774
- case 95: goto st81;
1694
+ case 36: goto st72;
1695
+ case 95: goto st72;
1775
1696
  }
1776
1697
  if ( (*p) < 48 ) {
1777
1698
  if ( 45 <= (*p) && (*p) <= 46 )
1778
- goto st81;
1699
+ goto st72;
1779
1700
  } else if ( (*p) > 57 ) {
1780
1701
  if ( 65 <= (*p) && (*p) <= 90 )
1781
- goto st81;
1702
+ goto st72;
1782
1703
  } else
1783
- goto st81;
1704
+ goto st72;
1784
1705
  goto st0;
1785
- st81:
1706
+ st72:
1786
1707
  if ( ++p == pe )
1787
- goto _test_eof81;
1788
- case 81:
1708
+ goto _test_eof72;
1709
+ case 72:
1789
1710
  if ( (*p) == 32 )
1790
1711
  goto tr2;
1791
1712
  goto st0;
@@ -1805,7 +1726,7 @@ case 81:
1805
1726
  _test_eof14: cs = 14; goto _test_eof;
1806
1727
  _test_eof15: cs = 15; goto _test_eof;
1807
1728
  _test_eof16: cs = 16; goto _test_eof;
1808
- _test_eof82: cs = 82; goto _test_eof;
1729
+ _test_eof73: cs = 73; goto _test_eof;
1809
1730
  _test_eof17: cs = 17; goto _test_eof;
1810
1731
  _test_eof18: cs = 18; goto _test_eof;
1811
1732
  _test_eof19: cs = 19; goto _test_eof;
@@ -1862,15 +1783,6 @@ case 81:
1862
1783
  _test_eof70: cs = 70; goto _test_eof;
1863
1784
  _test_eof71: cs = 71; goto _test_eof;
1864
1785
  _test_eof72: cs = 72; goto _test_eof;
1865
- _test_eof73: cs = 73; goto _test_eof;
1866
- _test_eof74: cs = 74; goto _test_eof;
1867
- _test_eof75: cs = 75; goto _test_eof;
1868
- _test_eof76: cs = 76; goto _test_eof;
1869
- _test_eof77: cs = 77; goto _test_eof;
1870
- _test_eof78: cs = 78; goto _test_eof;
1871
- _test_eof79: cs = 79; goto _test_eof;
1872
- _test_eof80: cs = 80; goto _test_eof;
1873
- _test_eof81: cs = 81; goto _test_eof;
1874
1786
 
1875
1787
  _test_eof: {}
1876
1788
  _out: {}