diff --git a/.drone.yml b/.drone.yml index 696e401c60bd..14a67a41edc3 100644 --- a/.drone.yml +++ b/.drone.yml @@ -31,7 +31,7 @@ pipeline: image: lampepfl/dotty:2019-02-06 commands: - cp -R . /tmp/2/ && cd /tmp/2/ - - ./project/scripts/sbt ";dotty-bootstrapped/compile ;dotty-bootstrapped/test ;sjsSandbox/run" + - ./project/scripts/sbt ";dotty-bootstrapped/compile ;dotty-bootstrapped/test; dotty-semanticdb/compile; dotty-semanticdb/test:compile;sjsSandbox/run" - ./project/scripts/bootstrapCmdTests community_build: diff --git a/compiler/src/dotty/tools/backend/jvm/AsmUtils.scala b/compiler/src/dotty/tools/backend/jvm/AsmUtils.scala index 7f5887d99a7f..47d5c1e41361 100644 --- a/compiler/src/dotty/tools/backend/jvm/AsmUtils.scala +++ b/compiler/src/dotty/tools/backend/jvm/AsmUtils.scala @@ -2,7 +2,7 @@ package dotty.tools package backend package jvm -import scala.tools.asm.tree.{AbstractInsnNode} +import scala.tools.asm.tree.{AbstractInsnNode, ClassNode, MethodNode} import java.io.PrintWriter import scala.tools.asm.util.{TraceClassVisitor, TraceMethodVisitor, Textifier} import scala.tools.asm.ClassReader @@ -31,7 +31,7 @@ object AsmUtils { final val traceSerializedClassEnabled = false final val traceSerializedClassPattern = "" - def traceMethod(mnode: MethodNode1): Unit = { + def traceMethod(mnode: MethodNode): Unit = { println(s"Bytecode for method ${mnode.name}") val p = new Textifier val tracer = new TraceMethodVisitor(p) @@ -41,7 +41,7 @@ object AsmUtils { w.flush() } - def traceClass(cnode: ClassNode1): Unit = { + def traceClass(cnode: ClassNode): Unit = { println(s"Bytecode for class ${cnode.name}") val w = new PrintWriter(System.out) cnode.accept(new TraceClassVisitor(w)) @@ -50,8 +50,8 @@ object AsmUtils { def traceClass(bytes: Array[Byte]): Unit = traceClass(readClass(bytes)) - def readClass(bytes: Array[Byte]): ClassNode1 = { - val node = new ClassNode1() + def readClass(bytes: Array[Byte]): ClassNode = { + val node = new ClassNode() new ClassReader(bytes).accept(node, 0) node } diff --git a/compiler/src/dotty/tools/backend/jvm/BCodeHelpers.scala b/compiler/src/dotty/tools/backend/jvm/BCodeHelpers.scala index dea4cf7cb69a..32e676098b33 100644 --- a/compiler/src/dotty/tools/backend/jvm/BCodeHelpers.scala +++ b/compiler/src/dotty/tools/backend/jvm/BCodeHelpers.scala @@ -3,7 +3,6 @@ package backend package jvm import scala.tools.asm -import scala.tools.asm.ClassWriter import scala.collection.mutable import dotty.tools.io.AbstractFile @@ -127,20 +126,6 @@ trait BCodeHelpers extends BCodeIdiomatic with BytecodeWriters { } } - /* - * can-multi-thread - */ - def createJAttribute(name: String, b: Array[Byte], offset: Int, len: Int): asm.Attribute = { - new asm.Attribute(name) { - override def write(classWriter: ClassWriter, code: Array[Byte], - codeLength: Int, maxStack: Int, maxLocals: Int): asm.ByteVector = { - val byteVector = new asm.ByteVector(len) - byteVector.putByteArray(b, offset, len) - byteVector - } - } - } - /* * Custom attribute (JVMS 4.7.1) "ScalaSig" used as marker only * i.e., the pickle is contained in a custom annotation, see: @@ -166,6 +151,15 @@ trait BCodeHelpers extends BCodeIdiomatic with BytecodeWriters { vp } + /* + * can-multi-thread + */ + def createJAttribute(name: String, b: Array[Byte], offset: Int, len: Int): asm.Attribute = { + val dest = new Array[Byte](len) + System.arraycopy(b, offset, dest, 0, len) + new asm.CustomAttr(name, dest) + } + /* * can-multi-thread */ diff --git a/compiler/src/dotty/tools/backend/jvm/BCodeSkelBuilder.scala b/compiler/src/dotty/tools/backend/jvm/BCodeSkelBuilder.scala index f808c1dd9c63..dd04f7ddec2d 100644 --- a/compiler/src/dotty/tools/backend/jvm/BCodeSkelBuilder.scala +++ b/compiler/src/dotty/tools/backend/jvm/BCodeSkelBuilder.scala @@ -53,7 +53,7 @@ trait BCodeSkelBuilder extends BCodeHelpers { final val MaximumJvmParameters = 254 // current class - var cnode: ClassNode1 = null + var cnode: asm.tree.ClassNode = null var thisName: String = null // the internal name of the class being emitted var claszSymbol: Symbol = null @@ -88,7 +88,7 @@ trait BCodeSkelBuilder extends BCodeHelpers { isCZStaticModule = claszSymbol.isStaticModuleClass thisName = internalName(claszSymbol) - cnode = new ClassNode1() + cnode = new asm.tree.ClassNode() initJClass(cnode) @@ -245,7 +245,7 @@ trait BCodeSkelBuilder extends BCodeHelpers { } // end of method addClassFields() // current method - var mnode: MethodNode1 = null + var mnode: asm.tree.MethodNode = null var jMethodName: String = null var isMethSymStaticCtor = false var returnType: BType = null @@ -523,7 +523,7 @@ trait BCodeSkelBuilder extends BCodeHelpers { mdesc, jgensig, mkArrayS(thrownExceptions) - ).asInstanceOf[MethodNode1] + ).asInstanceOf[asm.tree.MethodNode] // TODO param names: (m.params map (p => javaName(p.sym))) diff --git a/compiler/src/dotty/tools/backend/jvm/BytecodeWriters.scala b/compiler/src/dotty/tools/backend/jvm/BytecodeWriters.scala index 54183186dd2e..8a82b6dcc444 100644 --- a/compiler/src/dotty/tools/backend/jvm/BytecodeWriters.scala +++ b/compiler/src/dotty/tools/backend/jvm/BytecodeWriters.scala @@ -84,7 +84,7 @@ trait BytecodeWriters { private def emitAsmp(jclassBytes: Array[Byte], asmpFile: dotty.tools.io.File): Unit = { val pw = asmpFile.printWriter() try { - val cnode = new ClassNode1() + val cnode = new asm.tree.ClassNode() val cr = new asm.ClassReader(jclassBytes) cr.accept(cnode, 0) val trace = new scala.tools.asm.util.TraceClassVisitor(new java.io.PrintWriter(new java.io.StringWriter())) diff --git a/compiler/src/dotty/tools/backend/jvm/ClassNode1.java b/compiler/src/dotty/tools/backend/jvm/ClassNode1.java deleted file mode 100644 index c5594ae3dea6..000000000000 --- a/compiler/src/dotty/tools/backend/jvm/ClassNode1.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 dotty.tools.backend.jvm; - -import scala.tools.asm.MethodVisitor; -import scala.tools.asm.Opcodes; -import scala.tools.asm.tree.ClassNode; -import scala.tools.asm.tree.MethodNode; - -/** - * A subclass of {@link ClassNode} to customize the representation of - * label nodes with {@link LabelNode1}. - */ -public class ClassNode1 extends ClassNode { - public ClassNode1() { - this(Opcodes.ASM6); - } - - public ClassNode1(int api) { - super(api); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { - MethodNode method = new MethodNode1(access, name, descriptor, signature, exceptions); - methods.add(method); - return method; - } -} diff --git a/compiler/src/dotty/tools/backend/jvm/GenBCode.scala b/compiler/src/dotty/tools/backend/jvm/GenBCode.scala index 950478dcaabe..ed0e8b14be79 100644 --- a/compiler/src/dotty/tools/backend/jvm/GenBCode.scala +++ b/compiler/src/dotty/tools/backend/jvm/GenBCode.scala @@ -7,6 +7,7 @@ import dotty.tools.dotc.core.Phases.Phase import scala.collection.mutable import scala.collection.JavaConverters._ +import scala.tools.asm.CustomAttr import dotty.tools.dotc.transform.SymUtils._ import dotty.tools.dotc.interfaces import dotty.tools.dotc.util.SourceFile @@ -239,7 +240,7 @@ class GenBCodePipeline(val entryPoints: List[Symbol], val int: DottyBackendInter getFileForClassfile(outF, store.name, ".hasTasty") binary } - val dataAttr = createJAttribute(nme.TASTYATTR.mangledString, tasty, 0, tasty.length) + val dataAttr = new CustomAttr(nme.TASTYATTR.mangledString, tasty) store.visitAttribute(dataAttr) } diff --git a/compiler/src/dotty/tools/backend/jvm/LabelNode1.java b/compiler/src/dotty/tools/backend/jvm/LabelNode1.java deleted file mode 100644 index cf91fe619f5d..000000000000 --- a/compiler/src/dotty/tools/backend/jvm/LabelNode1.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 dotty.tools.backend.jvm; - -import scala.tools.asm.Label; -import scala.tools.asm.tree.ClassNode; -import scala.tools.asm.tree.LabelNode; - -/** - * A subclass of {@link LabelNode} to add user-definable flags. - */ -public class LabelNode1 extends LabelNode { - public LabelNode1() { - } - - public LabelNode1(Label label) { - super(label); - } - - public int flags; -} diff --git a/compiler/src/dotty/tools/backend/jvm/MethodNode1.java b/compiler/src/dotty/tools/backend/jvm/MethodNode1.java deleted file mode 100644 index bfa4401830ba..000000000000 --- a/compiler/src/dotty/tools/backend/jvm/MethodNode1.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 dotty.tools.backend.jvm; - -import scala.tools.asm.Label; -import scala.tools.asm.Opcodes; -import scala.tools.asm.tree.LabelNode; -import scala.tools.asm.tree.MethodNode; -/** - * A subclass of {@link MethodNode} to customize the representation of - * label nodes with {@link LabelNode1}. - */ -public class MethodNode1 extends MethodNode { - public MethodNode1(int api, int access, String name, String descriptor, String signature, String[] exceptions) { - super(api, access, name, descriptor, signature, exceptions); - } - - public MethodNode1(int access, String name, String descriptor, String signature, String[] exceptions) { - this(Opcodes.ASM6, access, name, descriptor, signature, exceptions); - } - - public MethodNode1(int api) { - super(api); - } - - public MethodNode1() { - this(Opcodes.ASM6); - } - - @Override - protected LabelNode getLabelNode(Label label) { - if (!(label.info instanceof LabelNode)) { - label.info = new LabelNode1(label); - } - return (LabelNode) label.info; - } -} diff --git a/project/Build.scala b/project/Build.scala index 58adf251b5d8..9e00ef8c9d2c 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -409,7 +409,7 @@ object Build { // get libraries onboard libraryDependencies ++= Seq( - "org.scala-lang.modules" % "scala-asm" % "7.0.0-scala-1", // used by the backend + "org.scala-lang.modules" % "scala-asm" % "6.0.0-scala-1", // used by the backend // FIXME: Not needed, but should be on the compiler CP ("org.scala-lang.modules" %% "scala-xml" % "1.1.0").withDottyCompat(scalaVersion.value), "org.scala-lang" % "scala-library" % scalacVersion % "test", diff --git a/semanticdb/src/dotty/semanticdb/SemanticdbConsumer.scala b/semanticdb/src/dotty/semanticdb/SemanticdbConsumer.scala index bfdac6b40c8a..91981fb6ed4c 100644 --- a/semanticdb/src/dotty/semanticdb/SemanticdbConsumer.scala +++ b/semanticdb/src/dotty/semanticdb/SemanticdbConsumer.scala @@ -756,7 +756,7 @@ class SemanticdbConsumer(sourceFilePath: java.nio.file.Path) extends TastyConsum override def traverseTree(tree: Tree)(implicit ctx: Context): Unit = { tree match { - case Import(path, selectors) => + case Import(_, path, selectors) => val key = (tree.symbol.trueName, tree.pos.start) if (!packageDefinitions(key)) { packageDefinitions += key