summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-16 17:09:27 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-16 17:10:12 -0500
commited5633e2a90d1ab175ed9d7e75a39f9a0d3ea357 (patch)
tree0f4d61b4640ad5c981b1af4a63a0f105039797b8 /test
parent59180fc43e2a9c983df2609a956f6dfa707f786a (diff)
downloadcolm-ed5633e2a90d1ab175ed9d7e75a39f9a0d3ea357.tar.gz
list pushing and popping improvements for object semantics, test case updates
Diffstat (limited to 'test')
-rw-r--r--test/generate1.lm4
-rw-r--r--test/generate2.lm48
2 files changed, 32 insertions, 20 deletions
diff --git a/test/generate1.lm b/test/generate1.lm
index adf739f0..54a342a4 100644
--- a/test/generate1.lm
+++ b/test/generate1.lm
@@ -117,7 +117,7 @@ context generate
IntEl->Int = data_length
IndentStack->push( IntEl )
} else {
- while data_length < IndentStack->top {
+ while data_length < Top->Int {
# The indentation level is less than the level on the top of
# the stack. Pop the level and send one dedent. This flow of
# control will execute until we find the right indentation level
@@ -126,6 +126,8 @@ context generate
# Send as a DEDENT
input->push( make_token( typeid<DEDENT> '' ) )
+
+ Top = IndentStack->top
}
}
diff --git a/test/generate2.lm b/test/generate2.lm
index bb0ced2d..1637044a 100644
--- a/test/generate2.lm
+++ b/test/generate2.lm
@@ -1,8 +1,18 @@
context generate
- def open_item
+ struct open_item
type: str
num: int
- []
+
+ list_el el
+ end
+
+ open_item new_open_item( type: str num: int )
+ {
+ OI: open_item = new open_item
+ OI->type = type
+ OI->num = num
+ return OI
+ }
OpenStack: list<open_item>
@@ -13,7 +23,7 @@ context generate
{
input->pull( match_length )
- cons OI: open_item( '{' match_length ) []
+ OI: open_item = new_open_item( '{' match_length )
OpenStack->push( OI )
i: int = 0
while ( i < match_length ) {
@@ -29,14 +39,14 @@ context generate
token tmp1 /'}'+/
{
- if OpenStack->length > 0 && OpenStack->top.type == '{' {
+ if OpenStack->length > 0 && OpenStack->top->type == '{' {
length: int = 3
if ( length > match_length )
length = match_length
Top: open_item = OpenStack->pop()
- if ( length > Top.num )
- length = Top.num
+ if ( length > Top->num )
+ length = Top->num
if ( length == 1 )
input->push( make_token( typeid<ccurly1> input->pull( 1 ) ) )
@@ -45,9 +55,9 @@ context generate
else if ( length == 3 )
input->push( make_token( typeid<ccurly3> input->pull( 3 ) ) )
- Top.num = Top.num - length
+ Top->num = Top->num - length
- if ( Top.num > 0 )
+ if ( Top->num > 0 )
OpenStack->push( Top )
}
else {
@@ -58,7 +68,7 @@ context generate
token osquare /'['+/
{
input->pull( match_length )
- OI: open_item = construct open_item( '[' match_length ) []
+ OI: open_item = new_open_item( '[' match_length )
OpenStack->push( OI )
i: int = 0
while ( i < match_length ) {
@@ -73,23 +83,23 @@ context generate
token tmp2 /']'+/
{
- if OpenStack->length > 0 && OpenStack->top.type == '[' {
+ if OpenStack->length > 0 && OpenStack->top->type == '[' {
length: int = 2
if ( length > match_length )
length = match_length
Top: open_item = OpenStack->pop()
- if ( length > Top.num )
- length = Top.num
+ if ( length > Top->num )
+ length = Top->num
if ( length == 1 )
input->push( make_token( typeid<csquare1> input->pull( 1 ) ) )
else if ( length == 2 )
input->push( make_token( typeid<csquare2> input->pull( 2 ) ) )
- Top.num = Top.num - length
+ Top->num = Top->num - length
- if ( Top.num > 0 )
+ if ( Top->num > 0 )
OpenStack->push( Top )
}
else {
@@ -104,16 +114,16 @@ context generate
while ( OpenStack->length > 0 ) {
Top: open_item = OpenStack->pop()
i: int
- if ( Top.type == '{' ) {
+ if ( Top->type == '{' ) {
i = 0
- while ( i < Top.num ) {
+ while ( i < Top->num ) {
input->push( make_token( typeid<missing_curly> '}' ) )
i = i + 1
}
}
- else if ( Top.type == '[' ) {
+ else if ( Top->type == '[' ) {
i = 0
- while ( i < Top.num ) {
+ while ( i < Top->num ) {
input->push( make_token( typeid<missing_square> ']' ) )
i = i + 1
}
@@ -193,7 +203,7 @@ end # generate
Generate: generate = new generate
Generate->OpenStack = new list<generate::open_item>
-Sentinal: generate::open_item = construct generate::open_item( '** SENTINAL **' 1 ) []
+Sentinal: generate::open_item = new_open_item( '** SENTINAL **' 1 )
Generate->OpenStack->push( Sentinal )
parse S: generate::start(Generate)[stdin]