Allow drop patterns to execute lexer user code blocks

This commit is contained in:
josh committed 2026-02-13 20:45:08 -05:00
1 parent 43c0f50874
commit f4bc719aed
5 files changed
+99 -4

No files matched your search

+35 -1
View File
@@ -1483,7 +1483,7 @@ EOF
if %w[c cpp].include?(language)
it "allows a user function to free token node memory in tree mode" do
write_grammar <<EOF
write_grammar <<EOF
<<
static void free_token(Token * token)
{
@@ -1510,6 +1510,40 @@ EOF
expect(results.status).to eq 0
end
end
it "executes code blocks associated with drop statements" do
if language == "d"
write_grammar <<EOF
<<
import std.stdio;
>>
drop /\\s+/;
drop /#(.*)\\n/ <<
stderr.write("comment: ", match);
>>
token a;
Start -> a;
EOF
else
write_grammar <<EOF
<<
#include <stdio.h>
#include <string.h>
>>
drop /\\s+/;
drop /#(.*)\\n/ <<
fprintf(stderr, "comment: %.*s", (int)match_length, match);
>>
token a;
Start -> a;
EOF
end
run_propane(language: language)
compile("spec/test_drop_code_block.#{language}", language: language)
results = run_test(language: language)
expect(results.stderr).to match %r{comment: # comment 1\n.*comment: # comment 2}m
expect(results.status).to eq 0
end
end
end
end