summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2013-03-23 13:31:20 -0400
committerAdrian Thurston <thurston@complang.org>2013-03-23 13:31:20 -0400
commit69153ffd853c41064a85f7331e114501d7d4c434 (patch)
treee25ffc223f94f11d3e6a5fc24e800d5577eaa8f8
parent64303886013e4b0b84db46c4a447b41c8dab0596 (diff)
downloadcolm-69153ffd853c41064a85f7331e114501d7d4c434.tar.gz
tilde data in patterns
-rw-r--r--colm/load.cc27
-rw-r--r--test/sprintf.exp1
-rw-r--r--test/sprintf.lm3
-rw-r--r--test/string.exp2
-rw-r--r--test/string.in2
-rw-r--r--test/string.lm7
6 files changed, 37 insertions, 5 deletions
diff --git a/colm/load.cc b/colm/load.cc
index c36868e7..140d86b5 100644
--- a/colm/load.cc
+++ b/colm/load.cc
@@ -462,6 +462,20 @@ struct LoadSource
if ( PatternEl.LitpatElList() != 0 ) {
list = walkLitpatElList( PatternEl.LitpatElList(), PatternEl.Term().Nl() );
}
+ else if ( PatternEl.TildeData() != 0 ) {
+ String patternData = PatternEl.TildeData().text().c_str();
+ PatternItem *patternItem = PatternItem::cons( internal, patternData,
+ PatternItem::InputText );
+ PatternItemList *data = PatternItemList::cons( patternItem );
+
+ patternData = PatternEl.Nl().text().c_str();
+ patternItem = PatternItem::cons( internal, patternData,
+ PatternItem::InputText );
+ PatternItemList *term = PatternItemList::cons( patternItem );
+
+ list = patListConcat( data, term );
+
+ }
else if ( PatternEl.OptLabel() != 0 ) {
LangVarRef *varRef = walkOptLabel( PatternEl.OptLabel() );
PatternItemList *typeOrLitList = walkPatternElTypeOrLit( PatternEl.TypeOrLit() );
@@ -521,6 +535,19 @@ struct LoadSource
if ( patternTopEl.LitpatElList() != 0 ) {
list = walkLitpatElList( patternTopEl.LitpatElList(), patternTopEl.Term().Nl() );
}
+ else if ( patternTopEl.TildeData() != 0 ) {
+ String patternData = patternTopEl.TildeData().text().c_str();
+ PatternItem *patternItem = PatternItem::cons( internal, patternData,
+ PatternItem::InputText );
+ PatternItemList *data = PatternItemList::cons( patternItem );
+
+ patternData = patternTopEl.Nl().text().c_str();
+ patternItem = PatternItem::cons( internal, patternData,
+ PatternItem::InputText );
+ PatternItemList *term = PatternItemList::cons( patternItem );
+
+ list = patListConcat( data, term );
+ }
else if ( patternTopEl.PatternElList() != 0 ) {
list = walkPatternElList( patternTopEl.PatternElList() );
}
diff --git a/test/sprintf.exp b/test/sprintf.exp
deleted file mode 100644
index 8def2489..00000000
--- a/test/sprintf.exp
+++ /dev/null
@@ -1 +0,0 @@
-000001b0
diff --git a/test/sprintf.lm b/test/sprintf.lm
index 9af9817c..b2a65fa2 100644
--- a/test/sprintf.lm
+++ b/test/sprintf.lm
@@ -1 +1,4 @@
+##### LM #####
print( sprintf( "%08x\n" (256 + 11 * 16) ) )
+##### EXP #####
+000001b0
diff --git a/test/string.exp b/test/string.exp
deleted file mode 100644
index 0962bae8..00000000
--- a/test/string.exp
+++ /dev/null
@@ -1,2 +0,0 @@
-yes
-<start><expr_list><expr_list><expr_list></expr_list><expr><expr><term><primary><ident>a</ident></primary></term></expr><_literal_0009>+</_literal_0009><term><primary><string><_literal_000f>"</_literal_000f><_repeat_str_item><str_item><str_chr>%{{</str_chr></str_item></_repeat_str_item><_literal_000f>"</_literal_000f></string></primary></term></expr><_literal_000d>;</_literal_000d></expr_list><expr><term><term><primary><number>1</number></primary></term><_literal_000b>*</_literal_000b><primary><number>2</number></primary></term></expr><_literal_000d>;</_literal_000d></expr_list></start>
diff --git a/test/string.in b/test/string.in
deleted file mode 100644
index 8aef536f..00000000
--- a/test/string.in
+++ /dev/null
@@ -1,2 +0,0 @@
-a + "%{{"; 1 * 2;
-
diff --git a/test/string.lm b/test/string.lm
index c16561fe..fa2b8173 100644
--- a/test/string.lm
+++ b/test/string.lm
@@ -1,3 +1,4 @@
+##### LM #####
lex
token str_escape /'\\' any/
token str_chr /[^\\"]+/
@@ -51,3 +52,9 @@ def start
parse S: start[stdin]
print_xml( S.tree )
print( '\n' )
+##### IN #####
+a + "%{{"; 1 * 2;
+
+##### EXP #####
+yes
+<start><expr_list><expr_list><expr_list></expr_list><expr><expr><term><primary><ident>a</ident></primary></term></expr><_literal_0009>+</_literal_0009><term><primary><string><_literal_000f>"</_literal_000f><_repeat_str_item><str_item><str_chr>%{{</str_chr></str_item></_repeat_str_item><_literal_000f>"</_literal_000f></string></primary></term></expr><_literal_000d>;</_literal_000d></expr_list><expr><term><term><primary><number>1</number></primary></term><_literal_000b>*</_literal_000b><primary><number>2</number></primary></term></expr><_literal_000d>;</_literal_000d></expr_list></start>