scala.tools.nsc.transform.async.StateAssigner.scala Maven / Gradle / Ivy
The newest version!
/*
* Scala (https://www.scala-lang.org)
*
* Copyright EPFL and Lightbend, Inc.
*
* Licensed under Apache License 2.0
* (http://www.apache.org/licenses/LICENSE-2.0).
*
* See the NOTICE file distributed with this work for
* additional information regarding copyright ownership.
*/
package scala.tools.nsc.transform.async
import scala.tools.nsc.symtab.SymbolTable
private[async] final class StateAssigner {
private var current = StateAssigner.Initial
def nextState(): Int = try current finally current += 1
}
object StateAssigner {
final val Initial = 0
final val Terminal = -1
// We use the convention that the state machine's ID for a state corresponding to
// a labeldef will a negative number be based on the symbol ID. This allows us
// to translate a forward jump to the label as a state transition to a known state
// ID, even though the state machine transform hasn't yet processed the target label
// def. Negative numbers are used so as as not to clash with regular state IDs, which
// are allocated in ascending order from 0.
def stateIdForLabel(sym: SymbolTable#Symbol): Int = -sym.id
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy