summaryrefslogtreecommitdiff
path: root/test/files
Commit message (Collapse)AuthorAgeFilesLines
* SI-7916: ScriptEngine supportSom Snytt2016-05-196-25/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Refactor the ScriptEngine support to an adaptor atop the IMain API. Allow references to resolve to context attributes. (The attributes must be defined at compilation time, though they may resolve to updated values at evaluation time.) This means that attributes are not bound statically in REPL history. In particular, we forgo the trick of binding attributes named "name: Type" as typed values. Instead, an `x` bound in dynamic context is injected into the script as a dynamic selection `$ctx.x` where `ctx` performs the look-up in the script context. When a compiled script is re-evaluated, a new instance of the script class is created and defined symbols are rebound. The context stdout writer is handled with `Console.withOut`, with bytes decoded using the default charset. Compilation errors are thrown as ScriptException with the first reported error. This commit doesn't attempt dynamic selection from objects in context. Currently, script must cast.
* Test case for SI-5183, tagged primitives in case classes (#5144)Ben Hutchison2016-05-192-0/+42
| | | Test for SI-7088, arrays containing tagged primitives
* Generate static forwarders for object members in companion interface (#5131)Jason Zaugg2016-05-193-0/+11
| | | | | | | | | | We used to disable generation of static forwarders when a object had a trait as a companion, as one could not add methods with bodies to an interface in JVM 6. The JVM lifted this restriction to support default methods in interfaces, so we can lift the restriction on static forwarders, too. Fixes https://github.com/scala/scala-dev/issues/59
* SI-8756 Fix generic signature for refinement of primitiveJason Zaugg2016-05-181-1/+1
| | | | | | | | | | | | Java generic signature generation was making the wrong assumption about how refinement types should erase to Java generics. This commit passes through the current value of `primitiveOk`, rather than forcing it to `true`. This flag is true when generating the signature for `f2`, but false in `i2` (as we are in a type argument position).
* SI-8756 Test to demonstrate the status quoJason Zaugg2016-05-182-0/+31
| | | | | | | | | Java generic signatures assume that refinement types should be boxed. Why did `g2` in the test seem to be immune to this bug demonstrated by `f2`? Because we opt to elide the generic signature altogether when no generics are involved.
* Merge pull request #5103 from ruippeixotog/improve-list-map-set-perfLukas Rytz2016-05-176-41/+11
|\ | | | | Improve performance and behavior of ListMap and ListSet
| * Add SerialVersionUID to ListSetRui Gonçalves2016-05-171-1/+3
| |
| * Make ListMap and ListSet implementations similarRui Gonçalves2016-05-172-4/+4
| | | | | | | | ListSet and ListMap are two collections which share the exact same internal structure. This commit makes the two approaches as similar as possible by renaming and reordering internal methods, improving their Scaladoc and their code style. The Scaladoc of the classes and companion objects is also improved in order to alert users of the time complexity of the collections' operations.
| * Improve performance and behavior of ListMap and ListSetRui Gonçalves2016-05-175-36/+4
| | | | | | | | | | | | | | | | Makes the immutable `ListMap` and `ListSet` collections more alike one another, both in their semantics and in their performance. In terms of semantics, makes the `ListSet` iterator return the elements in their insertion order, as `ListMap` already does. While, as mentioned in SI-8985, `ListMap` and `ListSet` doesn't seem to make any guarantees in terms of iteration order, I believe users expect `ListSet` and `ListMap` to behave in the same way, particularly when they are implemented in the exact same way. In terms of performance, `ListSet` has a custom builder that avoids creation in O(N^2) time. However, this significantly reduces its performance in the creation of small sets, as its requires the instantiation and usage of an auxilliary HashSet. As `ListMap` and `ListSet` are only suitable for small sizes do to their performance characteristics, the builder is removed, the default `SetBuilder` being used instead.
* | Merge remote-tracking branch 'origin/2.11.x' into ↵Jason Zaugg2016-05-174-4/+49
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | merge/2.11.x-to-2.12.x-20160517 Conflicts: build.sbt test/files/run/repl-javap-app.check test/files/run/repl-javap-app.scala
| * | SI-9740 Repl import fix -Yrepl-class-basedSom Snytt2016-05-026-73/+55
| | | | | | | | | | | | | | | | | | | | | Under `-Yrepl-class-based`, templating must follow the same scoping as under traditional object-based. The new test shows a typical case where two values of the same simple name must be imported in different scopes.
* | | Merge pull request #5146 from som-snytt/issue/9045-msgLukas Rytz2016-05-135-3/+18
|\ \ \ | | | | | | | | SI-9045 Error on recursive ctor
| * | | SI-9045 Error on recursive ctorSom Snytt2016-05-045-3/+18
| | | | | | | | | | | | | | | | If the constructor invokes itself, say so.
* | | | Add check to scala REPL package to improve feedback about implicits (#5159)Jens2016-05-134-0/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When the repl is started with additional compiler flags that prevent implicits being in scope (like -Yno-predef) the default message of implicits in scope using :implicits stays the same. This additional check will return the same message if predef is indeed in scope and an adjusted message if Predef is not in scope.
* | | | SI-9397 Add "_root_" to "GenUtils.scalaFactoryCall" to avoid the scala ↵Shixiong Zhu2016-05-111-0/+12
| | | | | | | | | | | | | | | | | | | | package name conflits (#5150) When a user imports some package ending with `scala`, the macro expansion of TypeTag may not work because it uses `scala.collection.immutable.List` but it's overrided. This patch adds the `_root_` prefix to avoid the scala package name conflits. Of cause, after this fix, importing a package ending with `_root_` has the same issue. However, people rarely do that.
* | | | SI-9666: Use inline group names in Regex (#4990)som-snytt2016-05-111-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Delegate `Match group name` to the underlying `matcher`. If that fails, try explicit group names as a fall back. No attempt is made to correlate inline and explicit names. In the following case, either name is accepted: ``` new Regex("a(?<Bar>b*)c", "Bee") ``` But if names are reversed, the error is undetected: ``` new Regex("a(?<Bee>b*)(?<Bar>c)", "Bar", "Bee") ``` Throw IllegalArg on bad group name to be consistent with Java.
* | | | Merge pull request #5112 from lrytz/dropRecursiveClasspathJason Zaugg2016-05-052-22/+5
|\ \ \ \ | |/ / / |/| | | Remove legacy recursive classpath implementation
| * | | Remove abstraction layer in classpath implementationLukas Rytz2016-05-022-2/+1
| | | |
| * | | remove recursive classpath implementationLukas Rytz2016-04-232-20/+4
| | | |
* | | | Emit a warning when a constant expression evaluates to an ↵Olli Helenius2016-05-023-0/+8
| |_|/ |/| | | | | | | | ArithmeticException (#5123)
* | | More efficient code for deciding if a mixin forwarder is needed (#5116)Lukas Rytz2016-04-254-0/+15
| | | | | | | | | | | | Also adds a warning on junit test methods that compile as default methods.
* | | Merge pull request #5115 from lrytz/merge-2.11-to-2.12-apr-22Lukas Rytz2016-04-254-0/+76
|\ \ \ | | | | | | | | Merge 2.11 to 2.12 apr 22
| * \ \ Merge commit '684c314' into merge-2.11-to-2.12-apr-22Lukas Rytz2016-04-224-0/+76
| |\ \ \ | | |/ / | |/| / | | |/
| | * SI-9734 Narrow type when import REPL history (#5084)som-snytt2016-04-202-0/+40
| | | | | | | | | | | | | | | Under `-Yrepl-class-based`, imports from historical `$read` instances must be singleton-typed so that path-dependent types remain so.
| | * SI-9735 REPL prefer standard escapes for code text (#5086)som-snytt2016-04-202-0/+36
| | | | | | | | | | | | | | | When constructing code text for compilation, the REPL should prefer standard escape sequences, in case unicode escapes are disabled.
| | * SI-9488 - adds the same default toString format to Scala Futures as 2.12.xViktor Klang2016-03-221-2/+18
| | | | | | | | | | | | Includes tests to verify the toString representations.
* | | Merge pull request #5109 from lrytz/pr5064Lukas Rytz2016-04-2322-45/+70
|\ \ \ | | | | | | | | SI-9684 Deprecate JavaConversions
| * | | Rename the (deprecated) implicit conversion methods in JavaConversionsLukas Rytz2016-04-222-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | Provide higher-priority implicit conversion methods whose names don't clash with methods in JavaConverters. This allows implicit conversions to work when importing both JavaConverters._ and JavaConversions._.
| * | | SI-9684 Deprecate JavaConversionsSom Snytt2016-04-2220-45/+49
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | Implicit conversions are now in package convert as ImplicitConversions, ImplicitConversionsToScala and ImplicitConversionsToJava. Deprecated WrapAsJava, WrapAsScala and the values in package object. Improve documentation.
* / / SI-9516 Fix the behavior of Int shift Long operations. (#5117)Sébastien Doeraene2016-04-231-0/+52
|/ / | | | | | | | | | | | | | | | | | | | | In any shift operation where the lhs is an Int (or smaller) and the rhs is a Long, the result kind must be Int, and not Long. This is important because the lhs must *not* be promoted to a Long, as that causes an opcode for long shift to be emitted. This uses an rhs modulo 64, instead of int shifts which use an rhs module 32. Instead, the rhs must be downgraded to an Int. The new behavior is consistent with the same operations in the Java programming language.
* | Merge pull request #5110 from sjrd/remove-duplicate-implem-of-hashcodesLukas Rytz2016-04-222-7/+6
|\ \ | | | | | | Remove the duplicate implem of hash codes for numbers.
| * | Remove the duplicate implem of hash codes for numbers.Sébastien Doeraene2016-04-212-7/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, there were two separate implementations of hash code for boxed number classes: * One in Statics, used by the codegen of case class methods. * One in ScalaRunTime + BoxesRunTime, used by everything else. This commit removes the variant implemented in ScalaRunTime + BoxesRunTime, and always uses Statics instead. We use Statics because the one from ScalaRunTime causes an unnecessary module load. The entry point ScalaRunTime.hash() is kept, as deprecated, for bootstrapping reasons.
* | | Merge pull request #5096 from lrytz/traitParentsLukas Rytz2016-04-2012-62/+50
|\ \ \ | |/ / |/| | Ensure ClassBTypes constructed from symbol and classfile are identical
| * | Clean up code gen for method invocationsLukas Rytz2016-04-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code was patched many times in the history and became a bit scattered. When emitting a virtual call, the receiver in the bytecode cannot just be the method's owner (the class in which it is declared), because that class may not be accessible at the callsite. Instead we use the type of the receiver. This was basically done to fix - aladdin bug 455 (9954eaf) - SI-1430 (0bea2ab) - basically the same bug, slightly different - SI-4283 (8707c9e) - the same for field reads In this patch we extend the fix to field writes, and clean up the code. This patch basically reverts 6eb55d4b, the fix for SI-4560, which was rather a workaround than a fix. The underlying problem was that in some cases, in a method invocation `foo.bar()`, the method `bar` was not actually a member of `foo.tpe`, causing a NoSuchMethodErrors. The issue was related to trait implementation classes. The idea of the fix was to check, at code-gen time, `foo.tpe.member("bar")`, and if that returns `NoSymbol`, use `barSym.owner`. With the new trait encoding the underlying problem seems to be fixed - all tests still pass (run/t4560.scala and run/t4560b.scala).
| * | Move test run/origins.scala to pendingLukas Rytz2016-04-123-28/+0
| | | | | | | | | | | | | | | | | | | | | | | | It tests an internal debugging tool which does not appear to work as intented. If anyone can compile and run that test and get an output that looks like the check file, I'd be interested to know. Origins does not seem to support the kind of stack traces that scalac currently emits.
| * | SD-98 don't emit unnecessary mixin forwardersLukas Rytz2016-04-128-33/+49
| | | | | | | | | | | | | | | | | | | | | | | | In most cases when a class inherits a concrete method from a trait we don't need to generate a forwarder to the default method in the class. t5148 is moved to pos as it compiles without error now. the error message ("missing or invalid dependency") is still tested by t6440b.
* | | Merge pull request #5098 from sjrd/simplify-scala-runtimeLukas Rytz2016-04-202-6/+3
|\ \ \ | | | | | | | | Simplify scala.runtime
| * | | Remove dead-code runtime hash() methods.Sébastien Doeraene2016-04-132-6/+3
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ScalaRunTime had a bunch of overloads of the `hash()` method, but only the `Any` version is ever used by the codegen. Worse, their implementation was not in sync with the actual implementations in BoxesRunTime, called by the `Any` version. For example, hash(0x80000000L) != hash(0x80000000L: Any) This commit simply removes all of this dead code. Similarly, we remove BoxesRunTime.hashFromObject(), which was never called either.
* / / SI-9749 REPL strip lead ws on dot continuation (#5097)som-snytt2016-04-152-0/+18
|/ / | | | | | | | | | | Permit leading whitespace before `.` for continued selection. This is just to handle pastes, which will typically include indented text, and not to make dot-continuation especially robust.
* | Remove references to trait impl classes, mostly in doc commentsLukas Rytz2016-04-072-1/+24
| |
* | Fix minor typoNafer Sanabria2016-04-041-1/+1
| |
* | Merge pull request #5068 from retronym/topic/jdk8ism2v2.12.0-M4Lukas Rytz2016-04-014-5/+22
|\ \ | | | | | | Accomodate and exploit new library, lang features JDK 8
| * | Java types and type parameters can be annotated since JSR 308Jason Zaugg2016-03-292-0/+10
| | |
| * | SI-7474 Record extra errors in Throwable#suppressedExceptionsJason Zaugg2016-03-292-5/+12
| | | | | | | | | | | | | | | | | | | | | ... in parallel collection operations. Followup to bcbe38d18, which did away with the the approach to use a composite exception when more than one error happened.
* | | Merge pull request #4971 from adriaanm/genbcode-delambdafyAdriaan Moors2016-03-3152-65/+353
|\ \ \ | | | | | | | | Unify treatment of built-in functions and SAMs
| * | | typedFunction undoes eta-expansion regardless of expected typeAdriaan Moors2016-03-301-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | When recovering missing argument types for an eta-expanded method value, rework the expected type to a method type.
| * | | Keep Function when CBN arg thunk targets a SAMAdriaan Moors2016-03-301-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The body of `def delay[T](v: => T) = (v _): F0[T]` becomes `() => v` during `typedEta`, and then uncurry considers whether to strip the function wrapper since `v` is known to be a `Function0` thunk. Stripping is sound when the expected type is `Function0` for this expression, but that's no longer a given, since we could be expecting any nullary SAM. Also sweep up a bit around `typedEta`. Encapsulate the, erm, creative encoding of `m _` as `Typed(m, Function(Nil, EmptyTree))`.
| * | | Bring back AbstractFunction parentAdriaan Moors2016-03-304-7/+5
| | | | | | | | | | | | | | | | | | | | Jason points out we still need it for bytecode efficiency, due to mixin forwarders.
| * | | Keep SAM body in anonfun method in enclosing classJason Zaugg2016-03-301-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than in implementation of the abstract method in the expanded anonymous class. This leads to more more efficient use of the constant pool, code shapes more amenable to SAM inlining, and is compatible with the old behaviour of `-Xexperimental` in Scala 2.11, which ScalaJS now relies upon. Manual test: ``` scala> :paste -raw // Entering paste mode (ctrl-D to finish) package p1; trait T { val x = 0; def apply(): Any }; class DelambdafyInline { def t: T = (() => "") } // Exiting paste mode, now interpreting. scala> :javap -c p1.DelambdafyInline Compiled from "<pastie>" public class p1.DelambdafyInline { public p1.T t(); Code: 0: new #10 // class p1/DelambdafyInline$$anonfun$t$1 3: dup 4: aload_0 5: invokespecial #16 // Method p1/DelambdafyInline$$anonfun$t$1."<init>":(Lp1/DelambdafyInline;)V 8: areturn public final java.lang.Object p1$DelambdafyInline$$$anonfun$1(); Code: 0: ldc #22 // String 2: areturn public p1.DelambdafyInline(); Code: 0: aload_0 1: invokespecial #25 // Method java/lang/Object."<init>":()V 4: return } scala> :javap -c p1.DelambdafyInline$$anonfun$t$1 Compiled from "<pastie>" public final class p1.DelambdafyInline$$anonfun$t$1 implements p1.T,scala.Serializable { public static final long serialVersionUID; public int x(); Code: 0: aload_0 1: getfield #25 // Field x:I 4: ireturn public void p1$T$_setter_$x_$eq(int); Code: 0: aload_0 1: iload_1 2: putfield #25 // Field x:I 5: return public final java.lang.Object apply(); Code: 0: aload_0 1: getfield #34 // Field $outer:Lp1/DelambdafyInline; 4: invokevirtual #37 // Method p1/DelambdafyInline.p1$DelambdafyInline$$$anonfun$1:()Ljava/lang/Object; 7: areturn public p1.DelambdafyInline$$anonfun$t$1(p1.DelambdafyInline); Code: 0: aload_1 1: ifnonnull 6 4: aconst_null 5: athrow 6: aload_0 7: aload_1 8: putfield #34 // Field $outer:Lp1/DelambdafyInline; 11: aload_0 12: invokespecial #42 // Method java/lang/Object."<init>":()V 15: aload_0 16: invokespecial #45 // Method p1/T.$init$:()V 19: return } scala> :quit ``` Adriaan is to `git blame` for `reflection-mem-typecheck.scala`.
| * | | LMF cannot instantiate SAM of trait with non-trait superclassAdriaan Moors2016-03-296-6/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also, drop AbstractFunction for parent of anonymous subclass of function type that must have its class spun up at compile time (rather than at linkage time by LambdaMetaFactory). This revealed an old problem with typedTemplate, in which parent types may be normalized at the level of trees, while this change does not get propagated to the class's info in time for the constructor to be located when we type check the primary constructor.