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

Side by Side Diff: src/ast.h

Issue 23817003: Propagate bailout and dont_optimize reasons to cpu-profiler (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 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
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 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 #define DECLARE_NODE_TYPE(type) \ 164 #define DECLARE_NODE_TYPE(type) \
165 virtual void Accept(AstVisitor* v) V8_OVERRIDE; \ 165 virtual void Accept(AstVisitor* v) V8_OVERRIDE; \
166 virtual AstNode::NodeType node_type() const V8_FINAL V8_OVERRIDE { \ 166 virtual AstNode::NodeType node_type() const V8_FINAL V8_OVERRIDE { \
167 return AstNode::k##type; \ 167 return AstNode::k##type; \
168 } \ 168 } \
169 template<class> friend class AstNodeFactory; 169 template<class> friend class AstNodeFactory;
170 170
171 171
172 enum AstPropertiesFlag { 172 enum AstPropertiesFlag {
173 kDontInline, 173 kDontInline,
174 kDontOptimize,
175 kDontSelfOptimize, 174 kDontSelfOptimize,
176 kDontSoftInline, 175 kDontSoftInline,
177 kDontCache 176 kDontCache
178 }; 177 };
179 178
180 179
181 class AstProperties V8_FINAL BASE_EMBEDDED { 180 class AstProperties V8_FINAL BASE_EMBEDDED {
182 public: 181 public:
183 class Flags : public EnumSet<AstPropertiesFlag, int> {}; 182 class Flags : public EnumSet<AstPropertiesFlag, int> {};
184 183
(...skipping 2122 matching lines...) Expand 10 before | Expand all | Expand 10 after
2307 2306
2308 bool is_generator() { 2307 bool is_generator() {
2309 return IsGenerator::decode(bitfield_) == kIsGenerator; 2308 return IsGenerator::decode(bitfield_) == kIsGenerator;
2310 } 2309 }
2311 2310
2312 int ast_node_count() { return ast_properties_.node_count(); } 2311 int ast_node_count() { return ast_properties_.node_count(); }
2313 AstProperties::Flags* flags() { return ast_properties_.flags(); } 2312 AstProperties::Flags* flags() { return ast_properties_.flags(); }
2314 void set_ast_properties(AstProperties* ast_properties) { 2313 void set_ast_properties(AstProperties* ast_properties) {
2315 ast_properties_ = *ast_properties; 2314 ast_properties_ = *ast_properties;
2316 } 2315 }
2316 inline BailoutReason dont_optimize_reason() {
yurys 2013/09/02 14:40:05 No need to add inline, the compiler should be smar
loislo 2013/09/02 16:03:45 Done.
2317 return dont_optimize_reason_;
2318 }
2319 inline void set_dont_optimize_reason(BailoutReason reason) {
2320 dont_optimize_reason_ = reason;
2321 }
2322 inline bool dont_optimize() {
2323 return dont_optimize_reason_ != kNoReason;
2324 }
2317 2325
2318 protected: 2326 protected:
2319 FunctionLiteral(Isolate* isolate, 2327 FunctionLiteral(Isolate* isolate,
2320 Handle<String> name, 2328 Handle<String> name,
2321 Scope* scope, 2329 Scope* scope,
2322 ZoneList<Statement*>* body, 2330 ZoneList<Statement*>* body,
2323 int materialized_literal_count, 2331 int materialized_literal_count,
2324 int expected_property_count, 2332 int expected_property_count,
2325 int handler_count, 2333 int handler_count,
2326 int parameter_count, 2334 int parameter_count,
2327 FunctionType function_type, 2335 FunctionType function_type,
2328 ParameterFlag has_duplicate_parameters, 2336 ParameterFlag has_duplicate_parameters,
2329 IsFunctionFlag is_function, 2337 IsFunctionFlag is_function,
2330 IsParenthesizedFlag is_parenthesized, 2338 IsParenthesizedFlag is_parenthesized,
2331 IsGeneratorFlag is_generator) 2339 IsGeneratorFlag is_generator)
2332 : Expression(isolate), 2340 : Expression(isolate),
2333 name_(name), 2341 name_(name),
2334 scope_(scope), 2342 scope_(scope),
2335 body_(body), 2343 body_(body),
2336 inferred_name_(isolate->factory()->empty_string()), 2344 inferred_name_(isolate->factory()->empty_string()),
2345 dont_optimize_reason_(kNoReason),
2337 materialized_literal_count_(materialized_literal_count), 2346 materialized_literal_count_(materialized_literal_count),
2338 expected_property_count_(expected_property_count), 2347 expected_property_count_(expected_property_count),
2339 handler_count_(handler_count), 2348 handler_count_(handler_count),
2340 parameter_count_(parameter_count), 2349 parameter_count_(parameter_count),
2341 function_token_position_(RelocInfo::kNoPosition) { 2350 function_token_position_(RelocInfo::kNoPosition) {
2342 bitfield_ = 2351 bitfield_ =
2343 IsExpression::encode(function_type != DECLARATION) | 2352 IsExpression::encode(function_type != DECLARATION) |
2344 IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) | 2353 IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) |
2345 Pretenure::encode(false) | 2354 Pretenure::encode(false) |
2346 HasDuplicateParameters::encode(has_duplicate_parameters) | 2355 HasDuplicateParameters::encode(has_duplicate_parameters) |
2347 IsFunction::encode(is_function) | 2356 IsFunction::encode(is_function) |
2348 IsParenthesized::encode(is_parenthesized) | 2357 IsParenthesized::encode(is_parenthesized) |
2349 IsGenerator::encode(is_generator); 2358 IsGenerator::encode(is_generator);
2350 } 2359 }
2351 2360
2352 private: 2361 private:
2353 Handle<String> name_; 2362 Handle<String> name_;
2354 Scope* scope_; 2363 Scope* scope_;
2355 ZoneList<Statement*>* body_; 2364 ZoneList<Statement*>* body_;
2356 Handle<String> inferred_name_; 2365 Handle<String> inferred_name_;
2357 AstProperties ast_properties_; 2366 AstProperties ast_properties_;
2367 BailoutReason dont_optimize_reason_;
2358 2368
2359 int materialized_literal_count_; 2369 int materialized_literal_count_;
2360 int expected_property_count_; 2370 int expected_property_count_;
2361 int handler_count_; 2371 int handler_count_;
2362 int parameter_count_; 2372 int parameter_count_;
2363 int function_token_position_; 2373 int function_token_position_;
2364 2374
2365 unsigned bitfield_; 2375 unsigned bitfield_;
2366 class IsExpression: public BitField<bool, 0, 1> {}; 2376 class IsExpression: public BitField<bool, 0, 1> {};
2367 class IsAnonymous: public BitField<bool, 1, 1> {}; 2377 class IsAnonymous: public BitField<bool, 1, 1> {};
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
2822 \ 2832 \
2823 Isolate* isolate_; \ 2833 Isolate* isolate_; \
2824 bool stack_overflow_ 2834 bool stack_overflow_
2825 2835
2826 2836
2827 // ---------------------------------------------------------------------------- 2837 // ----------------------------------------------------------------------------
2828 // Construction time visitor. 2838 // Construction time visitor.
2829 2839
2830 class AstConstructionVisitor BASE_EMBEDDED { 2840 class AstConstructionVisitor BASE_EMBEDDED {
2831 public: 2841 public:
2832 AstConstructionVisitor() { } 2842 AstConstructionVisitor() : dont_optimize_reason_(kNoReason) {
2843 }
2833 2844
2834 AstProperties* ast_properties() { return &properties_; } 2845 AstProperties* ast_properties() { return &properties_; }
2846 BailoutReason dont_optimize_reason() { return dont_optimize_reason_; }
2835 2847
2836 private: 2848 private:
2837 template<class> friend class AstNodeFactory; 2849 template<class> friend class AstNodeFactory;
2838 2850
2839 // Node visitors. 2851 // Node visitors.
2840 #define DEF_VISIT(type) \ 2852 #define DEF_VISIT(type) \
2841 void Visit##type(type* node); 2853 void Visit##type(type* node);
2842 AST_NODE_LIST(DEF_VISIT) 2854 AST_NODE_LIST(DEF_VISIT)
2843 #undef DEF_VISIT 2855 #undef DEF_VISIT
2844 2856
2845 void increase_node_count() { properties_.add_node_count(1); } 2857 void increase_node_count() { properties_.add_node_count(1); }
2846 void add_flag(AstPropertiesFlag flag) { properties_.flags()->Add(flag); } 2858 void add_flag(AstPropertiesFlag flag) { properties_.flags()->Add(flag); }
2859 void set_dont_optimize_reason(BailoutReason reason) {
2860 dont_optimize_reason_ = reason;
2861 }
2847 2862
2848 AstProperties properties_; 2863 AstProperties properties_;
2864 BailoutReason dont_optimize_reason_;
2849 }; 2865 };
2850 2866
2851 2867
2852 class AstNullVisitor BASE_EMBEDDED { 2868 class AstNullVisitor BASE_EMBEDDED {
2853 public: 2869 public:
2854 // Node visitors. 2870 // Node visitors.
2855 #define DEF_VISIT(type) \ 2871 #define DEF_VISIT(type) \
2856 void Visit##type(type* node) {} 2872 void Visit##type(type* node) {}
2857 AST_NODE_LIST(DEF_VISIT) 2873 AST_NODE_LIST(DEF_VISIT)
2858 #undef DEF_VISIT 2874 #undef DEF_VISIT
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
3242 private: 3258 private:
3243 Isolate* isolate_; 3259 Isolate* isolate_;
3244 Zone* zone_; 3260 Zone* zone_;
3245 Visitor visitor_; 3261 Visitor visitor_;
3246 }; 3262 };
3247 3263
3248 3264
3249 } } // namespace v8::internal 3265 } } // namespace v8::internal
3250 3266
3251 #endif // V8_AST_H_ 3267 #endif // V8_AST_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698