OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3580 *depth = depth_acc; | 3580 *depth = depth_acc; |
3581 } | 3581 } |
3582 | 3582 |
3583 | 3583 |
3584 ObjectLiteral::Property* Parser::ParseObjectLiteralGetSet(bool is_getter, | 3584 ObjectLiteral::Property* Parser::ParseObjectLiteralGetSet(bool is_getter, |
3585 bool* ok) { | 3585 bool* ok) { |
3586 // Special handling of getter and setter syntax: | 3586 // Special handling of getter and setter syntax: |
3587 // { ... , get foo() { ... }, ... , set foo(v) { ... v ... } , ... } | 3587 // { ... , get foo() { ... }, ... , set foo(v) { ... v ... } , ... } |
3588 // We have already read the "get" or "set" keyword. | 3588 // We have already read the "get" or "set" keyword. |
3589 Token::Value next = Next(); | 3589 Token::Value next = Next(); |
3590 if (next == Token::IDENTIFIER || | 3590 // TODO(820): Allow NUMBER and STRING as well (and handle array indices). |
3591 next == Token::STRING || | 3591 if (next == Token::IDENTIFIER || Token::IsKeyword(next)) { |
3592 next == Token::NUMBER || | |
3593 Token::IsKeyword(next)) { | |
3594 Handle<String> name = | 3592 Handle<String> name = |
3595 factory()->LookupSymbol(scanner_.literal_string(), | 3593 factory()->LookupSymbol(scanner_.literal_string(), |
3596 scanner_.literal_length()); | 3594 scanner_.literal_length()); |
3597 FunctionLiteral* value = | 3595 FunctionLiteral* value = |
3598 ParseFunctionLiteral(name, | 3596 ParseFunctionLiteral(name, |
3599 RelocInfo::kNoPosition, | 3597 RelocInfo::kNoPosition, |
3600 DECLARATION, | 3598 DECLARATION, |
3601 CHECK_OK); | 3599 CHECK_OK); |
3602 ObjectLiteral::Property* property = | 3600 ObjectLiteral::Property* property = |
3603 NEW(ObjectLiteral::Property(is_getter, value)); | 3601 NEW(ObjectLiteral::Property(is_getter, value)); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3645 // called "get" or "set". | 3643 // called "get" or "set". |
3646 key = NEW(Literal(id)); | 3644 key = NEW(Literal(id)); |
3647 break; | 3645 break; |
3648 } | 3646 } |
3649 case Token::STRING: { | 3647 case Token::STRING: { |
3650 Consume(Token::STRING); | 3648 Consume(Token::STRING); |
3651 Handle<String> string = | 3649 Handle<String> string = |
3652 factory()->LookupSymbol(scanner_.literal_string(), | 3650 factory()->LookupSymbol(scanner_.literal_string(), |
3653 scanner_.literal_length()); | 3651 scanner_.literal_length()); |
3654 uint32_t index; | 3652 uint32_t index; |
3655 if (!string.is_null() && | 3653 if (!string.is_null() && string->AsArrayIndex(&index)) { |
3656 string->AsArrayIndex(&index)) { | |
3657 key = NewNumberLiteral(index); | 3654 key = NewNumberLiteral(index); |
3658 break; | 3655 break; |
3659 } | 3656 } |
3660 key = NEW(Literal(string)); | 3657 key = NEW(Literal(string)); |
3661 break; | 3658 break; |
3662 } | 3659 } |
3663 case Token::NUMBER: { | 3660 case Token::NUMBER: { |
3664 Consume(Token::NUMBER); | 3661 Consume(Token::NUMBER); |
3665 double value = | 3662 double value = |
3666 StringToDouble(scanner_.literal_string(), ALLOW_HEX | ALLOW_OCTALS); | 3663 StringToDouble(scanner_.literal_string(), ALLOW_HEX | ALLOW_OCTALS); |
(...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5241 parser.ParseLazy(script_source, name, | 5238 parser.ParseLazy(script_source, name, |
5242 start_position, end_position, is_expression); | 5239 start_position, end_position, is_expression); |
5243 return result; | 5240 return result; |
5244 } | 5241 } |
5245 | 5242 |
5246 | 5243 |
5247 #undef NEW | 5244 #undef NEW |
5248 | 5245 |
5249 | 5246 |
5250 } } // namespace v8::internal | 5247 } } // namespace v8::internal |
OLD | NEW |