diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-09-21 20:21:03 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-09-21 20:21:03 (GMT) |
| commit | 644c1307124dffd13268445d0aebaed13a090c78 (patch) | |
| tree | e0d1ba738b7adbb484ba6d1fb3ae094e0c94b610 /src/pim/Parser.cpp | |
| parent | 939a04d3c77bf9aa8d54e912f5e12817de51756c (diff) | |
| download | powder-644c1307124dffd13268445d0aebaed13a090c78.zip powder-644c1307124dffd13268445d0aebaed13a090c78.tar.gz | |
Set properties with integer.property
Diffstat (limited to 'src/pim/Parser.cpp')
| -rw-r--r-- | src/pim/Parser.cpp | 83 |
1 files changed, 29 insertions, 54 deletions
diff --git a/src/pim/Parser.cpp b/src/pim/Parser.cpp index 75af21d..378a252 100644 --- a/src/pim/Parser.cpp +++ b/src/pim/Parser.cpp @@ -438,17 +438,26 @@ namespace pim } /* - <assigment statement> ::= identifier = <expression> + <assigment statement> ::= identifier = <expression> | identifier.property = <expression> */ void Parser::assigmentStatement() { std::string variable = token.Source; - //generator->PushVariableAddress(token.Source); expect(Token::Identifier); - expect(Token::AssignSymbol); - expression(); - //generator->Store(); - generator->StoreVariable(variable); + if(accept(Token::AssignSymbol)) + { + expression(); + generator->StoreVariable(variable); + } + else if(accept(Token::DotSymbol)) + { + std::string property = token.Source; + expect(Token::Identifier); + expect(Token::AssignSymbol); + expression(); + generator->LoadVariable(variable); + generator->StoreProperty(property); + } } /* @@ -533,56 +542,10 @@ namespace pim } if(doNegate) generator->Negate(); - /*if(!accept(Token::Identifier)) - { - if(!accept(Token::IntegerConstant)) - { - if(!accept(Token::DecimalConstant)) - { - if(!accept(Token::LeftBracket)) - { - throw ParserExpectException(token, "identifier or constant"); - } - else - { - expression(); - expect(Token::RightBracket); - } - } - else - { - if(doNegate) - { - doNegate = false; - generator->Constant("-" + factor); - } - else - generator->Constant(factor); - } - } - else - { - if(doNegate) - { - doNegate = false; - generator->Constant("-" + factor); - } - else - generator->Constant(factor); - } - } - else - { - generator->LoadVariable(factor); - } - if(doNegate) - { - generator->Negate(); - }*/ } /* - <variable value> ::= <function call> | identifier | <particle action> + <variable value> ::= <function call> | identifier | identifier.property | <particle action> */ void Parser::variableValue() { @@ -596,7 +559,17 @@ namespace pim } else { - generator->LoadVariable(variable); + if(accept(Token::DotSymbol)) + { + std::string property = token.Source; + expect(Token::Identifier); + generator->LoadVariable(variable); + generator->LoadProperty(property); + } + else + { + generator->LoadVariable(variable); + } } } else @@ -618,8 +591,10 @@ namespace pim } else token = scanner->NextToken(); + std::cout << "Symbol " << Token::SymbolNames[symbol] << " " << lastToken.Source << std::endl; return true; } + std::cout << "Bad Symbol " << Token::SymbolNames[symbol] << " " << token.Source << " (" << token.GetName() << ")" << std::endl; return false; } |
