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

Side by Side Diff: src/builtins.h

Issue 1316943002: Move (uppercase) JS builtins from js builtins object to native context. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: remove Isolate::js_builtins_object Created 5 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/bootstrapper.cc ('k') | src/builtins.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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_BUILTINS_H_ 5 #ifndef V8_BUILTINS_H_
6 #define V8_BUILTINS_H_ 6 #define V8_BUILTINS_H_
7 7
8 #include "src/handles.h" 8 #include "src/handles.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 V(LoadIC_Normal_Strong, LOAD_IC) \ 142 V(LoadIC_Normal_Strong, LOAD_IC) \
143 V(StoreIC_Normal, STORE_IC) 143 V(StoreIC_Normal, STORE_IC)
144 144
145 // Define list of builtins used by the debugger implemented in assembly. 145 // Define list of builtins used by the debugger implemented in assembly.
146 #define BUILTIN_LIST_DEBUG_A(V) \ 146 #define BUILTIN_LIST_DEBUG_A(V) \
147 V(Return_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState) \ 147 V(Return_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState) \
148 V(Slot_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState) \ 148 V(Slot_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState) \
149 V(PlainReturn_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState) \ 149 V(PlainReturn_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState) \
150 V(FrameDropper_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState) 150 V(FrameDropper_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState)
151 151
152 // Define list of builtins implemented in JavaScript.
153 #define BUILTINS_LIST_JS(V) \
154 V(EQUALS, 1) \
155 V(COMPARE, 2) \
156 V(COMPARE_STRONG, 2) \
157 V(ADD, 1) \
158 V(ADD_STRONG, 1) \
159 V(SUB, 1) \
160 V(SUB_STRONG, 1) \
161 V(MUL, 1) \
162 V(MUL_STRONG, 1) \
163 V(DIV, 1) \
164 V(DIV_STRONG, 1) \
165 V(MOD, 1) \
166 V(MOD_STRONG, 1) \
167 V(BIT_OR, 1) \
168 V(BIT_OR_STRONG, 1) \
169 V(BIT_AND, 1) \
170 V(BIT_AND_STRONG, 1) \
171 V(BIT_XOR, 1) \
172 V(BIT_XOR_STRONG, 1) \
173 V(SHL, 1) \
174 V(SHL_STRONG, 1) \
175 V(SAR, 1) \
176 V(SAR_STRONG, 1) \
177 V(SHR, 1) \
178 V(SHR_STRONG, 1) \
179 V(IN, 1) \
180 V(CALL_NON_FUNCTION, 0) \
181 V(CALL_NON_FUNCTION_AS_CONSTRUCTOR, 0) \
182 V(CALL_FUNCTION_PROXY, 1) \
183 V(CALL_FUNCTION_PROXY_AS_CONSTRUCTOR, 1) \
184 V(TO_NUMBER, 0) \
185 V(TO_STRING, 0) \
186 V(TO_NAME, 0) \
187 V(STRING_ADD_LEFT, 1) \
188 V(STRING_ADD_RIGHT, 1) \
189 V(APPLY_PREPARE, 1) \
190 V(REFLECT_APPLY_PREPARE, 1) \
191 V(REFLECT_CONSTRUCT_PREPARE, 2) \
192 V(CONCAT_ITERABLE_TO_ARRAY, 1) \
193 V(STACK_OVERFLOW, 1)
194 152
195 class BuiltinFunctionTable; 153 class BuiltinFunctionTable;
196 class ObjectVisitor; 154 class ObjectVisitor;
197 155
198 156
199 class Builtins { 157 class Builtins {
200 public: 158 public:
201 ~Builtins(); 159 ~Builtins();
202 160
203 // Generate all builtin code objects. Should be called once during 161 // Generate all builtin code objects. Should be called once during
(...skipping 20 matching lines...) Expand all
224 builtin_count 182 builtin_count
225 }; 183 };
226 184
227 enum CFunctionId { 185 enum CFunctionId {
228 #define DEF_ENUM_C(name, ignore) c_##name, 186 #define DEF_ENUM_C(name, ignore) c_##name,
229 BUILTIN_LIST_C(DEF_ENUM_C) 187 BUILTIN_LIST_C(DEF_ENUM_C)
230 #undef DEF_ENUM_C 188 #undef DEF_ENUM_C
231 cfunction_count 189 cfunction_count
232 }; 190 };
233 191
234 enum JavaScript {
235 #define DEF_ENUM(name, ignore) name,
236 BUILTINS_LIST_JS(DEF_ENUM)
237 #undef DEF_ENUM
238 id_count
239 };
240
241 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name(); 192 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
242 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ 193 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
243 Handle<Code> name(); 194 Handle<Code> name();
244 #define DECLARE_BUILTIN_ACCESSOR_H(name, kind) Handle<Code> name(); 195 #define DECLARE_BUILTIN_ACCESSOR_H(name, kind) Handle<Code> name();
245 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) 196 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C)
246 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) 197 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A)
247 BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H) 198 BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H)
248 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) 199 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A)
249 #undef DECLARE_BUILTIN_ACCESSOR_C 200 #undef DECLARE_BUILTIN_ACCESSOR_C
250 #undef DECLARE_BUILTIN_ACCESSOR_A 201 #undef DECLARE_BUILTIN_ACCESSOR_A
251 202
252 Code* builtin(Name name) { 203 Code* builtin(Name name) {
253 // Code::cast cannot be used here since we access builtins 204 // Code::cast cannot be used here since we access builtins
254 // during the marking phase of mark sweep. See IC::Clear. 205 // during the marking phase of mark sweep. See IC::Clear.
255 return reinterpret_cast<Code*>(builtins_[name]); 206 return reinterpret_cast<Code*>(builtins_[name]);
256 } 207 }
257 208
258 Address builtin_address(Name name) { 209 Address builtin_address(Name name) {
259 return reinterpret_cast<Address>(&builtins_[name]); 210 return reinterpret_cast<Address>(&builtins_[name]);
260 } 211 }
261 212
262 static Address c_function_address(CFunctionId id) { 213 static Address c_function_address(CFunctionId id) {
263 return c_functions_[id]; 214 return c_functions_[id];
264 } 215 }
265 216
266 static const char* GetName(JavaScript id) { return javascript_names_[id]; }
267 const char* name(int index) { 217 const char* name(int index) {
268 DCHECK(index >= 0); 218 DCHECK(index >= 0);
269 DCHECK(index < builtin_count); 219 DCHECK(index < builtin_count);
270 return names_[index]; 220 return names_[index];
271 } 221 }
272 static int GetArgumentsCount(JavaScript id) { return javascript_argc_[id]; }
273 static int NumberOfJavaScriptBuiltins() { return id_count; }
274 222
275 bool is_initialized() const { return initialized_; } 223 bool is_initialized() const { return initialized_; }
276 224
277 MUST_USE_RESULT static MaybeHandle<Object> InvokeApiFunction( 225 MUST_USE_RESULT static MaybeHandle<Object> InvokeApiFunction(
278 Handle<JSFunction> function, Handle<Object> receiver, int argc, 226 Handle<JSFunction> function, Handle<Object> receiver, int argc,
279 Handle<Object> args[]); 227 Handle<Object> args[]);
280 228
281 private: 229 private:
282 Builtins(); 230 Builtins();
283 231
284 // The external C++ functions called from the code. 232 // The external C++ functions called from the code.
285 static Address const c_functions_[cfunction_count]; 233 static Address const c_functions_[cfunction_count];
286 234
287 // Note: These are always Code objects, but to conform with 235 // Note: These are always Code objects, but to conform with
288 // IterateBuiltins() above which assumes Object**'s for the callback 236 // IterateBuiltins() above which assumes Object**'s for the callback
289 // function f, we use an Object* array here. 237 // function f, we use an Object* array here.
290 Object* builtins_[builtin_count]; 238 Object* builtins_[builtin_count];
291 const char* names_[builtin_count]; 239 const char* names_[builtin_count];
292 static const char* const javascript_names_[id_count];
293 static int const javascript_argc_[id_count];
294 240
295 static void Generate_Adaptor(MacroAssembler* masm, 241 static void Generate_Adaptor(MacroAssembler* masm,
296 CFunctionId id, 242 CFunctionId id,
297 BuiltinExtraArguments extra_args); 243 BuiltinExtraArguments extra_args);
298 static void Generate_CompileLazy(MacroAssembler* masm); 244 static void Generate_CompileLazy(MacroAssembler* masm);
299 static void Generate_InOptimizationQueue(MacroAssembler* masm); 245 static void Generate_InOptimizationQueue(MacroAssembler* masm);
300 static void Generate_CompileOptimized(MacroAssembler* masm); 246 static void Generate_CompileOptimized(MacroAssembler* masm);
301 static void Generate_CompileOptimizedConcurrent(MacroAssembler* masm); 247 static void Generate_CompileOptimizedConcurrent(MacroAssembler* masm);
302 static void Generate_JSConstructStubGeneric(MacroAssembler* masm); 248 static void Generate_JSConstructStubGeneric(MacroAssembler* masm);
303 static void Generate_JSConstructStubForDerived(MacroAssembler* masm); 249 static void Generate_JSConstructStubForDerived(MacroAssembler* masm);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 291
346 friend class BuiltinFunctionTable; 292 friend class BuiltinFunctionTable;
347 friend class Isolate; 293 friend class Isolate;
348 294
349 DISALLOW_COPY_AND_ASSIGN(Builtins); 295 DISALLOW_COPY_AND_ASSIGN(Builtins);
350 }; 296 };
351 297
352 } } // namespace v8::internal 298 } } // namespace v8::internal
353 299
354 #endif // V8_BUILTINS_H_ 300 #endif // V8_BUILTINS_H_
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | src/builtins.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698