Index: src/compiler.cc |
=================================================================== |
--- src/compiler.cc (revision 3181) |
+++ src/compiler.cc (working copy) |
@@ -770,8 +770,23 @@ |
// ---------------------------------- |
// JavaScript example: 'foo(1, 2, 3)' // foo is global |
// ---------------------------------- |
+ } else if (fun->AsProperty() != NULL) { |
+ // ------------------------------------------------------------------ |
+ // JavaScript example: 'object.foo(1, 2, 3)' or 'map["key"](1, 2, 3)' |
+ // ------------------------------------------------------------------ |
+ Property* prop = fun->AsProperty(); |
+ Literal* literal_key = prop->key()->AsLiteral(); |
+ if (literal_key != NULL && literal_key->handle()->IsSymbol()) { |
+ ProcessExpression(prop->obj(), Expression::kValue); |
+ CHECK_BAILOUT; |
+ } else { |
+ ProcessExpression(prop->obj(), Expression::kValue); |
+ CHECK_BAILOUT; |
+ ProcessExpression(prop->key(), Expression::kValue); |
+ CHECK_BAILOUT; |
+ } |
} else { |
- BAILOUT("Call to a non-global function"); |
+ BAILOUT("Unsupported call to a function"); |
} |
// Check all arguments to the call. (Relies on TEMP meaning STACK.) |
for (int i = 0; i < args->length(); i++) { |