Chromium Code Reviews| Index: runtime/vm/object.h |
| diff --git a/runtime/vm/object.h b/runtime/vm/object.h |
| index e51b26f61adb7f785290aef0918e934b91f62dcb..18526813d0046934248b154471c878489e14a9c1 100644 |
| --- a/runtime/vm/object.h |
| +++ b/runtime/vm/object.h |
| @@ -1360,7 +1360,8 @@ class Class : public Object { |
| template <class FakeObject> static RawClass* New(); |
| // Allocate instance classes. |
| - static RawClass* New(const String& name, |
| + static RawClass* New(const Library& lib, |
| + const String& name, |
| const Script& script, |
| TokenPosition token_pos); |
| static RawClass* NewNativeWrapper(const Library& library, |
| @@ -1386,6 +1387,8 @@ class Class : public Object { |
| void DisableCHAOptimizedCode(const Class& subclass); |
| + void DisableAllCHAOptimizedCode(); |
| + |
| // Return the list of code objects that were compiled using CHA of this class. |
| // These code objects will be invalidated if new subclasses of this class |
| // are finalized. |
| @@ -1396,8 +1399,16 @@ class Class : public Object { |
| void SetTraceAllocation(bool trace_allocation) const; |
| bool ValidatePostFinalizePatch(const Class& orig_class, Error* error) const; |
| + void ReplaceEnum(const Class& old_enum) const; |
| + void CopyStaticFieldValues(const Class& old_cls) const; |
| + void PatchFieldsAndFunctions() const; |
| + void CopyCanonicalConstants(const Class& old_cls) const; |
| + void CopyCanonicalTypes(const Class& old_cls) const; |
| + bool CanReload(const Class& replacement) const; |
| private: |
| + template <class FakeObject> static RawClass* NewCommon(intptr_t index); |
| + |
| enum MemberKind { |
| kAny = 0, |
| kStatic, |
| @@ -1827,6 +1838,11 @@ class ICData : public Object { |
| return raw_ptr()->deopt_id_; |
| } |
| + bool IsImmutable() const; |
| + |
| + void Reset(bool is_static_call) const; |
| + void ResetData() const; |
| + |
| // Note: only deopts with reasons before Unknown in this list are recorded in |
| // the ICData. All other reasons are used purely for informational messages |
| // printed during deoptimization itself. |
| @@ -1872,6 +1888,10 @@ class ICData : public Object { |
| bool HasDeoptReason(ICData::DeoptReasonId reason) const; |
| void AddDeoptReason(ICData::DeoptReasonId reason) const; |
| + // The length of the array. This includes all sentinel entries including |
| + // the final one. |
| + intptr_t Length() const; |
| + |
| intptr_t NumberOfChecks() const; |
| // Discounts any checks with usage of zero. |
| @@ -1909,6 +1929,30 @@ class ICData : public Object { |
| return OFFSET_OF(RawICData, owner_); |
| } |
| + // Replaces entry |index| with the sentinel. |
| + void WriteSentinelAt(intptr_t index) const; |
| + |
| + // Clears the count for entry |index|. |
| + void ClearCountAt(intptr_t index) const; |
| + |
| + // Clear all entries with the sentinel value (but will preserve initial |
| + // smi smi checks). |
| + void ClearWithSentinel() const; |
| + |
| + // Clear all entries with the sentinel value and reset the first entry |
| + // with the dummy target entry. |
| + void ClearAndSetStaticTarget(const Function& func) const; |
| + |
| + // Returns the first index that should be used to for a new entry. Will |
| + // grow the array if necessary. |
| + RawArray* FindFreeIndex(intptr_t* index) const; |
| + |
| + void DebugDump() const; |
| + void ValidateSentinelLocations() const; |
|
Vyacheslav Egorov (Google)
2016/05/18 10:28:43
This function is empty.
|
| + |
| + // Returns true if this is a two arg smi operation. |
| + bool AddSmiSmiCheckForFastSmiStubs() const; |
| + |
| // Used for unoptimized static calls when no class-ids are checked. |
| void AddTarget(const Function& target) const; |
| @@ -1924,6 +1968,9 @@ class ICData : public Object { |
| const Function& target, |
| intptr_t count = 1) const; |
| + // Does entry |index| contain the sentinel value? |
| + bool IsSentinelAt(intptr_t index) const; |
| + |
| // Retrieving checks. |
| void GetCheckAt(intptr_t index, |
| @@ -2223,6 +2270,11 @@ class Function : public Object { |
| // visible formal parameters of the function. |
| RawString* UserVisibleFormalParameters() const; |
| + // Reloading support: |
| + void Reparent(const Class& new_cls) const; |
| + void ZeroEdgeCounters() const; |
| + void FillICDataWithSentinels(const Code& code) const; |
| + |
| RawClass* Owner() const; |
| RawClass* origin() const; |
| RawScript* script() const; |
| @@ -2261,6 +2313,13 @@ class Function : public Object { |
| // Disables optimized code and switches to unoptimized code. |
| void SwitchToUnoptimizedCode() const; |
| + // Disables optimized code and switches to unoptimized code (or the lazy |
| + // compilation stub). |
| + void SwitchToLazyCompiledUnoptimizedCode() const; |
| + |
| + // Compiles unoptimized code (if necessary) and attaches it to the function. |
| + void EnsureHasCompiledUnoptimizedCode() const; |
| + |
| // Return the most recently compiled and installed code for this function. |
| // It is not the only Code object that points to this function. |
| RawCode* CurrentCode() const { |
| @@ -3188,6 +3247,14 @@ class Field : public Object { |
| static bool IsSetterName(const String& function_name); |
| private: |
| + static void InitializeNew(const Field& result, |
| + const String& name, |
| + bool is_static, |
| + bool is_final, |
| + bool is_const, |
| + bool is_reflectable, |
| + const Object& owner, |
| + TokenPosition token_pos); |
| friend class StoreInstanceFieldInstr; // Generated code access to bit field. |
| enum { |
| @@ -3214,6 +3281,9 @@ class Field : public Object { |
| // deoptimization of dependent code is required. |
| bool UpdateGuardedCidAndLength(const Object& value) const; |
| + // Force this field's guard to be dynamic and deoptimize dependent code. |
| + void ForceDynamicGuardedCidAndLength() const; |
| + |
| void set_name(const String& value) const; |
| void set_is_static(bool is_static) const { |
| set_kind_bits(StaticBit::update(is_static, raw_ptr()->kind_bits_)); |
| @@ -3377,6 +3447,9 @@ class Script : public Object { |
| intptr_t line_offset() const { return raw_ptr()->line_offset_; } |
| intptr_t col_offset() const { return raw_ptr()->col_offset_; } |
| + // The load time in milliseconds since epoch. |
| + int64_t load_timestamp() const { return raw_ptr()->load_timestamp_; } |
| + |
| RawTokenStream* tokens() const { return raw_ptr()->tokens_; } |
| void Tokenize(const String& private_key, |
| @@ -3417,6 +3490,7 @@ class Script : public Object { |
| void set_url(const String& value) const; |
| void set_source(const String& value) const; |
| void set_kind(RawScript::Kind value) const; |
| + void set_load_timestamp(int64_t value) const; |
| void set_tokens(const TokenStream& value) const; |
| static RawScript* New(); |
| @@ -3706,6 +3780,8 @@ class Library : public Object { |
| // the library-specific key. |
| static const char kPrivateKeySeparator = '@'; |
| + bool CanReload(const Library& replacement) const; |
| + |
| private: |
| static const int kInitialImportsCapacity = 4; |
| static const int kImportsCapacityIncrement = 8; |
| @@ -5382,6 +5458,7 @@ class AbstractType : public Instance { |
| virtual bool IsResolved() const; |
| virtual void SetIsResolved() const; |
| virtual bool HasResolvedTypeClass() const; |
| + virtual classid_t type_class_id() const; |
| virtual RawClass* type_class() const; |
| virtual RawUnresolvedClass* unresolved_class() const; |
| virtual RawTypeArguments* arguments() const; |
| @@ -5570,8 +5647,8 @@ class AbstractType : public Instance { |
| // relate to a 'raw type', as opposed to a 'cooked type' or 'rare type'. |
| class Type : public AbstractType { |
| public: |
| - static intptr_t type_class_offset() { |
| - return OFFSET_OF(RawType, type_class_); |
| + static intptr_t type_class_id_offset() { |
| + return OFFSET_OF(RawType, type_class_id_); |
| } |
| virtual bool IsFinalized() const { |
| return |
| @@ -5594,8 +5671,10 @@ class Type : public AbstractType { |
| } |
| virtual void SetIsResolved() const; |
| virtual bool HasResolvedTypeClass() const; // Own type class resolved. |
| + virtual classid_t type_class_id() const; |
| virtual RawClass* type_class() const; |
| - void set_type_class(const Object& value) const; |
| + void set_type_class(const Class& value) const; |
| + void set_unresolved_class(const Object& value) const; |
| virtual RawUnresolvedClass* unresolved_class() const; |
| virtual RawTypeArguments* arguments() const { return raw_ptr()->arguments_; } |
| virtual void set_arguments(const TypeArguments& value) const; |
| @@ -5786,9 +5865,8 @@ class TypeParameter : public AbstractType { |
| virtual bool IsMalformedOrMalbounded() const { return false; } |
| virtual bool IsResolved() const { return true; } |
| virtual bool HasResolvedTypeClass() const { return false; } |
| - RawClass* parameterized_class() const { |
| - return raw_ptr()->parameterized_class_; |
| - } |
| + classid_t parameterized_class_id() const; |
| + RawClass* parameterized_class() const; |
| RawString* name() const { return raw_ptr()->name_; } |
| intptr_t index() const { return raw_ptr()->index_; } |
| void set_index(intptr_t value) const; |