OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/assert-scope.h" | 10 #include "src/assert-scope.h" |
(...skipping 7364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7375 static const int kSize = kScopeInfoOffset + kPointerSize; | 7375 static const int kSize = kScopeInfoOffset + kPointerSize; |
7376 | 7376 |
7377 private: | 7377 private: |
7378 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); | 7378 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); |
7379 }; | 7379 }; |
7380 | 7380 |
7381 | 7381 |
7382 // JSBoundFunction describes a bound function exotic object. | 7382 // JSBoundFunction describes a bound function exotic object. |
7383 class JSBoundFunction : public JSObject { | 7383 class JSBoundFunction : public JSObject { |
7384 public: | 7384 public: |
7385 // [length]: The bound function "length" property. | |
7386 DECL_ACCESSORS(length, Object) | |
7387 | |
7388 // [name]: The bound function "name" property. | |
7389 DECL_ACCESSORS(name, Object) | |
7390 | |
7391 // [bound_target_function]: The wrapped function object. | 7385 // [bound_target_function]: The wrapped function object. |
7392 DECL_ACCESSORS(bound_target_function, JSReceiver) | 7386 DECL_ACCESSORS(bound_target_function, JSReceiver) |
7393 | 7387 |
7394 // [bound_this]: The value that is always passed as the this value when | 7388 // [bound_this]: The value that is always passed as the this value when |
7395 // calling the wrapped function. | 7389 // calling the wrapped function. |
7396 DECL_ACCESSORS(bound_this, Object) | 7390 DECL_ACCESSORS(bound_this, Object) |
7397 | 7391 |
7398 // [bound_arguments]: A list of values whose elements are used as the first | 7392 // [bound_arguments]: A list of values whose elements are used as the first |
7399 // arguments to any call to the wrapped function. | 7393 // arguments to any call to the wrapped function. |
7400 DECL_ACCESSORS(bound_arguments, FixedArray) | 7394 DECL_ACCESSORS(bound_arguments, FixedArray) |
7401 | 7395 |
| 7396 static MaybeHandle<String> GetName(Isolate* isolate, |
| 7397 Handle<JSBoundFunction> function); |
7402 static MaybeHandle<Context> GetFunctionRealm( | 7398 static MaybeHandle<Context> GetFunctionRealm( |
7403 Handle<JSBoundFunction> function); | 7399 Handle<JSBoundFunction> function); |
7404 | 7400 |
7405 DECLARE_CAST(JSBoundFunction) | 7401 DECLARE_CAST(JSBoundFunction) |
7406 | 7402 |
7407 // Dispatched behavior. | 7403 // Dispatched behavior. |
7408 DECLARE_PRINTER(JSBoundFunction) | 7404 DECLARE_PRINTER(JSBoundFunction) |
7409 DECLARE_VERIFIER(JSBoundFunction) | 7405 DECLARE_VERIFIER(JSBoundFunction) |
7410 | 7406 |
7411 // The bound function's string representation implemented according | 7407 // The bound function's string representation implemented according |
7412 // to ES6 section 19.2.3.5 Function.prototype.toString ( ). | 7408 // to ES6 section 19.2.3.5 Function.prototype.toString ( ). |
7413 static Handle<String> ToString(Handle<JSBoundFunction> function); | 7409 static Handle<String> ToString(Handle<JSBoundFunction> function); |
7414 | 7410 |
7415 // Layout description. | 7411 // Layout description. |
7416 static const int kBoundTargetFunctionOffset = JSObject::kHeaderSize; | 7412 static const int kBoundTargetFunctionOffset = JSObject::kHeaderSize; |
7417 static const int kBoundThisOffset = kBoundTargetFunctionOffset + kPointerSize; | 7413 static const int kBoundThisOffset = kBoundTargetFunctionOffset + kPointerSize; |
7418 static const int kBoundArgumentsOffset = kBoundThisOffset + kPointerSize; | 7414 static const int kBoundArgumentsOffset = kBoundThisOffset + kPointerSize; |
7419 static const int kLengthOffset = kBoundArgumentsOffset + kPointerSize; | 7415 static const int kSize = kBoundArgumentsOffset + kPointerSize; |
7420 static const int kNameOffset = kLengthOffset + kPointerSize; | |
7421 static const int kSize = kNameOffset + kPointerSize; | |
7422 | |
7423 // Indices of in-object properties. | |
7424 static const int kLengthIndex = 0; | |
7425 static const int kNameIndex = 1; | |
7426 | 7416 |
7427 private: | 7417 private: |
7428 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBoundFunction); | 7418 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBoundFunction); |
7429 }; | 7419 }; |
7430 | 7420 |
7431 | 7421 |
7432 // JSFunction describes JavaScript functions. | 7422 // JSFunction describes JavaScript functions. |
7433 class JSFunction: public JSObject { | 7423 class JSFunction: public JSObject { |
7434 public: | 7424 public: |
7435 // [prototype_or_initial_map]: | 7425 // [prototype_or_initial_map]: |
7436 DECL_ACCESSORS(prototype_or_initial_map, Object) | 7426 DECL_ACCESSORS(prototype_or_initial_map, Object) |
7437 | 7427 |
7438 // [shared]: The information about the function that | 7428 // [shared]: The information about the function that |
7439 // can be shared by instances. | 7429 // can be shared by instances. |
7440 DECL_ACCESSORS(shared, SharedFunctionInfo) | 7430 DECL_ACCESSORS(shared, SharedFunctionInfo) |
7441 | 7431 |
7442 // [context]: The context for this function. | 7432 // [context]: The context for this function. |
7443 inline Context* context(); | 7433 inline Context* context(); |
7444 inline void set_context(Object* context); | 7434 inline void set_context(Object* context); |
7445 inline JSObject* global_proxy(); | 7435 inline JSObject* global_proxy(); |
7446 inline Context* native_context(); | 7436 inline Context* native_context(); |
7447 | 7437 |
| 7438 static Handle<Object> GetName(Isolate* isolate, Handle<JSFunction> function); |
| 7439 static MaybeHandle<Smi> GetLength(Isolate* isolate, |
| 7440 Handle<JSFunction> function); |
7448 static Handle<Context> GetFunctionRealm(Handle<JSFunction> function); | 7441 static Handle<Context> GetFunctionRealm(Handle<JSFunction> function); |
7449 | 7442 |
7450 // [code]: The generated code object for this function. Executed | 7443 // [code]: The generated code object for this function. Executed |
7451 // when the function is invoked, e.g. foo() or new foo(). See | 7444 // when the function is invoked, e.g. foo() or new foo(). See |
7452 // [[Call]] and [[Construct]] description in ECMA-262, section | 7445 // [[Call]] and [[Construct]] description in ECMA-262, section |
7453 // 8.6.2, page 27. | 7446 // 8.6.2, page 27. |
7454 inline Code* code(); | 7447 inline Code* code(); |
7455 inline void set_code(Code* code); | 7448 inline void set_code(Code* code); |
7456 inline void set_code_no_write_barrier(Code* code); | 7449 inline void set_code_no_write_barrier(Code* code); |
7457 inline void ReplaceCode(Code* code); | 7450 inline void ReplaceCode(Code* code); |
(...skipping 3309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10767 } | 10760 } |
10768 return value; | 10761 return value; |
10769 } | 10762 } |
10770 }; | 10763 }; |
10771 | 10764 |
10772 | 10765 |
10773 } // NOLINT, false-positive due to second-order macros. | 10766 } // NOLINT, false-positive due to second-order macros. |
10774 } // NOLINT, false-positive due to second-order macros. | 10767 } // NOLINT, false-positive due to second-order macros. |
10775 | 10768 |
10776 #endif // V8_OBJECTS_H_ | 10769 #endif // V8_OBJECTS_H_ |
OLD | NEW |