Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
97 changes: 97 additions & 0 deletions bench-sources/dotty/compiler/src/org/scalajs/ir/ClassKind.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* Scala.js (https://www.scala-js.org/)
*
* Copyright EPFL.
*
* Licensed under Apache License 2.0
* (https://www.apache.org/licenses/LICENSE-2.0).
*
* See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*/

package dotty.tools.sjs.ir

import scala.language.unsafeNulls
import scala.annotation.switch

sealed abstract class ClassKind {
import ClassKind._

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

def isJSClass: Boolean = this match {
case JSClass | JSModuleClass => true
case _ => false
}

def isNativeJSClass: Boolean = this match {
case NativeJSClass | NativeJSModuleClass => true
case _ => false
}

def isJSType: Boolean = this match {
case AbstractJSType | JSClass | JSModuleClass | NativeJSClass |
NativeJSModuleClass =>
true
case _ =>
false
}

def hasModuleAccessor: Boolean = this match {
case ModuleClass | JSModuleClass => true
case _ => false
}

def isAnyNonNativeClass: Boolean = this match {
case Class | ModuleClass | JSClass | JSModuleClass => true
case _ => false
}

@deprecated("not a meaningful operation", since = "1.13.2")
def withoutModuleAccessor: ClassKind = this match {
case ModuleClass => Class
case JSModuleClass => JSClass
case NativeJSModuleClass => AbstractJSType
case _ => this
}
}

object ClassKind {
case object Class extends ClassKind
case object ModuleClass extends ClassKind
case object Interface extends ClassKind
case object AbstractJSType extends ClassKind
case object HijackedClass extends ClassKind
case object JSClass extends ClassKind
case object JSModuleClass extends ClassKind
case object NativeJSClass extends ClassKind
case object NativeJSModuleClass 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.AbstractJSType => 4
case ClassKind.HijackedClass => 5
case ClassKind.JSClass => 6
case ClassKind.JSModuleClass => 7
case ClassKind.NativeJSClass => 8
case ClassKind.NativeJSModuleClass => 9
}

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.AbstractJSType
case 5 => ClassKind.HijackedClass
case 6 => ClassKind.JSClass
case 7 => ClassKind.JSModuleClass
case 8 => ClassKind.NativeJSClass
case 9 => ClassKind.NativeJSModuleClass
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Scala.js (https://www.scala-js.org/)
*
* Copyright EPFL.
*
* Licensed under Apache License 2.0
* (https://www.apache.org/licenses/LICENSE-2.0).
*
* See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*/

package dotty.tools.sjs.ir

import scala.language.unsafeNulls
import Names.ClassName
import Trees._

final class EntryPointsInfo(
val className: ClassName,
val hasEntryPoint: Boolean
)

object EntryPointsInfo {
def forClassDef(classDef: ClassDef): EntryPointsInfo = {
val hasEntryPoint = {
classDef.topLevelExportDefs.nonEmpty ||
classDef.methods.exists(m =>
m.flags.namespace == MemberNamespace.StaticConstructor &&
m.methodName.isStaticInitializer)
}
new EntryPointsInfo(classDef.name.name, hasEntryPoint)
}
}
Loading
Loading