Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: src/objects.h

Issue 10543141: Enable lazy compilation for non-trivial outer contexts. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments by Ulan Degenbaev. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/full-codegen.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5430 matching lines...) Expand 10 before | Expand all | Expand 10 after
5441 5441
5442 // Indicate that this function only consists of assignments of the form 5442 // Indicate that this function only consists of assignments of the form
5443 // this.x = y; where y is either a constant or refers to an argument. 5443 // this.x = y; where y is either a constant or refers to an argument.
5444 inline bool has_only_simple_this_property_assignments(); 5444 inline bool has_only_simple_this_property_assignments();
5445 5445
5446 // Indicates if this function can be lazy compiled. 5446 // Indicates if this function can be lazy compiled.
5447 // This is used to determine if we can safely flush code from a function 5447 // This is used to determine if we can safely flush code from a function
5448 // when doing GC if we expect that the function will no longer be used. 5448 // when doing GC if we expect that the function will no longer be used.
5449 DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation) 5449 DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation)
5450 5450
5451 // Indicates if this function can be lazy compiled without a context.
5452 // This is used to determine if we can force compilation without reaching
5453 // the function through program execution but through other means (e.g. heap
5454 // iteration by the debugger).
5455 DECL_BOOLEAN_ACCESSORS(allows_lazy_compilation_without_context)
5456
5451 // Indicates how many full GCs this function has survived with assigned 5457 // Indicates how many full GCs this function has survived with assigned
5452 // code object. Used to determine when it is relatively safe to flush 5458 // code object. Used to determine when it is relatively safe to flush
5453 // this code object and replace it with lazy compilation stub. 5459 // this code object and replace it with lazy compilation stub.
5454 // Age is reset when GC notices that the code object is referenced 5460 // Age is reset when GC notices that the code object is referenced
5455 // from the stack or compilation cache. 5461 // from the stack or compilation cache.
5456 inline int code_age(); 5462 inline int code_age();
5457 inline void set_code_age(int age); 5463 inline void set_code_age(int age);
5458 5464
5459 // Indicates whether optimizations have been disabled for this 5465 // Indicates whether optimizations have been disabled for this
5460 // shared function info. If a function is repeatedly optimized or if 5466 // shared function info. If a function is repeatedly optimized or if
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
5587 SharedFunctionInfoPrint(stdout); 5593 SharedFunctionInfoPrint(stdout);
5588 } 5594 }
5589 void SharedFunctionInfoPrint(FILE* out); 5595 void SharedFunctionInfoPrint(FILE* out);
5590 #endif 5596 #endif
5591 #ifdef DEBUG 5597 #ifdef DEBUG
5592 void SharedFunctionInfoVerify(); 5598 void SharedFunctionInfoVerify();
5593 #endif 5599 #endif
5594 5600
5595 void ResetForNewContext(int new_ic_age); 5601 void ResetForNewContext(int new_ic_age);
5596 5602
5597 // Helpers to compile the shared code. Returns true on success, false on 5603 // Helper to compile the shared code. Returns true on success, false on
5598 // failure (e.g., stack overflow during compilation). 5604 // failure (e.g., stack overflow during compilation). This is only used by
5599 static bool EnsureCompiled(Handle<SharedFunctionInfo> shared, 5605 // the debugger, it is not possible to compile without a context otherwise.
5600 ClearExceptionFlag flag);
5601 static bool CompileLazy(Handle<SharedFunctionInfo> shared, 5606 static bool CompileLazy(Handle<SharedFunctionInfo> shared,
5602 ClearExceptionFlag flag); 5607 ClearExceptionFlag flag);
5603 5608
5604 void SharedFunctionInfoIterateBody(ObjectVisitor* v); 5609 void SharedFunctionInfoIterateBody(ObjectVisitor* v);
5605 5610
5606 // Casting. 5611 // Casting.
5607 static inline SharedFunctionInfo* cast(Object* obj); 5612 static inline SharedFunctionInfo* cast(Object* obj);
5608 5613
5609 // Constants. 5614 // Constants.
5610 static const int kDontAdaptArgumentsSentinel = -1; 5615 static const int kDontAdaptArgumentsSentinel = -1;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
5724 static const int kStartPositionShift = 2; 5729 static const int kStartPositionShift = 2;
5725 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); 5730 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1);
5726 5731
5727 // Bit positions in compiler_hints. 5732 // Bit positions in compiler_hints.
5728 static const int kCodeAgeSize = 3; 5733 static const int kCodeAgeSize = 3;
5729 static const int kCodeAgeMask = (1 << kCodeAgeSize) - 1; 5734 static const int kCodeAgeMask = (1 << kCodeAgeSize) - 1;
5730 5735
5731 enum CompilerHints { 5736 enum CompilerHints {
5732 kHasOnlySimpleThisPropertyAssignments, 5737 kHasOnlySimpleThisPropertyAssignments,
5733 kAllowLazyCompilation, 5738 kAllowLazyCompilation,
5739 kAllowLazyCompilationWithoutContext,
5734 kLiveObjectsMayExist, 5740 kLiveObjectsMayExist,
5735 kCodeAgeShift, 5741 kCodeAgeShift,
5736 kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize, 5742 kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize,
5737 kStrictModeFunction, 5743 kStrictModeFunction,
5738 kExtendedModeFunction, 5744 kExtendedModeFunction,
5739 kUsesArguments, 5745 kUsesArguments,
5740 kHasDuplicateParameters, 5746 kHasDuplicateParameters,
5741 kNative, 5747 kNative,
5742 kBoundFunction, 5748 kBoundFunction,
5743 kIsAnonymous, 5749 kIsAnonymous,
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
5872 5878
5873 // Tells whether or not this function can be optimized. 5879 // Tells whether or not this function can be optimized.
5874 inline bool IsOptimizable(); 5880 inline bool IsOptimizable();
5875 5881
5876 // Mark this function for lazy recompilation. The function will be 5882 // Mark this function for lazy recompilation. The function will be
5877 // recompiled the next time it is executed. 5883 // recompiled the next time it is executed.
5878 void MarkForLazyRecompilation(); 5884 void MarkForLazyRecompilation();
5879 5885
5880 // Helpers to compile this function. Returns true on success, false on 5886 // Helpers to compile this function. Returns true on success, false on
5881 // failure (e.g., stack overflow during compilation). 5887 // failure (e.g., stack overflow during compilation).
5888 static bool EnsureCompiled(Handle<JSFunction> function,
5889 ClearExceptionFlag flag);
5882 static bool CompileLazy(Handle<JSFunction> function, 5890 static bool CompileLazy(Handle<JSFunction> function,
5883 ClearExceptionFlag flag); 5891 ClearExceptionFlag flag);
5884 static bool CompileOptimized(Handle<JSFunction> function, 5892 static bool CompileOptimized(Handle<JSFunction> function,
5885 int osr_ast_id, 5893 int osr_ast_id,
5886 ClearExceptionFlag flag); 5894 ClearExceptionFlag flag);
5887 5895
5888 // Tells whether or not the function is already marked for lazy 5896 // Tells whether or not the function is already marked for lazy
5889 // recompilation. 5897 // recompilation.
5890 inline bool IsMarkedForLazyRecompilation(); 5898 inline bool IsMarkedForLazyRecompilation();
5891 5899
(...skipping 2876 matching lines...) Expand 10 before | Expand all | Expand 10 after
8768 } else { 8776 } else {
8769 value &= ~(1 << bit_position); 8777 value &= ~(1 << bit_position);
8770 } 8778 }
8771 return value; 8779 return value;
8772 } 8780 }
8773 }; 8781 };
8774 8782
8775 } } // namespace v8::internal 8783 } } // namespace v8::internal
8776 8784
8777 #endif // V8_OBJECTS_H_ 8785 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/full-codegen.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698