Bug 1071646 - Cast ParseNode to Definition using as<T>. (r=jorendorff)

This commit is contained in:
Shu-yu Guo 2015-12-18 13:18:19 -08:00 committed by Cameron Kaiser
parent 884bd2ab53
commit feba46e3f4
3 changed files with 13 additions and 13 deletions

View File

@ -1738,7 +1738,7 @@ BytecodeEmitter::bindNameToSlotHelper(ParseNode* pn)
MOZ_ASSERT(dn->isDefn());
pn->pn_dflags |= (dn->pn_dflags & PND_CONST);
} else if (pn->isDefn()) {
dn = (Definition*) pn;
dn = &pn->as<Definition>();
} else {
return true;
}

View File

@ -1612,6 +1612,8 @@ struct Definition : public ParseNode
IMPORT
};
static bool test(const ParseNode& pn) { return pn.isDefn(); }
bool canHaveInitializer() { return int(kind()) <= int(ARG); }
static const char* kindString(Kind kind);

View File

@ -103,9 +103,7 @@ ParseContext<FullParseHandler>::checkLocalsOverflow(TokenStream& ts)
static void
MarkUsesAsHoistedLexical(ParseNode* pn)
{
MOZ_ASSERT(pn->isDefn());
Definition* dn = (Definition*)pn;
Definition* dn = &pn->as<Definition>();
ParseNode** pnup = &dn->dn_uses;
ParseNode* pnu;
unsigned start = pn->pn_blockid;
@ -222,6 +220,8 @@ ParseContext<FullParseHandler>::define(TokenStream& ts,
MOZ_ASSERT(!pn->isUsed());
MOZ_ASSERT_IF(pn->isDefn(), pn->isPlaceholder());
pn->setDefn(true);
Definition* prevDef = nullptr;
if (kind == Definition::LET || kind == Definition::CONSTANT)
prevDef = decls_.lookupFirst(name);
@ -240,7 +240,7 @@ ParseContext<FullParseHandler>::define(TokenStream& ts,
while ((pnu = *pnup) != nullptr && pnu->pn_blockid >= start) {
MOZ_ASSERT(pnu->pn_blockid >= bodyid);
MOZ_ASSERT(pnu->isUsed());
pnu->pn_lexdef = (Definition*) pn;
pnu->pn_lexdef = &pn->as<Definition>();
pn->pn_dflags |= pnu->pn_dflags & PND_USE2DEF_FLAGS;
pnup = &pnu->pn_link;
}
@ -258,12 +258,11 @@ ParseContext<FullParseHandler>::define(TokenStream& ts,
}
MOZ_ASSERT_IF(kind != Definition::LET && kind != Definition::CONSTANT, !lexdeps->lookup(name));
pn->setDefn(true);
pn->pn_dflags &= ~PND_PLACEHOLDER;
if (kind == Definition::CONSTANT)
pn->pn_dflags |= PND_CONST;
Definition* dn = (Definition*)pn;
Definition* dn = &pn->as<Definition>();
switch (kind) {
case Definition::ARG:
MOZ_ASSERT(sc->isFunctionBox());
@ -393,7 +392,7 @@ ParseContext<ParseHandler>::updateDecl(TokenStream& ts, JSAtom* atom, Node pn)
Definition* oldDecl = decls_.lookupFirst(atom);
pn->setDefn(true);
Definition* newDecl = (Definition*)pn;
Definition* newDecl = &pn->template as<Definition>();
decls_.updateFirst(atom, newDecl);
if (sc->isGlobalContext() || oldDecl->isDeoptimized()) {
@ -1397,7 +1396,7 @@ Parser<FullParseHandler>::makeDefIntoUse(Definition* dn, ParseNode* pn, HandleAt
for (ParseNode* pnu = dn->dn_uses; pnu; pnu = pnu->pn_link) {
MOZ_ASSERT(pnu->isUsed());
MOZ_ASSERT(!pnu->isDefn());
pnu->pn_lexdef = (Definition*) pn;
pnu->pn_lexdef = &pn->as<Definition>();
pn->pn_dflags |= pnu->pn_dflags & PND_USE2DEF_FLAGS;
}
pn->pn_dflags |= dn->pn_dflags & PND_USE2DEF_FLAGS;
@ -1440,7 +1439,7 @@ Parser<FullParseHandler>::makeDefIntoUse(Definition* dn, ParseNode* pn, HandleAt
return false;
pn->dn_uses = lhs;
dn->pn_link = nullptr;
dn = (Definition*) lhs;
dn = &lhs->as<Definition>();
}
}
@ -1451,7 +1450,7 @@ Parser<FullParseHandler>::makeDefIntoUse(Definition* dn, ParseNode* pn, HandleAt
dn->setOp((CodeSpec[dn->getOp()].format & JOF_SET) ? JSOP_SETNAME : JSOP_GETNAME);
dn->setDefn(false);
dn->setUsed(true);
dn->pn_lexdef = (Definition*) pn;
dn->pn_lexdef = &pn->as<Definition>();
dn->pn_scopecoord.makeFree();
dn->pn_dflags &= ~PND_BOUND;
return true;
@ -2399,8 +2398,7 @@ Parser<FullParseHandler>::checkFunctionDefinition(HandlePropertyName funName,
if (!data.bind(funName, this))
return false;
MOZ_ASSERT(varNode->isDefn());
annexDef = static_cast<Definition*>(varNode);
annexDef = &varNode->as<Definition>();
synthesizedDeclarationList = handler.newDeclarationList(PNK_VAR, JSOP_DEFVAR);
if (!synthesizedDeclarationList)