| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 5421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5432 | 5432 |
| 5433 // Indicate that this function only consists of assignments of the form | 5433 // Indicate that this function only consists of assignments of the form |
| 5434 // this.x = y; where y is either a constant or refers to an argument. | 5434 // this.x = y; where y is either a constant or refers to an argument. |
| 5435 inline bool has_only_simple_this_property_assignments(); | 5435 inline bool has_only_simple_this_property_assignments(); |
| 5436 | 5436 |
| 5437 // Indicates if this function can be lazy compiled. | 5437 // Indicates if this function can be lazy compiled. |
| 5438 // This is used to determine if we can safely flush code from a function | 5438 // This is used to determine if we can safely flush code from a function |
| 5439 // when doing GC if we expect that the function will no longer be used. | 5439 // when doing GC if we expect that the function will no longer be used. |
| 5440 DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation) | 5440 DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation) |
| 5441 | 5441 |
| 5442 // Indicates if this function can be lazy compiled without a context. |
| 5443 // This is used to determine if we can force compilation without reaching |
| 5444 // the function through program execution but through other means (e.g. heap |
| 5445 // iteration by the debugger). |
| 5446 DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation_without_context) |
| 5447 |
| 5442 // Indicates how many full GCs this function has survived with assigned | 5448 // Indicates how many full GCs this function has survived with assigned |
| 5443 // code object. Used to determine when it is relatively safe to flush | 5449 // code object. Used to determine when it is relatively safe to flush |
| 5444 // this code object and replace it with lazy compilation stub. | 5450 // this code object and replace it with lazy compilation stub. |
| 5445 // Age is reset when GC notices that the code object is referenced | 5451 // Age is reset when GC notices that the code object is referenced |
| 5446 // from the stack or compilation cache. | 5452 // from the stack or compilation cache. |
| 5447 inline int code_age(); | 5453 inline int code_age(); |
| 5448 inline void set_code_age(int age); | 5454 inline void set_code_age(int age); |
| 5449 | 5455 |
| 5450 // Indicates whether optimizations have been disabled for this | 5456 // Indicates whether optimizations have been disabled for this |
| 5451 // shared function info. If a function is repeatedly optimized or if | 5457 // shared function info. If a function is repeatedly optimized or if |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5578 SharedFunctionInfoPrint(stdout); | 5584 SharedFunctionInfoPrint(stdout); |
| 5579 } | 5585 } |
| 5580 void SharedFunctionInfoPrint(FILE* out); | 5586 void SharedFunctionInfoPrint(FILE* out); |
| 5581 #endif | 5587 #endif |
| 5582 #ifdef DEBUG | 5588 #ifdef DEBUG |
| 5583 void SharedFunctionInfoVerify(); | 5589 void SharedFunctionInfoVerify(); |
| 5584 #endif | 5590 #endif |
| 5585 | 5591 |
| 5586 void ResetForNewContext(int new_ic_age); | 5592 void ResetForNewContext(int new_ic_age); |
| 5587 | 5593 |
| 5588 // Helpers to compile the shared code. Returns true on success, false on | 5594 // Helper to compile the shared code. Returns true on success, false on |
| 5589 // failure (e.g., stack overflow during compilation). | 5595 // failure (e.g., stack overflow during compilation). This is only used by |
| 5590 static bool EnsureCompiled(Handle<SharedFunctionInfo> shared, | 5596 // the debugger, it is not possible to compile without a context otherwise. |
| 5591 ClearExceptionFlag flag); | |
| 5592 static bool CompileLazy(Handle<SharedFunctionInfo> shared, | 5597 static bool CompileLazy(Handle<SharedFunctionInfo> shared, |
| 5593 ClearExceptionFlag flag); | 5598 ClearExceptionFlag flag); |
| 5594 | 5599 |
| 5595 void SharedFunctionInfoIterateBody(ObjectVisitor* v); | 5600 void SharedFunctionInfoIterateBody(ObjectVisitor* v); |
| 5596 | 5601 |
| 5597 // Casting. | 5602 // Casting. |
| 5598 static inline SharedFunctionInfo* cast(Object* obj); | 5603 static inline SharedFunctionInfo* cast(Object* obj); |
| 5599 | 5604 |
| 5600 // Constants. | 5605 // Constants. |
| 5601 static const int kDontAdaptArgumentsSentinel = -1; | 5606 static const int kDontAdaptArgumentsSentinel = -1; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5715 static const int kStartPositionShift = 2; | 5720 static const int kStartPositionShift = 2; |
| 5716 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); | 5721 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); |
| 5717 | 5722 |
| 5718 // Bit positions in compiler_hints. | 5723 // Bit positions in compiler_hints. |
| 5719 static const int kCodeAgeSize = 3; | 5724 static const int kCodeAgeSize = 3; |
| 5720 static const int kCodeAgeMask = (1 << kCodeAgeSize) - 1; | 5725 static const int kCodeAgeMask = (1 << kCodeAgeSize) - 1; |
| 5721 | 5726 |
| 5722 enum CompilerHints { | 5727 enum CompilerHints { |
| 5723 kHasOnlySimpleThisPropertyAssignments, | 5728 kHasOnlySimpleThisPropertyAssignments, |
| 5724 kAllowLazyCompilation, | 5729 kAllowLazyCompilation, |
| 5730 kAllowLazyCompilationWithoutContext, |
| 5725 kLiveObjectsMayExist, | 5731 kLiveObjectsMayExist, |
| 5726 kCodeAgeShift, | 5732 kCodeAgeShift, |
| 5727 kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize, | 5733 kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize, |
| 5728 kStrictModeFunction, | 5734 kStrictModeFunction, |
| 5729 kExtendedModeFunction, | 5735 kExtendedModeFunction, |
| 5730 kUsesArguments, | 5736 kUsesArguments, |
| 5731 kHasDuplicateParameters, | 5737 kHasDuplicateParameters, |
| 5732 kNative, | 5738 kNative, |
| 5733 kBoundFunction, | 5739 kBoundFunction, |
| 5734 kIsAnonymous, | 5740 kIsAnonymous, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5863 | 5869 |
| 5864 // Tells whether or not this function can be optimized. | 5870 // Tells whether or not this function can be optimized. |
| 5865 inline bool IsOptimizable(); | 5871 inline bool IsOptimizable(); |
| 5866 | 5872 |
| 5867 // Mark this function for lazy recompilation. The function will be | 5873 // Mark this function for lazy recompilation. The function will be |
| 5868 // recompiled the next time it is executed. | 5874 // recompiled the next time it is executed. |
| 5869 void MarkForLazyRecompilation(); | 5875 void MarkForLazyRecompilation(); |
| 5870 | 5876 |
| 5871 // Helpers to compile this function. Returns true on success, false on | 5877 // Helpers to compile this function. Returns true on success, false on |
| 5872 // failure (e.g., stack overflow during compilation). | 5878 // failure (e.g., stack overflow during compilation). |
| 5879 static bool EnsureCompiled(Handle<JSFunction> function, |
| 5880 ClearExceptionFlag flag); |
| 5873 static bool CompileLazy(Handle<JSFunction> function, | 5881 static bool CompileLazy(Handle<JSFunction> function, |
| 5874 ClearExceptionFlag flag); | 5882 ClearExceptionFlag flag); |
| 5875 static bool CompileOptimized(Handle<JSFunction> function, | 5883 static bool CompileOptimized(Handle<JSFunction> function, |
| 5876 int osr_ast_id, | 5884 int osr_ast_id, |
| 5877 ClearExceptionFlag flag); | 5885 ClearExceptionFlag flag); |
| 5878 | 5886 |
| 5879 // Tells whether or not the function is already marked for lazy | 5887 // Tells whether or not the function is already marked for lazy |
| 5880 // recompilation. | 5888 // recompilation. |
| 5881 inline bool IsMarkedForLazyRecompilation(); | 5889 inline bool IsMarkedForLazyRecompilation(); |
| 5882 | 5890 |
| (...skipping 2876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8759 } else { | 8767 } else { |
| 8760 value &= ~(1 << bit_position); | 8768 value &= ~(1 << bit_position); |
| 8761 } | 8769 } |
| 8762 return value; | 8770 return value; |
| 8763 } | 8771 } |
| 8764 }; | 8772 }; |
| 8765 | 8773 |
| 8766 } } // namespace v8::internal | 8774 } } // namespace v8::internal |
| 8767 | 8775 |
| 8768 #endif // V8_OBJECTS_H_ | 8776 #endif // V8_OBJECTS_H_ |
| OLD | NEW |