// Copyright 2011 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_PARSING_PREPARSE_DATA_FORMAT_H_
#define V8_PARSING_PREPARSE_DATA_FORMAT_H_

namespace v8 {
namespace internal {

// Generic and general data used by preparse data recorders and readers.

struct PreparseDataConstants {
 public:
  // Layout and constants of the preparse data exchange format.
  static const unsigned kMagicNumber = 0xBadDead;
  static const unsigned kCurrentVersion = 11;

  static const int kMagicOffset = 0;
  static const int kVersionOffset = 1;
  static const int kHasErrorOffset = 2;
  static const int kFunctionsSizeOffset = 3;
  static const int kSizeOffset = 4;
  static const int kHeaderSize = 5;

  // If encoding a message, the following positions are fixed.
  static const int kMessageStartPos = 0;
  static const int kMessageEndPos = 1;
  static const int kMessageArgCountPos = 2;
  static const int kParseErrorTypePos = 3;
  static const int kMessageTemplatePos = 4;
  static const int kMessageArgPos = 5;

  static const unsigned char kNumberTerminator = 0x80u;
};


}  // namespace internal
}  // namespace v8.

#endif  // V8_PARSING_PREPARSE_DATA_FORMAT_H_
