MIPS: Make invalid LHSs a parse-time (reference) error
Port r19976 (73bbd7a) Original commit message: This is required by the spec. It also prevents crashes resulting from the attempt to read type feedback for the RHS of an invalid assignment which full codegen never actually allocated info for. To do: check properly in preparser already. BUG=351658 LOG=Y R=rossberg@chromium.org Review URL: https://codereview.chromium.org/195893031 Patch from Balazs Kilvady <kilvadyb@homejinni.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20004 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
a8cc89c438
commit
7692811fbf
@ -1880,13 +1880,9 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
|
||||
|
||||
|
||||
void FullCodeGenerator::VisitAssignment(Assignment* expr) {
|
||||
ASSERT(expr->target()->IsValidLeftHandSide());
|
||||
|
||||
Comment cmnt(masm_, "[ Assignment");
|
||||
// Invalid left-hand sides are rewritten to have a 'throw ReferenceError'
|
||||
// on the left-hand side.
|
||||
if (!expr->target()->IsValidLeftHandSide()) {
|
||||
VisitForEffect(expr->target());
|
||||
return;
|
||||
}
|
||||
|
||||
// Left-hand side can only be a property, a global or a (parameter or local)
|
||||
// slot.
|
||||
@ -2424,12 +2420,7 @@ void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr,
|
||||
|
||||
|
||||
void FullCodeGenerator::EmitAssignment(Expression* expr) {
|
||||
// Invalid left-hand sides are rewritten by the parser to have a 'throw
|
||||
// ReferenceError' on the left-hand side.
|
||||
if (!expr->IsValidLeftHandSide()) {
|
||||
VisitForEffect(expr);
|
||||
return;
|
||||
}
|
||||
ASSERT(expr->IsValidLeftHandSide());
|
||||
|
||||
// Left-hand side can only be a property, a global or a (parameter or local)
|
||||
// slot.
|
||||
@ -4338,16 +4329,11 @@ void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
|
||||
|
||||
|
||||
void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
|
||||
ASSERT(expr->expression()->IsValidLeftHandSide());
|
||||
|
||||
Comment cmnt(masm_, "[ CountOperation");
|
||||
SetSourcePosition(expr->position());
|
||||
|
||||
// Invalid left-hand sides are rewritten to have a 'throw ReferenceError'
|
||||
// as the left-hand side.
|
||||
if (!expr->expression()->IsValidLeftHandSide()) {
|
||||
VisitForEffect(expr->expression());
|
||||
return;
|
||||
}
|
||||
|
||||
// Expression can only be a property, a global or a (parameter or local)
|
||||
// slot.
|
||||
enum LhsKind { VARIABLE, NAMED_PROPERTY, KEYED_PROPERTY };
|
||||
|
Loading…
Reference in New Issue
Block a user