Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 7ea36cc4545d4a7c5f76c9d1394075fc81892791..225a7db42e0cfab92c786cea07095731304ffa22 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -76,6 +76,7 @@ |
// - BytecodeArray |
// - FixedArray |
// - DescriptorArray |
+// - LiteralsArray |
// - HashTable |
// - Dictionary |
// - StringTable |
@@ -852,6 +853,7 @@ class FunctionLiteral; |
class GlobalObject; |
class JSBuiltinsObject; |
class LayoutDescriptor; |
+class LiteralsArray; |
class LookupIterator; |
class ObjectHashTable; |
class ObjectVisitor; |
@@ -940,6 +942,7 @@ template <class C> inline bool Is(Object* obj); |
V(Map) \ |
V(DescriptorArray) \ |
V(TransitionArray) \ |
+ V(LiteralsArray) \ |
V(TypeFeedbackVector) \ |
V(DeoptimizationInputData) \ |
V(DeoptimizationOutputData) \ |
@@ -4568,6 +4571,40 @@ class DeoptimizationOutputData: public FixedArray { |
}; |
+// A literals array contains the literals for a JSFunction. It also holds |
+// the type feedback vector. |
+class LiteralsArray : public FixedArray { |
+ public: |
+ static const int kVectorIndex = 0; |
+ static const int kFirstLiteralIndex = 1; |
+ static const int kOffsetToFirstLiteral = |
+ FixedArray::kHeaderSize + kPointerSize; |
+ |
+ static int OffsetOfLiteralAt(int index) { |
+ return SizeFor(index + kFirstLiteralIndex); |
+ } |
+ |
+ inline TypeFeedbackVector* feedback_vector() const; |
+ inline void set_feedback_vector(TypeFeedbackVector* vector); |
+ inline Object* literal(int literal_index) const; |
+ inline void set_literal(int literal_index, Object* literal); |
+ inline int literals_count() const; |
+ |
+ static Handle<LiteralsArray> New(Isolate* isolate, |
+ Handle<TypeFeedbackVector> vector, |
+ int number_of_literals, |
+ PretenureFlag pretenure); |
+ |
+ DECLARE_CAST(LiteralsArray) |
+ |
+ private: |
+ inline Object* get(int index) const; |
+ inline void set(int index, Object* value); |
+ inline void set(int index, Smi* value); |
+ inline void set(int index, Object* value, WriteBarrierMode mode); |
+}; |
+ |
+ |
// HandlerTable is a fixed array containing entries for exception handlers in |
// the code object it is associated with. The tables comes in two flavors: |
// 1) Based on ranges: Used for unoptimized code. Contains one entry per |
@@ -6292,7 +6329,7 @@ enum BuiltinFunctionId { |
// that both {code} and {literals} can be NULL to pass search result status. |
struct CodeAndLiterals { |
Code* code; // Cached optimized code. |
- FixedArray* literals; // Cached literals array. |
+ LiteralsArray* literals; // Cached literals array. |
}; |
@@ -6339,7 +6376,7 @@ class SharedFunctionInfo: public HeapObject { |
static void AddToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, |
Handle<Context> native_context, |
Handle<HeapObject> code, |
- Handle<FixedArray> literals, |
+ Handle<LiteralsArray> literals, |
BailoutId osr_ast_id); |
// Set up the link between shared function info and the script. The shared |
@@ -7135,8 +7172,8 @@ class JSFunction: public JSObject { |
// arguments. Bound functions never contain literals. |
DECL_ACCESSORS(literals_or_bindings, FixedArray) |
- inline FixedArray* literals(); |
- inline void set_literals(FixedArray* literals); |
+ inline LiteralsArray* literals(); |
+ inline void set_literals(LiteralsArray* literals); |
inline FixedArray* function_bindings(); |
inline void set_function_bindings(FixedArray* bindings); |