Skip to content

Commit 5c6598b

Browse files
committed
Add Scala2Flags to replace our use of scala-reflect Flags
1 parent 2572a2c commit 5c6598b

File tree

2 files changed

+110
-18
lines changed

2 files changed

+110
-18
lines changed

compiler/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -193,24 +193,7 @@ object PickleBuffer {
193193
private type FlagMap = Array[Array[Long]]
194194

195195
private val (scalaTermFlagMap, scalaTypeFlagMap) = {
196-
import scala.reflect.internal.Flags._
197-
198-
// The following vals are copy-pasted from reflect.internal.Flags.
199-
// They are unfortunately private there, so we cannot get at them directly.
200-
// Using the public method pickledToRawFlags instead looks unattractive
201-
// because of performance.
202-
val IMPLICIT_PKL = (1 << 0)
203-
val FINAL_PKL = (1 << 1)
204-
val PRIVATE_PKL = (1 << 2)
205-
val PROTECTED_PKL = (1 << 3)
206-
val SEALED_PKL = (1 << 4)
207-
val OVERRIDE_PKL = (1 << 5)
208-
val CASE_PKL = (1 << 6)
209-
val ABSTRACT_PKL = (1 << 7)
210-
val DEFERRED_PKL = (1 << 8)
211-
val METHOD_PKL = (1 << 9)
212-
val MODULE_PKL = (1 << 10)
213-
val INTERFACE_PKL = (1 << 11)
196+
import Scala2Flags._
214197

215198
val corr = Map(
216199
PROTECTED_PKL -> Protected,
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/* NSC -- new Scala compiler
2+
* Copyright 2005-2013 LAMP/EPFL
3+
* @author Martin Odersky
4+
*/
5+
6+
package dotty.tools
7+
package dotc
8+
package core
9+
package unpickleScala2
10+
11+
import scala.collection.{ mutable, immutable }
12+
13+
/** Scala2 flags, adapted from https://github.com/scala/scala/blob/2.11.x/src/reflect/scala/reflect/internal/Flags.scala
14+
*/
15+
object Scala2Flags {
16+
final val IMPLICIT = 1 << 9
17+
final val FINAL = 1 << 5 // May not be overridden. Note that java final implies much more than scala final.
18+
final val PRIVATE = 1 << 2
19+
final val PROTECTED = 1 << 0
20+
21+
final val SEALED = 1 << 10
22+
final val OVERRIDE = 1 << 1
23+
final val CASE = 1 << 11
24+
final val ABSTRACT = 1 << 3 // abstract class, or used in conjunction with abstract override.
25+
// Note difference to DEFERRED!
26+
final val DEFERRED = 1 << 4 // was `abstract' for members | trait is virtual
27+
final val INTERFACE = 1 << 7 // symbol is an interface (i.e. a trait which defines only abstract methods)
28+
final val MUTABLE = 1 << 12 // symbol is a mutable variable.
29+
final val PARAM = 1 << 13 // symbol is a (value or type) parameter to a method
30+
final val MACRO = 1 << 15 // symbol is a macro definition
31+
32+
final val COVARIANT = 1 << 16 // symbol is a covariant type variable
33+
final val BYNAMEPARAM = 1 << 16 // parameter is by name
34+
final val CONTRAVARIANT = 1 << 17 // symbol is a contravariant type variable
35+
final val ABSOVERRIDE = 1 << 18 // combination of abstract & override
36+
final val LOCAL = 1 << 19 // symbol is local to current class (i.e. private[this] or protected[this]
37+
// pre: PRIVATE or PROTECTED are also set
38+
final val JAVA = 1 << 20 // symbol was defined by a Java class
39+
final val STATIC = 1 << 23 // static field, method or class
40+
final val CASEACCESSOR = 1 << 24 // symbol is a case parameter (or its accessor, or a GADT skolem)
41+
final val TRAIT = 1 << 25 // symbol is a trait
42+
final val DEFAULTPARAM = 1 << 25 // the parameter has a default value
43+
final val PARAMACCESSOR = 1 << 29 // for field definitions generated for primary constructor
44+
// parameters (no matter if it's a 'val' parameter or not)
45+
// for parameters of a primary constructor ('val' or not)
46+
// for the accessor methods generated for 'val' or 'var' parameters
47+
final val LAZY = 1L << 31 // symbol is a lazy val. can't have MUTABLE unless transformed by typer
48+
final val PRESUPER = 1L << 37 // value is evaluated before super call
49+
final val DEFAULTINIT = 1L << 41 // symbol is initialized to the default value: used by -Xcheckinit
50+
final val ARTIFACT = 1L << 46 // symbol should be ignored when typechecking; will be marked ACC_SYNTHETIC in bytecode
51+
// to see which symbols are marked as ARTIFACT, see scaladocs for FlagValues.ARTIFACT
52+
final val DEFAULTMETHOD = 1L << 47 // symbol is a java default method
53+
final val ENUM = 1L << 48 // symbol is an enum
54+
55+
final val PrivateLocal = PRIVATE | LOCAL
56+
final val ProtectedLocal = PROTECTED | LOCAL
57+
final val AccessFlags = PRIVATE | PROTECTED | LOCAL
58+
59+
final val METHOD = 1 << 6 // a method
60+
final val MODULE = 1 << 8 // symbol is module or class implementing a module
61+
final val PACKAGE = 1 << 14 // symbol is a java package
62+
63+
final val CAPTURED = 1 << 16 // variable is accessed from nested function. Set by LambdaLift.
64+
final val LABEL = 1 << 17 // method symbol is a label. Set by TailCall
65+
final val INCONSTRUCTOR = 1 << 17 // class symbol is defined in this/superclass constructor.
66+
final val SYNTHETIC = 1 << 21 // symbol is compiler-generated (compare with ARTIFACT)
67+
final val STABLE = 1 << 22 // functions that are assumed to be stable
68+
// (typically, access methods for valdefs)
69+
// or classes that do not contain abstract types.
70+
final val BRIDGE = 1 << 26 // function is a bridge method. Set by Erasure
71+
final val ACCESSOR = 1 << 27 // a value or variable accessor (getter or setter)
72+
73+
final val SUPERACCESSOR = 1 << 28 // a super accessor
74+
final val MODULEVAR = 1 << 30 // for variables: is the variable caching a module value
75+
76+
final val IS_ERROR = 1L << 32 // symbol is an error symbol
77+
final val OVERLOADED = 1L << 33 // symbol is overloaded
78+
final val LIFTED = 1L << 34 // class has been lifted out to package level
79+
// local value has been lifted out to class level
80+
// todo: make LIFTED = latePRIVATE?
81+
final val MIXEDIN = 1L << 35 // term member has been mixed in
82+
final val EXISTENTIAL = 1L << 35 // type is an existential parameter or skolem
83+
final val EXPANDEDNAME = 1L << 36 // name has been expanded with class suffix
84+
final val IMPLCLASS = 1L << 37 // symbol is an implementation class
85+
final val TRANS_FLAG = 1L << 38 // transient flag guaranteed to be reset after each phase.
86+
87+
final val LOCKED = 1L << 39 // temporary flag to catch cyclic dependencies
88+
final val SPECIALIZED = 1L << 40 // symbol is a generated specialized member
89+
final val VBRIDGE = 1L << 42 // symbol is a varargs bridge
90+
91+
final val VARARGS = 1L << 43 // symbol is a Java-style varargs method
92+
final val TRIEDCOOKING = 1L << 44 // `Cooking` has been tried on this symbol
93+
// A Java method's type is `cooked` by transforming raw types to existentials
94+
95+
final val SYNCHRONIZED = 1L << 45 // symbol is a method which should be marked ACC_SYNCHRONIZED
96+
97+
final val IMPLICIT_PKL = (1 << 0)
98+
final val FINAL_PKL = (1 << 1)
99+
final val PRIVATE_PKL = (1 << 2)
100+
final val PROTECTED_PKL = (1 << 3)
101+
final val SEALED_PKL = (1 << 4)
102+
final val OVERRIDE_PKL = (1 << 5)
103+
final val CASE_PKL = (1 << 6)
104+
final val ABSTRACT_PKL = (1 << 7)
105+
final val DEFERRED_PKL = (1 << 8)
106+
final val METHOD_PKL = (1 << 9)
107+
final val MODULE_PKL = (1 << 10)
108+
final val INTERFACE_PKL = (1 << 11)
109+
}

0 commit comments

Comments
 (0)