diff --git a/Rakefile b/Rakefile index cccac16..ecd44b6 100755 --- a/Rakefile +++ b/Rakefile @@ -2,17 +2,50 @@ require 'rubygems' require 'rake' +require 'rake/clean' +require 'fileutils' require 'rake/testtask' require 'rubygems/package_task' -task :default => 'test' +task :default => [:compile, :test] task :ragel do - sh "find . -name '*.rl' | xargs ragel -R -F1" + sh "find . -name '*.rl' | xargs ragel -C -G2" end +task :compile => [:ragel, :liquid_ext] -Rake::TestTask.new(:test) do |t| +extension = "liquid_ext" +ext = "ext/liquid" +ext_so = "#{ext}/#{extension}.#{RbConfig::CONFIG['DLEXT']}" +ext_files = FileList[ + "#{ext}/*.c", + "#{ext}/*.h", + "#{ext}/*.rl", + "#{ext}/extconf.rb", + "#{ext}/Makefile", + "lib" +] + +task "lib" do + directory "lib" +end + +desc "Builds just the #{extension} extension" +task extension.to_sym => [:ragel, "#{ext}/Makefile", ext_so ] + +file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do + Dir.chdir(ext) do ruby "extconf.rb" end +end + +file ext_so => ext_files do + Dir.chdir(ext) do + sh "make" + end + cp ext_so, "lib" +end + +Rake::TestTask.new(:test => [:ragel, 'liquid_ext']) do |t| t.libs << '.' << 'lib' << 'test' t.test_files = FileList['test/liquid/**/*_test.rb'] t.verbose = false diff --git a/ext/liquid/Makefile b/ext/liquid/Makefile new file mode 100644 index 0000000..42d30f5 --- /dev/null +++ b/ext/liquid/Makefile @@ -0,0 +1,213 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +n=$(NULLCMD) +ECHO1 = $(V:1=@$n) +ECHO = $(ECHO1:0=@echo) + +#### Start of system configuration section. #### + +srcdir = . +topdir = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 +hdrdir = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 +arch_hdrdir = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/$(arch) +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby +prefix = $(DESTDIR)/Users/tobi/.rbenv/versions/1.9.3-p194-perf +exec_prefix = $(prefix) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +bindir = $(exec_prefix)/bin +sbindir = $(exec_prefix)/sbin +libexecdir = $(exec_prefix)/libexec +datarootdir = $(prefix)/share +datadir = $(datarootdir) +sysconfdir = $(prefix)/etc +sharedstatedir = $(prefix)/com +localstatedir = $(prefix)/var +includedir = $(prefix)/include +oldincludedir = $(DESTDIR)/usr/include +docdir = $(datarootdir)/doc/$(PACKAGE) +infodir = $(datarootdir)/info +htmldir = $(docdir) +dvidir = $(docdir) +pdfdir = $(docdir) +psdir = $(docdir) +libdir = $(exec_prefix)/lib +localedir = $(datarootdir)/locale +mandir = $(datarootdir)/man +ridir = $(datarootdir)/$(RI_BASE_NAME) +sitedir = $(rubylibprefix)/site_ruby +vendordir = $(rubylibprefix)/vendor_ruby +rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version) +sitehdrdir = $(rubyhdrdir)/site_ruby +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +rubylibdir = $(rubylibprefix)/$(ruby_version) +archdir = $(rubylibdir)/$(arch) +sitelibdir = $(sitedir)/$(ruby_version) +sitearchdir = $(sitelibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendorarchdir = $(vendorlibdir)/$(sitearch) + +NULLCMD = : + +CC = /usr/bin/gcc-4.2 +CXX = g++ +LIBRUBY = $(LIBRUBY_A) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = +LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static +OUTFLAG = -o +COUTFLAG = -o + +RUBY_EXTCONF_H = +cflags = $(optflags) $(debugflags) $(warnflags) +optflags = -O3 +debugflags = -ggdb +warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration +CFLAGS = -fno-common $(cflags) -pipe $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) +DEFS = +CPPFLAGS = -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags) +CXXFLAGS = $(CFLAGS) $(cxxflags) +ldflags = -L. -L'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib' -L/usr/local/lib +dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace +ARCH_FLAG = +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -dynamic -bundle +LDSHAREDXX = $(CXX) -dynamic -bundle +AR = ar +EXEEXT = + +RUBY_BASE_NAME = ruby +RUBY_INSTALL_NAME = ruby +RUBY_SO_NAME = ruby +arch = x86_64-darwin12.0.0 +sitearch = $(arch) +ruby_version = 1.9.1 +ruby = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/bin/ruby +RUBY = $(ruby) +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir -p +MAKEDIRS = mkdir -p +INSTALL = /usr/bin/install -c +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp + +#### End of system configuration section. #### + +preload = + +libpath = . $(libdir) +LIBPATH = -L. -L$(libdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = +extout_prefix = +target_prefix = +LOCAL_LIBS = +LIBS = -lc -lpthread -ldl -lobjc +SRCS = liquid_ext.c +OBJS = liquid_ext.o +TARGET = liquid_ext +DLLIB = $(TARGET).bundle +EXTSTATIC = +STATIC_LIB = + +BINDIR = $(bindir) +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) +HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) +ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) + +TARGET_SO = $(DLLIB) +CLEANLIBS = $(TARGET).bundle +CLEANOBJS = *.o *.bak + +all: $(DLLIB) +static: $(STATIC_LIB) +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-rb + +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-rb-default clean-rb + @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean: clean distclean-so distclean-rb-default distclean-rb + @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + @-$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: $(RUBYARCHDIR) +install-so: $(RUBYARCHDIR)/$(DLLIB) +$(RUBYARCHDIR)/$(DLLIB): $(DLLIB) + @-$(MAKEDIRS) $(@D) + $(INSTALL_PROG) $(DLLIB) $(@D) +install-rb: pre-install-rb install-rb-default +install-rb-default: pre-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +pre-install-rb-default: + $(ECHO) installing default liquid_ext libraries +$(RUBYARCHDIR): + $(Q) $(MAKEDIRS) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o + +.cc.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.mm.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cxx.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cpp.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.C.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.c.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +.m.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +$(DLLIB): $(OBJS) Makefile + $(ECHO) linking shared-object $(DLLIB) + @-$(RM) $(@) + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) + + + +$(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h diff --git a/ext/liquid/extconf.rb b/ext/liquid/extconf.rb new file mode 100644 index 0000000..8bfdb79 --- /dev/null +++ b/ext/liquid/extconf.rb @@ -0,0 +1,6 @@ +require 'mkmf' + +dir_config("liquid_ext") +have_library("c", "main") + +create_makefile("liquid_ext") diff --git a/ext/liquid/liquid_ext.bundle b/ext/liquid/liquid_ext.bundle new file mode 100755 index 0000000..e35a56b Binary files /dev/null and b/ext/liquid/liquid_ext.bundle differ diff --git a/ext/liquid/liquid_ext.c b/ext/liquid/liquid_ext.c new file mode 100644 index 0000000..36b2eb2 --- /dev/null +++ b/ext/liquid/liquid_ext.c @@ -0,0 +1,2636 @@ + +#line 1 "./ext/liquid/liquid_ext.rl" +/* + Parser for context#[] method. Generated through ragel from parser.rl + Only modify parser.rl. Run rake ragel afterwards to generate this file. +*/ + +#include + + +#line 108 "./ext/liquid/liquid_ext.rl" + + + +#line 16 "./ext/liquid/liquid_ext.c" +static const int fsm_start = 1; +static const int fsm_error = 0; + +static const int fsm_en_main = 1; + + +#line 111 "./ext/liquid/liquid_ext.rl" + +// def self.emit(sym, data, tokens) +// puts "emitting: #{sym} -> #{data.inspect}" if $VERBOSE +// tokens.push [sym, data] +// end + +#define EMIT(sym, data) rb_ary_push(tokens, rb_ary_new3(2, ID2SYM(rb_intern(sym)), data)); + + +void liquid_context_parse_impl(VALUE text, VALUE tokens) +{ + char *p; + char *pe; + char *eof; + char *mark; + int cs, res = 0; + + if (RSTRING_LEN(text) <= 0) { + return; + } + + mark = p = RSTRING_PTR(text); + eof = pe = RSTRING_PTR(text) + RSTRING_LEN(text); + + +#line 49 "./ext/liquid/liquid_ext.c" + { + cs = fsm_start; + } + +#line 136 "./ext/liquid/liquid_ext.rl" + +#line 56 "./ext/liquid/liquid_ext.c" + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { +case 1: + switch( (*p) ) { + case 34: goto tr0; + case 39: goto tr2; + case 40: goto st4; + case 43: goto tr4; + case 45: goto tr4; + case 91: goto st60; + case 102: goto tr8; + case 110: goto tr9; + case 116: goto tr10; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr5; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr6; + } else + goto tr6; + goto st0; +st0: +cs = 0; + goto _out; +tr0: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st2; +st2: + if ( ++p == pe ) + goto _test_eof2; +case 2: +#line 96 "./ext/liquid/liquid_ext.c" + if ( (*p) == 34 ) + goto st63; + goto st2; +st63: + if ( ++p == pe ) + goto _test_eof63; +case 63: + if ( (*p) == 34 ) + goto st63; + goto st2; +tr2: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st3; +st3: + if ( ++p == pe ) + goto _test_eof3; +case 3: +#line 117 "./ext/liquid/liquid_ext.c" + if ( (*p) == 39 ) + goto st64; + goto st3; +st64: + if ( ++p == pe ) + goto _test_eof64; +case 64: + if ( (*p) == 39 ) + goto st64; + goto st3; +st4: + if ( ++p == pe ) + goto _test_eof4; +case 4: + switch( (*p) ) { + case 34: goto tr15; + case 39: goto tr16; + case 43: goto tr17; + case 45: goto tr17; + case 102: goto tr20; + case 110: goto tr21; + case 116: goto tr22; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr18; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr19; + } else + goto tr19; + goto st0; +tr15: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st5; +st5: + if ( ++p == pe ) + goto _test_eof5; +case 5: +#line 160 "./ext/liquid/liquid_ext.c" + if ( (*p) == 34 ) + goto st6; + goto st5; +tr27: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st6; +st6: + if ( ++p == pe ) + goto _test_eof6; +case 6: +#line 174 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 34: goto st6; + case 46: goto tr25; + } + goto st5; +tr25: +#line 53 "./ext/liquid/liquid_ext.rl" + { EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + goto st7; +st7: + if ( ++p == pe ) + goto _test_eof7; +case 7: +#line 188 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 34: goto st6; + case 46: goto st8; + } + goto st5; +st8: + if ( ++p == pe ) + goto _test_eof8; +case 8: + switch( (*p) ) { + case 34: goto tr27; + case 39: goto tr15; + case 43: goto tr15; + case 45: goto tr15; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr15; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr15; + } else + goto tr15; + goto st5; +tr16: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st9; +st9: + if ( ++p == pe ) + goto _test_eof9; +case 9: +#line 223 "./ext/liquid/liquid_ext.c" + if ( (*p) == 39 ) + goto st10; + goto st9; +tr32: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st10; +st10: + if ( ++p == pe ) + goto _test_eof10; +case 10: +#line 237 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 39: goto st10; + case 46: goto tr30; + } + goto st9; +tr30: +#line 53 "./ext/liquid/liquid_ext.rl" + { EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + goto st11; +st11: + if ( ++p == pe ) + goto _test_eof11; +case 11: +#line 251 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 39: goto st10; + case 46: goto st12; + } + goto st9; +st12: + if ( ++p == pe ) + goto _test_eof12; +case 12: + switch( (*p) ) { + case 34: goto tr16; + case 39: goto tr32; + case 43: goto tr16; + case 45: goto tr16; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr16; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr16; + } else + goto tr16; + goto st9; +tr17: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st13; +st13: + if ( ++p == pe ) + goto _test_eof13; +case 13: +#line 286 "./ext/liquid/liquid_ext.c" + if ( 48 <= (*p) && (*p) <= 57 ) + goto st14; + goto st0; +tr18: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st14; +st14: + if ( ++p == pe ) + goto _test_eof14; +case 14: +#line 300 "./ext/liquid/liquid_ext.c" + if ( (*p) == 46 ) + goto tr34; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st14; + goto st0; +tr34: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + goto st15; +st15: + if ( ++p == pe ) + goto _test_eof15; +case 15: +#line 316 "./ext/liquid/liquid_ext.c" + if ( (*p) == 46 ) + goto st16; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st42; + goto st0; +st16: + if ( ++p == pe ) + goto _test_eof16; +case 16: + switch( (*p) ) { + case 34: goto tr37; + case 39: goto tr37; + case 43: goto tr38; + case 45: goto tr38; + case 102: goto tr41; + case 110: goto tr42; + case 116: goto tr43; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr39; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr40; + } else + goto tr40; + goto st0; +tr37: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st17; +st17: + if ( ++p == pe ) + goto _test_eof17; +case 17: +#line 354 "./ext/liquid/liquid_ext.c" + goto st17; +tr38: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st18; +st18: + if ( ++p == pe ) + goto _test_eof18; +case 18: +#line 366 "./ext/liquid/liquid_ext.c" + if ( 48 <= (*p) && (*p) <= 57 ) + goto st19; + goto st0; +tr39: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st19; +st19: + if ( ++p == pe ) + goto _test_eof19; +case 19: +#line 380 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr46; + case 46: goto st26; + } + if ( 48 <= (*p) && (*p) <= 57 ) + goto st19; + goto st0; +tr46: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + goto st65; +tr62: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st65; +tr63: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st65; +tr69: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st65; +tr73: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st65; +tr77: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st65; +st65: + if ( ++p == pe ) + goto _test_eof65; +case 65: +#line 423 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 46: goto tr100; + case 91: goto tr101; + } + goto st0; +tr144: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st20; +tr147: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st20; +tr153: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st20; +tr158: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st20; +tr163: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st20; +tr100: +#line 22 "./ext/liquid/liquid_ext.rl" + { + EMIT("range", Qnil) + } + goto st20; +tr103: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st20; +tr130: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st20; +tr135: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st20; +tr140: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st20; +st20: + if ( ++p == pe ) + goto _test_eof20; +case 20: +#line 489 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 102: goto tr49; + case 108: goto tr50; + case 115: goto tr51; + } + if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr48; + } else if ( (*p) >= 65 ) + goto tr48; + goto st0; +tr48: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st66; +st66: + if ( ++p == pe ) + goto _test_eof66; +case 66: +#line 511 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +tr143: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + goto st21; +tr145: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st21; +tr148: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st21; +tr154: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st21; +tr159: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st21; +tr164: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st21; +tr101: +#line 22 "./ext/liquid/liquid_ext.rl" + { + EMIT("range", Qnil) + } + goto st21; +tr104: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st21; +tr131: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st21; +tr136: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st21; +tr141: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st21; +st21: + if ( ++p == pe ) + goto _test_eof21; +case 21: +#line 593 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr53; + goto tr52; +tr52: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st22; +st22: + if ( ++p == pe ) + goto _test_eof22; +case 22: +#line 607 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr55; + goto st22; +tr55: +#line 68 "./ext/liquid/liquid_ext.rl" + { + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + goto st67; +tr60: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } +#line 68 "./ext/liquid/liquid_ext.rl" + { + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + goto st67; +st67: + if ( ++p == pe ) + goto _test_eof67; +case 67: +#line 633 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 46: goto tr105; + case 91: goto tr106; + case 93: goto tr55; + } + goto st22; +tr108: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st23; +tr105: +#line 19 "./ext/liquid/liquid_ext.rl" + { + EMIT("call", Qnil) + } + goto st23; +tr114: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st23; +tr119: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st23; +tr124: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st23; +st23: + if ( ++p == pe ) + goto _test_eof23; +case 23: +#line 675 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 93: goto tr55; + case 102: goto tr57; + case 108: goto tr58; + case 115: goto tr59; + } + if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr56; + } else if ( (*p) >= 65 ) + goto tr56; + goto st22; +tr56: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st68; +st68: + if ( ++p == pe ) + goto _test_eof68; +case 68: +#line 698 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr109: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st24; +tr106: +#line 19 "./ext/liquid/liquid_ext.rl" + { + EMIT("call", Qnil) + } + goto st24; +tr115: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st24; +tr120: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st24; +tr125: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st24; +st24: + if ( ++p == pe ) + goto _test_eof24; +case 24: +#line 750 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr60; + goto tr52; +tr57: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st69; +st69: + if ( ++p == pe ) + goto _test_eof69; +case 69: +#line 764 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 105: goto st70; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st70: + if ( ++p == pe ) + goto _test_eof70; +case 70: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 114: goto st71; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st71: + if ( ++p == pe ) + goto _test_eof71; +case 71: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 115: goto st72; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st72: + if ( ++p == pe ) + goto _test_eof72; +case 72: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 116: goto st73; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st73: + if ( ++p == pe ) + goto _test_eof73; +case 73: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr114; + case 91: goto tr115; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr58: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st74; +st74: + if ( ++p == pe ) + goto _test_eof74; +case 74: +#line 875 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 97: goto st75; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st75: + if ( ++p == pe ) + goto _test_eof75; +case 75: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 115: goto st76; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st76: + if ( ++p == pe ) + goto _test_eof76; +case 76: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 116: goto st77; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st77: + if ( ++p == pe ) + goto _test_eof77; +case 77: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr119; + case 91: goto tr120; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr59: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st78; +st78: + if ( ++p == pe ) + goto _test_eof78; +case 78: +#line 965 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 105: goto st79; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st79: + if ( ++p == pe ) + goto _test_eof79; +case 79: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 122: goto st80; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 121 ) + goto st68; + } else + goto st68; + goto st22; +st80: + if ( ++p == pe ) + goto _test_eof80; +case 80: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 101: goto st81; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st81: + if ( ++p == pe ) + goto _test_eof81; +case 81: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr124; + case 91: goto tr125; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr53: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st25; +st25: + if ( ++p == pe ) + goto _test_eof25; +case 25: +#line 1055 "./ext/liquid/liquid_ext.c" + goto st22; +tr49: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st82; +st82: + if ( ++p == pe ) + goto _test_eof82; +case 82: +#line 1067 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 105: goto st83; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st83: + if ( ++p == pe ) + goto _test_eof83; +case 83: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 114: goto st84; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st84: + if ( ++p == pe ) + goto _test_eof84; +case 84: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 115: goto st85; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st85: + if ( ++p == pe ) + goto _test_eof85; +case 85: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 116: goto st86; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st86: + if ( ++p == pe ) + goto _test_eof86; +case 86: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr130; + case 91: goto tr131; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +tr50: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st87; +st87: + if ( ++p == pe ) + goto _test_eof87; +case 87: +#line 1173 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 97: goto st88; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st88: + if ( ++p == pe ) + goto _test_eof88; +case 88: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 115: goto st89; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st89: + if ( ++p == pe ) + goto _test_eof89; +case 89: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 116: goto st90; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st90: + if ( ++p == pe ) + goto _test_eof90; +case 90: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr135; + case 91: goto tr136; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +tr51: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st91; +st91: + if ( ++p == pe ) + goto _test_eof91; +case 91: +#line 1259 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 105: goto st92; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st92: + if ( ++p == pe ) + goto _test_eof92; +case 92: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 122: goto st93; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 121 ) + goto st66; + } else + goto st66; + goto st0; +st93: + if ( ++p == pe ) + goto _test_eof93; +case 93: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 101: goto st94; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st94: + if ( ++p == pe ) + goto _test_eof94; +case 94: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr140; + case 91: goto tr141; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st26: + if ( ++p == pe ) + goto _test_eof26; +case 26: + if ( 48 <= (*p) && (*p) <= 57 ) + goto st27; + goto st0; +st27: + if ( ++p == pe ) + goto _test_eof27; +case 27: + if ( (*p) == 41 ) + goto tr62; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st27; + goto st0; +tr40: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st28; +st28: + if ( ++p == pe ) + goto _test_eof28; +case 28: +#line 1361 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +tr41: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st29; +st29: + if ( ++p == pe ) + goto _test_eof29; +case 29: +#line 1386 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 97: goto st30; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st30: + if ( ++p == pe ) + goto _test_eof30; +case 30: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 108: goto st31; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st31: + if ( ++p == pe ) + goto _test_eof31; +case 31: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 115: goto st32; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st32: + if ( ++p == pe ) + goto _test_eof32; +case 32: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 101: goto st33; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st33: + if ( ++p == pe ) + goto _test_eof33; +case 33: + switch( (*p) ) { + case 41: goto tr69; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +tr42: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st34; +st34: + if ( ++p == pe ) + goto _test_eof34; +case 34: +#line 1487 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 105: goto st35; + case 117: goto st37; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st35: + if ( ++p == pe ) + goto _test_eof35; +case 35: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 108: goto st36; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st36: + if ( ++p == pe ) + goto _test_eof36; +case 36: + switch( (*p) ) { + case 41: goto tr73; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st37: + if ( ++p == pe ) + goto _test_eof37; +case 37: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 108: goto st35; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +tr43: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st38; +st38: + if ( ++p == pe ) + goto _test_eof38; +case 38: +#line 1570 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 114: goto st39; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st39: + if ( ++p == pe ) + goto _test_eof39; +case 39: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 117: goto st40; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st40: + if ( ++p == pe ) + goto _test_eof40; +case 40: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 101: goto st41; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st41: + if ( ++p == pe ) + goto _test_eof41; +case 41: + switch( (*p) ) { + case 41: goto tr77; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st42: + if ( ++p == pe ) + goto _test_eof42; +case 42: + if ( (*p) == 46 ) + goto tr78; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st42; + goto st0; +tr78: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st43; +tr80: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st43; +tr85: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st43; +tr89: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st43; +tr93: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st43; +st43: + if ( ++p == pe ) + goto _test_eof43; +case 43: +#line 1680 "./ext/liquid/liquid_ext.c" + if ( (*p) == 46 ) + goto st16; + goto st0; +tr19: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st44; +st44: + if ( ++p == pe ) + goto _test_eof44; +case 44: +#line 1694 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr20: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st45; +st45: + if ( ++p == pe ) + goto _test_eof45; +case 45: +#line 1719 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 97: goto st46; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st46: + if ( ++p == pe ) + goto _test_eof46; +case 46: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 108: goto st47; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st47: + if ( ++p == pe ) + goto _test_eof47; +case 47: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 115: goto st48; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st48: + if ( ++p == pe ) + goto _test_eof48; +case 48: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 101: goto st49; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st49: + if ( ++p == pe ) + goto _test_eof49; +case 49: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr85; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr21: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st50; +st50: + if ( ++p == pe ) + goto _test_eof50; +case 50: +#line 1820 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 105: goto st51; + case 117: goto st53; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st51: + if ( ++p == pe ) + goto _test_eof51; +case 51: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 108: goto st52; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st52: + if ( ++p == pe ) + goto _test_eof52; +case 52: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr89; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st53: + if ( ++p == pe ) + goto _test_eof53; +case 53: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 108: goto st51; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr22: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st54; +st54: + if ( ++p == pe ) + goto _test_eof54; +case 54: +#line 1903 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 114: goto st55; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st55: + if ( ++p == pe ) + goto _test_eof55; +case 55: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 117: goto st56; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st56: + if ( ++p == pe ) + goto _test_eof56; +case 56: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 101: goto st57; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st57: + if ( ++p == pe ) + goto _test_eof57; +case 57: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr93; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr4: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st58; +st58: + if ( ++p == pe ) + goto _test_eof58; +case 58: +#line 1985 "./ext/liquid/liquid_ext.c" + if ( 48 <= (*p) && (*p) <= 57 ) + goto st95; + goto st0; +tr5: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st95; +st95: + if ( ++p == pe ) + goto _test_eof95; +case 95: +#line 1999 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 46: goto st59; + case 91: goto tr143; + } + if ( 48 <= (*p) && (*p) <= 57 ) + goto st95; + goto st0; +st59: + if ( ++p == pe ) + goto _test_eof59; +case 59: + if ( 48 <= (*p) && (*p) <= 57 ) + goto st96; + goto st0; +st96: + if ( ++p == pe ) + goto _test_eof96; +case 96: + switch( (*p) ) { + case 46: goto tr144; + case 91: goto tr145; + } + if ( 48 <= (*p) && (*p) <= 57 ) + goto st96; + goto st0; +tr6: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st97; +st97: + if ( ++p == pe ) + goto _test_eof97; +case 97: +#line 2035 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st60: + if ( ++p == pe ) + goto _test_eof60; +case 60: + if ( (*p) == 93 ) + goto tr97; + goto tr96; +tr96: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st61; +st61: + if ( ++p == pe ) + goto _test_eof61; +case 61: +#line 2068 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr99; + goto st61; +tr99: +#line 68 "./ext/liquid/liquid_ext.rl" + { + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + goto st98; +st98: + if ( ++p == pe ) + goto _test_eof98; +case 98: +#line 2083 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr99; + goto st61; +tr97: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st62; +st62: + if ( ++p == pe ) + goto _test_eof62; +case 62: +#line 2097 "./ext/liquid/liquid_ext.c" + goto st61; +tr8: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st99; +st99: + if ( ++p == pe ) + goto _test_eof99; +case 99: +#line 2109 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 97: goto st100; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st100: + if ( ++p == pe ) + goto _test_eof100; +case 100: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 108: goto st101; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st101: + if ( ++p == pe ) + goto _test_eof101; +case 101: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 115: goto st102; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st102: + if ( ++p == pe ) + goto _test_eof102; +case 102: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 101: goto st103; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st103: + if ( ++p == pe ) + goto _test_eof103; +case 103: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr153; + case 91: goto tr154; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +tr9: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st104; +st104: + if ( ++p == pe ) + goto _test_eof104; +case 104: +#line 2215 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 105: goto st105; + case 117: goto st107; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st105: + if ( ++p == pe ) + goto _test_eof105; +case 105: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 108: goto st106; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st106: + if ( ++p == pe ) + goto _test_eof106; +case 106: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr158; + case 91: goto tr159; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st107: + if ( ++p == pe ) + goto _test_eof107; +case 107: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 108: goto st105; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +tr10: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st108; +st108: + if ( ++p == pe ) + goto _test_eof108; +case 108: +#line 2302 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 114: goto st109; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st109: + if ( ++p == pe ) + goto _test_eof109; +case 109: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 117: goto st110; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st110: + if ( ++p == pe ) + goto _test_eof110; +case 110: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 101: goto st111; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st111: + if ( ++p == pe ) + goto _test_eof111; +case 111: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr163; + case 91: goto tr164; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; + } + _test_eof2: cs = 2; goto _test_eof; + _test_eof63: cs = 63; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof64: cs = 64; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof65: cs = 65; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof66: cs = 66; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof67: cs = 67; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof68: cs = 68; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof69: cs = 69; goto _test_eof; + _test_eof70: cs = 70; goto _test_eof; + _test_eof71: cs = 71; goto _test_eof; + _test_eof72: cs = 72; goto _test_eof; + _test_eof73: cs = 73; goto _test_eof; + _test_eof74: cs = 74; goto _test_eof; + _test_eof75: cs = 75; goto _test_eof; + _test_eof76: cs = 76; goto _test_eof; + _test_eof77: cs = 77; goto _test_eof; + _test_eof78: cs = 78; goto _test_eof; + _test_eof79: cs = 79; goto _test_eof; + _test_eof80: cs = 80; goto _test_eof; + _test_eof81: cs = 81; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof82: cs = 82; goto _test_eof; + _test_eof83: cs = 83; goto _test_eof; + _test_eof84: cs = 84; goto _test_eof; + _test_eof85: cs = 85; goto _test_eof; + _test_eof86: cs = 86; goto _test_eof; + _test_eof87: cs = 87; goto _test_eof; + _test_eof88: cs = 88; goto _test_eof; + _test_eof89: cs = 89; goto _test_eof; + _test_eof90: cs = 90; goto _test_eof; + _test_eof91: cs = 91; goto _test_eof; + _test_eof92: cs = 92; goto _test_eof; + _test_eof93: cs = 93; goto _test_eof; + _test_eof94: cs = 94; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof30: cs = 30; goto _test_eof; + _test_eof31: cs = 31; goto _test_eof; + _test_eof32: cs = 32; goto _test_eof; + _test_eof33: cs = 33; goto _test_eof; + _test_eof34: cs = 34; goto _test_eof; + _test_eof35: cs = 35; goto _test_eof; + _test_eof36: cs = 36; goto _test_eof; + _test_eof37: cs = 37; goto _test_eof; + _test_eof38: cs = 38; goto _test_eof; + _test_eof39: cs = 39; goto _test_eof; + _test_eof40: cs = 40; goto _test_eof; + _test_eof41: cs = 41; goto _test_eof; + _test_eof42: cs = 42; goto _test_eof; + _test_eof43: cs = 43; goto _test_eof; + _test_eof44: cs = 44; goto _test_eof; + _test_eof45: cs = 45; goto _test_eof; + _test_eof46: cs = 46; goto _test_eof; + _test_eof47: cs = 47; goto _test_eof; + _test_eof48: cs = 48; goto _test_eof; + _test_eof49: cs = 49; goto _test_eof; + _test_eof50: cs = 50; goto _test_eof; + _test_eof51: cs = 51; goto _test_eof; + _test_eof52: cs = 52; goto _test_eof; + _test_eof53: cs = 53; goto _test_eof; + _test_eof54: cs = 54; goto _test_eof; + _test_eof55: cs = 55; goto _test_eof; + _test_eof56: cs = 56; goto _test_eof; + _test_eof57: cs = 57; goto _test_eof; + _test_eof58: cs = 58; goto _test_eof; + _test_eof95: cs = 95; goto _test_eof; + _test_eof59: cs = 59; goto _test_eof; + _test_eof96: cs = 96; goto _test_eof; + _test_eof97: cs = 97; goto _test_eof; + _test_eof60: cs = 60; goto _test_eof; + _test_eof61: cs = 61; goto _test_eof; + _test_eof98: cs = 98; goto _test_eof; + _test_eof62: cs = 62; goto _test_eof; + _test_eof99: cs = 99; goto _test_eof; + _test_eof100: cs = 100; goto _test_eof; + _test_eof101: cs = 101; goto _test_eof; + _test_eof102: cs = 102; goto _test_eof; + _test_eof103: cs = 103; goto _test_eof; + _test_eof104: cs = 104; goto _test_eof; + _test_eof105: cs = 105; goto _test_eof; + _test_eof106: cs = 106; goto _test_eof; + _test_eof107: cs = 107; goto _test_eof; + _test_eof108: cs = 108; goto _test_eof; + _test_eof109: cs = 109; goto _test_eof; + _test_eof110: cs = 110; goto _test_eof; + _test_eof111: cs = 111; goto _test_eof; + + _test_eof: {} + if ( p == eof ) + { + switch ( cs ) { + case 98: +#line 15 "./ext/liquid/liquid_ext.rl" + { + EMIT("lookup", Qnil) + } + break; + case 67: +#line 19 "./ext/liquid/liquid_ext.rl" + { + EMIT("call", Qnil) + } + break; + case 65: +#line 22 "./ext/liquid/liquid_ext.rl" + { + EMIT("range", Qnil) + } + break; + case 95: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + break; + case 96: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + break; + case 106: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + break; + case 111: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + break; + case 103: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + break; + case 63: + case 64: +#line 53 "./ext/liquid/liquid_ext.rl" + { EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + break; + case 97: + case 99: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 108: + case 109: + case 110: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + break; + case 73: + case 86: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + break; + case 77: + case 90: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + break; + case 81: + case 94: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + break; + case 66: + case 68: + case 69: + case 70: + case 71: + case 72: + case 74: + case 75: + case 76: + case 78: + case 79: + case 80: + case 82: + case 83: + case 84: + case 85: + case 87: + case 88: + case 89: + case 91: + case 92: + case 93: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + break; +#line 2607 "./ext/liquid/liquid_ext.c" + } + } + + _out: {} + } + +#line 137 "./ext/liquid/liquid_ext.rl" +} + +VALUE liquid_context_parse(VALUE self, VALUE text) { + VALUE tokens; + + //printf("text: %s\n", RSTRING_PTR(text)); + + //Check_Type(text, T_STRING); + + tokens = rb_ary_new(); + liquid_context_parse_impl(text, tokens); + return tokens; +} + +static VALUE rb_Liquid; +static VALUE rb_Parser; + +void Init_liquid_ext() +{ + rb_Liquid = rb_define_module("Liquid"); + rb_Parser = rb_define_class_under(rb_Liquid, "Parser", rb_cObject); + rb_define_singleton_method(rb_Parser, "parse", liquid_context_parse, 1); +} diff --git a/ext/liquid/liquid_ext.o b/ext/liquid/liquid_ext.o new file mode 100644 index 0000000..4e97bfc Binary files /dev/null and b/ext/liquid/liquid_ext.o differ diff --git a/ext/liquid/liquid_ext.rl b/ext/liquid/liquid_ext.rl new file mode 100644 index 0000000..ab932b8 --- /dev/null +++ b/ext/liquid/liquid_ext.rl @@ -0,0 +1,159 @@ +/* + Parser for context#[] method. Generated through ragel from parser.rl + Only modify parser.rl. Run rake ragel afterwards to generate this file. +*/ + +#include + +%%{ + machine fsm; + + action mark { + mark = p; + } + + action lookup { + EMIT("lookup", Qnil) + } + + action call { + EMIT("call", Qnil) + } + action range { + EMIT("range", Qnil) + } + + constants = ( "true" | "false" | "nil" | "null" ); + + # strings + string = "\"" any* "\"" | "'" any* "'"; + + # nothingness + nil = "nil" | "null" ; + + # numbers + integer = ('+'|'-')? digit+; + float = ('+'|'-')? digit+ '.' digit+; + + # simple values + primitive = ( + + integer >mark %{ + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } | + + float >mark %{ + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } | + + nil %{ EMIT("id", Qnil) } | + "true" %{ EMIT("id", Qtrue) } | + "false" %{ EMIT("id", Qfalse) } | + + string >mark %{ EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + + ); + + entity = ( + ((alpha [A-Za-z0-9_\-]*) - (constants)) >mark %{ + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + ); + + # Because of recursion we cannot immediatly resolve the content of this in + # the current grammar. We simply re-invoke the parser here to descend into + # the substring + recur = ( + (any+ - ']') >mark %{ + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + ); + + expr = ( + entity | + primitive | + "(" (primitive | entity) ".." (primitive | entity) <: ")" %range | + "[" recur "]" %lookup + ); + + hash_accessors = ( + "[" recur "]" %call | + + ".first" %{ + EMIT("buildin", rb_str_new2("first")) + } | + + ".last" %{ + EMIT("buildin", rb_str_new2("last")) + } | + + ".size" %{ + EMIT("buildin", rb_str_new2("size")) + } | + + "." ((alpha [A-Za-z0-9_\-]*) - ("first"|"last"|"size")) >mark %{ + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + ); + + main := ( + + expr <: (hash_accessors)* + + ); + +}%% + +%% write data nofinal; + +// def self.emit(sym, data, tokens) +// puts "emitting: #{sym} -> #{data.inspect}" if $VERBOSE +// tokens.push [sym, data] +// end + +#define EMIT(sym, data) rb_ary_push(tokens, rb_ary_new3(2, ID2SYM(rb_intern(sym)), data)); + + +void liquid_context_parse_impl(VALUE text, VALUE tokens) +{ + char *p; + char *pe; + char *eof; + char *mark; + int cs, res = 0; + + if (RSTRING_LEN(text) <= 0) { + return; + } + + mark = p = RSTRING_PTR(text); + eof = pe = RSTRING_PTR(text) + RSTRING_LEN(text); + + %% write init; + %% write exec; +} + +VALUE liquid_context_parse(VALUE self, VALUE text) { + VALUE tokens; + + //printf("text: %s\n", RSTRING_PTR(text)); + + //Check_Type(text, T_STRING); + + tokens = rb_ary_new(); + liquid_context_parse_impl(text, tokens); + return tokens; +} + +static VALUE rb_Liquid; +static VALUE rb_Parser; + +void Init_liquid_ext() +{ + rb_Liquid = rb_define_module("Liquid"); + rb_Parser = rb_define_class_under(rb_Liquid, "Parser", rb_cObject); + rb_define_singleton_method(rb_Parser, "parse", liquid_context_parse, 1); +} diff --git a/ext/liquid/mkmf.log b/ext/liquid/mkmf.log new file mode 100644 index 0000000..3dd9739 --- /dev/null +++ b/ext/liquid/mkmf.log @@ -0,0 +1,22 @@ +have_library: checking for main() in -lc... -------------------- yes + +"/usr/bin/gcc-4.2 -o conftest -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/x86_64-darwin12.0.0 -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/ruby/backward -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 -I. -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -pipe conftest.c -L. -L/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib -L. -L'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib' -L/usr/local/lib -lruby-static -lpthread -ldl -lobjc " +checked program was: +/* begin */ +1: #include "ruby.h" +2: +3: int main() {return 0;} +/* end */ + +"/usr/bin/gcc-4.2 -o conftest -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/x86_64-darwin12.0.0 -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/ruby/backward -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 -I. -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -pipe conftest.c -L. -L/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib -L. -L'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib' -L/usr/local/lib -lruby-static -lc -lpthread -ldl -lobjc " +checked program was: +/* begin */ +1: #include "ruby.h" +2: +3: /*top*/ +4: int main() {return 0;} +5: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; } +/* end */ + +-------------------- + diff --git a/lib/liquid.rb b/lib/liquid.rb index c641dea..a8d2201 100644 --- a/lib/liquid.rb +++ b/lib/liquid.rb @@ -62,7 +62,7 @@ require 'liquid/standardfilters' require 'liquid/condition' require 'liquid/module_ex' require 'liquid/utils' -require 'liquid/parser' +require 'liquid_ext' # Load all the tags of the standard library # diff --git a/lib/liquid/parser.rb b/lib/liquid/parser.rb deleted file mode 100644 index c3d5fd9..0000000 --- a/lib/liquid/parser.rb +++ /dev/null @@ -1,1313 +0,0 @@ - -# line 1 "./lib/liquid/parser.rl" -# Parser for context#[] method. Generated through ragel from parser.rl -# Only modify parser.rl. Run rake ragel afterwards to generate this file. -# -#VERBOSE=true - - -# line 101 "./lib/liquid/parser.rl" - -# % fix syntax highlighting - - -module Liquid - module Parser - -# line 18 "./lib/liquid/parser.rb" -class << self - attr_accessor :_fsm_actions - private :_fsm_actions, :_fsm_actions= -end -self._fsm_actions = [ - 0, 1, 0, 1, 1, 1, 2, 1, - 3, 1, 4, 1, 5, 1, 6, 1, - 7, 1, 8, 1, 9, 1, 10, 1, - 11, 1, 12, 1, 13, 1, 14, 1, - 15, 2, 0, 11 -] - -class << self - attr_accessor :_fsm_trans_keys - private :_fsm_trans_keys, :_fsm_trans_keys= -end -self._fsm_trans_keys = [ - 0, 0, 34, 122, 34, 34, - 39, 39, 34, 122, 34, - 34, 34, 46, 34, 46, - 34, 122, 39, 39, 39, 46, - 39, 46, 34, 122, 48, - 57, 46, 57, 46, 57, - 34, 122, 0, 0, 48, 57, - 41, 57, 65, 122, 93, - 93, 93, 93, 65, 122, - 93, 93, 0, 0, 48, 57, - 41, 57, 41, 122, 41, - 122, 41, 122, 41, 122, - 41, 122, 41, 122, 41, 122, - 41, 122, 41, 122, 41, - 122, 41, 122, 41, 122, - 41, 122, 41, 122, 46, 57, - 46, 46, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 48, 57, - 48, 57, 93, 93, 93, - 93, 0, 0, 34, 34, - 39, 39, 46, 91, 45, 122, - 46, 93, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 46, 91, - 46, 91, 45, 122, 93, 93, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 0 -] - -class << self - attr_accessor :_fsm_key_spans - private :_fsm_key_spans, :_fsm_key_spans= -end -self._fsm_key_spans = [ - 0, 89, 1, 1, 89, 1, 13, 13, - 89, 1, 8, 8, 89, 10, 12, 12, - 89, 0, 10, 17, 58, 1, 1, 58, - 1, 0, 10, 17, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 12, 1, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 10, 10, 1, 1, 0, 1, - 1, 46, 78, 48, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 46, - 46, 78, 1, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78 -] - -class << self - attr_accessor :_fsm_index_offsets - private :_fsm_index_offsets, :_fsm_index_offsets= -end -self._fsm_index_offsets = [ - 0, 0, 90, 92, 94, 184, 186, 200, - 214, 304, 306, 315, 324, 414, 425, 438, - 451, 541, 542, 553, 571, 630, 632, 634, - 693, 695, 696, 707, 725, 808, 891, 974, - 1057, 1140, 1223, 1306, 1389, 1472, 1555, 1638, - 1721, 1804, 1887, 1900, 1902, 1981, 2060, 2139, - 2218, 2297, 2376, 2455, 2534, 2613, 2692, 2771, - 2850, 2929, 3008, 3019, 3030, 3032, 3034, 3035, - 3037, 3039, 3086, 3165, 3214, 3293, 3372, 3451, - 3530, 3609, 3688, 3767, 3846, 3925, 4004, 4083, - 4162, 4241, 4320, 4399, 4478, 4557, 4636, 4715, - 4794, 4873, 4952, 5031, 5110, 5189, 5268, 5347, - 5394, 5441, 5520, 5522, 5601, 5680, 5759, 5838, - 5917, 5996, 6075, 6154, 6233, 6312, 6391, 6470 -] - -class << self - attr_accessor :_fsm_indicies - private :_fsm_indicies, :_fsm_indicies= -end -self._fsm_indicies = [ - 0, 1, 1, 1, 1, 2, 3, 1, - 1, 4, 1, 4, 1, 1, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 1, 1, 1, 1, 1, 1, 1, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 7, 1, 1, 1, 1, 1, 6, - 6, 6, 6, 6, 8, 6, 6, 6, - 6, 6, 6, 6, 9, 6, 6, 6, - 6, 6, 10, 6, 6, 6, 6, 6, - 6, 1, 12, 11, 14, 13, 15, 1, - 1, 1, 1, 16, 1, 1, 1, 17, - 1, 17, 1, 1, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 1, 1, - 1, 1, 1, 1, 1, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 1, - 1, 1, 1, 1, 1, 19, 19, 19, - 19, 19, 20, 19, 19, 19, 19, 19, - 19, 19, 21, 19, 19, 19, 19, 19, - 22, 19, 19, 19, 19, 19, 19, 1, - 24, 23, 24, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 25, 23, - 24, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 26, 23, 27, 23, - 23, 23, 23, 15, 23, 23, 23, 15, - 23, 15, 23, 23, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 23, 23, - 23, 23, 23, 23, 23, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 23, - 23, 23, 23, 23, 23, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 23, - 29, 28, 29, 28, 28, 28, 28, 28, - 28, 30, 28, 29, 28, 28, 28, 28, - 28, 28, 31, 28, 16, 28, 28, 28, - 28, 32, 28, 28, 28, 16, 28, 16, - 28, 28, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 28, 28, 28, 28, - 28, 28, 28, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 28, 28, 28, - 28, 28, 28, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 28, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 1, 34, 1, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 1, 35, 1, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 1, 37, 1, 1, 1, 1, - 37, 1, 1, 1, 38, 1, 38, 1, - 1, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 1, 1, 1, 1, 1, - 1, 1, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 1, 1, 1, 1, - 1, 1, 40, 40, 40, 40, 40, 41, - 40, 40, 40, 40, 40, 40, 40, 42, - 40, 40, 40, 40, 40, 43, 40, 40, - 40, 40, 40, 40, 1, 44, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, - 1, 46, 1, 1, 1, 1, 47, 1, - 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 1, 1, 1, - 1, 1, 1, 48, 48, 48, 48, 48, - 49, 48, 48, 48, 48, 48, 50, 48, - 48, 48, 48, 48, 48, 51, 48, 48, - 48, 48, 48, 48, 48, 1, 53, 52, - 55, 54, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 54, 54, 55, 54, - 54, 54, 56, 56, 56, 56, 56, 57, - 56, 56, 56, 56, 56, 58, 56, 56, - 56, 56, 56, 56, 59, 56, 56, 56, - 56, 56, 56, 56, 54, 60, 52, 54, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 1, 62, 1, 1, 1, 1, - 1, 1, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 1, 63, 1, 1, - 1, 64, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 1, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 64, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 63, 1, 1, 1, 64, 1, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 1, 1, 1, 1, 1, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 64, 1, - 65, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 63, 1, 1, 1, 64, - 1, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 1, 1, 1, - 1, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 64, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 66, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 63, 1, - 1, 1, 64, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 1, 1, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 1, 1, 1, 1, 64, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 67, 64, 64, 64, 64, 64, 64, 64, - 1, 63, 1, 1, 1, 64, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 1, 1, - 1, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 1, 1, 1, 64, - 1, 64, 64, 64, 64, 68, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 69, 1, 1, 1, - 64, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 1, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 64, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 63, - 1, 1, 1, 64, 1, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 1, 1, 1, 1, 1, 1, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 1, 1, 1, 1, 64, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 70, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 71, 64, 64, 64, 64, - 64, 1, 63, 1, 1, 1, 64, 1, - 1, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 1, 1, 1, 1, - 1, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 1, 1, 1, - 64, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 72, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 73, 1, 1, - 1, 64, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 1, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 64, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 63, 1, 1, 1, 64, 1, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 1, 1, 1, 1, 1, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 64, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 70, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 63, 1, 1, 1, 64, - 1, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 1, 1, 1, - 1, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 64, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 74, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 63, 1, - 1, 1, 64, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 1, 1, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 1, 1, 1, 1, 64, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 75, 64, 64, 64, 64, 64, - 1, 63, 1, 1, 1, 64, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 1, 1, - 1, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 1, 1, 1, 64, - 1, 64, 64, 64, 64, 76, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 77, 1, 1, 1, - 64, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 1, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 64, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 78, - 1, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 1, 35, 1, 79, 80, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 79, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 79, 80, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 1, 1, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 79, - 1, 81, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 79, 80, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 1, 1, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 79, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 82, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 79, 80, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 1, 1, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 79, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 83, 79, 79, 79, 79, 79, 79, - 79, 1, 79, 80, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 1, 1, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 79, 1, 79, 79, - 79, 79, 84, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 79, 85, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 1, 1, - 1, 1, 1, 1, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 79, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 79, 80, 1, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 1, 1, 1, - 1, 1, 1, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 1, 1, - 1, 1, 79, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 86, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 87, 79, 79, 79, 79, 79, 1, 79, - 80, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 1, 1, 1, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 1, 1, 1, - 1, 79, 1, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 88, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 1, 79, 89, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 79, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 79, 80, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 1, 1, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 79, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 86, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 79, 80, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 1, 1, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 79, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 90, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 79, 80, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 1, 1, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 79, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 91, 79, 79, 79, 79, - 79, 1, 79, 80, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 1, 1, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 79, 1, 79, 79, - 79, 79, 92, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 79, 93, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 1, 1, - 1, 1, 1, 1, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 79, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 1, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 1, 97, 96, - 99, 98, 98, 12, 11, 14, 13, 100, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 101, 1, 102, 103, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 1, 1, 1, 1, - 1, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 104, 1, 1, 1, - 102, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 1, 105, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 106, 54, 55, 54, 107, 108, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 54, 54, 54, 54, - 54, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 109, 54, 55, 54, - 107, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 54, 107, 108, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 54, 54, 54, 54, 54, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 109, 54, 55, 54, 107, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 110, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 107, 108, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 54, 54, 54, 54, 54, 54, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 109, 54, 55, 54, 107, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 111, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 107, 108, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 54, 54, 54, 54, 54, 54, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 109, 54, 55, 54, 107, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 112, 107, 107, 107, 107, 107, 107, - 107, 54, 107, 108, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 54, 54, 54, 54, 54, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 109, 54, 55, 54, 107, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 113, 107, 107, 107, 107, 107, 107, - 54, 107, 114, 54, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 54, 54, - 54, 54, 54, 54, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 115, - 54, 55, 54, 107, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 107, 108, 54, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 54, 54, 54, - 54, 54, 54, 54, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 109, 54, - 55, 54, 107, 54, 116, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 54, 107, - 108, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 54, 54, 54, 54, - 54, 54, 54, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 109, 54, 55, - 54, 107, 54, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 117, 107, 107, - 107, 107, 107, 107, 107, 54, 107, 108, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 54, 54, 54, 54, - 54, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 109, 54, 55, 54, - 107, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 118, 107, 107, - 107, 107, 107, 107, 54, 107, 119, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 54, 54, 54, 54, 54, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 120, 54, 55, 54, 107, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 107, 108, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 54, 54, 54, 54, 54, 54, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 109, 54, 55, 54, 107, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 121, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 107, 108, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 54, 54, 54, 54, 54, 54, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 109, 54, 55, 54, 107, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 122, 54, 107, 108, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 54, 54, 54, 54, 54, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 109, 54, 55, 54, 107, 54, 107, 107, - 107, 107, 123, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 54, 107, 124, 54, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 54, 54, - 54, 54, 54, 54, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 125, - 54, 55, 54, 107, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 102, 103, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 1, 1, - 1, 1, 1, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 104, 1, - 1, 1, 102, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 126, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 1, 102, - 103, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 1, 1, 1, 1, - 1, 1, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 104, 1, 1, - 1, 102, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 127, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 102, 103, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 1, 1, 1, 1, - 1, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 104, 1, 1, 1, - 102, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 128, 102, 102, 102, - 102, 102, 102, 102, 1, 102, 103, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 1, 1, 1, 1, 1, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 104, 1, 1, 1, 102, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 129, 102, 102, 102, - 102, 102, 102, 1, 102, 130, 1, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 1, 1, 1, 1, 1, 1, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 131, 1, 1, 1, 102, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 102, 103, 1, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 1, 1, 1, 1, 1, 1, 1, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 104, 1, 1, 1, 102, 1, 132, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 1, 102, 103, 1, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 1, - 1, 1, 1, 1, 1, 1, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 104, 1, 1, 1, 102, 1, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 133, 102, 102, 102, 102, 102, 102, 102, - 1, 102, 103, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 1, 1, - 1, 1, 1, 1, 1, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 104, - 1, 1, 1, 102, 1, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 134, 102, 102, 102, 102, 102, 102, 1, - 102, 135, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 1, 1, - 1, 1, 1, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 136, 1, - 1, 1, 102, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 1, 102, - 103, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 1, 1, 1, 1, - 1, 1, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 104, 1, 1, - 1, 102, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 137, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 102, 103, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 1, 1, 1, 1, - 1, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 104, 1, 1, 1, - 102, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 138, 1, 102, 103, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 1, 1, 1, 1, 1, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 104, 1, 1, 1, 102, - 1, 102, 102, 102, 102, 139, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 102, 140, 1, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 1, 1, 1, 1, 1, 1, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 141, 1, 1, 1, 102, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 142, 1, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 143, 1, 144, 1, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 145, - 1, 146, 147, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 1, 1, - 1, 1, 1, 1, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 148, - 1, 1, 1, 146, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 99, 98, 146, 147, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 1, 1, 1, 1, 1, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 148, 1, 1, 1, 146, 1, 149, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 1, 146, 147, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 1, 1, - 1, 1, 1, 1, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 148, - 1, 1, 1, 146, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 150, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 146, 147, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 1, 1, - 1, 1, 1, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 148, 1, - 1, 1, 146, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 151, 146, - 146, 146, 146, 146, 146, 146, 1, 146, - 147, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 1, 1, 1, - 1, 1, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 148, 1, 1, - 1, 146, 1, 146, 146, 146, 146, 152, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 146, 153, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 1, 1, 1, 1, 1, - 1, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 154, 1, 1, 1, - 146, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 146, 147, 1, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 1, 1, 1, 1, 1, 1, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 148, 1, 1, 1, 146, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 155, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 156, 146, 146, - 146, 146, 146, 1, 146, 147, 1, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 1, 1, 1, 1, 1, 1, 1, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 148, 1, 1, 1, 146, 1, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 157, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 1, 146, 158, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 1, 1, 1, 1, 1, 1, 1, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 159, 1, 1, 1, 146, 1, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 1, 146, 147, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 1, 1, 1, 1, 1, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 148, 1, 1, 1, 146, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 155, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 1, 146, 147, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 1, 1, - 1, 1, 1, 1, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 148, - 1, 1, 1, 146, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 160, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 146, 147, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 1, 1, - 1, 1, 1, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 148, 1, - 1, 1, 146, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 161, 146, 146, 146, 146, 146, 1, 146, - 147, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 1, 1, 1, - 1, 1, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 148, 1, 1, - 1, 146, 1, 146, 146, 146, 146, 162, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 146, 163, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 1, 1, 1, 1, 1, - 1, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 164, 1, 1, 1, - 146, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 0 -] - -class << self - attr_accessor :_fsm_trans_targs - private :_fsm_trans_targs, :_fsm_trans_targs= -end -self._fsm_trans_targs = [ - 2, 0, 3, 4, 58, 95, 97, 60, - 99, 104, 108, 2, 63, 3, 64, 5, - 9, 13, 14, 44, 45, 50, 54, 5, - 6, 7, 8, 6, 9, 10, 11, 12, - 10, 14, 15, 16, 42, 17, 18, 19, - 28, 29, 34, 38, 17, 19, 65, 26, - 66, 82, 87, 91, 22, 25, 22, 67, - 68, 69, 74, 78, 67, 27, 65, 65, - 28, 30, 31, 32, 33, 65, 35, 37, - 36, 65, 39, 40, 41, 65, 43, 44, - 43, 46, 47, 48, 49, 43, 51, 53, - 52, 43, 55, 56, 57, 43, 95, 96, - 61, 62, 61, 98, 20, 21, 66, 20, - 21, 23, 24, 68, 23, 24, 70, 71, - 72, 73, 23, 24, 75, 76, 77, 23, - 24, 79, 80, 81, 23, 24, 83, 84, - 85, 86, 20, 21, 88, 89, 90, 20, - 21, 92, 93, 94, 20, 21, 59, 21, - 20, 21, 97, 20, 21, 100, 101, 102, - 103, 20, 21, 105, 107, 106, 20, 21, - 109, 110, 111, 20, 21 -] - -class << self - attr_accessor :_fsm_trans_actions - private :_fsm_trans_actions, :_fsm_trans_actions= -end -self._fsm_trans_actions = [ - 1, 0, 1, 0, 1, 1, 1, 0, - 1, 1, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 0, - 0, 19, 0, 1, 0, 0, 19, 0, - 1, 0, 9, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 0, 0, 9, 0, - 1, 1, 1, 1, 1, 1, 0, 23, - 1, 1, 1, 1, 33, 0, 11, 21, - 0, 0, 0, 0, 0, 17, 0, 0, - 0, 13, 0, 0, 0, 15, 11, 0, - 21, 0, 0, 0, 0, 17, 0, 0, - 0, 13, 0, 0, 0, 15, 0, 0, - 1, 1, 0, 23, 7, 7, 0, 31, - 31, 5, 5, 0, 31, 31, 0, 0, - 0, 0, 25, 25, 0, 0, 0, 27, - 27, 0, 0, 0, 29, 29, 0, 0, - 0, 0, 25, 25, 0, 0, 0, 27, - 27, 0, 0, 0, 29, 29, 0, 9, - 11, 11, 0, 21, 21, 0, 0, 0, - 0, 17, 17, 0, 0, 0, 13, 13, - 0, 0, 0, 15, 15 -] - -class << self - attr_accessor :_fsm_eof_actions - private :_fsm_eof_actions, :_fsm_eof_actions= -end -self._fsm_eof_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, - 19, 7, 31, 5, 31, 31, 31, 31, - 31, 25, 31, 31, 31, 27, 31, 31, - 31, 29, 31, 31, 31, 31, 25, 31, - 31, 31, 27, 31, 31, 31, 29, 9, - 11, 21, 3, 21, 21, 21, 21, 17, - 21, 21, 13, 21, 21, 21, 21, 15 -] - -class << self - attr_accessor :fsm_start -end -self.fsm_start = 1; -class << self - attr_accessor :fsm_first_final -end -self.fsm_first_final = 63; -class << self - attr_accessor :fsm_error -end -self.fsm_error = 0; - -class << self - attr_accessor :fsm_en_main -end -self.fsm_en_main = 1; - - -# line 108 "./lib/liquid/parser.rl" - - def self.emit(sym, type, data, tokens) - puts "emitting: #{type} #{sym} -> #{data.inspect}" if $VERBOSE - tokens.push [sym, data] - end - - def self.parse(data, tokens = []) - puts "--> self.parse with #{data.inspect}, #{tokens.inspect}" if $VERBOSE - - eof = data.length - - -# line 1058 "./lib/liquid/parser.rb" -begin - p ||= 0 - pe ||= data.length - cs = fsm_start -end - -# line 120 "./lib/liquid/parser.rl" - -# line 1067 "./lib/liquid/parser.rb" -begin # ragel flat - testEof = false - _slen, _trans, _keys, _inds, _acts, _nacts = nil - _goto_level = 0 - _resume = 10 - _eof_trans = 15 - _again = 20 - _test_eof = 30 - _out = 40 - while true - _trigger_goto = false - if _goto_level <= 0 - if p == pe - _goto_level = _test_eof - next - end - if cs == 0 - _goto_level = _out - next - end - end - if _goto_level <= _resume - _keys = cs << 1 - _inds = _fsm_index_offsets[cs] - _slen = _fsm_key_spans[cs] - _trans = if ( _slen > 0 && - _fsm_trans_keys[_keys] <= data[p].ord && - data[p].ord <= _fsm_trans_keys[_keys + 1] - ) then - _fsm_indicies[ _inds + data[p].ord - _fsm_trans_keys[_keys] ] - else - _fsm_indicies[ _inds + _slen ] - end - cs = _fsm_trans_targs[_trans] - if _fsm_trans_actions[_trans] != 0 - _acts = _fsm_trans_actions[_trans] - _nacts = _fsm_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _fsm_actions[_acts - 1] - when 0 then -# line 9 "./lib/liquid/parser.rl" - begin - - mark = p - end - when 2 then -# line 17 "./lib/liquid/parser.rl" - begin - - emit(:call, :instruction, nil, tokens) - end - when 3 then -# line 20 "./lib/liquid/parser.rl" - begin - - emit(:range, :instruction, nil, tokens) - end - when 4 then -# line 39 "./lib/liquid/parser.rl" - begin - emit(:id, :integer, Integer(data[mark..p-1]), tokens) end - when 5 then -# line 41 "./lib/liquid/parser.rl" - begin - emit(:id, :float, Float(data[mark..p-1]), tokens) end - when 6 then -# line 43 "./lib/liquid/parser.rl" - begin - emit(:id, :nil, nil, tokens) end - when 7 then -# line 44 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, true, tokens) end - when 8 then -# line 45 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, false, tokens) end - when 9 then -# line 47 "./lib/liquid/parser.rl" - begin - emit(:id, :string, data[mark+1..p-2], tokens) end - when 10 then -# line 52 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:lookup, :variable, nil, tokens) - end - when 11 then -# line 62 "./lib/liquid/parser.rl" - begin - - self.parse(data[mark..p-1], tokens) - end - when 12 then -# line 77 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "first", tokens) - end - when 13 then -# line 81 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "last", tokens) - end - when 14 then -# line 85 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "size", tokens) - end - when 15 then -# line 89 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:call, :variable, nil, tokens) - end -# line 1190 "./lib/liquid/parser.rb" - end # action switch - end - end - if _trigger_goto - next - end - end - if _goto_level <= _again - if cs == 0 - _goto_level = _out - next - end - p += 1 - if p != pe - _goto_level = _resume - next - end - end - if _goto_level <= _test_eof - if p == eof - begin - __acts = _fsm_eof_actions[cs] - __nacts = _fsm_actions[__acts] - __acts += 1 - while ( __nacts > 0 ) - __nacts -= 1 - __acts += 1 - case ( _fsm_actions[__acts-1] ) - when 1 then -# line 13 "./lib/liquid/parser.rl" - begin - - emit(:lookup, :instruction, nil, tokens) - end - when 2 then -# line 17 "./lib/liquid/parser.rl" - begin - - emit(:call, :instruction, nil, tokens) - end - when 3 then -# line 20 "./lib/liquid/parser.rl" - begin - - emit(:range, :instruction, nil, tokens) - end - when 4 then -# line 39 "./lib/liquid/parser.rl" - begin - emit(:id, :integer, Integer(data[mark..p-1]), tokens) end - when 5 then -# line 41 "./lib/liquid/parser.rl" - begin - emit(:id, :float, Float(data[mark..p-1]), tokens) end - when 6 then -# line 43 "./lib/liquid/parser.rl" - begin - emit(:id, :nil, nil, tokens) end - when 7 then -# line 44 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, true, tokens) end - when 8 then -# line 45 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, false, tokens) end - when 9 then -# line 47 "./lib/liquid/parser.rl" - begin - emit(:id, :string, data[mark+1..p-2], tokens) end - when 10 then -# line 52 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:lookup, :variable, nil, tokens) - end - when 12 then -# line 77 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "first", tokens) - end - when 13 then -# line 81 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "last", tokens) - end - when 14 then -# line 85 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "size", tokens) - end - when 15 then -# line 89 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:call, :variable, nil, tokens) - end -# line 1293 "./lib/liquid/parser.rb" - end - end - if _trigger_goto - next - end - end - end - end - if _goto_level <= _out - break - end - end - end - -# line 121 "./lib/liquid/parser.rl" - - puts "<-- #{tokens.inspect}" if $VERBOSE - return tokens - end - end -end \ No newline at end of file diff --git a/lib/liquid/parser.rl b/lib/liquid/parser.rl deleted file mode 100644 index 16375b6..0000000 --- a/lib/liquid/parser.rl +++ /dev/null @@ -1,126 +0,0 @@ -# Parser for context#[] method. Generated through ragel from parser.rl -# Only modify parser.rl. Run rake ragel afterwards to generate this file. -# -#VERBOSE=true - -%%{ - machine fsm; - - action mark { - mark = p - } - - action lookup { - emit(:lookup, :instruction, nil, tokens) - } - - action call { - emit(:call, :instruction, nil, tokens) - } - action range { - emit(:range, :instruction, nil, tokens) - } - - constants = ( "true" | "false" | "nil" | "null" ); - - # strings - string = "\"" any* "\"" | "'" any* "'"; - - # nothingness - nil = "nil" | "null" ; - - # numbers - integer = ('+'|'-')? digit+; - float = ('+'|'-')? digit+ '.' digit+; - - # simple values - primitive = ( - - integer >mark %{ emit(:id, :integer, Integer(data[mark..p-1]), tokens) } | - - float >mark %{ emit(:id, :float, Float(data[mark..p-1]), tokens) } | - - nil %{ emit(:id, :nil, nil, tokens) } | - "true" %{ emit(:id, :bool, true, tokens) } | - "false" %{ emit(:id, :bool, false, tokens)} | - - string >mark %{ emit(:id, :string, data[mark+1..p-2], tokens) } - - ); - - entity = ( - ((alpha [A-Za-z0-9_\-]*) - (constants)) >mark %{ - emit(:id, :label, data[mark..p-1], tokens) - emit(:lookup, :variable, nil, tokens) - } - ); - - # Because of recursion we cannot immediatly resolve the content of this in - # the current grammar. We simply re-invoke the parser here to descend into - # the substring - recur = ( - (any+ - ']') >mark %{ - self.parse(data[mark..p-1], tokens) - } - ); - - expr = ( - entity | - primitive | - "(" (primitive | entity) ".." (primitive | entity) <: ")" %range | - "[" recur "]" %lookup - ); - - hash_accessors = ( - "[" recur "]" %call | - - ".first" %{ - emit(:buildin, :symbol, "first", tokens) - } | - - ".last" %{ - emit(:buildin, :symbol, "last", tokens) - } | - - ".size" %{ - emit(:buildin, :symbol, "size", tokens) - } | - - "." ((alpha [A-Za-z0-9_\-]*) - ("first"|"last"|"size")) >mark %{ - emit(:id, :label, data[mark..p-1], tokens) - emit(:call, :variable, nil, tokens) - } - ); - - main := ( - - expr <: (hash_accessors)* - - ); - -}%% -# % fix syntax highlighting - - -module Liquid - module Parser - %% write data; - - def self.emit(sym, type, data, tokens) - puts "emitting: #{type} #{sym} -> #{data.inspect}" if $VERBOSE - tokens.push [sym, data] - end - - def self.parse(data, tokens = []) - puts "--> self.parse with #{data.inspect}, #{tokens.inspect}" if $VERBOSE - - eof = data.length - - %% write init; - %% write exec; - - puts "<-- #{tokens.inspect}" if $VERBOSE - return tokens - end - end -end \ No newline at end of file diff --git a/lib/liquid_ext.bundle b/lib/liquid_ext.bundle new file mode 100755 index 0000000..e35a56b Binary files /dev/null and b/lib/liquid_ext.bundle differ