18b112d2025046f85ef7f6be087c6129c872ebad2Ben Murdoch// Copyright 2011 the V8 project authors. All rights reserved.
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file.
4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifndef V8_REWRITER_H_
6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define V8_REWRITER_H_
7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 {
9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal {
10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
11f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdochclass CompilationInfo;
12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockclass Rewriter {
14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block public:
15f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  // Rewrite top-level code (ECMA 262 "programs") so as to conservatively
16f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  // include an assignment of the value of the last statement in the code to
17f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  // a compiler-generated temporary variable wherever needed.
18f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  //
19f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  // Assumes code has been parsed and scopes have been analyzed.  Mutates the
20f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  // AST, so the AST should not continue to be used in the case of failure.
21f87a203d89e1bbb6708282e0b64dbd13d59b723dBen Murdoch  static bool Rewrite(CompilationInfo* info);
22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} }  // namespace v8::internal
26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif  // V8_REWRITER_H_
28