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

Side by Side Diff: test/cctest/test-api.cc

Issue 12673: Change implementation of eval to make an exact distinction between direct eva... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 4000 matching lines...) Expand 10 before | Expand all | Expand 10 after
4011 " if (str.indexOf('#<a Fun>') == -1) return 3;" 4011 " if (str.indexOf('#<a Fun>') == -1) return 3;"
4012 " return 0;" 4012 " return 0;"
4013 " }" 4013 " }"
4014 " return 4;" 4014 " return 4;"
4015 "}" 4015 "}"
4016 "test();"); 4016 "test();");
4017 CHECK_EQ(0, value->Int32Value()); 4017 CHECK_EQ(0, value->Int32Value());
4018 } 4018 }
4019 4019
4020 4020
4021 THREADED_TEST(Eval) { 4021 THREADED_TEST(EvalAliasedDynamic) {
4022 v8::HandleScope scope; 4022 v8::HandleScope scope;
4023 LocalContext current; 4023 LocalContext current;
4024 4024
4025 // Test that un-aliased eval uses local context. 4025 // This sets 'global' to the real global object (as opposed to the
4026 // proxy). It is highly implementation dependent, so take care.
4027 current->Global()->Set(v8_str("global"), current->Global()->GetPrototype());
4028
4029 // Tests where aliased eval can only be resolved dynamically.
4026 Local<Script> script = 4030 Local<Script> script =
4027 Script::Compile(v8_str("foo = 0;" 4031 Script::Compile(v8_str("function f(x) { "
4028 "(function() {"
4029 " var foo = 2;" 4032 " var foo = 2;"
4030 " return eval('foo');" 4033 " with (x) { return eval('foo'); }"
4031 "})();")); 4034 "}"
4032 Local<Value> result = script->Run(); 4035 "foo = 0;"
4033 CHECK_EQ(2, result->Int32Value()); 4036 "result1 = f(new Object());"
4037 "result2 = f(global);"
4038 "var x = new Object();"
4039 "x.eval = function(x) { return 1; };"
4040 "result3 = f(x);"));
4041 script->Run();
4042 CHECK_EQ(2, current->Global()->Get(v8_str("result1"))->Int32Value());
4043 CHECK_EQ(0, current->Global()->Get(v8_str("result2"))->Int32Value());
4044 CHECK_EQ(1, current->Global()->Get(v8_str("result3"))->Int32Value());
4034 4045
4035 // Test that un-aliased eval has right this. 4046 v8::TryCatch try_catch;
4036 script = 4047 script =
4037 Script::Compile(v8_str("function MyObject() { this.self = eval('this'); }" 4048 Script::Compile(v8_str("function f(x) { "
4038 "var o = new MyObject();" 4049 " var bar = 2;"
4039 "o === o.self")); 4050 " with (x) { return eval('bar'); }"
4040 result = script->Run(); 4051 "}"
4041 CHECK(result->IsTrue()); 4052 "f(global)"));
4053 script->Run();
4054 CHECK(try_catch.HasCaught());
4055 try_catch.Reset();
4042 } 4056 }
4043 4057
4044 4058
4045 THREADED_TEST(CrossEval) { 4059 THREADED_TEST(CrossEval) {
4046 v8::HandleScope scope; 4060 v8::HandleScope scope;
4047 LocalContext other; 4061 LocalContext other;
4048 LocalContext current; 4062 LocalContext current;
4049 4063
4050 Local<String> token = v8_str("<security token>"); 4064 Local<String> token = v8_str("<security token>");
4051 other->SetSecurityToken(token); 4065 other->SetSecurityToken(token);
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after
5338 CompileRun("for (var j = 0; j < 10; j++) new RegExp('');"); 5352 CompileRun("for (var j = 0; j < 10; j++) new RegExp('');");
5339 } 5353 }
5340 // Test CallIC. 5354 // Test CallIC.
5341 for (int i = 0; i < 2; i++) { 5355 for (int i = 0; i < 2; i++) {
5342 LocalContext context; 5356 LocalContext context;
5343 context->Global()->Set(v8_str("tmp"), v8::True()); 5357 context->Global()->Set(v8_str("tmp"), v8::True());
5344 context->Global()->Delete(v8_str("tmp")); 5358 context->Global()->Delete(v8_str("tmp"));
5345 CompileRun("for (var j = 0; j < 10; j++) RegExp('')"); 5359 CompileRun("for (var j = 0; j < 10; j++) RegExp('')");
5346 } 5360 }
5347 } 5361 }
OLDNEW
« src/codegen-ia32.cc ('K') | « src/v8natives.js ('k') | test/mjsunit/eval.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698