| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_AST_H_ | 5 #ifndef V8_AST_H_ |
| 6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
| 7 | 7 |
| 8 #include "v8.h" | 8 #include "v8.h" |
| 9 | 9 |
| 10 #include "assembler.h" | 10 #include "assembler.h" |
| (...skipping 2269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2280 enum IsFunctionFlag { | 2280 enum IsFunctionFlag { |
| 2281 kGlobalOrEval, | 2281 kGlobalOrEval, |
| 2282 kIsFunction | 2282 kIsFunction |
| 2283 }; | 2283 }; |
| 2284 | 2284 |
| 2285 enum IsParenthesizedFlag { | 2285 enum IsParenthesizedFlag { |
| 2286 kIsParenthesized, | 2286 kIsParenthesized, |
| 2287 kNotParenthesized | 2287 kNotParenthesized |
| 2288 }; | 2288 }; |
| 2289 | 2289 |
| 2290 enum IsGeneratorFlag { | 2290 enum KindFlag { |
| 2291 kIsGenerator, | 2291 kNormalFunction, |
| 2292 kNotGenerator | 2292 kArrowFunction, |
| 2293 kGeneratorFunction |
| 2293 }; | 2294 }; |
| 2294 | 2295 |
| 2295 DECLARE_NODE_TYPE(FunctionLiteral) | 2296 DECLARE_NODE_TYPE(FunctionLiteral) |
| 2296 | 2297 |
| 2297 Handle<String> name() const { return name_; } | 2298 Handle<String> name() const { return name_; } |
| 2298 Scope* scope() const { return scope_; } | 2299 Scope* scope() const { return scope_; } |
| 2299 ZoneList<Statement*>* body() const { return body_; } | 2300 ZoneList<Statement*>* body() const { return body_; } |
| 2300 void set_function_token_position(int pos) { function_token_position_ = pos; } | 2301 void set_function_token_position(int pos) { function_token_position_ = pos; } |
| 2301 int function_token_position() const { return function_token_position_; } | 2302 int function_token_position() const { return function_token_position_; } |
| 2302 int start_position() const; | 2303 int start_position() const; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2343 // function will be called immediately: | 2344 // function will be called immediately: |
| 2344 // - (function() { ... })(); | 2345 // - (function() { ... })(); |
| 2345 // - var x = function() { ... }(); | 2346 // - var x = function() { ... }(); |
| 2346 bool is_parenthesized() { | 2347 bool is_parenthesized() { |
| 2347 return IsParenthesized::decode(bitfield_) == kIsParenthesized; | 2348 return IsParenthesized::decode(bitfield_) == kIsParenthesized; |
| 2348 } | 2349 } |
| 2349 void set_parenthesized() { | 2350 void set_parenthesized() { |
| 2350 bitfield_ = IsParenthesized::update(bitfield_, kIsParenthesized); | 2351 bitfield_ = IsParenthesized::update(bitfield_, kIsParenthesized); |
| 2351 } | 2352 } |
| 2352 | 2353 |
| 2353 bool is_generator() { | 2354 bool is_generator() { return IsGenerator::decode(bitfield_); } |
| 2354 return IsGenerator::decode(bitfield_) == kIsGenerator; | 2355 bool is_arrow() { return IsArrow::decode(bitfield_); } |
| 2355 } | |
| 2356 | 2356 |
| 2357 int ast_node_count() { return ast_properties_.node_count(); } | 2357 int ast_node_count() { return ast_properties_.node_count(); } |
| 2358 AstProperties::Flags* flags() { return ast_properties_.flags(); } | 2358 AstProperties::Flags* flags() { return ast_properties_.flags(); } |
| 2359 void set_ast_properties(AstProperties* ast_properties) { | 2359 void set_ast_properties(AstProperties* ast_properties) { |
| 2360 ast_properties_ = *ast_properties; | 2360 ast_properties_ = *ast_properties; |
| 2361 } | 2361 } |
| 2362 int slot_count() { | 2362 int slot_count() { |
| 2363 return ast_properties_.feedback_slots(); | 2363 return ast_properties_.feedback_slots(); |
| 2364 } | 2364 } |
| 2365 bool dont_optimize() { return dont_optimize_reason_ != kNoReason; } | 2365 bool dont_optimize() { return dont_optimize_reason_ != kNoReason; } |
| 2366 BailoutReason dont_optimize_reason() { return dont_optimize_reason_; } | 2366 BailoutReason dont_optimize_reason() { return dont_optimize_reason_; } |
| 2367 void set_dont_optimize_reason(BailoutReason reason) { | 2367 void set_dont_optimize_reason(BailoutReason reason) { |
| 2368 dont_optimize_reason_ = reason; | 2368 dont_optimize_reason_ = reason; |
| 2369 } | 2369 } |
| 2370 | 2370 |
| 2371 protected: | 2371 protected: |
| 2372 FunctionLiteral(Zone* zone, | 2372 FunctionLiteral(Zone* zone, |
| 2373 Handle<String> name, | 2373 Handle<String> name, |
| 2374 Scope* scope, | 2374 Scope* scope, |
| 2375 ZoneList<Statement*>* body, | 2375 ZoneList<Statement*>* body, |
| 2376 int materialized_literal_count, | 2376 int materialized_literal_count, |
| 2377 int expected_property_count, | 2377 int expected_property_count, |
| 2378 int handler_count, | 2378 int handler_count, |
| 2379 int parameter_count, | 2379 int parameter_count, |
| 2380 FunctionType function_type, | 2380 FunctionType function_type, |
| 2381 ParameterFlag has_duplicate_parameters, | 2381 ParameterFlag has_duplicate_parameters, |
| 2382 IsFunctionFlag is_function, | 2382 IsFunctionFlag is_function, |
| 2383 IsParenthesizedFlag is_parenthesized, | 2383 IsParenthesizedFlag is_parenthesized, |
| 2384 IsGeneratorFlag is_generator, | 2384 KindFlag kind, |
| 2385 int position) | 2385 int position) |
| 2386 : Expression(zone, position), | 2386 : Expression(zone, position), |
| 2387 name_(name), | 2387 name_(name), |
| 2388 scope_(scope), | 2388 scope_(scope), |
| 2389 body_(body), | 2389 body_(body), |
| 2390 inferred_name_(zone->isolate()->factory()->empty_string()), | 2390 inferred_name_(zone->isolate()->factory()->empty_string()), |
| 2391 dont_optimize_reason_(kNoReason), | 2391 dont_optimize_reason_(kNoReason), |
| 2392 materialized_literal_count_(materialized_literal_count), | 2392 materialized_literal_count_(materialized_literal_count), |
| 2393 expected_property_count_(expected_property_count), | 2393 expected_property_count_(expected_property_count), |
| 2394 handler_count_(handler_count), | 2394 handler_count_(handler_count), |
| 2395 parameter_count_(parameter_count), | 2395 parameter_count_(parameter_count), |
| 2396 function_token_position_(RelocInfo::kNoPosition) { | 2396 function_token_position_(RelocInfo::kNoPosition) { |
| 2397 bitfield_ = | 2397 bitfield_ = |
| 2398 IsExpression::encode(function_type != DECLARATION) | | 2398 IsExpression::encode(function_type != DECLARATION) | |
| 2399 IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) | | 2399 IsAnonymous::encode(function_type == ANONYMOUS_EXPRESSION) | |
| 2400 Pretenure::encode(false) | | 2400 Pretenure::encode(false) | |
| 2401 HasDuplicateParameters::encode(has_duplicate_parameters) | | 2401 HasDuplicateParameters::encode(has_duplicate_parameters) | |
| 2402 IsFunction::encode(is_function) | | 2402 IsFunction::encode(is_function) | |
| 2403 IsParenthesized::encode(is_parenthesized) | | 2403 IsParenthesized::encode(is_parenthesized) | |
| 2404 IsGenerator::encode(is_generator); | 2404 IsGenerator::encode(kind == kGeneratorFunction) | |
| 2405 IsArrow::encode(kind == kArrowFunction); |
| 2405 } | 2406 } |
| 2406 | 2407 |
| 2407 private: | 2408 private: |
| 2408 Handle<String> name_; | 2409 Handle<String> name_; |
| 2409 Handle<SharedFunctionInfo> shared_info_; | 2410 Handle<SharedFunctionInfo> shared_info_; |
| 2410 Scope* scope_; | 2411 Scope* scope_; |
| 2411 ZoneList<Statement*>* body_; | 2412 ZoneList<Statement*>* body_; |
| 2412 Handle<String> inferred_name_; | 2413 Handle<String> inferred_name_; |
| 2413 AstProperties ast_properties_; | 2414 AstProperties ast_properties_; |
| 2414 BailoutReason dont_optimize_reason_; | 2415 BailoutReason dont_optimize_reason_; |
| 2415 | 2416 |
| 2416 int materialized_literal_count_; | 2417 int materialized_literal_count_; |
| 2417 int expected_property_count_; | 2418 int expected_property_count_; |
| 2418 int handler_count_; | 2419 int handler_count_; |
| 2419 int parameter_count_; | 2420 int parameter_count_; |
| 2420 int function_token_position_; | 2421 int function_token_position_; |
| 2421 | 2422 |
| 2422 unsigned bitfield_; | 2423 unsigned bitfield_; |
| 2423 class IsExpression: public BitField<bool, 0, 1> {}; | 2424 class IsExpression: public BitField<bool, 0, 1> {}; |
| 2424 class IsAnonymous: public BitField<bool, 1, 1> {}; | 2425 class IsAnonymous: public BitField<bool, 1, 1> {}; |
| 2425 class Pretenure: public BitField<bool, 2, 1> {}; | 2426 class Pretenure: public BitField<bool, 2, 1> {}; |
| 2426 class HasDuplicateParameters: public BitField<ParameterFlag, 3, 1> {}; | 2427 class HasDuplicateParameters: public BitField<ParameterFlag, 3, 1> {}; |
| 2427 class IsFunction: public BitField<IsFunctionFlag, 4, 1> {}; | 2428 class IsFunction: public BitField<IsFunctionFlag, 4, 1> {}; |
| 2428 class IsParenthesized: public BitField<IsParenthesizedFlag, 5, 1> {}; | 2429 class IsParenthesized: public BitField<IsParenthesizedFlag, 5, 1> {}; |
| 2429 class IsGenerator: public BitField<IsGeneratorFlag, 6, 1> {}; | 2430 class IsGenerator: public BitField<bool, 6, 1> {}; |
| 2431 class IsArrow: public BitField<bool, 7, 1> {}; |
| 2430 }; | 2432 }; |
| 2431 | 2433 |
| 2432 | 2434 |
| 2433 class NativeFunctionLiteral V8_FINAL : public Expression { | 2435 class NativeFunctionLiteral V8_FINAL : public Expression { |
| 2434 public: | 2436 public: |
| 2435 DECLARE_NODE_TYPE(NativeFunctionLiteral) | 2437 DECLARE_NODE_TYPE(NativeFunctionLiteral) |
| 2436 | 2438 |
| 2437 Handle<String> name() const { return name_; } | 2439 Handle<String> name() const { return name_; } |
| 2438 v8::Extension* extension() const { return extension_; } | 2440 v8::Extension* extension() const { return extension_; } |
| 2439 | 2441 |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3296 Scope* scope, | 3298 Scope* scope, |
| 3297 ZoneList<Statement*>* body, | 3299 ZoneList<Statement*>* body, |
| 3298 int materialized_literal_count, | 3300 int materialized_literal_count, |
| 3299 int expected_property_count, | 3301 int expected_property_count, |
| 3300 int handler_count, | 3302 int handler_count, |
| 3301 int parameter_count, | 3303 int parameter_count, |
| 3302 FunctionLiteral::ParameterFlag has_duplicate_parameters, | 3304 FunctionLiteral::ParameterFlag has_duplicate_parameters, |
| 3303 FunctionLiteral::FunctionType function_type, | 3305 FunctionLiteral::FunctionType function_type, |
| 3304 FunctionLiteral::IsFunctionFlag is_function, | 3306 FunctionLiteral::IsFunctionFlag is_function, |
| 3305 FunctionLiteral::IsParenthesizedFlag is_parenthesized, | 3307 FunctionLiteral::IsParenthesizedFlag is_parenthesized, |
| 3306 FunctionLiteral::IsGeneratorFlag is_generator, | 3308 FunctionLiteral::KindFlag kind, |
| 3307 int position) { | 3309 int position) { |
| 3308 FunctionLiteral* lit = new(zone_) FunctionLiteral( | 3310 FunctionLiteral* lit = new(zone_) FunctionLiteral( |
| 3309 zone_, name, scope, body, | 3311 zone_, name, scope, body, |
| 3310 materialized_literal_count, expected_property_count, handler_count, | 3312 materialized_literal_count, expected_property_count, handler_count, |
| 3311 parameter_count, function_type, has_duplicate_parameters, is_function, | 3313 parameter_count, function_type, has_duplicate_parameters, is_function, |
| 3312 is_parenthesized, is_generator, position); | 3314 is_parenthesized, kind, position); |
| 3313 // Top-level literal doesn't count for the AST's properties. | 3315 // Top-level literal doesn't count for the AST's properties. |
| 3314 if (is_function == FunctionLiteral::kIsFunction) { | 3316 if (is_function == FunctionLiteral::kIsFunction) { |
| 3315 visitor_.VisitFunctionLiteral(lit); | 3317 visitor_.VisitFunctionLiteral(lit); |
| 3316 } | 3318 } |
| 3317 return lit; | 3319 return lit; |
| 3318 } | 3320 } |
| 3319 | 3321 |
| 3320 NativeFunctionLiteral* NewNativeFunctionLiteral( | 3322 NativeFunctionLiteral* NewNativeFunctionLiteral( |
| 3321 Handle<String> name, v8::Extension* extension, int pos) { | 3323 Handle<String> name, v8::Extension* extension, int pos) { |
| 3322 NativeFunctionLiteral* lit = | 3324 NativeFunctionLiteral* lit = |
| (...skipping 10 matching lines...) Expand all Loading... |
| 3333 | 3335 |
| 3334 private: | 3336 private: |
| 3335 Zone* zone_; | 3337 Zone* zone_; |
| 3336 Visitor visitor_; | 3338 Visitor visitor_; |
| 3337 }; | 3339 }; |
| 3338 | 3340 |
| 3339 | 3341 |
| 3340 } } // namespace v8::internal | 3342 } } // namespace v8::internal |
| 3341 | 3343 |
| 3342 #endif // V8_AST_H_ | 3344 #endif // V8_AST_H_ |
| OLD | NEW |