summaryrefslogtreecommitdiff
path: root/examples/scala-js/ir/src/main/scala/scala/scalajs/ir/Tags.scala
blob: a03926c1e0cea5dd33917b0634e503a6081b8969 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*                     __                                               *\
**     ________ ___   / /  ___      __ ____  Scala.js IR                **
**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2014, LAMP/EPFL        **
**  __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \    http://scala-js.org/       **
** /____/\___/_/ |_/____/_/ | |__/ /____/                               **
**                          |/____/                                     **
\*                                                                      */


package scala.scalajs.ir

/** Serialization and hashing tags for trees and types */
private[ir] object Tags {

  // Tags for Trees

  final val TagEmptyTree = 1

  final val TagVarDef = TagEmptyTree + 1
  final val TagParamDef = TagVarDef + 1

  final val TagSkip = TagParamDef + 1
  final val TagBlock = TagSkip + 1
  final val TagLabeled = TagBlock + 1
  final val TagAssign = TagLabeled + 1
  final val TagReturn = TagAssign + 1
  final val TagIf = TagReturn + 1
  final val TagWhile = TagIf + 1
  final val TagDoWhile = TagWhile + 1
  final val TagTry = TagDoWhile + 1
  final val TagThrow = TagTry + 1
  final val TagContinue = TagThrow + 1
  final val TagMatch = TagContinue + 1
  final val TagDebugger = TagMatch + 1

  final val TagNew = TagDebugger + 1
  final val TagLoadModule = TagNew + 1
  final val TagStoreModule = TagLoadModule + 1
  final val TagSelect = TagStoreModule + 1
  final val TagApply = TagSelect + 1
  final val TagStaticApply = TagApply + 1
  final val TagTraitImplApply = TagStaticApply + 1
  final val TagUnaryOp = TagTraitImplApply + 1
  final val TagBinaryOp = TagUnaryOp + 1
  final val TagNewArray = TagBinaryOp + 1
  final val TagArrayValue = TagNewArray + 1
  final val TagArrayLength = TagArrayValue + 1
  final val TagArraySelect = TagArrayLength + 1
  final val TagRecordValue = TagArraySelect + 1
  final val TagIsInstanceOf = TagRecordValue + 1
  final val TagAsInstanceOf = TagIsInstanceOf + 1
  final val TagUnbox = TagAsInstanceOf + 1
  final val TagGetClass = TagUnbox + 1
  final val TagCallHelper = TagGetClass + 1

  final val TagJSNew = TagCallHelper + 1
  final val TagJSDotSelect = TagJSNew + 1
  final val TagJSBracketSelect = TagJSDotSelect + 1
  final val TagJSFunctionApply = TagJSBracketSelect + 1
  final val TagJSDotMethodApply = TagJSFunctionApply + 1
  final val TagJSBracketMethodApply = TagJSDotMethodApply + 1
  final val TagJSDelete = TagJSBracketMethodApply + 1
  final val TagJSUnaryOp = TagJSDelete + 1
  final val TagJSBinaryOp = TagJSUnaryOp + 1
  final val TagJSArrayConstr = TagJSBinaryOp + 1
  final val TagJSObjectConstr = TagJSArrayConstr + 1
  final val TagJSEnvInfo = TagJSObjectConstr + 1

  final val TagUndefined = TagJSEnvInfo + 1
  final val TagUndefinedParam = TagUndefined + 1
  final val TagNull = TagUndefinedParam + 1
  final val TagBooleanLiteral = TagNull + 1
  final val TagIntLiteral = TagBooleanLiteral + 1
  final val TagLongLiteral = TagIntLiteral + 1
  final val TagFloatLiteral = TagLongLiteral + 1
  final val TagDoubleLiteral = TagFloatLiteral + 1
  final val TagStringLiteral = TagDoubleLiteral + 1
  final val TagClassOf = TagStringLiteral + 1

  final val TagVarRef = TagClassOf + 1
  final val TagThis = TagVarRef + 1
  final val TagClosure = TagThis + 1

  final val TagClassDef = TagClosure + 1
  final val TagMethodDef = TagClassDef + 1
  final val TagPropertyDef = TagMethodDef + 1
  final val TagConstructorExportDef = TagPropertyDef + 1
  final val TagModuleExportDef = TagConstructorExportDef + 1

  // Tags for Types

  final val TagAnyType = 1
  final val TagNothingType = TagAnyType + 1
  final val TagUndefType = TagNothingType + 1
  final val TagBooleanType = TagUndefType + 1
  final val TagIntType = TagBooleanType + 1
  final val TagLongType = TagIntType + 1
  final val TagFloatType = TagLongType + 1
  final val TagDoubleType = TagFloatType + 1
  final val TagStringType = TagDoubleType + 1
  final val TagNullType = TagStringType + 1
  final val TagClassType = TagNullType + 1
  final val TagArrayType = TagClassType + 1
  final val TagRecordType = TagArrayType + 1
  final val TagNoType = TagRecordType + 1

}