Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: Source/core/xml/XPathParser.cpp

Issue 1099613003: Oilpan: have xml/ objects on the heap by default. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: simplify XPathResult dtor Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/xml/XPathParser.h ('k') | Source/core/xml/XPathPath.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 for (auto& predicate : m_predicateVectors)
485 delete predicate;
486 m_predicateVectors.clear();
487
488 for (auto& expression : m_expressionVectors)
489 delete expression;
490 m_expressionVectors.clear();
491
492 m_nodeTests.clear();
493 #endif
494
495 m_strings.clear(); 480 m_strings.clear();
496 481
497 m_topExpr = nullptr; 482 m_topExpr = nullptr;
498 483
499 if (m_gotNamespaceError) 484 if (m_gotNamespaceError)
500 exceptionState.throwDOMException(NamespaceError, "The string '" + st atement + "' contains unresolvable namespaces."); 485 exceptionState.throwDOMException(NamespaceError, "The string '" + st atement + "' contains unresolvable namespaces.");
501 else 486 else
502 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.");
503 return nullptr; 488 return nullptr;
504 } 489 }
505 ASSERT(m_strings.size() == 0); 490 ASSERT(m_strings.size() == 0);
506 #if !ENABLE(OILPAN)
507 ASSERT(m_parseNodes.size() == 1);
508 ASSERT(*m_parseNodes.begin() == m_topExpr);
509 ASSERT(m_expressionVectors.size() == 0);
510 ASSERT(m_predicateVectors.size() == 0);
511 ASSERT(m_nodeTests.size() == 0);
512 m_parseNodes.clear();
513 #endif
514
515 Expression* result = m_topExpr; 491 Expression* result = m_topExpr;
516 m_topExpr = nullptr; 492 m_topExpr = nullptr;
517 493
518 return adoptPtrWillBeNoop(result); 494 return result;
519 }
520
521 void Parser::registerParseNode(ParseNode* node)
522 {
523 #if !ENABLE(OILPAN)
524 if (node == 0)
525 return;
526
527 ASSERT(!m_parseNodes.contains(node));
528
529 m_parseNodes.add(node);
530 #endif
531 }
532
533 void Parser::unregisterParseNode(ParseNode* node)
534 {
535 #if !ENABLE(OILPAN)
536 if (node == 0)
537 return;
538
539 ASSERT(m_parseNodes.contains(node));
540
541 m_parseNodes.remove(node);
542 #endif
543 }
544
545 void Parser::registerPredicateVector(WillBeHeapVector<OwnPtrWillBeMember<Predica te>>* vector)
546 {
547 #if !ENABLE(OILPAN)
548 if (vector == 0)
549 return;
550
551 ASSERT(!m_predicateVectors.contains(vector));
552
553 m_predicateVectors.add(vector);
554 #endif
555 }
556
557 void Parser::deletePredicateVector(WillBeHeapVector<OwnPtrWillBeMember<Predicate >>* vector)
558 {
559 #if !ENABLE(OILPAN)
560 if (vector == 0)
561 return;
562
563 ASSERT(m_predicateVectors.contains(vector));
564
565 m_predicateVectors.remove(vector);
566 delete vector;
567 #endif
568 }
569
570
571 void Parser::registerExpressionVector(WillBeHeapVector<OwnPtrWillBeMember<Expres sion>>* vector)
572 {
573 #if !ENABLE(OILPAN)
574 if (vector == 0)
575 return;
576
577 ASSERT(!m_expressionVectors.contains(vector));
578
579 m_expressionVectors.add(vector);
580 #endif
581 }
582
583 void Parser::deleteExpressionVector(WillBeHeapVector<OwnPtrWillBeMember<Expressi on>>* vector)
584 {
585 #if !ENABLE(OILPAN)
586 if (vector == 0)
587 return;
588
589 ASSERT(m_expressionVectors.contains(vector));
590
591 m_expressionVectors.remove(vector);
592 delete vector;
593 #endif
594 } 495 }
595 496
596 void Parser::registerString(String* s) 497 void Parser::registerString(String* s)
597 { 498 {
598 if (s == 0) 499 if (s == 0)
599 return; 500 return;
600 501
601 ASSERT(!m_strings.contains(s)); 502 ASSERT(!m_strings.contains(s));
602 503
603 m_strings.add(adoptPtr(s)); 504 m_strings.add(adoptPtr(s));
604 } 505 }
605 506
606 void Parser::deleteString(String* s) 507 void Parser::deleteString(String* s)
607 { 508 {
608 if (s == 0) 509 if (s == 0)
609 return; 510 return;
610 511
611 ASSERT(m_strings.contains(s)); 512 ASSERT(m_strings.contains(s));
612 513
613 m_strings.remove(s); 514 m_strings.remove(s);
614 } 515 }
615
616 void Parser::registerNodeTest(Step::NodeTest* t)
617 {
618 #if !ENABLE(OILPAN)
619 if (t == 0)
620 return;
621
622 ASSERT(!m_nodeTests.contains(t));
623
624 m_nodeTests.add(adoptPtr(t));
625 #endif
626 }
627
628 void Parser::deleteNodeTest(Step::NodeTest* t)
629 {
630 #if !ENABLE(OILPAN)
631 if (t == 0)
632 return;
633
634 ASSERT(m_nodeTests.contains(t));
635
636 m_nodeTests.remove(t);
637 #endif
638 }
639
OLDNEW
« no previous file with comments | « Source/core/xml/XPathParser.h ('k') | Source/core/xml/XPathPath.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698