| 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 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| 11 #include "src/assert-scope.h" | 11 #include "src/assert-scope.h" |
| 12 #include "src/bailout-reason.h" | 12 #include "src/bailout-reason.h" |
| 13 #include "src/base/bits.h" | 13 #include "src/base/bits.h" |
| 14 #include "src/base/flags.h" | 14 #include "src/base/flags.h" |
| 15 #include "src/builtins/builtins.h" | 15 #include "src/builtins/builtins.h" |
| 16 #include "src/checks.h" | 16 #include "src/checks.h" |
| 17 #include "src/elements-kind.h" | 17 #include "src/elements-kind.h" |
| 18 #include "src/field-index.h" | 18 #include "src/field-index.h" |
| 19 #include "src/flags.h" | 19 #include "src/flags.h" |
| 20 #include "src/list.h" | 20 #include "src/list.h" |
| 21 #include "src/messages.h" | 21 #include "src/messages.h" |
| 22 #include "src/objects/object-macros.h" | |
| 23 #include "src/property-details.h" | 22 #include "src/property-details.h" |
| 24 #include "src/unicode-decoder.h" | 23 #include "src/unicode-decoder.h" |
| 25 #include "src/unicode.h" | 24 #include "src/unicode.h" |
| 26 #include "src/zone/zone.h" | 25 #include "src/zone/zone.h" |
| 27 | 26 |
| 28 #if V8_TARGET_ARCH_ARM | 27 #if V8_TARGET_ARCH_ARM |
| 29 #include "src/arm/constants-arm.h" // NOLINT | 28 #include "src/arm/constants-arm.h" // NOLINT |
| 30 #elif V8_TARGET_ARCH_ARM64 | 29 #elif V8_TARGET_ARCH_ARM64 |
| 31 #include "src/arm64/constants-arm64.h" // NOLINT | 30 #include "src/arm64/constants-arm64.h" // NOLINT |
| 32 #elif V8_TARGET_ARCH_MIPS | 31 #elif V8_TARGET_ARCH_MIPS |
| 33 #include "src/mips/constants-mips.h" // NOLINT | 32 #include "src/mips/constants-mips.h" // NOLINT |
| 34 #elif V8_TARGET_ARCH_MIPS64 | 33 #elif V8_TARGET_ARCH_MIPS64 |
| 35 #include "src/mips64/constants-mips64.h" // NOLINT | 34 #include "src/mips64/constants-mips64.h" // NOLINT |
| 36 #elif V8_TARGET_ARCH_PPC | 35 #elif V8_TARGET_ARCH_PPC |
| 37 #include "src/ppc/constants-ppc.h" // NOLINT | 36 #include "src/ppc/constants-ppc.h" // NOLINT |
| 38 #elif V8_TARGET_ARCH_S390 | 37 #elif V8_TARGET_ARCH_S390 |
| 39 #include "src/s390/constants-s390.h" // NOLINT | 38 #include "src/s390/constants-s390.h" // NOLINT |
| 40 #endif | 39 #endif |
| 41 | 40 |
| 41 // Has to be the last include (doesn't have include guards): |
| 42 #include "src/objects/object-macros.h" |
| 42 | 43 |
| 43 // | 44 // |
| 44 // Most object types in the V8 JavaScript are described in this file. | 45 // Most object types in the V8 JavaScript are described in this file. |
| 45 // | 46 // |
| 46 // Inheritance hierarchy: | 47 // Inheritance hierarchy: |
| 47 // - Object | 48 // - Object |
| 48 // - Smi (immediate small integer) | 49 // - Smi (immediate small integer) |
| 49 // - HeapObject (superclass for everything allocated in the heap) | 50 // - HeapObject (superclass for everything allocated in the heap) |
| 50 // - JSReceiver (suitable for property access) | 51 // - JSReceiver (suitable for property access) |
| 51 // - JSObject | 52 // - JSObject |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 // - ModuleInfoEntry | 162 // - ModuleInfoEntry |
| 162 // - WeakCell | 163 // - WeakCell |
| 163 // | 164 // |
| 164 // Formats of Object*: | 165 // Formats of Object*: |
| 165 // Smi: [31 bit signed int] 0 | 166 // Smi: [31 bit signed int] 0 |
| 166 // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01 | 167 // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01 |
| 167 | 168 |
| 168 namespace v8 { | 169 namespace v8 { |
| 169 namespace internal { | 170 namespace internal { |
| 170 | 171 |
| 172 class ModuleInfo; |
| 171 struct InliningPosition; | 173 struct InliningPosition; |
| 172 | 174 |
| 173 enum KeyedAccessStoreMode { | 175 enum KeyedAccessStoreMode { |
| 174 STANDARD_STORE, | 176 STANDARD_STORE, |
| 175 STORE_TRANSITION_TO_OBJECT, | 177 STORE_TRANSITION_TO_OBJECT, |
| 176 STORE_TRANSITION_TO_DOUBLE, | 178 STORE_TRANSITION_TO_DOUBLE, |
| 177 STORE_AND_GROW_NO_TRANSITION, | 179 STORE_AND_GROW_NO_TRANSITION, |
| 178 STORE_AND_GROW_TRANSITION_TO_OBJECT, | 180 STORE_AND_GROW_TRANSITION_TO_OBJECT, |
| 179 STORE_AND_GROW_TRANSITION_TO_DOUBLE, | 181 STORE_AND_GROW_TRANSITION_TO_DOUBLE, |
| 180 STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS, | 182 STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS, |
| (...skipping 7774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7955 static const int kModuleRequestOffset = kImportNameOffset + kPointerSize; | 7957 static const int kModuleRequestOffset = kImportNameOffset + kPointerSize; |
| 7956 static const int kCellIndexOffset = kModuleRequestOffset + kPointerSize; | 7958 static const int kCellIndexOffset = kModuleRequestOffset + kPointerSize; |
| 7957 static const int kBegPosOffset = kCellIndexOffset + kPointerSize; | 7959 static const int kBegPosOffset = kCellIndexOffset + kPointerSize; |
| 7958 static const int kEndPosOffset = kBegPosOffset + kPointerSize; | 7960 static const int kEndPosOffset = kBegPosOffset + kPointerSize; |
| 7959 static const int kSize = kEndPosOffset + kPointerSize; | 7961 static const int kSize = kEndPosOffset + kPointerSize; |
| 7960 | 7962 |
| 7961 private: | 7963 private: |
| 7962 DISALLOW_IMPLICIT_CONSTRUCTORS(ModuleInfoEntry); | 7964 DISALLOW_IMPLICIT_CONSTRUCTORS(ModuleInfoEntry); |
| 7963 }; | 7965 }; |
| 7964 | 7966 |
| 7965 // ModuleInfo is to ModuleDescriptor what ScopeInfo is to Scope. | |
| 7966 class ModuleInfo : public FixedArray { | |
| 7967 public: | |
| 7968 DECLARE_CAST(ModuleInfo) | |
| 7969 | |
| 7970 static Handle<ModuleInfo> New(Isolate* isolate, Zone* zone, | |
| 7971 ModuleDescriptor* descr); | |
| 7972 | |
| 7973 inline FixedArray* module_requests() const; | |
| 7974 inline FixedArray* special_exports() const; | |
| 7975 inline FixedArray* regular_exports() const; | |
| 7976 inline FixedArray* namespace_imports() const; | |
| 7977 inline FixedArray* regular_imports() const; | |
| 7978 | |
| 7979 // Accessors for [regular_exports]. | |
| 7980 int RegularExportCount() const; | |
| 7981 String* RegularExportLocalName(int i) const; | |
| 7982 int RegularExportCellIndex(int i) const; | |
| 7983 FixedArray* RegularExportExportNames(int i) const; | |
| 7984 | |
| 7985 static Handle<ModuleInfoEntry> LookupRegularImport(Handle<ModuleInfo> info, | |
| 7986 Handle<String> local_name); | |
| 7987 | |
| 7988 #ifdef DEBUG | |
| 7989 inline bool Equals(ModuleInfo* other) const; | |
| 7990 #endif | |
| 7991 | |
| 7992 private: | |
| 7993 friend class Factory; | |
| 7994 friend class ModuleDescriptor; | |
| 7995 enum { | |
| 7996 kModuleRequestsIndex, | |
| 7997 kSpecialExportsIndex, | |
| 7998 kRegularExportsIndex, | |
| 7999 kNamespaceImportsIndex, | |
| 8000 kRegularImportsIndex, | |
| 8001 kLength | |
| 8002 }; | |
| 8003 enum { | |
| 8004 kRegularExportLocalNameOffset, | |
| 8005 kRegularExportCellIndexOffset, | |
| 8006 kRegularExportExportNamesOffset, | |
| 8007 kRegularExportLength | |
| 8008 }; | |
| 8009 DISALLOW_IMPLICIT_CONSTRUCTORS(ModuleInfo); | |
| 8010 }; | |
| 8011 // When importing a module namespace (import * as foo from "bar"), a | 7967 // When importing a module namespace (import * as foo from "bar"), a |
| 8012 // JSModuleNamespace object (representing module "bar") is created and bound to | 7968 // JSModuleNamespace object (representing module "bar") is created and bound to |
| 8013 // the declared variable (foo). A module can have at most one namespace object. | 7969 // the declared variable (foo). A module can have at most one namespace object. |
| 8014 class JSModuleNamespace : public JSObject { | 7970 class JSModuleNamespace : public JSObject { |
| 8015 public: | 7971 public: |
| 8016 DECLARE_CAST(JSModuleNamespace) | 7972 DECLARE_CAST(JSModuleNamespace) |
| 8017 DECLARE_PRINTER(JSModuleNamespace) | 7973 DECLARE_PRINTER(JSModuleNamespace) |
| 8018 DECLARE_VERIFIER(JSModuleNamespace) | 7974 DECLARE_VERIFIER(JSModuleNamespace) |
| 8019 | 7975 |
| 8020 // The actual module whose namespace is being represented. | 7976 // The actual module whose namespace is being represented. |
| (...skipping 3735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11756 } | 11712 } |
| 11757 }; | 11713 }; |
| 11758 | 11714 |
| 11759 | 11715 |
| 11760 } // NOLINT, false-positive due to second-order macros. | 11716 } // NOLINT, false-positive due to second-order macros. |
| 11761 } // NOLINT, false-positive due to second-order macros. | 11717 } // NOLINT, false-positive due to second-order macros. |
| 11762 | 11718 |
| 11763 #include "src/objects/object-macros-undef.h" | 11719 #include "src/objects/object-macros-undef.h" |
| 11764 | 11720 |
| 11765 #endif // V8_OBJECTS_H_ | 11721 #endif // V8_OBJECTS_H_ |
| OLD | NEW |