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

Side by Side Diff: third_party/WebKit/Source/platform/text/BidiResolver.h

Issue 2811453002: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/text (Closed)
Patch Set: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/text Created 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved. 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008 Apple Inc. All right reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 30 matching lines...) Expand all
41 public: 41 public:
42 MidpointState() { reset(); } 42 MidpointState() { reset(); }
43 43
44 void reset() { 44 void reset() {
45 m_numMidpoints = 0; 45 m_numMidpoints = 0;
46 m_currentMidpoint = 0; 46 m_currentMidpoint = 0;
47 m_betweenMidpoints = false; 47 m_betweenMidpoints = false;
48 } 48 }
49 49
50 void startIgnoringSpaces(const Iterator& midpoint) { 50 void startIgnoringSpaces(const Iterator& midpoint) {
51 ASSERT(!(m_numMidpoints % 2)); 51 DCHECK(!(m_numMidpoints % 2));
52 addMidpoint(midpoint); 52 addMidpoint(midpoint);
53 } 53 }
54 54
55 void stopIgnoringSpaces(const Iterator& midpoint) { 55 void stopIgnoringSpaces(const Iterator& midpoint) {
56 ASSERT(m_numMidpoints % 2); 56 DCHECK(m_numMidpoints % 2);
57 addMidpoint(midpoint); 57 addMidpoint(midpoint);
58 } 58 }
59 59
60 // Adding a pair of midpoints before a character will split it out into a new 60 // Adding a pair of midpoints before a character will split it out into a new
61 // line box. 61 // line box.
62 void ensureCharacterGetsLineBox(Iterator& textParagraphSeparator) { 62 void ensureCharacterGetsLineBox(Iterator& textParagraphSeparator) {
63 startIgnoringSpaces(Iterator(0, textParagraphSeparator.getLineLayoutItem(), 63 startIgnoringSpaces(Iterator(0, textParagraphSeparator.getLineLayoutItem(),
64 textParagraphSeparator.offset() - 1)); 64 textParagraphSeparator.offset() - 1));
65 stopIgnoringSpaces(Iterator(0, textParagraphSeparator.getLineLayoutItem(), 65 stopIgnoringSpaces(Iterator(0, textParagraphSeparator.getLineLayoutItem(),
66 textParagraphSeparator.offset())); 66 textParagraphSeparator.offset()));
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 void setLastStrongDir(WTF::Unicode::CharDirection lastStrongDir) { 249 void setLastStrongDir(WTF::Unicode::CharDirection lastStrongDir) {
250 m_status.lastStrong = lastStrongDir; 250 m_status.lastStrong = lastStrongDir;
251 } 251 }
252 void setEorDir(WTF::Unicode::CharDirection eorDir) { m_status.eor = eorDir; } 252 void setEorDir(WTF::Unicode::CharDirection eorDir) { m_status.eor = eorDir; }
253 253
254 WTF::Unicode::CharDirection dir() const { return m_direction; } 254 WTF::Unicode::CharDirection dir() const { return m_direction; }
255 void setDir(WTF::Unicode::CharDirection d) { m_direction = d; } 255 void setDir(WTF::Unicode::CharDirection d) { m_direction = d; }
256 256
257 const BidiStatus& status() const { return m_status; } 257 const BidiStatus& status() const { return m_status; }
258 void setStatus(const BidiStatus s) { 258 void setStatus(const BidiStatus s) {
259 ASSERT(s.context); 259 DCHECK(s.context);
260 m_status = s; 260 m_status = s;
261 m_paragraphDirectionality = s.context->dir() == WTF::Unicode::LeftToRight 261 m_paragraphDirectionality = s.context->dir() == WTF::Unicode::LeftToRight
262 ? TextDirection::kLtr 262 ? TextDirection::kLtr
263 : TextDirection::kRtl; 263 : TextDirection::kRtl;
264 } 264 }
265 265
266 MidpointState<Iterator>& midpointState() { return m_midpointState; } 266 MidpointState<Iterator>& midpointState() { return m_midpointState; }
267 267
268 // The current algorithm handles nested isolates one layer of nesting at a 268 // The current algorithm handles nested isolates one layer of nesting at a
269 // time. But when we layout each isolated span, we will walk into (and 269 // time. But when we layout each isolated span, we will walk into (and
270 // ignore) all child isolated spans. 270 // ignore) all child isolated spans.
271 void enterIsolate() { m_nestedIsolateCount++; } 271 void enterIsolate() { m_nestedIsolateCount++; }
272 void exitIsolate() { 272 void exitIsolate() {
273 ASSERT(m_nestedIsolateCount >= 1); 273 DCHECK_GE(m_nestedIsolateCount, 1u);
274 m_nestedIsolateCount--; 274 m_nestedIsolateCount--;
275 } 275 }
276 bool inIsolate() const { return m_nestedIsolateCount; } 276 bool inIsolate() const { return m_nestedIsolateCount; }
277 277
278 void embed(WTF::Unicode::CharDirection, BidiEmbeddingSource); 278 void embed(WTF::Unicode::CharDirection, BidiEmbeddingSource);
279 bool commitExplicitEmbedding(BidiRunList<Run>&); 279 bool commitExplicitEmbedding(BidiRunList<Run>&);
280 280
281 void createBidiRunsForLine(const Iterator& end, 281 void createBidiRunsForLine(const Iterator& end,
282 VisualDirectionOverride = NoVisualOverride, 282 VisualDirectionOverride = NoVisualOverride,
283 bool hardLineBreak = false, 283 bool hardLineBreak = false,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 bool* hasStrongDirectionality); 377 bool* hasStrongDirectionality);
378 378
379 Vector<BidiEmbedding, 8> m_currentExplicitEmbeddingSequence; 379 Vector<BidiEmbedding, 8> m_currentExplicitEmbeddingSequence;
380 HashMap<Run*, MidpointState<Iterator>> m_midpointStateForIsolatedRun; 380 HashMap<Run*, MidpointState<Iterator>> m_midpointStateForIsolatedRun;
381 }; 381 };
382 382
383 #if DCHECK_IS_ON() 383 #if DCHECK_IS_ON()
384 template <class Iterator, class Run, class IsolatedRun> 384 template <class Iterator, class Run, class IsolatedRun>
385 BidiResolver<Iterator, Run, IsolatedRun>::~BidiResolver() { 385 BidiResolver<Iterator, Run, IsolatedRun>::~BidiResolver() {
386 // The owner of this resolver should have handled the isolated runs. 386 // The owner of this resolver should have handled the isolated runs.
387 ASSERT(m_isolatedRuns.isEmpty()); 387 DCHECK(m_isolatedRuns.isEmpty());
388 ASSERT(!m_runs.runCount()); 388 DCHECK(!m_runs.runCount());
389 } 389 }
390 #endif 390 #endif
391 391
392 template <class Iterator, class Run, class IsolatedRun> 392 template <class Iterator, class Run, class IsolatedRun>
393 void BidiResolver<Iterator, Run, IsolatedRun>::appendRun( 393 void BidiResolver<Iterator, Run, IsolatedRun>::appendRun(
394 BidiRunList<Run>& runs) { 394 BidiRunList<Run>& runs) {
395 if (!m_emptyRun && !m_eor.atEnd()) { 395 if (!m_emptyRun && !m_eor.atEnd()) {
396 unsigned startOffset = m_sor.offset(); 396 unsigned startOffset = m_sor.offset();
397 unsigned endOffset = m_eor.offset(); 397 unsigned endOffset = m_eor.offset();
398 398
(...skipping 27 matching lines...) Expand all
426 m_direction = WTF::Unicode::OtherNeutral; 426 m_direction = WTF::Unicode::OtherNeutral;
427 m_status.eor = WTF::Unicode::OtherNeutral; 427 m_status.eor = WTF::Unicode::OtherNeutral;
428 } 428 }
429 429
430 template <class Iterator, class Run, class IsolatedRun> 430 template <class Iterator, class Run, class IsolatedRun>
431 void BidiResolver<Iterator, Run, IsolatedRun>::embed( 431 void BidiResolver<Iterator, Run, IsolatedRun>::embed(
432 WTF::Unicode::CharDirection dir, 432 WTF::Unicode::CharDirection dir,
433 BidiEmbeddingSource source) { 433 BidiEmbeddingSource source) {
434 // Isolated spans compute base directionality during their own UBA run. 434 // Isolated spans compute base directionality during their own UBA run.
435 // Do not insert fake embed characters once we enter an isolated span. 435 // Do not insert fake embed characters once we enter an isolated span.
436 ASSERT(!inIsolate()); 436 DCHECK(!inIsolate());
437 using namespace WTF::Unicode; 437 using namespace WTF::Unicode;
438 438
439 ASSERT(dir == PopDirectionalFormat || dir == LeftToRightEmbedding || 439 DCHECK(dir == PopDirectionalFormat || dir == LeftToRightEmbedding ||
440 dir == LeftToRightOverride || dir == RightToLeftEmbedding || 440 dir == LeftToRightOverride || dir == RightToLeftEmbedding ||
441 dir == RightToLeftOverride); 441 dir == RightToLeftOverride);
442 m_currentExplicitEmbeddingSequence.push_back(BidiEmbedding(dir, source)); 442 m_currentExplicitEmbeddingSequence.push_back(BidiEmbedding(dir, source));
443 } 443 }
444 444
445 template <class Iterator, class Run, class IsolatedRun> 445 template <class Iterator, class Run, class IsolatedRun>
446 void BidiResolver<Iterator, Run, IsolatedRun>:: 446 void BidiResolver<Iterator, Run, IsolatedRun>::
447 checkDirectionInLowerRaiseEmbeddingLevel() { 447 checkDirectionInLowerRaiseEmbeddingLevel() {
448 using namespace WTF::Unicode; 448 using namespace WTF::Unicode;
449 449
450 ASSERT(m_status.eor != OtherNeutral || m_eor.atEnd()); 450 DCHECK(m_status.eor != OtherNeutral || m_eor.atEnd());
451 ASSERT(m_status.last != NonSpacingMark && m_status.last != BoundaryNeutral && 451 DCHECK(m_status.last != NonSpacingMark && m_status.last != BoundaryNeutral &&
tkent 2017/04/09 23:07:01 Split this into 7 DCHECKs.
Hwanseung Lee 2017/04/11 03:29:38 Done.
452 m_status.last != RightToLeftEmbedding && 452 m_status.last != RightToLeftEmbedding &&
453 m_status.last != LeftToRightEmbedding && 453 m_status.last != LeftToRightEmbedding &&
454 m_status.last != RightToLeftOverride && 454 m_status.last != RightToLeftOverride &&
455 m_status.last != LeftToRightOverride && 455 m_status.last != LeftToRightOverride &&
456 m_status.last != PopDirectionalFormat); 456 m_status.last != PopDirectionalFormat);
457 if (m_direction == OtherNeutral) 457 if (m_direction == OtherNeutral)
458 m_direction = 458 m_direction =
459 m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft; 459 m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft;
460 } 460 }
461 461
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 m_emptyRun = true; 540 m_emptyRun = true;
541 541
542 setLastDir(to); 542 setLastDir(to);
543 setLastStrongDir(to); 543 setLastStrongDir(to);
544 m_eor = Iterator(); 544 m_eor = Iterator();
545 } 545 }
546 546
547 template <class Iterator, class Run, class IsolatedRun> 547 template <class Iterator, class Run, class IsolatedRun>
548 void BidiResolver<Iterator, Run, IsolatedRun>::computeTrailingSpace( 548 void BidiResolver<Iterator, Run, IsolatedRun>::computeTrailingSpace(
549 BidiRunList<Run>& runs) { 549 BidiRunList<Run>& runs) {
550 ASSERT(runs.runCount()); 550 DCHECK(runs.runCount());
551 551
552 Run* trailingSpaceRun = runs.logicallyLastRun(); 552 Run* trailingSpaceRun = runs.logicallyLastRun();
553 553
554 int firstSpace = findFirstTrailingSpaceAtRun(trailingSpaceRun); 554 int firstSpace = findFirstTrailingSpaceAtRun(trailingSpaceRun);
555 if (firstSpace == trailingSpaceRun->stop()) 555 if (firstSpace == trailingSpaceRun->stop())
556 return; 556 return;
557 557
558 bool shouldReorder = 558 bool shouldReorder =
559 trailingSpaceRun != (m_paragraphDirectionality == TextDirection::kLtr 559 trailingSpaceRun != (m_paragraphDirectionality == TextDirection::kLtr
560 ? runs.lastRun() 560 ? runs.lastRun()
561 : runs.firstRun()); 561 : runs.firstRun());
562 if (firstSpace != trailingSpaceRun->start()) { 562 if (firstSpace != trailingSpaceRun->start()) {
563 BidiContext* baseContext = context(); 563 BidiContext* baseContext = context();
564 while (BidiContext* parent = baseContext->parent()) 564 while (BidiContext* parent = baseContext->parent())
565 baseContext = parent; 565 baseContext = parent;
566 566
567 m_trailingSpaceRun = addTrailingRun( 567 m_trailingSpaceRun = addTrailingRun(
568 runs, firstSpace, trailingSpaceRun->m_stop, trailingSpaceRun, 568 runs, firstSpace, trailingSpaceRun->m_stop, trailingSpaceRun,
569 baseContext, m_paragraphDirectionality); 569 baseContext, m_paragraphDirectionality);
570 ASSERT(m_trailingSpaceRun); 570 DCHECK(m_trailingSpaceRun);
571 trailingSpaceRun->m_stop = firstSpace; 571 trailingSpaceRun->m_stop = firstSpace;
572 return; 572 return;
573 } 573 }
574 if (!shouldReorder) { 574 if (!shouldReorder) {
575 m_trailingSpaceRun = trailingSpaceRun; 575 m_trailingSpaceRun = trailingSpaceRun;
576 return; 576 return;
577 } 577 }
578 578
579 // Apply L1 rule. 579 // Apply L1 rule.
580 if (m_paragraphDirectionality == TextDirection::kLtr) { 580 if (m_paragraphDirectionality == TextDirection::kLtr) {
581 runs.moveRunToEnd(trailingSpaceRun); 581 runs.moveRunToEnd(trailingSpaceRun);
582 trailingSpaceRun->m_level = 0; 582 trailingSpaceRun->m_level = 0;
583 } else { 583 } else {
584 runs.moveRunToBeginning(trailingSpaceRun); 584 runs.moveRunToBeginning(trailingSpaceRun);
585 trailingSpaceRun->m_level = 1; 585 trailingSpaceRun->m_level = 1;
586 } 586 }
587 m_trailingSpaceRun = trailingSpaceRun; 587 m_trailingSpaceRun = trailingSpaceRun;
588 } 588 }
589 589
590 template <class Iterator, class Run, class IsolatedRun> 590 template <class Iterator, class Run, class IsolatedRun>
591 bool BidiResolver<Iterator, Run, IsolatedRun>::commitExplicitEmbedding( 591 bool BidiResolver<Iterator, Run, IsolatedRun>::commitExplicitEmbedding(
592 BidiRunList<Run>& runs) { 592 BidiRunList<Run>& runs) {
593 // When we're "inIsolate()" we're resolving the parent context which 593 // When we're "inIsolate()" we're resolving the parent context which
594 // ignores (skips over) the isolated content, including embedding levels. 594 // ignores (skips over) the isolated content, including embedding levels.
595 // We should never accrue embedding levels while skipping over isolated 595 // We should never accrue embedding levels while skipping over isolated
596 // content. 596 // content.
597 ASSERT(!inIsolate() || m_currentExplicitEmbeddingSequence.isEmpty()); 597 DCHECK(!inIsolate() || m_currentExplicitEmbeddingSequence.isEmpty());
598 598
599 using namespace WTF::Unicode; 599 using namespace WTF::Unicode;
600 600
601 unsigned char fromLevel = context()->level(); 601 unsigned char fromLevel = context()->level();
602 RefPtr<BidiContext> toContext = context(); 602 RefPtr<BidiContext> toContext = context();
603 603
604 for (size_t i = 0; i < m_currentExplicitEmbeddingSequence.size(); ++i) { 604 for (size_t i = 0; i < m_currentExplicitEmbeddingSequence.size(); ++i) {
605 BidiEmbedding embedding = m_currentExplicitEmbeddingSequence[i]; 605 BidiEmbedding embedding = m_currentExplicitEmbeddingSequence[i];
606 if (embedding.direction() == PopDirectionalFormat) { 606 if (embedding.direction() == PopDirectionalFormat) {
607 if (BidiContext* parentContext = toContext->parent()) 607 if (BidiContext* parentContext = toContext->parent())
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 } 781 }
782 782
783 template <class Iterator, class Run, class IsolatedRun> 783 template <class Iterator, class Run, class IsolatedRun>
784 void BidiResolver<Iterator, Run, IsolatedRun>::createBidiRunsForLine( 784 void BidiResolver<Iterator, Run, IsolatedRun>::createBidiRunsForLine(
785 const Iterator& end, 785 const Iterator& end,
786 VisualDirectionOverride override, 786 VisualDirectionOverride override,
787 bool hardLineBreak, 787 bool hardLineBreak,
788 bool reorderRuns) { 788 bool reorderRuns) {
789 using namespace WTF::Unicode; 789 using namespace WTF::Unicode;
790 790
791 ASSERT(m_direction == OtherNeutral); 791 DCHECK_EQ(m_direction, OtherNeutral);
792 m_trailingSpaceRun = 0; 792 m_trailingSpaceRun = 0;
793 793
794 m_endOfLine = end; 794 m_endOfLine = end;
795 795
796 if (override != NoVisualOverride) { 796 if (override != NoVisualOverride) {
797 m_emptyRun = false; 797 m_emptyRun = false;
798 m_sor = m_current; 798 m_sor = m_current;
799 m_eor = Iterator(); 799 m_eor = Iterator();
800 while (m_current != end && !m_current.atEnd()) { 800 while (m_current != end && !m_current.atEnd()) {
801 m_eor = m_current; 801 m_eor = m_current;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 dirCurrent = context()->dir(); 867 dirCurrent = context()->dir();
868 else if (dirCurrent == NonSpacingMark) 868 else if (dirCurrent == NonSpacingMark)
869 dirCurrent = m_status.last; 869 dirCurrent = m_status.last;
870 } 870 }
871 871
872 // We ignore all character directionality while in unicode-bidi: isolate 872 // We ignore all character directionality while in unicode-bidi: isolate
873 // spans. We'll handle ordering the isolated characters in a second pass. 873 // spans. We'll handle ordering the isolated characters in a second pass.
874 if (inIsolate()) 874 if (inIsolate())
875 dirCurrent = OtherNeutral; 875 dirCurrent = OtherNeutral;
876 876
877 ASSERT(m_status.eor != OtherNeutral || m_eor.atEnd()); 877 DCHECK(m_status.eor != OtherNeutral || m_eor.atEnd());
878 switch (dirCurrent) { 878 switch (dirCurrent) {
879 // embedding and overrides (X1-X9 in the Bidi specs) 879 // embedding and overrides (X1-X9 in the Bidi specs)
880 case RightToLeftEmbedding: 880 case RightToLeftEmbedding:
881 case LeftToRightEmbedding: 881 case LeftToRightEmbedding:
882 case RightToLeftOverride: 882 case RightToLeftOverride:
883 case LeftToRightOverride: 883 case LeftToRightOverride:
884 case PopDirectionalFormat: 884 case PopDirectionalFormat:
885 embed(dirCurrent, FromUnicode); 885 embed(dirCurrent, FromUnicode);
886 commitExplicitEmbedding(m_runs); 886 commitExplicitEmbedding(m_runs);
887 break; 887 break;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 case LeftToRight: 1150 case LeftToRight:
1151 case RightToLeft: 1151 case RightToLeft:
1152 case ArabicNumber: 1152 case ArabicNumber:
1153 m_direction = m_status.eor; 1153 m_direction = m_status.eor;
1154 break; 1154 break;
1155 case EuropeanNumber: 1155 case EuropeanNumber:
1156 m_direction = m_status.lastStrong == LeftToRight ? LeftToRight 1156 m_direction = m_status.lastStrong == LeftToRight ? LeftToRight
1157 : EuropeanNumber; 1157 : EuropeanNumber;
1158 break; 1158 break;
1159 default: 1159 default:
1160 ASSERT_NOT_REACHED(); 1160 NOTREACHED();
1161 } 1161 }
1162 appendRun(m_runs); 1162 appendRun(m_runs);
1163 } 1163 }
1164 m_current = end; 1164 m_current = end;
1165 m_status = stateAtEnd.m_status; 1165 m_status = stateAtEnd.m_status;
1166 m_sor = stateAtEnd.m_sor; 1166 m_sor = stateAtEnd.m_sor;
1167 m_eor = stateAtEnd.m_eor; 1167 m_eor = stateAtEnd.m_eor;
1168 m_last = stateAtEnd.m_last; 1168 m_last = stateAtEnd.m_last;
1169 m_reachedEndOfLine = stateAtEnd.m_reachedEndOfLine; 1169 m_reachedEndOfLine = stateAtEnd.m_reachedEndOfLine;
1170 m_lastBeforeET = stateAtEnd.m_lastBeforeET; 1170 m_lastBeforeET = stateAtEnd.m_lastBeforeET;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 1207
1208 if (!hardLineBreak && m_runs.runCount() && needsTrailingSpace(m_runs)) { 1208 if (!hardLineBreak && m_runs.runCount() && needsTrailingSpace(m_runs)) {
1209 computeTrailingSpace(m_runs); 1209 computeTrailingSpace(m_runs);
1210 } 1210 }
1211 } 1211 }
1212 1212
1213 template <class Iterator, class Run, class IsolatedRun> 1213 template <class Iterator, class Run, class IsolatedRun>
1214 void BidiResolver<Iterator, Run, IsolatedRun>::setMidpointStateForIsolatedRun( 1214 void BidiResolver<Iterator, Run, IsolatedRun>::setMidpointStateForIsolatedRun(
1215 Run& run, 1215 Run& run,
1216 const MidpointState<Iterator>& midpoint) { 1216 const MidpointState<Iterator>& midpoint) {
1217 ASSERT(!m_midpointStateForIsolatedRun.contains(&run)); 1217 DCHECK(!m_midpointStateForIsolatedRun.contains(&run));
1218 m_midpointStateForIsolatedRun.insert(&run, midpoint); 1218 m_midpointStateForIsolatedRun.insert(&run, midpoint);
1219 } 1219 }
1220 1220
1221 template <class Iterator, class Run, class IsolatedRun> 1221 template <class Iterator, class Run, class IsolatedRun>
1222 MidpointState<Iterator> 1222 MidpointState<Iterator>
1223 BidiResolver<Iterator, Run, IsolatedRun>::midpointStateForIsolatedRun( 1223 BidiResolver<Iterator, Run, IsolatedRun>::midpointStateForIsolatedRun(
1224 Run& run) { 1224 Run& run) {
1225 return m_midpointStateForIsolatedRun.take(&run); 1225 return m_midpointStateForIsolatedRun.take(&run);
1226 } 1226 }
1227 1227
1228 } // namespace blink 1228 } // namespace blink
1229 1229
1230 #endif // BidiResolver_h 1230 #endif // BidiResolver_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698