| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2005 Maksim Orlovich <maksim@kde.org> | 2 * Copyright 2005 Maksim Orlovich <maksim@kde.org> |
| 3 * Copyright (C) 2006 Apple Computer, Inc. | 3 * Copyright (C) 2006 Apple Computer, Inc. |
| 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 if (namespaceURI.isNull()) | 458 if (namespaceURI.isNull()) |
| 459 return false; | 459 return false; |
| 460 localName = AtomicString(qName.substring(colon + 1)); | 460 localName = AtomicString(qName.substring(colon + 1)); |
| 461 } else { | 461 } else { |
| 462 localName = AtomicString(qName); | 462 localName = AtomicString(qName); |
| 463 } | 463 } |
| 464 | 464 |
| 465 return true; | 465 return true; |
| 466 } | 466 } |
| 467 | 467 |
| 468 PassOwnPtrWillBeRawPtr<Expression> Parser::parseStatement(const String& statemen
t, PassRefPtrWillBeRawPtr<XPathNSResolver> resolver, ExceptionState& exceptionSt
ate) | 468 Expression* Parser::parseStatement(const String& statement, XPathNSResolver* res
olver, ExceptionState& exceptionState) |
| 469 { | 469 { |
| 470 reset(statement); | 470 reset(statement); |
| 471 | 471 |
| 472 m_resolver = resolver; | 472 m_resolver = resolver; |
| 473 | 473 |
| 474 Parser* oldParser = currentParser; | 474 Parser* oldParser = currentParser; |
| 475 currentParser = this; | 475 currentParser = this; |
| 476 int parseError = xpathyyparse(this); | 476 int parseError = xpathyyparse(this); |
| 477 currentParser = oldParser; | 477 currentParser = oldParser; |
| 478 | 478 |
| 479 if (parseError) { | 479 if (parseError) { |
| 480 #if !ENABLE(OILPAN) | |
| 481 while (!m_parseNodes.isEmpty()) | |
| 482 delete m_parseNodes.takeAny(); | |
| 483 | |
| 484 HashSet<Vector<OwnPtr<Predicate> >*>::iterator pend = m_predicateVectors
.end(); | |
| 485 for (HashSet<Vector<OwnPtr<Predicate> >*>::iterator it = m_predicateVect
ors.begin(); it != pend; ++it) | |
| 486 delete *it; | |
| 487 m_predicateVectors.clear(); | |
| 488 | |
| 489 HashSet<Vector<OwnPtr<Expression> >*>::iterator eend = m_expressionVecto
rs.end(); | |
| 490 for (HashSet<Vector<OwnPtr<Expression> >*>::iterator it = m_expressionVe
ctors.begin(); it != eend; ++it) | |
| 491 delete *it; | |
| 492 m_expressionVectors.clear(); | |
| 493 | |
| 494 m_nodeTests.clear(); | |
| 495 #endif | |
| 496 | |
| 497 m_strings.clear(); | 480 m_strings.clear(); |
| 498 | 481 |
| 499 m_topExpr = nullptr; | 482 m_topExpr = nullptr; |
| 500 | 483 |
| 501 if (m_gotNamespaceError) | 484 if (m_gotNamespaceError) |
| 502 exceptionState.throwDOMException(NamespaceError, "The string '" + st
atement + "' contains unresolvable namespaces."); | 485 exceptionState.throwDOMException(NamespaceError, "The string '" + st
atement + "' contains unresolvable namespaces."); |
| 503 else | 486 else |
| 504 exceptionState.throwDOMException(SyntaxError, "The string '" + state
ment + "' is not a valid XPath expression."); | 487 exceptionState.throwDOMException(SyntaxError, "The string '" + state
ment + "' is not a valid XPath expression."); |
| 505 return nullptr; | 488 return nullptr; |
| 506 } | 489 } |
| 507 ASSERT(m_strings.size() == 0); | 490 ASSERT(m_strings.size() == 0); |
| 508 #if !ENABLE(OILPAN) | |
| 509 ASSERT(m_parseNodes.size() == 1); | |
| 510 ASSERT(*m_parseNodes.begin() == m_topExpr); | |
| 511 ASSERT(m_expressionVectors.size() == 0); | |
| 512 ASSERT(m_predicateVectors.size() == 0); | |
| 513 ASSERT(m_nodeTests.size() == 0); | |
| 514 m_parseNodes.clear(); | |
| 515 #endif | |
| 516 | |
| 517 Expression* result = m_topExpr; | 491 Expression* result = m_topExpr; |
| 518 m_topExpr = nullptr; | 492 m_topExpr = nullptr; |
| 519 | 493 |
| 520 return adoptPtrWillBeNoop(result); | 494 return result; |
| 521 } | |
| 522 | |
| 523 void Parser::registerParseNode(ParseNode* node) | |
| 524 { | |
| 525 #if !ENABLE(OILPAN) | |
| 526 if (node == 0) | |
| 527 return; | |
| 528 | |
| 529 ASSERT(!m_parseNodes.contains(node)); | |
| 530 | |
| 531 m_parseNodes.add(node); | |
| 532 #endif | |
| 533 } | |
| 534 | |
| 535 void Parser::unregisterParseNode(ParseNode* node) | |
| 536 { | |
| 537 #if !ENABLE(OILPAN) | |
| 538 if (node == 0) | |
| 539 return; | |
| 540 | |
| 541 ASSERT(m_parseNodes.contains(node)); | |
| 542 | |
| 543 m_parseNodes.remove(node); | |
| 544 #endif | |
| 545 } | |
| 546 | |
| 547 void Parser::registerPredicateVector(WillBeHeapVector<OwnPtrWillBeMember<Predica
te> >* vector) | |
| 548 { | |
| 549 #if !ENABLE(OILPAN) | |
| 550 if (vector == 0) | |
| 551 return; | |
| 552 | |
| 553 ASSERT(!m_predicateVectors.contains(vector)); | |
| 554 | |
| 555 m_predicateVectors.add(vector); | |
| 556 #endif | |
| 557 } | |
| 558 | |
| 559 void Parser::deletePredicateVector(WillBeHeapVector<OwnPtrWillBeMember<Predicate
> >* vector) | |
| 560 { | |
| 561 #if !ENABLE(OILPAN) | |
| 562 if (vector == 0) | |
| 563 return; | |
| 564 | |
| 565 ASSERT(m_predicateVectors.contains(vector)); | |
| 566 | |
| 567 m_predicateVectors.remove(vector); | |
| 568 delete vector; | |
| 569 #endif | |
| 570 } | |
| 571 | |
| 572 | |
| 573 void Parser::registerExpressionVector(WillBeHeapVector<OwnPtrWillBeMember<Expres
sion> >* vector) | |
| 574 { | |
| 575 #if !ENABLE(OILPAN) | |
| 576 if (vector == 0) | |
| 577 return; | |
| 578 | |
| 579 ASSERT(!m_expressionVectors.contains(vector)); | |
| 580 | |
| 581 m_expressionVectors.add(vector); | |
| 582 #endif | |
| 583 } | |
| 584 | |
| 585 void Parser::deleteExpressionVector(WillBeHeapVector<OwnPtrWillBeMember<Expressi
on> >* vector) | |
| 586 { | |
| 587 #if !ENABLE(OILPAN) | |
| 588 if (vector == 0) | |
| 589 return; | |
| 590 | |
| 591 ASSERT(m_expressionVectors.contains(vector)); | |
| 592 | |
| 593 m_expressionVectors.remove(vector); | |
| 594 delete vector; | |
| 595 #endif | |
| 596 } | 495 } |
| 597 | 496 |
| 598 void Parser::registerString(String* s) | 497 void Parser::registerString(String* s) |
| 599 { | 498 { |
| 600 if (s == 0) | 499 if (s == 0) |
| 601 return; | 500 return; |
| 602 | 501 |
| 603 ASSERT(!m_strings.contains(s)); | 502 ASSERT(!m_strings.contains(s)); |
| 604 | 503 |
| 605 m_strings.add(adoptPtr(s)); | 504 m_strings.add(adoptPtr(s)); |
| 606 } | 505 } |
| 607 | 506 |
| 608 void Parser::deleteString(String* s) | 507 void Parser::deleteString(String* s) |
| 609 { | 508 { |
| 610 if (s == 0) | 509 if (s == 0) |
| 611 return; | 510 return; |
| 612 | 511 |
| 613 ASSERT(m_strings.contains(s)); | 512 ASSERT(m_strings.contains(s)); |
| 614 | 513 |
| 615 m_strings.remove(s); | 514 m_strings.remove(s); |
| 616 } | 515 } |
| 617 | |
| 618 void Parser::registerNodeTest(Step::NodeTest* t) | |
| 619 { | |
| 620 #if !ENABLE(OILPAN) | |
| 621 if (t == 0) | |
| 622 return; | |
| 623 | |
| 624 ASSERT(!m_nodeTests.contains(t)); | |
| 625 | |
| 626 m_nodeTests.add(adoptPtr(t)); | |
| 627 #endif | |
| 628 } | |
| 629 | |
| 630 void Parser::deleteNodeTest(Step::NodeTest* t) | |
| 631 { | |
| 632 #if !ENABLE(OILPAN) | |
| 633 if (t == 0) | |
| 634 return; | |
| 635 | |
| 636 ASSERT(m_nodeTests.contains(t)); | |
| 637 | |
| 638 m_nodeTests.remove(t); | |
| 639 #endif | |
| 640 } | |
| 641 | |
| OLD | NEW |