summaryrefslogtreecommitdiff
path: root/test/files/run
Commit message (Collapse)AuthorAgeFilesLines
* Emit trait method bodies in staticsJason Zaugg2016-06-287-15/+36
| | | | | | | | | | | | | | | | | | | | And use this as the target of the default methods or statically resolved super or $init calls. The call-site change is predicated on `-Yuse-trait-statics` as a stepping stone for experimentation / bootstrapping. I have performed this transformation in the backend, rather than trying to reflect this in the view from Scala symbols + ASTs. We also need to add an restriction related to invokespecial to Java parents: to support a super call to one of these to implement a super accessor, the interface must be listed as a direct parent of the class. The static method names has a trailing $ added to avoid duplicate name and signature errors in classfiles.
* Remove stray .class file from version controlJason Zaugg2016-06-281-0/+0
|
* Merge pull request #5099 from retronym/ticket/9390Jason Zaugg2016-06-067-7/+138
|\ | | | | SI-9390 Emit local defs that don't capture this as static
| * SI-9390 Avoid needless outer capture with local classesJason Zaugg2016-06-032-0/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An existing optimization in `Constructors` elides the outer field in member and local classes, if the class doesn't use the outer reference. (Member classes also need to be final, which is a secret handshake to say we're also happy to weaken prefix matching in the pattern matcher.) That optimization leaves the constructor signature as is: the constructor still accepts the outer instance, but does not store it. For member classes, this means that we can separately compile code that calls the constructor. Local classes need not be hampered by this constraint, we could remove the outer instance from the constructor call too. Why would we want to do this? Let's look at the case before and after this commit. Before: ``` class C extends Object { def foo(): Function1 = $anonfun(); final <static> <artifact> def $anonfun$foo$1($this: C, x: Object): Object = new <$anon: Object>($this); def <init>(): C = { C.super.<init>(); () } }; final class anon$1 extends Object { def <init>($outer: C): <$anon: Object> = { anon$1.super.<init>(); () } } ``` After: ``` class C extends Object { def foo(): Function1 = $anonfun(); final <static> <artifact> def $anonfun$foo$1(x: Object): Object = new <$anon: Object>(null); def <init>(): C = { C.super.<init>(); () } }; final class anon$1 extends Object { def <init>($outer: C): <$anon: Object> = { anon$1.super.<init>(); () } } ``` However, the status quo means that a lambda that This in turn makes lambdas that refer to such classes serializable even when the outer class is not itself serialiable. I have not attempted to extend this to calls to secondary constructors.
| * SI-9390 Emit local defs that don't capture this as staticJason Zaugg2016-06-015-7/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | This avoids unnecessary memory retention, and allows lambdas that call the local methods to be serializable, regardless of whether or not the enclosing class is serializable. The second point is especially pressing, given that the enclosing class for local methods defined in a used to be the (serializable) anonymous function class, but as of Scala 2.12 will be the enclosing class of the lambda. This change is similar in spirit to SI-9408 / 93bee55e.
* | Merge pull request #5157 from retronym/topic/lambda-staticsJason Zaugg2016-06-065-11/+11
|\| | | | | Lambda impl methods static and more stably named
| * Lambda impl methods static and more stably namedJason Zaugg2016-06-015-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The body of lambdas is compiled into a synthetic method in the enclosing class. Previously, this method was a public virtual method named `fully$qualified$Class$$anonfun$n`. For lambdas that didn't capture a `this` reference, a static method was used. This commit changes two aspects. Firstly, all lambda impl methods are now emitted static. An extra parameter is added to those that require a this reference. This is an improvement as it: - allows, shorter, more readable names for the lambda impl method - avoids pollution of the vtable of the class. Note that javac uses private instance methods, rather than public static methods. If we followed its lead, we would be unable to support important use cases in our inliner Secondly, the name of the enclosing method has been included in the name of the lambda impl method to improve debuggability and to improve serialization compatibility. The serialization improvement comes from the way that fresh names for the impl methods are allocated: adding or removing lambdas in methods not named "foo" won't change the numbering of the `anonfun$foo$n` impl methods from methods named "foo". This is in line with user expectations about anonymous class and lambda serialization stability. Brian Goetz has described this tricky area well in: http://cr.openjdk.java.net/~briangoetz/eg-attachments/lambda-serialization.html This commit doesn't go as far a Javac, we don't use the hash of the lambda type info, param names, etc to map to a lambda impl method name. As such, we are more prone to the type-1 and -2 failures described there. However, our Scala 2.11.8 has similar characteristics, so we aren't going backwards. Special case in the naming: Use "new" rather than "<init>" for constructor enclosed lambdas, as javac does. I have also changed the way that "delambdafy target" methods are identifed. Rather than relying on the naming convention, I have switched to using a symbol attachment. The assumption is that we only need to identify them from within the same compilation unit. This means we can distinguish impl metbods for expanded functions (ones called from an `apply` method of an ahead-of-time expanded anonfun class), from those that truly end up as targets for lambda metafactory. Only the latter are translated to static methods in this patch.
* | SI-9104 Autodetect raw pastageSom Snytt2016-06-028-3/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | If `-raw` is not supplied explicitly to REPL `:paste`, see if the code text starts with `package` keyword or else see if it parses to a named package (to cope with leading commentary). In that case, take it as raw. But parse only on suspect comment slash. It's only worth parsing for a package if there's a chance that package keyword is buried behind comments. Small refactors to the `paste` object.
* | Merge commit '90215ce' into merge-2.11-to-2.12-june-1Lukas Rytz2016-06-015-4/+35
|\ \
| * \ Merge pull request #4998 from som-snytt/issue/7898-iLukas Rytz2016-06-015-4/+35
| |\ \ | | | | | | | | SI-7898 Read user input during REPL warmup
| | * | SI-7898 Label for parsing -i sourcesLukas Rytz2016-05-243-0/+34
| | | | | | | | | | | | | | | | Text-based REPL pre-parses, so use the current label for errors.
| | * | SI-7898 Report paste errors improvedlySom Snytt2016-05-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use a "label" for errors, so that script names are shown. Position is still wrong for scripts in REPL. Initial scripts are run with `ILoop.echo` and results printing turned off, but reporter still enabled.
| | * | SI-7898 Read user input during REPL warmupSom Snytt2016-05-201-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The compiler is created on main thread and user input is read on an aux thread (opposite to currently). Fixes completion when `-i` is supplied. Now `-i` means pasted and new option `-I` means line-by-line. The temporary reader uses postInit to swap in the underlying reader. Completion is disabled for the temporary reader, rather than blocking while it waits for a compiler. But manically hitting tab is one way of knowing exactly when completion is live.
| * | | Merge pull request #4959 from rjolly/scripting15Stefan Zeiger2016-05-252-8/+4
| |\ \ \ | | | | | | | | | | Use jarlister in build
| | * | | Use jarlister in buildRaphael Jolly2016-05-212-8/+4
| | |/ / | | | | | | | | | | | | | | | | | | | | | | | | The goal of this change is to exercize the "manifest classpath" mechanism, meant to bring the compiler its needed classes as resources, listed in jar manifests, as opposed to files, thus enabling to use the compiler in sandboxed environments (and also the scripting engine for that matter).
* | | / Merge commit 'cba585d' into merge-2.11-to-2.12-june-1Lukas Rytz2016-06-019-0/+46
|\| | | | |_|/ |/| |
| * | SI-4625 Warn on first non-toplevel onlySom Snytt2016-05-171-0/+1
| | | | | | | | | | | | | | | | | | Fixed the warning when main module is accompanied by snippets. Minor clean-up so even I can follow what is returned.
| * | SI-4625 Warn when discarding script objectSom Snytt2016-05-173-0/+16
| | | | | | | | | | | | | | | | | | It's pretty confusing when your script object becomes a local and then nothing happens. Such as when you're writing a test and it takes forever to figure out what's going on.
| * | SI-4625 Permit arbitrary top-level in scriptSom Snytt2016-05-163-0/+16
| | | | | | | | | | | | | | | | | | | | | In an unwrapped script, where a `main` entry point is discovered in a top-level object, retain all top-level classes. Everything winds up in the default package.
| * | SI-4625 Recognize App in scriptSom Snytt2016-05-163-0/+13
| |/ | | | | | | | | | | | | | | | | Cheap name test: if the script object extends "App", take it for a main-bearing parent. Note that if `-Xscript` is not `Main`, the default, then the source is taken as a snippet and there is no attempt to locate an existing `main` method.
* | Merge pull request #5076 from soc/topic/deprecations-sinceLukas Rytz2016-05-3039-47/+47
|\ \ | | | | | | Improvements to deprecations related to `since` parameter
| * | Add since arg to deprecationWarning and use itSimon Ochsenreither2016-05-2935-38/+38
| | |
| * | Lower-case spelling of @deprecated messagesSimon Ochsenreither2016-05-281-4/+4
| | |
| * | SI-9084 Add `since` (if available) to deprecation warningsSimon Ochsenreither2016-05-285-9/+9
| | |
* | | Merge pull request #5191 from som-snytt/issue/9382Lukas Rytz2016-05-301-41/+0
|\ \ \ | |/ / |/| | SI-9382 Privatize enhanced x in Tuple2Zipped.Ops
| * | SI-9382 Zippy clean-up in aisle 2 & 3Som Snytt2016-05-261-41/+0
| | | | | | | | | | | | | | | Consolated JUnit tests and heeded comment about private def and code beauty.
* | | Merge pull request #5102 from milessabin/2.12.xJason Zaugg2016-05-274-1/+183
|\ \ \ | | | | | | | | SI-2712 Add support for partial unification of type constructors
| * | | -Xexperimental mode now only includes -Ypartial-unificationMiles Sabin2016-05-241-1/+1
| | | |
| * | | SI-2712 Add support for higher order unificationMiles Sabin2016-05-243-0/+182
| | | |
* | | | Merge pull request #5192 from dwijnand/wip/scala-repl-no-importsJason Zaugg2016-05-279-15/+567
|\ \ \ \ | | | | | | | | | | Fully qualify types in REPL generated code
| * | | | Fully qualify types in REPL generated codeDale Wijnand2016-05-269-15/+567
| | |/ / | |/| |
* / | | Rename -Yopt to -opt, -Yopt-warnings to -opt-warningsLukas Rytz2016-05-2533-33/+33
|/ / / | | | | | | | | | Keep -Yopt-inline-heuristics and -Yopt-trace unchanged
* | | Merge pull request #5175 from som-snytt/issue/9656-range-toStringStefan Zeiger2016-05-242-0/+57
|\ \ \ | |/ / |/| | SI-9656 Distinguish Numeric with step type
| * | SI-9656 Range.toString distinguishes Numeric stepSteve Robinson2016-05-192-0/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For Range and NumericRange, toString will indicate the step if it is not 1. Additionally, indicate empty ranges and ranges which are not "exact". For a "mapped" range, used by `Range.Double`, toString includes the underlying range and the simple type of the step (to distinguish Double from BigDecimal).
* | | Merge pull request #5153 from petermz/ticket/5463Lukas Rytz2016-05-231-0/+21
|\ \ \ | | | | | | | | SI-5463 Check .jars before using them
| * | | SI-5463 Check .jars before using thempeterz2016-05-171-0/+21
| | | | | | | | | | | | | | | | Make broken JAR files on compiler classpath cause a fatal error
* | | | 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.
* | | | 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-174-33/+3
|\ \ \ | |/ / |/| | Improve performance and behavior of ListMap and ListSet
| * | Add SerialVersionUID to ListSetRui Gonçalves2016-05-171-1/+3
| | |
| * | Improve performance and behavior of ListMap and ListSetRui Gonçalves2016-05-173-32/+0
| | | | | | | | | | | | | | | | | | | | | | | | 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-173-3/+48
|\ \ \ | | |/ | |/| | | | | | | | | | | | | | | | | | | 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-025-72/+54
| | | | | | | | | | | | | | | | | | | | | 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.
* | | 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-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
| | |