Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Unified Diff: src/codegen-ia32.cc

Issue 7366: Split window support from V8. ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/codegen-ia32.h ('k') | src/contexts.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/codegen-ia32.cc
===================================================================
--- src/codegen-ia32.cc (revision 539)
+++ src/codegen-ia32.cc (working copy)
@@ -519,10 +519,17 @@
}
+void CodeGenerator::LoadGlobalReceiver(Register scratch) {
+ __ mov(scratch, ContextOperand(esi, Context::GLOBAL_INDEX));
+ __ push(FieldOperand(scratch, GlobalObject::kGlobalReceiverOffset));
+}
+
+
// TODO(1241834): Get rid of this function in favor of just using Load, now
// that we have the INSIDE_TYPEOF typeof state. => Need to handle global
// variables w/o reference errors elsewhere.
void CodeGenerator::LoadTypeofExpression(Expression* x) {
+
Variable* variable = x->AsVariableProxy()->AsVariable();
if (variable != NULL && !variable->is_this() && variable->is_global()) {
// NOTE: This is somewhat nasty. We force the compiler to load
@@ -2650,8 +2657,11 @@
// Push the name of the function and the receiver onto the stack.
frame_->Push(Immediate(var->name()));
- LoadGlobal();
+ // TODO(120): use the JSGlobalObject for function lookup and inline cache,
+ // and use outer global as 'this' object.
+ LoadGlobalReceiver(eax);
+
// Load the arguments.
for (int i = 0; i < args->length(); i++) {
Load(args->at(i));
@@ -2736,7 +2746,9 @@
Load(function);
// Pass the global object as the receiver.
- LoadGlobal();
+ // TODO(120): use JSGlobalObject for method lookup, and use JSGlobalProxy
+ // as 'this' for method invocation.
+ LoadGlobalReceiver(eax);
// Call the function.
CallWithArguments(args, node->position());
@@ -2756,7 +2768,7 @@
// Compute function to call and use the global object as the
// receiver.
Load(node->expression());
- LoadGlobal();
+ LoadGlobalReceiver(eax);
// Push the arguments ("left-to-right") on the stack.
ZoneList<Expression*>* args = node->arguments();
@@ -3496,12 +3508,11 @@
// inlining a null check instead of calling the (very) general
// runtime routine for checking equality.
- bool left_is_null =
- left->AsLiteral() != NULL && left->AsLiteral()->IsNull();
- bool right_is_null =
- right->AsLiteral() != NULL && right->AsLiteral()->IsNull();
-
if (op == Token::EQ || op == Token::EQ_STRICT) {
+ bool left_is_null =
+ left->AsLiteral() != NULL && left->AsLiteral()->IsNull();
+ bool right_is_null =
+ right->AsLiteral() != NULL && right->AsLiteral()->IsNull();
// The 'null' value is only equal to 'null' or 'undefined'.
if (left_is_null || right_is_null) {
Load(left_is_null ? right : left);
@@ -3536,7 +3547,6 @@
}
}
-
// NOTE: To make typeof testing for natives implemented in
// JavaScript really efficient, we generate special code for
// expressions of the form: 'typeof <expression> == <string>'.
« no previous file with comments | « src/codegen-ia32.h ('k') | src/contexts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698