diff options
author | Adrian Thurston <thurston@complang.org> | 2015-01-16 17:09:27 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-01-16 17:10:12 -0500 |
commit | ed5633e2a90d1ab175ed9d7e75a39f9a0d3ea357 (patch) | |
tree | 0f4d61b4640ad5c981b1af4a63a0f105039797b8 /test | |
parent | 59180fc43e2a9c983df2609a956f6dfa707f786a (diff) | |
download | colm-ed5633e2a90d1ab175ed9d7e75a39f9a0d3ea357.tar.gz |
list pushing and popping improvements for object semantics, test case updates
Diffstat (limited to 'test')
-rw-r--r-- | test/generate1.lm | 4 | ||||
-rw-r--r-- | test/generate2.lm | 48 |
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] |