Sha256: 17ca838efc514cdd03fe5d5b109f254f1b469574457f787f4187866240c9cbdf

Contents?: true

Size: 1.42 KB

Versions: 8

Compression:

Stored size: 1.42 KB

Contents

#include "query.h"

%%{
	machine Trenni_query_parser;
	
	action string_begin {
		string_token.begin = p;
	}
	
	action string_end {
		string_token.end = p;
		
		rb_funcall(delegate, id_string, 2, Trenni_Token_string(string_token, encoding), encoded ? Qtrue : Qfalse);
		
		encoded = 0;
	}
	
	action integer_begin {
		integer_token.begin = p;
	}
	
	action integer_end {
		integer_token.end = p;
		
		rb_funcall(delegate, id_integer, 1, Trenni_Token_string(integer_token, encoding));
	}
	
	action append {
		rb_funcall(delegate, id_append, 0);
	}
	
	action value_begin {
		value_token.begin = p;
	}
	
	action value_end {
		value_token.end = p;
		
		rb_funcall(delegate, id_assign, 2, Trenni_Token_string(value_token, encoding), encoded ? Qtrue : Qfalse);
		
		encoded = 0;
	}
	
	action pair {
		rb_funcall(delegate, id_pair, 0);
	}
	
	action encoded {
		encoded = 1;
	}
	
	include query "trenni/query.rl";
	
	write data;
}%%

VALUE Trenni_Native_parse_query(VALUE self, VALUE buffer, VALUE delegate) {
	VALUE string = rb_funcall(buffer, id_read, 0);
	
	rb_encoding *encoding = rb_enc_get(string);
	
	const char *s, *p, *pe, *eof;
	unsigned long cs;
	
	Trenni_Token string_token = {0}, integer_token = {0}, value_token = {0};
	unsigned encoded = 0;
	
	s = p = RSTRING_PTR(string);
	eof = pe = p + RSTRING_LEN(string);
	
	%%{
		write init;
		write exec;
	}%%
	
	if (p != eof) {
		Trenni_raise_error("could not parse all input", buffer, p-s);
	}
	
	return Qnil;
}

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
trenni-3.14.0 ext/trenni/query.rl
trenni-3.13.2 ext/trenni/query.rl
trenni-3.13.1 ext/trenni/query.rl
trenni-3.13.0 ext/trenni/query.rl
trenni-3.12.0 ext/trenni/query.rl
trenni-3.11.0 ext/trenni/query.rl
trenni-3.10.0 ext/trenni/query.rl
trenni-3.9.0 ext/trenni/query.rl