OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 bool outer_scope_calls_eval_; | 371 bool outer_scope_calls_eval_; |
372 bool inner_scope_calls_eval_; | 372 bool inner_scope_calls_eval_; |
373 bool outer_scope_is_eval_scope_; | 373 bool outer_scope_is_eval_scope_; |
374 bool force_eager_compilation_; | 374 bool force_eager_compilation_; |
375 | 375 |
376 // Computed via AllocateVariables; function scopes only. | 376 // Computed via AllocateVariables; function scopes only. |
377 int num_stack_slots_; | 377 int num_stack_slots_; |
378 int num_heap_slots_; | 378 int num_heap_slots_; |
379 | 379 |
380 // Serialized scopes support. | 380 // Serialized scopes support. |
381 SerializedScopeInfo* scope_info_; | 381 Handle<SerializedScopeInfo> scope_info_; |
382 bool resolved() { return scope_info_ != NULL; } | 382 bool resolved() { return !scope_info_.is_null(); } |
383 | 383 |
384 // Create a non-local variable with a given name. | 384 // Create a non-local variable with a given name. |
385 // These variables are looked up dynamically at runtime. | 385 // These variables are looked up dynamically at runtime. |
386 Variable* NonLocal(Handle<String> name, Variable::Mode mode); | 386 Variable* NonLocal(Handle<String> name, Variable::Mode mode); |
387 | 387 |
388 // Variable resolution. | 388 // Variable resolution. |
389 Variable* LookupRecursive(Handle<String> name, | 389 Variable* LookupRecursive(Handle<String> name, |
390 bool inner_lookup, | 390 bool inner_lookup, |
391 Variable** invalidated_local); | 391 Variable** invalidated_local); |
392 void ResolveVariable(Scope* global_scope, | 392 void ResolveVariable(Scope* global_scope, |
(...skipping 14 matching lines...) Expand all Loading... |
407 | 407 |
408 // Variable allocation. | 408 // Variable allocation. |
409 void AllocateStackSlot(Variable* var); | 409 void AllocateStackSlot(Variable* var); |
410 void AllocateHeapSlot(Variable* var); | 410 void AllocateHeapSlot(Variable* var); |
411 void AllocateParameterLocals(); | 411 void AllocateParameterLocals(); |
412 void AllocateNonParameterLocal(Variable* var); | 412 void AllocateNonParameterLocal(Variable* var); |
413 void AllocateNonParameterLocals(); | 413 void AllocateNonParameterLocals(); |
414 void AllocateVariablesRecursively(); | 414 void AllocateVariablesRecursively(); |
415 | 415 |
416 private: | 416 private: |
417 Scope(Scope* inner_scope, SerializedScopeInfo* scope_info); | 417 Scope(Scope* inner_scope, Handle<SerializedScopeInfo> scope_info); |
418 | 418 |
419 void AddInnerScope(Scope* inner_scope) { | 419 void AddInnerScope(Scope* inner_scope) { |
420 if (inner_scope != NULL) { | 420 if (inner_scope != NULL) { |
421 inner_scopes_.Add(inner_scope); | 421 inner_scopes_.Add(inner_scope); |
422 inner_scope->outer_scope_ = this; | 422 inner_scope->outer_scope_ = this; |
423 } | 423 } |
424 } | 424 } |
425 | 425 |
426 void SetDefaults(Type type, | 426 void SetDefaults(Type type, |
427 Scope* outer_scope, | 427 Scope* outer_scope, |
428 SerializedScopeInfo* scope_info) { | 428 Handle<SerializedScopeInfo> scope_info); |
429 outer_scope_ = outer_scope; | |
430 type_ = type; | |
431 scope_name_ = FACTORY->empty_symbol(); | |
432 dynamics_ = NULL; | |
433 receiver_ = NULL; | |
434 function_ = NULL; | |
435 arguments_ = NULL; | |
436 arguments_shadow_ = NULL; | |
437 illegal_redecl_ = NULL; | |
438 scope_inside_with_ = false; | |
439 scope_contains_with_ = false; | |
440 scope_calls_eval_ = false; | |
441 // Inherit the strict mode from the parent scope. | |
442 strict_mode_ = (outer_scope != NULL) && outer_scope->strict_mode_; | |
443 outer_scope_calls_eval_ = false; | |
444 inner_scope_calls_eval_ = false; | |
445 outer_scope_is_eval_scope_ = false; | |
446 force_eager_compilation_ = false; | |
447 num_stack_slots_ = 0; | |
448 num_heap_slots_ = 0; | |
449 scope_info_ = scope_info; | |
450 } | |
451 }; | 429 }; |
452 | 430 |
453 | 431 |
454 // Scope used during pre-parsing. | 432 // Scope used during pre-parsing. |
455 class DummyScope : public Scope { | 433 class DummyScope : public Scope { |
456 public: | 434 public: |
457 DummyScope() | 435 DummyScope() |
458 : Scope(GLOBAL_SCOPE), | 436 : Scope(GLOBAL_SCOPE), |
459 nesting_level_(1), // Allows us to Leave the initial scope. | 437 nesting_level_(1), // Allows us to Leave the initial scope. |
460 inside_with_level_(kNotInsideWith) { | 438 inside_with_level_(kNotInsideWith) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 int nesting_level_; | 477 int nesting_level_; |
500 // Nesting level of outermost scope that is contained in a with statement, | 478 // Nesting level of outermost scope that is contained in a with statement, |
501 // or kNotInsideWith if there are no with's around the current scope. | 479 // or kNotInsideWith if there are no with's around the current scope. |
502 int inside_with_level_; | 480 int inside_with_level_; |
503 }; | 481 }; |
504 | 482 |
505 | 483 |
506 } } // namespace v8::internal | 484 } } // namespace v8::internal |
507 | 485 |
508 #endif // V8_SCOPES_H_ | 486 #endif // V8_SCOPES_H_ |
OLD | NEW |