summaryrefslogtreecommitdiff
path: root/ir/src/main/scala/scala/scalajs/ir/ClassKind.scala
blob: 5092d2cb2a88e4666af4f5fe0eb95c2224746d5f (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
/*                     __                                               *\
**     ________ ___   / /  ___      __ ____  Scala.js IR                **
**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2014, LAMP/EPFL        **
**  __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \    http://scala-js.org/       **
** /____/\___/_/ |_/____/_/ | |__/ /____/                               **
**                          |/____/                                     **
\*                                                                      */


package scala.scalajs.ir

import scala.annotation.switch

sealed abstract class ClassKind {
  import ClassKind._

  def isClass = this match {
    case Class | ModuleClass => true
    case _                   => false
  }

  def isType = this match {
    case TraitImpl => false
    case _         => true
  }
}

object ClassKind {
  case object Class extends ClassKind
  case object ModuleClass extends ClassKind
  case object Interface extends ClassKind
  case object RawJSType extends ClassKind
  case object HijackedClass extends ClassKind
  case object TraitImpl extends ClassKind

  private[ir] def toByte(kind: ClassKind): Byte = kind match {
    case ClassKind.Class         => 1
    case ClassKind.ModuleClass   => 2
    case ClassKind.Interface     => 3
    case ClassKind.RawJSType     => 4
    case ClassKind.HijackedClass => 5
    case ClassKind.TraitImpl     => 6
  }

  private[ir] def fromByte(b: Byte): ClassKind = (b: @switch) match {
    case 1 => ClassKind.Class
    case 2 => ClassKind.ModuleClass
    case 3 => ClassKind.Interface
    case 4 => ClassKind.RawJSType
    case 5 => ClassKind.HijackedClass
    case 6 => ClassKind.TraitImpl
  }
}