• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_PARSING_REWRITER_H_
6 #define V8_PARSING_REWRITER_H_
7 
8 namespace v8 {
9 namespace internal {
10 
11 class AstValueFactory;
12 class DoExpression;
13 class ParseInfo;
14 class Parser;
15 class DeclarationScope;
16 class Scope;
17 
18 class Rewriter {
19  public:
20   // Rewrite top-level code (ECMA 262 "programs") so as to conservatively
21   // include an assignment of the value of the last statement in the code to
22   // a compiler-generated temporary variable wherever needed.
23   //
24   // Assumes code has been parsed and scopes have been analyzed.  Mutates the
25   // AST, so the AST should not continue to be used in the case of failure.
26   static bool Rewrite(ParseInfo* info);
27 
28   // Rewrite a list of statements, using the same rules as a top-level program,
29   // to ensure identical behaviour of completion result.  The temporary is added
30   // to the closure scope of the do-expression, which matches the closure scope
31   // of the outer scope (the do-expression itself runs in a block scope, not a
32   // closure scope). This closure scope needs to be passed in since the
33   // do-expression could have dropped its own block scope.
34   static bool Rewrite(Parser* parser, DeclarationScope* closure_scope,
35                       DoExpression* expr, AstValueFactory* factory);
36 };
37 
38 
39 }  // namespace internal
40 }  // namespace v8
41 
42 #endif  // V8_PARSING_REWRITER_H_
43