зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1481501 - cleanup AttrArray, r=mrbkap
--HG-- extra : rebase_source : 51faf5ebfd6225eaaed90fb2f50c63184a9516a5
This commit is contained in:
Родитель
7315a671e1
Коммит
1617b3d39a
|
@ -24,59 +24,6 @@
|
||||||
|
|
||||||
using mozilla::CheckedUint32;
|
using mozilla::CheckedUint32;
|
||||||
|
|
||||||
/*
|
|
||||||
CACHE_POINTER_SHIFT indicates how many steps to downshift the |this| pointer.
|
|
||||||
It should be small enough to not cause collisions between adjecent arrays, and
|
|
||||||
large enough to make sure that all indexes are used. The size below is based
|
|
||||||
on the size of the smallest possible element (currently 20[*] bytes) which is
|
|
||||||
the smallest distance between two AttrArray. 20/(2^_5_) is 0.625.
|
|
||||||
This means that two adjacent AttrArrays will overlap one in 2.7 times.
|
|
||||||
However not all elements will have enough children to get cached. And any
|
|
||||||
allocator that doesn't return addresses aligned to 64 bytes will ensure that
|
|
||||||
any index will get used.
|
|
||||||
|
|
||||||
[*] sizeof(Element). Except is that really 20 bytes? Seems dubious!
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CACHE_POINTER_SHIFT 5
|
|
||||||
#define CACHE_NUM_SLOTS 128
|
|
||||||
#define CACHE_CHILD_LIMIT 10
|
|
||||||
|
|
||||||
#define CACHE_GET_INDEX(_array) \
|
|
||||||
((NS_PTR_TO_INT32(_array) >> CACHE_POINTER_SHIFT) & \
|
|
||||||
(CACHE_NUM_SLOTS - 1))
|
|
||||||
|
|
||||||
struct IndexCacheSlot
|
|
||||||
{
|
|
||||||
const AttrArray* array;
|
|
||||||
int32_t index;
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is inited to all zeroes since it's static. Though even if it wasn't
|
|
||||||
// the worst thing that'd happen is a small inefficency if you'd get a false
|
|
||||||
// positive cachehit.
|
|
||||||
static IndexCacheSlot indexCache[CACHE_NUM_SLOTS];
|
|
||||||
|
|
||||||
static
|
|
||||||
inline
|
|
||||||
void
|
|
||||||
AddIndexToCache(const AttrArray* aArray, int32_t aIndex)
|
|
||||||
{
|
|
||||||
uint32_t ix = CACHE_GET_INDEX(aArray);
|
|
||||||
indexCache[ix].array = aArray;
|
|
||||||
indexCache[ix].index = aIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
inline
|
|
||||||
int32_t
|
|
||||||
GetIndexFromCache(const AttrArray* aArray)
|
|
||||||
{
|
|
||||||
uint32_t ix = CACHE_GET_INDEX(aArray);
|
|
||||||
return indexCache[ix].array == aArray ? indexCache[ix].index : -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Due to a compiler bug in VisualAge C++ for AIX, we need to return the
|
* Due to a compiler bug in VisualAge C++ for AIX, we need to return the
|
||||||
* address of the first index into mBuffer here, instead of simply returning
|
* address of the first index into mBuffer here, instead of simply returning
|
||||||
|
@ -218,9 +165,6 @@ AttrArray::SetAndSwapAttr(nsAtom* aLocalName, nsAttrValue& aValue,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_ENSURE_TRUE(i < ATTRCHILD_ARRAY_MAX_ATTR_COUNT,
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
|
|
||||||
if (i == slotCount && !AddAttrSlot()) {
|
if (i == slotCount && !AddAttrSlot()) {
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
@ -253,9 +197,6 @@ AttrArray::SetAndSwapAttr(mozilla::dom::NodeInfo* aName,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_ENSURE_TRUE(i < ATTRCHILD_ARRAY_MAX_ATTR_COUNT,
|
|
||||||
NS_ERROR_FAILURE);
|
|
||||||
|
|
||||||
if (i == slotCount && !AddAttrSlot()) {
|
if (i == slotCount && !AddAttrSlot()) {
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +444,7 @@ AttrArray::Clear()
|
||||||
ATTRS(mImpl)[i].~InternalAttr();
|
ATTRS(mImpl)[i].~InternalAttr();
|
||||||
}
|
}
|
||||||
|
|
||||||
SetAttrSlotAndChildCount(0, 0);
|
SetAttrSlotCount(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
@ -630,7 +571,7 @@ AttrArray::EnsureCapacityToClone(const AttrArray& aOther,
|
||||||
// number of slots for attributes so that children don't get written into
|
// number of slots for attributes so that children don't get written into
|
||||||
// that part of the array (which will then need to be moved later).
|
// that part of the array (which will then need to be moved later).
|
||||||
memset(static_cast<void*>(mImpl->mBuffer), 0, sizeof(InternalAttr) * attrCount);
|
memset(static_cast<void*>(mImpl->mBuffer), 0, sizeof(InternalAttr) * attrCount);
|
||||||
SetAttrSlotAndChildCount(attrCount, 0);
|
SetAttrSlotCount(attrCount);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -685,7 +626,7 @@ AttrArray::GrowBy(uint32_t aGrowSize)
|
||||||
// Set initial counts if we didn't have a buffer before
|
// Set initial counts if we didn't have a buffer before
|
||||||
if (needToInitialize) {
|
if (needToInitialize) {
|
||||||
mImpl->mMappedAttrs = nullptr;
|
mImpl->mMappedAttrs = nullptr;
|
||||||
SetAttrSlotAndChildCount(0, 0);
|
SetAttrSlotCount(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
mImpl->mBufferSize = size.value() - NS_IMPL_EXTRA_SIZE;
|
mImpl->mBufferSize = size.value() - NS_IMPL_EXTRA_SIZE;
|
||||||
|
|
|
@ -30,18 +30,6 @@ class nsMappedAttributeElement;
|
||||||
#define ATTRCHILD_ARRAY_GROWSIZE 8
|
#define ATTRCHILD_ARRAY_GROWSIZE 8
|
||||||
#define ATTRCHILD_ARRAY_LINEAR_THRESHOLD 32
|
#define ATTRCHILD_ARRAY_LINEAR_THRESHOLD 32
|
||||||
|
|
||||||
#define ATTRCHILD_ARRAY_ATTR_SLOTS_BITS 10
|
|
||||||
|
|
||||||
#define ATTRCHILD_ARRAY_MAX_ATTR_COUNT \
|
|
||||||
((1 << ATTRCHILD_ARRAY_ATTR_SLOTS_BITS) - 1)
|
|
||||||
|
|
||||||
#define ATTRCHILD_ARRAY_MAX_CHILD_COUNT \
|
|
||||||
(~uint32_t(0) >> ATTRCHILD_ARRAY_ATTR_SLOTS_BITS)
|
|
||||||
|
|
||||||
#define ATTRCHILD_ARRAY_ATTR_SLOTS_COUNT_MASK \
|
|
||||||
((1 << ATTRCHILD_ARRAY_ATTR_SLOTS_BITS) - 1)
|
|
||||||
|
|
||||||
|
|
||||||
#define ATTRSIZE (sizeof(InternalAttr) / sizeof(void*))
|
#define ATTRSIZE (sizeof(InternalAttr) / sizeof(void*))
|
||||||
|
|
||||||
class AttrArray
|
class AttrArray
|
||||||
|
@ -120,12 +108,6 @@ public:
|
||||||
|
|
||||||
void Compact();
|
void Compact();
|
||||||
|
|
||||||
bool CanFitMoreAttrs() const
|
|
||||||
{
|
|
||||||
return AttrSlotCount() < ATTRCHILD_ARRAY_MAX_ATTR_COUNT ||
|
|
||||||
!AttrSlotIsTaken(ATTRCHILD_ARRAY_MAX_ATTR_COUNT - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||||
bool HasMappedAttrs() const
|
bool HasMappedAttrs() const
|
||||||
{
|
{
|
||||||
|
@ -171,7 +153,7 @@ private:
|
||||||
|
|
||||||
uint32_t AttrSlotCount() const
|
uint32_t AttrSlotCount() const
|
||||||
{
|
{
|
||||||
return mImpl ? mImpl->mAttrAndChildCount & ATTRCHILD_ARRAY_ATTR_SLOTS_COUNT_MASK : 0;
|
return mImpl ? mImpl->mAttrCount : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AttrSlotIsTaken(uint32_t aSlot) const
|
bool AttrSlotIsTaken(uint32_t aSlot) const
|
||||||
|
@ -180,24 +162,9 @@ private:
|
||||||
return mImpl->mBuffer[aSlot * ATTRSIZE];
|
return mImpl->mBuffer[aSlot * ATTRSIZE];
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetChildCount(uint32_t aCount)
|
|
||||||
{
|
|
||||||
mImpl->mAttrAndChildCount =
|
|
||||||
(mImpl->mAttrAndChildCount & ATTRCHILD_ARRAY_ATTR_SLOTS_COUNT_MASK) |
|
|
||||||
(aCount << ATTRCHILD_ARRAY_ATTR_SLOTS_BITS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetAttrSlotCount(uint32_t aCount)
|
void SetAttrSlotCount(uint32_t aCount)
|
||||||
{
|
{
|
||||||
mImpl->mAttrAndChildCount =
|
mImpl->mAttrCount = aCount;
|
||||||
(mImpl->mAttrAndChildCount & ~ATTRCHILD_ARRAY_ATTR_SLOTS_COUNT_MASK) |
|
|
||||||
aCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetAttrSlotAndChildCount(uint32_t aSlotCount, uint32_t aChildCount)
|
|
||||||
{
|
|
||||||
mImpl->mAttrAndChildCount = aSlotCount |
|
|
||||||
(aChildCount << ATTRCHILD_ARRAY_ATTR_SLOTS_BITS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GrowBy(uint32_t aGrowSize);
|
bool GrowBy(uint32_t aGrowSize);
|
||||||
|
@ -220,7 +187,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Impl {
|
struct Impl {
|
||||||
uint32_t mAttrAndChildCount;
|
uint32_t mAttrCount;
|
||||||
uint32_t mBufferSize;
|
uint32_t mBufferSize;
|
||||||
nsMappedAttributes* mMappedAttrs;
|
nsMappedAttributes* mMappedAttrs;
|
||||||
void* mBuffer[1];
|
void* mBuffer[1];
|
||||||
|
|
|
@ -2507,10 +2507,6 @@ Element::SetSingleClassFromParser(nsAtom* aSingleClassName)
|
||||||
{
|
{
|
||||||
// Keep this in sync with SetAttr and SetParsedAttr below.
|
// Keep this in sync with SetAttr and SetParsedAttr below.
|
||||||
|
|
||||||
if (!mAttrs.CanFitMoreAttrs()) {
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsAttrValue value(aSingleClassName);
|
nsAttrValue value(aSingleClassName);
|
||||||
|
|
||||||
nsIDocument* document = GetComposedDoc();
|
nsIDocument* document = GetComposedDoc();
|
||||||
|
@ -2548,10 +2544,6 @@ Element::SetAttr(int32_t aNamespaceID, nsAtom* aName,
|
||||||
NS_ASSERTION(aNamespaceID != kNameSpaceID_Unknown,
|
NS_ASSERTION(aNamespaceID != kNameSpaceID_Unknown,
|
||||||
"Don't call SetAttr with unknown namespace");
|
"Don't call SetAttr with unknown namespace");
|
||||||
|
|
||||||
if (!mAttrs.CanFitMoreAttrs()) {
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t modType;
|
uint8_t modType;
|
||||||
bool hasListeners;
|
bool hasListeners;
|
||||||
// We don't want to spend time preparsing class attributes if the value is not
|
// We don't want to spend time preparsing class attributes if the value is not
|
||||||
|
@ -2615,11 +2607,6 @@ Element::SetParsedAttr(int32_t aNamespaceID, nsAtom* aName,
|
||||||
NS_ASSERTION(aNamespaceID != kNameSpaceID_Unknown,
|
NS_ASSERTION(aNamespaceID != kNameSpaceID_Unknown,
|
||||||
"Don't call SetAttr with unknown namespace");
|
"Don't call SetAttr with unknown namespace");
|
||||||
|
|
||||||
if (!mAttrs.CanFitMoreAttrs()) {
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t modType;
|
uint8_t modType;
|
||||||
bool hasListeners;
|
bool hasListeners;
|
||||||
nsAttrValueOrString value(aParsedValue);
|
nsAttrValueOrString value(aParsedValue);
|
||||||
|
|
|
@ -487,7 +487,6 @@ skip-if = toolkit == 'android' || (verify && !debug && (os == 'linux')) #bug 687
|
||||||
[test_bug605982.html]
|
[test_bug605982.html]
|
||||||
[test_bug606729.html]
|
[test_bug606729.html]
|
||||||
[test_bug614058.html]
|
[test_bug614058.html]
|
||||||
[test_bug614583.html]
|
|
||||||
[test_bug622088.html]
|
[test_bug622088.html]
|
||||||
[test_bug622117.html]
|
[test_bug622117.html]
|
||||||
[test_bug622246.html]
|
[test_bug622246.html]
|
||||||
|
|
|
@ -1,261 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
https://bugzilla.mozilla.org/show_bug.cgi?id=614583
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<title>Test for Bug 614583</title>
|
|
||||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=614583">Mozilla Bug 614583</a>
|
|
||||||
<span id="crash1"
|
|
||||||
attr0 attr1 attr2 attr3 attr4 attr5 attr6 attr7 attr8 attr9
|
|
||||||
attr10 attr11 attr12 attr13 attr14 attr15 attr16 attr17 attr18 attr19
|
|
||||||
attr20 attr21 attr22 attr23 attr24 attr25 attr26 attr27 attr28 attr29
|
|
||||||
attr30 attr31 attr32 attr33 attr34 attr35 attr36 attr37 attr38 attr39
|
|
||||||
attr40 attr41 attr42 attr43 attr44 attr45 attr46 attr47 attr48 attr49
|
|
||||||
attr50 attr51 attr52 attr53 attr54 attr55 attr56 attr57 attr58 attr59
|
|
||||||
attr60 attr61 attr62 attr63 attr64 attr65 attr66 attr67 attr68 attr69
|
|
||||||
attr70 attr71 attr72 attr73 attr74 attr75 attr76 attr77 attr78 attr79
|
|
||||||
attr80 attr81 attr82 attr83 attr84 attr85 attr86 attr87 attr88 attr89
|
|
||||||
attr90 attr91 attr92 attr93 attr94 attr95 attr96 attr97 attr98 attr99
|
|
||||||
attr100 attr101 attr102 attr103 attr104 attr105 attr106 attr107 attr108 attr109
|
|
||||||
attr110 attr111 attr112 attr113 attr114 attr115 attr116 attr117 attr118 attr119
|
|
||||||
attr120 attr121 attr122 attr123 attr124 attr125 attr126 attr127 attr128 attr129
|
|
||||||
attr130 attr131 attr132 attr133 attr134 attr135 attr136 attr137 attr138 attr139
|
|
||||||
attr140 attr141 attr142 attr143 attr144 attr145 attr146 attr147 attr148 attr149
|
|
||||||
attr150 attr151 attr152 attr153 attr154 attr155 attr156 attr157 attr158 attr159
|
|
||||||
attr160 attr161 attr162 attr163 attr164 attr165 attr166 attr167 attr168 attr169
|
|
||||||
attr170 attr171 attr172 attr173 attr174 attr175 attr176 attr177 attr178 attr179
|
|
||||||
attr180 attr181 attr182 attr183 attr184 attr185 attr186 attr187 attr188 attr189
|
|
||||||
attr190 attr191 attr192 attr193 attr194 attr195 attr196 attr197 attr198 attr199
|
|
||||||
attr200 attr201 attr202 attr203 attr204 attr205 attr206 attr207 attr208 attr209
|
|
||||||
attr210 attr211 attr212 attr213 attr214 attr215 attr216 attr217 attr218 attr219
|
|
||||||
attr220 attr221 attr222 attr223 attr224 attr225 attr226 attr227 attr228 attr229
|
|
||||||
attr230 attr231 attr232 attr233 attr234 attr235 attr236 attr237 attr238 attr239
|
|
||||||
attr240 attr241 attr242 attr243 attr244 attr245 attr246 attr247 attr248 attr249
|
|
||||||
attr250 attr251 attr252 attr253 attr254 attr255 attr256 attr257 attr258 attr259
|
|
||||||
attr260 attr261 attr262 attr263 attr264 attr265 attr266 attr267 attr268 attr269
|
|
||||||
attr270 attr271 attr272 attr273 attr274 attr275 attr276 attr277 attr278 attr279
|
|
||||||
attr280 attr281 attr282 attr283 attr284 attr285 attr286 attr287 attr288 attr289
|
|
||||||
attr290 attr291 attr292 attr293 attr294 attr295 attr296 attr297 attr298 attr299
|
|
||||||
attr300 attr301 attr302 attr303 attr304 attr305 attr306 attr307 attr308 attr309
|
|
||||||
attr310 attr311 attr312 attr313 attr314 attr315 attr316 attr317 attr318 attr319
|
|
||||||
attr320 attr321 attr322 attr323 attr324 attr325 attr326 attr327 attr328 attr329
|
|
||||||
attr330 attr331 attr332 attr333 attr334 attr335 attr336 attr337 attr338 attr339
|
|
||||||
attr340 attr341 attr342 attr343 attr344 attr345 attr346 attr347 attr348 attr349
|
|
||||||
attr350 attr351 attr352 attr353 attr354 attr355 attr356 attr357 attr358 attr359
|
|
||||||
attr360 attr361 attr362 attr363 attr364 attr365 attr366 attr367 attr368 attr369
|
|
||||||
attr370 attr371 attr372 attr373 attr374 attr375 attr376 attr377 attr378 attr379
|
|
||||||
attr380 attr381 attr382 attr383 attr384 attr385 attr386 attr387 attr388 attr389
|
|
||||||
attr390 attr391 attr392 attr393 attr394 attr395 attr396 attr397 attr398 attr399
|
|
||||||
attr400 attr401 attr402 attr403 attr404 attr405 attr406 attr407 attr408 attr409
|
|
||||||
attr410 attr411 attr412 attr413 attr414 attr415 attr416 attr417 attr418 attr419
|
|
||||||
attr420 attr421 attr422 attr423 attr424 attr425 attr426 attr427 attr428 attr429
|
|
||||||
attr430 attr431 attr432 attr433 attr434 attr435 attr436 attr437 attr438 attr439
|
|
||||||
attr440 attr441 attr442 attr443 attr444 attr445 attr446 attr447 attr448 attr449
|
|
||||||
attr450 attr451 attr452 attr453 attr454 attr455 attr456 attr457 attr458 attr459
|
|
||||||
attr460 attr461 attr462 attr463 attr464 attr465 attr466 attr467 attr468 attr469
|
|
||||||
attr470 attr471 attr472 attr473 attr474 attr475 attr476 attr477 attr478 attr479
|
|
||||||
attr480 attr481 attr482 attr483 attr484 attr485 attr486 attr487 attr488 attr489
|
|
||||||
attr490 attr491 attr492 attr493 attr494 attr495 attr496 attr497 attr498 attr499
|
|
||||||
attr500 attr501 attr502 attr503 attr504 attr505 attr506 attr507 attr508 attr509
|
|
||||||
attr510 attr511 attr512 attr513 attr514 attr515 attr516 attr517 attr518 attr519
|
|
||||||
attr520 attr521 attr522 attr523 attr524 attr525 attr526 attr527 attr528 attr529
|
|
||||||
attr530 attr531 attr532 attr533 attr534 attr535 attr536 attr537 attr538 attr539
|
|
||||||
attr540 attr541 attr542 attr543 attr544 attr545 attr546 attr547 attr548 attr549
|
|
||||||
attr550 attr551 attr552 attr553 attr554 attr555 attr556 attr557 attr558 attr559
|
|
||||||
attr560 attr561 attr562 attr563 attr564 attr565 attr566 attr567 attr568 attr569
|
|
||||||
attr570 attr571 attr572 attr573 attr574 attr575 attr576 attr577 attr578 attr579
|
|
||||||
attr580 attr581 attr582 attr583 attr584 attr585 attr586 attr587 attr588 attr589
|
|
||||||
attr590 attr591 attr592 attr593 attr594 attr595 attr596 attr597 attr598 attr599
|
|
||||||
attr600 attr601 attr602 attr603 attr604 attr605 attr606 attr607 attr608 attr609
|
|
||||||
attr610 attr611 attr612 attr613 attr614 attr615 attr616 attr617 attr618 attr619
|
|
||||||
attr620 attr621 attr622 attr623 attr624 attr625 attr626 attr627 attr628 attr629
|
|
||||||
attr630 attr631 attr632 attr633 attr634 attr635 attr636 attr637 attr638 attr639
|
|
||||||
attr640 attr641 attr642 attr643 attr644 attr645 attr646 attr647 attr648 attr649
|
|
||||||
attr650 attr651 attr652 attr653 attr654 attr655 attr656 attr657 attr658 attr659
|
|
||||||
attr660 attr661 attr662 attr663 attr664 attr665 attr666 attr667 attr668 attr669
|
|
||||||
attr670 attr671 attr672 attr673 attr674 attr675 attr676 attr677 attr678 attr679
|
|
||||||
attr680 attr681 attr682 attr683 attr684 attr685 attr686 attr687 attr688 attr689
|
|
||||||
attr690 attr691 attr692 attr693 attr694 attr695 attr696 attr697 attr698 attr699
|
|
||||||
attr700 attr701 attr702 attr703 attr704 attr705 attr706 attr707 attr708 attr709
|
|
||||||
attr710 attr711 attr712 attr713 attr714 attr715 attr716 attr717 attr718 attr719
|
|
||||||
attr720 attr721 attr722 attr723 attr724 attr725 attr726 attr727 attr728 attr729
|
|
||||||
attr730 attr731 attr732 attr733 attr734 attr735 attr736 attr737 attr738 attr739
|
|
||||||
attr740 attr741 attr742 attr743 attr744 attr745 attr746 attr747 attr748 attr749
|
|
||||||
attr750 attr751 attr752 attr753 attr754 attr755 attr756 attr757 attr758 attr759
|
|
||||||
attr760 attr761 attr762 attr763 attr764 attr765 attr766 attr767 attr768 attr769
|
|
||||||
attr770 attr771 attr772 attr773 attr774 attr775 attr776 attr777 attr778 attr779
|
|
||||||
attr780 attr781 attr782 attr783 attr784 attr785 attr786 attr787 attr788 attr789
|
|
||||||
attr790 attr791 attr792 attr793 attr794 attr795 attr796 attr797 attr798 attr799
|
|
||||||
attr800 attr801 attr802 attr803 attr804 attr805 attr806 attr807 attr808 attr809
|
|
||||||
attr810 attr811 attr812 attr813 attr814 attr815 attr816 attr817 attr818 attr819
|
|
||||||
attr820 attr821 attr822 attr823 attr824 attr825 attr826 attr827 attr828 attr829
|
|
||||||
attr830 attr831 attr832 attr833 attr834 attr835 attr836 attr837 attr838 attr839
|
|
||||||
attr840 attr841 attr842 attr843 attr844 attr845 attr846 attr847 attr848 attr849
|
|
||||||
attr850 attr851 attr852 attr853 attr854 attr855 attr856 attr857 attr858 attr859
|
|
||||||
attr860 attr861 attr862 attr863 attr864 attr865 attr866 attr867 attr868 attr869
|
|
||||||
attr870 attr871 attr872 attr873 attr874 attr875 attr876 attr877 attr878 attr879
|
|
||||||
attr880 attr881 attr882 attr883 attr884 attr885 attr886 attr887 attr888 attr889
|
|
||||||
attr890 attr891 attr892 attr893 attr894 attr895 attr896 attr897 attr898 attr899
|
|
||||||
attr900 attr901 attr902 attr903 attr904 attr905 attr906 attr907 attr908 attr909
|
|
||||||
attr910 attr911 attr912 attr913 attr914 attr915 attr916 attr917 attr918 attr919
|
|
||||||
attr920 attr921 attr922 attr923 attr924 attr925 attr926 attr927 attr928 attr929
|
|
||||||
attr930 attr931 attr932 attr933 attr934 attr935 attr936 attr937 attr938 attr939
|
|
||||||
attr940 attr941 attr942 attr943 attr944 attr945 attr946 attr947 attr948 attr949
|
|
||||||
attr950 attr951 attr952 attr953 attr954 attr955 attr956 attr957 attr958 attr959
|
|
||||||
attr960 attr961 attr962 attr963 attr964 attr965 attr966 attr967 attr968 attr969
|
|
||||||
attr970 attr971 attr972 attr973 attr974 attr975 attr976 attr977 attr978 attr979
|
|
||||||
attr980 attr981 attr982 attr983 attr984 attr985 attr986 attr987 attr988 attr989
|
|
||||||
attr990 attr991 attr992 attr993 attr994 attr995 attr996 attr997 attr998 attr999
|
|
||||||
attr1000 attr1001 attr1002 attr1003 attr1004 attr1005 attr1006 attr1007 attr1008 attr1009
|
|
||||||
attr1010 attr1011 attr1012 attr1013 attr1014 attr1015 attr1016 attr1017 attr1018 attr1019
|
|
||||||
attr1020 attr1021 attr1022 attr1023 attr1024 attr1025 attr1026 attr1027 attr1028 attr1029
|
|
||||||
attr1030 attr1031 attr1032 attr1033 attr1034 attr1035 attr1036 attr1037 attr1038 attr1039
|
|
||||||
attr1040 attr1041 attr1042 attr1043 attr1044 attr1045 attr1046 attr1047 attr1048 attr1049
|
|
||||||
attr1050 attr1051 attr1052 attr1053 attr1054 attr1055 attr1056 attr1057 attr1058 attr1059
|
|
||||||
attr1060 attr1061 attr1062 attr1063 attr1064 attr1065 attr1066 attr1067 attr1068 attr1069
|
|
||||||
attr1070 attr1071 attr1072 attr1073 attr1074 attr1075 attr1076 attr1077 attr1078 attr1079
|
|
||||||
attr1080 attr1081 attr1082 attr1083 attr1084 attr1085 attr1086 attr1087 attr1088 attr1089
|
|
||||||
attr1090 attr1091 attr1092 attr1093 attr1094 attr1095 attr1096 attr1097 attr1098 attr1099
|
|
||||||
>I'm on a boat</span>
|
|
||||||
<span
|
|
||||||
attr0 attr1 attr2 attr3 attr4 attr5 attr6 attr7 attr8 attr9
|
|
||||||
attr10 attr11 attr12 attr13 attr14 attr15 attr16 attr17 attr18 attr19
|
|
||||||
attr20 attr21 attr22 attr23 attr24 attr25 attr26 attr27 attr28 attr29
|
|
||||||
attr30 attr31 attr32 attr33 attr34 attr35 attr36 attr37 attr38 attr39
|
|
||||||
attr40 attr41 attr42 attr43 attr44 attr45 attr46 attr47 attr48 attr49
|
|
||||||
attr50 attr51 attr52 attr53 attr54 attr55 attr56 attr57 attr58 attr59
|
|
||||||
attr60 attr61 attr62 attr63 attr64 attr65 attr66 attr67 attr68 attr69
|
|
||||||
attr70 attr71 attr72 attr73 attr74 attr75 attr76 attr77 attr78 attr79
|
|
||||||
attr80 attr81 attr82 attr83 attr84 attr85 attr86 attr87 attr88 attr89
|
|
||||||
attr90 attr91 attr92 attr93 attr94 attr95 attr96 attr97 attr98 attr99
|
|
||||||
attr100 attr101 attr102 attr103 attr104 attr105 attr106 attr107 attr108 attr109
|
|
||||||
attr110 attr111 attr112 attr113 attr114 attr115 attr116 attr117 attr118 attr119
|
|
||||||
attr120 attr121 attr122 attr123 attr124 attr125 attr126 attr127 attr128 attr129
|
|
||||||
attr130 attr131 attr132 attr133 attr134 attr135 attr136 attr137 attr138 attr139
|
|
||||||
attr140 attr141 attr142 attr143 attr144 attr145 attr146 attr147 attr148 attr149
|
|
||||||
attr150 attr151 attr152 attr153 attr154 attr155 attr156 attr157 attr158 attr159
|
|
||||||
attr160 attr161 attr162 attr163 attr164 attr165 attr166 attr167 attr168 attr169
|
|
||||||
attr170 attr171 attr172 attr173 attr174 attr175 attr176 attr177 attr178 attr179
|
|
||||||
attr180 attr181 attr182 attr183 attr184 attr185 attr186 attr187 attr188 attr189
|
|
||||||
attr190 attr191 attr192 attr193 attr194 attr195 attr196 attr197 attr198 attr199
|
|
||||||
attr200 attr201 attr202 attr203 attr204 attr205 attr206 attr207 attr208 attr209
|
|
||||||
attr210 attr211 attr212 attr213 attr214 attr215 attr216 attr217 attr218 attr219
|
|
||||||
attr220 attr221 attr222 attr223 attr224 attr225 attr226 attr227 attr228 attr229
|
|
||||||
attr230 attr231 attr232 attr233 attr234 attr235 attr236 attr237 attr238 attr239
|
|
||||||
attr240 attr241 attr242 attr243 attr244 attr245 attr246 attr247 attr248 attr249
|
|
||||||
attr250 attr251 attr252 attr253 attr254 attr255 attr256 attr257 attr258 attr259
|
|
||||||
attr260 attr261 attr262 attr263 attr264 attr265 attr266 attr267 attr268 attr269
|
|
||||||
attr270 attr271 attr272 attr273 attr274 attr275 attr276 attr277 attr278 attr279
|
|
||||||
attr280 attr281 attr282 attr283 attr284 attr285 attr286 attr287 attr288 attr289
|
|
||||||
attr290 attr291 attr292 attr293 attr294 attr295 attr296 attr297 attr298 attr299
|
|
||||||
attr300 attr301 attr302 attr303 attr304 attr305 attr306 attr307 attr308 attr309
|
|
||||||
attr310 attr311 attr312 attr313 attr314 attr315 attr316 attr317 attr318 attr319
|
|
||||||
attr320 attr321 attr322 attr323 attr324 attr325 attr326 attr327 attr328 attr329
|
|
||||||
attr330 attr331 attr332 attr333 attr334 attr335 attr336 attr337 attr338 attr339
|
|
||||||
attr340 attr341 attr342 attr343 attr344 attr345 attr346 attr347 attr348 attr349
|
|
||||||
attr350 attr351 attr352 attr353 attr354 attr355 attr356 attr357 attr358 attr359
|
|
||||||
attr360 attr361 attr362 attr363 attr364 attr365 attr366 attr367 attr368 attr369
|
|
||||||
attr370 attr371 attr372 attr373 attr374 attr375 attr376 attr377 attr378 attr379
|
|
||||||
attr380 attr381 attr382 attr383 attr384 attr385 attr386 attr387 attr388 attr389
|
|
||||||
attr390 attr391 attr392 attr393 attr394 attr395 attr396 attr397 attr398 attr399
|
|
||||||
attr400 attr401 attr402 attr403 attr404 attr405 attr406 attr407 attr408 attr409
|
|
||||||
attr410 attr411 attr412 attr413 attr414 attr415 attr416 attr417 attr418 attr419
|
|
||||||
attr420 attr421 attr422 attr423 attr424 attr425 attr426 attr427 attr428 attr429
|
|
||||||
attr430 attr431 attr432 attr433 attr434 attr435 attr436 attr437 attr438 attr439
|
|
||||||
attr440 attr441 attr442 attr443 attr444 attr445 attr446 attr447 attr448 attr449
|
|
||||||
attr450 attr451 attr452 attr453 attr454 attr455 attr456 attr457 attr458 attr459
|
|
||||||
attr460 attr461 attr462 attr463 attr464 attr465 attr466 attr467 attr468 attr469
|
|
||||||
attr470 attr471 attr472 attr473 attr474 attr475 attr476 attr477 attr478 attr479
|
|
||||||
attr480 attr481 attr482 attr483 attr484 attr485 attr486 attr487 attr488 attr489
|
|
||||||
attr490 attr491 attr492 attr493 attr494 attr495 attr496 attr497 attr498 attr499
|
|
||||||
attr500 attr501 attr502 attr503 attr504 attr505 attr506 attr507 attr508 attr509
|
|
||||||
attr510 attr511 attr512 attr513 attr514 attr515 attr516 attr517 attr518 attr519
|
|
||||||
attr520 attr521 attr522 attr523 attr524 attr525 attr526 attr527 attr528 attr529
|
|
||||||
attr530 attr531 attr532 attr533 attr534 attr535 attr536 attr537 attr538 attr539
|
|
||||||
attr540 attr541 attr542 attr543 attr544 attr545 attr546 attr547 attr548 attr549
|
|
||||||
attr550 attr551 attr552 attr553 attr554 attr555 attr556 attr557 attr558 attr559
|
|
||||||
attr560 attr561 attr562 attr563 attr564 attr565 attr566 attr567 attr568 attr569
|
|
||||||
attr570 attr571 attr572 attr573 attr574 attr575 attr576 attr577 attr578 attr579
|
|
||||||
attr580 attr581 attr582 attr583 attr584 attr585 attr586 attr587 attr588 attr589
|
|
||||||
attr590 attr591 attr592 attr593 attr594 attr595 attr596 attr597 attr598 attr599
|
|
||||||
attr600 attr601 attr602 attr603 attr604 attr605 attr606 attr607 attr608 attr609
|
|
||||||
attr610 attr611 attr612 attr613 attr614 attr615 attr616 attr617 attr618 attr619
|
|
||||||
attr620 attr621 attr622 attr623 attr624 attr625 attr626 attr627 attr628 attr629
|
|
||||||
attr630 attr631 attr632 attr633 attr634 attr635 attr636 attr637 attr638 attr639
|
|
||||||
attr640 attr641 attr642 attr643 attr644 attr645 attr646 attr647 attr648 attr649
|
|
||||||
attr650 attr651 attr652 attr653 attr654 attr655 attr656 attr657 attr658 attr659
|
|
||||||
attr660 attr661 attr662 attr663 attr664 attr665 attr666 attr667 attr668 attr669
|
|
||||||
attr670 attr671 attr672 attr673 attr674 attr675 attr676 attr677 attr678 attr679
|
|
||||||
attr680 attr681 attr682 attr683 attr684 attr685 attr686 attr687 attr688 attr689
|
|
||||||
attr690 attr691 attr692 attr693 attr694 attr695 attr696 attr697 attr698 attr699
|
|
||||||
attr700 attr701 attr702 attr703 attr704 attr705 attr706 attr707 attr708 attr709
|
|
||||||
attr710 attr711 attr712 attr713 attr714 attr715 attr716 attr717 attr718 attr719
|
|
||||||
attr720 attr721 attr722 attr723 attr724 attr725 attr726 attr727 attr728 attr729
|
|
||||||
attr730 attr731 attr732 attr733 attr734 attr735 attr736 attr737 attr738 attr739
|
|
||||||
attr740 attr741 attr742 attr743 attr744 attr745 attr746 attr747 attr748 attr749
|
|
||||||
attr750 attr751 attr752 attr753 attr754 attr755 attr756 attr757 attr758 attr759
|
|
||||||
attr760 attr761 attr762 attr763 attr764 attr765 attr766 attr767 attr768 attr769
|
|
||||||
attr770 attr771 attr772 attr773 attr774 attr775 attr776 attr777 attr778 attr779
|
|
||||||
attr780 attr781 attr782 attr783 attr784 attr785 attr786 attr787 attr788 attr789
|
|
||||||
attr790 attr791 attr792 attr793 attr794 attr795 attr796 attr797 attr798 attr799
|
|
||||||
attr800 attr801 attr802 attr803 attr804 attr805 attr806 attr807 attr808 attr809
|
|
||||||
attr810 attr811 attr812 attr813 attr814 attr815 attr816 attr817 attr818 attr819
|
|
||||||
attr820 attr821 attr822 attr823 attr824 attr825 attr826 attr827 attr828 attr829
|
|
||||||
attr830 attr831 attr832 attr833 attr834 attr835 attr836 attr837 attr838 attr839
|
|
||||||
attr840 attr841 attr842 attr843 attr844 attr845 attr846 attr847 attr848 attr849
|
|
||||||
attr850 attr851 attr852 attr853 attr854 attr855 attr856 attr857 attr858 attr859
|
|
||||||
attr860 attr861 attr862 attr863 attr864 attr865 attr866 attr867 attr868 attr869
|
|
||||||
attr870 attr871 attr872 attr873 attr874 attr875 attr876 attr877 attr878 attr879
|
|
||||||
attr880 attr881 attr882 attr883 attr884 attr885 attr886 attr887 attr888 attr889
|
|
||||||
attr890 attr891 attr892 attr893 attr894 attr895 attr896 attr897 attr898 attr899
|
|
||||||
attr900 attr901 attr902 attr903 attr904 attr905 attr906 attr907 attr908 attr909
|
|
||||||
attr910 attr911 attr912 attr913 attr914 attr915 attr916 attr917 attr918 attr919
|
|
||||||
attr920 attr921 attr922 attr923 attr924 attr925 attr926 attr927 attr928 attr929
|
|
||||||
attr930 attr931 attr932 attr933 attr934 attr935 attr936 attr937 attr938 attr939
|
|
||||||
attr940 attr941 attr942 attr943 attr944 attr945 attr946 attr947 attr948 attr949
|
|
||||||
attr950 attr951 attr952 attr953 attr954 attr955 attr956 attr957 attr958 attr959
|
|
||||||
attr960 attr961 attr962 attr963 attr964 attr965 attr966 attr967 attr968 attr969
|
|
||||||
attr970 attr971 attr972 attr973 attr974 attr975 attr976 attr977 attr978 attr979
|
|
||||||
attr980 attr981 attr982 attr983 attr984 attr985 attr986 attr987 attr988 attr989
|
|
||||||
attr990 attr991 attr992 attr993 attr994 attr995 attr996 attr997 attr998 attr999
|
|
||||||
attr1000 attr1001 attr1002 attr1003 attr1004 attr1005 attr1006 attr1007 attr1008 attr1009
|
|
||||||
attr1010 attr1011 attr1012 attr1013 attr1014 attr1015 attr1016 attr1017 attr1018 attr1019
|
|
||||||
attr1020 attr1021 attr1022 attr1023 attr1024 attr1025 attr1026 attr1027 attr1028 attr1029
|
|
||||||
attr1030 attr1031 attr1032 attr1033 attr1034 attr1035 attr1036 attr1037 attr1038 attr1039
|
|
||||||
attr1040 attr1041 attr1042 attr1043 attr1044 attr1045 attr1046 attr1047 attr1048 attr1049
|
|
||||||
attr1050 attr1051 attr1052 attr1053 attr1054 attr1055 attr1056 attr1057 attr1058 attr1059
|
|
||||||
attr1060 attr1061 attr1062 attr1063 attr1064 attr1065 attr1066 attr1067 attr1068 attr1069
|
|
||||||
attr1070 attr1071 attr1072 attr1073 attr1074 attr1075 attr1076 attr1077 attr1078 attr1079
|
|
||||||
attr1080 attr1081 attr1082 attr1083 attr1084 attr1085 attr1086 attr1087 attr1088 attr1089
|
|
||||||
attr1090 attr1091 attr1092 attr1093 attr1094 attr1095 attr1096 attr1097 attr1098 attr1099
|
|
||||||
id="crash2"
|
|
||||||
>I'm on a boat</span>
|
|
||||||
<pre id="test">
|
|
||||||
<script>
|
|
||||||
span = document.createElement("span");
|
|
||||||
try {
|
|
||||||
var i = 0;
|
|
||||||
while(1) {
|
|
||||||
span.setAttribute("attr" + (++i), "foo");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (ex) {}
|
|
||||||
span.id = "crash3";
|
|
||||||
document.body.appendChild(span);
|
|
||||||
var attrCount = span.attributes.length;
|
|
||||||
var spans = document.getElementsByTagName("span");
|
|
||||||
for (i = 0; i < spans.length; ++i) {
|
|
||||||
is(spans[i].attributes.length, attrCount, "didn't have maxed out attrs");
|
|
||||||
}
|
|
||||||
while (spans.length) {
|
|
||||||
spans[0].remove();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Загрузка…
Ссылка в новой задаче