summaryrefslogtreecommitdiff
path: root/test/trans.d/case/gotocallret3_ruby.rl
diff options
context:
space:
mode:
Diffstat (limited to 'test/trans.d/case/gotocallret3_ruby.rl')
-rw-r--r--test/trans.d/case/gotocallret3_ruby.rl103
1 files changed, 103 insertions, 0 deletions
diff --git a/test/trans.d/case/gotocallret3_ruby.rl b/test/trans.d/case/gotocallret3_ruby.rl
new file mode 100644
index 00000000..78677d33
--- /dev/null
+++ b/test/trans.d/case/gotocallret3_ruby.rl
@@ -0,0 +1,103 @@
+#
+# @LANG: ruby
+# @GENERATED: true
+#
+
+
+%%{
+ machine gotocallret;
+
+ # A reference to a state in an unused action caused a segfault in 5.8. */
+ action unusedAction {fentry(garble_line);
+}
+
+ action err_garbling_line {print( "error: garbling line\n" );
+}
+ action goto_main {fnext main;}
+ action recovery_failed {print( "error: failed to recover\n" );
+}
+
+ # Error machine, consumes to end of
+ # line, then starts the main line over.
+ garble_line := ( (any-'\n')*'\n')
+ >err_garbling_line
+ @goto_main
+ $/recovery_failed;
+
+ action hold_and_return {fhold;fnret;}
+
+ # Look for a string of alphas or of digits,
+ # on anything else, hold the character and return.
+ alp_comm := alpha+ $!hold_and_return;
+ dig_comm := digit+ $!hold_and_return;
+
+ # Choose which to machine to call into based on the command.
+ action comm_arg {if ( comm >= 97 )
+ fncall alp_comm;
+else
+ fncall dig_comm;
+end
+}
+
+ # Specifies command string. Note that the arg is left out.
+ command = (
+ [a-z0-9] @{comm = fc;
+} ' ' @comm_arg @{print( "prints\n" );
+} '\n'
+ ) @{print( "correct command\n" );
+};
+
+ # Any number of commands. If there is an
+ # error anywhere, garble the line.
+ main := command* $!{fhold;fnext garble_line;};
+}%%
+
+
+
+%% write data;
+
+def run_machine( data )
+ p = 0
+ pe = data.length
+ eof = data.length
+ cs = 0;
+ _m =
+ _a =
+ buffer = Array.new
+ blen = 0
+comm = 1
+top = 1
+stack = Array.new
+ %% write init;
+ %% write exec;
+ if cs >= gotocallret_first_final
+ puts "ACCEPT"
+ else
+ puts "FAIL"
+ end
+end
+
+inp = [
+"lkajsdf\n",
+"2134\n",
+"(\n",
+"\n",
+"*234234()0909 092 -234aslkf09`1 11\n",
+"1\n",
+"909\n",
+"1 a\n",
+"11 1\n",
+"a 1\n",
+"aa a\n",
+"1 1\n",
+"1 123456\n",
+"a a\n",
+"a abcdef\n",
+"h",
+"a aa1",
+]
+
+inplen = 17
+
+inp.each { |str| run_machine(str) }
+