diff --git a/mozilla/js2/src/epimetheus.cpp b/mozilla/js2/src/epimetheus.cpp index 2ac5b37cf6f..f25e142107c 100644 --- a/mozilla/js2/src/epimetheus.cpp +++ b/mozilla/js2/src/epimetheus.cpp @@ -251,10 +251,10 @@ void printLocalBindings(LocalBindingMap *lMap, ValueList *frameSlots) stdOut << " Local Bindings:\n"; for (LocalBindingIterator bi = lMap->begin(), bend = lMap->end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; - stdOut << "\t" << ns.first->name << "::" << lbe->name; + stdOut << "\t" << ns.first->name << "::" << lbe.name; LocalMember *m = checked_cast(ns.second->content); switch (m->memberKind) { case Member::ForbiddenMember: diff --git a/mozilla/js2/src/hash.h b/mozilla/js2/src/hash.h index 60ee66024e8..9bc00487460 100644 --- a/mozilla/js2/src/hash.h +++ b/mozilla/js2/src/hash.h @@ -291,8 +291,7 @@ namespace JavaScript { return insert(r, key, value); } - template - Data &HashTable::insert(Data data) + template Data &insert(Data data) { Key key = data.key(); Value value = data.value(); diff --git a/mozilla/js2/src/js2engine.cpp b/mozilla/js2/src/js2engine.cpp index 7de236e5715..9fbc332f6f6 100644 --- a/mozilla/js2/src/js2engine.cpp +++ b/mozilla/js2/src/js2engine.cpp @@ -1248,11 +1248,11 @@ namespace MetaData { nameList = new const String *[lMap->size()]; length = 0; for (LocalBindingIterator bi = lMap->begin(), bend = lMap->end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; if ((ns.first == meta->publicNamespace) && ns.second->enumerable) - nameList[length++] = &lbe->name; + nameList[length++] = &lbe.name; } } if (length == 0) { diff --git a/mozilla/js2/src/js2eval.cpp b/mozilla/js2/src/js2eval.cpp index 217088a187d..4f770c630c3 100644 --- a/mozilla/js2/src/js2eval.cpp +++ b/mozilla/js2/src/js2eval.cpp @@ -1059,14 +1059,14 @@ VariableMemberCommon: else lMap = &checked_cast(container)->localBindings; - LocalBindingEntry **lbeP = (*lMap)[multiname->name]; + LocalBindingEntry *lbeP = (*lMap)[multiname->name]; if (lbeP) { while (true) { bool deletedOne = false; - for (LocalBindingEntry::NS_Iterator i = (*lbeP)->begin(), end = (*lbeP)->end(); (i != end); i++) { + for (LocalBindingEntry::NS_Iterator i = lbeP->begin(), end = lbeP->end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding &ns = *i; if (multiname->listContains(ns.first)) { - (*lbeP)->bindingList.erase(i); + lbeP->bindingList.erase(i); deletedOne = true; if (ns.second->content->release()) delete ns.second->content; diff --git a/mozilla/js2/src/js2metadata.cpp b/mozilla/js2/src/js2metadata.cpp index 0d353c87cb3..d942eac5a70 100644 --- a/mozilla/js2/src/js2metadata.cpp +++ b/mozilla/js2/src/js2metadata.cpp @@ -3175,12 +3175,24 @@ doUnary: singularFrame->localBindings.clear(); for (LocalBindingIterator bi = pluralFrame->localBindings.begin(), bend = pluralFrame->localBindings.end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - lbe->clear(); + LocalBindingEntry &lbe = *bi; + lbe.clear(); } for (LocalBindingIterator bi2 = pluralFrame->localBindings.begin(), bend2 = pluralFrame->localBindings.end(); (bi2 != bend2); bi2++) { - LocalBindingEntry *lbe = *bi2; - singularFrame->localBindings.insert(lbe->name, lbe->clone()); + LocalBindingEntry &lbe = *bi2; + LocalBindingEntry *new_lbe = &singularFrame->localBindings.insert(lbe.name); + + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { + LocalBindingEntry::NamespaceBinding &ns = *i; + LocalBinding *m = ns.second; + if (m->content->cloneContent == NULL) { + m->content->cloneContent = m->content->clone(); + } + LocalBinding *new_b = new LocalBinding(m->accesses, m->content->cloneContent, m->enumerable); + new_b->xplicit = m->xplicit; + new_lbe->bindingList.push_back(LocalBindingEntry::NamespaceBinding(ns.first, new_b)); + } + } if (buildSlots && pluralFrame->frameSlots) { size_t count = pluralFrame->frameSlots->size(); @@ -3209,12 +3221,6 @@ doUnary: * ************************************************************************************/ - // clone a context - Context::Context(Context *cxt) : strict(cxt->strict), E3compatibility(cxt->E3compatibility), openNamespaces(cxt->openNamespaces) - { - ASSERT(false); // ?? used ?? - } - /************************************************************************************ * @@ -3309,9 +3315,9 @@ doUnary: multiname->addNamespace(namespaces); // Search the local frame for an overlapping definition - LocalBindingEntry **lbeP = innerFrame->localBindings[id]; + LocalBindingEntry *lbeP = innerFrame->localBindings[id]; if (lbeP) { - for (LocalBindingEntry::NS_Iterator i = (*lbeP)->begin(), end = (*lbeP)->end(); (i != end); i++) { + for (LocalBindingEntry::NS_Iterator i = lbeP->begin(), end = lbeP->end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding &ns = *i; if ((ns.second->accesses & access) && multiname->listContains(ns.first)) reportError(Exception::definitionError, "Duplicate definition {0}", pos, id); @@ -3329,9 +3335,9 @@ doUnary: while (true) { if (fr->kind != WithFrameKind) { NonWithFrame *nwfr = checked_cast(fr); - LocalBindingEntry **rbeP = nwfr->localBindings[id]; + LocalBindingEntry *rbeP = nwfr->localBindings[id]; if (rbeP) { - for (LocalBindingEntry::NS_Iterator i = (*rbeP)->begin(), end = (*rbeP)->end(); (i != end); i++) { + for (LocalBindingEntry::NS_Iterator i = rbeP->begin(), end = rbeP->end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding &ns = *i; if ((ns.second->accesses & access) && (ns.second->content->memberKind != LocalMember::ForbiddenMember) @@ -3348,16 +3354,11 @@ doUnary: } // Now insert the id, via all it's namespaces into the local frame - LocalBindingEntry *lbe; - if (lbeP == NULL) { - lbe = new LocalBindingEntry(id); - innerFrame->localBindings.insert(id, lbe); - } - else - lbe = *lbeP; + if (lbeP == NULL) + lbeP = &innerFrame->localBindings.insert(id); for (NamespaceListIterator nli = multiname->nsList->begin(), nlend = multiname->nsList->end(); (nli != nlend); nli++) { LocalBinding *new_b = new LocalBinding(access, m, enumerable); - lbe->bindingList.push_back(LocalBindingEntry::NamespaceBinding(*nli, new_b)); + lbeP->bindingList.push_back(LocalBindingEntry::NamespaceBinding(*nli, new_b)); } // Mark the bindings of multiname as Forbidden in all non-innermost frames in the current // region if they haven't been marked as such already. @@ -3369,9 +3370,9 @@ doUnary: NonWithFrame *nwfr = checked_cast(fr); for (NamespaceListIterator nli = multiname->nsList->begin(), nlend = multiname->nsList->end(); (nli != nlend); nli++) { bool foundEntry = false; - LocalBindingEntry **rbeP = nwfr->localBindings[id]; + LocalBindingEntry *rbeP = nwfr->localBindings[id]; if (rbeP) { - for (LocalBindingEntry::NS_Iterator i = (*rbeP)->begin(), end = (*rbeP)->end(); (i != end); i++) { + for (LocalBindingEntry::NS_Iterator i = rbeP->begin(), end = rbeP->end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding &ns = *i; if ((ns.second->accesses & access) && (ns.first == *nli)) { ASSERT(ns.second->content->memberKind == LocalMember::ForbiddenMember); @@ -3381,8 +3382,7 @@ doUnary: } } if (!foundEntry) { - LocalBindingEntry *rbe = new LocalBindingEntry(id); - nwfr->localBindings.insert(id, rbe); + LocalBindingEntry *rbe = &nwfr->localBindings.insert(id); LocalBinding *new_b = new LocalBinding(access, forbiddenMember, false); rbe->bindingList.push_back(LocalBindingEntry::NamespaceBinding(*nli, new_b)); } @@ -3563,9 +3563,9 @@ rescan: // run through all the existing bindings, to see if this variable already exists. LocalBinding *bindingResult = NULL; bool foundMultiple = false; - LocalBindingEntry **lbeP = regionalFrame->localBindings[id]; + LocalBindingEntry *lbeP = regionalFrame->localBindings[id]; if (lbeP) { - for (LocalBindingEntry::NS_Iterator i = (*lbeP)->begin(), end = (*lbeP)->end(); (i != end); i++) { + for (LocalBindingEntry::NS_Iterator i = lbeP->begin(), end = lbeP->end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding &ns = *i; if (ns.first == publicNamespace) { if (bindingResult) { @@ -3586,17 +3586,12 @@ rescan: } if (bindingResult == NULL) { - LocalBindingEntry *lbe; - if (lbeP == NULL) { - lbe = new LocalBindingEntry(id); - regionalFrame->localBindings.insert(id, lbe); - } - else - lbe = *lbeP; + if (lbeP == NULL) + lbeP = ®ionalFrame->localBindings.insert(id); result = makeFrameVariable(regionalFrame); (*regionalFrame->frameSlots)[checked_cast(result)->frameSlot] = initVal; LocalBinding *sb = new LocalBinding(ReadWriteAccess, result, true); - lbe->bindingList.push_back(LocalBindingEntry::NamespaceBinding(publicNamespace, sb)); + lbeP->bindingList.push_back(LocalBindingEntry::NamespaceBinding(publicNamespace, sb)); } else { if (foundMultiple) @@ -4384,9 +4379,9 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... lMap = &checked_cast(container)->localBindings; if (lMap->size()) { - LocalBindingEntry **lbeP = (*lMap)[multiname->name]; + LocalBindingEntry *lbeP = (*lMap)[multiname->name]; if (lbeP) { - for (LocalBindingEntry::NS_Iterator i = (*lbeP)->begin(), end = (*lbeP)->end(); (i != end); i++) { + for (LocalBindingEntry::NS_Iterator i = lbeP->begin(), end = lbeP->end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding &ns = *i; if ((ns.second->accesses & access) && multiname->listContains(ns.first)) { if (found && (ns.second->content != found)) @@ -4664,15 +4659,10 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... void JS2Metadata::addPublicVariableToLocalMap(LocalBindingMap *lMap, const StringAtom &name, LocalMember *v, Access access, bool enumerable) { LocalBinding *new_b = new LocalBinding(access, v, enumerable); - LocalBindingEntry **lbeP = (*lMap)[name]; - LocalBindingEntry *lbe; - if (lbeP == NULL) { - lbe = new LocalBindingEntry(name); - lMap->insert(name, lbe); - } - else - lbe = *lbeP; - lbe->bindingList.push_back(LocalBindingEntry::NamespaceBinding(publicNamespace, new_b)); + LocalBindingEntry *lbeP = (*lMap)[name]; + if (lbeP == NULL) + lbeP = &lMap->insert(name); + lbeP->bindingList.push_back(LocalBindingEntry::NamespaceBinding(publicNamespace, new_b)); } // The caller must make sure that the created property does not already exist and does not conflict with any other property. @@ -5114,8 +5104,8 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... } } for (LocalBindingIterator bi = localBindings.begin(), bend = localBindings.end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; ns.second->content->mark(); } @@ -5125,12 +5115,11 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... SimpleInstance::~SimpleInstance() { for (LocalBindingIterator bi = localBindings.begin(), bend = localBindings.end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; delete ns.second; } - delete lbe; } delete [] fixedSlots; } @@ -5253,12 +5242,11 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... NonWithFrame::~NonWithFrame() { for (LocalBindingIterator bi = localBindings.begin(), bend = localBindings.end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; delete ns.second; } - delete lbe; } if (frameSlots) delete frameSlots; @@ -5269,8 +5257,8 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... { GCMARKOBJECT(pluralFrame) for (LocalBindingIterator bi = localBindings.begin(), bend = localBindings.end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; ns.second->content->mark(); } @@ -5295,8 +5283,8 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... GCMARKVALUE(super); GCMARKOBJECT(internalNamespace) for (LocalBindingIterator bi = localBindings.begin(), bend = localBindings.end(); (bi != bend); bi++) { - LocalBindingEntry *lbe = *bi; - for (LocalBindingEntry::NS_Iterator i = lbe->begin(), end = lbe->end(); (i != end); i++) { + LocalBindingEntry &lbe = *bi; + for (LocalBindingEntry::NS_Iterator i = lbe.begin(), end = lbe.end(); (i != end); i++) { LocalBindingEntry::NamespaceBinding ns = *i; ns.second->content->mark(); } @@ -5350,15 +5338,15 @@ XXX see EvalAttributeExpression, where identifiers are being handled for now... // Add the 'arguments' property const StringAtom &name = meta->world.identifiers["arguments"]; - LocalBindingEntry **lbeP = localBindings[name]; + LocalBindingEntry *lbeP = localBindings[name]; if (lbeP == NULL) { - LocalBindingEntry *lbe = new LocalBindingEntry(name); LocalBinding *sb = new LocalBinding(ReadWriteAccess, new Variable(meta->objectClass, OBJECT_TO_JS2VAL(argsObj), false), false); + LocalBindingEntry *lbe = &localBindings.insert(name); lbe->bindingList.push_back(LocalBindingEntry::NamespaceBinding(meta->publicNamespace, sb)); - localBindings.insert(name, lbe); + } else { - LocalBindingEntry::NamespaceBinding &ns = *((*lbeP)->begin()); + LocalBindingEntry::NamespaceBinding &ns = *(lbeP->begin()); ASSERT(ns.first == meta->publicNamespace); ASSERT(ns.second->content->memberKind == Member::VariableMember); (checked_cast(ns.second->content))->value = OBJECT_TO_JS2VAL(argsObj); diff --git a/mozilla/js2/src/js2metadata.h b/mozilla/js2/src/js2metadata.h index 2892a4a3156..ab12735f975 100644 --- a/mozilla/js2/src/js2metadata.h +++ b/mozilla/js2/src/js2metadata.h @@ -656,12 +656,8 @@ public: // A LocalBindingMap maps names to a list of LocalBindings. Each LocalBinding in the list // will have the same QualifiedName.name, but (potentially) different QualifiedName.namespace values -typedef HashTable LocalBindingMap; -typedef TableIterator LocalBindingIterator; - - - - +typedef HashTable LocalBindingMap; +typedef TableIterator LocalBindingIterator; class InstanceBindingEntry { @@ -1448,7 +1444,6 @@ typedef NamespaceList::iterator NamespaceListIterator; class Context { public: Context() : strict(false), E3compatibility(true) { } - Context(Context *cxt); bool strict; // true if strict mode is in effect bool E3compatibility; NamespaceList openNamespaces; // The set of namespaces that are open at this point. @@ -1767,8 +1762,8 @@ public: }; // namespace MetaData -inline bool operator==(MetaData::LocalBindingEntry *s1, const StringAtom &s2) { return s1->name == s2;} -inline bool operator!=(MetaData::LocalBindingEntry *s1, const StringAtom &s2) { return s1->name != s2;} +inline bool operator==(MetaData::LocalBindingEntry &s1, const StringAtom &s2) { return s1.name == s2;} +inline bool operator!=(MetaData::LocalBindingEntry &s1, const StringAtom &s2) { return s1.name != s2;} inline bool operator==(MetaData::InstanceBindingEntry *s1, const StringAtom &s2) { return s1->name == s2;} inline bool operator!=(MetaData::InstanceBindingEntry *s1, const StringAtom &s2) { return s1->name != s2;}