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

Side by Side Diff: src/runtime.cc

Issue 173349: Reverting 2753. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/runtime.h ('k') | src/stub-cache.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 27 matching lines...) Expand all
38 #include "dateparser-inl.h" 38 #include "dateparser-inl.h"
39 #include "debug.h" 39 #include "debug.h"
40 #include "execution.h" 40 #include "execution.h"
41 #include "jsregexp.h" 41 #include "jsregexp.h"
42 #include "platform.h" 42 #include "platform.h"
43 #include "runtime.h" 43 #include "runtime.h"
44 #include "scopeinfo.h" 44 #include "scopeinfo.h"
45 #include "v8threads.h" 45 #include "v8threads.h"
46 #include "smart-pointer.h" 46 #include "smart-pointer.h"
47 #include "parser.h" 47 #include "parser.h"
48 #include "stub-cache.h"
49 48
50 namespace v8 { 49 namespace v8 {
51 namespace internal { 50 namespace internal {
52 51
53 52
54 #define RUNTIME_ASSERT(value) \ 53 #define RUNTIME_ASSERT(value) \
55 if (!(value)) return Top::ThrowIllegalOperation(); 54 if (!(value)) return Top::ThrowIllegalOperation();
56 55
57 // Cast the given object to a value of the specified type and store 56 // Cast the given object to a value of the specified type and store
58 // it in a variable with the given name. If the object is not of the 57 // it in a variable with the given name. If the object is not of the
(...skipping 1170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1229 // function. 1228 // function.
1230 target->set_code(fun->code()); 1229 target->set_code(fun->code());
1231 target->shared()->set_length(fun->shared()->length()); 1230 target->shared()->set_length(fun->shared()->length());
1232 target->shared()->set_formal_parameter_count( 1231 target->shared()->set_formal_parameter_count(
1233 fun->shared()->formal_parameter_count()); 1232 fun->shared()->formal_parameter_count());
1234 // Set the source code of the target function to undefined. 1233 // Set the source code of the target function to undefined.
1235 // SetCode is only used for built-in constructors like String, 1234 // SetCode is only used for built-in constructors like String,
1236 // Array, and Object, and some web code 1235 // Array, and Object, and some web code
1237 // doesn't like seeing source code for constructors. 1236 // doesn't like seeing source code for constructors.
1238 target->shared()->set_script(Heap::undefined_value()); 1237 target->shared()->set_script(Heap::undefined_value());
1239 // Clear the optimization hints related to the compiled code as these are no
1240 // longer valid when the code is overwritten.
1241 target->shared()->ClearThisPropertyAssignmentsInfo();
1242 context = Handle<Context>(fun->context()); 1238 context = Handle<Context>(fun->context());
1243 1239
1244 // Make sure we get a fresh copy of the literal vector to avoid 1240 // Make sure we get a fresh copy of the literal vector to avoid
1245 // cross context contamination. 1241 // cross context contamination.
1246 int number_of_literals = fun->NumberOfLiterals(); 1242 int number_of_literals = fun->NumberOfLiterals();
1247 Handle<FixedArray> literals = 1243 Handle<FixedArray> literals =
1248 Factory::NewFixedArray(number_of_literals, TENURED); 1244 Factory::NewFixedArray(number_of_literals, TENURED);
1249 if (number_of_literals > 0) { 1245 if (number_of_literals > 0) {
1250 // Insert the object, regexp and array functions in the literals 1246 // Insert the object, regexp and array functions in the literals
1251 // array prefix. These are the functions that will be used when 1247 // array prefix. These are the functions that will be used when
(...skipping 3071 matching lines...) Expand 10 before | Expand all | Expand 10 after
4323 ASSERT(args.length() == 2); 4319 ASSERT(args.length() == 2);
4324 CONVERT_ARG_CHECKED(JSFunction, boilerplate, 0); 4320 CONVERT_ARG_CHECKED(JSFunction, boilerplate, 0);
4325 CONVERT_ARG_CHECKED(Context, context, 1); 4321 CONVERT_ARG_CHECKED(Context, context, 1);
4326 4322
4327 Handle<JSFunction> result = 4323 Handle<JSFunction> result =
4328 Factory::NewFunctionFromBoilerplate(boilerplate, context); 4324 Factory::NewFunctionFromBoilerplate(boilerplate, context);
4329 return *result; 4325 return *result;
4330 } 4326 }
4331 4327
4332 4328
4333 static Code* ComputeConstructStub(Handle<SharedFunctionInfo> shared) { 4329 static Handle<Code> ComputeConstructStub(Handle<Map> map) {
4334 // TODO(385): Change this to create a construct stub specialized for 4330 // TODO(385): Change this to create a construct stub specialized for
4335 // the given map to make allocation of simple objects - and maybe 4331 // the given map to make allocation of simple objects - and maybe
4336 // arrays - much faster. 4332 // arrays - much faster.
4337 if (FLAG_inline_new 4333 return Handle<Code>(Builtins::builtin(Builtins::JSConstructStubGeneric));
4338 && shared->has_only_simple_this_property_assignments()) {
4339 ConstructStubCompiler compiler;
4340 Object* code = compiler.CompileConstructStub(*shared);
4341 if (code->IsFailure()) {
4342 return Builtins::builtin(Builtins::JSConstructStubGeneric);
4343 }
4344 return Code::cast(code);
4345 }
4346
4347 return Builtins::builtin(Builtins::JSConstructStubGeneric);
4348 } 4334 }
4349 4335
4350 4336
4351 static Object* Runtime_NewObject(Arguments args) { 4337 static Object* Runtime_NewObject(Arguments args) {
4352 HandleScope scope; 4338 HandleScope scope;
4353 ASSERT(args.length() == 1); 4339 ASSERT(args.length() == 1);
4354 4340
4355 Handle<Object> constructor = args.at<Object>(0); 4341 Handle<Object> constructor = args.at<Object>(0);
4356 4342
4357 // If the constructor isn't a proper function we throw a type error. 4343 // If the constructor isn't a proper function we throw a type error.
(...skipping 22 matching lines...) Expand all
4380 // allocate JSFunctions since it does not properly initialize 4366 // allocate JSFunctions since it does not properly initialize
4381 // the shared part of the function. Since the receiver is 4367 // the shared part of the function. Since the receiver is
4382 // ignored anyway, we use the global object as the receiver 4368 // ignored anyway, we use the global object as the receiver
4383 // instead of a new JSFunction object. This way, errors are 4369 // instead of a new JSFunction object. This way, errors are
4384 // reported the same way whether or not 'Function' is called 4370 // reported the same way whether or not 'Function' is called
4385 // using 'new'. 4371 // using 'new'.
4386 return Top::context()->global(); 4372 return Top::context()->global();
4387 } 4373 }
4388 } 4374 }
4389 4375
4390 // The function should be compiled for the optimization hints to be available.
4391 if (!function->shared()->is_compiled()) {
4392 CompileLazyShared(Handle<SharedFunctionInfo>(function->shared()),
4393 CLEAR_EXCEPTION,
4394 0);
4395 }
4396
4397 bool first_allocation = !function->has_initial_map(); 4376 bool first_allocation = !function->has_initial_map();
4398 Handle<JSObject> result = Factory::NewJSObject(function); 4377 Handle<JSObject> result = Factory::NewJSObject(function);
4399 if (first_allocation) { 4378 if (first_allocation) {
4400 Handle<Map> map = Handle<Map>(function->initial_map()); 4379 Handle<Map> map = Handle<Map>(function->initial_map());
4401 Handle<Code> stub = Handle<Code>( 4380 Handle<Code> stub = ComputeConstructStub(map);
4402 ComputeConstructStub(Handle<SharedFunctionInfo>(function->shared())));
4403 function->shared()->set_construct_stub(*stub); 4381 function->shared()->set_construct_stub(*stub);
4404 } 4382 }
4405
4406 Counters::constructed_objects.Increment(); 4383 Counters::constructed_objects.Increment();
4407 Counters::constructed_objects_runtime.Increment(); 4384 Counters::constructed_objects_runtime.Increment();
4408
4409 return *result; 4385 return *result;
4410 } 4386 }
4411 4387
4412 4388
4413 static Object* Runtime_LazyCompile(Arguments args) { 4389 static Object* Runtime_LazyCompile(Arguments args) {
4414 HandleScope scope; 4390 HandleScope scope;
4415 ASSERT(args.length() == 1); 4391 ASSERT(args.length() == 1);
4416 4392
4417 Handle<JSFunction> function = args.at<JSFunction>(0); 4393 Handle<JSFunction> function = args.at<JSFunction>(0);
4418 #ifdef DEBUG 4394 #ifdef DEBUG
(...skipping 2984 matching lines...) Expand 10 before | Expand all | Expand 10 after
7403 } 7379 }
7404 7380
7405 7381
7406 static Object* Runtime_SystemBreak(Arguments args) { 7382 static Object* Runtime_SystemBreak(Arguments args) {
7407 ASSERT(args.length() == 0); 7383 ASSERT(args.length() == 0);
7408 CPU::DebugBreak(); 7384 CPU::DebugBreak();
7409 return Heap::undefined_value(); 7385 return Heap::undefined_value();
7410 } 7386 }
7411 7387
7412 7388
7413 static Object* Runtime_DebugDisassembleFunction(Arguments args) { 7389 static Object* Runtime_FunctionGetAssemblerCode(Arguments args) {
7414 #ifdef DEBUG 7390 #ifdef DEBUG
7415 HandleScope scope; 7391 HandleScope scope;
7416 ASSERT(args.length() == 1); 7392 ASSERT(args.length() == 1);
7417 // Get the function and make sure it is compiled. 7393 // Get the function and make sure it is compiled.
7418 CONVERT_ARG_CHECKED(JSFunction, func, 0); 7394 CONVERT_ARG_CHECKED(JSFunction, func, 0);
7419 if (!func->is_compiled() && !CompileLazy(func, KEEP_EXCEPTION)) { 7395 if (!func->is_compiled() && !CompileLazy(func, KEEP_EXCEPTION)) {
7420 return Failure::Exception(); 7396 return Failure::Exception();
7421 } 7397 }
7422 func->code()->PrintLn(); 7398 func->code()->PrintLn();
7423 #endif // DEBUG 7399 #endif // DEBUG
7424 return Heap::undefined_value(); 7400 return Heap::undefined_value();
7425 } 7401 }
7426 7402
7427 7403
7428 static Object* Runtime_DebugDisassembleConstructor(Arguments args) {
7429 #ifdef DEBUG
7430 HandleScope scope;
7431 ASSERT(args.length() == 1);
7432 // Get the function and make sure it is compiled.
7433 CONVERT_ARG_CHECKED(JSFunction, func, 0);
7434 if (!func->is_compiled() && !CompileLazy(func, KEEP_EXCEPTION)) {
7435 return Failure::Exception();
7436 }
7437 func->shared()->construct_stub()->PrintLn();
7438 #endif // DEBUG
7439 return Heap::undefined_value();
7440 }
7441
7442
7443 static Object* Runtime_FunctionGetInferredName(Arguments args) { 7404 static Object* Runtime_FunctionGetInferredName(Arguments args) {
7444 NoHandleAllocation ha; 7405 NoHandleAllocation ha;
7445 ASSERT(args.length() == 1); 7406 ASSERT(args.length() == 1);
7446 7407
7447 CONVERT_CHECKED(JSFunction, f, args[0]); 7408 CONVERT_CHECKED(JSFunction, f, args[0]);
7448 return f->shared()->inferred_name(); 7409 return f->shared()->inferred_name();
7449 } 7410 }
7450 #endif // ENABLE_DEBUGGER_SUPPORT 7411 #endif // ENABLE_DEBUGGER_SUPPORT
7451 7412
7452 7413
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
7671 } else { 7632 } else {
7672 // Handle last resort GC and make sure to allow future allocations 7633 // Handle last resort GC and make sure to allow future allocations
7673 // to grow the heap without causing GCs (if possible). 7634 // to grow the heap without causing GCs (if possible).
7674 Counters::gc_last_resort_from_js.Increment(); 7635 Counters::gc_last_resort_from_js.Increment();
7675 Heap::CollectAllGarbage(false); 7636 Heap::CollectAllGarbage(false);
7676 } 7637 }
7677 } 7638 }
7678 7639
7679 7640
7680 } } // namespace v8::internal 7641 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/runtime.h ('k') | src/stub-cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698