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

Side by Side Diff: src/runtime.cc

Issue 7860011: Rename SmartPointer to SmartArrayPointer. (Closed) Base URL: git://github.com/v8/v8.git@bleeding_edge
Patch Set: rebase it again to get more fixes Created 9 years, 3 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
« no previous file with comments | « src/prettyprinter.cc ('k') | src/scopes.cc » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "jsregexp.h" 45 #include "jsregexp.h"
46 #include "json-parser.h" 46 #include "json-parser.h"
47 #include "liveedit.h" 47 #include "liveedit.h"
48 #include "liveobjectlist-inl.h" 48 #include "liveobjectlist-inl.h"
49 #include "misc-intrinsics.h" 49 #include "misc-intrinsics.h"
50 #include "parser.h" 50 #include "parser.h"
51 #include "platform.h" 51 #include "platform.h"
52 #include "runtime-profiler.h" 52 #include "runtime-profiler.h"
53 #include "runtime.h" 53 #include "runtime.h"
54 #include "scopeinfo.h" 54 #include "scopeinfo.h"
55 #include "smart-pointer.h" 55 #include "smart-array-pointer.h"
56 #include "string-search.h" 56 #include "string-search.h"
57 #include "stub-cache.h" 57 #include "stub-cache.h"
58 #include "v8threads.h" 58 #include "v8threads.h"
59 #include "vm-state-inl.h" 59 #include "vm-state-inl.h"
60 60
61 namespace v8 { 61 namespace v8 {
62 namespace internal { 62 namespace internal {
63 63
64 64
65 #define RUNTIME_ASSERT(value) \ 65 #define RUNTIME_ASSERT(value) \
(...skipping 7825 matching lines...) Expand 10 before | Expand all | Expand 10 after
7891 // directly to properties. 7891 // directly to properties.
7892 PretenureFlag pretenure_flag = pretenure ? TENURED : NOT_TENURED; 7892 PretenureFlag pretenure_flag = pretenure ? TENURED : NOT_TENURED;
7893 Handle<JSFunction> result = 7893 Handle<JSFunction> result =
7894 isolate->factory()->NewFunctionFromSharedFunctionInfo(shared, 7894 isolate->factory()->NewFunctionFromSharedFunctionInfo(shared,
7895 context, 7895 context,
7896 pretenure_flag); 7896 pretenure_flag);
7897 return *result; 7897 return *result;
7898 } 7898 }
7899 7899
7900 7900
7901 static SmartPointer<Object**> GetNonBoundArguments(int bound_argc, 7901 static SmartArrayPointer<Object**> GetNonBoundArguments(int bound_argc,
7902 int* total_argc) { 7902 int* total_argc) {
7903 // Find frame containing arguments passed to the caller. 7903 // Find frame containing arguments passed to the caller.
7904 JavaScriptFrameIterator it; 7904 JavaScriptFrameIterator it;
7905 JavaScriptFrame* frame = it.frame(); 7905 JavaScriptFrame* frame = it.frame();
7906 List<JSFunction*> functions(2); 7906 List<JSFunction*> functions(2);
7907 frame->GetFunctions(&functions); 7907 frame->GetFunctions(&functions);
7908 if (functions.length() > 1) { 7908 if (functions.length() > 1) {
7909 int inlined_frame_index = functions.length() - 1; 7909 int inlined_frame_index = functions.length() - 1;
7910 JSFunction* inlined_function = functions[inlined_frame_index]; 7910 JSFunction* inlined_function = functions[inlined_frame_index];
7911 int args_count = inlined_function->shared()->formal_parameter_count(); 7911 int args_count = inlined_function->shared()->formal_parameter_count();
7912 ScopedVector<SlotRef> args_slots(args_count); 7912 ScopedVector<SlotRef> args_slots(args_count);
7913 SlotRef::ComputeSlotMappingForArguments(frame, 7913 SlotRef::ComputeSlotMappingForArguments(frame,
7914 inlined_frame_index, 7914 inlined_frame_index,
7915 &args_slots); 7915 &args_slots);
7916 7916
7917 *total_argc = bound_argc + args_count; 7917 *total_argc = bound_argc + args_count;
7918 SmartPointer<Object**> param_data(NewArray<Object**>(*total_argc)); 7918 SmartArrayPointer<Object**> param_data(NewArray<Object**>(*total_argc));
7919 for (int i = 0; i < args_count; i++) { 7919 for (int i = 0; i < args_count; i++) {
7920 Handle<Object> val = args_slots[i].GetValue(); 7920 Handle<Object> val = args_slots[i].GetValue();
7921 param_data[bound_argc + i] = val.location(); 7921 param_data[bound_argc + i] = val.location();
7922 } 7922 }
7923 return param_data; 7923 return param_data;
7924 } else { 7924 } else {
7925 it.AdvanceToArgumentsFrame(); 7925 it.AdvanceToArgumentsFrame();
7926 frame = it.frame(); 7926 frame = it.frame();
7927 int args_count = frame->ComputeParametersCount(); 7927 int args_count = frame->ComputeParametersCount();
7928 7928
7929 *total_argc = bound_argc + args_count; 7929 *total_argc = bound_argc + args_count;
7930 SmartPointer<Object**> param_data(NewArray<Object**>(*total_argc)); 7930 SmartArrayPointer<Object**> param_data(NewArray<Object**>(*total_argc));
7931 for (int i = 0; i < args_count; i++) { 7931 for (int i = 0; i < args_count; i++) {
7932 Handle<Object> val = Handle<Object>(frame->GetParameter(i)); 7932 Handle<Object> val = Handle<Object>(frame->GetParameter(i));
7933 param_data[bound_argc + i] = val.location(); 7933 param_data[bound_argc + i] = val.location();
7934 } 7934 }
7935 return param_data; 7935 return param_data;
7936 } 7936 }
7937 } 7937 }
7938 7938
7939 7939
7940 RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObjectFromBound) { 7940 RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObjectFromBound) {
7941 HandleScope scope(isolate); 7941 HandleScope scope(isolate);
7942 ASSERT(args.length() == 2); 7942 ASSERT(args.length() == 2);
7943 // First argument is a function to use as a constructor. 7943 // First argument is a function to use as a constructor.
7944 CONVERT_ARG_CHECKED(JSFunction, function, 0); 7944 CONVERT_ARG_CHECKED(JSFunction, function, 0);
7945 7945
7946 // Second argument is either null or an array of bound arguments. 7946 // Second argument is either null or an array of bound arguments.
7947 Handle<FixedArray> bound_args; 7947 Handle<FixedArray> bound_args;
7948 int bound_argc = 0; 7948 int bound_argc = 0;
7949 if (!args[1]->IsNull()) { 7949 if (!args[1]->IsNull()) {
7950 CONVERT_ARG_CHECKED(JSArray, params, 1); 7950 CONVERT_ARG_CHECKED(JSArray, params, 1);
7951 RUNTIME_ASSERT(params->HasFastElements()); 7951 RUNTIME_ASSERT(params->HasFastElements());
7952 bound_args = Handle<FixedArray>(FixedArray::cast(params->elements())); 7952 bound_args = Handle<FixedArray>(FixedArray::cast(params->elements()));
7953 bound_argc = Smi::cast(params->length())->value(); 7953 bound_argc = Smi::cast(params->length())->value();
7954 } 7954 }
7955 7955
7956 int total_argc = 0; 7956 int total_argc = 0;
7957 SmartPointer<Object**> param_data = 7957 SmartArrayPointer<Object**> param_data =
7958 GetNonBoundArguments(bound_argc, &total_argc); 7958 GetNonBoundArguments(bound_argc, &total_argc);
7959 for (int i = 0; i < bound_argc; i++) { 7959 for (int i = 0; i < bound_argc; i++) {
7960 Handle<Object> val = Handle<Object>(bound_args->get(i)); 7960 Handle<Object> val = Handle<Object>(bound_args->get(i));
7961 param_data[i] = val.location(); 7961 param_data[i] = val.location();
7962 } 7962 }
7963 7963
7964 bool exception = false; 7964 bool exception = false;
7965 Handle<Object> result = 7965 Handle<Object> result =
7966 Execution::New(function, total_argc, *param_data, &exception); 7966 Execution::New(function, total_argc, *param_data, &exception);
7967 if (exception) { 7967 if (exception) {
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
8866 return Execution::HandleStackGuardInterrupt(); 8866 return Execution::HandleStackGuardInterrupt();
8867 } 8867 }
8868 8868
8869 8869
8870 // NOTE: These PrintXXX functions are defined for all builds (not just 8870 // NOTE: These PrintXXX functions are defined for all builds (not just
8871 // DEBUG builds) because we may want to be able to trace function 8871 // DEBUG builds) because we may want to be able to trace function
8872 // calls in all modes. 8872 // calls in all modes.
8873 static void PrintString(String* str) { 8873 static void PrintString(String* str) {
8874 // not uncommon to have empty strings 8874 // not uncommon to have empty strings
8875 if (str->length() > 0) { 8875 if (str->length() > 0) {
8876 SmartPointer<char> s = 8876 SmartArrayPointer<char> s =
8877 str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 8877 str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
8878 PrintF("%s", *s); 8878 PrintF("%s", *s);
8879 } 8879 }
8880 } 8880 }
8881 8881
8882 8882
8883 static void PrintObject(Object* obj) { 8883 static void PrintObject(Object* obj) {
8884 if (obj->IsSmi()) { 8884 if (obj->IsSmi()) {
8885 PrintF("%d", Smi::cast(obj)->value()); 8885 PrintF("%d", Smi::cast(obj)->value());
8886 } else if (obj->IsString() || obj->IsSymbol()) { 8886 } else if (obj->IsString() || obj->IsSymbol()) {
(...skipping 3531 matching lines...) Expand 10 before | Expand all | Expand 10 after
12418 return *result; 12418 return *result;
12419 } else { 12419 } else {
12420 return Failure::Exception(); 12420 return Failure::Exception();
12421 } 12421 }
12422 } 12422 }
12423 12423
12424 12424
12425 // Sets a v8 flag. 12425 // Sets a v8 flag.
12426 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFlags) { 12426 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFlags) {
12427 CONVERT_CHECKED(String, arg, args[0]); 12427 CONVERT_CHECKED(String, arg, args[0]);
12428 SmartPointer<char> flags = 12428 SmartArrayPointer<char> flags =
12429 arg->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL); 12429 arg->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
12430 FlagList::SetFlagsFromString(*flags, StrLength(*flags)); 12430 FlagList::SetFlagsFromString(*flags, StrLength(*flags));
12431 return isolate->heap()->undefined_value(); 12431 return isolate->heap()->undefined_value();
12432 } 12432 }
12433 12433
12434 12434
12435 // Performs a GC. 12435 // Performs a GC.
12436 // Presently, it only does a full GC. 12436 // Presently, it only does a full GC.
12437 RUNTIME_FUNCTION(MaybeObject*, Runtime_CollectGarbage) { 12437 RUNTIME_FUNCTION(MaybeObject*, Runtime_CollectGarbage) {
12438 isolate->heap()->CollectAllGarbage(true); 12438 isolate->heap()->CollectAllGarbage(true);
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
13134 } else { 13134 } else {
13135 // Handle last resort GC and make sure to allow future allocations 13135 // Handle last resort GC and make sure to allow future allocations
13136 // to grow the heap without causing GCs (if possible). 13136 // to grow the heap without causing GCs (if possible).
13137 isolate->counters()->gc_last_resort_from_js()->Increment(); 13137 isolate->counters()->gc_last_resort_from_js()->Increment();
13138 isolate->heap()->CollectAllGarbage(false); 13138 isolate->heap()->CollectAllGarbage(false);
13139 } 13139 }
13140 } 13140 }
13141 13141
13142 13142
13143 } } // namespace v8::internal 13143 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/prettyprinter.cc ('k') | src/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698