// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library kernel.binary.tag;

class Tag {
  static const int Nothing = 0;
  static const int Something = 1;

  static const int Class = 2;

  static const int FunctionNode = 3;

  // Members
  static const int Field = 4;
  static const int Constructor = 5;
  static const int Procedure = 6;
  static const int RedirectingFactoryConstructor = 108;

  // Initializers
  static const int InvalidInitializer = 7;
  static const int FieldInitializer = 8;
  static const int SuperInitializer = 9;
  static const int RedirectingInitializer = 10;
  static const int LocalInitializer = 11;
  static const int AssertInitializer = 12;

  // Expressions
  static const int CheckLibraryIsLoaded = 13;
  static const int LoadLibrary = 14;
  static const int DirectPropertyGet = 15;
  static const int DirectPropertySet = 16;
  static const int DirectMethodInvocation = 17;
  static const int ConstStaticInvocation = 18;
  static const int InvalidExpression = 19;
  static const int VariableGet = 20;
  static const int VariableSet = 21;
  static const int PropertyGet = 22;
  static const int PropertySet = 23;
  static const int SuperPropertyGet = 24;
  static const int SuperPropertySet = 25;
  static const int StaticGet = 26;
  static const int StaticSet = 27;
  static const int MethodInvocation = 28;
  static const int SuperMethodInvocation = 29;
  static const int StaticInvocation = 30;
  static const int ConstructorInvocation = 31;
  static const int ConstConstructorInvocation = 32;
  static const int Not = 33;
  static const int LogicalExpression = 34;
  static const int ConditionalExpression = 35;
  static const int StringConcatenation = 36;
  static const int ListConcatenation = 111;
  static const int SetConcatenation = 112;
  static const int MapConcatenation = 113;
  static const int InstanceCreation = 114;
  static const int IsExpression = 37;
  static const int AsExpression = 38;
  static const int StringLiteral = 39;
  static const int DoubleLiteral = 40;
  static const int TrueLiteral = 41;
  static const int FalseLiteral = 42;
  static const int NullLiteral = 43;
  static const int SymbolLiteral = 44;
  static const int TypeLiteral = 45;
  static const int ThisExpression = 46;
  static const int Rethrow = 47;
  static const int Throw = 48;
  static const int ListLiteral = 49;
  static const int MapLiteral = 50;
  static const int AwaitExpression = 51;
  static const int FunctionExpression = 52;
  static const int Let = 53;
  static const int BlockExpression = 82;
  static const int Instantiation = 54;
  static const int PositiveIntLiteral = 55;
  static const int NegativeIntLiteral = 56;
  static const int BigIntLiteral = 57;
  static const int ConstListLiteral = 58;
  static const int ConstMapLiteral = 59;
  static const int SetLiteral = 109;
  static const int ConstSetLiteral = 110;

  // Statements
  static const int ExpressionStatement = 61;
  static const int Block = 62;
  static const int EmptyStatement = 63;
  static const int AssertStatement = 64;
  static const int LabeledStatement = 65;
  static const int BreakStatement = 66;
  static const int WhileStatement = 67;
  static const int DoStatement = 68;
  static const int ForStatement = 69;
  static const int ForInStatement = 70;
  static const int SwitchStatement = 71;
  static const int ContinueSwitchStatement = 72;
  static const int IfStatement = 73;
  static const int ReturnStatement = 74;
  static const int TryCatch = 75;
  static const int TryFinally = 76;
  static const int YieldStatement = 77;
  static const int VariableDeclaration = 78;
  static const int FunctionDeclaration = 79;
  static const int AsyncForInStatement = 80;
  static const int AssertBlock = 81;
  // 82 is occupied by [BlockExpression] (expression).

  // Types
  static const int TypedefType = 87;
  static const int BottomType = 89;
  static const int InvalidType = 90;
  static const int DynamicType = 91;
  static const int VoidType = 92;
  static const int InterfaceType = 93;
  static const int FunctionType = 94;
  static const int TypeParameterType = 95;
  static const int SimpleInterfaceType = 96;
  static const int SimpleFunctionType = 97;

  // References
  static const int NullReference = 99;
  static const int ClassReference = 100;
  static const int MemberReference = 101;

  static const int ConstantExpression = 106;

  // Tag is deprecated since version 24.
  static const int Deprecated_ConstantExpression = 107;

  /// 108 is occupied by [RedirectingFactoryConstructor] (member).
  /// 109 is occupied by [SetLiteral] (expression).
  /// 110 is occupied by [ConstSetLiteral] (expression).
  /// 111 is occupied by [ListConcatenation] (expression).
  /// 112 is occupied by [SetConcatenation] (expression).
  /// 113 is occupied by [MapConcatenation] (expression).
  /// 114 is occupied by [InstanceCreation] (expression).

  static const int SpecializedTagHighBit = 0x80; // 10000000
  static const int SpecializedTagMask = 0xF8; // 11111000
  static const int SpecializedPayloadMask = 0x7; // 00000111

  static const int SpecializedVariableGet = 128;
  static const int SpecializedVariableSet = 136;
  static const int SpecializedIntLiteral = 144;

  static const int SpecializedIntLiteralBias = 3;

  static const int ComponentFile = 0x90ABCDEF;

  /// Internal version of kernel binary format.
  /// Bump it when making incompatible changes in kernel binaries.
  /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
  static const int BinaryFormatVersion = 25;
}

abstract class ConstantTag {
  static const int NullConstant = 0;
  static const int BoolConstant = 1;
  static const int IntConstant = 2;
  static const int DoubleConstant = 3;
  static const int StringConstant = 4;
  static const int SymbolConstant = 5;
  static const int MapConstant = 6;
  static const int ListConstant = 7;
  static const int SetConstant = 13;
  static const int InstanceConstant = 8;
  static const int PartialInstantiationConstant = 9;
  static const int TearOffConstant = 10;
  static const int TypeLiteralConstant = 11;
  static const int UnevaluatedConstant = 12;
  // 13 is occupied by [SetConstant]
}
