Index: src/compiler.cc |
=================================================================== |
--- src/compiler.cc (revision 3178) |
+++ src/compiler.cc (working copy) |
@@ -741,8 +741,8 @@ |
void CodeGenSelector::VisitAssignment(Assignment* expr) { |
- // We support plain non-compound assignments to parameters and |
- // non-context (stack-allocated) locals. |
+ // We support plain non-compound assignments to properties, parameters and |
+ // non-context (stack-allocated) locals, and global variables. |
if (expr->starts_initialization_block() || |
expr->ends_initialization_block()) { |
BAILOUT("initialization block start"); |
@@ -755,10 +755,14 @@ |
} |
Variable* var = expr->target()->AsVariableProxy()->AsVariable(); |
- if (var == NULL) BAILOUT("non-variable assignment"); |
- |
- if (!var->is_global()) { |
- ASSERT(var->slot() != NULL); |
+ if (var == NULL) { |
+ Property* prop = expr->target()->AsProperty(); |
+ if (prop == NULL) BAILOUT("non-variable, non-property assignment"); |
+ VisitAsValue(prop->obj()); |
+ CHECK_BAILOUT; |
+ VisitAsValue(prop->key()); |
+ } else if (!var->is_global()) { |
+ if (var->slot() == NULL) BAILOUT("Assigment with an unsupported LHS."); |
Slot::Type type = var->slot()->type(); |
if (type != Slot::PARAMETER && type != Slot::LOCAL) { |
BAILOUT("non-parameter/non-local slot assignment"); |