summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/benchmarking/AVL-insert-random.scala67
-rw-r--r--test/benchmarking/AVL-insert.scala67
-rw-r--r--test/benchmarking/ParCtrie-bfs.scala73
-rw-r--r--test/benchmarking/ParCtrie-map.scala21
-rw-r--r--test/benchmarking/ParCtrie-nums.scala39
-rw-r--r--test/benchmarking/ParCtrie-size.scala37
-rw-r--r--test/benchmarking/ParHashMap.scala33
-rw-r--r--test/benchmarking/ParVector-reduce.scala33
-rw-r--r--test/benchmarking/TreeSetInsert.scala70
-rw-r--r--test/benchmarking/TreeSetInsertRandom.scala65
-rw-r--r--test/benchmarking/TreeSetIterator.scala69
-rw-r--r--test/benchmarking/TreeSetRemove.scala69
-rw-r--r--test/benchmarking/TreeSetRemoveRandom.scala66
-rw-r--r--test/benchmarking/t6726-patmat-analysis.scala4005
-rwxr-xr-xtest/benchmarks/bench63
-rw-r--r--test/benchmarks/build.sbt4
-rw-r--r--test/benchmarks/lib/jsr166_and_extra.jar.desired.sha11
-rw-r--r--test/benchmarks/project/plugins.sbt2
-rw-r--r--test/benchmarks/source.list79
-rw-r--r--test/benchmarks/src/scala/collection/immutable/range-bench.scala61
-rw-r--r--test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala61
-rw-r--r--test/benchmarks/src/scala/collection/parallel/Benchmarking.scala223
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala126
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala63
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala22
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala68
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala75
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala39
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala38
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala83
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala64
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala362
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala144
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala232
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala66
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala54
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala31
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala51
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala57
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala87
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala180
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala162
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala13
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala66
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt58111
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala39
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala9
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala21
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala36
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala22
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala30
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala48
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala49
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala64
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala52
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala24
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala59
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala26
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala48
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala27
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala84
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala28
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala53
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala24
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala61
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala29
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala22
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala50
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala53
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala30
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala65
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala44
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala127
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala35
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala48
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala45
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala46
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala55
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala42
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala562
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala62
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala28
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala47
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala61
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala211
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala51
-rw-r--r--test/benchmarks/src/scala/util/HashSpeedTest.scala253
-rw-r--r--test/disabled/coder/Coder.scala2
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala4
-rw-r--r--test/disabled/presentation/akka/src/akka/actor/Scheduler.scala2
-rw-r--r--test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala2
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Iterators.scala2
-rw-r--r--test/disabled/presentation/akka/src/akka/routing/Listeners.scala2
-rw-r--r--test/disabled/run/applet-prop.scala2
-rw-r--r--test/disabled/run/indylambda-specialization.scala15
-rw-r--r--test/disabled/run/t7843-jsr223-service.check2
-rw-r--r--test/disabled/run/t7843-jsr223-service.scala6
-rw-r--r--test/disabled/run/t7933.check2
-rw-r--r--test/disabled/run/t7933.scala9
-rw-r--r--test/files/instrumented/InstrumentationTest.check6
-rw-r--r--test/files/instrumented/indy-symbol-literal.scala19
-rw-r--r--test/files/instrumented/inline-in-constructors.flags2
-rw-r--r--test/files/jvm/actor-exceptions.check1
-rw-r--r--test/files/jvm/actor-exceptions.scala67
-rw-r--r--test/files/jvm/actor-executor.check20
-rw-r--r--test/files/jvm/actor-executor.scala78
-rw-r--r--test/files/jvm/actor-executor2.check21
-rw-r--r--test/files/jvm/actor-executor2.scala92
-rw-r--r--test/files/jvm/actor-executor3.check20
-rw-r--r--test/files/jvm/actor-executor3.scala66
-rw-r--r--test/files/jvm/actor-getstate.check2
-rw-r--r--test/files/jvm/actor-getstate.scala87
-rw-r--r--test/files/jvm/actor-link-getstate.check2
-rw-r--r--test/files/jvm/actor-link-getstate.scala65
-rw-r--r--test/files/jvm/actor-looping.check5
-rw-r--r--test/files/jvm/actor-looping.scala33
-rw-r--r--test/files/jvm/actor-normal-exit.check2
-rw-r--r--test/files/jvm/actor-normal-exit.scala38
-rw-r--r--test/files/jvm/actor-receivewithin.check16
-rw-r--r--test/files/jvm/actor-receivewithin.scala72
-rw-r--r--test/files/jvm/actor-sync-send-timeout.scala48
-rw-r--r--test/files/jvm/actor-termination.check2
-rw-r--r--test/files/jvm/actor-termination.scala19
-rw-r--r--test/files/jvm/actor-uncaught-exception.check2
-rw-r--r--test/files/jvm/actor-uncaught-exception.scala64
-rw-r--r--test/files/jvm/actor-uncaught-exception2.check2
-rw-r--r--test/files/jvm/actor-uncaught-exception2.scala63
-rw-r--r--test/files/jvm/annotations.check3
-rw-r--r--test/files/jvm/annotations.flags1
-rw-r--r--test/files/jvm/bytecode-test-example.flags1
-rw-r--r--test/files/jvm/bytecode-test-example/Foo_1.flags1
-rw-r--r--test/files/jvm/constant-optimization/Foo_1.flags1
-rw-r--r--test/files/jvm/daemon-actor-termination.check2
-rw-r--r--test/files/jvm/daemon-actor-termination.scala40
-rw-r--r--test/files/jvm/future-alarm.check20
-rw-r--r--test/files/jvm/future-alarm.scala23
-rw-r--r--test/files/jvm/future-awaitall-zero.check1
-rw-r--r--test/files/jvm/future-awaitall-zero.scala24
-rw-r--r--test/files/jvm/future-spec.check4
-rw-r--r--test/files/jvm/future-spec/FutureTests.scala295
-rw-r--r--test/files/jvm/future-termination.check1
-rw-r--r--test/files/jvm/future-termination.scala21
-rw-r--r--test/files/jvm/innerClassAttribute.check54
-rw-r--r--test/files/jvm/innerClassAttribute/Classes_1.scala101
-rw-r--r--test/files/jvm/innerClassAttribute/Test.scala223
-rw-r--r--test/files/jvm/interpreter.check4
-rw-r--r--test/files/jvm/javaReflection.check99
-rw-r--r--test/files/jvm/nooptimise/Foo_1.flags1
-rw-r--r--test/files/jvm/nooptimise/Foo_1.scala8
-rw-r--r--test/files/jvm/nooptimise/Test.scala23
-rw-r--r--test/files/jvm/patmat_opt_ignore_underscore.check1
-rw-r--r--test/files/jvm/patmat_opt_ignore_underscore.flags1
-rw-r--r--test/files/jvm/patmat_opt_ignore_underscore/Analyzed_1.scala29
-rw-r--r--test/files/jvm/patmat_opt_ignore_underscore/test.scala15
-rw-r--r--test/files/jvm/patmat_opt_no_nullcheck.check1
-rw-r--r--test/files/jvm/patmat_opt_no_nullcheck.flags1
-rw-r--r--test/files/jvm/patmat_opt_no_nullcheck/Analyzed_1.scala24
-rw-r--r--test/files/jvm/patmat_opt_no_nullcheck/test.scala8
-rw-r--r--test/files/jvm/patmat_opt_primitive_typetest.check1
-rw-r--r--test/files/jvm/patmat_opt_primitive_typetest.flags1
-rw-r--r--test/files/jvm/patmat_opt_primitive_typetest/Analyzed_1.scala24
-rw-r--r--test/files/jvm/patmat_opt_primitive_typetest/test.scala8
-rw-r--r--test/files/jvm/reactor-exceptionOnSend.check2
-rw-r--r--test/files/jvm/reactor-exceptionOnSend.scala58
-rw-r--r--test/files/jvm/reactor-producer-consumer.check10
-rw-r--r--test/files/jvm/reactor-producer-consumer.scala97
-rw-r--r--test/files/jvm/reactor.check22
-rw-r--r--test/files/jvm/reactor.scala72
-rw-r--r--test/files/jvm/replyablereactor.check5
-rw-r--r--test/files/jvm/replyablereactor.scala59
-rw-r--r--test/files/jvm/replyablereactor2.check5
-rw-r--r--test/files/jvm/replyablereactor2.scala58
-rw-r--r--test/files/jvm/replyablereactor3.check5
-rw-r--r--test/files/jvm/replyablereactor3.scala57
-rw-r--r--test/files/jvm/replyablereactor4.check5
-rw-r--r--test/files/jvm/replyablereactor4.scala57
-rw-r--r--test/files/jvm/replyreactor-react-sender.check1
-rw-r--r--test/files/jvm/replyreactor-react-sender.scala53
-rw-r--r--test/files/jvm/replyreactor.check1
-rw-r--r--test/files/jvm/replyreactor.scala43
-rw-r--r--test/files/jvm/scala-concurrent-tck.check1
-rw-r--r--test/files/jvm/scala-concurrent-tck.scala157
-rw-r--r--test/files/jvm/scheduler-adapter.check6
-rw-r--r--test/files/jvm/scheduler-adapter.scala54
-rw-r--r--test/files/jvm/serialization-new.check20
-rw-r--r--test/files/jvm/serialization.check20
-rw-r--r--test/files/jvm/t1449.scala28
-rw-r--r--test/files/jvm/t1948.scala26
-rw-r--r--test/files/jvm/t2359.check5
-rw-r--r--test/files/jvm/t2359.scala48
-rw-r--r--test/files/jvm/t2530.check21
-rw-r--r--test/files/jvm/t2530.scala98
-rw-r--r--test/files/jvm/t3102.check2
-rw-r--r--test/files/jvm/t3102.scala39
-rw-r--r--test/files/jvm/t3356.check3
-rw-r--r--test/files/jvm/t3356.scala58
-rw-r--r--test/files/jvm/t3365.check5
-rw-r--r--test/files/jvm/t3365.scala68
-rw-r--r--test/files/jvm/t3407.check10
-rw-r--r--test/files/jvm/t3407.scala21
-rw-r--r--test/files/jvm/t3412-channel.check10
-rw-r--r--test/files/jvm/t3412-channel.scala40
-rw-r--r--test/files/jvm/t3412.check10
-rw-r--r--test/files/jvm/t3412.scala34
-rw-r--r--test/files/jvm/t3470.check3
-rw-r--r--test/files/jvm/t3470.scala32
-rw-r--r--test/files/jvm/t3838.check1
-rw-r--r--test/files/jvm/t3838.scala17
-rw-r--r--test/files/jvm/t6941.check1
-rw-r--r--test/files/jvm/t6941.flags1
-rw-r--r--test/files/jvm/t6941/Analyzed_1.flags1
-rw-r--r--test/files/jvm/t6941/Analyzed_1.scala11
-rw-r--r--test/files/jvm/t6941/test.scala15
-rw-r--r--test/files/jvm/t7006.check29
-rw-r--r--test/files/jvm/t7006/Foo_1.flags1
-rw-r--r--test/files/jvm/t7006/Foo_1.scala10
-rw-r--r--test/files/jvm/t7006/Test.scala19
-rw-r--r--test/files/jvm/t7146.check7
-rw-r--r--test/files/jvm/t7146.scala28
-rw-r--r--test/files/jvm/t8582.check3
-rw-r--r--test/files/jvm/t8582.flags1
-rw-r--r--test/files/jvm/t8786-sig.scala116
-rw-r--r--test/files/jvm/t8786/A_1.scala3
-rw-r--r--test/files/jvm/t8786/B_2.java22
-rw-r--r--test/files/jvm/t8786/Test_2.scala3
-rw-r--r--test/files/jvm/t9105.check14
-rw-r--r--test/files/jvm/try-type-tests.scala43
-rw-r--r--test/files/jvm/unreachable.check (renamed from test/files/run/repl-javap-app.check)0
-rw-r--r--test/files/jvm/unreachable/Foo_1.flags2
-rw-r--r--test/files/jvm/varargs/JavaClass.java26
-rw-r--r--test/files/jvm/varargs/VaClass.scala9
-rw-r--r--test/files/jvm/varargs/varargs.scala16
-rw-r--r--test/files/neg/anytrait.check5
-rw-r--r--test/files/neg/beanInfoDeprecation.check6
-rw-r--r--test/files/neg/beanInfoDeprecation.flags1
-rw-r--r--test/files/neg/beanInfoDeprecation.scala2
-rw-r--r--test/files/neg/case-collision.check6
-rw-r--r--test/files/neg/case-collision.flags2
-rw-r--r--test/files/neg/case-collision2.flags2
-rw-r--r--test/files/neg/checksensible.check2
-rw-r--r--test/files/neg/choices.check3
-rw-r--r--test/files/neg/classmanifests_new_deprecations.check16
-rw-r--r--test/files/neg/compile-time-only-a.check8
-rw-r--r--test/files/neg/constrs.check2
-rw-r--r--test/files/neg/delayed-init-ref.check3
-rw-r--r--test/files/neg/deprecated-target.check4
-rw-r--r--test/files/neg/deprecated-target.flags1
-rw-r--r--test/files/neg/deprecated-target.scala1
-rw-r--r--test/files/neg/eta-expand-star.check4
-rw-r--r--test/files/neg/hkgadt.check31
-rw-r--r--test/files/neg/hkgadt.scala35
-rw-r--r--test/files/neg/implicit-ambiguous-2.check4
-rw-r--r--test/files/neg/implicit-ambiguous-2.scala11
-rw-r--r--test/files/neg/implicit-ambiguous-invalid.check7
-rw-r--r--test/files/neg/implicit-ambiguous-invalid.flags (renamed from test/files/neg/t6375.flags)0
-rw-r--r--test/files/neg/implicit-ambiguous-invalid.scala6
-rw-r--r--test/files/neg/implicit-ambiguous.check4
-rw-r--r--test/files/neg/implicit-ambiguous.scala11
-rw-r--r--test/files/neg/inlineIndyLambdaPrivate.check16
-rw-r--r--test/files/neg/inlineIndyLambdaPrivate.flags1
-rw-r--r--test/files/neg/inlineIndyLambdaPrivate/A_1.java9
-rw-r--r--test/files/neg/inlineIndyLambdaPrivate/Test_2.scala3
-rw-r--r--test/files/neg/inlineMaxSize.flags2
-rw-r--r--test/files/neg/logImplicits.check4
-rw-r--r--test/files/neg/lub-from-hell-2.check7
-rw-r--r--test/files/neg/lub-from-hell-2.scala13
-rw-r--r--test/files/neg/macro-invalidret.check2
-rw-r--r--test/files/neg/macro-invalidusage-badargs.check4
-rw-r--r--test/files/neg/missing-arg-list.check7
-rw-r--r--test/files/neg/missing-arg-list.scala3
-rw-r--r--test/files/neg/multi-array.check4
-rw-r--r--test/files/neg/names-defaults-neg-warn.check4
-rw-r--r--test/files/neg/names-defaults-neg.check58
-rw-r--r--test/files/neg/names-defaults-neg.scala4
-rw-r--r--test/files/neg/optimiseDeprecated.check4
-rw-r--r--test/files/neg/optimiseDeprecated.flags1
-rw-r--r--test/files/neg/optimiseDeprecated.scala1
-rw-r--r--test/files/neg/outer-ref-checks.check24
-rw-r--r--test/files/neg/outer-ref-checks.flags1
-rw-r--r--test/files/neg/outer-ref-checks.scala106
-rw-r--r--test/files/neg/overloaded-unapply.check4
-rw-r--r--test/files/neg/override-object-no.check10
-rw-r--r--test/files/neg/override-object-no.scala11
-rw-r--r--test/files/neg/partestInvalidFlag.check4
-rw-r--r--test/files/neg/partestInvalidFlag.flags2
-rw-r--r--test/files/neg/protected-constructors.check21
-rw-r--r--test/files/neg/sabin2.check2
-rw-r--r--test/files/neg/saferJavaConversions.scala6
-rw-r--r--test/files/neg/sammy_disabled.check4
-rw-r--r--test/files/neg/sammy_disabled.flags1
-rw-r--r--test/files/neg/sammy_disabled.scala3
-rw-r--r--test/files/neg/sammy_error.check4
-rw-r--r--test/files/neg/sammy_error.scala7
-rw-r--r--test/files/neg/sammy_error_exist_no_crash.check4
-rw-r--r--test/files/neg/sammy_error_exist_no_crash.flags1
-rw-r--r--test/files/neg/sammy_error_exist_no_crash.scala4
-rw-r--r--test/files/neg/sammy_expected.check6
-rw-r--r--test/files/neg/sammy_expected.scala5
-rw-r--r--test/files/neg/sammy_overload.check7
-rw-r--r--test/files/neg/sammy_overload.scala15
-rw-r--r--test/files/neg/sammy_restrictions.check47
-rw-r--r--test/files/neg/sammy_restrictions.scala26
-rw-r--r--test/files/neg/scopes.check2
-rw-r--r--test/files/neg/sd128.check17
-rw-r--r--test/files/neg/sd128/A.java3
-rw-r--r--test/files/neg/sd128/Test.scala19
-rw-r--r--test/files/neg/sealed-final-neg.check11
-rw-r--r--test/files/neg/sealed-final-neg.flags2
-rw-r--r--test/files/neg/sealed-final-neg.scala2
-rw-r--r--test/files/neg/stmt-expr-discard.check4
-rw-r--r--test/files/neg/t0764.check2
-rw-r--r--test/files/neg/t1112.check4
-rw-r--r--test/files/neg/t1181.check6
-rw-r--r--test/files/neg/t1523.check4
-rw-r--r--test/files/neg/t1838.check6
-rw-r--r--test/files/neg/t1960.check11
-rw-r--r--test/files/neg/t1960.scala7
-rw-r--r--test/files/neg/t200.check4
-rw-r--r--test/files/neg/t2712-1.check13
-rw-r--r--test/files/neg/t2712-1.scala8
-rw-r--r--test/files/neg/t2712-2.check13
-rw-r--r--test/files/neg/t2712-2.flags1
-rw-r--r--test/files/neg/t2712-2.scala18
-rw-r--r--test/files/neg/t2712-3.check6
-rw-r--r--test/files/neg/t2712-3.scala18
-rw-r--r--test/files/neg/t2712.flags1
-rw-r--r--test/files/neg/t2779.check4
-rw-r--r--test/files/neg/t278.check4
-rw-r--r--test/files/neg/t3234.check6
-rw-r--r--test/files/neg/t3234.flags1
-rw-r--r--test/files/neg/t3871.check2
-rw-r--r--test/files/neg/t4158.check6
-rw-r--r--test/files/neg/t4425.flags1
-rw-r--r--test/files/neg/t4460a.check2
-rw-r--r--test/files/neg/t4460b.check2
-rw-r--r--test/files/neg/t4541.check2
-rw-r--r--test/files/neg/t4541b.check2
-rw-r--r--test/files/neg/t4851.check12
-rw-r--r--test/files/neg/t5148.check7
-rw-r--r--test/files/neg/t5429.check2
-rw-r--r--test/files/neg/t5580b.scala2
-rw-r--r--test/files/neg/t5639b.flags1
-rw-r--r--test/files/neg/t5761.check2
-rw-r--r--test/files/neg/t591.check4
-rw-r--r--test/files/neg/t591.scala3
-rw-r--r--test/files/neg/t6120.check4
-rw-r--r--test/files/neg/t6162-inheritance.check2
-rw-r--r--test/files/neg/t6162-overriding.check2
-rw-r--r--test/files/neg/t6214.check7
-rw-r--r--test/files/neg/t6289.check6
-rw-r--r--test/files/neg/t6323a.check6
-rw-r--r--test/files/neg/t6335.check8
-rw-r--r--test/files/neg/t6406-regextract.check2
-rw-r--r--test/files/neg/t6446-additional.check30
-rw-r--r--test/files/neg/t6446-missing.check27
-rw-r--r--test/files/neg/t6446-show-phases.check27
-rw-r--r--test/files/neg/t6455.flags1
-rw-r--r--test/files/neg/t6455.scala4
-rw-r--r--test/files/neg/t6666.check4
-rw-r--r--test/files/neg/t6810.check28
-rw-r--r--test/files/neg/t6810.scala26
-rw-r--r--test/files/neg/t6829.check12
-rw-r--r--test/files/neg/t6920.check4
-rw-r--r--test/files/neg/t7046-2.check3
-rw-r--r--test/files/neg/t7046-2/Macros_1.scala15
-rw-r--r--test/files/neg/t7046-2/Test_2.scala14
-rw-r--r--test/files/neg/t7046.check3
-rw-r--r--test/files/neg/t7046/Macros_1.scala15
-rw-r--r--test/files/neg/t7046/Test_2.scala35
-rw-r--r--test/files/neg/t712.check3
-rw-r--r--test/files/neg/t7157.check48
-rw-r--r--test/files/neg/t7171.check5
-rw-r--r--test/files/neg/t7171b.check8
-rw-r--r--test/files/neg/t7187.check6
-rw-r--r--test/files/neg/t7187.flags1
-rw-r--r--test/files/neg/t7187.scala6
-rw-r--r--test/files/neg/t7294.check6
-rw-r--r--test/files/neg/t7294.flags1
-rw-r--r--test/files/neg/t7294b.check4
-rw-r--r--test/files/neg/t7294b.flags1
-rw-r--r--test/files/neg/t7494-no-options.check30
-rw-r--r--test/files/neg/t7602.check4
-rw-r--r--test/files/neg/t7622-cyclic-dependency.check2
-rw-r--r--test/files/neg/t7622-cyclic-dependency/ThePlugin.scala2
-rw-r--r--test/files/neg/t7848-interp-warn.check28
-rw-r--r--test/files/neg/t7848-interp-warn.scala29
-rw-r--r--test/files/neg/t800.check12
-rw-r--r--test/files/neg/t8006.check4
-rw-r--r--test/files/neg/t8035-deprecated.check6
-rw-r--r--test/files/neg/t8035-no-adapted-args.check4
-rw-r--r--test/files/neg/t8044-b.check4
-rw-r--r--test/files/neg/t8044-b.scala4
-rw-r--r--test/files/neg/t8044.check4
-rw-r--r--test/files/neg/t8044.scala4
-rw-r--r--test/files/neg/t8079a.check4
-rw-r--r--test/files/neg/t8079a.scala4
-rw-r--r--test/files/neg/t8217-local-alias-requires-rhs.check6
-rw-r--r--test/files/neg/t8667.check91
-rw-r--r--test/files/neg/t8667.scala37
-rw-r--r--test/files/neg/t8685.check45
-rw-r--r--test/files/neg/t8685.flags1
-rw-r--r--test/files/neg/t8685.scala54
-rw-r--r--test/files/neg/t8700a.check11
-rw-r--r--test/files/neg/t8700a.flags1
-rw-r--r--test/files/neg/t8700a/Bar.scala9
-rw-r--r--test/files/neg/t8700a/Baz.java11
-rw-r--r--test/files/neg/t8700a/Foo.java4
-rw-r--r--test/files/neg/t8700b.check11
-rw-r--r--test/files/neg/t8700b.flags1
-rw-r--r--test/files/neg/t8700b/Bar_2.scala9
-rw-r--r--test/files/neg/t8700b/Baz_1.java11
-rw-r--r--test/files/neg/t8700b/Foo_1.java4
-rw-r--r--test/files/neg/t876.check4
-rw-r--r--test/files/neg/t8764.check6
-rw-r--r--test/files/neg/t8764.scala9
-rw-r--r--test/files/neg/t8849.check7
-rw-r--r--test/files/neg/t8849.scala10
-rw-r--r--test/files/neg/t9045.check7
-rw-r--r--test/files/neg/t9045.scala8
-rw-r--r--test/files/neg/t9361.check11
-rw-r--r--test/files/neg/t9361.scala5
-rw-r--r--test/files/neg/t9382.check10
-rw-r--r--test/files/neg/t9382.scala6
-rw-r--r--test/files/neg/t9398.check7
-rw-r--r--test/files/neg/t9398.flags1
-rw-r--r--test/files/neg/t9398/data.scala5
-rw-r--r--test/files/neg/t9398/match.scala6
-rw-r--r--test/files/neg/t9527a.check7
-rw-r--r--test/files/neg/t9527a.scala8
-rw-r--r--test/files/neg/t9527b.check4
-rw-r--r--test/files/neg/t9527b.scala9
-rw-r--r--test/files/neg/t9535.check7
-rw-r--r--test/files/neg/t9535.scala7
-rw-r--r--test/files/neg/t9629.check17
-rw-r--r--test/files/neg/t9629.scala12
-rw-r--r--test/files/neg/t963.check10
-rw-r--r--test/files/neg/t9684.check9
-rw-r--r--test/files/neg/t9684.flags1
-rw-r--r--test/files/neg/t9684.scala9
-rw-r--r--test/files/neg/t9684b.check7
-rw-r--r--test/files/neg/t9684b.scala14
-rw-r--r--test/files/neg/t9781.check4
-rw-r--r--test/files/neg/t9781.scala4
-rw-r--r--test/files/neg/t9847.check45
-rw-r--r--test/files/neg/t9847.flags1
-rw-r--r--test/files/neg/t9847.scala23
-rw-r--r--test/files/neg/t9849.check7
-rw-r--r--test/files/neg/t9849.scala16
-rw-r--r--test/files/neg/trait-defaults-super.check4
-rw-r--r--test/files/neg/trait-defaults-super.scala21
-rw-r--r--test/files/neg/trait-no-native.check4
-rw-r--r--test/files/neg/trait-no-native.scala4
-rw-r--r--test/files/neg/trait_fields_conflicts.check273
-rw-r--r--test/files/neg/trait_fields_conflicts.scala87
-rw-r--r--test/files/neg/trait_fields_deprecated_overriding.check6
-rw-r--r--test/files/neg/trait_fields_deprecated_overriding.flags1
-rw-r--r--test/files/neg/trait_fields_deprecated_overriding.scala11
-rw-r--r--test/files/neg/trait_fields_var_override.check5
-rw-r--r--test/files/neg/trait_fields_var_override.scala2
-rw-r--r--test/files/neg/unit-returns-value.check6
-rw-r--r--test/files/neg/val_infer.check6
-rw-r--r--test/files/neg/val_infer.scala4
-rw-r--r--test/files/neg/val_sig_infer_match.check4
-rw-r--r--test/files/neg/val_sig_infer_match.scala22
-rw-r--r--test/files/neg/val_sig_infer_struct.check4
-rw-r--r--test/files/neg/val_sig_infer_struct.scala8
-rw-r--r--test/files/neg/variances.check2
-rw-r--r--test/files/neg/warn-unused-privates.check7
-rw-r--r--test/files/pos/MailBox.scala2
-rw-r--r--test/files/pos/SI-7060.flags1
-rw-r--r--test/files/pos/SI-7060.scala11
-rw-r--r--test/files/pos/alladin763.scala37
-rw-r--r--test/files/pos/arrays2.scala2
-rw-r--r--test/files/pos/constant-warning.check4
-rw-r--r--test/files/pos/constant-warning.flags1
-rw-r--r--test/files/pos/constant-warning.scala3
-rw-r--r--test/files/pos/fields_widen_trait_var.scala4
-rw-r--r--test/files/pos/fun_undo_eta.scala10
-rw-r--r--test/files/pos/functions.scala4
-rw-r--r--test/files/pos/hkgadt.scala27
-rw-r--r--test/files/pos/infer_override_def_args.flags (renamed from test/files/presentation/t4287c.flags)0
-rw-r--r--test/files/pos/infer_override_def_args.scala5
-rw-r--r--test/files/pos/inline-access-levels.flags2
-rw-r--r--test/files/pos/inliner2.flags1
-rw-r--r--test/files/pos/inliner2.scala57
-rw-r--r--test/files/pos/issue244.scala2
-rw-r--r--test/files/pos/java-type-annotations/NotNull.java6
-rw-r--r--test/files/pos/java-type-annotations/Test.java4
-rw-r--r--test/files/pos/javaConversions-2.10-ambiguity.scala4
-rw-r--r--test/files/pos/javaConversions-2.10-regression.scala6
-rw-r--r--test/files/pos/list-optim-check.flags1
-rw-r--r--test/files/pos/list-optim-check.scala21
-rw-r--r--test/files/pos/lub-from-hell.scala6
-rw-r--r--test/files/pos/native-warning.scala4
-rw-r--r--test/files/pos/overloaded_ho_fun.scala51
-rw-r--r--test/files/pos/sammy_ctor_arg.scala4
-rw-r--r--test/files/pos/sammy_exist.flags1
-rw-r--r--test/files/pos/sammy_extends_function.scala4
-rw-r--r--test/files/pos/sammy_implicit.scala11
-rw-r--r--test/files/pos/sammy_infer_argtype_subtypes.scala6
-rw-r--r--test/files/pos/sammy_inferargs.scala6
-rw-r--r--test/files/pos/sammy_overload.flags1
-rw-r--r--test/files/pos/sammy_overload.scala27
-rw-r--r--test/files/pos/sammy_override.flags1
-rw-r--r--test/files/pos/sammy_poly.flags1
-rw-r--r--test/files/pos/sammy_poly.scala13
-rw-r--r--test/files/pos/sammy_scope.flags1
-rw-r--r--test/files/pos/sammy_scope.scala4
-rw-r--r--test/files/pos/sammy_single.flags1
-rw-r--r--test/files/pos/sammy_twice.flags1
-rw-r--r--test/files/pos/sd219.scala11
-rw-r--r--test/files/pos/sealed-final.flags1
-rw-r--r--test/files/pos/sealed-final.scala14
-rw-r--r--test/files/pos/shapeless-regression.scala16
-rw-r--r--test/files/pos/t2171.flags1
-rw-r--r--test/files/pos/t2171.scala7
-rw-r--r--test/files/pos/t2293.scala4
-rw-r--r--test/files/pos/t2377b/Q.java13
-rw-r--r--test/files/pos/t2377b/a.scala5
-rw-r--r--test/files/pos/t2712-1.flags1
-rw-r--r--test/files/pos/t2712-1.scala9
-rw-r--r--test/files/pos/t2712-2.flags2
-rw-r--r--test/files/pos/t2712-2.scala25
-rw-r--r--test/files/pos/t2712-3.flags2
-rw-r--r--test/files/pos/t2712-3.scala24
-rw-r--r--test/files/pos/t2712-4.flags2
-rw-r--r--test/files/pos/t2712-4.scala17
-rw-r--r--test/files/pos/t2712-5.flags1
-rw-r--r--test/files/pos/t2712-5.scala29
-rw-r--r--test/files/pos/t2712-6.flags1
-rw-r--r--test/files/pos/t2712-6.scala12
-rw-r--r--test/files/pos/t2712-7.flags1
-rw-r--r--test/files/pos/t2712-7.scala15
-rw-r--r--test/files/pos/t2956/t2956.scala4
-rw-r--r--test/files/pos/t3234.flags1
-rw-r--r--test/files/pos/t3234.scala (renamed from test/files/neg/t3234.scala)10
-rw-r--r--test/files/pos/t3252.flags1
-rw-r--r--test/files/pos/t3252.scala15
-rw-r--r--test/files/pos/t3420.flags2
-rw-r--r--test/files/pos/t3430.flags1
-rw-r--r--test/files/pos/t3430.scala13
-rw-r--r--test/files/pos/t3688.scala4
-rw-r--r--test/files/pos/t4365/a_1.scala2
-rw-r--r--test/files/pos/t4365/b_1.scala2
-rw-r--r--test/files/pos/t4579.flags1
-rw-r--r--test/files/pos/t482.scala7
-rw-r--r--test/files/pos/t4840.flags2
-rw-r--r--test/files/pos/t4914.scala20
-rw-r--r--test/files/pos/t5183.scala34
-rw-r--r--test/files/pos/t5240.scala8
-rw-r--r--test/files/pos/t5294b.scala36
-rw-r--r--test/files/pos/t5294c.scala30
-rw-r--r--test/files/pos/t533.scala11
-rw-r--r--test/files/pos/t5644/BoxesRunTime.java4
-rw-r--r--test/files/pos/t5683.flags1
-rw-r--r--test/files/pos/t5683.scala23
-rw-r--r--test/files/pos/t5899.scala1
-rw-r--r--test/files/pos/t6157.flags1
-rw-r--r--test/files/pos/t6157.scala25
-rw-r--r--test/files/pos/t6161b.scala (renamed from test/pending/pos/t6161.scala)0
-rw-r--r--test/files/pos/t6547.flags1
-rw-r--r--test/files/pos/t6547.scala6
-rw-r--r--test/files/pos/t6778.scala5
-rw-r--r--test/files/pos/t6895b.flags2
-rw-r--r--test/files/pos/t6895b.scala39
-rw-r--r--test/files/pos/t7046-2/Macros_1.scala14
-rw-r--r--test/files/pos/t7046-2/Test_2.scala9
-rw-r--r--test/files/pos/t7088.scala8
-rw-r--r--test/files/pos/t7239.scala38
-rw-r--r--test/files/pos/t7294.scala6
-rw-r--r--test/files/pos/t7784.scala13
-rw-r--r--test/files/pos/t8044.scala15
-rw-r--r--test/files/pos/t8062.flags1
-rw-r--r--test/files/pos/t8062/A_1.scala5
-rw-r--r--test/files/pos/t8062/B_2.scala3
-rw-r--r--test/files/pos/t8079b.scala7
-rw-r--r--test/files/pos/t8306.flags1
-rw-r--r--test/files/pos/t8306.scala8
-rw-r--r--test/files/pos/t8310.flags1
-rw-r--r--test/files/pos/t8315.flags1
-rw-r--r--test/files/pos/t8315.scala12
-rw-r--r--test/files/pos/t8315b.flags1
-rw-r--r--test/files/pos/t8315b.scala11
-rw-r--r--test/files/pos/t8359-closelim-crash.flags1
-rw-r--r--test/files/pos/t8359-closelim-crash.scala23
-rw-r--r--test/files/pos/t8410.flags2
-rw-r--r--test/files/pos/t8429.scala7
-rw-r--r--test/files/pos/t8462.scala11
-rw-r--r--test/files/pos/t8862a.scala47
-rw-r--r--test/files/pos/t8862b.scala12
-rw-r--r--test/files/pos/t8873.scala1
-rw-r--r--test/files/pos/t9074.scala24
-rw-r--r--test/files/pos/t9074b.scala15
-rw-r--r--test/files/pos/t9111-inliner-workaround.flags2
-rw-r--r--test/files/pos/t9123.flags1
-rw-r--r--test/files/pos/t9123.scala10
-rw-r--r--test/files/pos/t9131.scala12
-rw-r--r--test/files/pos/t9178b.flags (renamed from test/files/neg/sammy_restrictions.flags)0
-rw-r--r--test/files/pos/t9178b.scala7
-rw-r--r--test/files/pos/t9326a.scala6
-rw-r--r--test/files/pos/t9397.scala12
-rw-r--r--test/files/pos/t9399.flags1
-rw-r--r--test/files/pos/t9399.scala17
-rw-r--r--test/files/pos/t9411a.flags1
-rw-r--r--test/files/pos/t9411a.scala27
-rw-r--r--test/files/pos/t9411b.flags1
-rw-r--r--test/files/pos/t9411b.scala36
-rw-r--r--test/files/pos/t9449.scala19
-rw-r--r--test/files/pos/t9479.scala15
-rw-r--r--test/files/pos/t9479b.scala15
-rw-r--r--test/files/pos/t9498.scala25
-rw-r--r--test/files/pos/t9542.scala8
-rw-r--r--test/files/pos/t9630.flags1
-rw-r--r--test/files/pos/t9630/t9630a.scala9
-rw-r--r--test/files/pos/t9630/t9630b.scala8
-rw-r--r--test/files/pos/t9658.scala10
-rw-r--r--test/files/pos/t9665.scala7
-rw-r--r--test/files/pos/t9855.scala10
-rw-r--r--test/files/pos/t9855b.scala16
-rw-r--r--test/files/pos/t9918/package.scala1
-rw-r--r--test/files/pos/t9918/t9918.scala3
-rw-r--r--test/files/pos/t9920.scala6
-rw-r--r--test/files/pos/t9943.scala9
-rw-r--r--test/files/pos/tcpoly_bounds1.scala6
-rw-r--r--test/files/pos/trait-defaults-super.scala21
-rw-r--r--test/files/pos/trait-force-info.flags1
-rw-r--r--test/files/pos/trait-force-info.scala18
-rw-r--r--test/files/pos/trait_fields_dependent_conflict.scala20
-rw-r--r--test/files/pos/trait_fields_dependent_rebind.scala15
-rw-r--r--test/files/pos/trait_fields_inherit_double_def.scala20
-rw-r--r--test/files/pos/trait_fields_lambdalift.scala22
-rw-r--r--test/files/pos/trait_fields_nested_private_object.scala8
-rw-r--r--test/files/pos/trait_fields_nested_public_object.scala5
-rw-r--r--test/files/pos/trait_fields_owners.scala19
-rw-r--r--test/files/pos/trait_fields_private_this.scala5
-rw-r--r--test/files/pos/trait_fields_static_fwd.scala10
-rw-r--r--test/files/pos/trait_fields_var_override_deferred.scala2
-rw-r--r--test/files/pos/trait_fields_volatile.scala13
-rw-r--r--test/files/pos/trait_lazy_accessboundary.scala2
-rw-r--r--test/files/pos/typevar-in-prefix.scala9
-rw-r--r--test/files/pos/val_infer.scala5
-rw-r--r--test/files/pos/virtpatmat_exist1.scala3
-rw-r--r--test/files/presentation/callcc-interpreter/Runner.scala2
-rw-r--r--test/files/presentation/doc/doc.scala8
-rw-r--r--test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala2
-rw-r--r--test/files/presentation/random.check2
-rw-r--r--test/files/presentation/scope-completion-3.check14
-rw-r--r--test/files/presentation/scope-completion-3/src/Completions.scala2
-rw-r--r--test/files/presentation/t4287c.check11
-rw-r--r--test/files/presentation/t4287c/Test.scala3
-rw-r--r--test/files/presentation/t4287c/src/Foo.scala9
-rw-r--r--test/files/presentation/t5708.check2
-rw-r--r--test/files/presentation/t7678/Runner.scala2
-rw-r--r--test/files/presentation/t8459.check1
-rw-r--r--test/files/presentation/t8941.check2
-rw-r--r--test/files/run/Course-2002-07.scala2
-rw-r--r--test/files/run/Course-2002-08.scala20
-rw-r--r--test/files/run/SD-235.scala39
-rw-r--r--test/files/run/SymbolsTest.scala18
-rw-r--r--test/files/run/analyzerPlugins.check94
-rw-r--r--test/files/run/array-charSeq.check1
-rw-r--r--test/files/run/bcodeInlinerMixed.flags2
-rw-r--r--test/files/run/bitsets.check2
-rw-r--r--test/files/run/blame_eye_triple_eee-double.flags1
-rw-r--r--test/files/run/blame_eye_triple_eee-float.flags1
-rw-r--r--test/files/run/caseclasses.scala2
-rw-r--r--test/files/run/classfile-format-51.scala5
-rw-r--r--test/files/run/classfile-format-52.scala3
-rw-r--r--test/files/run/collection-stacks.check4
-rw-r--r--test/files/run/colltest.check2
-rw-r--r--test/files/run/compiler-asSeenFrom.check20
-rw-r--r--test/files/run/concurrent-map-conversions.scala15
-rw-r--r--test/files/run/concurrent-stream.check3
-rw-r--r--test/files/run/concurrent-stream.scala37
-rw-r--r--test/files/run/constant-optimization.flags1
-rw-r--r--test/files/run/constrained-types.check8
-rw-r--r--test/files/run/contrib674.check5
-rw-r--r--test/files/run/contrib674.scala2
-rw-r--r--test/files/run/dead-code-elimination.flags1
-rw-r--r--test/files/run/delambdafy-specialized.check1
-rw-r--r--test/files/run/delambdafy-specialized.flags1
-rw-r--r--test/files/run/delambdafy-specialized.scala6
-rw-r--r--test/files/run/delambdafyLambdaClassNames.check1
-rw-r--r--test/files/run/delambdafyLambdaClassNames.flags1
-rw-r--r--test/files/run/delambdafyLambdaClassNames/A_1.scala5
-rw-r--r--test/files/run/delambdafyLambdaClassNames/Test.scala4
-rw-r--r--test/files/run/delambdafy_t6028.check53
-rw-r--r--test/files/run/delambdafy_t6555.check4
-rw-r--r--test/files/run/delambdafy_uncurry_byname_method.check4
-rw-r--r--test/files/run/delambdafy_uncurry_method.check4
-rw-r--r--test/files/run/delay-bad.check6
-rw-r--r--test/files/run/delay-good.check4
-rw-r--r--test/files/run/duration-coarsest.scala5
-rw-r--r--test/files/run/elidable-opt.flags2
-rw-r--r--test/files/run/elidable-opt.scala1
-rw-r--r--test/files/run/elidable.scala1
-rw-r--r--test/files/run/equality.scala2
-rw-r--r--test/files/run/exceptions-2.check2
-rw-r--r--test/files/run/existential-rangepos.check2
-rw-r--r--test/files/run/finalvar.flags2
-rw-r--r--test/files/run/future-flatmap-exec-count.check1
-rw-r--r--test/files/run/hashCodeStatics.scala (renamed from test/files/run/hashCodeBoxesRunTime.scala)10
-rw-r--r--test/files/run/icode-reader-dead-code.scala2
-rw-r--r--test/files/run/idempotency-case-classes.check12
-rw-r--r--test/files/run/idempotency-lazy-vals.check14
-rw-r--r--test/files/run/indy-via-macro-with-dynamic-args/Bootstrap.java17
-rw-r--r--test/files/run/indy-via-macro-with-dynamic-args/Test_2.scala6
-rw-r--r--test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala33
-rw-r--r--test/files/run/indy-via-macro/Bootstrap.java16
-rw-r--r--test/files/run/indy-via-macro/Test_2.scala5
-rw-r--r--test/files/run/indy-via-macro/macro_1.scala32
-rw-r--r--test/files/run/indylambda-boxing/test.scala7
-rw-r--r--test/files/run/inferred-type-constructors-hou.check56
-rw-r--r--test/files/run/inferred-type-constructors-hou.flags1
-rw-r--r--test/files/run/inferred-type-constructors-hou.scala125
-rw-r--r--test/files/run/infix.scala1
-rw-r--r--test/files/run/inlineAddDeserializeLambda.scala20
-rw-r--r--test/files/run/inlineHandlers.scala7
-rw-r--r--test/files/run/iterator-from.scala2
-rw-r--r--test/files/run/junitForwarders/C_1.scala15
-rw-r--r--test/files/run/junitForwarders/Test.java10
-rw-r--r--test/files/run/lambda-serialization-security.scala47
-rw-r--r--test/files/run/lambda-serialization.scala65
-rw-r--r--test/files/run/large_class.check4
-rw-r--r--test/files/run/large_code.check4
-rw-r--r--test/files/run/lazy-locals-2.scala322
-rw-r--r--test/files/run/lazy-locals.check5
-rw-r--r--test/files/run/lazy_local_labels.check9
-rw-r--r--test/files/run/lazy_local_labels.scala28
-rw-r--r--test/files/run/lisp.check26
-rw-r--r--test/files/run/lisp.scala (renamed from test/files/pos/t4579.scala)2
-rw-r--r--test/files/run/local_obj.scala9
-rw-r--r--test/files/run/lub-visibility.check2
-rw-r--r--test/files/run/macro-duplicate.check2
-rw-r--r--test/files/run/macro-typecheck-implicitsdisabled.check2
-rw-r--r--test/files/run/macroPlugins-enterStats.check12
-rw-r--r--test/files/run/macroPlugins-namerHooks.check12
-rw-r--r--test/files/run/mapConserve.scala2
-rw-r--r--test/files/run/map_java_conversions.scala11
-rw-r--r--test/files/run/misc.check16
-rw-r--r--test/files/run/mixin-signatures.check26
-rw-r--r--test/files/run/mixin-signatures.scala4
-rw-r--r--test/files/run/names-defaults.check5
-rw-r--r--test/files/run/noInlineUnknownIndy.check13
-rw-r--r--test/files/run/noInlineUnknownIndy/A_1.java9
-rw-r--r--test/files/run/noInlineUnknownIndy/Test.scala33
-rw-r--r--test/files/run/nothingTypeDce.flags2
-rw-r--r--test/files/run/nothingTypeDce.scala3
-rw-r--r--test/files/run/nothingTypeNoFramesNoDce.check1
-rw-r--r--test/files/run/nothingTypeNoFramesNoDce.flags1
-rw-r--r--test/files/run/nothingTypeNoFramesNoDce.scala61
-rw-r--r--test/files/run/nothingTypeNoOpt.flags2
-rw-r--r--test/files/run/nothingTypeNoOpt.scala2
-rw-r--r--test/files/run/numbereq.scala3
-rw-r--r--test/files/run/optimizer-array-load.flags1
-rw-r--r--test/files/run/origins.check6
-rw-r--r--test/files/run/patmatnew.check12
-rw-r--r--test/files/run/patmatnew.scala4
-rw-r--r--test/files/run/private-inline.check13
-rw-r--r--test/files/run/private-inline.flags1
-rw-r--r--test/files/run/private-inline.scala52
-rw-r--r--test/files/run/programmatic-main.check17
-rw-r--r--test/files/run/reflection-fieldsymbol-navigation.check6
-rw-r--r--test/files/run/reflection-implClass.scala40
-rw-r--r--test/files/run/reflection-java-annotations.check5
-rw-r--r--test/files/run/reflection-java-annotations/Test_2.scala4
-rw-r--r--test/files/run/reflection-magicsymbols-repl.check2
-rw-r--r--test/files/run/reflection-mem-typecheck.scala2
-rw-r--r--test/files/run/reflection-scala-annotations.check2
-rw-r--r--test/files/run/reify-aliases.check2
-rw-r--r--test/files/run/reify_lazyunit.check2
-rw-r--r--test/files/run/reify_printf.scala1
-rw-r--r--test/files/run/repl-bare-expr.check12
-rw-r--r--test/files/run/repl-colon-type.check2
-rw-r--r--test/files/run/repl-implicits-nopredef.check5
-rw-r--r--test/files/run/repl-implicits-nopredef.scala10
-rw-r--r--test/files/run/repl-implicits.check5
-rw-r--r--test/files/run/repl-implicits.scala5
-rw-r--r--test/files/run/repl-javap-app.scala18
-rw-r--r--test/files/run/repl-javap-def.scala2
-rw-r--r--test/files/run/repl-javap-fun.scala16
-rw-r--r--test/files/run/repl-javap-lambdas.scala23
-rw-r--r--test/files/run/repl-javap-memfun.scala22
-rw-r--r--test/files/run/repl-javap-more-fun.scala17
-rw-r--r--test/files/run/repl-javap-outdir-funs.flags1
-rw-r--r--test/files/run/repl-javap-outdir-funs/foo_1.scala6
-rw-r--r--test/files/run/repl-javap-outdir-funs/run-repl_7.scala20
-rw-r--r--test/files/run/repl-javap.scala3
-rw-r--r--test/files/run/repl-no-imports-no-predef-classbased.check23
-rw-r--r--test/files/run/repl-no-imports-no-predef-classbased.scala19
-rw-r--r--test/files/run/repl-no-imports-no-predef-power.check29
-rw-r--r--test/files/run/repl-no-imports-no-predef-power.scala21
-rw-r--r--test/files/run/repl-no-imports-no-predef.check360
-rw-r--r--test/files/run/repl-no-imports-no-predef.scala108
-rw-r--r--test/files/run/repl-parens.check12
-rw-r--r--test/files/run/repl-parens.scala3
-rw-r--r--test/files/run/repl-paste-b.check14
-rw-r--r--test/files/run/repl-paste-b.scala13
-rw-r--r--test/files/run/repl-paste-raw-b.pastie8
-rw-r--r--test/files/run/repl-paste-raw-b.scala18
-rw-r--r--test/files/run/repl-paste-raw-c.pastie5
-rw-r--r--test/files/run/repl-paste-raw-c.scala16
-rw-r--r--test/files/run/repl-paste-raw.pastie4
-rw-r--r--test/files/run/repl-paste-raw.scala2
-rw-r--r--test/files/run/repl-power.check4
-rw-r--r--test/files/run/repl-serialization.scala2
-rw-r--r--test/files/run/richs.check2
-rw-r--r--test/files/run/run-bug4840.flags1
-rw-r--r--test/files/run/runtime.scala2
-rw-r--r--test/files/run/sammy_after_implicit_view.scala28
-rw-r--r--test/files/run/sammy_cbn.scala9
-rw-r--r--test/files/run/sammy_erasure_cce.scala22
-rw-r--r--test/files/run/sammy_java8.flags1
-rw-r--r--test/files/run/sammy_repeated.flags1
-rw-r--r--test/files/run/sammy_repeated.scala8
-rw-r--r--test/files/run/sammy_restrictions_LMF.check2
-rw-r--r--test/files/run/sammy_restrictions_LMF.scala57
-rw-r--r--test/files/run/sammy_return.scala14
-rw-r--r--test/files/run/sammy_seriazable.scala47
-rw-r--r--test/files/run/sammy_vararg_cbn.check (renamed from test/files/run/sammy_repeated.check)0
-rw-r--r--test/files/run/sammy_vararg_cbn.scala12
-rw-r--r--test/files/run/sbt-icode-interface.check1
-rw-r--r--test/files/run/sbt-icode-interface.scala48
-rw-r--r--test/files/run/sd167.check1
-rw-r--r--test/files/run/sd167.scala8
-rw-r--r--test/files/run/sd242.scala13
-rw-r--r--test/files/run/showdecl.check2
-rw-r--r--test/files/run/showdecl/Macros_1.scala2
-rw-r--r--test/files/run/showraw_mods.check2
-rw-r--r--test/files/run/showraw_tree_types_ids.check8
-rw-r--r--test/files/run/showraw_tree_types_typed.check8
-rw-r--r--test/files/run/showraw_tree_ultimate.check8
-rw-r--r--test/files/run/stringinterpolation_macro-run.check71
-rw-r--r--test/files/run/stringinterpolation_macro-run.scala122
-rw-r--r--test/files/run/synchronized.check128
-rw-r--r--test/files/run/synchronized.flags2
-rw-r--r--test/files/run/synchronized.scala76
-rw-r--r--test/files/run/t1500.scala2
-rw-r--r--test/files/run/t2106.check10
-rw-r--r--test/files/run/t2106.flags2
-rw-r--r--test/files/run/t2212.check2
-rw-r--r--test/files/run/t2250.scala2
-rw-r--r--test/files/run/t2251b.check4
-rw-r--r--test/files/run/t2813.2.scala2
-rw-r--r--test/files/run/t2946/MyResponseCommon_2.scala7
-rw-r--r--test/files/run/t2946/ResponseCommon_1.scala13
-rw-r--r--test/files/run/t3126.scala2
-rw-r--r--test/files/run/t3158.scala2
-rw-r--r--test/files/run/t3235-minimal.check8
-rw-r--r--test/files/run/t3326.scala2
-rw-r--r--test/files/run/t3361.check2
-rw-r--r--test/files/run/t3368-c.check24
-rw-r--r--test/files/run/t3452b-bcode.check2
-rw-r--r--test/files/run/t3452b-bcode.flags1
-rw-r--r--test/files/run/t3452b-bcode/J_2.java6
-rw-r--r--test/files/run/t3452b-bcode/S_1.scala17
-rw-r--r--test/files/run/t3488.check10
-rw-r--r--test/files/run/t3509.flags2
-rw-r--r--test/files/run/t3569.check2
-rw-r--r--test/files/run/t3569.flags2
-rw-r--r--test/files/run/t3569.scala8
-rw-r--r--test/files/run/t3647.check2
-rw-r--r--test/files/run/t3822.scala19
-rw-r--r--test/files/run/t3888.check1
-rw-r--r--test/files/run/t3888.scala5
-rw-r--r--test/files/run/t3970.check2
-rw-r--r--test/files/run/t3996.check2
-rw-r--r--test/files/run/t4047.check8
-rw-r--r--test/files/run/t4080.check2
-rw-r--r--test/files/run/t4124.scala8
-rw-r--r--test/files/run/t4172.check2
-rw-r--r--test/files/run/t4285.flags2
-rw-r--r--test/files/run/t4287inferredMethodTypes.check30
-rw-r--r--test/files/run/t4287inferredMethodTypes.scala25
-rw-r--r--test/files/run/t4332.scala2
-rw-r--r--test/files/run/t4396.check2
-rw-r--r--test/files/run/t4461.check2
-rw-r--r--test/files/run/t4542.check2
-rw-r--r--test/files/run/t4594-repl-settings.scala4
-rw-r--r--test/files/run/t4680.check6
-rw-r--r--test/files/run/t4710.check2
-rw-r--r--test/files/run/t4813.check2
-rw-r--r--test/files/run/t4891.check4
-rw-r--r--test/files/run/t4935.flags2
-rw-r--r--test/files/run/t5064.check45
-rw-r--r--test/files/run/t5293-map.scala88
-rw-r--r--test/files/run/t5293.scala83
-rw-r--r--test/files/run/t5294.scala22
-rw-r--r--test/files/run/t5313.check12
-rw-r--r--test/files/run/t5313.scala54
-rw-r--r--test/files/run/t5375.check1
-rw-r--r--test/files/run/t5375.scala16
-rw-r--r--test/files/run/t5380.check4
-rw-r--r--test/files/run/t5428.check2
-rw-r--r--test/files/run/t5463.scala21
-rw-r--r--test/files/run/t5535.scala7
-rw-r--r--test/files/run/t5552.check4
-rw-r--r--test/files/run/t5552.scala10
-rw-r--r--test/files/run/t5652.check11
-rw-r--r--test/files/run/t5652/t5652_2.scala2
-rw-r--r--test/files/run/t5652b.check4
-rw-r--r--test/files/run/t5652c.check4
-rw-r--r--test/files/run/t5676.flags2
-rw-r--r--test/files/run/t5699.check4
-rw-r--r--test/files/run/t576.check2
-rw-r--r--test/files/run/t5789.scala9
-rw-r--r--test/files/run/t5880.scala5
-rw-r--r--test/files/run/t5943a1.check2
-rw-r--r--test/files/run/t6023.check4
-rw-r--r--test/files/run/t6028.check26
-rw-r--r--test/files/run/t6089.scala2
-rw-r--r--test/files/run/t6102.check36
-rw-r--r--test/files/run/t6102.flags2
-rw-r--r--test/files/run/t6111.check2
-rw-r--r--test/files/run/t6188.flags2
-rw-r--r--test/files/run/t6198.scala7
-rw-r--r--test/files/run/t6240-universe-code-gen.scala2
-rw-r--r--test/files/run/t6260-delambdafy.check2
-rw-r--r--test/files/run/t6260-delambdafy.flags1
-rw-r--r--test/files/run/t6260c.check6
-rw-r--r--test/files/run/t6288.check20
-rw-r--r--test/files/run/t6288b-jump-position.check76
-rw-r--r--test/files/run/t6288b-jump-position.scala19
-rw-r--r--test/files/run/t6292.check2
-rw-r--r--test/files/run/t6329_repl.check8
-rw-r--r--test/files/run/t6329_repl_bug.check2
-rw-r--r--test/files/run/t6329_vanilla_bug.check2
-rw-r--r--test/files/run/t6331b.check6
-rw-r--r--test/files/run/t6434.scala7
-rw-r--r--test/files/run/t6481.check2
-rw-r--r--test/files/run/t6502.scala39
-rw-r--r--test/files/run/t6546.flags1
-rw-r--r--test/files/run/t6546/A_1.scala6
-rw-r--r--test/files/run/t6546/B_2.scala8
-rw-r--r--test/files/run/t6554.scala12
-rw-r--r--test/files/run/t6634.check6
-rw-r--r--test/files/run/t6634.scala21
-rw-r--r--test/files/run/t6690.check2
-rw-r--r--test/files/run/t6733.check15
-rw-r--r--test/files/run/t6827.check12
-rw-r--r--test/files/run/t6827.scala20
-rw-r--r--test/files/run/t6863.check2
-rw-r--r--test/files/run/t6935.check2
-rw-r--r--test/files/run/t6955.scala34
-rw-r--r--test/files/run/t6956.scala31
-rw-r--r--test/files/run/t7008-scala-defined.flags1
-rw-r--r--test/files/run/t7046-1/Macros_1.scala15
-rw-r--r--test/files/run/t7046-1/Test_2.scala23
-rw-r--r--test/files/run/t7046-2/Macros_1.scala15
-rw-r--r--test/files/run/t7046-2/Test_2.scala14
-rw-r--r--test/files/run/t7047.check2
-rw-r--r--test/files/run/t7171.check3
-rw-r--r--test/files/run/t7269.scala2
-rw-r--r--test/files/run/t7319.check6
-rw-r--r--test/files/run/t7375b.check8
-rw-r--r--test/files/run/t7407.flags2
-rw-r--r--test/files/run/t7407b.flags1
-rw-r--r--test/files/run/t7439.check2
-rw-r--r--test/files/run/t7445.scala6
-rw-r--r--test/files/run/t7459b-optimize.flags2
-rw-r--r--test/files/run/t7459f.scala2
-rw-r--r--test/files/run/t7521/Test.scala (renamed from test/files/run/t3452b-bcode/S_3.scala)2
-rw-r--r--test/files/run/t7521/Wrapper.scala1
-rw-r--r--test/files/run/t7521b.check7
-rw-r--r--test/files/run/t7521b.scala20
-rw-r--r--test/files/run/t7533.check51
-rw-r--r--test/files/run/t7533.scala34
-rw-r--r--test/files/run/t7582.check5
-rw-r--r--test/files/run/t7582.flags2
-rw-r--r--test/files/run/t7582/InlineHolder.scala3
-rw-r--r--test/files/run/t7582b.check5
-rw-r--r--test/files/run/t7582b.flags2
-rw-r--r--test/files/run/t7582b/InlineHolder.scala3
-rw-r--r--test/files/run/t7700.check6
-rw-r--r--test/files/run/t7700.scala16
-rw-r--r--test/files/run/t7747-repl.check30
-rw-r--r--test/files/run/t7747-repl.scala5
-rw-r--r--test/files/run/t7775.scala43
-rw-r--r--test/files/run/t7807.check3
-rw-r--r--test/files/run/t7807.scala21
-rw-r--r--test/files/run/t7817-tree-gen.check28
-rw-r--r--test/files/run/t7817-tree-gen.flags1
-rw-r--r--test/files/run/t7852.flags2
-rw-r--r--test/files/run/t7932.check9
-rw-r--r--test/files/run/t7932.scala29
-rw-r--r--test/files/run/t7974.check47
-rw-r--r--test/files/run/t7974/Test.scala2
-rw-r--r--test/files/run/t8196.check2
-rw-r--r--test/files/run/t8199.scala40
-rw-r--r--test/files/run/t8233-bcode.flags1
-rw-r--r--test/files/run/t8233-bcode.scala31
-rw-r--r--test/files/run/t8334.scala17
-rw-r--r--test/files/run/t8442.check2
-rw-r--r--test/files/run/t8549.check2
-rw-r--r--test/files/run/t8549.scala46
-rw-r--r--test/files/run/t8575.scala32
-rw-r--r--test/files/run/t8575b.scala17
-rw-r--r--test/files/run/t8575c.scala23
-rw-r--r--test/files/run/t8601-closure-elim.flags2
-rw-r--r--test/files/run/t8601-closure-elim.scala4
-rw-r--r--test/files/run/t8601.flags2
-rw-r--r--test/files/run/t8601b.flags2
-rw-r--r--test/files/run/t8601c.flags2
-rw-r--r--test/files/run/t8601d.flags2
-rw-r--r--test/files/run/t8601e.flags2
-rw-r--r--test/files/run/t8601e/StaticInit.classbin417 -> 0 bytes
-rw-r--r--test/files/run/t8710.scala17
-rw-r--r--test/files/run/t8756.check9
-rw-r--r--test/files/run/t8756.scala22
-rw-r--r--test/files/run/t8764.check5
-rw-r--r--test/files/run/t8764.flags1
-rw-r--r--test/files/run/t8764.scala16
-rw-r--r--test/files/run/t8845.flags1
-rw-r--r--test/files/run/t8918-unary-ids.check7
-rw-r--r--test/files/run/t8918-unary-ids.scala49
-rw-r--r--test/files/run/t8925.flags2
-rw-r--r--test/files/run/t8944/A_1.scala1
-rw-r--r--test/files/run/t8944/A_2.scala6
-rw-r--r--test/files/run/t8944/Test_1.scala3
-rw-r--r--test/files/run/t8944b.scala9
-rw-r--r--test/files/run/t8944c.check5
-rw-r--r--test/files/run/t8944c.scala8
-rw-r--r--test/files/run/t8955.scala12
-rw-r--r--test/files/run/t8960.scala80
-rw-r--r--test/files/run/t9003.flags2
-rw-r--r--test/files/run/t9097.scala3
-rw-r--r--test/files/run/t9110.scala27
-rw-r--r--test/files/run/t9174.check17
-rw-r--r--test/files/run/t9174.scala11
-rw-r--r--test/files/run/t9178a.flags (renamed from test/files/neg/sammy_wrong_arity.flags)0
-rw-r--r--test/files/run/t9178a.scala15
-rw-r--r--test/files/run/t9200/Test.java6
-rw-r--r--test/files/run/t9200/test.scala12
-rw-r--r--test/files/run/t9268.check3
-rw-r--r--test/files/run/t9349/data.scala1
-rw-r--r--test/files/run/t9349/test.scala21
-rw-r--r--test/files/run/t9375.check8
-rw-r--r--test/files/run/t9375.scala3
-rw-r--r--test/files/run/t9388-bin-compat.scala16
-rw-r--r--test/files/run/t9390.scala67
-rw-r--r--test/files/run/t9390b.scala31
-rw-r--r--test/files/run/t9390c.scala21
-rw-r--r--test/files/run/t9390d.scala12
-rw-r--r--test/files/run/t9403.flags2
-rw-r--r--test/files/run/t9408.scala61
-rw-r--r--test/files/run/t9437a.check10
-rw-r--r--test/files/run/t9437a/Test.scala20
-rw-r--r--test/files/run/t9437b.check10
-rw-r--r--test/files/run/t9437b/Foo_1.scala3
-rw-r--r--test/files/run/t9437b/Test_2.scala16
-rw-r--r--test/files/run/t9437c.check10
-rw-r--r--test/files/run/t9437c/Test.scala92
-rw-r--r--test/files/run/t9489.flags (renamed from test/files/neg/t8764.flags)0
-rw-r--r--test/files/run/t9489/A.java3
-rw-r--r--test/files/run/t9489/B.java3
-rw-r--r--test/files/run/t9489/test.scala10
-rw-r--r--test/files/run/t9516.scala52
-rw-r--r--test/files/run/t9535.scala22
-rw-r--r--test/files/run/t9656.check14
-rw-r--r--test/files/run/t9656.scala43
-rw-r--r--test/files/run/t9697.check1
-rw-r--r--test/files/run/t9697.scala204
-rw-r--r--test/files/run/t9749-repl-dot.check8
-rw-r--r--test/files/run/t9749-repl-dot.scala10
-rw-r--r--test/files/run/t9806.scala18
-rw-r--r--test/files/run/t9841.scala16
-rw-r--r--test/files/run/t9920.scala17
-rw-r--r--test/files/run/t9920b.scala17
-rw-r--r--test/files/run/t9920c.scala21
-rw-r--r--test/files/run/t9920d.scala14
-rw-r--r--test/files/run/t9946a.scala14
-rw-r--r--test/files/run/t9946b.scala12
-rw-r--r--test/files/run/t9946c.scala10
-rw-r--r--test/files/run/test-cpp.check81
-rw-r--r--test/files/run/test-cpp.scala104
-rw-r--r--test/files/run/toolbox_console_reporter.check4
-rw-r--r--test/files/run/toolbox_silent_reporter.check2
-rw-r--r--test/files/run/trait-clonable.scala11
-rw-r--r--test/files/run/trait-default-specialize.check3
-rw-r--r--test/files/run/trait-default-specialize.scala14
-rw-r--r--test/files/run/trait-defaults-modules.scala20
-rw-r--r--test/files/run/trait-defaults-modules2/T_1.scala4
-rw-r--r--test/files/run/trait-defaults-modules2/Test_2.scala5
-rw-r--r--test/files/run/trait-defaults-modules3.scala8
-rw-r--r--test/files/run/trait-fields-override-lazy.check2
-rw-r--r--test/files/run/trait-fields-override-lazy.scala13
-rw-r--r--test/files/run/trait-renaming.check2
-rw-r--r--test/files/run/trait-renaming/A_1.scala15
-rw-r--r--test/files/run/trait-renaming/B_2.scala5
-rw-r--r--test/files/run/trait-static-clash.scala10
-rw-r--r--test/files/run/trait-static-forwarder.check (renamed from test/files/jvm/t1449.check)0
-rw-r--r--test/files/run/trait-static-forwarder/Test.java5
-rw-r--r--test/files/run/trait-static-forwarder/forwarders.scala5
-rw-r--r--test/files/run/trait-super-calls.scala127
-rw-r--r--test/files/run/trait_fields_bytecode.scala23
-rw-r--r--test/files/run/trait_fields_final.scala21
-rw-r--r--test/files/run/trait_fields_init.check21
-rw-r--r--test/files/run/trait_fields_init.scala55
-rw-r--r--test/files/run/trait_fields_repl.check11
-rw-r--r--test/files/run/trait_fields_repl.scala10
-rw-r--r--test/files/run/trait_fields_three_layer_overrides.check2
-rw-r--r--test/files/run/trait_fields_three_layer_overrides.scala25
-rw-r--r--test/files/run/trait_fields_volatile.scala13
-rw-r--r--test/files/run/try-2.check2
-rw-r--r--test/files/run/try.check2
-rw-r--r--test/files/run/tuple-zipped.scala41
-rw-r--r--test/files/run/unittest_collection.check2
-rw-r--r--test/files/run/various-flat-classpath-types.scala9
-rw-r--r--test/files/run/xMigration.check20
-rw-r--r--test/files/scalacheck/CheckEither.scala70
-rw-r--r--test/files/scalacheck/MutablePriorityQueue.scala102
-rw-r--r--test/files/scalacheck/MutableTreeMap.scala345
-rw-r--r--test/files/scalacheck/MutableTreeSet.scala216
-rw-r--r--test/files/scalacheck/avl.scala112
-rwxr-xr-xtest/files/scalacheck/concurrent-map.scala76
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala2
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala2
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala44
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala2
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala2
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala33
-rw-r--r--test/files/scalacheck/parallel-collections/ParallelSetCheck.scala2
-rw-r--r--test/files/scalacheck/quasiquotes/TypecheckedProps.scala4
-rw-r--r--test/files/specialized/SI-7343.scala2
-rw-r--r--test/files/specialized/fft.check2
-rw-r--r--test/files/specialized/tb3651.check2
-rw-r--r--test/files/specialized/tc3651.check2
-rw-r--r--test/files/specialized/td3651.check4
-rw-r--r--test/instrumented/library/scala/runtime/BoxesRunTime.java4
-rw-r--r--test/instrumented/library/scala/runtime/ScalaRunTime.scala118
-rw-r--r--test/junit/scala/PartialFunctionSerializationTest.scala30
-rw-r--r--test/junit/scala/StringContextTest.scala87
-rw-r--r--test/junit/scala/collection/IteratorTest.scala66
-rw-r--r--test/junit/scala/collection/NewBuilderTest.scala184
-rw-r--r--test/junit/scala/collection/ReusableBuildersTest.scala48
-rw-r--r--test/junit/scala/collection/SeqLikeTest.scala19
-rw-r--r--test/junit/scala/collection/SeqViewTest.scala16
-rw-r--r--test/junit/scala/collection/SetMapConsistencyTest.scala23
-rw-r--r--test/junit/scala/collection/TraversableLikeTest.scala33
-rw-r--r--test/junit/scala/collection/convert/NullSafetyToJavaTest.scala138
-rw-r--r--test/junit/scala/collection/convert/NullSafetyToScalaTest.scala148
-rw-r--r--test/junit/scala/collection/convert/WrapperSerializationTest.scala29
-rw-r--r--test/junit/scala/collection/immutable/ListMapTest.scala48
-rw-r--r--test/junit/scala/collection/immutable/ListSetTest.scala53
-rw-r--r--test/junit/scala/collection/immutable/PagedSeqTest.scala3
-rw-r--r--test/junit/scala/collection/immutable/SetTest.scala (renamed from test/junit/scala/collection/immutable/SetTests.scala)2
-rw-r--r--test/junit/scala/collection/immutable/StreamTest.scala120
-rw-r--r--test/junit/scala/collection/immutable/StringLikeTest.scala37
-rw-r--r--test/junit/scala/collection/mutable/BitSetTest.scala9
-rw-r--r--test/junit/scala/collection/mutable/OpenHashMapTest.scala57
-rw-r--r--test/junit/scala/collection/mutable/PriorityQueueTest.scala7
-rw-r--r--test/junit/scala/io/SourceTest.scala4
-rw-r--r--test/junit/scala/lang/annotations/BytecodeTest.scala (renamed from test/junit/scala/issues/BytecodeTests.scala)30
-rw-r--r--test/junit/scala/lang/annotations/RunTest.scala32
-rw-r--r--test/junit/scala/lang/primitives/BoxUnboxTest.scala249
-rw-r--r--test/junit/scala/lang/primitives/NaNTest.scala38
-rw-r--r--test/junit/scala/lang/primitives/PredefAutoboxingTest.scala33
-rw-r--r--test/junit/scala/lang/stringinterpol/StringContextTest.scala265
-rw-r--r--test/junit/scala/lang/traits/BytecodeTest.scala612
-rw-r--r--test/junit/scala/lang/traits/RunTest.scala20
-rw-r--r--test/junit/scala/math/BigDecimalTest.scala5
-rw-r--r--test/junit/scala/math/BigIntTest.scala16
-rw-r--r--test/junit/scala/reflect/ClassOfTest.scala124
-rw-r--r--test/junit/scala/reflect/ClassTagTest.scala (renamed from test/junit/scala/reflect/ClassTag.scala)0
-rw-r--r--test/junit/scala/reflect/internal/PrintersTest.scala59
-rw-r--r--test/junit/scala/reflect/internal/TreeGenTest.scala51
-rw-r--r--test/junit/scala/reflect/internal/TypesTest.scala109
-rw-r--r--test/junit/scala/runtime/LambdaDeserializerTest.java240
-rw-r--r--test/junit/scala/runtime/ScalaRunTimeTest.scala67
-rw-r--r--test/junit/scala/runtime/ZippedTest.scala68
-rw-r--r--test/junit/scala/sys/process/t7350.scala298
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/BTypesTest.scala40
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala198
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/CodeGenTools.scala178
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/DefaultMethodTest.scala35
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala64
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/IndyLambdaTest.scala63
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/IndySammyTest.scala146
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/OptimizedBytecodeTest.scala362
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/StringConcatTest.scala123
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/analysis/NullnessAnalyzerTest.scala174
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/analysis/ProdConsAnalyzerTest.scala91
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/AnalyzerTest.scala50
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala28
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/CallGraphTest.scala213
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/ClosureOptimizerTest.scala86
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/CompactLocalVariablesTest.scala22
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/EmptyExceptionHandlersTest.scala37
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/EmptyLabelsAndLineNumbersTest.scala12
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlineInfoTest.scala63
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala162
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlinerIllegalAccessTest.scala38
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala40
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala1141
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala92
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala773
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala185
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/SimplifyJumpsTest.scala33
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/UnreachableCodeTest.scala108
-rw-r--r--test/junit/scala/tools/nsc/backend/jvm/opt/UnusedLocalVariablesTest.scala41
-rw-r--r--test/junit/scala/tools/nsc/classpath/AggregateClassPathTest.scala (renamed from test/junit/scala/tools/nsc/classpath/AggregateFlatClassPathTest.scala)27
-rw-r--r--test/junit/scala/tools/nsc/classpath/PathResolverBaseTest.scala (renamed from test/junit/scala/tools/nsc/classpath/FlatClassPathResolverTest.scala)59
-rw-r--r--test/junit/scala/tools/nsc/interpreter/ScriptedTest.scala102
-rw-r--r--test/junit/scala/tools/nsc/settings/ScalaVersionTest.scala53
-rw-r--r--test/junit/scala/tools/nsc/settings/SettingsTest.scala14
-rw-r--r--test/junit/scala/tools/nsc/symtab/FlagsTest.scala13
-rw-r--r--test/junit/scala/tools/nsc/symtab/StdNamesTest.scala7
-rw-r--r--test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala33
-rw-r--r--test/junit/scala/tools/nsc/transform/delambdafy/DelambdafyTest.scala20
-rw-r--r--test/junit/scala/tools/nsc/transform/patmat/PatmatBytecodeTest.scala182
-rw-r--r--test/junit/scala/tools/nsc/util/ClassPathImplComparator.scala143
-rw-r--r--test/junit/scala/tools/testing/BytecodeTesting.scala312
-rw-r--r--test/junit/scala/tools/testing/ClearAfterClass.java48
-rw-r--r--test/junit/scala/tools/testing/RunTesting.scala17
-rw-r--r--test/junit/scala/util/SystemPropertiesTest.scala27
-rw-r--r--test/junit/scala/util/control/ExceptionTest.scala42
-rw-r--r--test/junit/scala/util/matching/RegexTest.scala132
-rw-r--r--test/long-running/jvm/memleak2_actor.scala39
-rwxr-xr-xtest/partest15
-rw-r--r--test/pending/jvm/actor-executor4.check21
-rw-r--r--test/pending/jvm/actor-executor4.scala64
-rw-r--r--test/pending/jvm/actor-receive-sender.check2
-rw-r--r--test/pending/jvm/actor-receive-sender.scala51
-rw-r--r--test/pending/jvm/actorgc_leak.check1
-rw-r--r--test/pending/jvm/actorgc_leak.scala63
-rw-r--r--test/pending/jvm/constant-optimization/Foo_1.flags1
-rw-r--r--test/pending/jvm/constant-optimization/Foo_1.scala (renamed from test/files/jvm/constant-optimization/Foo_1.scala)2
-rw-r--r--test/pending/jvm/constant-optimization/Test.scala (renamed from test/files/jvm/constant-optimization/Test.scala)0
-rw-r--r--test/pending/jvm/reactWithinZero.check2
-rw-r--r--test/pending/jvm/reactWithinZero.scala18
-rw-r--r--test/pending/jvm/receiveWithinZero.check2
-rw-r--r--test/pending/jvm/receiveWithinZero.scala18
-rw-r--r--test/pending/jvm/t1801.check6
-rw-r--r--test/pending/jvm/t1801.scala31
-rw-r--r--test/pending/jvm/t2515.check10
-rw-r--r--test/pending/jvm/t2515.scala43
-rw-r--r--test/pending/jvm/terminateLinked.check1
-rw-r--r--test/pending/jvm/terminateLinked.scala24
-rw-r--r--test/pending/jvm/timeout.check1
-rw-r--r--test/pending/jvm/timeout.scala38
-rw-r--r--test/pending/neg/t6375.check (renamed from test/files/neg/t6375.check)0
-rw-r--r--test/pending/neg/t6375.flags1
-rw-r--r--test/pending/neg/t6375.scala (renamed from test/files/neg/t6375.scala)0
-rw-r--r--test/pending/neg/t8079d.check4
-rw-r--r--test/pending/neg/t8079d.scala4
-rw-r--r--test/pending/pos/t8079c.scala7
-rw-r--r--test/pending/run/inline-ex-handlers.check (renamed from test/files/run/inline-ex-handlers.check)307
-rw-r--r--test/pending/run/inline-ex-handlers.scala (renamed from test/files/run/inline-ex-handlers.scala)0
-rw-r--r--test/pending/run/origins.check4
-rw-r--r--test/pending/run/origins.flags (renamed from test/files/run/origins.flags)0
-rw-r--r--test/pending/run/origins.scala (renamed from test/files/run/origins.scala)0
-rw-r--r--test/pending/run/t5698/client.scala9
-rw-r--r--test/pending/run/t5698/server.scala22
-rw-r--r--test/pending/run/t5698/testmsg.scala5
-rw-r--r--test/scaladoc/javascript/test-index.html1
-rw-r--r--test/scaladoc/resources/SI-4826.java309
-rw-r--r--test/scaladoc/resources/SI-9599.scala6
-rw-r--r--test/scaladoc/resources/links.scala4
-rw-r--r--test/scaladoc/run/SI-4826-no-comments.check1
-rw-r--r--test/scaladoc/run/SI-4826-no-comments.scala20
-rw-r--r--test/scaladoc/run/SI-4826.check (renamed from test/scaladoc/run/SI-6017.check)0
-rw-r--r--test/scaladoc/run/SI-4826.scala21
-rw-r--r--test/scaladoc/run/SI-6017.scala28
-rw-r--r--test/scaladoc/run/SI-6580.scala1
-rw-r--r--test/scaladoc/run/SI-9620.check1
-rw-r--r--test/scaladoc/run/SI-9620.scala42
-rw-r--r--test/scaladoc/run/shortDescription-annotation.check1
-rw-r--r--test/scaladoc/run/shortDescription-annotation.scala55
-rw-r--r--test/scaladoc/run/t7767.scala42
-rw-r--r--test/scaladoc/run/t7905.check1
-rw-r--r--test/scaladoc/run/t7905.scala36
-rw-r--r--test/scaladoc/run/t9585.check6
-rw-r--r--test/scaladoc/run/t9585.scala25
-rw-r--r--test/scaladoc/run/t9752.check5
-rw-r--r--test/scaladoc/run/t9752.scala28
-rw-r--r--test/scaladoc/scalacheck/DeprecatedIndexTest.scala50
-rw-r--r--test/scaladoc/scalacheck/HtmlFactoryTest.scala95
-rw-r--r--test/scaladoc/scalacheck/IndexScriptTest.scala9
-rw-r--r--test/scaladoc/scalacheck/IndexTest.scala95
1294 files changed, 18145 insertions, 78035 deletions
diff --git a/test/benchmarking/AVL-insert-random.scala b/test/benchmarking/AVL-insert-random.scala
deleted file mode 100644
index 7299e330f5..0000000000
--- a/test/benchmarking/AVL-insert-random.scala
+++ /dev/null
@@ -1,67 +0,0 @@
-package scala.collection
-
-
-
-
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
- override def toString = a.toString
-}
-
-
-object RandomGlobal {
- val sz = 500000
- val data = util.Random.shuffle((0 until sz) map { new Dummy(_) }) toArray;
-}
-
-
-import RandomGlobal._
-
-
-object RandomAVL extends testing.Benchmark {
-
- def run() {
- val avl = new collection.mutable.TreeSet[Dummy]
-
- var i = 0
- while (i < sz) {
- val elem = data(i)
- avl += elem
- i += 1
- }
- }
-
-}
-
-
-object RandomImmutableTreeSet extends testing.Benchmark {
-
- def run() {
- var tree = new collection.immutable.TreeSet[Dummy]
-
- var i = 0
- while (i < sz) {
- val elem = data(i)
- tree += elem
- i += 1
- }
- }
-
-}
-
-
-object RandomJavaTreeSet extends testing.Benchmark {
-
- def run() {
- val tree = new java.util.TreeSet[Dummy]
-
- var i = 0
- while (i < sz) {
- val elem = data(i)
- tree add elem
- i += 1
- }
- }
-
-}
diff --git a/test/benchmarking/AVL-insert.scala b/test/benchmarking/AVL-insert.scala
deleted file mode 100644
index 4f3ab390c9..0000000000
--- a/test/benchmarking/AVL-insert.scala
+++ /dev/null
@@ -1,67 +0,0 @@
-package scala.collection
-
-
-
-
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
- override def toString = a.toString
-}
-
-
-object Global {
- val sz = 500000
- val data = (0 until sz) map { new Dummy(_) } toArray
-}
-
-
-import Global._
-
-
-object AVL extends testing.Benchmark {
-
- def run() {
- val avl = new collection.mutable.TreeSet[Dummy]
-
- var i = 0
- while (i < sz) {
- val elem = data(i)
- avl += elem
- i += 1
- }
- }
-
-}
-
-
-object ImmutableTreeSet extends testing.Benchmark {
-
- def run() {
- var tree = new collection.immutable.TreeSet[Dummy]
-
- var i = 0
- while (i < sz) {
- val elem = data(i)
- tree += elem
- i += 1
- }
- }
-
-}
-
-
-object JavaTreeSet extends testing.Benchmark {
-
- def run() {
- val tree = new java.util.TreeSet[Dummy]
-
- var i = 0
- while (i < sz) {
- val elem = data(i)
- tree add elem
- i += 1
- }
- }
-
-}
diff --git a/test/benchmarking/ParCtrie-bfs.scala b/test/benchmarking/ParCtrie-bfs.scala
deleted file mode 100644
index 59149fff8c..0000000000
--- a/test/benchmarking/ParCtrie-bfs.scala
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-import collection.parallel.mutable.ParCtrie
-
-
-object Bfs extends testing.Benchmark {
- val length = sys.props("length").toInt
- val par = sys.props("par").toInt
-
- type Node = (Int, Int);
- type Parent = (Int, Int);
-
- def up(n: Node) = (n._1, n._2 - 1);
- def down(n: Node) = (n._1, n._2 + 1);
- def left(n: Node) = (n._1 - 1, n._2);
- def right(n: Node) = (n._1 + 1, n._2);
-
- // create a map and a target
- val target = (length / 2, length / 2);
- val map = Array.tabulate(length, length)((x, y) => (x % 3) != 0 || (y % 3) != 0 || (x, y) == target)
- def onMap(n: Node) = n._1 >= 0 && n._1 < length && n._2 >= 0 && n._2 < length
-
- // open and closed lists
- val open = ParCtrie[Node, Parent]()
- val closed = ParCtrie[Node, Parent]()
-
- collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(par)
-
- override def setUp() {
- open.clear()
- closed.clear()
-
- // a couple of starting positions
- open((0, 0)) = null
- open((length - 1, length - 1)) = null
- open((0, length - 1)) = null
- open((length - 1, 0)) = null
- }
-
- def run() = {
- // greedy bfs path search
- while (open.nonEmpty && !open.contains(target)) {
- for ((node, parent) <- open) {
- def expand(next: Node) {
- if (onMap(next) && map(next._1)(next._2) && !closed.contains(next) && !open.contains(next)) {
- open(next) = node
- }
- }
- expand(up(node))
- expand(down(node))
- expand(left(node))
- expand(right(node))
- closed(node) = parent
- open.remove(node)
- }
- }
- }
-
- override def tearDown() {
- // print path
- var pathnode = open(target)
- while (closed.contains(pathnode)) {
- print(pathnode + "->")
- pathnode = closed(pathnode)
- }
- println()
- }
-
-}
-
diff --git a/test/benchmarking/ParCtrie-map.scala b/test/benchmarking/ParCtrie-map.scala
deleted file mode 100644
index f1d2f560b7..0000000000
--- a/test/benchmarking/ParCtrie-map.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-import collection.parallel.mutable.ParCtrie
-
-
-
-object Map extends testing.Benchmark {
- val length = sys.props("length").toInt
- val par = sys.props("par").toInt
- val parctrie = ParCtrie((0 until length) zip (0 until length): _*)
-
- parctrie.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par))
-
- def run = {
- parctrie map {
- kv => kv
- }
- }
-}
-
diff --git a/test/benchmarking/ParCtrie-nums.scala b/test/benchmarking/ParCtrie-nums.scala
deleted file mode 100644
index 76d1966d1f..0000000000
--- a/test/benchmarking/ParCtrie-nums.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-import collection.parallel.mutable.ParCtrie
-
-
-case class Entry(num: Double) {
- var sqrt = num
-}
-
-
-object Nums extends testing.Benchmark {
- val length = sys.props("length").toInt
- val par = sys.props("par").toInt
- var entries: Seq[Entry] = null
- var results: ParCtrie[Double, Entry] = null
-
- collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(par)
-
- override def setUp() {
- entries = (1 until length) map { num => Entry(num.toDouble) }
- results = ParCtrie()
- for (e <- entries) results += ((e.num, e))
- }
-
- def run() = {
- while (results.nonEmpty) {
- for ((num, e) <- results) {
- val nsqrt = 0.5 * (e.sqrt + e.num / e.sqrt)
- if (math.abs(nsqrt - e.sqrt) < 0.01) {
- results.remove(num)
- } else e.sqrt = nsqrt
- }
- }
- }
-}
-
diff --git a/test/benchmarking/ParCtrie-size.scala b/test/benchmarking/ParCtrie-size.scala
deleted file mode 100644
index 3f47dc23fd..0000000000
--- a/test/benchmarking/ParCtrie-size.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-import collection.parallel.mutable.ParTrieMap
-
-
-
-object Size extends testing.Benchmark {
- val length = sys.props("length").toInt
- val par = sys.props("par").toInt
- var parctrie = ParTrieMap((0 until length) zip (0 until length): _*)
-
- //collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(par)
- val ts = new collection.parallel.ForkJoinTaskSupport(new concurrent.forkjoin.ForkJoinPool(par))
- parctrie.tasksupport = ts
-
- def run = {
- parctrie.size
- }
-
- var iteration = 0
-
- override def tearDown() {
- iteration += 1
- if (iteration % 4 == 0) parctrie = ParTrieMap((0 until length) zip (0 until length): _*)
- parctrie.tasksupport = ts
- }
-
-}
-
-
-
-
-
-
-
diff --git a/test/benchmarking/ParHashMap.scala b/test/benchmarking/ParHashMap.scala
deleted file mode 100644
index 33a378fb04..0000000000
--- a/test/benchmarking/ParHashMap.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-import collection.parallel.mutable.ParHashMap
-
-
-
-object Map extends testing.Benchmark {
- val length = sys.props("length").toInt
- val par = sys.props("par").toInt
- val phm = ParHashMap((0 until length) zip (0 until length): _*)
-
- phm.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par))
-
- def run = {
- phm map {
- kv => kv
- }
- }
-}
-
-
-object MapSeq extends testing.Benchmark {
- val length = sys.props("length").toInt
- val hm = collection.mutable.HashMap((0 until length) zip (0 until length): _*)
-
- def run = {
- hm map {
- kv => kv
- }
- }
-}
-
diff --git a/test/benchmarking/ParVector-reduce.scala b/test/benchmarking/ParVector-reduce.scala
deleted file mode 100644
index 2b4594e997..0000000000
--- a/test/benchmarking/ParVector-reduce.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-import collection.parallel.immutable.ParVector
-
-
-
-object Reduce extends testing.Benchmark {
- val length = sys.props("length").toInt
- val par = sys.props("par").toInt
- val parvector = ParVector((0 until length): _*)
-
- parvector.tasksupport = new collection.parallel.ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(par))
-
- def run = {
- parvector reduce {
- (a, b) => a + b
- }
- }
-}
-
-
-object ReduceSeq extends testing.Benchmark {
- val length = sys.props("length").toInt
- val vector = collection.immutable.Vector((0 until length): _*)
-
- def run = {
- vector reduce {
- (a, b) => a + b
- }
- }
-}
-
diff --git a/test/benchmarking/TreeSetInsert.scala b/test/benchmarking/TreeSetInsert.scala
deleted file mode 100644
index 23444aa305..0000000000
--- a/test/benchmarking/TreeSetInsert.scala
+++ /dev/null
@@ -1,70 +0,0 @@
-
-object TreeSetInsert {
-
- def main(args: Array[String]): Unit = {
- val n = 500000
- JavaUtilTS.main(args)
- MutableTS.main(args)
- ImmutableTS.main(args)
- }
-}
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
-
- override def toString = a.toString
- }
-
-
-object JavaUtilTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: java.util.TreeSet[Dummy] = null
-
- def run = {
- t = new java.util.TreeSet[Dummy]()
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t add elem
- i += 1
- }
- }
-}
-
-
-object MutableTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: collection.mutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.mutable.TreeSet[Dummy]()
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t += elem
- i += 1
- }
- }
-}
-
-
-object ImmutableTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: collection.immutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.immutable.TreeSet[Dummy]()
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t += elem
- i += 1
- }
- }
-}
diff --git a/test/benchmarking/TreeSetInsertRandom.scala b/test/benchmarking/TreeSetInsertRandom.scala
deleted file mode 100644
index 7f182548b7..0000000000
--- a/test/benchmarking/TreeSetInsertRandom.scala
+++ /dev/null
@@ -1,65 +0,0 @@
-
-object TreeSetInsertRandom {
-
- def main(args: Array[String]): Unit = {
- val n = 500000
- new JavaUtilTS(n).main(args)
- new MutableTS(n).main(args)
- new ImmutableTS(n).main(args)
- }
-}
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
-
- override def toString = a.toString
- }
-
-
-class JavaUtilTS(val length: Int) extends testing.Benchmark {
- var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray
- var t: java.util.TreeSet[Dummy] = null
-
- def run = {
- t = new java.util.TreeSet[Dummy]()
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t add elem
- i += 1
- }
- }
-}
-
-class MutableTS(val length: Int) extends testing.Benchmark {
- var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray
- var t: collection.mutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.mutable.TreeSet[Dummy]()
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t += elem
- i += 1
- }
- }
-}
-
-class ImmutableTS(val length: Int) extends testing.Benchmark {
- var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray
- var t: collection.immutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.immutable.TreeSet[Dummy]()
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t += elem
- i += 1
- }
- }
-}
diff --git a/test/benchmarking/TreeSetIterator.scala b/test/benchmarking/TreeSetIterator.scala
deleted file mode 100644
index 08c20e8b0c..0000000000
--- a/test/benchmarking/TreeSetIterator.scala
+++ /dev/null
@@ -1,69 +0,0 @@
-
-object TreeSetIterator {
-
- def main(args: Array[String]): Unit = {
- val n = 500000
- JavaUtilTS.main(args)
- MutableTS.main(args)
- ImmutableTS.main(args)
- }
-}
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
-
- override def toString = a.toString
- }
-
-
-object JavaUtilTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: java.util.TreeSet[Dummy] = null
-
- def run = {
- t = new java.util.TreeSet[Dummy]()
- data foreach { a => t add a }
-
- var i: Dummy = null
- var it = t.iterator
- while (it.hasNext) {
- i = it.next
- }
- i
- }
-}
-
-object MutableTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: collection.mutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.mutable.TreeSet[Dummy](data: _*)
-
- var i: Dummy = null
- var it = t.iterator
- while (it.hasNext) {
- i = it.next
- }
- i
- }
-}
-
-object ImmutableTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: collection.immutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.immutable.TreeSet[Dummy](data: _*)
-
- var i: Dummy = null
- var it = t.iterator
- while (it.hasNext) {
- i = it.next
- }
- i
- }
-}
diff --git a/test/benchmarking/TreeSetRemove.scala b/test/benchmarking/TreeSetRemove.scala
deleted file mode 100644
index f84066f336..0000000000
--- a/test/benchmarking/TreeSetRemove.scala
+++ /dev/null
@@ -1,69 +0,0 @@
-
-object TreeSetRemove {
-
- def main(args: Array[String]): Unit = {
- val n = 500000
- JavaUtilTS.main(args)
- MutableTS.main(args)
- ImmutableTS.main(args)
- }
-}
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
-
- override def toString = a.toString
- }
-
-
-object JavaUtilTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: java.util.TreeSet[Dummy] = null
-
- def run = {
- t = new java.util.TreeSet[Dummy]()
- data foreach { a => t add a }
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t remove elem
- i += 1
- }
- }
-}
-
-object MutableTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: collection.mutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.mutable.TreeSet[Dummy](data: _*)
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t -= elem
- i += 1
- }
- }
-}
-
-object ImmutableTS extends testing.Benchmark {
- val length = sys.props("length").toInt
- var data: Array[Dummy] = (0 until length) map { a => new Dummy(a) } toArray
- var t: collection.immutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.immutable.TreeSet[Dummy](data: _*)
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t -= elem
- i += 1
- }
- }
-}
diff --git a/test/benchmarking/TreeSetRemoveRandom.scala b/test/benchmarking/TreeSetRemoveRandom.scala
deleted file mode 100644
index 4d311679e3..0000000000
--- a/test/benchmarking/TreeSetRemoveRandom.scala
+++ /dev/null
@@ -1,66 +0,0 @@
-
-object TreeSetRemoveRandom {
-
- def main(args: Array[String]): Unit = {
- val n = 500000
- new JavaUtilTS(n).main(args)
- new MutableTS(n).main(args)
- new ImmutableTS(n).main(args)
- }
-}
-
-class Dummy(val a: Int) extends math.Ordered[Dummy] {
- def compare(other: Dummy) = this.a - other.a
-
- override def toString = a.toString
- }
-
-
-class JavaUtilTS(val length: Int) extends testing.Benchmark {
- var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray
- var t: java.util.TreeSet[Dummy] = null
-
- def run = {
- t = new java.util.TreeSet[Dummy]()
- data foreach { a => t add a }
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t remove elem
- i += 1
- }
- }
-}
-
-class MutableTS(val length: Int) extends testing.Benchmark {
- var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray
- var t: collection.mutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.mutable.TreeSet[Dummy](data: _*)
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t -= elem
- i += 1
- }
- }
-}
-
-class ImmutableTS(val length: Int) extends testing.Benchmark {
- var data: Array[Dummy] = util.Random.shuffle((0 until length) map { a => new Dummy(a) }) toArray
- var t: collection.immutable.TreeSet[Dummy] = null
-
- def run = {
- t = collection.immutable.TreeSet[Dummy](data: _*)
-
- var i = 0
- while (i < length) {
- val elem = data(i)
- t -= elem
- i += 1
- }
- }
-}
diff --git a/test/benchmarking/t6726-patmat-analysis.scala b/test/benchmarking/t6726-patmat-analysis.scala
deleted file mode 100644
index bcb7f6c6b2..0000000000
--- a/test/benchmarking/t6726-patmat-analysis.scala
+++ /dev/null
@@ -1,4005 +0,0 @@
-trait Foo{
-abstract class Base
-case class Dummy0(x: Int) extends Base
-case class Dummy1(x: Int) extends Base
-case class Dummy2(x: Int) extends Base
-case class Dummy3(x: Int) extends Base
-case class Dummy4(x: Int) extends Base
-case class Dummy5(x: Int) extends Base
-case class Dummy6(x: Int) extends Base
-case class Dummy7(x: Int) extends Base
-case class Dummy8(x: Int) extends Base
-case class Dummy9(x: Int) extends Base
-case class Dummy10(x: Int) extends Base
-case class Dummy11(x: Int) extends Base
-case class Dummy12(x: Int) extends Base
-case class Dummy13(x: Int) extends Base
-case class Dummy14(x: Int) extends Base
-case class Dummy15(x: Int) extends Base
-case class Dummy16(x: Int) extends Base
-case class Dummy17(x: Int) extends Base
-case class Dummy18(x: Int) extends Base
-case class Dummy19(x: Int) extends Base
-case class Dummy20(x: Int) extends Base
-case class Dummy21(x: Int) extends Base
-case class Dummy22(x: Int) extends Base
-case class Dummy23(x: Int) extends Base
-case class Dummy24(x: Int) extends Base
-case class Dummy25(x: Int) extends Base
-case class Dummy26(x: Int) extends Base
-case class Dummy27(x: Int) extends Base
-case class Dummy28(x: Int) extends Base
-case class Dummy29(x: Int) extends Base
-case class Dummy30(x: Int) extends Base
-case class Dummy31(x: Int) extends Base
-case class Dummy32(x: Int) extends Base
-case class Dummy33(x: Int) extends Base
-case class Dummy34(x: Int) extends Base
-case class Dummy35(x: Int) extends Base
-case class Dummy36(x: Int) extends Base
-case class Dummy37(x: Int) extends Base
-case class Dummy38(x: Int) extends Base
-case class Dummy39(x: Int) extends Base
-case class Dummy40(x: Int) extends Base
-case class Dummy41(x: Int) extends Base
-case class Dummy42(x: Int) extends Base
-case class Dummy43(x: Int) extends Base
-case class Dummy44(x: Int) extends Base
-case class Dummy45(x: Int) extends Base
-case class Dummy46(x: Int) extends Base
-case class Dummy47(x: Int) extends Base
-case class Dummy48(x: Int) extends Base
-case class Dummy49(x: Int) extends Base
-case class Dummy50(x: Int) extends Base
-case class Dummy51(x: Int) extends Base
-case class Dummy52(x: Int) extends Base
-case class Dummy53(x: Int) extends Base
-case class Dummy54(x: Int) extends Base
-case class Dummy55(x: Int) extends Base
-case class Dummy56(x: Int) extends Base
-case class Dummy57(x: Int) extends Base
-case class Dummy58(x: Int) extends Base
-case class Dummy59(x: Int) extends Base
-case class Dummy60(x: Int) extends Base
-case class Dummy61(x: Int) extends Base
-case class Dummy62(x: Int) extends Base
-case class Dummy63(x: Int) extends Base
-case class Dummy64(x: Int) extends Base
-case class Dummy65(x: Int) extends Base
-case class Dummy66(x: Int) extends Base
-case class Dummy67(x: Int) extends Base
-case class Dummy68(x: Int) extends Base
-case class Dummy69(x: Int) extends Base
-case class Dummy70(x: Int) extends Base
-case class Dummy71(x: Int) extends Base
-case class Dummy72(x: Int) extends Base
-case class Dummy73(x: Int) extends Base
-case class Dummy74(x: Int) extends Base
-case class Dummy75(x: Int) extends Base
-case class Dummy76(x: Int) extends Base
-case class Dummy77(x: Int) extends Base
-case class Dummy78(x: Int) extends Base
-case class Dummy79(x: Int) extends Base
-case class Dummy80(x: Int) extends Base
-case class Dummy81(x: Int) extends Base
-case class Dummy82(x: Int) extends Base
-case class Dummy83(x: Int) extends Base
-case class Dummy84(x: Int) extends Base
-case class Dummy85(x: Int) extends Base
-case class Dummy86(x: Int) extends Base
-case class Dummy87(x: Int) extends Base
-case class Dummy88(x: Int) extends Base
-case class Dummy89(x: Int) extends Base
-case class Dummy90(x: Int) extends Base
-case class Dummy91(x: Int) extends Base
-case class Dummy92(x: Int) extends Base
-case class Dummy93(x: Int) extends Base
-case class Dummy94(x: Int) extends Base
-case class Dummy95(x: Int) extends Base
-case class Dummy96(x: Int) extends Base
-case class Dummy97(x: Int) extends Base
-case class Dummy98(x: Int) extends Base
-case class Dummy99(x: Int) extends Base
-case class Dummy100(x: Int) extends Base
-case class Dummy101(x: Int) extends Base
-case class Dummy102(x: Int) extends Base
-case class Dummy103(x: Int) extends Base
-case class Dummy104(x: Int) extends Base
-case class Dummy105(x: Int) extends Base
-case class Dummy106(x: Int) extends Base
-case class Dummy107(x: Int) extends Base
-case class Dummy108(x: Int) extends Base
-case class Dummy109(x: Int) extends Base
-case class Dummy110(x: Int) extends Base
-case class Dummy111(x: Int) extends Base
-case class Dummy112(x: Int) extends Base
-case class Dummy113(x: Int) extends Base
-case class Dummy114(x: Int) extends Base
-case class Dummy115(x: Int) extends Base
-case class Dummy116(x: Int) extends Base
-case class Dummy117(x: Int) extends Base
-case class Dummy118(x: Int) extends Base
-case class Dummy119(x: Int) extends Base
-case class Dummy120(x: Int) extends Base
-case class Dummy121(x: Int) extends Base
-case class Dummy122(x: Int) extends Base
-case class Dummy123(x: Int) extends Base
-case class Dummy124(x: Int) extends Base
-case class Dummy125(x: Int) extends Base
-case class Dummy126(x: Int) extends Base
-case class Dummy127(x: Int) extends Base
-case class Dummy128(x: Int) extends Base
-case class Dummy129(x: Int) extends Base
-case class Dummy130(x: Int) extends Base
-case class Dummy131(x: Int) extends Base
-case class Dummy132(x: Int) extends Base
-case class Dummy133(x: Int) extends Base
-case class Dummy134(x: Int) extends Base
-case class Dummy135(x: Int) extends Base
-case class Dummy136(x: Int) extends Base
-case class Dummy137(x: Int) extends Base
-case class Dummy138(x: Int) extends Base
-case class Dummy139(x: Int) extends Base
-case class Dummy140(x: Int) extends Base
-case class Dummy141(x: Int) extends Base
-case class Dummy142(x: Int) extends Base
-case class Dummy143(x: Int) extends Base
-case class Dummy144(x: Int) extends Base
-case class Dummy145(x: Int) extends Base
-case class Dummy146(x: Int) extends Base
-case class Dummy147(x: Int) extends Base
-case class Dummy148(x: Int) extends Base
-case class Dummy149(x: Int) extends Base
-case class Dummy150(x: Int) extends Base
-case class Dummy151(x: Int) extends Base
-case class Dummy152(x: Int) extends Base
-case class Dummy153(x: Int) extends Base
-case class Dummy154(x: Int) extends Base
-case class Dummy155(x: Int) extends Base
-case class Dummy156(x: Int) extends Base
-case class Dummy157(x: Int) extends Base
-case class Dummy158(x: Int) extends Base
-case class Dummy159(x: Int) extends Base
-case class Dummy160(x: Int) extends Base
-case class Dummy161(x: Int) extends Base
-case class Dummy162(x: Int) extends Base
-case class Dummy163(x: Int) extends Base
-case class Dummy164(x: Int) extends Base
-case class Dummy165(x: Int) extends Base
-case class Dummy166(x: Int) extends Base
-case class Dummy167(x: Int) extends Base
-case class Dummy168(x: Int) extends Base
-case class Dummy169(x: Int) extends Base
-case class Dummy170(x: Int) extends Base
-case class Dummy171(x: Int) extends Base
-case class Dummy172(x: Int) extends Base
-case class Dummy173(x: Int) extends Base
-case class Dummy174(x: Int) extends Base
-case class Dummy175(x: Int) extends Base
-case class Dummy176(x: Int) extends Base
-case class Dummy177(x: Int) extends Base
-case class Dummy178(x: Int) extends Base
-case class Dummy179(x: Int) extends Base
-case class Dummy180(x: Int) extends Base
-case class Dummy181(x: Int) extends Base
-case class Dummy182(x: Int) extends Base
-case class Dummy183(x: Int) extends Base
-case class Dummy184(x: Int) extends Base
-case class Dummy185(x: Int) extends Base
-case class Dummy186(x: Int) extends Base
-case class Dummy187(x: Int) extends Base
-case class Dummy188(x: Int) extends Base
-case class Dummy189(x: Int) extends Base
-case class Dummy190(x: Int) extends Base
-case class Dummy191(x: Int) extends Base
-case class Dummy192(x: Int) extends Base
-case class Dummy193(x: Int) extends Base
-case class Dummy194(x: Int) extends Base
-case class Dummy195(x: Int) extends Base
-case class Dummy196(x: Int) extends Base
-case class Dummy197(x: Int) extends Base
-case class Dummy198(x: Int) extends Base
-case class Dummy199(x: Int) extends Base
-case class Dummy200(x: Int) extends Base
-case class Dummy201(x: Int) extends Base
-case class Dummy202(x: Int) extends Base
-case class Dummy203(x: Int) extends Base
-case class Dummy204(x: Int) extends Base
-case class Dummy205(x: Int) extends Base
-case class Dummy206(x: Int) extends Base
-case class Dummy207(x: Int) extends Base
-case class Dummy208(x: Int) extends Base
-case class Dummy209(x: Int) extends Base
-case class Dummy210(x: Int) extends Base
-case class Dummy211(x: Int) extends Base
-case class Dummy212(x: Int) extends Base
-case class Dummy213(x: Int) extends Base
-case class Dummy214(x: Int) extends Base
-case class Dummy215(x: Int) extends Base
-case class Dummy216(x: Int) extends Base
-case class Dummy217(x: Int) extends Base
-case class Dummy218(x: Int) extends Base
-case class Dummy219(x: Int) extends Base
-case class Dummy220(x: Int) extends Base
-case class Dummy221(x: Int) extends Base
-case class Dummy222(x: Int) extends Base
-case class Dummy223(x: Int) extends Base
-case class Dummy224(x: Int) extends Base
-case class Dummy225(x: Int) extends Base
-case class Dummy226(x: Int) extends Base
-case class Dummy227(x: Int) extends Base
-case class Dummy228(x: Int) extends Base
-case class Dummy229(x: Int) extends Base
-case class Dummy230(x: Int) extends Base
-case class Dummy231(x: Int) extends Base
-case class Dummy232(x: Int) extends Base
-case class Dummy233(x: Int) extends Base
-case class Dummy234(x: Int) extends Base
-case class Dummy235(x: Int) extends Base
-case class Dummy236(x: Int) extends Base
-case class Dummy237(x: Int) extends Base
-case class Dummy238(x: Int) extends Base
-case class Dummy239(x: Int) extends Base
-case class Dummy240(x: Int) extends Base
-case class Dummy241(x: Int) extends Base
-case class Dummy242(x: Int) extends Base
-case class Dummy243(x: Int) extends Base
-case class Dummy244(x: Int) extends Base
-case class Dummy245(x: Int) extends Base
-case class Dummy246(x: Int) extends Base
-case class Dummy247(x: Int) extends Base
-case class Dummy248(x: Int) extends Base
-case class Dummy249(x: Int) extends Base
-case class Dummy250(x: Int) extends Base
-case class Dummy251(x: Int) extends Base
-case class Dummy252(x: Int) extends Base
-case class Dummy253(x: Int) extends Base
-case class Dummy254(x: Int) extends Base
-case class Dummy255(x: Int) extends Base
-case class Dummy256(x: Int) extends Base
-case class Dummy257(x: Int) extends Base
-case class Dummy258(x: Int) extends Base
-case class Dummy259(x: Int) extends Base
-case class Dummy260(x: Int) extends Base
-case class Dummy261(x: Int) extends Base
-case class Dummy262(x: Int) extends Base
-case class Dummy263(x: Int) extends Base
-case class Dummy264(x: Int) extends Base
-case class Dummy265(x: Int) extends Base
-case class Dummy266(x: Int) extends Base
-case class Dummy267(x: Int) extends Base
-case class Dummy268(x: Int) extends Base
-case class Dummy269(x: Int) extends Base
-case class Dummy270(x: Int) extends Base
-case class Dummy271(x: Int) extends Base
-case class Dummy272(x: Int) extends Base
-case class Dummy273(x: Int) extends Base
-case class Dummy274(x: Int) extends Base
-case class Dummy275(x: Int) extends Base
-case class Dummy276(x: Int) extends Base
-case class Dummy277(x: Int) extends Base
-case class Dummy278(x: Int) extends Base
-case class Dummy279(x: Int) extends Base
-case class Dummy280(x: Int) extends Base
-case class Dummy281(x: Int) extends Base
-case class Dummy282(x: Int) extends Base
-case class Dummy283(x: Int) extends Base
-case class Dummy284(x: Int) extends Base
-case class Dummy285(x: Int) extends Base
-case class Dummy286(x: Int) extends Base
-case class Dummy287(x: Int) extends Base
-case class Dummy288(x: Int) extends Base
-case class Dummy289(x: Int) extends Base
-case class Dummy290(x: Int) extends Base
-case class Dummy291(x: Int) extends Base
-case class Dummy292(x: Int) extends Base
-case class Dummy293(x: Int) extends Base
-case class Dummy294(x: Int) extends Base
-case class Dummy295(x: Int) extends Base
-case class Dummy296(x: Int) extends Base
-case class Dummy297(x: Int) extends Base
-case class Dummy298(x: Int) extends Base
-case class Dummy299(x: Int) extends Base
-case class Dummy300(x: Int) extends Base
-case class Dummy301(x: Int) extends Base
-case class Dummy302(x: Int) extends Base
-case class Dummy303(x: Int) extends Base
-case class Dummy304(x: Int) extends Base
-case class Dummy305(x: Int) extends Base
-case class Dummy306(x: Int) extends Base
-case class Dummy307(x: Int) extends Base
-case class Dummy308(x: Int) extends Base
-case class Dummy309(x: Int) extends Base
-case class Dummy310(x: Int) extends Base
-case class Dummy311(x: Int) extends Base
-case class Dummy312(x: Int) extends Base
-case class Dummy313(x: Int) extends Base
-case class Dummy314(x: Int) extends Base
-case class Dummy315(x: Int) extends Base
-case class Dummy316(x: Int) extends Base
-case class Dummy317(x: Int) extends Base
-case class Dummy318(x: Int) extends Base
-case class Dummy319(x: Int) extends Base
-case class Dummy320(x: Int) extends Base
-case class Dummy321(x: Int) extends Base
-case class Dummy322(x: Int) extends Base
-case class Dummy323(x: Int) extends Base
-case class Dummy324(x: Int) extends Base
-case class Dummy325(x: Int) extends Base
-case class Dummy326(x: Int) extends Base
-case class Dummy327(x: Int) extends Base
-case class Dummy328(x: Int) extends Base
-case class Dummy329(x: Int) extends Base
-case class Dummy330(x: Int) extends Base
-case class Dummy331(x: Int) extends Base
-case class Dummy332(x: Int) extends Base
-case class Dummy333(x: Int) extends Base
-case class Dummy334(x: Int) extends Base
-case class Dummy335(x: Int) extends Base
-case class Dummy336(x: Int) extends Base
-case class Dummy337(x: Int) extends Base
-case class Dummy338(x: Int) extends Base
-case class Dummy339(x: Int) extends Base
-case class Dummy340(x: Int) extends Base
-case class Dummy341(x: Int) extends Base
-case class Dummy342(x: Int) extends Base
-case class Dummy343(x: Int) extends Base
-case class Dummy344(x: Int) extends Base
-case class Dummy345(x: Int) extends Base
-case class Dummy346(x: Int) extends Base
-case class Dummy347(x: Int) extends Base
-case class Dummy348(x: Int) extends Base
-case class Dummy349(x: Int) extends Base
-case class Dummy350(x: Int) extends Base
-case class Dummy351(x: Int) extends Base
-case class Dummy352(x: Int) extends Base
-case class Dummy353(x: Int) extends Base
-case class Dummy354(x: Int) extends Base
-case class Dummy355(x: Int) extends Base
-case class Dummy356(x: Int) extends Base
-case class Dummy357(x: Int) extends Base
-case class Dummy358(x: Int) extends Base
-case class Dummy359(x: Int) extends Base
-case class Dummy360(x: Int) extends Base
-case class Dummy361(x: Int) extends Base
-case class Dummy362(x: Int) extends Base
-case class Dummy363(x: Int) extends Base
-case class Dummy364(x: Int) extends Base
-case class Dummy365(x: Int) extends Base
-case class Dummy366(x: Int) extends Base
-case class Dummy367(x: Int) extends Base
-case class Dummy368(x: Int) extends Base
-case class Dummy369(x: Int) extends Base
-case class Dummy370(x: Int) extends Base
-case class Dummy371(x: Int) extends Base
-case class Dummy372(x: Int) extends Base
-case class Dummy373(x: Int) extends Base
-case class Dummy374(x: Int) extends Base
-case class Dummy375(x: Int) extends Base
-case class Dummy376(x: Int) extends Base
-case class Dummy377(x: Int) extends Base
-case class Dummy378(x: Int) extends Base
-case class Dummy379(x: Int) extends Base
-case class Dummy380(x: Int) extends Base
-case class Dummy381(x: Int) extends Base
-case class Dummy382(x: Int) extends Base
-case class Dummy383(x: Int) extends Base
-case class Dummy384(x: Int) extends Base
-case class Dummy385(x: Int) extends Base
-case class Dummy386(x: Int) extends Base
-case class Dummy387(x: Int) extends Base
-case class Dummy388(x: Int) extends Base
-case class Dummy389(x: Int) extends Base
-case class Dummy390(x: Int) extends Base
-case class Dummy391(x: Int) extends Base
-case class Dummy392(x: Int) extends Base
-case class Dummy393(x: Int) extends Base
-case class Dummy394(x: Int) extends Base
-case class Dummy395(x: Int) extends Base
-case class Dummy396(x: Int) extends Base
-case class Dummy397(x: Int) extends Base
-case class Dummy398(x: Int) extends Base
-case class Dummy399(x: Int) extends Base
-case class Dummy400(x: Int) extends Base
-case class Dummy401(x: Int) extends Base
-case class Dummy402(x: Int) extends Base
-case class Dummy403(x: Int) extends Base
-case class Dummy404(x: Int) extends Base
-case class Dummy405(x: Int) extends Base
-case class Dummy406(x: Int) extends Base
-case class Dummy407(x: Int) extends Base
-case class Dummy408(x: Int) extends Base
-case class Dummy409(x: Int) extends Base
-case class Dummy410(x: Int) extends Base
-case class Dummy411(x: Int) extends Base
-case class Dummy412(x: Int) extends Base
-case class Dummy413(x: Int) extends Base
-case class Dummy414(x: Int) extends Base
-case class Dummy415(x: Int) extends Base
-case class Dummy416(x: Int) extends Base
-case class Dummy417(x: Int) extends Base
-case class Dummy418(x: Int) extends Base
-case class Dummy419(x: Int) extends Base
-case class Dummy420(x: Int) extends Base
-case class Dummy421(x: Int) extends Base
-case class Dummy422(x: Int) extends Base
-case class Dummy423(x: Int) extends Base
-case class Dummy424(x: Int) extends Base
-case class Dummy425(x: Int) extends Base
-case class Dummy426(x: Int) extends Base
-case class Dummy427(x: Int) extends Base
-case class Dummy428(x: Int) extends Base
-case class Dummy429(x: Int) extends Base
-case class Dummy430(x: Int) extends Base
-case class Dummy431(x: Int) extends Base
-case class Dummy432(x: Int) extends Base
-case class Dummy433(x: Int) extends Base
-case class Dummy434(x: Int) extends Base
-case class Dummy435(x: Int) extends Base
-case class Dummy436(x: Int) extends Base
-case class Dummy437(x: Int) extends Base
-case class Dummy438(x: Int) extends Base
-case class Dummy439(x: Int) extends Base
-case class Dummy440(x: Int) extends Base
-case class Dummy441(x: Int) extends Base
-case class Dummy442(x: Int) extends Base
-case class Dummy443(x: Int) extends Base
-case class Dummy444(x: Int) extends Base
-case class Dummy445(x: Int) extends Base
-case class Dummy446(x: Int) extends Base
-case class Dummy447(x: Int) extends Base
-case class Dummy448(x: Int) extends Base
-case class Dummy449(x: Int) extends Base
-case class Dummy450(x: Int) extends Base
-case class Dummy451(x: Int) extends Base
-case class Dummy452(x: Int) extends Base
-case class Dummy453(x: Int) extends Base
-case class Dummy454(x: Int) extends Base
-case class Dummy455(x: Int) extends Base
-case class Dummy456(x: Int) extends Base
-case class Dummy457(x: Int) extends Base
-case class Dummy458(x: Int) extends Base
-case class Dummy459(x: Int) extends Base
-case class Dummy460(x: Int) extends Base
-case class Dummy461(x: Int) extends Base
-case class Dummy462(x: Int) extends Base
-case class Dummy463(x: Int) extends Base
-case class Dummy464(x: Int) extends Base
-case class Dummy465(x: Int) extends Base
-case class Dummy466(x: Int) extends Base
-case class Dummy467(x: Int) extends Base
-case class Dummy468(x: Int) extends Base
-case class Dummy469(x: Int) extends Base
-case class Dummy470(x: Int) extends Base
-case class Dummy471(x: Int) extends Base
-case class Dummy472(x: Int) extends Base
-case class Dummy473(x: Int) extends Base
-case class Dummy474(x: Int) extends Base
-case class Dummy475(x: Int) extends Base
-case class Dummy476(x: Int) extends Base
-case class Dummy477(x: Int) extends Base
-case class Dummy478(x: Int) extends Base
-case class Dummy479(x: Int) extends Base
-case class Dummy480(x: Int) extends Base
-case class Dummy481(x: Int) extends Base
-case class Dummy482(x: Int) extends Base
-case class Dummy483(x: Int) extends Base
-case class Dummy484(x: Int) extends Base
-case class Dummy485(x: Int) extends Base
-case class Dummy486(x: Int) extends Base
-case class Dummy487(x: Int) extends Base
-case class Dummy488(x: Int) extends Base
-case class Dummy489(x: Int) extends Base
-case class Dummy490(x: Int) extends Base
-case class Dummy491(x: Int) extends Base
-case class Dummy492(x: Int) extends Base
-case class Dummy493(x: Int) extends Base
-case class Dummy494(x: Int) extends Base
-case class Dummy495(x: Int) extends Base
-case class Dummy496(x: Int) extends Base
-case class Dummy497(x: Int) extends Base
-case class Dummy498(x: Int) extends Base
-case class Dummy499(x: Int) extends Base
-case class Dummy500(x: Int) extends Base
-case class Dummy501(x: Int) extends Base
-case class Dummy502(x: Int) extends Base
-case class Dummy503(x: Int) extends Base
-case class Dummy504(x: Int) extends Base
-case class Dummy505(x: Int) extends Base
-case class Dummy506(x: Int) extends Base
-case class Dummy507(x: Int) extends Base
-case class Dummy508(x: Int) extends Base
-case class Dummy509(x: Int) extends Base
-case class Dummy510(x: Int) extends Base
-case class Dummy511(x: Int) extends Base
-case class Dummy512(x: Int) extends Base
-case class Dummy513(x: Int) extends Base
-case class Dummy514(x: Int) extends Base
-case class Dummy515(x: Int) extends Base
-case class Dummy516(x: Int) extends Base
-case class Dummy517(x: Int) extends Base
-case class Dummy518(x: Int) extends Base
-case class Dummy519(x: Int) extends Base
-case class Dummy520(x: Int) extends Base
-case class Dummy521(x: Int) extends Base
-case class Dummy522(x: Int) extends Base
-case class Dummy523(x: Int) extends Base
-case class Dummy524(x: Int) extends Base
-case class Dummy525(x: Int) extends Base
-case class Dummy526(x: Int) extends Base
-case class Dummy527(x: Int) extends Base
-case class Dummy528(x: Int) extends Base
-case class Dummy529(x: Int) extends Base
-case class Dummy530(x: Int) extends Base
-case class Dummy531(x: Int) extends Base
-case class Dummy532(x: Int) extends Base
-case class Dummy533(x: Int) extends Base
-case class Dummy534(x: Int) extends Base
-case class Dummy535(x: Int) extends Base
-case class Dummy536(x: Int) extends Base
-case class Dummy537(x: Int) extends Base
-case class Dummy538(x: Int) extends Base
-case class Dummy539(x: Int) extends Base
-case class Dummy540(x: Int) extends Base
-case class Dummy541(x: Int) extends Base
-case class Dummy542(x: Int) extends Base
-case class Dummy543(x: Int) extends Base
-case class Dummy544(x: Int) extends Base
-case class Dummy545(x: Int) extends Base
-case class Dummy546(x: Int) extends Base
-case class Dummy547(x: Int) extends Base
-case class Dummy548(x: Int) extends Base
-case class Dummy549(x: Int) extends Base
-case class Dummy550(x: Int) extends Base
-case class Dummy551(x: Int) extends Base
-case class Dummy552(x: Int) extends Base
-case class Dummy553(x: Int) extends Base
-case class Dummy554(x: Int) extends Base
-case class Dummy555(x: Int) extends Base
-case class Dummy556(x: Int) extends Base
-case class Dummy557(x: Int) extends Base
-case class Dummy558(x: Int) extends Base
-case class Dummy559(x: Int) extends Base
-case class Dummy560(x: Int) extends Base
-case class Dummy561(x: Int) extends Base
-case class Dummy562(x: Int) extends Base
-case class Dummy563(x: Int) extends Base
-case class Dummy564(x: Int) extends Base
-case class Dummy565(x: Int) extends Base
-case class Dummy566(x: Int) extends Base
-case class Dummy567(x: Int) extends Base
-case class Dummy568(x: Int) extends Base
-case class Dummy569(x: Int) extends Base
-case class Dummy570(x: Int) extends Base
-case class Dummy571(x: Int) extends Base
-case class Dummy572(x: Int) extends Base
-case class Dummy573(x: Int) extends Base
-case class Dummy574(x: Int) extends Base
-case class Dummy575(x: Int) extends Base
-case class Dummy576(x: Int) extends Base
-case class Dummy577(x: Int) extends Base
-case class Dummy578(x: Int) extends Base
-case class Dummy579(x: Int) extends Base
-case class Dummy580(x: Int) extends Base
-case class Dummy581(x: Int) extends Base
-case class Dummy582(x: Int) extends Base
-case class Dummy583(x: Int) extends Base
-case class Dummy584(x: Int) extends Base
-case class Dummy585(x: Int) extends Base
-case class Dummy586(x: Int) extends Base
-case class Dummy587(x: Int) extends Base
-case class Dummy588(x: Int) extends Base
-case class Dummy589(x: Int) extends Base
-case class Dummy590(x: Int) extends Base
-case class Dummy591(x: Int) extends Base
-case class Dummy592(x: Int) extends Base
-case class Dummy593(x: Int) extends Base
-case class Dummy594(x: Int) extends Base
-case class Dummy595(x: Int) extends Base
-case class Dummy596(x: Int) extends Base
-case class Dummy597(x: Int) extends Base
-case class Dummy598(x: Int) extends Base
-case class Dummy599(x: Int) extends Base
-case class Dummy600(x: Int) extends Base
-case class Dummy601(x: Int) extends Base
-case class Dummy602(x: Int) extends Base
-case class Dummy603(x: Int) extends Base
-case class Dummy604(x: Int) extends Base
-case class Dummy605(x: Int) extends Base
-case class Dummy606(x: Int) extends Base
-case class Dummy607(x: Int) extends Base
-case class Dummy608(x: Int) extends Base
-case class Dummy609(x: Int) extends Base
-case class Dummy610(x: Int) extends Base
-case class Dummy611(x: Int) extends Base
-case class Dummy612(x: Int) extends Base
-case class Dummy613(x: Int) extends Base
-case class Dummy614(x: Int) extends Base
-case class Dummy615(x: Int) extends Base
-case class Dummy616(x: Int) extends Base
-case class Dummy617(x: Int) extends Base
-case class Dummy618(x: Int) extends Base
-case class Dummy619(x: Int) extends Base
-case class Dummy620(x: Int) extends Base
-case class Dummy621(x: Int) extends Base
-case class Dummy622(x: Int) extends Base
-case class Dummy623(x: Int) extends Base
-case class Dummy624(x: Int) extends Base
-case class Dummy625(x: Int) extends Base
-case class Dummy626(x: Int) extends Base
-case class Dummy627(x: Int) extends Base
-case class Dummy628(x: Int) extends Base
-case class Dummy629(x: Int) extends Base
-case class Dummy630(x: Int) extends Base
-case class Dummy631(x: Int) extends Base
-case class Dummy632(x: Int) extends Base
-case class Dummy633(x: Int) extends Base
-case class Dummy634(x: Int) extends Base
-case class Dummy635(x: Int) extends Base
-case class Dummy636(x: Int) extends Base
-case class Dummy637(x: Int) extends Base
-case class Dummy638(x: Int) extends Base
-case class Dummy639(x: Int) extends Base
-case class Dummy640(x: Int) extends Base
-case class Dummy641(x: Int) extends Base
-case class Dummy642(x: Int) extends Base
-case class Dummy643(x: Int) extends Base
-case class Dummy644(x: Int) extends Base
-case class Dummy645(x: Int) extends Base
-case class Dummy646(x: Int) extends Base
-case class Dummy647(x: Int) extends Base
-case class Dummy648(x: Int) extends Base
-case class Dummy649(x: Int) extends Base
-case class Dummy650(x: Int) extends Base
-case class Dummy651(x: Int) extends Base
-case class Dummy652(x: Int) extends Base
-case class Dummy653(x: Int) extends Base
-case class Dummy654(x: Int) extends Base
-case class Dummy655(x: Int) extends Base
-case class Dummy656(x: Int) extends Base
-case class Dummy657(x: Int) extends Base
-case class Dummy658(x: Int) extends Base
-case class Dummy659(x: Int) extends Base
-case class Dummy660(x: Int) extends Base
-case class Dummy661(x: Int) extends Base
-case class Dummy662(x: Int) extends Base
-case class Dummy663(x: Int) extends Base
-case class Dummy664(x: Int) extends Base
-case class Dummy665(x: Int) extends Base
-case class Dummy666(x: Int) extends Base
-case class Dummy667(x: Int) extends Base
-case class Dummy668(x: Int) extends Base
-case class Dummy669(x: Int) extends Base
-case class Dummy670(x: Int) extends Base
-case class Dummy671(x: Int) extends Base
-case class Dummy672(x: Int) extends Base
-case class Dummy673(x: Int) extends Base
-case class Dummy674(x: Int) extends Base
-case class Dummy675(x: Int) extends Base
-case class Dummy676(x: Int) extends Base
-case class Dummy677(x: Int) extends Base
-case class Dummy678(x: Int) extends Base
-case class Dummy679(x: Int) extends Base
-case class Dummy680(x: Int) extends Base
-case class Dummy681(x: Int) extends Base
-case class Dummy682(x: Int) extends Base
-case class Dummy683(x: Int) extends Base
-case class Dummy684(x: Int) extends Base
-case class Dummy685(x: Int) extends Base
-case class Dummy686(x: Int) extends Base
-case class Dummy687(x: Int) extends Base
-case class Dummy688(x: Int) extends Base
-case class Dummy689(x: Int) extends Base
-case class Dummy690(x: Int) extends Base
-case class Dummy691(x: Int) extends Base
-case class Dummy692(x: Int) extends Base
-case class Dummy693(x: Int) extends Base
-case class Dummy694(x: Int) extends Base
-case class Dummy695(x: Int) extends Base
-case class Dummy696(x: Int) extends Base
-case class Dummy697(x: Int) extends Base
-case class Dummy698(x: Int) extends Base
-case class Dummy699(x: Int) extends Base
-case class Dummy700(x: Int) extends Base
-case class Dummy701(x: Int) extends Base
-case class Dummy702(x: Int) extends Base
-case class Dummy703(x: Int) extends Base
-case class Dummy704(x: Int) extends Base
-case class Dummy705(x: Int) extends Base
-case class Dummy706(x: Int) extends Base
-case class Dummy707(x: Int) extends Base
-case class Dummy708(x: Int) extends Base
-case class Dummy709(x: Int) extends Base
-case class Dummy710(x: Int) extends Base
-case class Dummy711(x: Int) extends Base
-case class Dummy712(x: Int) extends Base
-case class Dummy713(x: Int) extends Base
-case class Dummy714(x: Int) extends Base
-case class Dummy715(x: Int) extends Base
-case class Dummy716(x: Int) extends Base
-case class Dummy717(x: Int) extends Base
-case class Dummy718(x: Int) extends Base
-case class Dummy719(x: Int) extends Base
-case class Dummy720(x: Int) extends Base
-case class Dummy721(x: Int) extends Base
-case class Dummy722(x: Int) extends Base
-case class Dummy723(x: Int) extends Base
-case class Dummy724(x: Int) extends Base
-case class Dummy725(x: Int) extends Base
-case class Dummy726(x: Int) extends Base
-case class Dummy727(x: Int) extends Base
-case class Dummy728(x: Int) extends Base
-case class Dummy729(x: Int) extends Base
-case class Dummy730(x: Int) extends Base
-case class Dummy731(x: Int) extends Base
-case class Dummy732(x: Int) extends Base
-case class Dummy733(x: Int) extends Base
-case class Dummy734(x: Int) extends Base
-case class Dummy735(x: Int) extends Base
-case class Dummy736(x: Int) extends Base
-case class Dummy737(x: Int) extends Base
-case class Dummy738(x: Int) extends Base
-case class Dummy739(x: Int) extends Base
-case class Dummy740(x: Int) extends Base
-case class Dummy741(x: Int) extends Base
-case class Dummy742(x: Int) extends Base
-case class Dummy743(x: Int) extends Base
-case class Dummy744(x: Int) extends Base
-case class Dummy745(x: Int) extends Base
-case class Dummy746(x: Int) extends Base
-case class Dummy747(x: Int) extends Base
-case class Dummy748(x: Int) extends Base
-case class Dummy749(x: Int) extends Base
-case class Dummy750(x: Int) extends Base
-case class Dummy751(x: Int) extends Base
-case class Dummy752(x: Int) extends Base
-case class Dummy753(x: Int) extends Base
-case class Dummy754(x: Int) extends Base
-case class Dummy755(x: Int) extends Base
-case class Dummy756(x: Int) extends Base
-case class Dummy757(x: Int) extends Base
-case class Dummy758(x: Int) extends Base
-case class Dummy759(x: Int) extends Base
-case class Dummy760(x: Int) extends Base
-case class Dummy761(x: Int) extends Base
-case class Dummy762(x: Int) extends Base
-case class Dummy763(x: Int) extends Base
-case class Dummy764(x: Int) extends Base
-case class Dummy765(x: Int) extends Base
-case class Dummy766(x: Int) extends Base
-case class Dummy767(x: Int) extends Base
-case class Dummy768(x: Int) extends Base
-case class Dummy769(x: Int) extends Base
-case class Dummy770(x: Int) extends Base
-case class Dummy771(x: Int) extends Base
-case class Dummy772(x: Int) extends Base
-case class Dummy773(x: Int) extends Base
-case class Dummy774(x: Int) extends Base
-case class Dummy775(x: Int) extends Base
-case class Dummy776(x: Int) extends Base
-case class Dummy777(x: Int) extends Base
-case class Dummy778(x: Int) extends Base
-case class Dummy779(x: Int) extends Base
-case class Dummy780(x: Int) extends Base
-case class Dummy781(x: Int) extends Base
-case class Dummy782(x: Int) extends Base
-case class Dummy783(x: Int) extends Base
-case class Dummy784(x: Int) extends Base
-case class Dummy785(x: Int) extends Base
-case class Dummy786(x: Int) extends Base
-case class Dummy787(x: Int) extends Base
-case class Dummy788(x: Int) extends Base
-case class Dummy789(x: Int) extends Base
-case class Dummy790(x: Int) extends Base
-case class Dummy791(x: Int) extends Base
-case class Dummy792(x: Int) extends Base
-case class Dummy793(x: Int) extends Base
-case class Dummy794(x: Int) extends Base
-case class Dummy795(x: Int) extends Base
-case class Dummy796(x: Int) extends Base
-case class Dummy797(x: Int) extends Base
-case class Dummy798(x: Int) extends Base
-case class Dummy799(x: Int) extends Base
-case class Dummy800(x: Int) extends Base
-case class Dummy801(x: Int) extends Base
-case class Dummy802(x: Int) extends Base
-case class Dummy803(x: Int) extends Base
-case class Dummy804(x: Int) extends Base
-case class Dummy805(x: Int) extends Base
-case class Dummy806(x: Int) extends Base
-case class Dummy807(x: Int) extends Base
-case class Dummy808(x: Int) extends Base
-case class Dummy809(x: Int) extends Base
-case class Dummy810(x: Int) extends Base
-case class Dummy811(x: Int) extends Base
-case class Dummy812(x: Int) extends Base
-case class Dummy813(x: Int) extends Base
-case class Dummy814(x: Int) extends Base
-case class Dummy815(x: Int) extends Base
-case class Dummy816(x: Int) extends Base
-case class Dummy817(x: Int) extends Base
-case class Dummy818(x: Int) extends Base
-case class Dummy819(x: Int) extends Base
-case class Dummy820(x: Int) extends Base
-case class Dummy821(x: Int) extends Base
-case class Dummy822(x: Int) extends Base
-case class Dummy823(x: Int) extends Base
-case class Dummy824(x: Int) extends Base
-case class Dummy825(x: Int) extends Base
-case class Dummy826(x: Int) extends Base
-case class Dummy827(x: Int) extends Base
-case class Dummy828(x: Int) extends Base
-case class Dummy829(x: Int) extends Base
-case class Dummy830(x: Int) extends Base
-case class Dummy831(x: Int) extends Base
-case class Dummy832(x: Int) extends Base
-case class Dummy833(x: Int) extends Base
-case class Dummy834(x: Int) extends Base
-case class Dummy835(x: Int) extends Base
-case class Dummy836(x: Int) extends Base
-case class Dummy837(x: Int) extends Base
-case class Dummy838(x: Int) extends Base
-case class Dummy839(x: Int) extends Base
-case class Dummy840(x: Int) extends Base
-case class Dummy841(x: Int) extends Base
-case class Dummy842(x: Int) extends Base
-case class Dummy843(x: Int) extends Base
-case class Dummy844(x: Int) extends Base
-case class Dummy845(x: Int) extends Base
-case class Dummy846(x: Int) extends Base
-case class Dummy847(x: Int) extends Base
-case class Dummy848(x: Int) extends Base
-case class Dummy849(x: Int) extends Base
-case class Dummy850(x: Int) extends Base
-case class Dummy851(x: Int) extends Base
-case class Dummy852(x: Int) extends Base
-case class Dummy853(x: Int) extends Base
-case class Dummy854(x: Int) extends Base
-case class Dummy855(x: Int) extends Base
-case class Dummy856(x: Int) extends Base
-case class Dummy857(x: Int) extends Base
-case class Dummy858(x: Int) extends Base
-case class Dummy859(x: Int) extends Base
-case class Dummy860(x: Int) extends Base
-case class Dummy861(x: Int) extends Base
-case class Dummy862(x: Int) extends Base
-case class Dummy863(x: Int) extends Base
-case class Dummy864(x: Int) extends Base
-case class Dummy865(x: Int) extends Base
-case class Dummy866(x: Int) extends Base
-case class Dummy867(x: Int) extends Base
-case class Dummy868(x: Int) extends Base
-case class Dummy869(x: Int) extends Base
-case class Dummy870(x: Int) extends Base
-case class Dummy871(x: Int) extends Base
-case class Dummy872(x: Int) extends Base
-case class Dummy873(x: Int) extends Base
-case class Dummy874(x: Int) extends Base
-case class Dummy875(x: Int) extends Base
-case class Dummy876(x: Int) extends Base
-case class Dummy877(x: Int) extends Base
-case class Dummy878(x: Int) extends Base
-case class Dummy879(x: Int) extends Base
-case class Dummy880(x: Int) extends Base
-case class Dummy881(x: Int) extends Base
-case class Dummy882(x: Int) extends Base
-case class Dummy883(x: Int) extends Base
-case class Dummy884(x: Int) extends Base
-case class Dummy885(x: Int) extends Base
-case class Dummy886(x: Int) extends Base
-case class Dummy887(x: Int) extends Base
-case class Dummy888(x: Int) extends Base
-case class Dummy889(x: Int) extends Base
-case class Dummy890(x: Int) extends Base
-case class Dummy891(x: Int) extends Base
-case class Dummy892(x: Int) extends Base
-case class Dummy893(x: Int) extends Base
-case class Dummy894(x: Int) extends Base
-case class Dummy895(x: Int) extends Base
-case class Dummy896(x: Int) extends Base
-case class Dummy897(x: Int) extends Base
-case class Dummy898(x: Int) extends Base
-case class Dummy899(x: Int) extends Base
-case class Dummy900(x: Int) extends Base
-case class Dummy901(x: Int) extends Base
-case class Dummy902(x: Int) extends Base
-case class Dummy903(x: Int) extends Base
-case class Dummy904(x: Int) extends Base
-case class Dummy905(x: Int) extends Base
-case class Dummy906(x: Int) extends Base
-case class Dummy907(x: Int) extends Base
-case class Dummy908(x: Int) extends Base
-case class Dummy909(x: Int) extends Base
-case class Dummy910(x: Int) extends Base
-case class Dummy911(x: Int) extends Base
-case class Dummy912(x: Int) extends Base
-case class Dummy913(x: Int) extends Base
-case class Dummy914(x: Int) extends Base
-case class Dummy915(x: Int) extends Base
-case class Dummy916(x: Int) extends Base
-case class Dummy917(x: Int) extends Base
-case class Dummy918(x: Int) extends Base
-case class Dummy919(x: Int) extends Base
-case class Dummy920(x: Int) extends Base
-case class Dummy921(x: Int) extends Base
-case class Dummy922(x: Int) extends Base
-case class Dummy923(x: Int) extends Base
-case class Dummy924(x: Int) extends Base
-case class Dummy925(x: Int) extends Base
-case class Dummy926(x: Int) extends Base
-case class Dummy927(x: Int) extends Base
-case class Dummy928(x: Int) extends Base
-case class Dummy929(x: Int) extends Base
-case class Dummy930(x: Int) extends Base
-case class Dummy931(x: Int) extends Base
-case class Dummy932(x: Int) extends Base
-case class Dummy933(x: Int) extends Base
-case class Dummy934(x: Int) extends Base
-case class Dummy935(x: Int) extends Base
-case class Dummy936(x: Int) extends Base
-case class Dummy937(x: Int) extends Base
-case class Dummy938(x: Int) extends Base
-case class Dummy939(x: Int) extends Base
-case class Dummy940(x: Int) extends Base
-case class Dummy941(x: Int) extends Base
-case class Dummy942(x: Int) extends Base
-case class Dummy943(x: Int) extends Base
-case class Dummy944(x: Int) extends Base
-case class Dummy945(x: Int) extends Base
-case class Dummy946(x: Int) extends Base
-case class Dummy947(x: Int) extends Base
-case class Dummy948(x: Int) extends Base
-case class Dummy949(x: Int) extends Base
-case class Dummy950(x: Int) extends Base
-case class Dummy951(x: Int) extends Base
-case class Dummy952(x: Int) extends Base
-case class Dummy953(x: Int) extends Base
-case class Dummy954(x: Int) extends Base
-case class Dummy955(x: Int) extends Base
-case class Dummy956(x: Int) extends Base
-case class Dummy957(x: Int) extends Base
-case class Dummy958(x: Int) extends Base
-case class Dummy959(x: Int) extends Base
-case class Dummy960(x: Int) extends Base
-case class Dummy961(x: Int) extends Base
-case class Dummy962(x: Int) extends Base
-case class Dummy963(x: Int) extends Base
-case class Dummy964(x: Int) extends Base
-case class Dummy965(x: Int) extends Base
-case class Dummy966(x: Int) extends Base
-case class Dummy967(x: Int) extends Base
-case class Dummy968(x: Int) extends Base
-case class Dummy969(x: Int) extends Base
-case class Dummy970(x: Int) extends Base
-case class Dummy971(x: Int) extends Base
-case class Dummy972(x: Int) extends Base
-case class Dummy973(x: Int) extends Base
-case class Dummy974(x: Int) extends Base
-case class Dummy975(x: Int) extends Base
-case class Dummy976(x: Int) extends Base
-case class Dummy977(x: Int) extends Base
-case class Dummy978(x: Int) extends Base
-case class Dummy979(x: Int) extends Base
-case class Dummy980(x: Int) extends Base
-case class Dummy981(x: Int) extends Base
-case class Dummy982(x: Int) extends Base
-case class Dummy983(x: Int) extends Base
-case class Dummy984(x: Int) extends Base
-case class Dummy985(x: Int) extends Base
-case class Dummy986(x: Int) extends Base
-case class Dummy987(x: Int) extends Base
-case class Dummy988(x: Int) extends Base
-case class Dummy989(x: Int) extends Base
-case class Dummy990(x: Int) extends Base
-case class Dummy991(x: Int) extends Base
-case class Dummy992(x: Int) extends Base
-case class Dummy993(x: Int) extends Base
-case class Dummy994(x: Int) extends Base
-case class Dummy995(x: Int) extends Base
-case class Dummy996(x: Int) extends Base
-case class Dummy997(x: Int) extends Base
-case class Dummy998(x: Int) extends Base
-case class Dummy999(x: Int) extends Base
-case class Dummy1000(x: Int) extends Base
-case class Dummy1001(x: Int) extends Base
-case class Dummy1002(x: Int) extends Base
-case class Dummy1003(x: Int) extends Base
-case class Dummy1004(x: Int) extends Base
-case class Dummy1005(x: Int) extends Base
-case class Dummy1006(x: Int) extends Base
-case class Dummy1007(x: Int) extends Base
-case class Dummy1008(x: Int) extends Base
-case class Dummy1009(x: Int) extends Base
-case class Dummy1010(x: Int) extends Base
-case class Dummy1011(x: Int) extends Base
-case class Dummy1012(x: Int) extends Base
-case class Dummy1013(x: Int) extends Base
-case class Dummy1014(x: Int) extends Base
-case class Dummy1015(x: Int) extends Base
-case class Dummy1016(x: Int) extends Base
-case class Dummy1017(x: Int) extends Base
-case class Dummy1018(x: Int) extends Base
-case class Dummy1019(x: Int) extends Base
-case class Dummy1020(x: Int) extends Base
-case class Dummy1021(x: Int) extends Base
-case class Dummy1022(x: Int) extends Base
-case class Dummy1023(x: Int) extends Base
-case class Dummy1024(x: Int) extends Base
-case class Dummy1025(x: Int) extends Base
-case class Dummy1026(x: Int) extends Base
-case class Dummy1027(x: Int) extends Base
-case class Dummy1028(x: Int) extends Base
-case class Dummy1029(x: Int) extends Base
-case class Dummy1030(x: Int) extends Base
-case class Dummy1031(x: Int) extends Base
-case class Dummy1032(x: Int) extends Base
-case class Dummy1033(x: Int) extends Base
-case class Dummy1034(x: Int) extends Base
-case class Dummy1035(x: Int) extends Base
-case class Dummy1036(x: Int) extends Base
-case class Dummy1037(x: Int) extends Base
-case class Dummy1038(x: Int) extends Base
-case class Dummy1039(x: Int) extends Base
-case class Dummy1040(x: Int) extends Base
-case class Dummy1041(x: Int) extends Base
-case class Dummy1042(x: Int) extends Base
-case class Dummy1043(x: Int) extends Base
-case class Dummy1044(x: Int) extends Base
-case class Dummy1045(x: Int) extends Base
-case class Dummy1046(x: Int) extends Base
-case class Dummy1047(x: Int) extends Base
-case class Dummy1048(x: Int) extends Base
-case class Dummy1049(x: Int) extends Base
-case class Dummy1050(x: Int) extends Base
-case class Dummy1051(x: Int) extends Base
-case class Dummy1052(x: Int) extends Base
-case class Dummy1053(x: Int) extends Base
-case class Dummy1054(x: Int) extends Base
-case class Dummy1055(x: Int) extends Base
-case class Dummy1056(x: Int) extends Base
-case class Dummy1057(x: Int) extends Base
-case class Dummy1058(x: Int) extends Base
-case class Dummy1059(x: Int) extends Base
-case class Dummy1060(x: Int) extends Base
-case class Dummy1061(x: Int) extends Base
-case class Dummy1062(x: Int) extends Base
-case class Dummy1063(x: Int) extends Base
-case class Dummy1064(x: Int) extends Base
-case class Dummy1065(x: Int) extends Base
-case class Dummy1066(x: Int) extends Base
-case class Dummy1067(x: Int) extends Base
-case class Dummy1068(x: Int) extends Base
-case class Dummy1069(x: Int) extends Base
-case class Dummy1070(x: Int) extends Base
-case class Dummy1071(x: Int) extends Base
-case class Dummy1072(x: Int) extends Base
-case class Dummy1073(x: Int) extends Base
-case class Dummy1074(x: Int) extends Base
-case class Dummy1075(x: Int) extends Base
-case class Dummy1076(x: Int) extends Base
-case class Dummy1077(x: Int) extends Base
-case class Dummy1078(x: Int) extends Base
-case class Dummy1079(x: Int) extends Base
-case class Dummy1080(x: Int) extends Base
-case class Dummy1081(x: Int) extends Base
-case class Dummy1082(x: Int) extends Base
-case class Dummy1083(x: Int) extends Base
-case class Dummy1084(x: Int) extends Base
-case class Dummy1085(x: Int) extends Base
-case class Dummy1086(x: Int) extends Base
-case class Dummy1087(x: Int) extends Base
-case class Dummy1088(x: Int) extends Base
-case class Dummy1089(x: Int) extends Base
-case class Dummy1090(x: Int) extends Base
-case class Dummy1091(x: Int) extends Base
-case class Dummy1092(x: Int) extends Base
-case class Dummy1093(x: Int) extends Base
-case class Dummy1094(x: Int) extends Base
-case class Dummy1095(x: Int) extends Base
-case class Dummy1096(x: Int) extends Base
-case class Dummy1097(x: Int) extends Base
-case class Dummy1098(x: Int) extends Base
-case class Dummy1099(x: Int) extends Base
-case class Dummy1100(x: Int) extends Base
-case class Dummy1101(x: Int) extends Base
-case class Dummy1102(x: Int) extends Base
-case class Dummy1103(x: Int) extends Base
-case class Dummy1104(x: Int) extends Base
-case class Dummy1105(x: Int) extends Base
-case class Dummy1106(x: Int) extends Base
-case class Dummy1107(x: Int) extends Base
-case class Dummy1108(x: Int) extends Base
-case class Dummy1109(x: Int) extends Base
-case class Dummy1110(x: Int) extends Base
-case class Dummy1111(x: Int) extends Base
-case class Dummy1112(x: Int) extends Base
-case class Dummy1113(x: Int) extends Base
-case class Dummy1114(x: Int) extends Base
-case class Dummy1115(x: Int) extends Base
-case class Dummy1116(x: Int) extends Base
-case class Dummy1117(x: Int) extends Base
-case class Dummy1118(x: Int) extends Base
-case class Dummy1119(x: Int) extends Base
-case class Dummy1120(x: Int) extends Base
-case class Dummy1121(x: Int) extends Base
-case class Dummy1122(x: Int) extends Base
-case class Dummy1123(x: Int) extends Base
-case class Dummy1124(x: Int) extends Base
-case class Dummy1125(x: Int) extends Base
-case class Dummy1126(x: Int) extends Base
-case class Dummy1127(x: Int) extends Base
-case class Dummy1128(x: Int) extends Base
-case class Dummy1129(x: Int) extends Base
-case class Dummy1130(x: Int) extends Base
-case class Dummy1131(x: Int) extends Base
-case class Dummy1132(x: Int) extends Base
-case class Dummy1133(x: Int) extends Base
-case class Dummy1134(x: Int) extends Base
-case class Dummy1135(x: Int) extends Base
-case class Dummy1136(x: Int) extends Base
-case class Dummy1137(x: Int) extends Base
-case class Dummy1138(x: Int) extends Base
-case class Dummy1139(x: Int) extends Base
-case class Dummy1140(x: Int) extends Base
-case class Dummy1141(x: Int) extends Base
-case class Dummy1142(x: Int) extends Base
-case class Dummy1143(x: Int) extends Base
-case class Dummy1144(x: Int) extends Base
-case class Dummy1145(x: Int) extends Base
-case class Dummy1146(x: Int) extends Base
-case class Dummy1147(x: Int) extends Base
-case class Dummy1148(x: Int) extends Base
-case class Dummy1149(x: Int) extends Base
-case class Dummy1150(x: Int) extends Base
-case class Dummy1151(x: Int) extends Base
-case class Dummy1152(x: Int) extends Base
-case class Dummy1153(x: Int) extends Base
-case class Dummy1154(x: Int) extends Base
-case class Dummy1155(x: Int) extends Base
-case class Dummy1156(x: Int) extends Base
-case class Dummy1157(x: Int) extends Base
-case class Dummy1158(x: Int) extends Base
-case class Dummy1159(x: Int) extends Base
-case class Dummy1160(x: Int) extends Base
-case class Dummy1161(x: Int) extends Base
-case class Dummy1162(x: Int) extends Base
-case class Dummy1163(x: Int) extends Base
-case class Dummy1164(x: Int) extends Base
-case class Dummy1165(x: Int) extends Base
-case class Dummy1166(x: Int) extends Base
-case class Dummy1167(x: Int) extends Base
-case class Dummy1168(x: Int) extends Base
-case class Dummy1169(x: Int) extends Base
-case class Dummy1170(x: Int) extends Base
-case class Dummy1171(x: Int) extends Base
-case class Dummy1172(x: Int) extends Base
-case class Dummy1173(x: Int) extends Base
-case class Dummy1174(x: Int) extends Base
-case class Dummy1175(x: Int) extends Base
-case class Dummy1176(x: Int) extends Base
-case class Dummy1177(x: Int) extends Base
-case class Dummy1178(x: Int) extends Base
-case class Dummy1179(x: Int) extends Base
-case class Dummy1180(x: Int) extends Base
-case class Dummy1181(x: Int) extends Base
-case class Dummy1182(x: Int) extends Base
-case class Dummy1183(x: Int) extends Base
-case class Dummy1184(x: Int) extends Base
-case class Dummy1185(x: Int) extends Base
-case class Dummy1186(x: Int) extends Base
-case class Dummy1187(x: Int) extends Base
-case class Dummy1188(x: Int) extends Base
-case class Dummy1189(x: Int) extends Base
-case class Dummy1190(x: Int) extends Base
-case class Dummy1191(x: Int) extends Base
-case class Dummy1192(x: Int) extends Base
-case class Dummy1193(x: Int) extends Base
-case class Dummy1194(x: Int) extends Base
-case class Dummy1195(x: Int) extends Base
-case class Dummy1196(x: Int) extends Base
-case class Dummy1197(x: Int) extends Base
-case class Dummy1198(x: Int) extends Base
-case class Dummy1199(x: Int) extends Base
-case class Dummy1200(x: Int) extends Base
-case class Dummy1201(x: Int) extends Base
-case class Dummy1202(x: Int) extends Base
-case class Dummy1203(x: Int) extends Base
-case class Dummy1204(x: Int) extends Base
-case class Dummy1205(x: Int) extends Base
-case class Dummy1206(x: Int) extends Base
-case class Dummy1207(x: Int) extends Base
-case class Dummy1208(x: Int) extends Base
-case class Dummy1209(x: Int) extends Base
-case class Dummy1210(x: Int) extends Base
-case class Dummy1211(x: Int) extends Base
-case class Dummy1212(x: Int) extends Base
-case class Dummy1213(x: Int) extends Base
-case class Dummy1214(x: Int) extends Base
-case class Dummy1215(x: Int) extends Base
-case class Dummy1216(x: Int) extends Base
-case class Dummy1217(x: Int) extends Base
-case class Dummy1218(x: Int) extends Base
-case class Dummy1219(x: Int) extends Base
-case class Dummy1220(x: Int) extends Base
-case class Dummy1221(x: Int) extends Base
-case class Dummy1222(x: Int) extends Base
-case class Dummy1223(x: Int) extends Base
-case class Dummy1224(x: Int) extends Base
-case class Dummy1225(x: Int) extends Base
-case class Dummy1226(x: Int) extends Base
-case class Dummy1227(x: Int) extends Base
-case class Dummy1228(x: Int) extends Base
-case class Dummy1229(x: Int) extends Base
-case class Dummy1230(x: Int) extends Base
-case class Dummy1231(x: Int) extends Base
-case class Dummy1232(x: Int) extends Base
-case class Dummy1233(x: Int) extends Base
-case class Dummy1234(x: Int) extends Base
-case class Dummy1235(x: Int) extends Base
-case class Dummy1236(x: Int) extends Base
-case class Dummy1237(x: Int) extends Base
-case class Dummy1238(x: Int) extends Base
-case class Dummy1239(x: Int) extends Base
-case class Dummy1240(x: Int) extends Base
-case class Dummy1241(x: Int) extends Base
-case class Dummy1242(x: Int) extends Base
-case class Dummy1243(x: Int) extends Base
-case class Dummy1244(x: Int) extends Base
-case class Dummy1245(x: Int) extends Base
-case class Dummy1246(x: Int) extends Base
-case class Dummy1247(x: Int) extends Base
-case class Dummy1248(x: Int) extends Base
-case class Dummy1249(x: Int) extends Base
-case class Dummy1250(x: Int) extends Base
-case class Dummy1251(x: Int) extends Base
-case class Dummy1252(x: Int) extends Base
-case class Dummy1253(x: Int) extends Base
-case class Dummy1254(x: Int) extends Base
-case class Dummy1255(x: Int) extends Base
-case class Dummy1256(x: Int) extends Base
-case class Dummy1257(x: Int) extends Base
-case class Dummy1258(x: Int) extends Base
-case class Dummy1259(x: Int) extends Base
-case class Dummy1260(x: Int) extends Base
-case class Dummy1261(x: Int) extends Base
-case class Dummy1262(x: Int) extends Base
-case class Dummy1263(x: Int) extends Base
-case class Dummy1264(x: Int) extends Base
-case class Dummy1265(x: Int) extends Base
-case class Dummy1266(x: Int) extends Base
-case class Dummy1267(x: Int) extends Base
-case class Dummy1268(x: Int) extends Base
-case class Dummy1269(x: Int) extends Base
-case class Dummy1270(x: Int) extends Base
-case class Dummy1271(x: Int) extends Base
-case class Dummy1272(x: Int) extends Base
-case class Dummy1273(x: Int) extends Base
-case class Dummy1274(x: Int) extends Base
-case class Dummy1275(x: Int) extends Base
-case class Dummy1276(x: Int) extends Base
-case class Dummy1277(x: Int) extends Base
-case class Dummy1278(x: Int) extends Base
-case class Dummy1279(x: Int) extends Base
-case class Dummy1280(x: Int) extends Base
-case class Dummy1281(x: Int) extends Base
-case class Dummy1282(x: Int) extends Base
-case class Dummy1283(x: Int) extends Base
-case class Dummy1284(x: Int) extends Base
-case class Dummy1285(x: Int) extends Base
-case class Dummy1286(x: Int) extends Base
-case class Dummy1287(x: Int) extends Base
-case class Dummy1288(x: Int) extends Base
-case class Dummy1289(x: Int) extends Base
-case class Dummy1290(x: Int) extends Base
-case class Dummy1291(x: Int) extends Base
-case class Dummy1292(x: Int) extends Base
-case class Dummy1293(x: Int) extends Base
-case class Dummy1294(x: Int) extends Base
-case class Dummy1295(x: Int) extends Base
-case class Dummy1296(x: Int) extends Base
-case class Dummy1297(x: Int) extends Base
-case class Dummy1298(x: Int) extends Base
-case class Dummy1299(x: Int) extends Base
-case class Dummy1300(x: Int) extends Base
-case class Dummy1301(x: Int) extends Base
-case class Dummy1302(x: Int) extends Base
-case class Dummy1303(x: Int) extends Base
-case class Dummy1304(x: Int) extends Base
-case class Dummy1305(x: Int) extends Base
-case class Dummy1306(x: Int) extends Base
-case class Dummy1307(x: Int) extends Base
-case class Dummy1308(x: Int) extends Base
-case class Dummy1309(x: Int) extends Base
-case class Dummy1310(x: Int) extends Base
-case class Dummy1311(x: Int) extends Base
-case class Dummy1312(x: Int) extends Base
-case class Dummy1313(x: Int) extends Base
-case class Dummy1314(x: Int) extends Base
-case class Dummy1315(x: Int) extends Base
-case class Dummy1316(x: Int) extends Base
-case class Dummy1317(x: Int) extends Base
-case class Dummy1318(x: Int) extends Base
-case class Dummy1319(x: Int) extends Base
-case class Dummy1320(x: Int) extends Base
-case class Dummy1321(x: Int) extends Base
-case class Dummy1322(x: Int) extends Base
-case class Dummy1323(x: Int) extends Base
-case class Dummy1324(x: Int) extends Base
-case class Dummy1325(x: Int) extends Base
-case class Dummy1326(x: Int) extends Base
-case class Dummy1327(x: Int) extends Base
-case class Dummy1328(x: Int) extends Base
-case class Dummy1329(x: Int) extends Base
-case class Dummy1330(x: Int) extends Base
-case class Dummy1331(x: Int) extends Base
-case class Dummy1332(x: Int) extends Base
-case class Dummy1333(x: Int) extends Base
-case class Dummy1334(x: Int) extends Base
-case class Dummy1335(x: Int) extends Base
-case class Dummy1336(x: Int) extends Base
-case class Dummy1337(x: Int) extends Base
-case class Dummy1338(x: Int) extends Base
-case class Dummy1339(x: Int) extends Base
-case class Dummy1340(x: Int) extends Base
-case class Dummy1341(x: Int) extends Base
-case class Dummy1342(x: Int) extends Base
-case class Dummy1343(x: Int) extends Base
-case class Dummy1344(x: Int) extends Base
-case class Dummy1345(x: Int) extends Base
-case class Dummy1346(x: Int) extends Base
-case class Dummy1347(x: Int) extends Base
-case class Dummy1348(x: Int) extends Base
-case class Dummy1349(x: Int) extends Base
-case class Dummy1350(x: Int) extends Base
-case class Dummy1351(x: Int) extends Base
-case class Dummy1352(x: Int) extends Base
-case class Dummy1353(x: Int) extends Base
-case class Dummy1354(x: Int) extends Base
-case class Dummy1355(x: Int) extends Base
-case class Dummy1356(x: Int) extends Base
-case class Dummy1357(x: Int) extends Base
-case class Dummy1358(x: Int) extends Base
-case class Dummy1359(x: Int) extends Base
-case class Dummy1360(x: Int) extends Base
-case class Dummy1361(x: Int) extends Base
-case class Dummy1362(x: Int) extends Base
-case class Dummy1363(x: Int) extends Base
-case class Dummy1364(x: Int) extends Base
-case class Dummy1365(x: Int) extends Base
-case class Dummy1366(x: Int) extends Base
-case class Dummy1367(x: Int) extends Base
-case class Dummy1368(x: Int) extends Base
-case class Dummy1369(x: Int) extends Base
-case class Dummy1370(x: Int) extends Base
-case class Dummy1371(x: Int) extends Base
-case class Dummy1372(x: Int) extends Base
-case class Dummy1373(x: Int) extends Base
-case class Dummy1374(x: Int) extends Base
-case class Dummy1375(x: Int) extends Base
-case class Dummy1376(x: Int) extends Base
-case class Dummy1377(x: Int) extends Base
-case class Dummy1378(x: Int) extends Base
-case class Dummy1379(x: Int) extends Base
-case class Dummy1380(x: Int) extends Base
-case class Dummy1381(x: Int) extends Base
-case class Dummy1382(x: Int) extends Base
-case class Dummy1383(x: Int) extends Base
-case class Dummy1384(x: Int) extends Base
-case class Dummy1385(x: Int) extends Base
-case class Dummy1386(x: Int) extends Base
-case class Dummy1387(x: Int) extends Base
-case class Dummy1388(x: Int) extends Base
-case class Dummy1389(x: Int) extends Base
-case class Dummy1390(x: Int) extends Base
-case class Dummy1391(x: Int) extends Base
-case class Dummy1392(x: Int) extends Base
-case class Dummy1393(x: Int) extends Base
-case class Dummy1394(x: Int) extends Base
-case class Dummy1395(x: Int) extends Base
-case class Dummy1396(x: Int) extends Base
-case class Dummy1397(x: Int) extends Base
-case class Dummy1398(x: Int) extends Base
-case class Dummy1399(x: Int) extends Base
-case class Dummy1400(x: Int) extends Base
-case class Dummy1401(x: Int) extends Base
-case class Dummy1402(x: Int) extends Base
-case class Dummy1403(x: Int) extends Base
-case class Dummy1404(x: Int) extends Base
-case class Dummy1405(x: Int) extends Base
-case class Dummy1406(x: Int) extends Base
-case class Dummy1407(x: Int) extends Base
-case class Dummy1408(x: Int) extends Base
-case class Dummy1409(x: Int) extends Base
-case class Dummy1410(x: Int) extends Base
-case class Dummy1411(x: Int) extends Base
-case class Dummy1412(x: Int) extends Base
-case class Dummy1413(x: Int) extends Base
-case class Dummy1414(x: Int) extends Base
-case class Dummy1415(x: Int) extends Base
-case class Dummy1416(x: Int) extends Base
-case class Dummy1417(x: Int) extends Base
-case class Dummy1418(x: Int) extends Base
-case class Dummy1419(x: Int) extends Base
-case class Dummy1420(x: Int) extends Base
-case class Dummy1421(x: Int) extends Base
-case class Dummy1422(x: Int) extends Base
-case class Dummy1423(x: Int) extends Base
-case class Dummy1424(x: Int) extends Base
-case class Dummy1425(x: Int) extends Base
-case class Dummy1426(x: Int) extends Base
-case class Dummy1427(x: Int) extends Base
-case class Dummy1428(x: Int) extends Base
-case class Dummy1429(x: Int) extends Base
-case class Dummy1430(x: Int) extends Base
-case class Dummy1431(x: Int) extends Base
-case class Dummy1432(x: Int) extends Base
-case class Dummy1433(x: Int) extends Base
-case class Dummy1434(x: Int) extends Base
-case class Dummy1435(x: Int) extends Base
-case class Dummy1436(x: Int) extends Base
-case class Dummy1437(x: Int) extends Base
-case class Dummy1438(x: Int) extends Base
-case class Dummy1439(x: Int) extends Base
-case class Dummy1440(x: Int) extends Base
-case class Dummy1441(x: Int) extends Base
-case class Dummy1442(x: Int) extends Base
-case class Dummy1443(x: Int) extends Base
-case class Dummy1444(x: Int) extends Base
-case class Dummy1445(x: Int) extends Base
-case class Dummy1446(x: Int) extends Base
-case class Dummy1447(x: Int) extends Base
-case class Dummy1448(x: Int) extends Base
-case class Dummy1449(x: Int) extends Base
-case class Dummy1450(x: Int) extends Base
-case class Dummy1451(x: Int) extends Base
-case class Dummy1452(x: Int) extends Base
-case class Dummy1453(x: Int) extends Base
-case class Dummy1454(x: Int) extends Base
-case class Dummy1455(x: Int) extends Base
-case class Dummy1456(x: Int) extends Base
-case class Dummy1457(x: Int) extends Base
-case class Dummy1458(x: Int) extends Base
-case class Dummy1459(x: Int) extends Base
-case class Dummy1460(x: Int) extends Base
-case class Dummy1461(x: Int) extends Base
-case class Dummy1462(x: Int) extends Base
-case class Dummy1463(x: Int) extends Base
-case class Dummy1464(x: Int) extends Base
-case class Dummy1465(x: Int) extends Base
-case class Dummy1466(x: Int) extends Base
-case class Dummy1467(x: Int) extends Base
-case class Dummy1468(x: Int) extends Base
-case class Dummy1469(x: Int) extends Base
-case class Dummy1470(x: Int) extends Base
-case class Dummy1471(x: Int) extends Base
-case class Dummy1472(x: Int) extends Base
-case class Dummy1473(x: Int) extends Base
-case class Dummy1474(x: Int) extends Base
-case class Dummy1475(x: Int) extends Base
-case class Dummy1476(x: Int) extends Base
-case class Dummy1477(x: Int) extends Base
-case class Dummy1478(x: Int) extends Base
-case class Dummy1479(x: Int) extends Base
-case class Dummy1480(x: Int) extends Base
-case class Dummy1481(x: Int) extends Base
-case class Dummy1482(x: Int) extends Base
-case class Dummy1483(x: Int) extends Base
-case class Dummy1484(x: Int) extends Base
-case class Dummy1485(x: Int) extends Base
-case class Dummy1486(x: Int) extends Base
-case class Dummy1487(x: Int) extends Base
-case class Dummy1488(x: Int) extends Base
-case class Dummy1489(x: Int) extends Base
-case class Dummy1490(x: Int) extends Base
-case class Dummy1491(x: Int) extends Base
-case class Dummy1492(x: Int) extends Base
-case class Dummy1493(x: Int) extends Base
-case class Dummy1494(x: Int) extends Base
-case class Dummy1495(x: Int) extends Base
-case class Dummy1496(x: Int) extends Base
-case class Dummy1497(x: Int) extends Base
-case class Dummy1498(x: Int) extends Base
-case class Dummy1499(x: Int) extends Base
-case class Dummy1500(x: Int) extends Base
-case class Dummy1501(x: Int) extends Base
-case class Dummy1502(x: Int) extends Base
-case class Dummy1503(x: Int) extends Base
-case class Dummy1504(x: Int) extends Base
-case class Dummy1505(x: Int) extends Base
-case class Dummy1506(x: Int) extends Base
-case class Dummy1507(x: Int) extends Base
-case class Dummy1508(x: Int) extends Base
-case class Dummy1509(x: Int) extends Base
-case class Dummy1510(x: Int) extends Base
-case class Dummy1511(x: Int) extends Base
-case class Dummy1512(x: Int) extends Base
-case class Dummy1513(x: Int) extends Base
-case class Dummy1514(x: Int) extends Base
-case class Dummy1515(x: Int) extends Base
-case class Dummy1516(x: Int) extends Base
-case class Dummy1517(x: Int) extends Base
-case class Dummy1518(x: Int) extends Base
-case class Dummy1519(x: Int) extends Base
-case class Dummy1520(x: Int) extends Base
-case class Dummy1521(x: Int) extends Base
-case class Dummy1522(x: Int) extends Base
-case class Dummy1523(x: Int) extends Base
-case class Dummy1524(x: Int) extends Base
-case class Dummy1525(x: Int) extends Base
-case class Dummy1526(x: Int) extends Base
-case class Dummy1527(x: Int) extends Base
-case class Dummy1528(x: Int) extends Base
-case class Dummy1529(x: Int) extends Base
-case class Dummy1530(x: Int) extends Base
-case class Dummy1531(x: Int) extends Base
-case class Dummy1532(x: Int) extends Base
-case class Dummy1533(x: Int) extends Base
-case class Dummy1534(x: Int) extends Base
-case class Dummy1535(x: Int) extends Base
-case class Dummy1536(x: Int) extends Base
-case class Dummy1537(x: Int) extends Base
-case class Dummy1538(x: Int) extends Base
-case class Dummy1539(x: Int) extends Base
-case class Dummy1540(x: Int) extends Base
-case class Dummy1541(x: Int) extends Base
-case class Dummy1542(x: Int) extends Base
-case class Dummy1543(x: Int) extends Base
-case class Dummy1544(x: Int) extends Base
-case class Dummy1545(x: Int) extends Base
-case class Dummy1546(x: Int) extends Base
-case class Dummy1547(x: Int) extends Base
-case class Dummy1548(x: Int) extends Base
-case class Dummy1549(x: Int) extends Base
-case class Dummy1550(x: Int) extends Base
-case class Dummy1551(x: Int) extends Base
-case class Dummy1552(x: Int) extends Base
-case class Dummy1553(x: Int) extends Base
-case class Dummy1554(x: Int) extends Base
-case class Dummy1555(x: Int) extends Base
-case class Dummy1556(x: Int) extends Base
-case class Dummy1557(x: Int) extends Base
-case class Dummy1558(x: Int) extends Base
-case class Dummy1559(x: Int) extends Base
-case class Dummy1560(x: Int) extends Base
-case class Dummy1561(x: Int) extends Base
-case class Dummy1562(x: Int) extends Base
-case class Dummy1563(x: Int) extends Base
-case class Dummy1564(x: Int) extends Base
-case class Dummy1565(x: Int) extends Base
-case class Dummy1566(x: Int) extends Base
-case class Dummy1567(x: Int) extends Base
-case class Dummy1568(x: Int) extends Base
-case class Dummy1569(x: Int) extends Base
-case class Dummy1570(x: Int) extends Base
-case class Dummy1571(x: Int) extends Base
-case class Dummy1572(x: Int) extends Base
-case class Dummy1573(x: Int) extends Base
-case class Dummy1574(x: Int) extends Base
-case class Dummy1575(x: Int) extends Base
-case class Dummy1576(x: Int) extends Base
-case class Dummy1577(x: Int) extends Base
-case class Dummy1578(x: Int) extends Base
-case class Dummy1579(x: Int) extends Base
-case class Dummy1580(x: Int) extends Base
-case class Dummy1581(x: Int) extends Base
-case class Dummy1582(x: Int) extends Base
-case class Dummy1583(x: Int) extends Base
-case class Dummy1584(x: Int) extends Base
-case class Dummy1585(x: Int) extends Base
-case class Dummy1586(x: Int) extends Base
-case class Dummy1587(x: Int) extends Base
-case class Dummy1588(x: Int) extends Base
-case class Dummy1589(x: Int) extends Base
-case class Dummy1590(x: Int) extends Base
-case class Dummy1591(x: Int) extends Base
-case class Dummy1592(x: Int) extends Base
-case class Dummy1593(x: Int) extends Base
-case class Dummy1594(x: Int) extends Base
-case class Dummy1595(x: Int) extends Base
-case class Dummy1596(x: Int) extends Base
-case class Dummy1597(x: Int) extends Base
-case class Dummy1598(x: Int) extends Base
-case class Dummy1599(x: Int) extends Base
-case class Dummy1600(x: Int) extends Base
-case class Dummy1601(x: Int) extends Base
-case class Dummy1602(x: Int) extends Base
-case class Dummy1603(x: Int) extends Base
-case class Dummy1604(x: Int) extends Base
-case class Dummy1605(x: Int) extends Base
-case class Dummy1606(x: Int) extends Base
-case class Dummy1607(x: Int) extends Base
-case class Dummy1608(x: Int) extends Base
-case class Dummy1609(x: Int) extends Base
-case class Dummy1610(x: Int) extends Base
-case class Dummy1611(x: Int) extends Base
-case class Dummy1612(x: Int) extends Base
-case class Dummy1613(x: Int) extends Base
-case class Dummy1614(x: Int) extends Base
-case class Dummy1615(x: Int) extends Base
-case class Dummy1616(x: Int) extends Base
-case class Dummy1617(x: Int) extends Base
-case class Dummy1618(x: Int) extends Base
-case class Dummy1619(x: Int) extends Base
-case class Dummy1620(x: Int) extends Base
-case class Dummy1621(x: Int) extends Base
-case class Dummy1622(x: Int) extends Base
-case class Dummy1623(x: Int) extends Base
-case class Dummy1624(x: Int) extends Base
-case class Dummy1625(x: Int) extends Base
-case class Dummy1626(x: Int) extends Base
-case class Dummy1627(x: Int) extends Base
-case class Dummy1628(x: Int) extends Base
-case class Dummy1629(x: Int) extends Base
-case class Dummy1630(x: Int) extends Base
-case class Dummy1631(x: Int) extends Base
-case class Dummy1632(x: Int) extends Base
-case class Dummy1633(x: Int) extends Base
-case class Dummy1634(x: Int) extends Base
-case class Dummy1635(x: Int) extends Base
-case class Dummy1636(x: Int) extends Base
-case class Dummy1637(x: Int) extends Base
-case class Dummy1638(x: Int) extends Base
-case class Dummy1639(x: Int) extends Base
-case class Dummy1640(x: Int) extends Base
-case class Dummy1641(x: Int) extends Base
-case class Dummy1642(x: Int) extends Base
-case class Dummy1643(x: Int) extends Base
-case class Dummy1644(x: Int) extends Base
-case class Dummy1645(x: Int) extends Base
-case class Dummy1646(x: Int) extends Base
-case class Dummy1647(x: Int) extends Base
-case class Dummy1648(x: Int) extends Base
-case class Dummy1649(x: Int) extends Base
-case class Dummy1650(x: Int) extends Base
-case class Dummy1651(x: Int) extends Base
-case class Dummy1652(x: Int) extends Base
-case class Dummy1653(x: Int) extends Base
-case class Dummy1654(x: Int) extends Base
-case class Dummy1655(x: Int) extends Base
-case class Dummy1656(x: Int) extends Base
-case class Dummy1657(x: Int) extends Base
-case class Dummy1658(x: Int) extends Base
-case class Dummy1659(x: Int) extends Base
-case class Dummy1660(x: Int) extends Base
-case class Dummy1661(x: Int) extends Base
-case class Dummy1662(x: Int) extends Base
-case class Dummy1663(x: Int) extends Base
-case class Dummy1664(x: Int) extends Base
-case class Dummy1665(x: Int) extends Base
-case class Dummy1666(x: Int) extends Base
-case class Dummy1667(x: Int) extends Base
-case class Dummy1668(x: Int) extends Base
-case class Dummy1669(x: Int) extends Base
-case class Dummy1670(x: Int) extends Base
-case class Dummy1671(x: Int) extends Base
-case class Dummy1672(x: Int) extends Base
-case class Dummy1673(x: Int) extends Base
-case class Dummy1674(x: Int) extends Base
-case class Dummy1675(x: Int) extends Base
-case class Dummy1676(x: Int) extends Base
-case class Dummy1677(x: Int) extends Base
-case class Dummy1678(x: Int) extends Base
-case class Dummy1679(x: Int) extends Base
-case class Dummy1680(x: Int) extends Base
-case class Dummy1681(x: Int) extends Base
-case class Dummy1682(x: Int) extends Base
-case class Dummy1683(x: Int) extends Base
-case class Dummy1684(x: Int) extends Base
-case class Dummy1685(x: Int) extends Base
-case class Dummy1686(x: Int) extends Base
-case class Dummy1687(x: Int) extends Base
-case class Dummy1688(x: Int) extends Base
-case class Dummy1689(x: Int) extends Base
-case class Dummy1690(x: Int) extends Base
-case class Dummy1691(x: Int) extends Base
-case class Dummy1692(x: Int) extends Base
-case class Dummy1693(x: Int) extends Base
-case class Dummy1694(x: Int) extends Base
-case class Dummy1695(x: Int) extends Base
-case class Dummy1696(x: Int) extends Base
-case class Dummy1697(x: Int) extends Base
-case class Dummy1698(x: Int) extends Base
-case class Dummy1699(x: Int) extends Base
-case class Dummy1700(x: Int) extends Base
-case class Dummy1701(x: Int) extends Base
-case class Dummy1702(x: Int) extends Base
-case class Dummy1703(x: Int) extends Base
-case class Dummy1704(x: Int) extends Base
-case class Dummy1705(x: Int) extends Base
-case class Dummy1706(x: Int) extends Base
-case class Dummy1707(x: Int) extends Base
-case class Dummy1708(x: Int) extends Base
-case class Dummy1709(x: Int) extends Base
-case class Dummy1710(x: Int) extends Base
-case class Dummy1711(x: Int) extends Base
-case class Dummy1712(x: Int) extends Base
-case class Dummy1713(x: Int) extends Base
-case class Dummy1714(x: Int) extends Base
-case class Dummy1715(x: Int) extends Base
-case class Dummy1716(x: Int) extends Base
-case class Dummy1717(x: Int) extends Base
-case class Dummy1718(x: Int) extends Base
-case class Dummy1719(x: Int) extends Base
-case class Dummy1720(x: Int) extends Base
-case class Dummy1721(x: Int) extends Base
-case class Dummy1722(x: Int) extends Base
-case class Dummy1723(x: Int) extends Base
-case class Dummy1724(x: Int) extends Base
-case class Dummy1725(x: Int) extends Base
-case class Dummy1726(x: Int) extends Base
-case class Dummy1727(x: Int) extends Base
-case class Dummy1728(x: Int) extends Base
-case class Dummy1729(x: Int) extends Base
-case class Dummy1730(x: Int) extends Base
-case class Dummy1731(x: Int) extends Base
-case class Dummy1732(x: Int) extends Base
-case class Dummy1733(x: Int) extends Base
-case class Dummy1734(x: Int) extends Base
-case class Dummy1735(x: Int) extends Base
-case class Dummy1736(x: Int) extends Base
-case class Dummy1737(x: Int) extends Base
-case class Dummy1738(x: Int) extends Base
-case class Dummy1739(x: Int) extends Base
-case class Dummy1740(x: Int) extends Base
-case class Dummy1741(x: Int) extends Base
-case class Dummy1742(x: Int) extends Base
-case class Dummy1743(x: Int) extends Base
-case class Dummy1744(x: Int) extends Base
-case class Dummy1745(x: Int) extends Base
-case class Dummy1746(x: Int) extends Base
-case class Dummy1747(x: Int) extends Base
-case class Dummy1748(x: Int) extends Base
-case class Dummy1749(x: Int) extends Base
-case class Dummy1750(x: Int) extends Base
-case class Dummy1751(x: Int) extends Base
-case class Dummy1752(x: Int) extends Base
-case class Dummy1753(x: Int) extends Base
-case class Dummy1754(x: Int) extends Base
-case class Dummy1755(x: Int) extends Base
-case class Dummy1756(x: Int) extends Base
-case class Dummy1757(x: Int) extends Base
-case class Dummy1758(x: Int) extends Base
-case class Dummy1759(x: Int) extends Base
-case class Dummy1760(x: Int) extends Base
-case class Dummy1761(x: Int) extends Base
-case class Dummy1762(x: Int) extends Base
-case class Dummy1763(x: Int) extends Base
-case class Dummy1764(x: Int) extends Base
-case class Dummy1765(x: Int) extends Base
-case class Dummy1766(x: Int) extends Base
-case class Dummy1767(x: Int) extends Base
-case class Dummy1768(x: Int) extends Base
-case class Dummy1769(x: Int) extends Base
-case class Dummy1770(x: Int) extends Base
-case class Dummy1771(x: Int) extends Base
-case class Dummy1772(x: Int) extends Base
-case class Dummy1773(x: Int) extends Base
-case class Dummy1774(x: Int) extends Base
-case class Dummy1775(x: Int) extends Base
-case class Dummy1776(x: Int) extends Base
-case class Dummy1777(x: Int) extends Base
-case class Dummy1778(x: Int) extends Base
-case class Dummy1779(x: Int) extends Base
-case class Dummy1780(x: Int) extends Base
-case class Dummy1781(x: Int) extends Base
-case class Dummy1782(x: Int) extends Base
-case class Dummy1783(x: Int) extends Base
-case class Dummy1784(x: Int) extends Base
-case class Dummy1785(x: Int) extends Base
-case class Dummy1786(x: Int) extends Base
-case class Dummy1787(x: Int) extends Base
-case class Dummy1788(x: Int) extends Base
-case class Dummy1789(x: Int) extends Base
-case class Dummy1790(x: Int) extends Base
-case class Dummy1791(x: Int) extends Base
-case class Dummy1792(x: Int) extends Base
-case class Dummy1793(x: Int) extends Base
-case class Dummy1794(x: Int) extends Base
-case class Dummy1795(x: Int) extends Base
-case class Dummy1796(x: Int) extends Base
-case class Dummy1797(x: Int) extends Base
-case class Dummy1798(x: Int) extends Base
-case class Dummy1799(x: Int) extends Base
-case class Dummy1800(x: Int) extends Base
-case class Dummy1801(x: Int) extends Base
-case class Dummy1802(x: Int) extends Base
-case class Dummy1803(x: Int) extends Base
-case class Dummy1804(x: Int) extends Base
-case class Dummy1805(x: Int) extends Base
-case class Dummy1806(x: Int) extends Base
-case class Dummy1807(x: Int) extends Base
-case class Dummy1808(x: Int) extends Base
-case class Dummy1809(x: Int) extends Base
-case class Dummy1810(x: Int) extends Base
-case class Dummy1811(x: Int) extends Base
-case class Dummy1812(x: Int) extends Base
-case class Dummy1813(x: Int) extends Base
-case class Dummy1814(x: Int) extends Base
-case class Dummy1815(x: Int) extends Base
-case class Dummy1816(x: Int) extends Base
-case class Dummy1817(x: Int) extends Base
-case class Dummy1818(x: Int) extends Base
-case class Dummy1819(x: Int) extends Base
-case class Dummy1820(x: Int) extends Base
-case class Dummy1821(x: Int) extends Base
-case class Dummy1822(x: Int) extends Base
-case class Dummy1823(x: Int) extends Base
-case class Dummy1824(x: Int) extends Base
-case class Dummy1825(x: Int) extends Base
-case class Dummy1826(x: Int) extends Base
-case class Dummy1827(x: Int) extends Base
-case class Dummy1828(x: Int) extends Base
-case class Dummy1829(x: Int) extends Base
-case class Dummy1830(x: Int) extends Base
-case class Dummy1831(x: Int) extends Base
-case class Dummy1832(x: Int) extends Base
-case class Dummy1833(x: Int) extends Base
-case class Dummy1834(x: Int) extends Base
-case class Dummy1835(x: Int) extends Base
-case class Dummy1836(x: Int) extends Base
-case class Dummy1837(x: Int) extends Base
-case class Dummy1838(x: Int) extends Base
-case class Dummy1839(x: Int) extends Base
-case class Dummy1840(x: Int) extends Base
-case class Dummy1841(x: Int) extends Base
-case class Dummy1842(x: Int) extends Base
-case class Dummy1843(x: Int) extends Base
-case class Dummy1844(x: Int) extends Base
-case class Dummy1845(x: Int) extends Base
-case class Dummy1846(x: Int) extends Base
-case class Dummy1847(x: Int) extends Base
-case class Dummy1848(x: Int) extends Base
-case class Dummy1849(x: Int) extends Base
-case class Dummy1850(x: Int) extends Base
-case class Dummy1851(x: Int) extends Base
-case class Dummy1852(x: Int) extends Base
-case class Dummy1853(x: Int) extends Base
-case class Dummy1854(x: Int) extends Base
-case class Dummy1855(x: Int) extends Base
-case class Dummy1856(x: Int) extends Base
-case class Dummy1857(x: Int) extends Base
-case class Dummy1858(x: Int) extends Base
-case class Dummy1859(x: Int) extends Base
-case class Dummy1860(x: Int) extends Base
-case class Dummy1861(x: Int) extends Base
-case class Dummy1862(x: Int) extends Base
-case class Dummy1863(x: Int) extends Base
-case class Dummy1864(x: Int) extends Base
-case class Dummy1865(x: Int) extends Base
-case class Dummy1866(x: Int) extends Base
-case class Dummy1867(x: Int) extends Base
-case class Dummy1868(x: Int) extends Base
-case class Dummy1869(x: Int) extends Base
-case class Dummy1870(x: Int) extends Base
-case class Dummy1871(x: Int) extends Base
-case class Dummy1872(x: Int) extends Base
-case class Dummy1873(x: Int) extends Base
-case class Dummy1874(x: Int) extends Base
-case class Dummy1875(x: Int) extends Base
-case class Dummy1876(x: Int) extends Base
-case class Dummy1877(x: Int) extends Base
-case class Dummy1878(x: Int) extends Base
-case class Dummy1879(x: Int) extends Base
-case class Dummy1880(x: Int) extends Base
-case class Dummy1881(x: Int) extends Base
-case class Dummy1882(x: Int) extends Base
-case class Dummy1883(x: Int) extends Base
-case class Dummy1884(x: Int) extends Base
-case class Dummy1885(x: Int) extends Base
-case class Dummy1886(x: Int) extends Base
-case class Dummy1887(x: Int) extends Base
-case class Dummy1888(x: Int) extends Base
-case class Dummy1889(x: Int) extends Base
-case class Dummy1890(x: Int) extends Base
-case class Dummy1891(x: Int) extends Base
-case class Dummy1892(x: Int) extends Base
-case class Dummy1893(x: Int) extends Base
-case class Dummy1894(x: Int) extends Base
-case class Dummy1895(x: Int) extends Base
-case class Dummy1896(x: Int) extends Base
-case class Dummy1897(x: Int) extends Base
-case class Dummy1898(x: Int) extends Base
-case class Dummy1899(x: Int) extends Base
-case class Dummy1900(x: Int) extends Base
-case class Dummy1901(x: Int) extends Base
-case class Dummy1902(x: Int) extends Base
-case class Dummy1903(x: Int) extends Base
-case class Dummy1904(x: Int) extends Base
-case class Dummy1905(x: Int) extends Base
-case class Dummy1906(x: Int) extends Base
-case class Dummy1907(x: Int) extends Base
-case class Dummy1908(x: Int) extends Base
-case class Dummy1909(x: Int) extends Base
-case class Dummy1910(x: Int) extends Base
-case class Dummy1911(x: Int) extends Base
-case class Dummy1912(x: Int) extends Base
-case class Dummy1913(x: Int) extends Base
-case class Dummy1914(x: Int) extends Base
-case class Dummy1915(x: Int) extends Base
-case class Dummy1916(x: Int) extends Base
-case class Dummy1917(x: Int) extends Base
-case class Dummy1918(x: Int) extends Base
-case class Dummy1919(x: Int) extends Base
-case class Dummy1920(x: Int) extends Base
-case class Dummy1921(x: Int) extends Base
-case class Dummy1922(x: Int) extends Base
-case class Dummy1923(x: Int) extends Base
-case class Dummy1924(x: Int) extends Base
-case class Dummy1925(x: Int) extends Base
-case class Dummy1926(x: Int) extends Base
-case class Dummy1927(x: Int) extends Base
-case class Dummy1928(x: Int) extends Base
-case class Dummy1929(x: Int) extends Base
-case class Dummy1930(x: Int) extends Base
-case class Dummy1931(x: Int) extends Base
-case class Dummy1932(x: Int) extends Base
-case class Dummy1933(x: Int) extends Base
-case class Dummy1934(x: Int) extends Base
-case class Dummy1935(x: Int) extends Base
-case class Dummy1936(x: Int) extends Base
-case class Dummy1937(x: Int) extends Base
-case class Dummy1938(x: Int) extends Base
-case class Dummy1939(x: Int) extends Base
-case class Dummy1940(x: Int) extends Base
-case class Dummy1941(x: Int) extends Base
-case class Dummy1942(x: Int) extends Base
-case class Dummy1943(x: Int) extends Base
-case class Dummy1944(x: Int) extends Base
-case class Dummy1945(x: Int) extends Base
-case class Dummy1946(x: Int) extends Base
-case class Dummy1947(x: Int) extends Base
-case class Dummy1948(x: Int) extends Base
-case class Dummy1949(x: Int) extends Base
-case class Dummy1950(x: Int) extends Base
-case class Dummy1951(x: Int) extends Base
-case class Dummy1952(x: Int) extends Base
-case class Dummy1953(x: Int) extends Base
-case class Dummy1954(x: Int) extends Base
-case class Dummy1955(x: Int) extends Base
-case class Dummy1956(x: Int) extends Base
-case class Dummy1957(x: Int) extends Base
-case class Dummy1958(x: Int) extends Base
-case class Dummy1959(x: Int) extends Base
-case class Dummy1960(x: Int) extends Base
-case class Dummy1961(x: Int) extends Base
-case class Dummy1962(x: Int) extends Base
-case class Dummy1963(x: Int) extends Base
-case class Dummy1964(x: Int) extends Base
-case class Dummy1965(x: Int) extends Base
-case class Dummy1966(x: Int) extends Base
-case class Dummy1967(x: Int) extends Base
-case class Dummy1968(x: Int) extends Base
-case class Dummy1969(x: Int) extends Base
-case class Dummy1970(x: Int) extends Base
-case class Dummy1971(x: Int) extends Base
-case class Dummy1972(x: Int) extends Base
-case class Dummy1973(x: Int) extends Base
-case class Dummy1974(x: Int) extends Base
-case class Dummy1975(x: Int) extends Base
-case class Dummy1976(x: Int) extends Base
-case class Dummy1977(x: Int) extends Base
-case class Dummy1978(x: Int) extends Base
-case class Dummy1979(x: Int) extends Base
-case class Dummy1980(x: Int) extends Base
-case class Dummy1981(x: Int) extends Base
-case class Dummy1982(x: Int) extends Base
-case class Dummy1983(x: Int) extends Base
-case class Dummy1984(x: Int) extends Base
-case class Dummy1985(x: Int) extends Base
-case class Dummy1986(x: Int) extends Base
-case class Dummy1987(x: Int) extends Base
-case class Dummy1988(x: Int) extends Base
-case class Dummy1989(x: Int) extends Base
-case class Dummy1990(x: Int) extends Base
-case class Dummy1991(x: Int) extends Base
-case class Dummy1992(x: Int) extends Base
-case class Dummy1993(x: Int) extends Base
-case class Dummy1994(x: Int) extends Base
-case class Dummy1995(x: Int) extends Base
-case class Dummy1996(x: Int) extends Base
-case class Dummy1997(x: Int) extends Base
-case class Dummy1998(x: Int) extends Base
-case class Dummy1999(x: Int) extends Base
-def test(y: Base) = y match {
- case Dummy0(p) => p
- case Dummy1(p) => p
- case Dummy2(p) => p
- case Dummy3(p) => p
- case Dummy4(p) => p
- case Dummy5(p) => p
- case Dummy6(p) => p
- case Dummy7(p) => p
- case Dummy8(p) => p
- case Dummy9(p) => p
- case Dummy10(p) => p
- case Dummy11(p) => p
- case Dummy12(p) => p
- case Dummy13(p) => p
- case Dummy14(p) => p
- case Dummy15(p) => p
- case Dummy16(p) => p
- case Dummy17(p) => p
- case Dummy18(p) => p
- case Dummy19(p) => p
- case Dummy20(p) => p
- case Dummy21(p) => p
- case Dummy22(p) => p
- case Dummy23(p) => p
- case Dummy24(p) => p
- case Dummy25(p) => p
- case Dummy26(p) => p
- case Dummy27(p) => p
- case Dummy28(p) => p
- case Dummy29(p) => p
- case Dummy30(p) => p
- case Dummy31(p) => p
- case Dummy32(p) => p
- case Dummy33(p) => p
- case Dummy34(p) => p
- case Dummy35(p) => p
- case Dummy36(p) => p
- case Dummy37(p) => p
- case Dummy38(p) => p
- case Dummy39(p) => p
- case Dummy40(p) => p
- case Dummy41(p) => p
- case Dummy42(p) => p
- case Dummy43(p) => p
- case Dummy44(p) => p
- case Dummy45(p) => p
- case Dummy46(p) => p
- case Dummy47(p) => p
- case Dummy48(p) => p
- case Dummy49(p) => p
- case Dummy50(p) => p
- case Dummy51(p) => p
- case Dummy52(p) => p
- case Dummy53(p) => p
- case Dummy54(p) => p
- case Dummy55(p) => p
- case Dummy56(p) => p
- case Dummy57(p) => p
- case Dummy58(p) => p
- case Dummy59(p) => p
- case Dummy60(p) => p
- case Dummy61(p) => p
- case Dummy62(p) => p
- case Dummy63(p) => p
- case Dummy64(p) => p
- case Dummy65(p) => p
- case Dummy66(p) => p
- case Dummy67(p) => p
- case Dummy68(p) => p
- case Dummy69(p) => p
- case Dummy70(p) => p
- case Dummy71(p) => p
- case Dummy72(p) => p
- case Dummy73(p) => p
- case Dummy74(p) => p
- case Dummy75(p) => p
- case Dummy76(p) => p
- case Dummy77(p) => p
- case Dummy78(p) => p
- case Dummy79(p) => p
- case Dummy80(p) => p
- case Dummy81(p) => p
- case Dummy82(p) => p
- case Dummy83(p) => p
- case Dummy84(p) => p
- case Dummy85(p) => p
- case Dummy86(p) => p
- case Dummy87(p) => p
- case Dummy88(p) => p
- case Dummy89(p) => p
- case Dummy90(p) => p
- case Dummy91(p) => p
- case Dummy92(p) => p
- case Dummy93(p) => p
- case Dummy94(p) => p
- case Dummy95(p) => p
- case Dummy96(p) => p
- case Dummy97(p) => p
- case Dummy98(p) => p
- case Dummy99(p) => p
- case Dummy100(p) => p
- case Dummy101(p) => p
- case Dummy102(p) => p
- case Dummy103(p) => p
- case Dummy104(p) => p
- case Dummy105(p) => p
- case Dummy106(p) => p
- case Dummy107(p) => p
- case Dummy108(p) => p
- case Dummy109(p) => p
- case Dummy110(p) => p
- case Dummy111(p) => p
- case Dummy112(p) => p
- case Dummy113(p) => p
- case Dummy114(p) => p
- case Dummy115(p) => p
- case Dummy116(p) => p
- case Dummy117(p) => p
- case Dummy118(p) => p
- case Dummy119(p) => p
- case Dummy120(p) => p
- case Dummy121(p) => p
- case Dummy122(p) => p
- case Dummy123(p) => p
- case Dummy124(p) => p
- case Dummy125(p) => p
- case Dummy126(p) => p
- case Dummy127(p) => p
- case Dummy128(p) => p
- case Dummy129(p) => p
- case Dummy130(p) => p
- case Dummy131(p) => p
- case Dummy132(p) => p
- case Dummy133(p) => p
- case Dummy134(p) => p
- case Dummy135(p) => p
- case Dummy136(p) => p
- case Dummy137(p) => p
- case Dummy138(p) => p
- case Dummy139(p) => p
- case Dummy140(p) => p
- case Dummy141(p) => p
- case Dummy142(p) => p
- case Dummy143(p) => p
- case Dummy144(p) => p
- case Dummy145(p) => p
- case Dummy146(p) => p
- case Dummy147(p) => p
- case Dummy148(p) => p
- case Dummy149(p) => p
- case Dummy150(p) => p
- case Dummy151(p) => p
- case Dummy152(p) => p
- case Dummy153(p) => p
- case Dummy154(p) => p
- case Dummy155(p) => p
- case Dummy156(p) => p
- case Dummy157(p) => p
- case Dummy158(p) => p
- case Dummy159(p) => p
- case Dummy160(p) => p
- case Dummy161(p) => p
- case Dummy162(p) => p
- case Dummy163(p) => p
- case Dummy164(p) => p
- case Dummy165(p) => p
- case Dummy166(p) => p
- case Dummy167(p) => p
- case Dummy168(p) => p
- case Dummy169(p) => p
- case Dummy170(p) => p
- case Dummy171(p) => p
- case Dummy172(p) => p
- case Dummy173(p) => p
- case Dummy174(p) => p
- case Dummy175(p) => p
- case Dummy176(p) => p
- case Dummy177(p) => p
- case Dummy178(p) => p
- case Dummy179(p) => p
- case Dummy180(p) => p
- case Dummy181(p) => p
- case Dummy182(p) => p
- case Dummy183(p) => p
- case Dummy184(p) => p
- case Dummy185(p) => p
- case Dummy186(p) => p
- case Dummy187(p) => p
- case Dummy188(p) => p
- case Dummy189(p) => p
- case Dummy190(p) => p
- case Dummy191(p) => p
- case Dummy192(p) => p
- case Dummy193(p) => p
- case Dummy194(p) => p
- case Dummy195(p) => p
- case Dummy196(p) => p
- case Dummy197(p) => p
- case Dummy198(p) => p
- case Dummy199(p) => p
- case Dummy200(p) => p
- case Dummy201(p) => p
- case Dummy202(p) => p
- case Dummy203(p) => p
- case Dummy204(p) => p
- case Dummy205(p) => p
- case Dummy206(p) => p
- case Dummy207(p) => p
- case Dummy208(p) => p
- case Dummy209(p) => p
- case Dummy210(p) => p
- case Dummy211(p) => p
- case Dummy212(p) => p
- case Dummy213(p) => p
- case Dummy214(p) => p
- case Dummy215(p) => p
- case Dummy216(p) => p
- case Dummy217(p) => p
- case Dummy218(p) => p
- case Dummy219(p) => p
- case Dummy220(p) => p
- case Dummy221(p) => p
- case Dummy222(p) => p
- case Dummy223(p) => p
- case Dummy224(p) => p
- case Dummy225(p) => p
- case Dummy226(p) => p
- case Dummy227(p) => p
- case Dummy228(p) => p
- case Dummy229(p) => p
- case Dummy230(p) => p
- case Dummy231(p) => p
- case Dummy232(p) => p
- case Dummy233(p) => p
- case Dummy234(p) => p
- case Dummy235(p) => p
- case Dummy236(p) => p
- case Dummy237(p) => p
- case Dummy238(p) => p
- case Dummy239(p) => p
- case Dummy240(p) => p
- case Dummy241(p) => p
- case Dummy242(p) => p
- case Dummy243(p) => p
- case Dummy244(p) => p
- case Dummy245(p) => p
- case Dummy246(p) => p
- case Dummy247(p) => p
- case Dummy248(p) => p
- case Dummy249(p) => p
- case Dummy250(p) => p
- case Dummy251(p) => p
- case Dummy252(p) => p
- case Dummy253(p) => p
- case Dummy254(p) => p
- case Dummy255(p) => p
- case Dummy256(p) => p
- case Dummy257(p) => p
- case Dummy258(p) => p
- case Dummy259(p) => p
- case Dummy260(p) => p
- case Dummy261(p) => p
- case Dummy262(p) => p
- case Dummy263(p) => p
- case Dummy264(p) => p
- case Dummy265(p) => p
- case Dummy266(p) => p
- case Dummy267(p) => p
- case Dummy268(p) => p
- case Dummy269(p) => p
- case Dummy270(p) => p
- case Dummy271(p) => p
- case Dummy272(p) => p
- case Dummy273(p) => p
- case Dummy274(p) => p
- case Dummy275(p) => p
- case Dummy276(p) => p
- case Dummy277(p) => p
- case Dummy278(p) => p
- case Dummy279(p) => p
- case Dummy280(p) => p
- case Dummy281(p) => p
- case Dummy282(p) => p
- case Dummy283(p) => p
- case Dummy284(p) => p
- case Dummy285(p) => p
- case Dummy286(p) => p
- case Dummy287(p) => p
- case Dummy288(p) => p
- case Dummy289(p) => p
- case Dummy290(p) => p
- case Dummy291(p) => p
- case Dummy292(p) => p
- case Dummy293(p) => p
- case Dummy294(p) => p
- case Dummy295(p) => p
- case Dummy296(p) => p
- case Dummy297(p) => p
- case Dummy298(p) => p
- case Dummy299(p) => p
- case Dummy300(p) => p
- case Dummy301(p) => p
- case Dummy302(p) => p
- case Dummy303(p) => p
- case Dummy304(p) => p
- case Dummy305(p) => p
- case Dummy306(p) => p
- case Dummy307(p) => p
- case Dummy308(p) => p
- case Dummy309(p) => p
- case Dummy310(p) => p
- case Dummy311(p) => p
- case Dummy312(p) => p
- case Dummy313(p) => p
- case Dummy314(p) => p
- case Dummy315(p) => p
- case Dummy316(p) => p
- case Dummy317(p) => p
- case Dummy318(p) => p
- case Dummy319(p) => p
- case Dummy320(p) => p
- case Dummy321(p) => p
- case Dummy322(p) => p
- case Dummy323(p) => p
- case Dummy324(p) => p
- case Dummy325(p) => p
- case Dummy326(p) => p
- case Dummy327(p) => p
- case Dummy328(p) => p
- case Dummy329(p) => p
- case Dummy330(p) => p
- case Dummy331(p) => p
- case Dummy332(p) => p
- case Dummy333(p) => p
- case Dummy334(p) => p
- case Dummy335(p) => p
- case Dummy336(p) => p
- case Dummy337(p) => p
- case Dummy338(p) => p
- case Dummy339(p) => p
- case Dummy340(p) => p
- case Dummy341(p) => p
- case Dummy342(p) => p
- case Dummy343(p) => p
- case Dummy344(p) => p
- case Dummy345(p) => p
- case Dummy346(p) => p
- case Dummy347(p) => p
- case Dummy348(p) => p
- case Dummy349(p) => p
- case Dummy350(p) => p
- case Dummy351(p) => p
- case Dummy352(p) => p
- case Dummy353(p) => p
- case Dummy354(p) => p
- case Dummy355(p) => p
- case Dummy356(p) => p
- case Dummy357(p) => p
- case Dummy358(p) => p
- case Dummy359(p) => p
- case Dummy360(p) => p
- case Dummy361(p) => p
- case Dummy362(p) => p
- case Dummy363(p) => p
- case Dummy364(p) => p
- case Dummy365(p) => p
- case Dummy366(p) => p
- case Dummy367(p) => p
- case Dummy368(p) => p
- case Dummy369(p) => p
- case Dummy370(p) => p
- case Dummy371(p) => p
- case Dummy372(p) => p
- case Dummy373(p) => p
- case Dummy374(p) => p
- case Dummy375(p) => p
- case Dummy376(p) => p
- case Dummy377(p) => p
- case Dummy378(p) => p
- case Dummy379(p) => p
- case Dummy380(p) => p
- case Dummy381(p) => p
- case Dummy382(p) => p
- case Dummy383(p) => p
- case Dummy384(p) => p
- case Dummy385(p) => p
- case Dummy386(p) => p
- case Dummy387(p) => p
- case Dummy388(p) => p
- case Dummy389(p) => p
- case Dummy390(p) => p
- case Dummy391(p) => p
- case Dummy392(p) => p
- case Dummy393(p) => p
- case Dummy394(p) => p
- case Dummy395(p) => p
- case Dummy396(p) => p
- case Dummy397(p) => p
- case Dummy398(p) => p
- case Dummy399(p) => p
- case Dummy400(p) => p
- case Dummy401(p) => p
- case Dummy402(p) => p
- case Dummy403(p) => p
- case Dummy404(p) => p
- case Dummy405(p) => p
- case Dummy406(p) => p
- case Dummy407(p) => p
- case Dummy408(p) => p
- case Dummy409(p) => p
- case Dummy410(p) => p
- case Dummy411(p) => p
- case Dummy412(p) => p
- case Dummy413(p) => p
- case Dummy414(p) => p
- case Dummy415(p) => p
- case Dummy416(p) => p
- case Dummy417(p) => p
- case Dummy418(p) => p
- case Dummy419(p) => p
- case Dummy420(p) => p
- case Dummy421(p) => p
- case Dummy422(p) => p
- case Dummy423(p) => p
- case Dummy424(p) => p
- case Dummy425(p) => p
- case Dummy426(p) => p
- case Dummy427(p) => p
- case Dummy428(p) => p
- case Dummy429(p) => p
- case Dummy430(p) => p
- case Dummy431(p) => p
- case Dummy432(p) => p
- case Dummy433(p) => p
- case Dummy434(p) => p
- case Dummy435(p) => p
- case Dummy436(p) => p
- case Dummy437(p) => p
- case Dummy438(p) => p
- case Dummy439(p) => p
- case Dummy440(p) => p
- case Dummy441(p) => p
- case Dummy442(p) => p
- case Dummy443(p) => p
- case Dummy444(p) => p
- case Dummy445(p) => p
- case Dummy446(p) => p
- case Dummy447(p) => p
- case Dummy448(p) => p
- case Dummy449(p) => p
- case Dummy450(p) => p
- case Dummy451(p) => p
- case Dummy452(p) => p
- case Dummy453(p) => p
- case Dummy454(p) => p
- case Dummy455(p) => p
- case Dummy456(p) => p
- case Dummy457(p) => p
- case Dummy458(p) => p
- case Dummy459(p) => p
- case Dummy460(p) => p
- case Dummy461(p) => p
- case Dummy462(p) => p
- case Dummy463(p) => p
- case Dummy464(p) => p
- case Dummy465(p) => p
- case Dummy466(p) => p
- case Dummy467(p) => p
- case Dummy468(p) => p
- case Dummy469(p) => p
- case Dummy470(p) => p
- case Dummy471(p) => p
- case Dummy472(p) => p
- case Dummy473(p) => p
- case Dummy474(p) => p
- case Dummy475(p) => p
- case Dummy476(p) => p
- case Dummy477(p) => p
- case Dummy478(p) => p
- case Dummy479(p) => p
- case Dummy480(p) => p
- case Dummy481(p) => p
- case Dummy482(p) => p
- case Dummy483(p) => p
- case Dummy484(p) => p
- case Dummy485(p) => p
- case Dummy486(p) => p
- case Dummy487(p) => p
- case Dummy488(p) => p
- case Dummy489(p) => p
- case Dummy490(p) => p
- case Dummy491(p) => p
- case Dummy492(p) => p
- case Dummy493(p) => p
- case Dummy494(p) => p
- case Dummy495(p) => p
- case Dummy496(p) => p
- case Dummy497(p) => p
- case Dummy498(p) => p
- case Dummy499(p) => p
- case Dummy500(p) => p
- case Dummy501(p) => p
- case Dummy502(p) => p
- case Dummy503(p) => p
- case Dummy504(p) => p
- case Dummy505(p) => p
- case Dummy506(p) => p
- case Dummy507(p) => p
- case Dummy508(p) => p
- case Dummy509(p) => p
- case Dummy510(p) => p
- case Dummy511(p) => p
- case Dummy512(p) => p
- case Dummy513(p) => p
- case Dummy514(p) => p
- case Dummy515(p) => p
- case Dummy516(p) => p
- case Dummy517(p) => p
- case Dummy518(p) => p
- case Dummy519(p) => p
- case Dummy520(p) => p
- case Dummy521(p) => p
- case Dummy522(p) => p
- case Dummy523(p) => p
- case Dummy524(p) => p
- case Dummy525(p) => p
- case Dummy526(p) => p
- case Dummy527(p) => p
- case Dummy528(p) => p
- case Dummy529(p) => p
- case Dummy530(p) => p
- case Dummy531(p) => p
- case Dummy532(p) => p
- case Dummy533(p) => p
- case Dummy534(p) => p
- case Dummy535(p) => p
- case Dummy536(p) => p
- case Dummy537(p) => p
- case Dummy538(p) => p
- case Dummy539(p) => p
- case Dummy540(p) => p
- case Dummy541(p) => p
- case Dummy542(p) => p
- case Dummy543(p) => p
- case Dummy544(p) => p
- case Dummy545(p) => p
- case Dummy546(p) => p
- case Dummy547(p) => p
- case Dummy548(p) => p
- case Dummy549(p) => p
- case Dummy550(p) => p
- case Dummy551(p) => p
- case Dummy552(p) => p
- case Dummy553(p) => p
- case Dummy554(p) => p
- case Dummy555(p) => p
- case Dummy556(p) => p
- case Dummy557(p) => p
- case Dummy558(p) => p
- case Dummy559(p) => p
- case Dummy560(p) => p
- case Dummy561(p) => p
- case Dummy562(p) => p
- case Dummy563(p) => p
- case Dummy564(p) => p
- case Dummy565(p) => p
- case Dummy566(p) => p
- case Dummy567(p) => p
- case Dummy568(p) => p
- case Dummy569(p) => p
- case Dummy570(p) => p
- case Dummy571(p) => p
- case Dummy572(p) => p
- case Dummy573(p) => p
- case Dummy574(p) => p
- case Dummy575(p) => p
- case Dummy576(p) => p
- case Dummy577(p) => p
- case Dummy578(p) => p
- case Dummy579(p) => p
- case Dummy580(p) => p
- case Dummy581(p) => p
- case Dummy582(p) => p
- case Dummy583(p) => p
- case Dummy584(p) => p
- case Dummy585(p) => p
- case Dummy586(p) => p
- case Dummy587(p) => p
- case Dummy588(p) => p
- case Dummy589(p) => p
- case Dummy590(p) => p
- case Dummy591(p) => p
- case Dummy592(p) => p
- case Dummy593(p) => p
- case Dummy594(p) => p
- case Dummy595(p) => p
- case Dummy596(p) => p
- case Dummy597(p) => p
- case Dummy598(p) => p
- case Dummy599(p) => p
- case Dummy600(p) => p
- case Dummy601(p) => p
- case Dummy602(p) => p
- case Dummy603(p) => p
- case Dummy604(p) => p
- case Dummy605(p) => p
- case Dummy606(p) => p
- case Dummy607(p) => p
- case Dummy608(p) => p
- case Dummy609(p) => p
- case Dummy610(p) => p
- case Dummy611(p) => p
- case Dummy612(p) => p
- case Dummy613(p) => p
- case Dummy614(p) => p
- case Dummy615(p) => p
- case Dummy616(p) => p
- case Dummy617(p) => p
- case Dummy618(p) => p
- case Dummy619(p) => p
- case Dummy620(p) => p
- case Dummy621(p) => p
- case Dummy622(p) => p
- case Dummy623(p) => p
- case Dummy624(p) => p
- case Dummy625(p) => p
- case Dummy626(p) => p
- case Dummy627(p) => p
- case Dummy628(p) => p
- case Dummy629(p) => p
- case Dummy630(p) => p
- case Dummy631(p) => p
- case Dummy632(p) => p
- case Dummy633(p) => p
- case Dummy634(p) => p
- case Dummy635(p) => p
- case Dummy636(p) => p
- case Dummy637(p) => p
- case Dummy638(p) => p
- case Dummy639(p) => p
- case Dummy640(p) => p
- case Dummy641(p) => p
- case Dummy642(p) => p
- case Dummy643(p) => p
- case Dummy644(p) => p
- case Dummy645(p) => p
- case Dummy646(p) => p
- case Dummy647(p) => p
- case Dummy648(p) => p
- case Dummy649(p) => p
- case Dummy650(p) => p
- case Dummy651(p) => p
- case Dummy652(p) => p
- case Dummy653(p) => p
- case Dummy654(p) => p
- case Dummy655(p) => p
- case Dummy656(p) => p
- case Dummy657(p) => p
- case Dummy658(p) => p
- case Dummy659(p) => p
- case Dummy660(p) => p
- case Dummy661(p) => p
- case Dummy662(p) => p
- case Dummy663(p) => p
- case Dummy664(p) => p
- case Dummy665(p) => p
- case Dummy666(p) => p
- case Dummy667(p) => p
- case Dummy668(p) => p
- case Dummy669(p) => p
- case Dummy670(p) => p
- case Dummy671(p) => p
- case Dummy672(p) => p
- case Dummy673(p) => p
- case Dummy674(p) => p
- case Dummy675(p) => p
- case Dummy676(p) => p
- case Dummy677(p) => p
- case Dummy678(p) => p
- case Dummy679(p) => p
- case Dummy680(p) => p
- case Dummy681(p) => p
- case Dummy682(p) => p
- case Dummy683(p) => p
- case Dummy684(p) => p
- case Dummy685(p) => p
- case Dummy686(p) => p
- case Dummy687(p) => p
- case Dummy688(p) => p
- case Dummy689(p) => p
- case Dummy690(p) => p
- case Dummy691(p) => p
- case Dummy692(p) => p
- case Dummy693(p) => p
- case Dummy694(p) => p
- case Dummy695(p) => p
- case Dummy696(p) => p
- case Dummy697(p) => p
- case Dummy698(p) => p
- case Dummy699(p) => p
- case Dummy700(p) => p
- case Dummy701(p) => p
- case Dummy702(p) => p
- case Dummy703(p) => p
- case Dummy704(p) => p
- case Dummy705(p) => p
- case Dummy706(p) => p
- case Dummy707(p) => p
- case Dummy708(p) => p
- case Dummy709(p) => p
- case Dummy710(p) => p
- case Dummy711(p) => p
- case Dummy712(p) => p
- case Dummy713(p) => p
- case Dummy714(p) => p
- case Dummy715(p) => p
- case Dummy716(p) => p
- case Dummy717(p) => p
- case Dummy718(p) => p
- case Dummy719(p) => p
- case Dummy720(p) => p
- case Dummy721(p) => p
- case Dummy722(p) => p
- case Dummy723(p) => p
- case Dummy724(p) => p
- case Dummy725(p) => p
- case Dummy726(p) => p
- case Dummy727(p) => p
- case Dummy728(p) => p
- case Dummy729(p) => p
- case Dummy730(p) => p
- case Dummy731(p) => p
- case Dummy732(p) => p
- case Dummy733(p) => p
- case Dummy734(p) => p
- case Dummy735(p) => p
- case Dummy736(p) => p
- case Dummy737(p) => p
- case Dummy738(p) => p
- case Dummy739(p) => p
- case Dummy740(p) => p
- case Dummy741(p) => p
- case Dummy742(p) => p
- case Dummy743(p) => p
- case Dummy744(p) => p
- case Dummy745(p) => p
- case Dummy746(p) => p
- case Dummy747(p) => p
- case Dummy748(p) => p
- case Dummy749(p) => p
- case Dummy750(p) => p
- case Dummy751(p) => p
- case Dummy752(p) => p
- case Dummy753(p) => p
- case Dummy754(p) => p
- case Dummy755(p) => p
- case Dummy756(p) => p
- case Dummy757(p) => p
- case Dummy758(p) => p
- case Dummy759(p) => p
- case Dummy760(p) => p
- case Dummy761(p) => p
- case Dummy762(p) => p
- case Dummy763(p) => p
- case Dummy764(p) => p
- case Dummy765(p) => p
- case Dummy766(p) => p
- case Dummy767(p) => p
- case Dummy768(p) => p
- case Dummy769(p) => p
- case Dummy770(p) => p
- case Dummy771(p) => p
- case Dummy772(p) => p
- case Dummy773(p) => p
- case Dummy774(p) => p
- case Dummy775(p) => p
- case Dummy776(p) => p
- case Dummy777(p) => p
- case Dummy778(p) => p
- case Dummy779(p) => p
- case Dummy780(p) => p
- case Dummy781(p) => p
- case Dummy782(p) => p
- case Dummy783(p) => p
- case Dummy784(p) => p
- case Dummy785(p) => p
- case Dummy786(p) => p
- case Dummy787(p) => p
- case Dummy788(p) => p
- case Dummy789(p) => p
- case Dummy790(p) => p
- case Dummy791(p) => p
- case Dummy792(p) => p
- case Dummy793(p) => p
- case Dummy794(p) => p
- case Dummy795(p) => p
- case Dummy796(p) => p
- case Dummy797(p) => p
- case Dummy798(p) => p
- case Dummy799(p) => p
- case Dummy800(p) => p
- case Dummy801(p) => p
- case Dummy802(p) => p
- case Dummy803(p) => p
- case Dummy804(p) => p
- case Dummy805(p) => p
- case Dummy806(p) => p
- case Dummy807(p) => p
- case Dummy808(p) => p
- case Dummy809(p) => p
- case Dummy810(p) => p
- case Dummy811(p) => p
- case Dummy812(p) => p
- case Dummy813(p) => p
- case Dummy814(p) => p
- case Dummy815(p) => p
- case Dummy816(p) => p
- case Dummy817(p) => p
- case Dummy818(p) => p
- case Dummy819(p) => p
- case Dummy820(p) => p
- case Dummy821(p) => p
- case Dummy822(p) => p
- case Dummy823(p) => p
- case Dummy824(p) => p
- case Dummy825(p) => p
- case Dummy826(p) => p
- case Dummy827(p) => p
- case Dummy828(p) => p
- case Dummy829(p) => p
- case Dummy830(p) => p
- case Dummy831(p) => p
- case Dummy832(p) => p
- case Dummy833(p) => p
- case Dummy834(p) => p
- case Dummy835(p) => p
- case Dummy836(p) => p
- case Dummy837(p) => p
- case Dummy838(p) => p
- case Dummy839(p) => p
- case Dummy840(p) => p
- case Dummy841(p) => p
- case Dummy842(p) => p
- case Dummy843(p) => p
- case Dummy844(p) => p
- case Dummy845(p) => p
- case Dummy846(p) => p
- case Dummy847(p) => p
- case Dummy848(p) => p
- case Dummy849(p) => p
- case Dummy850(p) => p
- case Dummy851(p) => p
- case Dummy852(p) => p
- case Dummy853(p) => p
- case Dummy854(p) => p
- case Dummy855(p) => p
- case Dummy856(p) => p
- case Dummy857(p) => p
- case Dummy858(p) => p
- case Dummy859(p) => p
- case Dummy860(p) => p
- case Dummy861(p) => p
- case Dummy862(p) => p
- case Dummy863(p) => p
- case Dummy864(p) => p
- case Dummy865(p) => p
- case Dummy866(p) => p
- case Dummy867(p) => p
- case Dummy868(p) => p
- case Dummy869(p) => p
- case Dummy870(p) => p
- case Dummy871(p) => p
- case Dummy872(p) => p
- case Dummy873(p) => p
- case Dummy874(p) => p
- case Dummy875(p) => p
- case Dummy876(p) => p
- case Dummy877(p) => p
- case Dummy878(p) => p
- case Dummy879(p) => p
- case Dummy880(p) => p
- case Dummy881(p) => p
- case Dummy882(p) => p
- case Dummy883(p) => p
- case Dummy884(p) => p
- case Dummy885(p) => p
- case Dummy886(p) => p
- case Dummy887(p) => p
- case Dummy888(p) => p
- case Dummy889(p) => p
- case Dummy890(p) => p
- case Dummy891(p) => p
- case Dummy892(p) => p
- case Dummy893(p) => p
- case Dummy894(p) => p
- case Dummy895(p) => p
- case Dummy896(p) => p
- case Dummy897(p) => p
- case Dummy898(p) => p
- case Dummy899(p) => p
- case Dummy900(p) => p
- case Dummy901(p) => p
- case Dummy902(p) => p
- case Dummy903(p) => p
- case Dummy904(p) => p
- case Dummy905(p) => p
- case Dummy906(p) => p
- case Dummy907(p) => p
- case Dummy908(p) => p
- case Dummy909(p) => p
- case Dummy910(p) => p
- case Dummy911(p) => p
- case Dummy912(p) => p
- case Dummy913(p) => p
- case Dummy914(p) => p
- case Dummy915(p) => p
- case Dummy916(p) => p
- case Dummy917(p) => p
- case Dummy918(p) => p
- case Dummy919(p) => p
- case Dummy920(p) => p
- case Dummy921(p) => p
- case Dummy922(p) => p
- case Dummy923(p) => p
- case Dummy924(p) => p
- case Dummy925(p) => p
- case Dummy926(p) => p
- case Dummy927(p) => p
- case Dummy928(p) => p
- case Dummy929(p) => p
- case Dummy930(p) => p
- case Dummy931(p) => p
- case Dummy932(p) => p
- case Dummy933(p) => p
- case Dummy934(p) => p
- case Dummy935(p) => p
- case Dummy936(p) => p
- case Dummy937(p) => p
- case Dummy938(p) => p
- case Dummy939(p) => p
- case Dummy940(p) => p
- case Dummy941(p) => p
- case Dummy942(p) => p
- case Dummy943(p) => p
- case Dummy944(p) => p
- case Dummy945(p) => p
- case Dummy946(p) => p
- case Dummy947(p) => p
- case Dummy948(p) => p
- case Dummy949(p) => p
- case Dummy950(p) => p
- case Dummy951(p) => p
- case Dummy952(p) => p
- case Dummy953(p) => p
- case Dummy954(p) => p
- case Dummy955(p) => p
- case Dummy956(p) => p
- case Dummy957(p) => p
- case Dummy958(p) => p
- case Dummy959(p) => p
- case Dummy960(p) => p
- case Dummy961(p) => p
- case Dummy962(p) => p
- case Dummy963(p) => p
- case Dummy964(p) => p
- case Dummy965(p) => p
- case Dummy966(p) => p
- case Dummy967(p) => p
- case Dummy968(p) => p
- case Dummy969(p) => p
- case Dummy970(p) => p
- case Dummy971(p) => p
- case Dummy972(p) => p
- case Dummy973(p) => p
- case Dummy974(p) => p
- case Dummy975(p) => p
- case Dummy976(p) => p
- case Dummy977(p) => p
- case Dummy978(p) => p
- case Dummy979(p) => p
- case Dummy980(p) => p
- case Dummy981(p) => p
- case Dummy982(p) => p
- case Dummy983(p) => p
- case Dummy984(p) => p
- case Dummy985(p) => p
- case Dummy986(p) => p
- case Dummy987(p) => p
- case Dummy988(p) => p
- case Dummy989(p) => p
- case Dummy990(p) => p
- case Dummy991(p) => p
- case Dummy992(p) => p
- case Dummy993(p) => p
- case Dummy994(p) => p
- case Dummy995(p) => p
- case Dummy996(p) => p
- case Dummy997(p) => p
- case Dummy998(p) => p
- case Dummy999(p) => p
- case Dummy1000(p) => p
- case Dummy1001(p) => p
- case Dummy1002(p) => p
- case Dummy1003(p) => p
- case Dummy1004(p) => p
- case Dummy1005(p) => p
- case Dummy1006(p) => p
- case Dummy1007(p) => p
- case Dummy1008(p) => p
- case Dummy1009(p) => p
- case Dummy1010(p) => p
- case Dummy1011(p) => p
- case Dummy1012(p) => p
- case Dummy1013(p) => p
- case Dummy1014(p) => p
- case Dummy1015(p) => p
- case Dummy1016(p) => p
- case Dummy1017(p) => p
- case Dummy1018(p) => p
- case Dummy1019(p) => p
- case Dummy1020(p) => p
- case Dummy1021(p) => p
- case Dummy1022(p) => p
- case Dummy1023(p) => p
- case Dummy1024(p) => p
- case Dummy1025(p) => p
- case Dummy1026(p) => p
- case Dummy1027(p) => p
- case Dummy1028(p) => p
- case Dummy1029(p) => p
- case Dummy1030(p) => p
- case Dummy1031(p) => p
- case Dummy1032(p) => p
- case Dummy1033(p) => p
- case Dummy1034(p) => p
- case Dummy1035(p) => p
- case Dummy1036(p) => p
- case Dummy1037(p) => p
- case Dummy1038(p) => p
- case Dummy1039(p) => p
- case Dummy1040(p) => p
- case Dummy1041(p) => p
- case Dummy1042(p) => p
- case Dummy1043(p) => p
- case Dummy1044(p) => p
- case Dummy1045(p) => p
- case Dummy1046(p) => p
- case Dummy1047(p) => p
- case Dummy1048(p) => p
- case Dummy1049(p) => p
- case Dummy1050(p) => p
- case Dummy1051(p) => p
- case Dummy1052(p) => p
- case Dummy1053(p) => p
- case Dummy1054(p) => p
- case Dummy1055(p) => p
- case Dummy1056(p) => p
- case Dummy1057(p) => p
- case Dummy1058(p) => p
- case Dummy1059(p) => p
- case Dummy1060(p) => p
- case Dummy1061(p) => p
- case Dummy1062(p) => p
- case Dummy1063(p) => p
- case Dummy1064(p) => p
- case Dummy1065(p) => p
- case Dummy1066(p) => p
- case Dummy1067(p) => p
- case Dummy1068(p) => p
- case Dummy1069(p) => p
- case Dummy1070(p) => p
- case Dummy1071(p) => p
- case Dummy1072(p) => p
- case Dummy1073(p) => p
- case Dummy1074(p) => p
- case Dummy1075(p) => p
- case Dummy1076(p) => p
- case Dummy1077(p) => p
- case Dummy1078(p) => p
- case Dummy1079(p) => p
- case Dummy1080(p) => p
- case Dummy1081(p) => p
- case Dummy1082(p) => p
- case Dummy1083(p) => p
- case Dummy1084(p) => p
- case Dummy1085(p) => p
- case Dummy1086(p) => p
- case Dummy1087(p) => p
- case Dummy1088(p) => p
- case Dummy1089(p) => p
- case Dummy1090(p) => p
- case Dummy1091(p) => p
- case Dummy1092(p) => p
- case Dummy1093(p) => p
- case Dummy1094(p) => p
- case Dummy1095(p) => p
- case Dummy1096(p) => p
- case Dummy1097(p) => p
- case Dummy1098(p) => p
- case Dummy1099(p) => p
- case Dummy1100(p) => p
- case Dummy1101(p) => p
- case Dummy1102(p) => p
- case Dummy1103(p) => p
- case Dummy1104(p) => p
- case Dummy1105(p) => p
- case Dummy1106(p) => p
- case Dummy1107(p) => p
- case Dummy1108(p) => p
- case Dummy1109(p) => p
- case Dummy1110(p) => p
- case Dummy1111(p) => p
- case Dummy1112(p) => p
- case Dummy1113(p) => p
- case Dummy1114(p) => p
- case Dummy1115(p) => p
- case Dummy1116(p) => p
- case Dummy1117(p) => p
- case Dummy1118(p) => p
- case Dummy1119(p) => p
- case Dummy1120(p) => p
- case Dummy1121(p) => p
- case Dummy1122(p) => p
- case Dummy1123(p) => p
- case Dummy1124(p) => p
- case Dummy1125(p) => p
- case Dummy1126(p) => p
- case Dummy1127(p) => p
- case Dummy1128(p) => p
- case Dummy1129(p) => p
- case Dummy1130(p) => p
- case Dummy1131(p) => p
- case Dummy1132(p) => p
- case Dummy1133(p) => p
- case Dummy1134(p) => p
- case Dummy1135(p) => p
- case Dummy1136(p) => p
- case Dummy1137(p) => p
- case Dummy1138(p) => p
- case Dummy1139(p) => p
- case Dummy1140(p) => p
- case Dummy1141(p) => p
- case Dummy1142(p) => p
- case Dummy1143(p) => p
- case Dummy1144(p) => p
- case Dummy1145(p) => p
- case Dummy1146(p) => p
- case Dummy1147(p) => p
- case Dummy1148(p) => p
- case Dummy1149(p) => p
- case Dummy1150(p) => p
- case Dummy1151(p) => p
- case Dummy1152(p) => p
- case Dummy1153(p) => p
- case Dummy1154(p) => p
- case Dummy1155(p) => p
- case Dummy1156(p) => p
- case Dummy1157(p) => p
- case Dummy1158(p) => p
- case Dummy1159(p) => p
- case Dummy1160(p) => p
- case Dummy1161(p) => p
- case Dummy1162(p) => p
- case Dummy1163(p) => p
- case Dummy1164(p) => p
- case Dummy1165(p) => p
- case Dummy1166(p) => p
- case Dummy1167(p) => p
- case Dummy1168(p) => p
- case Dummy1169(p) => p
- case Dummy1170(p) => p
- case Dummy1171(p) => p
- case Dummy1172(p) => p
- case Dummy1173(p) => p
- case Dummy1174(p) => p
- case Dummy1175(p) => p
- case Dummy1176(p) => p
- case Dummy1177(p) => p
- case Dummy1178(p) => p
- case Dummy1179(p) => p
- case Dummy1180(p) => p
- case Dummy1181(p) => p
- case Dummy1182(p) => p
- case Dummy1183(p) => p
- case Dummy1184(p) => p
- case Dummy1185(p) => p
- case Dummy1186(p) => p
- case Dummy1187(p) => p
- case Dummy1188(p) => p
- case Dummy1189(p) => p
- case Dummy1190(p) => p
- case Dummy1191(p) => p
- case Dummy1192(p) => p
- case Dummy1193(p) => p
- case Dummy1194(p) => p
- case Dummy1195(p) => p
- case Dummy1196(p) => p
- case Dummy1197(p) => p
- case Dummy1198(p) => p
- case Dummy1199(p) => p
- case Dummy1200(p) => p
- case Dummy1201(p) => p
- case Dummy1202(p) => p
- case Dummy1203(p) => p
- case Dummy1204(p) => p
- case Dummy1205(p) => p
- case Dummy1206(p) => p
- case Dummy1207(p) => p
- case Dummy1208(p) => p
- case Dummy1209(p) => p
- case Dummy1210(p) => p
- case Dummy1211(p) => p
- case Dummy1212(p) => p
- case Dummy1213(p) => p
- case Dummy1214(p) => p
- case Dummy1215(p) => p
- case Dummy1216(p) => p
- case Dummy1217(p) => p
- case Dummy1218(p) => p
- case Dummy1219(p) => p
- case Dummy1220(p) => p
- case Dummy1221(p) => p
- case Dummy1222(p) => p
- case Dummy1223(p) => p
- case Dummy1224(p) => p
- case Dummy1225(p) => p
- case Dummy1226(p) => p
- case Dummy1227(p) => p
- case Dummy1228(p) => p
- case Dummy1229(p) => p
- case Dummy1230(p) => p
- case Dummy1231(p) => p
- case Dummy1232(p) => p
- case Dummy1233(p) => p
- case Dummy1234(p) => p
- case Dummy1235(p) => p
- case Dummy1236(p) => p
- case Dummy1237(p) => p
- case Dummy1238(p) => p
- case Dummy1239(p) => p
- case Dummy1240(p) => p
- case Dummy1241(p) => p
- case Dummy1242(p) => p
- case Dummy1243(p) => p
- case Dummy1244(p) => p
- case Dummy1245(p) => p
- case Dummy1246(p) => p
- case Dummy1247(p) => p
- case Dummy1248(p) => p
- case Dummy1249(p) => p
- case Dummy1250(p) => p
- case Dummy1251(p) => p
- case Dummy1252(p) => p
- case Dummy1253(p) => p
- case Dummy1254(p) => p
- case Dummy1255(p) => p
- case Dummy1256(p) => p
- case Dummy1257(p) => p
- case Dummy1258(p) => p
- case Dummy1259(p) => p
- case Dummy1260(p) => p
- case Dummy1261(p) => p
- case Dummy1262(p) => p
- case Dummy1263(p) => p
- case Dummy1264(p) => p
- case Dummy1265(p) => p
- case Dummy1266(p) => p
- case Dummy1267(p) => p
- case Dummy1268(p) => p
- case Dummy1269(p) => p
- case Dummy1270(p) => p
- case Dummy1271(p) => p
- case Dummy1272(p) => p
- case Dummy1273(p) => p
- case Dummy1274(p) => p
- case Dummy1275(p) => p
- case Dummy1276(p) => p
- case Dummy1277(p) => p
- case Dummy1278(p) => p
- case Dummy1279(p) => p
- case Dummy1280(p) => p
- case Dummy1281(p) => p
- case Dummy1282(p) => p
- case Dummy1283(p) => p
- case Dummy1284(p) => p
- case Dummy1285(p) => p
- case Dummy1286(p) => p
- case Dummy1287(p) => p
- case Dummy1288(p) => p
- case Dummy1289(p) => p
- case Dummy1290(p) => p
- case Dummy1291(p) => p
- case Dummy1292(p) => p
- case Dummy1293(p) => p
- case Dummy1294(p) => p
- case Dummy1295(p) => p
- case Dummy1296(p) => p
- case Dummy1297(p) => p
- case Dummy1298(p) => p
- case Dummy1299(p) => p
- case Dummy1300(p) => p
- case Dummy1301(p) => p
- case Dummy1302(p) => p
- case Dummy1303(p) => p
- case Dummy1304(p) => p
- case Dummy1305(p) => p
- case Dummy1306(p) => p
- case Dummy1307(p) => p
- case Dummy1308(p) => p
- case Dummy1309(p) => p
- case Dummy1310(p) => p
- case Dummy1311(p) => p
- case Dummy1312(p) => p
- case Dummy1313(p) => p
- case Dummy1314(p) => p
- case Dummy1315(p) => p
- case Dummy1316(p) => p
- case Dummy1317(p) => p
- case Dummy1318(p) => p
- case Dummy1319(p) => p
- case Dummy1320(p) => p
- case Dummy1321(p) => p
- case Dummy1322(p) => p
- case Dummy1323(p) => p
- case Dummy1324(p) => p
- case Dummy1325(p) => p
- case Dummy1326(p) => p
- case Dummy1327(p) => p
- case Dummy1328(p) => p
- case Dummy1329(p) => p
- case Dummy1330(p) => p
- case Dummy1331(p) => p
- case Dummy1332(p) => p
- case Dummy1333(p) => p
- case Dummy1334(p) => p
- case Dummy1335(p) => p
- case Dummy1336(p) => p
- case Dummy1337(p) => p
- case Dummy1338(p) => p
- case Dummy1339(p) => p
- case Dummy1340(p) => p
- case Dummy1341(p) => p
- case Dummy1342(p) => p
- case Dummy1343(p) => p
- case Dummy1344(p) => p
- case Dummy1345(p) => p
- case Dummy1346(p) => p
- case Dummy1347(p) => p
- case Dummy1348(p) => p
- case Dummy1349(p) => p
- case Dummy1350(p) => p
- case Dummy1351(p) => p
- case Dummy1352(p) => p
- case Dummy1353(p) => p
- case Dummy1354(p) => p
- case Dummy1355(p) => p
- case Dummy1356(p) => p
- case Dummy1357(p) => p
- case Dummy1358(p) => p
- case Dummy1359(p) => p
- case Dummy1360(p) => p
- case Dummy1361(p) => p
- case Dummy1362(p) => p
- case Dummy1363(p) => p
- case Dummy1364(p) => p
- case Dummy1365(p) => p
- case Dummy1366(p) => p
- case Dummy1367(p) => p
- case Dummy1368(p) => p
- case Dummy1369(p) => p
- case Dummy1370(p) => p
- case Dummy1371(p) => p
- case Dummy1372(p) => p
- case Dummy1373(p) => p
- case Dummy1374(p) => p
- case Dummy1375(p) => p
- case Dummy1376(p) => p
- case Dummy1377(p) => p
- case Dummy1378(p) => p
- case Dummy1379(p) => p
- case Dummy1380(p) => p
- case Dummy1381(p) => p
- case Dummy1382(p) => p
- case Dummy1383(p) => p
- case Dummy1384(p) => p
- case Dummy1385(p) => p
- case Dummy1386(p) => p
- case Dummy1387(p) => p
- case Dummy1388(p) => p
- case Dummy1389(p) => p
- case Dummy1390(p) => p
- case Dummy1391(p) => p
- case Dummy1392(p) => p
- case Dummy1393(p) => p
- case Dummy1394(p) => p
- case Dummy1395(p) => p
- case Dummy1396(p) => p
- case Dummy1397(p) => p
- case Dummy1398(p) => p
- case Dummy1399(p) => p
- case Dummy1400(p) => p
- case Dummy1401(p) => p
- case Dummy1402(p) => p
- case Dummy1403(p) => p
- case Dummy1404(p) => p
- case Dummy1405(p) => p
- case Dummy1406(p) => p
- case Dummy1407(p) => p
- case Dummy1408(p) => p
- case Dummy1409(p) => p
- case Dummy1410(p) => p
- case Dummy1411(p) => p
- case Dummy1412(p) => p
- case Dummy1413(p) => p
- case Dummy1414(p) => p
- case Dummy1415(p) => p
- case Dummy1416(p) => p
- case Dummy1417(p) => p
- case Dummy1418(p) => p
- case Dummy1419(p) => p
- case Dummy1420(p) => p
- case Dummy1421(p) => p
- case Dummy1422(p) => p
- case Dummy1423(p) => p
- case Dummy1424(p) => p
- case Dummy1425(p) => p
- case Dummy1426(p) => p
- case Dummy1427(p) => p
- case Dummy1428(p) => p
- case Dummy1429(p) => p
- case Dummy1430(p) => p
- case Dummy1431(p) => p
- case Dummy1432(p) => p
- case Dummy1433(p) => p
- case Dummy1434(p) => p
- case Dummy1435(p) => p
- case Dummy1436(p) => p
- case Dummy1437(p) => p
- case Dummy1438(p) => p
- case Dummy1439(p) => p
- case Dummy1440(p) => p
- case Dummy1441(p) => p
- case Dummy1442(p) => p
- case Dummy1443(p) => p
- case Dummy1444(p) => p
- case Dummy1445(p) => p
- case Dummy1446(p) => p
- case Dummy1447(p) => p
- case Dummy1448(p) => p
- case Dummy1449(p) => p
- case Dummy1450(p) => p
- case Dummy1451(p) => p
- case Dummy1452(p) => p
- case Dummy1453(p) => p
- case Dummy1454(p) => p
- case Dummy1455(p) => p
- case Dummy1456(p) => p
- case Dummy1457(p) => p
- case Dummy1458(p) => p
- case Dummy1459(p) => p
- case Dummy1460(p) => p
- case Dummy1461(p) => p
- case Dummy1462(p) => p
- case Dummy1463(p) => p
- case Dummy1464(p) => p
- case Dummy1465(p) => p
- case Dummy1466(p) => p
- case Dummy1467(p) => p
- case Dummy1468(p) => p
- case Dummy1469(p) => p
- case Dummy1470(p) => p
- case Dummy1471(p) => p
- case Dummy1472(p) => p
- case Dummy1473(p) => p
- case Dummy1474(p) => p
- case Dummy1475(p) => p
- case Dummy1476(p) => p
- case Dummy1477(p) => p
- case Dummy1478(p) => p
- case Dummy1479(p) => p
- case Dummy1480(p) => p
- case Dummy1481(p) => p
- case Dummy1482(p) => p
- case Dummy1483(p) => p
- case Dummy1484(p) => p
- case Dummy1485(p) => p
- case Dummy1486(p) => p
- case Dummy1487(p) => p
- case Dummy1488(p) => p
- case Dummy1489(p) => p
- case Dummy1490(p) => p
- case Dummy1491(p) => p
- case Dummy1492(p) => p
- case Dummy1493(p) => p
- case Dummy1494(p) => p
- case Dummy1495(p) => p
- case Dummy1496(p) => p
- case Dummy1497(p) => p
- case Dummy1498(p) => p
- case Dummy1499(p) => p
- case Dummy1500(p) => p
- case Dummy1501(p) => p
- case Dummy1502(p) => p
- case Dummy1503(p) => p
- case Dummy1504(p) => p
- case Dummy1505(p) => p
- case Dummy1506(p) => p
- case Dummy1507(p) => p
- case Dummy1508(p) => p
- case Dummy1509(p) => p
- case Dummy1510(p) => p
- case Dummy1511(p) => p
- case Dummy1512(p) => p
- case Dummy1513(p) => p
- case Dummy1514(p) => p
- case Dummy1515(p) => p
- case Dummy1516(p) => p
- case Dummy1517(p) => p
- case Dummy1518(p) => p
- case Dummy1519(p) => p
- case Dummy1520(p) => p
- case Dummy1521(p) => p
- case Dummy1522(p) => p
- case Dummy1523(p) => p
- case Dummy1524(p) => p
- case Dummy1525(p) => p
- case Dummy1526(p) => p
- case Dummy1527(p) => p
- case Dummy1528(p) => p
- case Dummy1529(p) => p
- case Dummy1530(p) => p
- case Dummy1531(p) => p
- case Dummy1532(p) => p
- case Dummy1533(p) => p
- case Dummy1534(p) => p
- case Dummy1535(p) => p
- case Dummy1536(p) => p
- case Dummy1537(p) => p
- case Dummy1538(p) => p
- case Dummy1539(p) => p
- case Dummy1540(p) => p
- case Dummy1541(p) => p
- case Dummy1542(p) => p
- case Dummy1543(p) => p
- case Dummy1544(p) => p
- case Dummy1545(p) => p
- case Dummy1546(p) => p
- case Dummy1547(p) => p
- case Dummy1548(p) => p
- case Dummy1549(p) => p
- case Dummy1550(p) => p
- case Dummy1551(p) => p
- case Dummy1552(p) => p
- case Dummy1553(p) => p
- case Dummy1554(p) => p
- case Dummy1555(p) => p
- case Dummy1556(p) => p
- case Dummy1557(p) => p
- case Dummy1558(p) => p
- case Dummy1559(p) => p
- case Dummy1560(p) => p
- case Dummy1561(p) => p
- case Dummy1562(p) => p
- case Dummy1563(p) => p
- case Dummy1564(p) => p
- case Dummy1565(p) => p
- case Dummy1566(p) => p
- case Dummy1567(p) => p
- case Dummy1568(p) => p
- case Dummy1569(p) => p
- case Dummy1570(p) => p
- case Dummy1571(p) => p
- case Dummy1572(p) => p
- case Dummy1573(p) => p
- case Dummy1574(p) => p
- case Dummy1575(p) => p
- case Dummy1576(p) => p
- case Dummy1577(p) => p
- case Dummy1578(p) => p
- case Dummy1579(p) => p
- case Dummy1580(p) => p
- case Dummy1581(p) => p
- case Dummy1582(p) => p
- case Dummy1583(p) => p
- case Dummy1584(p) => p
- case Dummy1585(p) => p
- case Dummy1586(p) => p
- case Dummy1587(p) => p
- case Dummy1588(p) => p
- case Dummy1589(p) => p
- case Dummy1590(p) => p
- case Dummy1591(p) => p
- case Dummy1592(p) => p
- case Dummy1593(p) => p
- case Dummy1594(p) => p
- case Dummy1595(p) => p
- case Dummy1596(p) => p
- case Dummy1597(p) => p
- case Dummy1598(p) => p
- case Dummy1599(p) => p
- case Dummy1600(p) => p
- case Dummy1601(p) => p
- case Dummy1602(p) => p
- case Dummy1603(p) => p
- case Dummy1604(p) => p
- case Dummy1605(p) => p
- case Dummy1606(p) => p
- case Dummy1607(p) => p
- case Dummy1608(p) => p
- case Dummy1609(p) => p
- case Dummy1610(p) => p
- case Dummy1611(p) => p
- case Dummy1612(p) => p
- case Dummy1613(p) => p
- case Dummy1614(p) => p
- case Dummy1615(p) => p
- case Dummy1616(p) => p
- case Dummy1617(p) => p
- case Dummy1618(p) => p
- case Dummy1619(p) => p
- case Dummy1620(p) => p
- case Dummy1621(p) => p
- case Dummy1622(p) => p
- case Dummy1623(p) => p
- case Dummy1624(p) => p
- case Dummy1625(p) => p
- case Dummy1626(p) => p
- case Dummy1627(p) => p
- case Dummy1628(p) => p
- case Dummy1629(p) => p
- case Dummy1630(p) => p
- case Dummy1631(p) => p
- case Dummy1632(p) => p
- case Dummy1633(p) => p
- case Dummy1634(p) => p
- case Dummy1635(p) => p
- case Dummy1636(p) => p
- case Dummy1637(p) => p
- case Dummy1638(p) => p
- case Dummy1639(p) => p
- case Dummy1640(p) => p
- case Dummy1641(p) => p
- case Dummy1642(p) => p
- case Dummy1643(p) => p
- case Dummy1644(p) => p
- case Dummy1645(p) => p
- case Dummy1646(p) => p
- case Dummy1647(p) => p
- case Dummy1648(p) => p
- case Dummy1649(p) => p
- case Dummy1650(p) => p
- case Dummy1651(p) => p
- case Dummy1652(p) => p
- case Dummy1653(p) => p
- case Dummy1654(p) => p
- case Dummy1655(p) => p
- case Dummy1656(p) => p
- case Dummy1657(p) => p
- case Dummy1658(p) => p
- case Dummy1659(p) => p
- case Dummy1660(p) => p
- case Dummy1661(p) => p
- case Dummy1662(p) => p
- case Dummy1663(p) => p
- case Dummy1664(p) => p
- case Dummy1665(p) => p
- case Dummy1666(p) => p
- case Dummy1667(p) => p
- case Dummy1668(p) => p
- case Dummy1669(p) => p
- case Dummy1670(p) => p
- case Dummy1671(p) => p
- case Dummy1672(p) => p
- case Dummy1673(p) => p
- case Dummy1674(p) => p
- case Dummy1675(p) => p
- case Dummy1676(p) => p
- case Dummy1677(p) => p
- case Dummy1678(p) => p
- case Dummy1679(p) => p
- case Dummy1680(p) => p
- case Dummy1681(p) => p
- case Dummy1682(p) => p
- case Dummy1683(p) => p
- case Dummy1684(p) => p
- case Dummy1685(p) => p
- case Dummy1686(p) => p
- case Dummy1687(p) => p
- case Dummy1688(p) => p
- case Dummy1689(p) => p
- case Dummy1690(p) => p
- case Dummy1691(p) => p
- case Dummy1692(p) => p
- case Dummy1693(p) => p
- case Dummy1694(p) => p
- case Dummy1695(p) => p
- case Dummy1696(p) => p
- case Dummy1697(p) => p
- case Dummy1698(p) => p
- case Dummy1699(p) => p
- case Dummy1700(p) => p
- case Dummy1701(p) => p
- case Dummy1702(p) => p
- case Dummy1703(p) => p
- case Dummy1704(p) => p
- case Dummy1705(p) => p
- case Dummy1706(p) => p
- case Dummy1707(p) => p
- case Dummy1708(p) => p
- case Dummy1709(p) => p
- case Dummy1710(p) => p
- case Dummy1711(p) => p
- case Dummy1712(p) => p
- case Dummy1713(p) => p
- case Dummy1714(p) => p
- case Dummy1715(p) => p
- case Dummy1716(p) => p
- case Dummy1717(p) => p
- case Dummy1718(p) => p
- case Dummy1719(p) => p
- case Dummy1720(p) => p
- case Dummy1721(p) => p
- case Dummy1722(p) => p
- case Dummy1723(p) => p
- case Dummy1724(p) => p
- case Dummy1725(p) => p
- case Dummy1726(p) => p
- case Dummy1727(p) => p
- case Dummy1728(p) => p
- case Dummy1729(p) => p
- case Dummy1730(p) => p
- case Dummy1731(p) => p
- case Dummy1732(p) => p
- case Dummy1733(p) => p
- case Dummy1734(p) => p
- case Dummy1735(p) => p
- case Dummy1736(p) => p
- case Dummy1737(p) => p
- case Dummy1738(p) => p
- case Dummy1739(p) => p
- case Dummy1740(p) => p
- case Dummy1741(p) => p
- case Dummy1742(p) => p
- case Dummy1743(p) => p
- case Dummy1744(p) => p
- case Dummy1745(p) => p
- case Dummy1746(p) => p
- case Dummy1747(p) => p
- case Dummy1748(p) => p
- case Dummy1749(p) => p
- case Dummy1750(p) => p
- case Dummy1751(p) => p
- case Dummy1752(p) => p
- case Dummy1753(p) => p
- case Dummy1754(p) => p
- case Dummy1755(p) => p
- case Dummy1756(p) => p
- case Dummy1757(p) => p
- case Dummy1758(p) => p
- case Dummy1759(p) => p
- case Dummy1760(p) => p
- case Dummy1761(p) => p
- case Dummy1762(p) => p
- case Dummy1763(p) => p
- case Dummy1764(p) => p
- case Dummy1765(p) => p
- case Dummy1766(p) => p
- case Dummy1767(p) => p
- case Dummy1768(p) => p
- case Dummy1769(p) => p
- case Dummy1770(p) => p
- case Dummy1771(p) => p
- case Dummy1772(p) => p
- case Dummy1773(p) => p
- case Dummy1774(p) => p
- case Dummy1775(p) => p
- case Dummy1776(p) => p
- case Dummy1777(p) => p
- case Dummy1778(p) => p
- case Dummy1779(p) => p
- case Dummy1780(p) => p
- case Dummy1781(p) => p
- case Dummy1782(p) => p
- case Dummy1783(p) => p
- case Dummy1784(p) => p
- case Dummy1785(p) => p
- case Dummy1786(p) => p
- case Dummy1787(p) => p
- case Dummy1788(p) => p
- case Dummy1789(p) => p
- case Dummy1790(p) => p
- case Dummy1791(p) => p
- case Dummy1792(p) => p
- case Dummy1793(p) => p
- case Dummy1794(p) => p
- case Dummy1795(p) => p
- case Dummy1796(p) => p
- case Dummy1797(p) => p
- case Dummy1798(p) => p
- case Dummy1799(p) => p
- case Dummy1800(p) => p
- case Dummy1801(p) => p
- case Dummy1802(p) => p
- case Dummy1803(p) => p
- case Dummy1804(p) => p
- case Dummy1805(p) => p
- case Dummy1806(p) => p
- case Dummy1807(p) => p
- case Dummy1808(p) => p
- case Dummy1809(p) => p
- case Dummy1810(p) => p
- case Dummy1811(p) => p
- case Dummy1812(p) => p
- case Dummy1813(p) => p
- case Dummy1814(p) => p
- case Dummy1815(p) => p
- case Dummy1816(p) => p
- case Dummy1817(p) => p
- case Dummy1818(p) => p
- case Dummy1819(p) => p
- case Dummy1820(p) => p
- case Dummy1821(p) => p
- case Dummy1822(p) => p
- case Dummy1823(p) => p
- case Dummy1824(p) => p
- case Dummy1825(p) => p
- case Dummy1826(p) => p
- case Dummy1827(p) => p
- case Dummy1828(p) => p
- case Dummy1829(p) => p
- case Dummy1830(p) => p
- case Dummy1831(p) => p
- case Dummy1832(p) => p
- case Dummy1833(p) => p
- case Dummy1834(p) => p
- case Dummy1835(p) => p
- case Dummy1836(p) => p
- case Dummy1837(p) => p
- case Dummy1838(p) => p
- case Dummy1839(p) => p
- case Dummy1840(p) => p
- case Dummy1841(p) => p
- case Dummy1842(p) => p
- case Dummy1843(p) => p
- case Dummy1844(p) => p
- case Dummy1845(p) => p
- case Dummy1846(p) => p
- case Dummy1847(p) => p
- case Dummy1848(p) => p
- case Dummy1849(p) => p
- case Dummy1850(p) => p
- case Dummy1851(p) => p
- case Dummy1852(p) => p
- case Dummy1853(p) => p
- case Dummy1854(p) => p
- case Dummy1855(p) => p
- case Dummy1856(p) => p
- case Dummy1857(p) => p
- case Dummy1858(p) => p
- case Dummy1859(p) => p
- case Dummy1860(p) => p
- case Dummy1861(p) => p
- case Dummy1862(p) => p
- case Dummy1863(p) => p
- case Dummy1864(p) => p
- case Dummy1865(p) => p
- case Dummy1866(p) => p
- case Dummy1867(p) => p
- case Dummy1868(p) => p
- case Dummy1869(p) => p
- case Dummy1870(p) => p
- case Dummy1871(p) => p
- case Dummy1872(p) => p
- case Dummy1873(p) => p
- case Dummy1874(p) => p
- case Dummy1875(p) => p
- case Dummy1876(p) => p
- case Dummy1877(p) => p
- case Dummy1878(p) => p
- case Dummy1879(p) => p
- case Dummy1880(p) => p
- case Dummy1881(p) => p
- case Dummy1882(p) => p
- case Dummy1883(p) => p
- case Dummy1884(p) => p
- case Dummy1885(p) => p
- case Dummy1886(p) => p
- case Dummy1887(p) => p
- case Dummy1888(p) => p
- case Dummy1889(p) => p
- case Dummy1890(p) => p
- case Dummy1891(p) => p
- case Dummy1892(p) => p
- case Dummy1893(p) => p
- case Dummy1894(p) => p
- case Dummy1895(p) => p
- case Dummy1896(p) => p
- case Dummy1897(p) => p
- case Dummy1898(p) => p
- case Dummy1899(p) => p
- case Dummy1900(p) => p
- case Dummy1901(p) => p
- case Dummy1902(p) => p
- case Dummy1903(p) => p
- case Dummy1904(p) => p
- case Dummy1905(p) => p
- case Dummy1906(p) => p
- case Dummy1907(p) => p
- case Dummy1908(p) => p
- case Dummy1909(p) => p
- case Dummy1910(p) => p
- case Dummy1911(p) => p
- case Dummy1912(p) => p
- case Dummy1913(p) => p
- case Dummy1914(p) => p
- case Dummy1915(p) => p
- case Dummy1916(p) => p
- case Dummy1917(p) => p
- case Dummy1918(p) => p
- case Dummy1919(p) => p
- case Dummy1920(p) => p
- case Dummy1921(p) => p
- case Dummy1922(p) => p
- case Dummy1923(p) => p
- case Dummy1924(p) => p
- case Dummy1925(p) => p
- case Dummy1926(p) => p
- case Dummy1927(p) => p
- case Dummy1928(p) => p
- case Dummy1929(p) => p
- case Dummy1930(p) => p
- case Dummy1931(p) => p
- case Dummy1932(p) => p
- case Dummy1933(p) => p
- case Dummy1934(p) => p
- case Dummy1935(p) => p
- case Dummy1936(p) => p
- case Dummy1937(p) => p
- case Dummy1938(p) => p
- case Dummy1939(p) => p
- case Dummy1940(p) => p
- case Dummy1941(p) => p
- case Dummy1942(p) => p
- case Dummy1943(p) => p
- case Dummy1944(p) => p
- case Dummy1945(p) => p
- case Dummy1946(p) => p
- case Dummy1947(p) => p
- case Dummy1948(p) => p
- case Dummy1949(p) => p
- case Dummy1950(p) => p
- case Dummy1951(p) => p
- case Dummy1952(p) => p
- case Dummy1953(p) => p
- case Dummy1954(p) => p
- case Dummy1955(p) => p
- case Dummy1956(p) => p
- case Dummy1957(p) => p
- case Dummy1958(p) => p
- case Dummy1959(p) => p
- case Dummy1960(p) => p
- case Dummy1961(p) => p
- case Dummy1962(p) => p
- case Dummy1963(p) => p
- case Dummy1964(p) => p
- case Dummy1965(p) => p
- case Dummy1966(p) => p
- case Dummy1967(p) => p
- case Dummy1968(p) => p
- case Dummy1969(p) => p
- case Dummy1970(p) => p
- case Dummy1971(p) => p
- case Dummy1972(p) => p
- case Dummy1973(p) => p
- case Dummy1974(p) => p
- case Dummy1975(p) => p
- case Dummy1976(p) => p
- case Dummy1977(p) => p
- case Dummy1978(p) => p
- case Dummy1979(p) => p
- case Dummy1980(p) => p
- case Dummy1981(p) => p
- case Dummy1982(p) => p
- case Dummy1983(p) => p
- case Dummy1984(p) => p
- case Dummy1985(p) => p
- case Dummy1986(p) => p
- case Dummy1987(p) => p
- case Dummy1988(p) => p
- case Dummy1989(p) => p
- case Dummy1990(p) => p
- case Dummy1991(p) => p
- case Dummy1992(p) => p
- case Dummy1993(p) => p
- case Dummy1994(p) => p
- case Dummy1995(p) => p
- case Dummy1996(p) => p
- case Dummy1997(p) => p
- case Dummy1998(p) => p
- case Dummy1999(p) => p
-}
-}
diff --git a/test/benchmarks/bench b/test/benchmarks/bench
deleted file mode 100755
index 3aa7e7468c..0000000000
--- a/test/benchmarks/bench
+++ /dev/null
@@ -1,63 +0,0 @@
-
-#################################################################
-#
-# A simple script used to rebuild benchmarks using fsc and then run them.
-# If you need to rebuild, use:
-#
-# ./bench <arguments>
-#
-# Omitting <arguments> will print more information.
-# If you don't want to rebuild:
-#
-# ./bench skip <same-args-as-above>
-#
-#################################################################
-
-
-TOP_DIR=$PWD
-# build/pack for ant, target/pack for sbt
-SCALA_BUILD_DIR=../../target/pack
-SRC_DIR=src/
-TARGET_DIR=target
-CLASS_DIR=$TARGET_DIR/classes
-
-FSC=$SCALA_BUILD_DIR/bin/fsc
-SCALA_LIBS_PATH=$SCALA_BUILD_DIR/lib
-CLASSPATH=$SCALA_LIBS_PATH/scala-library.jar:lib/jsr166_and_extra.jar
-
-ARTIFACT=benchmarks.jar
-ARTIFACT_PATH=$TARGET_DIR/$ARTIFACT
-
-
-if [ "$1" != "skip" ]
-then
- # fetch source file list
- find $SRC_DIR -name *.scala -print > source.list
-
- # recompile with fsc
- $FSC -cp $CLASSPATH -d $CLASS_DIR @source.list
-
- # copy files
- cd $SRC_DIR
- cp -r * ../$CLASS_DIR
- cd ..
-
- # jar it up
- rm $ARTIFACT_PATH
- cd $CLASS_DIR
- jar cf $ARTIFACT .
- mv $ARTIFACT $TOP_DIR/$ARTIFACT_PATH
- cd $TOP_DIR
-fi
-
-# run a benchmark
-RUNCOMMAND="java -Xms256m -Xmx512m -server -cp $CLASSPATH:$ARTIFACT_PATH scala.collection.parallel.Benchmarking "
-if [ "$1" != skip ]
-then
- $RUNCOMMAND "$@"
-else
- $RUNCOMMAND $2 $3 $4 $5 $6 $7 $8
-fi
-
-
-
diff --git a/test/benchmarks/build.sbt b/test/benchmarks/build.sbt
index 4806ecdde8..fb05fb2c99 100644
--- a/test/benchmarks/build.sbt
+++ b/test/benchmarks/build.sbt
@@ -1,6 +1,6 @@
scalaHome := Some(file("../../build/pack"))
-scalaVersion := "2.11.8"
-scalacOptions ++= Seq("-feature", "-Yopt:l:classpath")
+scalaVersion := "2.12.0-dev"
+scalacOptions ++= Seq("-feature", "-opt:l:classpath")
lazy val root = (project in file(".")).
enablePlugins(JmhPlugin).
diff --git a/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1 b/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1
deleted file mode 100644
index c879571eae..0000000000
--- a/test/benchmarks/lib/jsr166_and_extra.jar.desired.sha1
+++ /dev/null
@@ -1 +0,0 @@
-0392ecdeb306263c471ce51fa368223388b82b61 ?jsr166_and_extra.jar
diff --git a/test/benchmarks/project/plugins.sbt b/test/benchmarks/project/plugins.sbt
index e11aa29f3b..aa49ad9872 100644
--- a/test/benchmarks/project/plugins.sbt
+++ b/test/benchmarks/project/plugins.sbt
@@ -1,2 +1,2 @@
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
-addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.2.6")
+addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.2.16")
diff --git a/test/benchmarks/source.list b/test/benchmarks/source.list
deleted file mode 100644
index c5d5f7f8fe..0000000000
--- a/test/benchmarks/source.list
+++ /dev/null
@@ -1,79 +0,0 @@
-src/scala/collection/parallel/Benchmarking.scala
-src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala
-src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
-src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala
-src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala
-src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala
-src/scala/collection/parallel/benchmarks/arrays/Resetting.scala
-src/scala/collection/parallel/benchmarks/arrays/Arrays.scala
-src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala
-src/scala/collection/parallel/benchmarks/arrays/Dummy.scala
-src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala
-src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala
-src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala
-src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala
-src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala
-src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala
-src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala
-src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala
-src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala
-src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala
-src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala
-src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala
-src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala
-src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala
-src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala
-src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala
-src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
-src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala
-src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala
-src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala
-src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala
-src/scala/collection/parallel/benchmarks/generic/Operators.scala
-src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala
-src/scala/collection/parallel/benchmarks/generic/Dummy.scala
-src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala
-src/scala/collection/parallel/benchmarks/misc/Dictionary.scala
-src/scala/collection/parallel/benchmarks/misc/Loader.scala
-src/scala/collection/parallel/benchmarks/misc/Coder.scala
-src/scala/collection/parallel/benchmarks/Bench.scala
-src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala
-src/scala/collection/parallel/benchmarks/hashtries/Combine.scala
-src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala
-src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala
-src/scala/collection/parallel/benchmarks/hashtries/Construct.scala
-src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala
-src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala
-src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
diff --git a/test/benchmarks/src/scala/collection/immutable/range-bench.scala b/test/benchmarks/src/scala/collection/immutable/range-bench.scala
deleted file mode 100644
index e167ff04e8..0000000000
--- a/test/benchmarks/src/scala/collection/immutable/range-bench.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package scala.collection.immutable
-package benchmarks
-
-object RangeTest {
- // not inlined any more, needs investigation
- //
- // class XXS {
- // private val array = Array.range(0, 100)
- // def tst = { var sum = 0; for (i <- 0 until array.length) sum += array(i); sum }
- // }
-
- var x: Int = 0
-
- def foreachSum(max: Int): Int = {
- var sum = 0
- 1 to max foreach (sum += _)
- sum
- }
- def whileSum(max: Int) = {
- var sum = 0
- var num = 1
- while (num <= max) {
- sum += num
- num += 1
- }
- sum
- }
-
- def show(max: Int, foreachNanos: Long, whileNanos: Long) {
- val winner = if (foreachNanos < whileNanos) "foreachSum" else "whileSum"
- val ratio = if (foreachNanos < whileNanos) foreachNanos.toDouble / whileNanos else whileNanos.toDouble / foreachNanos
- println("1 to %d:, %12s wins, %.3f: foreach %.3f while %.3f".format(
- max, winner, ratio,
- foreachNanos.toDouble / 1000000L,
- whileNanos.toDouble / 1000000L)
- )
- }
-
- def run(max: Int) = {
- val foreachFirst = util.Random.nextBoolean
- val t1 = System.nanoTime
- x = if (foreachFirst) foreachSum(max) else whileSum(max)
- val t2 = System.nanoTime
- x = if (foreachFirst) whileSum(max) else foreachSum(max)
- val t3 = System.nanoTime
-
- val foreachNanos = if (foreachFirst) t2 - t1 else t3 - t2
- val whileNanos = if (foreachFirst) t3 - t2 else t2 - t1
- show(max, foreachNanos, whileNanos)
- }
-
- def main(args: Array[String]): Unit = {
- var max = if (args.isEmpty) 100 else args(0).toInt
- while (max > 0) {
- run(max)
- run(max)
- run(max)
- max += (max / 7)
- }
- }
-}
diff --git a/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala b/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala
deleted file mode 100644
index c01e7cb46e..0000000000
--- a/test/benchmarks/src/scala/collection/mutable/hashtable-bench.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-import scala.collection.mutable.HashMap
-
-object Test {
- var dummy: Long = 0L
- var _foreach: Long = 0L
- var _iterator: Long = 0L
-
- def numbers: Seq[Int] = 1 to 1000000
- val map: HashMap[Int, Int] = HashMap(numbers zip numbers: _*)
-
- @inline final def timed(body: => Unit): Long = {
- val start = System.nanoTime
- body
- System.nanoTime - start
- }
-
- def go(xs: Iterable[Int], reps: Int) = {
- _foreach = 0L
- _iterator = 0L
-
- 0 until reps foreach { _ =>
- _foreach += timed(xs foreach (dummy += _))
- _iterator += timed(xs.iterator foreach (dummy += _))
- }
-
- " foreach avg " + (_foreach / reps) + "\n iterator avg " + (_iterator / reps) + "\n"
- }
-
- def go2(xs: collection.Map[Int, Int], reps: Int) = {
- _foreach = 0L
- _iterator = 0L
-
- def incDummy(nums: (Int, Int)) = {
- dummy += nums._1
- dummy -= nums._2
- }
-
- 0 until reps foreach { _ =>
- _foreach += timed(xs foreach incDummy)
- _iterator += timed(xs.iterator foreach incDummy)
- }
-
- " foreach avg " + (_foreach / reps) + "\n iterator avg " + (_iterator / reps) + "\n"
- }
-
- def main(args: Array[String]): Unit = {
- println("map.keys:")
- go(map.keys, 10) // warm
- println(go(map.keys, 10))
-
- println("map.values:")
- go(map.values, 10) // warm
- println(go(map.values, 10))
-
- println("map:")
- go2(map, 10) // warm
- println(go2(map, 10))
-
- println("// pay me no mind ... " + dummy)
- }
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
deleted file mode 100644
index bd75764636..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
+++ /dev/null
@@ -1,223 +0,0 @@
-package scala.collection.parallel
-
-
-import scala.collection.mutable.LinkedHashSet
-
-import benchmarks._
-
-
-/**
- * All benchmarks are registered here.
- *
- * @author prokopec
- */
-trait BenchmarkRegister {
-
- val benchcreators = LinkedHashSet[BenchCompanion]()
-
- def register(companion: BenchCompanion) = benchcreators += companion
-
- // parallel array benchmarks
- register(parallel_array.ReduceLight)
- register(parallel_array.ReduceNew)
- register(parallel_array.ReduceList)
- register(parallel_array.ReducePrime)
- register(parallel_array.ReduceHeavy)
- register(parallel_array.CountLight)
- register(parallel_array.CountList)
- register(parallel_array.CountHeavy)
- register(parallel_array.ForeachLight)
- register(parallel_array.ForeachHeavy)
- register(parallel_array.SumLight)
- register(parallel_array.MinLight)
- register(parallel_array.MapLight)
- register(parallel_array.FilterLight)
- register(parallel_array.PartitionLight)
- register(parallel_array.PartialMapLight)
- register(parallel_array.FlatMapLight)
- register(parallel_array.PlusPlus)
- register(parallel_array.ForallLight)
- register(parallel_array.ForallQuickStop)
- register(parallel_array.ForallStop80k)
- register(parallel_array.ForallHeavy)
- register(parallel_array.ExistsLight)
- register(parallel_array.FindLight)
- register(parallel_array.TakeMany)
- register(parallel_array.DropMany)
- register(parallel_array.SliceMany)
- register(parallel_array.SliceMedium)
- register(parallel_array.SliceFew)
- register(parallel_array.SplitHalf)
- register(parallel_array.TakeWhileLight)
- register(parallel_array.SpanLight)
- register(parallel_array.CopyToArray)
- register(parallel_array.SegmentLength)
- register(parallel_array.IndexWhere)
- register(parallel_array.LastIndexWhere)
- register(parallel_array.Reverse)
- register(parallel_array.ReverseMap)
- register(parallel_array.SameElementsLong)
- register(parallel_array.Corresponds)
- register(parallel_array.DiffHalf)
- register(parallel_array.IntersectHalf)
- register(parallel_array.RemoveDuplicates)
- register(parallel_array.PatchHalf)
- register(parallel_array.PadToDouble)
- register(parallel_array.AggregateLight)
- register(parallel_array.ScanLight)
- register(parallel_array.ScanMedium)
- register(parallel_array.GroupByLight)
- register(parallel_array.MatrixMultiplication)
-
- // parallel views
- register(parallel_view.DummyViewBenchList.Reduce)
- register(parallel_view.DummyViewBenchList.MediumReduce)
- register(parallel_view.DummyViewBenchList.ModifyThenReduce)
- register(parallel_view.DummyViewBenchList.ModifyThenForce)
- register(parallel_view.DummyViewBenchList.Iteration)
- register(parallel_view.DummyViewBenchList.IterationS)
- register(parallel_view.DummyViewBenchList.IterationM)
- register(parallel_view.DummyViewBenchList.IterationA)
- register(parallel_view.DummyViewBenchList.IterationZ)
- register(parallel_view.DummyViewBenchList.IterationP)
-
- // parallel ranges
- register(parallel_range.RangeBenches.Reduce)
- register(parallel_range.RangeBenches.ReduceMedium)
- register(parallel_range.RangeBenches.ForeachAdd)
- register(parallel_range.RangeBenches.ForeachAddCollatz)
- register(parallel_range.RangeBenches.ForeachModify)
- register(parallel_range.RangeBenches.ForeachModifyMedium)
- register(parallel_range.RangeBenches.ForeachModifyHeavy)
- register(parallel_range.RangeBenches.MapLight)
- register(parallel_range.RangeBenches.MapMedium)
-
- // array benchmarks
- register(arrays.ObjectAccess)
- register(arrays.IntAccess)
-
- // hash benchmarks
- register(hashtries.Foreach)
- register(hashtries.Iterate)
- register(hashtries.Construct)
- register(hashtries.Lookup)
- register(hashtries.Combine)
- register(hashtries.MultipleCombine)
-
- // parallel hash trie benchmarks
- register(hashtries.RefParHashTrieBenches.Reduce)
- register(hashtries.RefParHashTrieBenches.ReduceMedium)
- register(hashtries.RefParHashTrieBenches.Reduce2)
- register(hashtries.RefParHashTrieBenches.Map)
- register(hashtries.RefParHashTrieBenches.Map2)
-
- // parallel hash table map benchmarks
- register(hashtables.RefParHashTableBenches.Reduce)
- register(hashtables.RefParHashTableBenches.Reduce2)
- register(hashtables.RefParHashTableBenches.Foreach)
- register(hashtables.RefParHashTableBenches.ForeachSet)
- register(hashtables.RefParHashTableBenches.Map)
- register(hashtables.RefParHashTableBenches.Map2)
- register(hashtables.RefParHashTableBenches.HeavyMap)
- register(hashtables.RefParHashTableBenches.Filter)
- register(hashtables.RefParHashTableBenches.FlatMap)
- register(hashtables.RefParHashTableBenches.FlatMap2)
-
- // parallel hash table set benchmarks
- register(hashtables.RefParHashTableSetBenches.Reduce)
- register(hashtables.RefParHashTableSetBenches.Reduce2)
- register(hashtables.RefParHashTableSetBenches.Foreach)
- register(hashtables.RefParHashTableSetBenches.ForeachSet)
- register(hashtables.RefParHashTableSetBenches.Map)
- register(hashtables.RefParHashTableSetBenches.Map2)
- register(hashtables.RefParHashTableSetBenches.HeavyMap)
- register(hashtables.RefParHashTableSetBenches.Filter)
- register(hashtables.RefParHashTableSetBenches.FlatMap)
-
- // general examples
- register(misc.Coder)
- register(misc.Loader)
-}
-
-
-/**
- * Serves as an entrypoint to run all the benchmarks.
- */
-object Benchmarking extends BenchmarkRegister {
-
- def printHelp {
- println("Must enter at least four arguments: <collection> <benchmark> <size of the collection> <type>")
- println(" Example: ParArray reduce-light 50000 par")
- println(" Example: ParArray -all 50000 par")
- println
- println("General synthax: <collection> <benchmark> <size> <type> <parallelism-level>")
- println(" <collection> - name of the collection to test, `-all` runs benchmarks for all collections")
- println(" <benchmark> - name of the specific benchmark, `-all` runs all benchmarks for the chosen collections")
- println(" <size> - the size (number of elements) of the collection, or `-default` for default size per benchmark")
- println(" <type> - `seq` for benchmarking sequential version of the functionality")
- println(" `par` for benchmarking parallel version of the functionality")
- println(" `<something-else>` for running comparison benchmarks")
- println(" `-all` for running sequential, parallel and comparison benchmarks")
- println(" <parallelism-level> - the level of parallelism used (default 2)")
- }
-
- def otherOptions(args: Array[String]) {
- if (args.length == 0) printHelp
- else args(0) match {
- case "-list" => // lists all benchmarks
- for (bc <- benchcreators) println(bc.fullname)
- case _ => printHelp
- }
- }
-
- def main(args: Array[String]) {
- if (args.length < 4) {
- otherOptions(args)
- return
- }
-
- val collname = args(0)
- val benchname = args(1)
- val size = if (args(2) == "-default") -1 else args(2).toInt
- val tpe = args(3)
- val parlevel = if (args.length >= 5) args(4).toInt else 2
-
- // find all benchmarks to run
- val benches = benchcreators.filter(comp => {
- (collname, benchname) match {
- case ("-all", "-all") => true
- case ("-all", bn) if (benchname != "-all") => bn == comp.benchName
- case (cn, "-all") if (collname != "-all") => cn == comp.collectionName
- case (cn, bn) => cn == comp.collectionName && bn == comp.benchName
- }
- }).flatMap(comp => {
- val collsz = if (size != -1) size else comp.defaultSize
- if (tpe != "-all") List(comp.apply(collsz, parlevel, tpe))
- else for (benchtype <- "seq" :: "par" :: comp.comparisons)
- yield comp.apply(collsz, parlevel, benchtype)
- })
-
- println("Running benchmarks...")
- for (b <- benches) b.executeBenchmark
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala
deleted file mode 100644
index c20bbaeef1..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala
+++ /dev/null
@@ -1,126 +0,0 @@
-package scala.collection.parallel.benchmarks
-
-
-import scala.collection._
-import scala.testing.Benchmark
-
-
-
-trait BenchCompanion {
- def benchName: String
- def collectionName: String
- def fullname = collectionName + "." + benchName
- def defaultSize = 100000
- def comparisons = List[String]()
- def apply(sz: Int, parallelism: Int, what: String): Bench
-}
-
-
-/**
- * An interface for all benchmark classes.
- * A benchmark runs some functionality a prespecified number of times.
- */
-trait Bench extends Benchmark {
- val size: Int
-
- val parallelism: Int
-
- val runWhat: String
-
- /**
- * Name of the benchmark. Convention is for it to start with the name of the collection being
- * tested, continuing '.' and ending with the name of the specific functionality being benchmarked.
- * @return
- */
- def name: String = companion.fullname
- def collectionName: String = companion.collectionName
- def benchName: String = companion.benchName
-
- def companion: BenchCompanion
-
- def runseq: Unit
-
- def runpar: Unit
-
- /**
- * Describes the number of runs of the test.
- */
- val runs = 10
-
- /**
- * Returns the number of repetitions for this benchmark.
- */
- def repetitionsPerRun = 500
-
- /**
- * Resets the benchmark object. Typically, this means recreating
- * the collection being tested.
- */
- def reset: Unit
-
- /**
- * Returns a map of available comparison tests.
- */
- def comparisons: List[String] = companion.comparisons
-
- def comparison(name: String): Option[() => Unit] = comparisonMap.get(name)
-
- def comparisonMap: Map[String, () => Unit]
-
- def run = runWhat match {
- case "seq" => for (i <- 0 until repetitionsPerRun) runseq
- case "par" => for (i <- 0 until repetitionsPerRun) runpar
- case _ => comparison(runWhat) match {
- case Some(fun) => for (i <- 0 until repetitionsPerRun) fun()
- case None => throw new IllegalArgumentException("Unknown bench option: `" + runWhat +
- "`, need `seq`, `par` or one of: " + comparisons.mkString("`", "`, `", "`"))
- }
- }
-
- /**
- * Prints results of the benchmark. May be overridden in benchmarks.
- */
- def printResults {}
-
- def onEnd {}
-
- def executeBenchmark = {
- println("-----------------------")
- print(name + ", " + runWhat + ", par.=" + parallelism + ", sz=" + niceSize + ": ")
-
- val times = runBenchmark(runs)
-
- onEnd
-
- for (t <- times) print(t + " ")
- println
- printResults
- }
-
- private def niceSize = if (size < 1000 || size % 1000 != 0) size.toString else size / 1000 + "k"
-}
-
-
-trait HavingResult[T] extends Bench {
- var runresult: T = null.asInstanceOf[T]
-
- abstract override def printResults {
- println("result: " + (if (runresult != null) runresult else "<not set>"))
- super.printResults
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala
deleted file mode 100644
index 39232122a9..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Arrays.scala
+++ /dev/null
@@ -1,63 +0,0 @@
-package scala.collection.parallel.benchmarks.arrays
-
-
-
-
-
-
-
-object Arrays {
-
- @inline def genericApply[T](xs: Array[T], idx: Int): T = xs.asInstanceOf[AnyRef] match {
- case x: Array[AnyRef] => x(idx).asInstanceOf[T]
- case _ => genericApplyNotAnyRef(xs, idx)
- }
-
- @noinline private def genericApplyNotAnyRef[T](xs: Array[T], idx: Int): T = xs.asInstanceOf[AnyRef] match {
- case x: Array[Int] => x(idx).asInstanceOf[T]
- case x: Array[Double] => x(idx).asInstanceOf[T]
- case x: Array[Long] => x(idx).asInstanceOf[T]
- case x: Array[Float] => x(idx).asInstanceOf[T]
- case x: Array[Char] => x(idx).asInstanceOf[T]
- case x: Array[Byte] => x(idx).asInstanceOf[T]
- case x: Array[Short] => x(idx).asInstanceOf[T]
- case x: Array[Boolean] => x(idx).asInstanceOf[T]
- case x: Array[Unit] => x(idx).asInstanceOf[T]
- case null => throw new NullPointerException
- }
-
- @inline def apply(xs: AnyRef, idx: Int): Any = xs match {
- case x: Array[AnyRef] => x(idx).asInstanceOf[Any]
- case _ => applyNotAnyRef(xs, idx)
- }
-
- @noinline private def applyNotAnyRef(xs: AnyRef, idx: Int): Any = xs match {
- case x: Array[Int] => x(idx).asInstanceOf[Any]
- case x: Array[Double] => x(idx).asInstanceOf[Any]
- case x: Array[Long] => x(idx).asInstanceOf[Any]
- case x: Array[Float] => x(idx).asInstanceOf[Any]
- case x: Array[Char] => x(idx).asInstanceOf[Any]
- case x: Array[Byte] => x(idx).asInstanceOf[Any]
- case x: Array[Short] => x(idx).asInstanceOf[Any]
- case x: Array[Boolean] => x(idx).asInstanceOf[Any]
- case x: Array[Unit] => x(idx).asInstanceOf[Any]
- case null => throw new NullPointerException
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala
deleted file mode 100644
index 56af7b9d85..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Dummy.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-package scala.collection.parallel.benchmarks.arrays
-
-
-
-
-case class Dummy(in: Int) {
- def op = {}
-}
-
-object Dummy {
- def dummyOp(a: Int) = { if (a < 0) -1 }
- def dummyOp(d: Dummy) = { if (d.in < 0) d.op }
-}
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala
deleted file mode 100644
index 81f0e4da03..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/IntAccess.scala
+++ /dev/null
@@ -1,68 +0,0 @@
-package scala.collection.parallel.benchmarks.arrays
-
-
-import scala.collection.parallel.benchmarks._
-
-
-
-object IntAccess extends BenchCompanion {
- def collectionName = "array";
- def benchName = "access-int";
- def apply(sz: Int, p: Int, what: String) = new IntAccess(sz, p, what)
- override def comparisons = List("any", "cast", "manif", "unknown")
- override def defaultSize = 100000
-}
-
-
-class IntAccess(sz: Int, p: Int, what: String)
-extends Resetting(n => n, sz, p, what) with UnknownManif[Int] {
- def companion = IntAccess
-
- def runseq {}
- def runpar {}
-
- def runany = {
- var i = 0
- while (i < sz) {
- val d = anyarray(i).asInstanceOf[Int]
- i += 1
- }
- }
-
- def runcast = {
- var i = 0
- while (i < sz) {
- val d = Arrays.apply(castarray, i).asInstanceOf[Int]
- i += 1
- }
- }
-
- def runmanif = {
- var i = 0
- while (i < sz) {
- val d = manifarray(i)
- if (op(d)) i += 1
- i += 1
- }
- }
-
- def op(a: Int) = a < 0
-
- def comparisonMap = collection.Map("any" -> runany _, "cast" -> runcast _,
- "manif" -> runmanif _, "unknown" -> rununknown _)
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala
deleted file mode 100644
index 29251f3719..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/ObjectAccess.scala
+++ /dev/null
@@ -1,75 +0,0 @@
-package scala.collection.parallel.benchmarks.arrays
-
-
-import scala.collection.parallel.benchmarks._
-
-
-
-object ObjectAccess extends BenchCompanion {
- def collectionName = "array";
- def benchName = "access-obj";
- def apply(sz: Int, p: Int, what: String) = new ObjectAccess(sz, p, what)
- override def comparisons = List("any", "cast", "gencast", "manif", "unknown")
- override def defaultSize = 100000
-}
-
-
-class ObjectAccess(sz: Int, p: Int, what: String)
-extends Resetting(Dummy(_), sz, p, what) with UnknownManif[Dummy] {
- def companion = ObjectAccess
-
- def runseq {}
- def runpar {}
-
- def runany = {
- var i = 0
- while (i < sz) {
- val d = anyarray(i).asInstanceOf[Dummy]
- Dummy.dummyOp(d)
- i += 1
- }
- }
-
- def runcast = {
- var i = 0
- while (i < sz) {
- val d = Arrays.apply(castarray, i).asInstanceOf[Dummy]
- i += 1
- }
- }
-
- def rungenericcast = {
- var i = 0
- while (i < sz) {
- val d = Arrays.genericApply(gencastarray, i)
- i += 1
- }
- }
-
- def runmanif = {
- var i = 0
- while (i < sz) {
- val d = manifarray(i)
- if (d.in < 0) i += 1
- i += 1
- }
- }
-
- def comparisonMap = collection.Map("any" -> runany _, "cast" -> runcast _, "gencast" -> rungenericcast _,
- "manif" -> runmanif _, "unknown" -> rununknown _)
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala
deleted file mode 100644
index 22d2107f62..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/Resetting.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-package scala.collection.parallel.benchmarks.arrays
-
-
-import scala.collection.parallel.benchmarks._
-
-
-abstract class Resetting[T: ClassTag](elemcreate: Int => T, sz: Int, p: Int, what: String)
-extends Bench {
- val size = sz
- val parallelism = p
- val runWhat = what
-
- var anyarray: Array[Any] = null
- var castarray: AnyRef = null
- var gencastarray: Array[T] = null
- var manifarray: Array[T] = null
-
- reset
-
- def reset = what match {
- case "any" =>
- anyarray = new Array[Any](sz)
- for (i <- 0 until sz) anyarray(i) = elemcreate(i)
- case "cast" =>
- val arr = new Array[T](sz)
- for (i <- 0 until sz) arr(i) = elemcreate(i)
- castarray = arr
- case "gencast" =>
- gencastarray = new Array[T](sz)
- for (i <- 0 until sz) gencastarray(i) = elemcreate(i)
- case "manif" =>
- manifarray = new Array[T](sz)
- for (i <- 0 until sz) manifarray(i) = elemcreate(i)
- case "unknown" =>
- manifarray = new Array[T](sz)
- for (i <- 0 until sz) manifarray(i) = elemcreate(i)
- case _ =>
- }
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala
deleted file mode 100644
index 46a28ae111..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/arrays/UnknownManif.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-package scala.collection.parallel.benchmarks.arrays
-
-
-
-
-trait UnknownManif[T] {
- def manifarray: Array[T]
- def size: Int
-
- def rununknown {
- val arr = manifarray
- val sz = size
- var i = 0
- while (i < sz) {
- val d = arr(i)
- op(d)
- i += 1
- }
- }
-
- def op(d: Any) {}
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala
deleted file mode 100644
index 3b5308f8c2..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala
+++ /dev/null
@@ -1,83 +0,0 @@
-package scala.collection.parallel.benchmarks.generic
-
-
-
-
-class Dummy(val in: Int) {
- var num = in
- override def toString = in.toString
- override def hashCode = in
- def dummy = num + in
- def one = "1".length
-}
-
-
-object DummyOperators extends Operators[Dummy] {
- val foreachFun = (a: Dummy) => {
- a
- ()
- }
- val reducer = (a: Dummy, b: Dummy) => {
- var i = 0
- if (a.in > b.in) {
- a.num = a.in + b.in + i
- a
- } else {
- b.num = a.in + b.in + i
- b
- }
- }
- private def rec(a: Int, b: Int): Int = {
- val result = if (b == 0) a else {
- rec(b, a - b * (a / b))
- }
- result + 1000
- }
- val mediumreducer = (a: Dummy, b: Dummy) => {
- var i = 0
- var sum = a.num + b.num
- b.num = rec(a.num, b.num)
- b
- }
- val filterer = (a: Dummy) => {
- a.in % 2 == 0
- }
- val mapper = (a: Dummy) => {
- a.num = a.dummy + a.num + a.in + a.one
- a
- }
- override val mapper2 = (a: Dummy) => {
- val x = 1
- new Dummy(a.in * -2 + x)
- }
- val heavymapper = (a: Dummy) => {
- var i = -100
- while (i < 0) {
- if (a.in < i) a.num += 1
- i += 1
- }
- a
- }
- val flatmapper = (a: Dummy) => {
- List(a, a, a, a, a)
- }
- val taker = (a: Dummy) => {
- a.in >= 0
- }
- val eachFun: Dummy => Unit = (d: Dummy) => {
- d.dummy
- }
- override val eachPairFun: ((Dummy, Dummy)) => Unit = p => {
- p._1.dummy
- p._2.dummy
- }
- override def sequence(sz: Int): Seq[Dummy] = {
- val pa = new collection.parallel.mutable.ParArray[Dummy](sz)
- for (i <- 0 until sz) pa(i) = new Dummy(i)
- pa
- }
-}
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala
deleted file mode 100644
index 539e3f6972..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-package scala.collection.parallel.benchmarks.generic
-
-
-
-
-
-
-trait Operators[T] {
-
- def foreachFun: T => Unit
- def reducer: (T, T) => T
- def mediumreducer: (T, T) => T
- def filterer: T => Boolean
- def mapper: T => T
- def mapper2: T => T = error("unsupported")
- def heavymapper: T => T
- def flatmapper: T => Seq[T]
- def taker: T => Boolean
- def eachFun: T => Unit
- def eachPairFun: ((T, T)) => Unit = error("unsupported")
- def sequence(sz: Int): Seq[T] = error("unsupported")
-
-}
-
-
-
-trait IntOperators extends Operators[Int] {
-
- val foreachFun: Int => Unit = x => ()
- val reducer: (Int, Int) => Int = _ + _
- val mediumreducer: (Int, Int) => Int = (a: Int, b: Int) => {
- val result = if (b == 0) a else {
- mediumreducer.apply(b, a - b * (a / b))
- }
- result + 1000
- }
- val filterer: Int => Boolean = _ % 2 == 0
- val mapper: Int => Int = _ * 2
- val heavymapper: Int => Int = (n: Int) => {
- var i = -10
- var sum = 0
- while (i < 0) {
- sum += -i
- i += 1
- }
- n + sum
- }
- val flatmapper: Int => Seq[Int] = (n: Int) => {
- List(n, n, n, n, n)
- }
- val taker: Int => Boolean = _ < 10000
- val eachFun: Int => Unit = { n =>
- n % 2 == 0
- }
-
-}
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala
deleted file mode 100644
index c39c384927..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/ParallelBenches.scala
+++ /dev/null
@@ -1,362 +0,0 @@
-package scala.collection.parallel
-package benchmarks
-package generic
-
-
-
-import scala.collection.SeqView
-
-
-
-trait ParIterableBenches[T, Coll <: ParIterable[T]] {
-self =>
-
- def createSequential(sz: Int, p: Int): Iterable[T]
- def createParallel(sz: Int, p: Int): Coll
- def nameOfCollection: String
- def operators: Operators[T]
-
- trait IterableBenchCompanion extends BenchCompanion {
- def collectionName = self.nameOfCollection
- }
-
- trait IterableBench extends collection.parallel.benchmarks.Bench {
- protected var seqcoll: Iterable[T] = null
- protected var parcoll: Coll = null.asInstanceOf[Coll]
-
- reset
-
- def reset = runWhat match {
- case "seq" => this.seqcoll = createSequential(size, parallelism)
- case "par" => this.parcoll = createParallel(size, parallelism)
- case _ =>
- }
-
- def nameOfCollection = self.nameOfCollection
- def operators = self.operators
- def createSequential(sz: Int, p: Int) = self.createSequential(size, parallelism)
- def createParallel(sz: Int, p: Int) = self.createParallel(size, parallelism)
- def forkJoinPool: scala.concurrent.forkjoin.ForkJoinPool = self.forkJoinPool
-
- override def printResults {
- println(" --- Fork join pool state --- ")
- println("Parallelism: " + forkJoinPool.getParallelism)
- println("Active threads: " + forkJoinPool.getActiveThreadCount)
- println("Work stealings: " + forkJoinPool.getStealCount)
- }
-
- }
-
- def forkJoinPool: scala.concurrent.forkjoin.ForkJoinPool
-
-}
-
-
-trait ParSeqBenches[T, Coll <: ParSeq[T]] extends ParIterableBenches[T, Coll] {
-self =>
-
- def createSequential(sz: Int, p: Int): Seq[T]
-
- trait SeqBenchCompanion extends BenchCompanion {
- def collectionName = self.nameOfCollection
- }
-
- trait SeqBench extends IterableBench {
- def seqcollAsSeq = seqcoll.asInstanceOf[Seq[T]]
- override def createSequential(sz: Int, p: Int) = self.createSequential(sz, p)
- }
-
-}
-
-
-
-
-/** Standard benchmarks for collections.
- */
-trait StandardParIterableBenches[T, Coll <: ParIterable[T]] extends ParIterableBenches[T, Coll] {
-
- object Reduce extends IterableBenchCompanion {
- override def defaultSize = 50000
- def benchName = "reduce";
- def apply(sz: Int, p: Int, w: String) = new Reduce(sz, p, w)
- }
-
- class Reduce(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.reduceLeft(operators.reducer)
- def runpar = this.parcoll.reduce(operators.reducer)
- def companion = Reduce
- }
-
- object ReduceMedium extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "reduce-medium";
- def apply(sz: Int, p: Int, w: String) = new ReduceMedium(sz, p, w)
- }
-
- class ReduceMedium(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.reduceLeft(operators.mediumreducer)
- def runpar = this.parcoll.reduce(operators.mediumreducer)
- def companion = ReduceMedium
- }
-
- object Map extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "map";
- def apply(sz: Int, p: Int, w: String) = new Map(sz, p, w)
- }
-
- class Map(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.map(operators.mapper)
- def runpar = this.parcoll.map(operators.mapper)
- def companion = Map
- }
-
- object Filter extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "filter";
- def apply(sz: Int, p: Int, w: String) = new Filter(sz, p, w)
- }
-
- class Filter(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.filter(operators.filterer)
- def runpar = this.parcoll.filter(operators.filterer)
- def companion = Filter
- }
-
- object FlatMap extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "flatmap";
- def apply(sz: Int, p: Int, w: String) = new FlatMap(sz, p, w)
- }
-
- class FlatMap(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.flatMap(operators.flatmapper)
- def runpar = this.parcoll.flatMap(operators.flatmapper)
- def companion = FlatMap
- }
-
-}
-
-
-
-/** Benchmarks for sequence views.
- */
-trait ParSeqViewBenches[T, Coll <: ParSeqView[T, ParSeq[T], CollSeq], CollSeq] extends ParSeqBenches[T, Coll] {
-self =>
-
- trait SeqViewBench extends SeqBench {
- lazy val seqview: SeqView[T, Seq[T]] = createSeqView(size, parallelism)
-
- def createSeqView(sz: Int, p: Int) = self.createSeqView(sz, p)
- }
-
- def createSeqView(sz: Int, p: Int): SeqView[T, Seq[T]]
-
- object Iteration extends SeqBenchCompanion {
- override def defaultSize = 250000
- def benchName = "iter"
- def apply(sz: Int, p: Int, w: String) = new Iteration(sz, p, w)
- }
-
- class Iteration(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- def comparisonMap = collection.Map("seqview" -> runseqview _)
- def runseq = this.seqcoll.foreach(operators.eachFun)
- def runpar = this.parcoll.pforeach(operators.eachFun)
- def runseqview = {
- this.seqview.foreach(operators.eachFun)
- }
- def companion = Iteration
- }
-
- object IterationS extends SeqBenchCompanion {
- override def defaultSize = 250000
- def benchName = "iter-s"
- def apply(sz: Int, p: Int, w: String) = new IterationS(sz, p, w)
- }
-
- class IterationS(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- def comparisonMap = collection.Map("seqview" -> runseqview _)
- def runseq = this.seqcoll.slice(0, size / 2).foreach(operators.eachFun)
- def runpar = this.parcoll.slice(0, size / 2).pforeach(operators.eachFun)
- def runseqview = this.seqview.slice(0, size / 2).foreach(operators.eachFun)
- def companion = IterationS
- }
-
- object IterationM extends SeqBenchCompanion {
- override def defaultSize = 100000
- def benchName = "iter-m"
- def apply(sz: Int, p: Int, w: String) = new IterationM(sz, p, w)
- }
-
- class IterationM(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- def comparisonMap = collection.Map("seqview" -> runseqview _)
- def runseq = this.seqcoll.map(operators.mapper).foreach(operators.eachFun)
- def runpar = this.parcoll.map(operators.mapper).pforeach(operators.eachFun)
- def runseqview = this.seqview.map(operators.mapper).foreach(operators.eachFun)
- def companion = IterationM
- }
-
- object IterationA extends SeqBenchCompanion {
- override def defaultSize = 50000
- def benchName = "iter-a"
- def apply(sz: Int, p: Int, w: String) = new IterationA(sz, p, w)
- }
-
- class IterationA(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- val appended = operators.sequence(size)
- val sqappended = appended.toSeq
- def comparisonMap = collection.Map("seqview" -> runseqview _)
- def runseq = {
- val withapp = this.seqcoll.++(sqappended)
- withapp.foreach(operators.eachFun)
- }
- def runpar = this.parcoll.++(appended).pforeach(operators.eachFun)
- def runseqview = this.seqview.++(appended).foreach(operators.eachFun)
- def companion = IterationA
- }
-
- object IterationZ extends SeqBenchCompanion {
- override def defaultSize = 50000
- def benchName = "iter-z"
- def apply(sz: Int, p: Int, w: String) = new IterationZ(sz, p, w)
- }
-
- class IterationZ(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- val zipped = operators.sequence(size)
- def comparisonMap = collection.Map("seqview" -> runseqview _)
- def runseq = {
- val withzip = this.seqcoll.zip(zipped)
- withzip.foreach(operators.eachPairFun)
- }
- def runpar = this.parcoll.zip(zipped).pforeach(operators.eachPairFun)
- def runseqview = this.seqview.zip(zipped).foreach(operators.eachPairFun)
- def companion = IterationZ
- }
-
- object IterationP extends SeqBenchCompanion {
- override def defaultSize = 50000
- def benchName = "iter-p"
- def apply(sz: Int, p: Int, w: String) = new IterationP(sz, p, w)
- }
-
- class IterationP(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- val patch = operators.sequence(size / 4)
- val sqpatch = patch.toSeq
- def comparisonMap = collection.Map("seqview" -> runseqview _)
- def runseq = {
- val withpatch = this.seqcollAsSeq.patch(size / 4, sqpatch, size / 2)
- withpatch.foreach(operators.eachFun)
- }
- def runpar = this.parcoll.patch(size / 4, patch, size / 2).pforeach(operators.eachFun)
- def runseqview = this.seqview.patch(size / 4, patch, size / 2).foreach(operators.eachFun)
- def companion = IterationP
- }
-
- object Reduce extends SeqBenchCompanion {
- override def defaultSize = 50000
- def benchName = "reduce";
- def apply(sz: Int, p: Int, w: String) = new Reduce(sz, p, w)
- }
-
- class Reduce(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.reduceLeft(operators.reducer)
- def runpar = this.parcoll.reduce(operators.reducer)
- def companion = Reduce
- }
-
- object MediumReduce extends SeqBenchCompanion {
- override def defaultSize = 50000
- def benchName = "reduce-medium";
- def apply(sz: Int, p: Int, w: String) = new MediumReduce(sz, p, w)
- }
-
- class MediumReduce(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.reduceLeft(operators.mediumreducer)
- def runpar = this.parcoll.reduce(operators.mediumreducer)
- def companion = Reduce
- }
-
- object ModifyThenReduce extends SeqBenchCompanion {
- override def defaultSize = 20000
- def benchName = "modify-then-reduce";
- def apply(sz: Int, p: Int, w: String) = new ModifyThenReduce(sz, p, w)
- }
-
- class ModifyThenReduce(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- val toadd = createSequential(size, parallelism)
- def comparisonMap = collection.Map()
- def runseq = {
- val modified = (seqcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size)
- modified.reduceLeft(operators.reducer)
- }
- def runpar = {
- val modified = (parcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size)
- modified.reduce(operators.reducer)
- }
- def companion = ModifyThenReduce
- }
-
- object ModifyThenForce extends SeqBenchCompanion {
- override def defaultSize = 20000
- def benchName = "modify-then-force";
- def apply(sz: Int, p: Int, w: String) = new ModifyThenForce(sz, p, w)
- }
-
- class ModifyThenForce(val size: Int, val parallelism: Int, val runWhat: String)
- extends SeqBench with SeqViewBench {
- val toadd = createSequential(size, parallelism)
- def comparisonMap = collection.Map()
- def runseq = (seqcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size)
- def runpar = {
- val r: ParSeqView[T, ParSeq[T], Seq[T]] = (parcoll ++ toadd).drop(size).map(operators.mapper).++(toadd).take(size)
- r.force
- }
- def companion = ModifyThenForce
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala
deleted file mode 100644
index 17f0315103..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTableSets.scala
+++ /dev/null
@@ -1,144 +0,0 @@
-package scala.collection.parallel.benchmarks.hashtables
-
-
-
-
-import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches
-import scala.collection.parallel.benchmarks.generic.Dummy
-import scala.collection.parallel.benchmarks.generic.DummyOperators
-import scala.collection.parallel.mutable.ParHashSet
-
-
-
-
-
-trait ParHashTableSetBenches[T] extends StandardParIterableBenches[T, ParHashSet[T]] {
-
- def nameOfCollection = "mutable.ParHashSet"
- def comparisonMap = collection.mutable.Set()
- val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool
-
- object Map2 extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "map2";
- def apply(sz: Int, p: Int, w: String) = new Map2(sz, p, w)
- }
-
- class Map2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- var result: Int = 0
- def comparisonMap = collection.Map()
- def runseq = {
- val r = this.seqcoll.asInstanceOf[collection.mutable.HashSet[T]].map(operators.mapper2)
- result = r.size
- }
- def runpar = {
- result = this.parcoll.map(operators.mapper2).size
- }
- def companion = Map2
- override def repetitionsPerRun = 50
- override def printResults {
- println("Size of last result: " + result)
- }
- }
-
- object HeavyMap extends IterableBenchCompanion {
- override def defaultSize = 5000
- override def comparisons = List()
- def benchName = "heavy-map";
- def apply(sz: Int, p: Int, w: String) = new HeavyMap(sz, p, w)
- }
-
- class HeavyMap(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- var result: Int = 0
- def comparisonMap = collection.Map()
- def runseq = {
- val r = this.seqcoll.asInstanceOf[collection.mutable.HashSet[T]].map(operators.heavymapper)
- result = r.size
- }
- def runpar = {
- result = this.parcoll.map(operators.heavymapper).size
- }
- def companion = HeavyMap
- override def repetitionsPerRun = 50
- }
-
- object Reduce2 extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "reduce2";
- def apply(sz: Int, p: Int, w: String) = new Reduce2(sz, p, w)
- }
-
- class Reduce2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.reduceLeft(operators.mediumreducer)
- def runpar = this.parcoll.reduce(operators.mediumreducer)
- def companion = Reduce2
- }
-
- object Foreach extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "foreach";
- def apply(sz: Int, p: Int, w: String) = new Foreach(sz, p, w)
- }
-
- class Foreach(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.foreach(operators.foreachFun)
- def runpar = this.parcoll.pforeach(operators.foreachFun)
- def companion = Foreach
- }
-
-}
-
-
-
-
-
-object RefParHashTableSetBenches extends ParHashTableSetBenches[Dummy] {
-
- object ForeachSet extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "foreach-set";
- def apply(sz: Int, p: Int, w: String) = new ForeachSet(sz, p, w)
- }
-
- class ForeachSet(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val array = new Array[Int](size)
- def comparisonMap = collection.Map()
- def runseq = for (x <- this.seqcoll) array(x.in) += 1
- def runpar = this.parcoll.pforeach { x => array(x.in) += 1 }
- def companion = ForeachSet
-
- override def onEnd {
- for (i <- 0 until array.length) {
- assert(array(i) == repetitionsPerRun * runs)
- }
- }
- }
-
- val operators = DummyOperators
-
- def createSequential(sz: Int, p: Int) = {
- val ht = new collection.mutable.HashSet[Dummy]
- for (i <- 0 until sz) ht += new Dummy(i)
- ht
- }
-
- def createParallel(sz: Int, p: Int) = {
- val phm = new ParHashSet[Dummy]
- for (i <- 0 until sz) phm += new Dummy(i)
- forkJoinPool.setParallelism(p)
- collection.parallel.tasksupport.environment = forkJoinPool
- phm
- }
-
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
deleted file mode 100644
index 79d038bf3d..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
+++ /dev/null
@@ -1,232 +0,0 @@
-package scala.collection.parallel.benchmarks.hashtables
-
-
-
-
-import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches
-import scala.collection.parallel.benchmarks.generic.Dummy
-import scala.collection.parallel.benchmarks.generic.Operators
-import scala.collection.parallel.mutable.ParHashMap
-
-
-
-
-
-trait ParHashTableBenches[K, V] extends StandardParIterableBenches[(K, V), ParHashMap[K, V]] {
-
- def nameOfCollection = "mutable.ParHashMap"
- def comparisonMap = collection.mutable.Map()
- val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool
-
- object Map2 extends IterableBenchCompanion {
- override def defaultSize = 40000
- override def comparisons = List("jhashtable")
- def benchName = "map2";
- def apply(sz: Int, p: Int, w: String) = new Map2(sz, p, w)
- }
-
- class Map2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- var result: Int = 0
- def comparisonMap = collection.Map("jhashtable" -> runjhashtable _)
- def runseq = {
- val r = this.seqcoll.asInstanceOf[collection.mutable.HashMap[K, V]].map(operators.mapper2)
- result = r.size
- }
- def runpar = {
- result = this.parcoll.map(operators.mapper2).size
- }
- def runjhashtable = {
- val jumap = new java.util.HashMap[K, V]()
- val it = this.seqcoll.iterator
- val f = operators.mapper2
- while (it.hasNext) {
- val p = f(it.next)
- jumap.put(p._1, p._2)
- }
- result = jumap.size
- }
- override def reset = runWhat match {
- case "jhashtable" => this.seqcoll = createSequential(size, parallelism)
- case _ => super.reset
- }
- def companion = Map2
- override def repetitionsPerRun = 50
- override def printResults {
- println("Size of last result: " + result)
- }
- }
-
- object FlatMap2 extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "flatmap2";
- def apply(sz: Int, p: Int, w: String) = new FlatMap2(sz, p, w)
- }
-
- class FlatMap2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- override def repetitionsPerRun = 25
- def runseq = this.seqcoll.flatMap(operators.flatmapper)
- def runpar = this.parcoll.flatMap(operators.flatmapper)
- def companion = FlatMap2
- }
-
- object HeavyMap extends IterableBenchCompanion {
- override def defaultSize = 5000
- override def comparisons = List()
- def benchName = "heavy-map";
- def apply(sz: Int, p: Int, w: String) = new HeavyMap(sz, p, w)
- }
-
- class HeavyMap(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- var result: Int = 0
- def comparisonMap = collection.Map()
- def runseq = {
- val r = this.seqcoll.asInstanceOf[collection.mutable.HashMap[K, V]].map(operators.heavymapper)
- result = r.size
- }
- def runpar = {
- result = this.parcoll.map(operators.heavymapper).size
- }
- def companion = HeavyMap
- override def repetitionsPerRun = 50
- }
-
- object Reduce2 extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "reduce2";
- def apply(sz: Int, p: Int, w: String) = new Reduce2(sz, p, w)
- }
-
- class Reduce2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.reduceLeft(operators.mediumreducer)
- def runpar = this.parcoll.reduce(operators.mediumreducer)
- def companion = Reduce2
- }
-
- object Foreach extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "foreach";
- def apply(sz: Int, p: Int, w: String) = new Foreach(sz, p, w)
- }
-
- class Foreach(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def comparisonMap = collection.Map()
- def runseq = this.seqcoll.foreach(operators.foreachFun)
- def runpar = this.parcoll.pforeach(operators.foreachFun)
- def companion = Foreach
- }
-
-}
-
-
-
-
-
-object RefParHashTableBenches extends ParHashTableBenches[Dummy, Dummy] {
-
- type DPair = (Dummy, Dummy);
-
- object ForeachSet extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List()
- def benchName = "foreach-set";
- def apply(sz: Int, p: Int, w: String) = new ForeachSet(sz, p, w)
- }
-
- class ForeachSet(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val array = new Array[Int](size)
- def comparisonMap = collection.Map()
- def runseq = for (p <- this.seqcoll) array(p._1.in) += 1
- def runpar = this.parcoll.pforeach { p => array(p._1.in) += 1 }
- def companion = ForeachSet
-
- override def onEnd {
- for (i <- 0 until array.length) {
- assert(array(i) == repetitionsPerRun * runs)
- }
- }
- }
-
- object operators extends Operators[DPair] {
- def gcd(a: Int, b: Int): Int = {
- val result = if (b == 0) a else {
- gcd(b, a - b * (a / b))
- }
- result + 1000
- }
- def heavy(a: Int): Int = {
- var i = 0
- var sum = a
- while (i < 3000) {
- i += 1
- sum += a + i
- }
- sum
- }
- val foreachFun = (t: DPair) => {
- t
- ()
- }
- val reducer = (x: DPair, y: DPair) => {
- //y._2.num = x._2.in + y._2.in
- y
- }
- val mediumreducer = (x: DPair, y: DPair) => {
- y._2.num = gcd(x._2.in, y._2.in)
- y
- }
- val filterer = (p: DPair) => {
- p._1.num % 2 == 0
- }
- val mapper = (p: DPair) => {
- val a = p._1
- a.num = a.in % 2
- (a, p._2)
- }
- val flatmapper = (p: DPair) => {
- for (i <- 0 until 20) yield p
- }
- override val mapper2 = (p: DPair) => {
- val a = 1 //heavy(p._1.in)
- (new Dummy(p._1.in * -2 + a), p._2)
- }
- val heavymapper = (p: DPair) => {
- var i = -2000
- var t = p._1.in
- while (i < 0) {
- t += (p._2.num - p._1.num) / 500
- p._1.num += p._2.num + t
- i += 1
- }
- (p._1, new Dummy(0))
- }
- val taker = (p: DPair) => true
- val eachFun: DPair => Unit = { dp =>
- dp._1.dummy
- }
- }
-
- def createSequential(sz: Int, p: Int) = {
- val ht = new collection.mutable.HashMap[Dummy, Dummy]
- for (i <- 0 until sz) ht += ((new Dummy(i), new Dummy(i)))
- ht
- }
-
- def createParallel(sz: Int, p: Int) = {
- val phm = new ParHashMap[Dummy, Dummy]
- for (i <- 0 until sz) phm += ((new Dummy(i), new Dummy(i)))
- forkJoinPool.setParallelism(p)
- collection.parallel.tasksupport.environment = forkJoinPool
- phm
- }
-
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala
deleted file mode 100644
index 96598840fd..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Combine.scala
+++ /dev/null
@@ -1,66 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-
-
-
-class Combine(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit {
- var thattrie = new HashTrie[Int, Int]
- for (i <- size until 2 * size) thattrie += ((i, i))
- val thatmap = new HashMap[Int, Int]
- for (i <- size until 2 * size) thatmap += ((i, i))
-
- def runpar = throw new UnsupportedOperationException
- def runseq = runhashtrie
- def runhashtrie = {
- hashtrie merge thattrie
- // println
- // println("both tries: " + HashTrie.bothtries)
- // println("one trie, one item: " + HashTrie.onetrie)
- // println("both single: " + HashTrie.bothsingle)
- // System exit 1
- }
- def rundestructive = {
- hashtrie merge thattrie
- }
- def runappendtrie = hashtrie ++ thattrie
- def runhashmap = hashmap ++ thatmap
- def companion = Combine
- def comparisonMap = Map("hashtrie" -> runhashtrie _, "hashmap" -> runhashmap _, "destruct" -> rundestructive _, "appendtrie" -> runappendtrie _)
- override def reset = runWhat match {
- case "appendtrie" => initHashTrie
- case "destruct" => initHashTrie
- case _ => super.reset
- }
-}
-
-
-object Combine extends BenchCompanion {
- def collectionName = "HashTrie"
- def benchName = "combine";
- def apply(sz: Int, p: Int, what: String) = new Combine(sz, p, what)
- override def defaultSize = 5000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala
deleted file mode 100644
index f65a349ec5..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Construct.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-
-
-
-class Construct(val size: Int, val parallelism: Int, val runWhat: String) extends Bench {
- def reset {}
-
- def runpar = throw new UnsupportedOperationException
- def runseq = throw new UnsupportedOperationException
- def runhashmap = {
- val hashmap = new HashMap[Int, Int]
- for (i <- 0 until size) hashmap += ((i, i))
- }
- def runhashtrie = {
- var hashtrie = new HashTrie[Int, Int]
- for (i <- 0 until size) hashtrie += ((i, i))
- }
-
- def companion = Construct
- def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _)
-}
-
-
-object Construct extends BenchCompanion {
- def collectionName = "HashTrie"
- def benchName = "construct";
- def apply(sz: Int, p: Int, what: String) = new Construct(sz, p, what)
- override def defaultSize = 5000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala
deleted file mode 100644
index f53ea02e36..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Foreach.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-
-
-
-class Foreach(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit {
- def runpar = throw new UnsupportedOperationException
- def runseq = runhashtrie
- def runhashmap = hashmap.foreach(n => ())
- def runhashtrie = hashtrie.foreach(n => ())
- def companion = Foreach
- def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _)
-}
-
-
-object Foreach extends BenchCompanion {
- def collectionName = "HashTrie"
- def benchName = "foreach-light";
- def apply(sz: Int, p: Int, what: String) = new Foreach(sz, p, what)
- override def defaultSize = 25000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala
deleted file mode 100644
index 79ebd0e98c..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/IntInit.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-trait IntInit extends Bench {
- var hashmap: HashMap[Int, Int] = null
- var hashtrie: HashTrie[Int, Int] = null
-
- reset
- def reset = runWhat match {
- case "hashmap" => initHashMap
- case "hashtrie" => initHashTrie
- case "seq" => initHashTrie
- }
- def initHashTrie = {
- hashtrie = new HashTrie
- for (i <- 0 until size) hashtrie += ((i, i))
- }
- def initHashMap = {
- hashmap = new HashMap
- for (i <- 0 until size) hashmap += ((i, i))
- }
-
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala
deleted file mode 100644
index d27aa200b8..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Iterate.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-
-
-
-class Iterate(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit {
- def runpar = throw new UnsupportedOperationException
- def runseq = throw new UnsupportedOperationException
- def runhashmap = {
- val it = hashmap.iterator
- while (it.hasNext) it.next
- }
- def runhashtrie = {
- val it = hashtrie.iterator
- while (it.hasNext) it.next
- }
- def companion = Iterate
- def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _)
-}
-
-
-object Iterate extends BenchCompanion {
- def collectionName = "HashTrie"
- def benchName = "iterate-light";
- def apply(sz: Int, p: Int, what: String) = new Iterate(sz, p, what)
- override def defaultSize = 25000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala
deleted file mode 100644
index 4ee8c17118..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/Lookup.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-
-
-
-class Lookup(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit {
- def runpar = throw new UnsupportedOperationException
- def runseq = throw new UnsupportedOperationException
- def runhashmap = {
- var i = 0
- while (i < size) {
- hashmap(i)
- i += 1
- }
- }
- def runhashtrie = {
- var i = 0
- while (i < size) {
- hashtrie(i)
- i += 1
- }
- }
- def companion = Iterate
- def comparisonMap = Map("hashmap" -> runhashmap _, "hashtrie" -> runhashtrie _)
-}
-
-
-object Lookup extends BenchCompanion {
- def collectionName = "HashTrie"
- def benchName = "lookup";
- def apply(sz: Int, p: Int, what: String) = new Lookup(sz, p, what)
- override def defaultSize = 25000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala
deleted file mode 100644
index c08d6b5cad..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/MultipleCombine.scala
+++ /dev/null
@@ -1,87 +0,0 @@
-package scala.collection.parallel.benchmarks
-package hashtries
-
-
-
-
-import collection.immutable.{HashMap => HashTrie}
-import collection.mutable.HashMap
-
-
-
-
-
-
-class MultipleCombine(val size: Int, val parallelism: Int, val runWhat: String) extends Bench with IntInit {
- var combines = 10
-
- var thattries = new Array[HashTrie[Int, Int]](combines)
- def initTries = for (r <- 0 until combines) {
- var thattrie = new HashTrie[Int, Int]
- for (i <- ((r + 1) * size) until ((r + 2) * size)) thattrie += ((i, i))
- thattries(r) = thattrie
- }
- initTries
-
- val thatmaps = new Array[HashMap[Int, Int]](10)
- def initMaps = for (r <- 0 until combines) {
- var thatmap = new HashMap[Int, Int]
- for (i <- ((r + 1) * size) until ((r + 2) * size)) thatmap += ((i, i))
- thatmaps(r) = thatmap
- }
- initMaps
-
- override def repetitionsPerRun = 25
- def runpar = throw new UnsupportedOperationException
- def runseq = runhashtrie
- def runhashtrie = {
- initHashTrie
- var trie = hashtrie
- for (r <- 0 until combines) trie = trie merge thattries(r)
- }
- def runappendtrie = {
- initHashTrie
- var trie = hashtrie
- for (r <- 0 until combines) trie = trie ++ thattries(r)
- }
- def runhashmap = {
- initHashMap
- var map = hashmap
- for (r <- 0 until combines) map = map ++ thatmaps(r)
- }
- def rundestructive = {
- initHashTrie
- var trie = hashtrie
- for (r <- 0 until combines) trie = trie merge thattries(r)
- }
- def companion = MultipleCombine
- def comparisonMap = Map("hashtrie" -> runhashtrie _, "hashmap" -> runhashmap _, "appendtrie" -> runappendtrie _, "destruct" -> rundestructive _)
- override def reset = runWhat match {
- case "appendtrie" => initHashTrie
- case "destruct" => initHashTrie
- case _ => super.reset
- }
-}
-
-
-object MultipleCombine extends BenchCompanion {
- def collectionName = "HashTrie"
- def benchName = "multi-combine";
- def apply(sz: Int, p: Int, what: String) = new MultipleCombine(sz, p, what)
- override def defaultSize = 5000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
deleted file mode 100644
index dc8804cf57..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
+++ /dev/null
@@ -1,180 +0,0 @@
-package scala.collection.parallel.benchmarks.hashtries
-
-
-
-
-import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches
-import scala.collection.parallel.benchmarks.generic.Dummy
-import scala.collection.parallel.benchmarks.generic.Operators
-import scala.collection.parallel.immutable.ParHashMap
-
-
-
-
-
-trait ParHashTrieBenches[K, V] extends StandardParIterableBenches[(K, V), ParHashMap[K, V]] {
-
- def nameOfCollection = "immutable.ParHashMap"
- def comparisonMap = collection.Map()
- val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool
-
- object Map2 extends IterableBenchCompanion {
- override def defaultSize = 5000
- override def comparisons = List("jhashtable", "hashtable")
- def benchName = "map2";
- def apply(sz: Int, p: Int, w: String) = new Map2(sz, p, w)
- }
-
- class Map2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- var result: Int = 0
- def comparisonMap = collection.Map("jhashtable" -> runjhashtable _, "hashtable" -> runhashtable _)
- def runseq = {
- val r = this.seqcoll.asInstanceOf[collection.immutable.HashMap[K, V]].map(operators.mapper2)
- result = r.size
- }
- def runpar = {
- result = this.parcoll.map(operators.mapper2).size
- }
- def runjhashtable = {
- val jumap = new java.util.HashMap[K, V]()
- val it = this.seqcoll.iterator
- while (it.hasNext) {
- val p = it.next
- jumap.put(p._1, p._2)
- }
- result = jumap.size
- }
- def runhashtable = {
- val smap = collection.mutable.HashMap[K, V]()
- val it = this.seqcoll.iterator
- while (it.hasNext) {
- val p = it.next
- smap.put(p._1, p._2)
- }
- result = smap.size
- }
- override def reset = runWhat match {
- case "jhashtable" => this.seqcoll = createSequential(size, parallelism)
- case "hashtable" => this.seqcoll = createSequential(size, parallelism)
- case _ => super.reset
- }
- def companion = Map2
- override def repetitionsPerRun = 50
- override def printResults {
- println("Size of last result: " + result)
- }
- }
-
- object Reduce2 extends IterableBenchCompanion {
- override def defaultSize = 50000
- override def comparisons = List("hashtable")
- def benchName = "reduce2";
- def apply(sz: Int, p: Int, w: String) = new Reduce2(sz, p, w)
- }
-
- class Reduce2(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- private var ht: collection.mutable.HashMap[K, V] = _
- def comparisonMap = collection.Map("hashtable" -> runhashtable _)
- def runseq = this.seqcoll.reduceLeft(operators.reducer)
- def runpar = this.parcoll.reduce(operators.reducer)
- def runhashtable = ht.reduceLeft(operators.reducer)
- override def reset = runWhat match {
- case "hashtable" => ht = createHashTable(size)
- case _ => super.reset
- }
- def companion = Reduce2
- }
-
- def createHashTable(sz: Int): collection.mutable.HashMap[K, V]
-
-}
-
-
-
-
-
-object RefParHashTrieBenches extends ParHashTrieBenches[Dummy, Dummy] {
-
- type DPair = (Dummy, Dummy)
-
- object operators extends Operators[DPair] {
- def gcd(a: Int, b: Int): Int = {
- val result = if (b == 0) a else {
- gcd(b, a - b * (a / b))
- }
- result + 1000
- }
- def heavy(a: Int): Int = {
- var i = 0
- var sum = a
- while (i < 3000) {
- i += 1
- sum += a + i
- }
- sum
- }
- val foreachFun = (t: DPair) => {
- t
- ()
- }
- val reducer = (x: DPair, y: DPair) => {
- //y._2.num = x._2.in + y._2.in
- y
- }
- val mediumreducer = (x: DPair, y: DPair) => {
- y._2.num = gcd(x._2.in, y._2.in)
- y
- }
- val filterer = (p: DPair) => {
- p._1.num % 2 == 0
- }
- val mapper = (p: DPair) => {
- val a = p._1
- a.num = a.in % 2
- (a, p._2)
- }
- val flatmapper = (p: DPair) => {
- List(p, p, p, p, p)
- }
- override val mapper2 = (p: DPair) => {
- val a = 1 //heavy(p._1.in)
- (new Dummy(p._1.in * -2 + a), p._2)
- }
- val heavymapper = (p: DPair) => {
- val a = p._1
- var i = -100
- while (i < 0) {
- if (a.in < i) a.num += 1
- i += 1
- }
- (a, p._2)
- }
- val taker = (p: DPair) => true
- val eachFun: DPair => Unit = { dp =>
- dp._1.dummy
- }
- }
-
- def createSequential(sz: Int, p: Int) = {
- var ht = new collection.immutable.HashMap[Dummy, Dummy]
- for (i <- 0 until sz) ht += ((new Dummy(i), new Dummy(i)))
- ht
- }
-
- def createParallel(sz: Int, p: Int) = {
- var pht = new ParHashMap[Dummy, Dummy]
- for (i <- 0 until sz) pht += ((new Dummy(i), new Dummy(i)))
- forkJoinPool.setParallelism(p)
- collection.parallel.tasksupport.environment = forkJoinPool
- pht
- }
-
- def createHashTable(sz: Int) = {
- val hm = collection.mutable.HashMap[Dummy, Dummy]()
- for (i <- 0 until sz) hm.put(new Dummy(i), new Dummy(i))
- hm
- }
-
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala
deleted file mode 100644
index 04e37085b8..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Coder.scala
+++ /dev/null
@@ -1,162 +0,0 @@
-package scala.collection.parallel.benchmarks
-package misc
-
-
-
-
-
-
-import collection._ //immutable._
-import collection.parallel._//immutable._
-
-
-class SeqCoder(words: List[String]) {
-
- private val m = Map(
- '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL",
- '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ")
-
- /** Invert the mnemonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */
- private val charCode: Map[Char, Char] =
- for ((digit, letters) <- m; letter <- letters) yield letter -> digit
-
- /** Maps a word to the digit string it represents,
- * e.g. `Java` -> `5282` */
- private def wordCode(word: String): String = word.toUpperCase map charCode
-
- /** A map from digit strings to the words that represent
- * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...)
- */
- val wordsForNum: Map[String, Seq[String]] =
- (words groupBy wordCode).map(t => (t._1, t._2.toSeq)) withDefaultValue Seq()
-
- /** All ways to encode a number as a list of words */
- def encode(number: String): Set[Seq[String]] =
- if (number.isEmpty) Set(Seq())
- else {
- val splits = (1 to number.length).toSet
- // for {
- // split <- splits
- // word <- wordsForNum(number take split)
- // rest <- encode(number drop split)
- // } yield word :: rest
- val r = splits.flatMap(split => {
- val wfn = wordsForNum(number take split).flatMap(word => {
- val subs = encode(number drop split)
- subs.map(rest => word +: rest)
- })
- wfn
- })
- r
- }
-
- /** Maps a number to a list of all word phrases that can
- * represent it */
- def translate(number: String) = encode(number)// map (_ mkString " ")
-
- def ??? : Nothing = throw new UnsupportedOperationException
-}
-
-class ParCoder(words: List[String]) {
-
- private val m = Map(
- '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL",
- '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ")
-
- /** Invert the mnemonics map to give a map from chars 'A' ... 'Z' to '2' ... '9' */
- private val charCode: Map[Char, Char] =
- for ((digit, letters) <- m; letter <- letters) yield letter -> digit
-
- /** Maps a word to the digit string it represents,
- * e.g. `Java` -> `5282` */
- private def wordCode(word: String): String = word.toUpperCase map charCode
-
- /** A map from digit strings to the words that represent
- * them e.g. `5282` -> List(`Java`, `Kata`, `Lava`, ...)
- */
- val wordsForNum: Map[String, Seq[String]] =
- (words groupBy wordCode).map(t => (t._1, t._2)) withDefaultValue Seq()
-
- /** All ways to encode a number as a list of words */
- def encode(number: String): Set[Seq[String]] = if (number.length > 12) {
- if (number.isEmpty) ParSet(ParSeq())
- else {
- val splits = (1 to number.length).toParSet
- for {
- split <- splits
- word <- wordsForNum(number take split)
- rest <- encode(number drop split)
- } yield word +: rest
- }
- } else {
- if (number.isEmpty) Set(Seq())
- else {
- val splits = (1 to number.length).toSet
- for {
- split <- splits
- word <- wordsForNum(number take split)
- rest <- encode(number drop split)
- } yield word +: rest
- }
- }
-
- /** Maps a number to a list of all word phrases that can
- * represent it */
- def translate(number: String) = {
- encode(number)// map (_ mkString " ")
- }
-
- def ??? : Nothing = throw new UnsupportedOperationException
-}
-
-
-
-
-
-object Coder extends BenchCompanion {
- def benchName = "Coder"
- def collectionName = "General"
- def apply(sz: Int, p: Int, what: String) = new Coder(sz, p, what)
- override def defaultSize = 100
-}
-
-class Coder(val size: Int, val parallelism: Int, val runWhat: String) extends Bench {
- def companion = Coder
-
- var seqcoder: SeqCoder = null
- var parcoder: ParCoder = null
-
- override def repetitionsPerRun = 1
-
- val code = "23284374729473626268379762538"
-
- reset
-
- def runseq {
- val translations = seqcoder.translate(code)
- //println(translations)
- }
-
- def runpar {
- val translations = parcoder.translate(code)
- //println(translations)
- }
-
- def reset = runWhat match {
- case "seq" =>
- seqcoder = new SeqCoder(Dictionary.wordlist)
- val t = seqcoder.translate(code)
- println("Translation check: " + t.size)
- //println(t)
- case "par" =>
- collection.parallel.tasksupport.environment.asInstanceOf[concurrent.forkjoin.ForkJoinPool].setParallelism(parallelism)
- parcoder = new ParCoder(Dictionary.wordlist)
- val t = parcoder.translate(code)
- println("Translation check: " + t.size)
- //println(t)
- }
-
- def comparisonMap = Map()
-
-}
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala
deleted file mode 100644
index e6ff55d234..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Dictionary.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package scala.collection.parallel.benchmarks.misc
-
-
-
-
-object Dictionary {
- val wordlist = wordlines.split(System.getProperty("line.separator")).filter(_.trim != "").toList
- val wordarray = wordlist.toArray
- def wordlines = {
- val is = getClass.getClassLoader.getResourceAsStream("scala/collection/parallel/benchmarks/misc/dict.txt")
- scala.io.Source.fromInputStream(is).mkString
- }
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala
deleted file mode 100644
index c7e4723e64..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/Loader.scala
+++ /dev/null
@@ -1,66 +0,0 @@
-package scala.collection.parallel.benchmarks
-package misc
-
-
-
-
-
-
-import collection._ //immutable._
-import collection.parallel._//immutable._
-
-
-
-
-
-
-
-object Loader extends BenchCompanion {
- def benchName = "Loader"
- def collectionName = "General"
- def apply(sz: Int, p: Int, what: String) = new Loader(sz, p, what)
- override def defaultSize = 100
-}
-
-
-class Loader(val size: Int, val parallelism: Int, val runWhat: String) extends Bench {
- def companion = Loader
-
- override def repetitionsPerRun = 1
-
- reset
-
- val wa = Dictionary.wordarray ++ Dictionary.wordarray ++ Dictionary.wordarray
-
- def runseq {
- val m = Map(
- '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL",
- '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ"
- )
- val charCode: Map[Char, Char] = for ((digit, letters) <- m; letter <- letters) yield letter -> digit
- def wordCode(word: String): String = (word.toUpperCase.toList map charCode).toString
-
- wa groupBy wordCode
- }
-
- def runpar {
- val m = Map(
- '2' -> "ABC", '3' -> "DEF", '4' -> "GHI", '5' -> "JKL",
- '6' -> "MNO", '7' -> "PQRS", '8' -> "TUV", '9' -> "WXYZ"
- )
- val charCode: Map[Char, Char] = for ((digit, letters) <- m; letter <- letters) yield letter -> digit
- def wordCode(word: String): String = (word.toUpperCase.toList map charCode).toString
-
- wa.par groupBy wordCode
- }
-
- def reset = runWhat match {
- case "seq" =>
- case "par" =>
- collection.parallel.tasksupport.environment.asInstanceOf[concurrent.forkjoin.ForkJoinPool].setParallelism(parallelism)
- }
-
- def comparisonMap = Map()
-
-}
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt b/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt
deleted file mode 100644
index 46e95c907f..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/misc/dict.txt
+++ /dev/null
@@ -1,58111 +0,0 @@
-aardvark
-aardwolf
-aaron
-aback
-abacus
-abaft
-abalone
-abandon
-abandoned
-abandonment
-abandons
-abase
-abased
-abasement
-abash
-abashed
-abate
-abated
-abatement
-abates
-abattoir
-abattoirs
-abbe
-abbess
-abbey
-abbeys
-abbot
-abbots
-abbreviate
-abbreviated
-abbreviates
-abbreviating
-abbreviation
-abbreviations
-abdicate
-abdicated
-abdicates
-abdicating
-abdication
-abdomen
-abdomens
-abdominal
-abduct
-abducted
-abducting
-abduction
-abductions
-abductor
-abductors
-abducts
-abe
-abeam
-abel
-abele
-aberdeen
-aberrant
-aberration
-aberrations
-abet
-abets
-abetted
-abetting
-abeyance
-abhor
-abhorred
-abhorrence
-abhorrent
-abhors
-abide
-abided
-abides
-abiding
-abidjan
-abies
-abilities
-ability
-abject
-abjectly
-abjure
-abjured
-ablate
-ablates
-ablating
-ablation
-ablative
-ablaze
-able
-ablebodied
-abler
-ablest
-abloom
-ablution
-ablutions
-ably
-abnegation
-abnormal
-abnormalities
-abnormality
-abnormally
-aboard
-abode
-abodes
-abolish
-abolished
-abolishes
-abolishing
-abolition
-abolitionist
-abolitionists
-abomb
-abominable
-abominably
-abominate
-abominated
-abomination
-abominations
-aboriginal
-aborigines
-abort
-aborted
-aborting
-abortion
-abortionist
-abortionists
-abortions
-abortive
-aborts
-abound
-abounded
-abounding
-abounds
-about
-above
-abraded
-abraham
-abrasion
-abrasions
-abrasive
-abrasively
-abrasiveness
-abrasives
-abreast
-abridge
-abridged
-abridgement
-abridging
-abroad
-abrogate
-abrogated
-abrogating
-abrogation
-abrogations
-abrupt
-abruptly
-abruptness
-abscess
-abscesses
-abscissa
-abscissae
-abscissas
-abscond
-absconded
-absconder
-absconding
-absconds
-abseil
-abseiled
-abseiler
-abseiling
-abseils
-absence
-absences
-absent
-absented
-absentee
-absenteeism
-absentees
-absenting
-absently
-absentminded
-absentmindedly
-absentmindedness
-absolute
-absolutely
-absoluteness
-absolutes
-absolution
-absolutism
-absolutist
-absolutists
-absolve
-absolved
-absolves
-absolving
-absorb
-absorbed
-absorbency
-absorbent
-absorber
-absorbers
-absorbing
-absorbingly
-absorbs
-absorption
-absorptions
-absorptive
-absorptivity
-abstain
-abstained
-abstainer
-abstainers
-abstaining
-abstains
-abstemious
-abstemiously
-abstemiousness
-abstention
-abstentions
-abstinence
-abstinent
-abstract
-abstracted
-abstractedly
-abstracting
-abstraction
-abstractions
-abstractly
-abstracts
-abstruse
-abstrusely
-absurd
-absurder
-absurdest
-absurdist
-absurdities
-absurdity
-absurdly
-abundance
-abundances
-abundant
-abundantly
-abuse
-abused
-abuser
-abusers
-abuses
-abusing
-abusive
-abusively
-abusiveness
-abut
-abutment
-abutments
-abutted
-abutting
-abuzz
-aby
-abysmal
-abysmally
-abyss
-abyssal
-abysses
-acacia
-academe
-academia
-academic
-academical
-academically
-academician
-academicians
-academics
-academies
-academy
-acanthus
-acapulco
-accede
-acceded
-acceding
-accelerate
-accelerated
-accelerates
-accelerating
-acceleration
-accelerations
-accelerator
-accelerators
-accelerometer
-accelerometers
-accent
-accented
-accenting
-accents
-accentuate
-accentuated
-accentuates
-accentuating
-accentuation
-accept
-acceptability
-acceptable
-acceptably
-acceptance
-acceptances
-accepted
-accepting
-acceptor
-acceptors
-accepts
-access
-accessed
-accesses
-accessibility
-accessible
-accessing
-accession
-accessions
-accessories
-accessory
-accidence
-accident
-accidental
-accidentally
-accidentprone
-accidents
-acclaim
-acclaimed
-acclaims
-acclamation
-acclamations
-acclimatisation
-acclimatise
-acclimatised
-acclimatising
-accolade
-accolades
-accommodate
-accommodated
-accommodates
-accommodating
-accommodation
-accommodations
-accompanied
-accompanies
-accompaniment
-accompaniments
-accompanist
-accompany
-accompanying
-accomplice
-accomplices
-accomplish
-accomplished
-accomplishes
-accomplishing
-accomplishment
-accomplishments
-accord
-accordance
-accorded
-according
-accordingly
-accordion
-accordionist
-accordions
-accords
-accost
-accosted
-accosting
-accosts
-account
-accountability
-accountable
-accountancy
-accountant
-accountants
-accounted
-accounting
-accounts
-accra
-accredit
-accreditation
-accredited
-accrediting
-accredits
-accreted
-accretion
-accretions
-accrual
-accruals
-accrue
-accrued
-accrues
-accruing
-accumulate
-accumulated
-accumulates
-accumulating
-accumulation
-accumulations
-accumulative
-accumulator
-accumulators
-accuracies
-accuracy
-accurate
-accurately
-accursed
-accusal
-accusals
-accusation
-accusations
-accusative
-accusatory
-accuse
-accused
-accuser
-accusers
-accuses
-accusing
-accusingly
-accustom
-accustomed
-accustoming
-ace
-aced
-acentric
-acerbic
-acerbity
-acers
-aces
-acetal
-acetate
-acetates
-acetic
-acetone
-acetylene
-ache
-ached
-aches
-achievable
-achieve
-achieved
-achievement
-achievements
-achiever
-achievers
-achieves
-achieving
-aching
-achingly
-achings
-achromatic
-achy
-acid
-acidic
-acidification
-acidified
-acidify
-acidifying
-acidity
-acidly
-acidophiles
-acidrain
-acids
-acknowledge
-acknowledged
-acknowledgement
-acknowledgements
-acknowledges
-acknowledging
-acknowledgment
-acknowledgments
-acme
-acne
-acolyte
-acolytes
-aconite
-acorn
-acorns
-acoustic
-acoustical
-acoustically
-acoustics
-acquaint
-acquaintance
-acquaintances
-acquainted
-acquainting
-acquaints
-acquiesce
-acquiesced
-acquiescence
-acquiescent
-acquiescing
-acquire
-acquired
-acquirer
-acquirers
-acquires
-acquiring
-acquisition
-acquisitions
-acquisitive
-acquisitiveness
-acquit
-acquited
-acquites
-acquits
-acquittal
-acquittals
-acquittance
-acquitted
-acquitting
-acre
-acreage
-acres
-acrid
-acrimonious
-acrimoniously
-acrimony
-acrobat
-acrobatic
-acrobatics
-acrobats
-acronym
-acronyms
-across
-acrostic
-acrostics
-acrylic
-acrylics
-act
-acted
-acting
-actings
-actinides
-action
-actionable
-actions
-activate
-activated
-activates
-activating
-activation
-activations
-activator
-activators
-active
-actively
-actives
-activism
-activist
-activists
-activities
-activity
-actor
-actors
-actress
-actresses
-acts
-actual
-actualisation
-actualise
-actualised
-actualities
-actuality
-actually
-actuarial
-actuaries
-actuary
-actuate
-actuated
-actuates
-actuating
-actuation
-actuator
-actuators
-acuity
-acumen
-acupuncture
-acupuncturist
-acupuncturists
-acute
-acutely
-acuteness
-acuter
-acutest
-acyclic
-adage
-adages
-adagio
-adam
-adamant
-adamantly
-adapt
-adaptability
-adaptable
-adaptation
-adaptations
-adapted
-adapter
-adapters
-adapting
-adaptive
-adaptively
-adaptivity
-adaptor
-adaptors
-adapts
-add
-added
-addenda
-addendum
-adder
-adders
-addict
-addicted
-addiction
-addictions
-addictive
-addictiveness
-addicts
-adding
-addition
-additional
-additionally
-additions
-additive
-additively
-additives
-addle
-addled
-addles
-addling
-address
-addressability
-addressable
-addressed
-addressee
-addressees
-addresses
-addressing
-adds
-adduce
-adduced
-adduces
-adducing
-adelaide
-aden
-adenine
-adenoid
-adenoids
-adenoma
-adenomas
-adept
-adepts
-adequacy
-adequate
-adequately
-adhere
-adhered
-adherence
-adherent
-adherents
-adherer
-adherers
-adheres
-adhering
-adhesion
-adhesions
-adhesive
-adhesiveness
-adhesives
-adhoc
-adiabatic
-adiabatically
-adieu
-adieus
-adieux
-adios
-adipose
-adit
-adjacency
-adjacent
-adjacently
-adjectival
-adjective
-adjectives
-adjoin
-adjoined
-adjoining
-adjoins
-adjourn
-adjourned
-adjourning
-adjournment
-adjourns
-adjudge
-adjudged
-adjudges
-adjudicate
-adjudicated
-adjudicates
-adjudicating
-adjudication
-adjudications
-adjudicator
-adjudicators
-adjunct
-adjuncts
-adjure
-adjust
-adjustable
-adjusted
-adjuster
-adjusting
-adjustment
-adjustments
-adjusts
-adjutant
-adlib
-adlibs
-adman
-admen
-admin
-administer
-administered
-administering
-administers
-administrate
-administrated
-administrating
-administration
-administrations
-administrative
-administratively
-administrator
-administrators
-admirable
-admirably
-admiral
-admirals
-admiration
-admire
-admired
-admirer
-admirers
-admires
-admiring
-admiringly
-admissibility
-admissible
-admission
-admissions
-admit
-admits
-admittance
-admittances
-admitted
-admittedly
-admitting
-admix
-admixture
-admonish
-admonished
-admonishes
-admonishing
-admonishment
-admonition
-admonitions
-admonitory
-ado
-adobe
-adolescence
-adolescent
-adolescents
-adonis
-adopt
-adopted
-adopter
-adopting
-adoption
-adoptions
-adoptive
-adopts
-adorable
-adorably
-adoration
-adore
-adored
-adorer
-adorers
-adores
-adoring
-adoringly
-adorn
-adorned
-adorning
-adornment
-adornments
-adorns
-adrenal
-adrenalin
-adrenaline
-adrift
-adroit
-adroitly
-adroitness
-adsorb
-adsorbed
-adsorption
-adulation
-adulatory
-adult
-adulterate
-adulterated
-adulterates
-adulterating
-adulteration
-adulterations
-adulterer
-adulterers
-adulteress
-adulteresses
-adulterous
-adultery
-adulthood
-adults
-adumbrate
-adumbrated
-adumbrating
-advance
-advanced
-advancement
-advancements
-advancer
-advances
-advancing
-advantage
-advantaged
-advantageous
-advantageously
-advantages
-advent
-advents
-adventure
-adventured
-adventurer
-adventurers
-adventures
-adventuring
-adventurism
-adventurous
-adventurously
-adverb
-adverbial
-adverbs
-adversarial
-adversaries
-adversary
-adverse
-adversely
-adversities
-adversity
-advert
-adverted
-advertise
-advertised
-advertisement
-advertisements
-advertiser
-advertisers
-advertises
-advertising
-adverts
-advice
-advices
-advisability
-advisable
-advise
-advised
-advisedly
-adviser
-advisers
-advises
-advising
-advisory
-advocacy
-advocate
-advocated
-advocates
-advocating
-adze
-aegean
-aegina
-aegis
-aeolian
-aeon
-aeons
-aerate
-aerated
-aerates
-aerating
-aeration
-aerator
-aerial
-aerially
-aerials
-aerify
-aerobatic
-aerobatics
-aerobe
-aerobes
-aerobic
-aerobically
-aerobics
-aerobraking
-aerodrome
-aerodromes
-aerodynamic
-aerodynamically
-aerodynamics
-aerofoil
-aerofoils
-aeronaut
-aeronautic
-aeronautical
-aeronautics
-aeroplane
-aeroplanes
-aerosol
-aerosols
-aerospace
-aesop
-aesthete
-aesthetes
-aesthetic
-aesthetically
-aestheticism
-aestheticsy
-afar
-affability
-affable
-affably
-affair
-affairs
-affect
-affectation
-affectations
-affected
-affectedly
-affecting
-affection
-affectionate
-affectionately
-affections
-affective
-affects
-afferent
-affidavit
-affidavits
-affiliate
-affiliated
-affiliates
-affiliating
-affiliation
-affiliations
-affine
-affinities
-affinity
-affirm
-affirmation
-affirmations
-affirmative
-affirmatively
-affirmed
-affirming
-affirms
-affix
-affixed
-affixes
-affixing
-afflict
-afflicted
-afflicting
-affliction
-afflictions
-afflicts
-affluence
-affluent
-afflux
-afford
-affordability
-affordable
-afforded
-affording
-affords
-afforestation
-afforested
-affray
-affront
-affronted
-affronts
-afghan
-afghani
-afghans
-afield
-afire
-aflame
-afloat
-afoot
-aforementioned
-aforesaid
-aforethought
-afraid
-afresh
-africa
-african
-africans
-afro
-afros
-aft
-after
-afterbirth
-aftercare
-aftereffect
-aftereffects
-afterglow
-afterlife
-afterlives
-aftermath
-afternoon
-afternoons
-aftershave
-aftershocks
-aftertaste
-afterthought
-afterthoughts
-afterward
-afterwards
-aga
-again
-against
-agakhan
-agape
-agar
-agaragar
-agave
-agaves
-age
-aged
-ageing
-ageings
-ageism
-ageless
-agencies
-agency
-agenda
-agendas
-agendums
-agent
-agents
-ageold
-ages
-agglomerated
-agglomerating
-agglomeration
-agglomerations
-agglutinative
-aggravate
-aggravated
-aggravates
-aggravating
-aggravation
-aggravations
-aggregate
-aggregated
-aggregates
-aggregating
-aggregation
-aggregations
-aggression
-aggressions
-aggressive
-aggressively
-aggressiveness
-aggressor
-aggressors
-aggrieved
-aggrievedly
-aghast
-agile
-agiler
-agility
-aging
-agings
-agio
-agitate
-agitated
-agitatedly
-agitates
-agitating
-agitation
-agitations
-agitator
-agitators
-agitprop
-agleam
-aglow
-agnostic
-agnosticism
-agnostics
-ago
-agog
-agonies
-agonise
-agonised
-agonises
-agonising
-agonisingly
-agonist
-agonists
-agony
-agora
-agoraphobia
-agoraphobic
-agouti
-agrarian
-agree
-agreeable
-agreeableness
-agreeably
-agreed
-agreeing
-agreement
-agreements
-agrees
-agribusiness
-agricultural
-agriculturalist
-agriculturalists
-agriculturally
-agriculture
-agrimony
-agrochemical
-agrochemicals
-agronomist
-agronomists
-agronomy
-aground
-ague
-ah
-aha
-ahead
-ahem
-ahoy
-aid
-aide
-aided
-aidedecamp
-aider
-aiders
-aides
-aidesdecamp
-aiding
-aids
-ail
-aileron
-ailerons
-ailing
-ailment
-ailments
-ails
-aim
-aimed
-aimer
-aiming
-aimless
-aimlessly
-aimlessness
-aims
-aint
-air
-airbase
-airborne
-airbrush
-airbus
-airconditioned
-airconditioner
-airconditioning
-aircraft
-aircrew
-aircrews
-aire
-aired
-airfield
-airfields
-airflow
-airforce
-airframe
-airframes
-airgun
-airier
-airiest
-airily
-airiness
-airing
-airings
-airless
-airlift
-airlifted
-airlifting
-airlifts
-airline
-airliner
-airliners
-airlines
-airlock
-airlocks
-airmail
-airman
-airmen
-airplane
-airplay
-airport
-airports
-airraid
-airs
-airship
-airships
-airsick
-airsickness
-airspace
-airstream
-airstrip
-airstrips
-airtight
-airtime
-airwave
-airwaves
-airway
-airways
-airworthiness
-airworthy
-airy
-aisle
-aisles
-aitches
-ajar
-akimbo
-akin
-ala
-alabama
-alabaster
-alacarte
-alack
-alacrity
-aladdin
-alanine
-alarm
-alarmed
-alarming
-alarmingly
-alarmism
-alarmist
-alarms
-alas
-alaska
-alaskan
-alb
-albania
-albany
-albatross
-albatrosses
-albeit
-albinism
-albino
-album
-albumen
-albumin
-albums
-alchemical
-alchemist
-alchemists
-alchemy
-alcohol
-alcoholic
-alcoholics
-alcoholism
-alcohols
-alcove
-alcoves
-aldehyde
-aldehydes
-alder
-alderman
-aldermen
-aldrin
-ale
-alehouse
-alembic
-alert
-alerted
-alerting
-alertly
-alertness
-alerts
-ales
-alfalfa
-alfatah
-alga
-algae
-algal
-algebra
-algebraic
-algebraical
-algebraically
-algebraist
-algebras
-algeria
-algerian
-algiers
-algorithm
-algorithmic
-algorithmically
-algorithms
-alias
-aliases
-alibaba
-alibi
-alibis
-alien
-alienate
-alienated
-alienates
-alienating
-alienation
-aliened
-aliening
-aliens
-alight
-alighted
-alighting
-alights
-align
-aligned
-aligning
-alignment
-alignments
-aligns
-alike
-alimentary
-alimony
-aline
-alined
-alines
-alining
-aliphatic
-aliquot
-aliquots
-alive
-alkali
-alkalic
-alkaline
-alkalinity
-alkalis
-alkalise
-alkaloid
-alkaloids
-alkanes
-alkyl
-all
-allay
-allayed
-allaying
-allays
-allegation
-allegations
-allege
-alleged
-allegedly
-alleges
-allegiance
-allegiances
-alleging
-allegorical
-allegorically
-allegories
-allegory
-allegri
-allegro
-allele
-alleles
-allelic
-allergen
-allergens
-allergic
-allergies
-allergy
-alleviate
-alleviated
-alleviates
-alleviating
-alleviation
-alleviations
-alley
-alleys
-alleyway
-alleyways
-alliance
-alliances
-allied
-allies
-alligator
-alligators
-alliterate
-alliterated
-alliterating
-alliteration
-alliterations
-alliterative
-allocatable
-allocate
-allocated
-allocates
-allocating
-allocation
-allocations
-allocator
-allocators
-allophones
-allot
-allotment
-allotments
-allotrope
-allotropic
-allots
-allotted
-allotting
-allow
-allowable
-allowance
-allowances
-allowed
-allowing
-allows
-alloy
-alloyed
-alloying
-alloys
-allude
-alluded
-alludes
-alluding
-allure
-allured
-allurement
-allurements
-allures
-alluring
-alluringly
-allusion
-allusions
-allusive
-alluvia
-alluvial
-alluvium
-ally
-allying
-almanac
-almanacs
-almighty
-almond
-almonds
-almost
-alms
-almshouse
-almshouses
-aloe
-aloes
-aloft
-aloha
-alone
-aloneness
-along
-alongside
-aloof
-aloofness
-aloud
-alp
-alpaca
-alpacas
-alpha
-alphabet
-alphabetic
-alphabetical
-alphabetically
-alphabets
-alphanumeric
-alphas
-alpine
-alps
-already
-alright
-also
-alt
-altar
-altarpiece
-altarpieces
-altars
-alter
-alterable
-alteration
-alterations
-altercate
-altercation
-altercations
-altered
-alterego
-altering
-alternate
-alternated
-alternately
-alternates
-alternating
-alternation
-alternations
-alternative
-alternatively
-alternatives
-alternator
-alternators
-alters
-although
-altimeter
-altimeters
-altitude
-altitudes
-alto
-altogether
-altruism
-altruist
-altruistic
-altruistically
-alts
-alum
-aluminium
-aluminum
-alumni
-alumnus
-alveolar
-alveoli
-always
-am
-amalgam
-amalgamate
-amalgamated
-amalgamates
-amalgamating
-amalgamation
-amalgamations
-amalgams
-amanuensis
-amass
-amassed
-amasses
-amassing
-amateur
-amateurish
-amateurishly
-amateurishness
-amateurism
-amateurs
-amatory
-amaze
-amazed
-amazement
-amazes
-amazing
-amazingly
-amazon
-amazons
-ambassador
-ambassadorial
-ambassadors
-amber
-ambergris
-ambiance
-ambidextrous
-ambience
-ambient
-ambiguities
-ambiguity
-ambiguous
-ambiguously
-ambit
-ambition
-ambitions
-ambitious
-ambitiously
-ambivalence
-ambivalent
-ambivalently
-amble
-ambled
-ambler
-ambles
-ambling
-ambrosia
-ambulance
-ambulances
-ambulant
-ambulate
-ambulatory
-ambuscade
-ambuscades
-ambush
-ambushed
-ambushers
-ambushes
-ambushing
-ameliorate
-ameliorated
-ameliorates
-ameliorating
-amelioration
-amen
-amenability
-amenable
-amend
-amendable
-amended
-amending
-amendment
-amendments
-amends
-amenities
-amenity
-amenorrhoea
-amens
-america
-american
-americans
-americium
-amethyst
-amethystine
-amethysts
-amiability
-amiable
-amiableness
-amiably
-amicability
-amicable
-amicably
-amid
-amide
-amidships
-amidst
-amigo
-amine
-amines
-amino
-amir
-amiss
-amity
-amman
-ammeter
-ammeters
-ammo
-ammonia
-ammonites
-ammonium
-ammunition
-amnesia
-amnesiac
-amnesic
-amnesties
-amnesty
-amniotic
-amoeba
-amoebae
-amoebic
-amok
-among
-amongst
-amoral
-amorality
-amorist
-amorous
-amorously
-amorphous
-amortisation
-amortise
-amortised
-amount
-amounted
-amounting
-amounts
-amour
-amours
-amp
-ampere
-amperes
-ampersand
-ampersands
-amphetamine
-amphetamines
-amphibia
-amphibian
-amphibians
-amphibious
-amphitheatre
-amphitheatres
-amphora
-ample
-ampler
-amplification
-amplifications
-amplified
-amplifier
-amplifiers
-amplifies
-amplify
-amplifying
-amplitude
-amplitudes
-amply
-ampoules
-amps
-ampule
-ampules
-ampuls
-amputate
-amputated
-amputating
-amputation
-amputations
-amputee
-amputees
-amuck
-amulet
-amulets
-amuse
-amused
-amusement
-amusements
-amuses
-amusing
-amusingly
-an
-ana
-anabolic
-anachronism
-anachronisms
-anachronistic
-anachronistically
-anaconda
-anacondas
-anaemia
-anaemic
-anaerobic
-anaerobically
-anaesthesia
-anaesthetic
-anaesthetics
-anaesthetise
-anaesthetised
-anaesthetising
-anaesthetist
-anaesthetists
-anagram
-anagrammatic
-anagrammatically
-anagrams
-anal
-analgesia
-analgesic
-analgesics
-anally
-analogical
-analogies
-analogise
-analogous
-analogously
-analogue
-analogues
-analogy
-analysable
-analyse
-analysed
-analyser
-analysers
-analyses
-analysing
-analysis
-analyst
-analysts
-analytic
-analytical
-analytically
-anamorphic
-ananas
-anaphora
-anaphoric
-anarchic
-anarchical
-anarchism
-anarchist
-anarchistic
-anarchists
-anarchy
-anathema
-anatomic
-anatomical
-anatomically
-anatomies
-anatomist
-anatomists
-anatomy
-ancestor
-ancestors
-ancestral
-ancestries
-ancestry
-anchor
-anchorage
-anchorages
-anchored
-anchoring
-anchorite
-anchors
-anchovies
-anchovy
-ancient
-anciently
-ancients
-ancillary
-and
-andante
-andes
-andrew
-androgynous
-android
-androids
-anecdotal
-anecdotally
-anecdote
-anecdotes
-anechoic
-anemia
-anemic
-anemone
-anemones
-anergy
-aneroid
-aneurysm
-aneurysms
-anew
-angel
-angelic
-angelica
-angels
-angelus
-anger
-angered
-angering
-angers
-angina
-anginal
-angioplasty
-angle
-angled
-anglepoise
-angler
-anglers
-angles
-anglian
-anglican
-angling
-angola
-angolan
-angolans
-angora
-angoras
-angrier
-angriest
-angrily
-angry
-angst
-angstroms
-anguish
-anguished
-anguishes
-angular
-angularity
-anhydrous
-anil
-aniline
-animal
-animals
-animate
-animated
-animatedly
-animates
-animating
-animation
-animations
-animator
-animators
-animism
-animist
-animists
-animosities
-animosity
-animus
-anion
-anionic
-anions
-anise
-aniseed
-aniseeds
-anisotropic
-anisotropies
-anisotropy
-ankara
-ankle
-ankles
-anklet
-anklets
-anna
-annal
-annals
-anneal
-annealed
-annealer
-annealing
-annex
-annexation
-annexations
-annexe
-annexed
-annexes
-annexing
-annihilate
-annihilated
-annihilates
-annihilating
-annihilation
-anniversaries
-anniversary
-annotate
-annotated
-annotates
-annotating
-annotation
-annotations
-announce
-announced
-announcement
-announcements
-announcer
-announcers
-announces
-announcing
-annoy
-annoyance
-annoyances
-annoyed
-annoyer
-annoyers
-annoying
-annoyingly
-annoys
-annual
-annualised
-annually
-annuals
-annuities
-annuity
-annul
-annular
-annuli
-annulled
-annulling
-annulment
-annuls
-annulus
-annunciation
-anode
-anodes
-anodised
-anodyne
-anoint
-anointed
-anointing
-anoints
-anomalies
-anomalous
-anomalously
-anomaly
-anomic
-anon
-anonym
-anonymity
-anonymous
-anonymously
-anonyms
-anorak
-anoraks
-anorexia
-anorexic
-another
-answer
-answerable
-answered
-answerer
-answering
-answers
-ant
-antacid
-antacids
-antagonise
-antagonised
-antagonises
-antagonising
-antagonism
-antagonisms
-antagonist
-antagonistic
-antagonists
-ante
-anteater
-anteaters
-antecedent
-antecedents
-antechamber
-antedate
-antedates
-antedating
-antediluvian
-antelope
-antelopes
-antenatal
-antenna
-antennae
-antennas
-anterior
-anteriorly
-anteroom
-anthem
-anthems
-anther
-anthologies
-anthologise
-anthologised
-anthology
-anthracite
-anthrax
-anthropic
-anthropocentric
-anthropogenic
-anthropogenically
-anthropoid
-anthropological
-anthropologist
-anthropologists
-anthropology
-anthropometric
-anthropomorphic
-anthropomorphising
-anthropomorphism
-anti
-antiabortionists
-antiaircraft
-antibiotic
-antibiotics
-antibodies
-antibody
-antic
-anticipate
-anticipated
-anticipates
-anticipating
-anticipation
-anticipations
-anticipative
-anticipatory
-anticlimax
-anticlockwise
-anticoagulants
-anticonstitutional
-antics
-anticyclone
-antidepressant
-antidepressants
-antidote
-antidotes
-antifreeze
-antigen
-antigenic
-antigens
-antihistamines
-antilope
-antimatter
-antimony
-antioxidants
-antiparticles
-antipathetic
-antipathies
-antipathy
-antipodes
-antiquarian
-antiquarianism
-antiquarians
-antiquaries
-antiquary
-antiquated
-antique
-antiques
-antiquities
-antiquity
-antiseptic
-antiseptics
-antisocial
-antistatic
-antisymmetric
-antisymmetry
-antitheses
-antithesis
-antithetic
-antithetical
-antithetically
-antitrust
-antiviral
-antler
-antlers
-antlion
-antlions
-antonym
-antonyms
-antral
-antrum
-ants
-antwerp
-anus
-anvil
-anvils
-anxieties
-anxiety
-anxious
-anxiously
-any
-anybody
-anyhow
-anymore
-anyone
-anyplace
-anything
-anyway
-anyways
-anywhere
-aorist
-aorta
-aortas
-aortic
-apace
-apache
-apaches
-apart
-apartment
-apartments
-apartness
-apathetic
-apathetically
-apathy
-ape
-aped
-apeman
-aperies
-aperiodic
-aperiodically
-aperitif
-aperitifs
-aperture
-apertures
-apery
-apes
-apex
-aphasia
-aphelion
-aphid
-aphids
-aphorism
-aphorisms
-aphorist
-aphoristic
-aphrodisiac
-aphrodisiacs
-apian
-apiaries
-apiarist
-apiary
-apiece
-aping
-apis
-apish
-aplenty
-aplomb
-apnea
-apnoea
-apocalypse
-apocalyptic
-apocryphal
-apogee
-apolitical
-apollo
-apologetic
-apologetically
-apologia
-apologies
-apologise
-apologised
-apologises
-apologising
-apologist
-apologists
-apology
-apoplectic
-apoplexy
-apostasy
-apostate
-apostates
-apostle
-apostles
-apostolate
-apostolic
-apostrophe
-apostrophes
-apostrophised
-apothecaries
-apothecary
-apotheosis
-appal
-appalled
-appalling
-appallingly
-appals
-apparatchik
-apparatchiks
-apparatus
-apparatuses
-apparel
-apparelled
-apparent
-apparently
-apparition
-apparitions
-appeal
-appealed
-appealing
-appealingly
-appeals
-appear
-appearance
-appearances
-appeared
-appearing
-appears
-appease
-appeased
-appeasement
-appeaser
-appeasers
-appeases
-appeasing
-appellant
-appellants
-appellate
-appellation
-appellations
-append
-appendage
-appendages
-appended
-appendices
-appendicitis
-appending
-appendix
-appends
-appertain
-appertained
-appertaining
-appetiser
-appetising
-appetite
-appetites
-applaud
-applauded
-applauding
-applauds
-applause
-apple
-applecart
-applepie
-apples
-applet
-appliance
-appliances
-applicability
-applicable
-applicant
-applicants
-application
-applications
-applicative
-applicator
-applicators
-applied
-applier
-applies
-applique
-apply
-applying
-appoint
-appointed
-appointee
-appointees
-appointing
-appointment
-appointments
-appoints
-apportion
-apportioned
-apportioning
-apportionment
-apportions
-apposite
-apposition
-appraisal
-appraisals
-appraise
-appraised
-appraisees
-appraiser
-appraisers
-appraises
-appraising
-appraisingly
-appreciable
-appreciably
-appreciate
-appreciated
-appreciates
-appreciating
-appreciation
-appreciations
-appreciative
-appreciatively
-apprehend
-apprehended
-apprehending
-apprehends
-apprehension
-apprehensions
-apprehensive
-apprehensively
-apprentice
-apprenticed
-apprentices
-apprenticeship
-apprenticeships
-apprise
-apprised
-apprising
-appro
-approach
-approachability
-approachable
-approached
-approaches
-approaching
-approbation
-appropriate
-appropriated
-appropriately
-appropriateness
-appropriates
-appropriating
-appropriation
-appropriations
-approval
-approvals
-approve
-approved
-approves
-approving
-approvingly
-approximate
-approximated
-approximately
-approximates
-approximating
-approximation
-approximations
-apricot
-apricots
-april
-apriori
-apron
-aprons
-apropos
-apse
-apses
-apsis
-apt
-aptest
-aptitude
-aptitudes
-aptly
-aptness
-aqua
-aqualung
-aquamarine
-aquanaut
-aquaria
-aquarium
-aquariums
-aquatic
-aquatics
-aqueduct
-aqueducts
-aqueous
-aquifer
-aquifers
-aquiline
-arab
-arabesque
-arabesques
-arabia
-arabian
-arabians
-arabic
-arable
-arabs
-arachnid
-arachnids
-arachnoid
-arachnophobia
-arak
-araks
-ararat
-arbiter
-arbiters
-arbitrage
-arbitrageur
-arbitrageurs
-arbitral
-arbitrarily
-arbitrariness
-arbitrary
-arbitrate
-arbitrated
-arbitrates
-arbitrating
-arbitration
-arbitrations
-arbitrator
-arbitrators
-arbor
-arboreal
-arboretum
-arbour
-arc
-arcade
-arcades
-arcadia
-arcading
-arcana
-arcane
-arcanely
-arcaneness
-arced
-arch
-archaeological
-archaeologically
-archaeologist
-archaeologists
-archaeology
-archaeopteryx
-archaic
-archaism
-archaisms
-archangel
-archangels
-archbishop
-archbishops
-archdeacon
-archdeaconry
-archdeacons
-archdiocese
-archduke
-archdukes
-arched
-archenemies
-archenemy
-archer
-archers
-archery
-arches
-archetypal
-archetype
-archetypes
-archetypical
-arching
-archipelago
-architect
-architectonic
-architects
-architectural
-architecturally
-architecture
-architectures
-architrave
-architraves
-archival
-archive
-archived
-archives
-archiving
-archivist
-archivists
-archly
-archness
-archway
-archways
-arcing
-arcs
-arctic
-ardency
-ardent
-ardently
-ardour
-arduous
-are
-area
-areal
-areas
-arena
-arenas
-arent
-argent
-argon
-argot
-arguable
-arguably
-argue
-argued
-arguer
-arguers
-argues
-arguing
-argument
-argumentation
-argumentative
-argumentatively
-arguments
-argus
-aria
-arias
-arid
-aridity
-aridness
-aright
-arise
-arisen
-arises
-arising
-aristocracies
-aristocracy
-aristocrat
-aristocratic
-aristocrats
-arithmetic
-arithmetical
-arithmetically
-arizona
-ark
-arkansas
-arks
-arm
-armada
-armadas
-armadillo
-armament
-armaments
-armature
-armatures
-armband
-armbands
-armchair
-armchairs
-armed
-armenia
-armful
-armfuls
-armhole
-armholes
-armies
-arming
-armistice
-armless
-armlet
-armlets
-armour
-armoured
-armourer
-armourers
-armouries
-armourplated
-armoury
-armpit
-armpits
-armrest
-arms
-army
-aroma
-aromas
-aromatherapist
-aromatherapy
-aromatic
-aromaticity
-aromatics
-arose
-around
-arousal
-arousals
-arouse
-aroused
-arouses
-arousing
-arrange
-arrangeable
-arranged
-arrangement
-arrangements
-arranger
-arranges
-arranging
-arrant
-arrases
-array
-arrayed
-arraying
-arrays
-arrears
-arrest
-arrestable
-arrested
-arrester
-arresting
-arrests
-arrhythmia
-arrival
-arrivals
-arrive
-arrived
-arriver
-arrives
-arriving
-arrogance
-arrogant
-arrogantly
-arrow
-arrowed
-arrowhead
-arrowheads
-arrowing
-arrowroot
-arrows
-arsenal
-arsenals
-arsenic
-arsenide
-arson
-arsonist
-arsonists
-art
-artefact
-artefacts
-artefactual
-arterial
-arteries
-artery
-artful
-artfully
-artfulness
-arthritic
-arthritis
-arthropod
-arthropods
-arthur
-artichoke
-artichokes
-article
-articled
-articles
-articulacy
-articular
-articulate
-articulated
-articulately
-articulates
-articulating
-articulation
-articulations
-articulatory
-artier
-artifice
-artificial
-artificiality
-artificially
-artillery
-artisan
-artisans
-artist
-artiste
-artistes
-artistic
-artistically
-artistry
-artists
-artless
-artlessly
-artlessness
-arts
-artwork
-artworks
-arty
-arum
-as
-asbestos
-asbestosis
-ascend
-ascendancy
-ascendant
-ascended
-ascendency
-ascender
-ascending
-ascends
-ascension
-ascensions
-ascent
-ascents
-ascertain
-ascertainable
-ascertained
-ascertaining
-ascertainment
-ascertains
-ascetic
-asceticism
-ascetics
-ascorbic
-ascribable
-ascribe
-ascribed
-ascribes
-ascribing
-ascription
-ascriptions
-aseptic
-asexual
-ash
-ashamed
-ashamedly
-ashbin
-ashbins
-ashcans
-ashen
-ashes
-ashore
-ashtray
-ashtrays
-ashy
-asia
-asian
-asians
-asiatic
-aside
-asides
-asinine
-ask
-askance
-asked
-askers
-askew
-asking
-asks
-aslant
-asleep
-asocial
-asp
-asparagus
-aspect
-aspects
-asperity
-aspersion
-aspersions
-asphalt
-asphyxia
-asphyxiate
-asphyxiated
-asphyxiation
-aspic
-aspidistra
-aspirant
-aspirants
-aspirate
-aspirated
-aspirates
-aspirating
-aspiration
-aspirational
-aspirations
-aspirators
-aspire
-aspired
-aspires
-aspirin
-aspiring
-aspirins
-asps
-ass
-assail
-assailable
-assailant
-assailants
-assailed
-assailing
-assails
-assassin
-assassinate
-assassinated
-assassinating
-assassination
-assassinations
-assassins
-assault
-assaulted
-assaulting
-assaults
-assay
-assayed
-assayer
-assays
-assegai
-assegais
-assemblage
-assemblages
-assemble
-assembled
-assembler
-assemblers
-assembles
-assemblies
-assembling
-assembly
-assent
-assented
-assenting
-assents
-assert
-asserted
-asserting
-assertion
-assertions
-assertive
-assertively
-assertiveness
-asserts
-asses
-assess
-assessable
-assessed
-assesses
-assessing
-assessment
-assessments
-assessor
-assessors
-asset
-assets
-assiduity
-assiduous
-assiduously
-assign
-assignable
-assignation
-assignations
-assigned
-assignees
-assigner
-assigning
-assignment
-assignments
-assigns
-assimilable
-assimilate
-assimilated
-assimilates
-assimilating
-assimilation
-assist
-assistance
-assistant
-assistants
-assisted
-assisting
-assists
-assizes
-associate
-associated
-associates
-associateship
-associating
-association
-associational
-associations
-associative
-associatively
-associativity
-assonance
-assort
-assorted
-assortment
-assortments
-assuage
-assuaged
-assuages
-assuaging
-assume
-assumed
-assumes
-assuming
-assumption
-assumptions
-assurance
-assurances
-assure
-assured
-assuredly
-assures
-assuring
-assyria
-assyrian
-aster
-asterisk
-asterisked
-asterisks
-astern
-asteroid
-asteroids
-asters
-asthma
-asthmatic
-asthmatics
-astigmatic
-astigmatism
-astir
-astonish
-astonished
-astonishes
-astonishing
-astonishingly
-astonishment
-astound
-astounded
-astounding
-astoundingly
-astounds
-astraddle
-astral
-astrally
-astray
-astride
-astringent
-astrolabe
-astrolabes
-astrologer
-astrologers
-astrological
-astrology
-astronaut
-astronautical
-astronautics
-astronauts
-astronomer
-astronomers
-astronomic
-astronomical
-astronomically
-astronomy
-astrophysical
-astrophysicist
-astrophysicists
-astrophysics
-astute
-astutely
-astuteness
-asunder
-aswan
-asylum
-asylums
-asymmetric
-asymmetrical
-asymmetrically
-asymmetries
-asymmetry
-asymptomatic
-asymptote
-asymptotes
-asymptotic
-asymptotically
-asynchronous
-asynchronously
-at
-atavism
-atavistic
-ate
-atelier
-atheism
-atheist
-atheistic
-atheistically
-atheists
-athena
-athens
-atherosclerosis
-athlete
-athletes
-athletic
-athletically
-athleticism
-athletics
-atlanta
-atlantic
-atlantis
-atlas
-atlases
-atmosphere
-atmospheres
-atmospheric
-atmospherically
-atmospherics
-atoll
-atolls
-atom
-atombomb
-atomic
-atomically
-atomicity
-atomisation
-atomised
-atomistic
-atoms
-atonal
-atonality
-atone
-atoned
-atonement
-atones
-atonic
-atoning
-atop
-atrial
-atrium
-atrocious
-atrociously
-atrocities
-atrocity
-atrophied
-atrophies
-atrophy
-atrophying
-atropine
-attach
-attachable
-attache
-attached
-attaches
-attaching
-attachment
-attachments
-attack
-attacked
-attacker
-attackers
-attacking
-attacks
-attain
-attainable
-attained
-attaining
-attainment
-attainments
-attains
-attempt
-attempted
-attempting
-attempts
-attend
-attendance
-attendances
-attendant
-attendants
-attended
-attendees
-attender
-attenders
-attending
-attends
-attention
-attentional
-attentions
-attentive
-attentively
-attentiveness
-attenuate
-attenuated
-attenuates
-attenuating
-attenuation
-attenuator
-attenuators
-attest
-attestation
-attested
-attesting
-attests
-attic
-attics
-attila
-attire
-attired
-attiring
-attitude
-attitudes
-attitudinal
-attorney
-attorneys
-attract
-attracted
-attracting
-attraction
-attractions
-attractive
-attractively
-attractiveness
-attractor
-attractors
-attracts
-attributable
-attribute
-attributed
-attributes
-attributing
-attribution
-attributions
-attributive
-attrition
-attritional
-attune
-attuned
-atypical
-atypically
-aubergine
-aubergines
-auburn
-auction
-auctioned
-auctioneer
-auctioneers
-auctioning
-auctions
-audacious
-audaciously
-audacity
-audibility
-audible
-audibly
-audience
-audiences
-audio
-audiovisual
-audit
-audited
-auditing
-audition
-auditioned
-auditioning
-auditions
-auditive
-auditor
-auditorium
-auditors
-auditory
-audits
-auger
-augers
-augite
-augment
-augmentation
-augmentations
-augmented
-augmenting
-augments
-augur
-augured
-augurs
-augury
-august
-augustus
-auk
-auks
-aunt
-auntie
-aunties
-aunts
-aupair
-aupairs
-aura
-aural
-aurally
-auras
-aurevoir
-auric
-auriculas
-aurora
-aurorae
-auroral
-auroras
-auspice
-auspices
-auspicious
-auspiciously
-aussie
-aussies
-austere
-austerely
-austerity
-austral
-australian
-austria
-autarchy
-auteur
-authentic
-authentically
-authenticate
-authenticated
-authenticates
-authenticating
-authentication
-authenticator
-authenticators
-authenticity
-author
-authored
-authoress
-authorial
-authoring
-authorisation
-authorisations
-authorise
-authorised
-authorises
-authorising
-authoritarian
-authoritarianism
-authoritarians
-authoritative
-authoritatively
-authorities
-authority
-authors
-authorship
-autism
-autistic
-auto
-autobahn
-autobahns
-autobiographical
-autobiographically
-autobiographies
-autobiography
-autocracies
-autocracy
-autocrat
-autocratic
-autocratically
-autocrats
-autocue
-autograph
-autographed
-autographing
-autographs
-autoignition
-autoimmune
-automat
-automata
-automate
-automated
-automates
-automatic
-automatically
-automatics
-automating
-automation
-automaton
-automats
-automobile
-automorphism
-automorphisms
-automotive
-autonomic
-autonomous
-autonomously
-autonomy
-autopilot
-autopsies
-autopsy
-autosuggestion
-autumn
-autumnal
-autumns
-auxiliaries
-auxiliary
-avail
-availabilities
-availability
-available
-availed
-availing
-avails
-avalanche
-avalanches
-avalanching
-avantgarde
-avarice
-avaricious
-avariciousness
-ave
-avenge
-avenged
-avenger
-avengers
-avenges
-avenging
-avens
-avenue
-avenues
-aver
-average
-averaged
-averagely
-averages
-averaging
-averred
-averring
-avers
-averse
-aversion
-aversions
-aversive
-avert
-averted
-averting
-averts
-avian
-aviaries
-aviary
-aviate
-aviation
-aviator
-aviators
-avid
-avidity
-avidly
-avionics
-avocado
-avoid
-avoidable
-avoidance
-avoided
-avoiding
-avoids
-avoirdupois
-avow
-avowal
-avowals
-avowed
-avowedly
-avowing
-avulsion
-avuncular
-await
-awaited
-awaiting
-awaits
-awake
-awaken
-awakened
-awakening
-awakenings
-awakens
-awakes
-awaking
-award
-awarded
-awarding
-awards
-aware
-awareness
-awash
-away
-awe
-awed
-aweless
-awesome
-awesomely
-awesomeness
-awestruck
-awful
-awfully
-awfulness
-awhile
-awkward
-awkwardest
-awkwardly
-awkwardness
-awls
-awn
-awning
-awnings
-awoke
-awoken
-awol
-awry
-axe
-axed
-axehead
-axeheads
-axeman
-axes
-axial
-axially
-axillary
-axing
-axiom
-axiomatic
-axiomatically
-axiomatising
-axioms
-axis
-axle
-axles
-axolotl
-axon
-axons
-aye
-ayurvedic
-azalea
-azaleas
-azimuth
-azimuthal
-azores
-aztec
-aztecs
-azure
-baa
-baaing
-baal
-babas
-babble
-babbled
-babbler
-babblers
-babbles
-babbling
-babe
-babel
-babes
-babies
-baboon
-baboons
-baby
-babyface
-babyhood
-babying
-babyish
-babylon
-babysit
-babysitter
-babysitters
-babysitting
-baccarat
-bacchus
-bach
-bachelor
-bachelors
-bacilli
-bacillus
-back
-backache
-backbench
-backbencher
-backbenchers
-backbone
-backbones
-backchat
-backdate
-backdated
-backdrop
-backed
-backer
-backers
-backfire
-backfired
-backfires
-backfiring
-backgammon
-background
-backgrounds
-backhand
-backhanded
-backing
-backlash
-backless
-backlight
-backlit
-backlog
-backlogs
-backpack
-backpacker
-backpackers
-backpacking
-backpacks
-backpedal
-backpedalled
-backpedalling
-backrest
-backs
-backseat
-backside
-backsides
-backslapping
-backslash
-backsliding
-backspace
-backspaces
-backspacing
-backstabbing
-backstage
-backstairs
-backstreet
-backstreets
-backstroke
-backtrack
-backtracked
-backtracking
-backtracks
-backup
-backups
-backward
-backwardness
-backwards
-backwash
-backwater
-backwaters
-backwoods
-backwoodsmen
-backyard
-bacon
-bacteria
-bacterial
-bactericidal
-bacteriological
-bacteriologist
-bacteriologists
-bacteriology
-bacteriophage
-bacterium
-bad
-baddy
-bade
-bader
-badge
-badged
-badger
-badgered
-badgering
-badgers
-badges
-badinage
-badlands
-badly
-badminton
-badness
-badtempered
-baffle
-baffled
-bafflement
-baffler
-baffles
-baffling
-bafflingly
-bag
-bagatelle
-bagdad
-bagels
-bagful
-bagfuls
-baggage
-baggages
-bagged
-bagger
-baggier
-baggiest
-bagging
-baggy
-baghdad
-bagman
-bagmen
-bagpipe
-bagpiper
-bagpipes
-bags
-baguette
-baguettes
-bah
-bahamas
-bail
-bailed
-bailiff
-bailiffs
-bailing
-bailiwick
-bailout
-bails
-bait
-baited
-baiters
-baiting
-baitings
-baits
-bake
-baked
-bakehouse
-baker
-bakeries
-bakers
-bakery
-bakes
-baking
-bakings
-baklavas
-balaclava
-balaclavas
-balalaika
-balance
-balanced
-balancer
-balances
-balancing
-balconies
-balcony
-bald
-balder
-balderdash
-baldest
-balding
-baldly
-baldness
-baldy
-bale
-baled
-baleen
-baleful
-balefully
-bales
-bali
-baling
-ball
-ballad
-ballade
-ballades
-ballads
-ballast
-ballasts
-ballbearing
-ballbearings
-ballerina
-ballerinas
-ballet
-balletic
-ballets
-ballistic
-ballistics
-balloon
-ballooned
-ballooning
-balloonist
-balloonists
-balloons
-ballot
-balloted
-balloting
-ballots
-ballpen
-ballpens
-ballpoint
-ballroom
-ballrooms
-balls
-ballyhoo
-balm
-balmier
-balmiest
-balmoral
-balms
-balmy
-baloney
-balsa
-balsam
-baltic
-baluster
-balusters
-balustrade
-balustraded
-balustrades
-bambino
-bamboo
-bamboos
-bamboozle
-bamboozled
-bamboozles
-ban
-banal
-banalities
-banality
-banana
-bananas
-band
-bandage
-bandaged
-bandages
-bandaging
-bandanna
-banded
-bandied
-bandier
-bandiest
-banding
-bandit
-banditry
-bandits
-bandpass
-bands
-bandstand
-bandwagon
-bandwagons
-bandwidth
-bandwidths
-bane
-bang
-banged
-banger
-bangers
-banging
-bangkok
-bangle
-bangles
-bangs
-banish
-banished
-banishes
-banishing
-banishment
-banister
-banisters
-banjo
-bank
-bankable
-banked
-banker
-bankers
-banking
-banknote
-banknotes
-bankrupt
-bankruptcies
-bankruptcy
-bankrupted
-bankrupting
-bankrupts
-banks
-banned
-banner
-banners
-banning
-bannister
-bannisters
-banns
-banquet
-banqueting
-banquets
-bans
-banshee
-banshees
-bantam
-bantams
-bantamweight
-banter
-bantered
-bantering
-baobab
-baobabs
-bap
-baptise
-baptised
-baptises
-baptising
-baptism
-baptismal
-baptisms
-baptist
-baptists
-bar
-barb
-barbarian
-barbarians
-barbaric
-barbarically
-barbarism
-barbarities
-barbarity
-barbarous
-barbarously
-barbecue
-barbecued
-barbecues
-barbed
-barbell
-barbels
-barber
-barbers
-barbie
-barbiturate
-barbiturates
-barbs
-barcode
-bard
-bards
-bare
-bareback
-bared
-barefaced
-barefoot
-barefooted
-barely
-bareness
-barer
-bares
-barest
-bargain
-bargained
-bargainers
-bargaining
-bargains
-barge
-barged
-bargepole
-barges
-barging
-baring
-baritone
-baritones
-barium
-bark
-barked
-barker
-barkers
-barking
-barks
-barky
-barley
-barleycorn
-barleycorns
-barmaid
-barmaids
-barman
-barmen
-barn
-barnacle
-barnacles
-barns
-barnstorming
-barnyard
-barometer
-barometers
-barometric
-baron
-baronage
-baroness
-baronesses
-baronet
-baronets
-baronial
-baronies
-barons
-barony
-baroque
-barrack
-barracking
-barracks
-barracuda
-barrage
-barrages
-barre
-barred
-barrel
-barrelled
-barrels
-barren
-barrenness
-barricade
-barricaded
-barricades
-barrier
-barriers
-barring
-barrister
-barristers
-barrow
-barrows
-bars
-bart
-bartender
-barter
-bartered
-barterer
-bartering
-basal
-basalt
-basaltic
-basalts
-base
-baseball
-baseballs
-based
-baseless
-baseline
-baselines
-basely
-basement
-basements
-baseness
-baser
-bases
-basest
-bash
-bashed
-bashes
-bashful
-bashfully
-bashfulness
-bashing
-basic
-basically
-basics
-basify
-basil
-basilica
-basilicas
-basilisk
-basilisks
-basin
-basinful
-basing
-basins
-basis
-bask
-basked
-basket
-basketball
-basketful
-basketry
-baskets
-basking
-basks
-basque
-basrelief
-basreliefs
-bass
-basses
-bassist
-bassoon
-bassoons
-bastard
-bastardisation
-bastardise
-bastardised
-bastards
-bastardy
-baste
-basted
-basting
-bastion
-bastions
-bat
-batch
-batched
-batches
-batching
-bate
-bated
-bates
-bath
-bathe
-bathed
-bather
-bathers
-bathes
-bathetic
-bathhouse
-bathing
-bathos
-bathrobe
-bathroom
-bathrooms
-baths
-bathtub
-bathtubs
-bathurst
-bathwater
-batik
-batiks
-bating
-batman
-batmen
-baton
-batons
-bats
-batsman
-batsmen
-battalion
-battalions
-batted
-batten
-battened
-battening
-battens
-batter
-battered
-batteries
-battering
-batters
-battery
-batting
-battle
-battleaxe
-battlecry
-battled
-battledress
-battlefield
-battlefields
-battleground
-battlegrounds
-battlement
-battlemented
-battlements
-battler
-battlers
-battles
-battleship
-battleships
-battling
-batty
-bauble
-baubles
-baud
-baulk
-baulked
-baulking
-baulks
-baulky
-bauxite
-bavaria
-bavarian
-bawdier
-bawdiest
-bawdy
-bawl
-bawled
-bawling
-bawls
-bay
-bayed
-baying
-bayonet
-bayonets
-bays
-bazaar
-bazaars
-bazooka
-bazookas
-be
-beach
-beachcomber
-beached
-beaches
-beachhead
-beaching
-beachside
-beachy
-beacon
-beaconed
-beacons
-bead
-beaded
-beadier
-beadiest
-beading
-beadings
-beadle
-beadles
-beads
-beadwork
-beady
-beadyeyed
-beagle
-beagles
-beak
-beaked
-beaker
-beakers
-beaks
-beam
-beamed
-beaming
-beams
-beamy
-bean
-beanbag
-beanery
-beanie
-beanpole
-beans
-beanstalk
-beanstalks
-beany
-bear
-bearable
-bearably
-beard
-bearded
-beardless
-beards
-bearer
-bearers
-bearing
-bearings
-bearish
-bears
-bearskin
-bearskins
-beast
-beastliest
-beastliness
-beastly
-beasts
-beat
-beaten
-beater
-beaters
-beatific
-beatification
-beatifications
-beatified
-beatifies
-beatify
-beating
-beatings
-beatitude
-beatitudes
-beatnik
-beatniks
-beats
-beatup
-beau
-beaus
-beauteous
-beautician
-beauties
-beautified
-beautifier
-beautifiers
-beautifies
-beautiful
-beautifully
-beautify
-beauts
-beauty
-beaux
-beaver
-beavering
-beavers
-bebop
-becalm
-becalmed
-became
-because
-beck
-beckon
-beckoned
-beckoning
-beckons
-becks
-become
-becomes
-becoming
-bed
-bedazzle
-bedazzled
-bedbug
-bedbugs
-bedchamber
-bedclothes
-bedcover
-bedded
-bedder
-bedding
-beddings
-bedecked
-bedecks
-bedevil
-bedevilled
-bedevilment
-bedevils
-bedfellow
-bedfellows
-bedlam
-bedlinen
-bedmaker
-bedmakers
-bedouin
-bedouins
-bedpan
-bedpans
-bedpost
-bedraggled
-bedridden
-bedrock
-bedroom
-bedrooms
-beds
-bedsheets
-bedside
-bedsit
-bedsitter
-bedsitters
-bedsore
-bedsores
-bedspread
-bedspreads
-bedstead
-bedsteads
-bedtime
-bedtimes
-bee
-beech
-beeches
-beechnut
-beechwood
-beef
-beefburger
-beefburgers
-beefcake
-beefeater
-beefier
-beefiest
-beefs
-beefy
-beehive
-beehives
-beekeepers
-beeline
-beelines
-been
-beep
-beeper
-beeping
-beeps
-beer
-beermat
-beermats
-beers
-beery
-bees
-beeswax
-beet
-beetle
-beetles
-beetroot
-beets
-befall
-befallen
-befalling
-befalls
-befell
-befit
-befits
-befitted
-befitting
-befog
-before
-beforehand
-befoul
-befriend
-befriended
-befriending
-befriends
-befuddle
-befuddled
-befuddling
-beg
-began
-begat
-beget
-begets
-begetting
-beggar
-beggared
-beggarly
-beggars
-beggary
-begged
-begging
-beggings
-begin
-beginner
-beginners
-beginning
-beginnings
-begins
-begone
-begonias
-begot
-begotten
-begrudge
-begrudged
-begrudgingly
-begs
-beguile
-beguiled
-beguilement
-beguiling
-begun
-behalf
-behave
-behaved
-behaves
-behaving
-behaviour
-behavioural
-behaviourally
-behaviourism
-behaviourist
-behaviourists
-behaviours
-behead
-beheaded
-beheading
-beheld
-behemoth
-behest
-behind
-behindhand
-behinds
-behold
-beholden
-beholder
-beholders
-beholding
-beholds
-behoved
-behoves
-beige
-beijing
-being
-beings
-beirut
-bejewel
-bejewelled
-bel
-belabour
-belated
-belatedly
-belatedness
-belay
-belayed
-belays
-belch
-belched
-belches
-belching
-beleaguered
-belfast
-belfries
-belfry
-belgian
-belgians
-belgium
-belgrade
-belie
-belied
-belief
-beliefs
-belies
-believability
-believable
-believably
-believe
-believed
-believer
-believers
-believes
-believing
-belike
-belittle
-belittled
-belittles
-belittling
-bell
-belladonna
-bellbottoms
-belle
-belled
-belles
-bellicose
-bellicosity
-bellies
-belligerence
-belligerent
-belligerently
-belligerents
-bellow
-bellowed
-bellowing
-bellows
-bells
-belly
-bellyful
-belong
-belonged
-belonging
-belongings
-belongs
-beloved
-below
-belt
-belted
-belting
-beltings
-belts
-belying
-bemoan
-bemoaned
-bemoaning
-bemoans
-bemuse
-bemused
-bemusedly
-bemusement
-ben
-bench
-benches
-benchmark
-benchmarking
-benchmarks
-bend
-bendable
-bended
-bender
-benders
-bending
-bendings
-bends
-beneath
-benediction
-benedictions
-benefaction
-benefactions
-benefactor
-benefactors
-benefactress
-benefice
-beneficence
-beneficent
-beneficial
-beneficially
-beneficiaries
-beneficiary
-benefit
-benefited
-benefiting
-benefits
-benelux
-benevolence
-benevolent
-benevolently
-bengal
-benighted
-benightedly
-benign
-benignity
-benignly
-benjamin
-bent
-benzene
-bequeath
-bequeathed
-bequeathing
-bequest
-bequests
-berate
-berated
-berating
-berber
-bereave
-bereaved
-bereavement
-bereavements
-bereaving
-bereft
-beret
-berets
-bergs
-berk
-berlin
-berliner
-bermuda
-bern
-berries
-berry
-berserk
-berth
-berthed
-berths
-beryl
-beryllium
-beseech
-beseeched
-beseeches
-beseeching
-beseechingly
-beset
-besets
-besetting
-beside
-besides
-besiege
-besieged
-besieging
-besmirch
-besot
-besotted
-bespattered
-bespeak
-bespeaking
-bespeaks
-bespectacled
-bespoke
-best
-bestial
-bestiality
-bestiary
-bestir
-bestirred
-bestirring
-bestknown
-bestow
-bestowal
-bestowals
-bestowed
-bestowing
-bestows
-bestride
-bestrode
-bests
-bestseller
-bestsellers
-bestselling
-bet
-beta
-betel
-betide
-betimes
-betoken
-betokened
-betokens
-betray
-betrayal
-betrayals
-betrayed
-betrayer
-betrayers
-betraying
-betrays
-betroth
-betrothal
-betrothed
-betroths
-bets
-betted
-better
-bettered
-bettering
-betterment
-betters
-betting
-between
-betwixt
-bevel
-bevelled
-bevelling
-bevels
-beverage
-beverages
-bevvy
-bevy
-bewail
-bewailed
-bewailing
-bewails
-beware
-bewhiskered
-bewilder
-bewildered
-bewildering
-bewilderingly
-bewilderment
-bewilders
-bewitch
-bewitched
-bewitching
-beyond
-biannual
-bias
-biased
-biases
-biasing
-biassed
-biasses
-biassing
-bib
-bible
-bibles
-biblical
-biblically
-biblicists
-bibliographic
-bibliographical
-bibliographies
-bibliography
-bibliophile
-bibs
-bicameral
-bicarb
-bicarbonate
-bicentenary
-bicentennial
-biceps
-bicker
-bickering
-bickerings
-bicycle
-bicycled
-bicycles
-bicycling
-bid
-bidden
-bidder
-bidders
-bidding
-biddings
-bide
-bided
-bides
-bidet
-biding
-bidirectional
-bids
-biennial
-biennials
-bier
-bifocal
-bifocals
-bifurcated
-bifurcation
-bifurcations
-big
-bigamist
-bigamists
-bigamous
-bigamy
-bigapple
-bigben
-bigger
-biggest
-biggish
-bigheads
-bigness
-bigot
-bigoted
-bigotry
-bigots
-bijou
-bijoux
-bike
-biker
-bikes
-biking
-bikini
-bikinis
-bilabial
-bilateral
-bilaterally
-bile
-biles
-bilge
-bilges
-bilharzia
-biliary
-bilingual
-bilingualism
-bilinguals
-bilious
-bill
-billable
-billboard
-billboards
-billed
-billet
-billeted
-billeting
-billets
-billiard
-billiards
-billing
-billings
-billion
-billionaire
-billionaires
-billions
-billionth
-billow
-billowed
-billowing
-billows
-billowy
-billposters
-bills
-billy
-biltong
-bimbo
-bimodal
-bimonthly
-bin
-binaries
-binary
-bind
-binder
-binders
-bindery
-binding
-bindings
-binds
-bindweed
-bing
-binge
-bingo
-binnacle
-binocular
-binoculars
-binodal
-binomial
-bins
-biochemical
-biochemically
-biochemist
-biochemistry
-biochemists
-biodegradable
-biodiversity
-bioengineering
-biofeedback
-biogeographical
-biographer
-biographers
-biographical
-biographically
-biographies
-biography
-biological
-biologically
-biologist
-biologists
-biology
-biomass
-biomedical
-biometric
-biometrics
-biometry
-biomorph
-bionic
-bionics
-biophysical
-biopsies
-biopsy
-biorhythm
-biorhythms
-bioscope
-biosphere
-biospheres
-biosynthesis
-biota
-biotechnological
-biotechnologist
-biotechnologists
-biotechnology
-biotic
-bipartisan
-bipartite
-biped
-bipedal
-bipedalism
-bipeds
-biplane
-biplanes
-bipolar
-birch
-birched
-birches
-bird
-birdbath
-birdbaths
-birdcage
-birdcages
-birdie
-birdies
-birds
-birdsong
-birdtables
-birdwatcher
-birdwatchers
-birdwatching
-birefringence
-birefringent
-birth
-birthday
-birthdays
-birthmark
-birthmarks
-birthplace
-birthrate
-birthright
-birthrights
-births
-biscuit
-biscuits
-biscuity
-bisect
-bisected
-bisecting
-bisects
-bisexual
-bisexuality
-bisexuals
-bishop
-bishopric
-bishoprics
-bishops
-bismarck
-bismuth
-bison
-bisons
-bissau
-bistable
-bistro
-bit
-bitch
-bitches
-bitchiness
-bitching
-bitchy
-bite
-biter
-biters
-bites
-biting
-bitingly
-bitmap
-bits
-bitten
-bitter
-bitterest
-bitterly
-bittern
-bitterness
-bitters
-bittersweet
-bittiness
-bitts
-bitty
-bitumen
-bituminous
-bivalve
-bivalves
-bivouac
-bivouacked
-bivouacs
-biweekly
-biz
-bizarre
-bizarrely
-bizarreness
-blab
-blabbed
-blabber
-blabbering
-blabs
-black
-blackball
-blackballed
-blackballing
-blackberries
-blackberry
-blackbird
-blackbirds
-blackboard
-blackboards
-blackcurrant
-blackcurrants
-blacked
-blacken
-blackened
-blackening
-blackens
-blacker
-blackest
-blackfly
-blackguard
-blackhead
-blackheads
-blacking
-blackish
-blackjack
-blackleg
-blacklist
-blacklisted
-blacklisting
-blacklists
-blackly
-blackmail
-blackmailed
-blackmailer
-blackmailers
-blackmailing
-blackmails
-blackness
-blackout
-blackouts
-blacks
-blacksea
-blackshirts
-blacksmith
-blacksmiths
-blackthorn
-bladder
-bladders
-blade
-bladed
-blades
-blah
-blame
-blameable
-blamed
-blameful
-blameless
-blamelessly
-blamelessness
-blames
-blameworthy
-blaming
-blanch
-blanched
-blanching
-blancmange
-bland
-blandest
-blandishments
-blandly
-blandness
-blank
-blanked
-blanker
-blanket
-blanketed
-blanketing
-blankets
-blanking
-blankly
-blankness
-blanks
-blare
-blared
-blares
-blaring
-blase
-blaspheme
-blasphemed
-blasphemer
-blasphemers
-blasphemies
-blaspheming
-blasphemous
-blasphemously
-blasphemy
-blast
-blasted
-blaster
-blasters
-blasting
-blasts
-blat
-blatancy
-blatant
-blatantly
-blaze
-blazed
-blazer
-blazers
-blazes
-blazing
-bleach
-bleached
-bleacher
-bleachers
-bleaches
-bleaching
-bleak
-bleaker
-bleakest
-bleakly
-bleakness
-blearily
-bleary
-blearyeyed
-bleat
-bleated
-bleating
-bleats
-bled
-bleed
-bleeder
-bleeders
-bleeding
-bleeds
-bleep
-bleeped
-bleeper
-bleeping
-bleeps
-blemish
-blemished
-blemishes
-blench
-blenched
-blend
-blended
-blender
-blenders
-blending
-blends
-blesbok
-bless
-blessed
-blessedness
-blesses
-blessing
-blessings
-blew
-blight
-blighted
-blighting
-blights
-blimp
-blimps
-blind
-blinded
-blinder
-blindest
-blindfold
-blindfolded
-blindfolds
-blinding
-blindingly
-blindly
-blindness
-blinds
-blink
-blinked
-blinker
-blinkered
-blinkering
-blinkers
-blinking
-blinks
-blip
-blips
-bliss
-blissful
-blissfully
-blister
-blistered
-blistering
-blisteringly
-blisters
-blithe
-blithely
-blithering
-blitz
-blitzkrieg
-blizzard
-blizzards
-bloat
-bloated
-bloating
-blob
-blobs
-bloc
-block
-blockade
-blockaded
-blockades
-blockading
-blockage
-blockages
-blockbuster
-blockbusters
-blockbusting
-blocked
-blockers
-blockhead
-blockheads
-blocking
-blockish
-blocks
-blocky
-blocs
-bloke
-blokes
-blond
-blonde
-blonder
-blondes
-blondest
-blondhaired
-blonds
-blood
-bloodbath
-bloodcurdling
-blooded
-bloodhound
-bloodhounds
-bloodied
-bloodier
-bloodies
-bloodiest
-bloodily
-bloodless
-bloodlessness
-bloodletting
-bloodline
-bloodlust
-bloodred
-bloods
-bloodshed
-bloodshot
-bloodsport
-bloodsports
-bloodstain
-bloodstained
-bloodstains
-bloodstock
-bloodstone
-bloodstream
-bloodsuckers
-bloodthirstier
-bloodthirstiest
-bloodthirsty
-bloodworm
-bloody
-bloodymindedness
-bloom
-bloomed
-bloomer
-bloomers
-blooming
-blooms
-bloomy
-blossom
-blossomed
-blossoming
-blossoms
-blot
-blotch
-blotched
-blotches
-blotchy
-blots
-blotted
-blotter
-blotting
-blouse
-blouses
-blow
-blowdried
-blowdrying
-blowed
-blower
-blowers
-blowfly
-blowing
-blowlamp
-blown
-blowpipe
-blowpipes
-blows
-blowtorch
-blowtorches
-blowup
-blubber
-blubbered
-blubbering
-bludgeon
-bludgeoned
-bludgeoning
-bludgeons
-blue
-bluebell
-bluebells
-blueberries
-blueberry
-bluebird
-bluebirds
-blueblooded
-bluebottle
-bluebottles
-bluecollar
-blueish
-bluemoon
-blueness
-bluenile
-blueprint
-blueprints
-bluer
-blues
-bluest
-bluesy
-bluff
-bluffed
-bluffer
-bluffers
-bluffing
-bluffs
-bluish
-blunder
-blunderbuss
-blundered
-blundering
-blunderings
-blunders
-blunt
-blunted
-blunter
-bluntest
-blunting
-bluntly
-bluntness
-blunts
-blur
-blurb
-blurbs
-blurred
-blurring
-blurry
-blurs
-blurt
-blurted
-blurting
-blurts
-blush
-blushed
-blusher
-blushers
-blushes
-blushing
-blushingly
-bluster
-blustered
-blustering
-blusters
-blustery
-bmus
-boa
-boar
-board
-boarded
-boarder
-boarders
-boardgames
-boarding
-boardings
-boardroom
-boardrooms
-boards
-boars
-boas
-boast
-boasted
-boaster
-boasters
-boastful
-boastfully
-boastfulness
-boasting
-boasts
-boat
-boated
-boater
-boaters
-boathouse
-boathouses
-boating
-boatload
-boatman
-boatmen
-boats
-boatswain
-bob
-bobbed
-bobbies
-bobbin
-bobbing
-bobbins
-bobble
-bobbles
-bobby
-bobcat
-bobs
-bobsled
-bobtail
-bobtails
-bode
-boded
-bodes
-bodice
-bodices
-bodied
-bodies
-bodiless
-bodily
-boding
-bodkin
-body
-bodybuilding
-bodyguard
-bodyguards
-bodywork
-boer
-boers
-boerwar
-boffin
-boffins
-bog
-bogey
-bogeyman
-bogeymen
-bogeys
-bogged
-boggiest
-bogging
-boggle
-boggled
-boggles
-boggling
-bogglingly
-boggy
-bogies
-bogs
-bogus
-bogy
-bohemian
-boil
-boiled
-boiler
-boilermakers
-boilers
-boiling
-boils
-boisterous
-boisterously
-bola
-bold
-bolder
-boldest
-boldface
-boldly
-boldness
-bole
-bolero
-boleyn
-bolivia
-bollard
-bollards
-bologna
-bolster
-bolstered
-bolstering
-bolsters
-bolt
-bolted
-bolting
-bolts
-bomb
-bombard
-bombarded
-bombardier
-bombarding
-bombardment
-bombardments
-bombards
-bombast
-bombastic
-bombasts
-bombay
-bombed
-bomber
-bombers
-bombing
-bombings
-bombs
-bombshell
-bonanza
-bonanzas
-bonbon
-bonbons
-bond
-bondage
-bonded
-bondholders
-bonding
-bondings
-bonds
-bone
-boned
-boneless
-bonemeal
-bones
-boney
-bonfire
-bonfires
-bong
-bongs
-bonier
-boniest
-bonn
-bonnet
-bonneted
-bonnets
-bonnie
-bonniest
-bonny
-bonobo
-bonsai
-bonus
-bonuses
-bony
-boo
-boobies
-booboo
-booby
-boobytrap
-boobytrapped
-boobytraps
-booed
-boohoo
-booing
-book
-bookable
-bookbinder
-bookbinders
-bookbinding
-bookcase
-bookcases
-booked
-bookends
-bookers
-bookie
-bookies
-booking
-bookings
-bookish
-bookkeeper
-bookkeeping
-booklet
-booklets
-bookmaker
-bookmakers
-bookmaking
-bookmark
-bookmarks
-books
-bookseller
-booksellers
-bookshelf
-bookshelves
-bookshop
-bookshops
-bookstall
-bookstalls
-bookwork
-bookworm
-bookworms
-boom
-boomed
-boomer
-boomerang
-boomeranging
-boomerangs
-booming
-booms
-boon
-boons
-boor
-boorish
-boorishly
-boorishness
-boors
-boos
-boost
-boosted
-booster
-boosters
-boosting
-boosts
-boot
-booted
-bootees
-booth
-booths
-booting
-bootlace
-bootlaces
-bootleg
-bootless
-bootprints
-boots
-bootstrap
-bootstraps
-booty
-booze
-boozed
-boozer
-boozers
-boozes
-bop
-bops
-boracic
-borate
-borates
-borax
-bordeaux
-border
-bordered
-borderer
-bordering
-borderline
-borders
-bore
-boreal
-bored
-boredom
-borehole
-boreholes
-borer
-borers
-bores
-boring
-boringly
-born
-bornagain
-borne
-borneo
-boron
-borough
-boroughs
-borrow
-borrowable
-borrowed
-borrower
-borrowers
-borrowing
-borrowings
-borrows
-borstal
-borstals
-bosnia
-bosom
-bosoms
-boson
-bosons
-boss
-bossed
-bosses
-bossier
-bossiest
-bossiness
-bossing
-bossy
-boston
-bosun
-botanic
-botanical
-botanically
-botanist
-botanists
-botany
-botch
-botched
-both
-bother
-bothered
-bothering
-bothers
-bothersome
-bothy
-botswana
-bottle
-bottled
-bottlefed
-bottlefeed
-bottleneck
-bottlenecks
-bottler
-bottles
-bottling
-bottom
-bottomed
-bottoming
-bottomless
-bottommost
-bottoms
-botulism
-boudoir
-boudoirs
-bouffant
-bougainvillea
-bough
-boughs
-bought
-boulder
-boulders
-boulevard
-boulevards
-bounce
-bounced
-bouncer
-bouncers
-bounces
-bouncier
-bounciest
-bouncing
-bouncy
-bound
-boundaries
-boundary
-bounded
-boundedness
-bounder
-bounders
-bounding
-boundless
-bounds
-bounteous
-bounties
-bountiful
-bountifully
-bounty
-bouquet
-bouquets
-bourbon
-bourbons
-bourgeois
-bourgeoisie
-bout
-boutique
-boutiques
-bouts
-bovine
-bow
-bowdlerisation
-bowdlerised
-bowdlerising
-bowed
-bowel
-bowels
-bower
-bowers
-bowie
-bowing
-bowl
-bowlder
-bowled
-bowler
-bowlers
-bowlines
-bowling
-bowls
-bowman
-bowmen
-bows
-bowsprit
-bowstring
-box
-boxed
-boxer
-boxers
-boxes
-boxful
-boxing
-boxoffice
-boxtops
-boxwood
-boxy
-boy
-boycott
-boycotted
-boycotting
-boycotts
-boyfriend
-boyfriends
-boyhood
-boyish
-boyishly
-boys
-boyscout
-bra
-brabble
-brabbled
-brabbles
-brace
-braced
-bracelet
-bracelets
-bracer
-braces
-brachiopods
-bracing
-bracingly
-bracken
-bracket
-bracketed
-bracketing
-brackets
-brackish
-bradawl
-bradycardia
-brag
-braggart
-braggarts
-bragged
-bragging
-brags
-brahman
-brahms
-braid
-braided
-braiding
-braids
-brail
-braille
-brain
-braincell
-braincells
-brainchild
-braindamaged
-braindead
-brainier
-brainless
-brainlessly
-brainlessness
-brainpower
-brains
-brainstorm
-brainstorming
-brainstorms
-brainteasers
-brainteasing
-brainwash
-brainwashed
-brainwashing
-brainwave
-brainwaves
-brainy
-braise
-braised
-brake
-brake
-braked
-brakes
-braking
-bramble
-brambles
-bran
-branch
-branched
-branches
-branching
-branchy
-brand
-branded
-brandies
-branding
-brandish
-brandished
-brandishes
-brandishing
-brands
-brandy
-brans
-bras
-brash
-brasher
-brashly
-brashness
-brasiers
-brasil
-brasilia
-brass
-brasserie
-brasses
-brassiere
-brassy
-brat
-brats
-bratty
-bravado
-brave
-braved
-bravely
-braver
-bravery
-braves
-bravest
-braving
-bravo
-braw
-brawl
-brawled
-brawler
-brawling
-brawls
-brawn
-brawnier
-brawniest
-brawny
-bray
-brayed
-braying
-brays
-braze
-brazen
-brazened
-brazenly
-brazenness
-brazier
-braziers
-brazil
-brazing
-breach
-breached
-breaches
-breaching
-bread
-breadandbutter
-breadboard
-breadboards
-breadcrumbs
-breaded
-breadfruit
-breadline
-breads
-breadth
-breadths
-breadwinner
-breadwinners
-break
-breakable
-breakage
-breakages
-breakaway
-breakaways
-breakdown
-breakdowns
-breaker
-breakers
-breakfast
-breakfasted
-breakfasting
-breakfasts
-breakin
-breaking
-breakins
-breakneck
-breakout
-breakpoint
-breakpoints
-breaks
-breakthrough
-breakthroughs
-breakup
-breakups
-breakwater
-breakwaters
-bream
-breast
-breastbone
-breasted
-breastfeed
-breastfeeding
-breasting
-breastplate
-breasts
-breaststroke
-breath
-breathable
-breathalysed
-breathalyser
-breathalysers
-breathe
-breathed
-breather
-breathes
-breathing
-breathings
-breathingspace
-breathless
-breathlessly
-breathlessness
-breaths
-breathtaking
-breathtakingly
-breathy
-breccias
-brecciated
-bred
-breech
-breeches
-breed
-breeder
-breeders
-breeding
-breeds
-breeze
-breezed
-breezes
-breezier
-breeziest
-breezily
-breezing
-breezy
-brethren
-breton
-breviary
-brevity
-brew
-brewage
-brewed
-brewer
-breweries
-brewers
-brewery
-brewing
-brews
-briar
-bribe
-bribed
-briber
-bribers
-bribery
-bribes
-bribing
-bricabrac
-brick
-brickbat
-brickbats
-bricked
-bricking
-bricklayer
-bricklayers
-bricklaying
-brickred
-bricks
-brickwork
-bridal
-bridals
-bride
-bridegroom
-bridegrooms
-brides
-bridesmaid
-bridesmaids
-bridge
-bridgebuilding
-bridged
-bridgehead
-bridges
-bridging
-bridle
-bridled
-bridles
-bridleway
-bridleways
-bridling
-brief
-briefcase
-briefcases
-briefed
-briefer
-briefest
-briefing
-briefings
-briefly
-briefs
-briers
-brig
-brigade
-brigades
-brigadier
-brigadiers
-brigand
-brigands
-bright
-brighten
-brightened
-brightening
-brightens
-brighter
-brightest
-brighteyed
-brightly
-brightness
-brightnesses
-brighton
-brilliance
-brilliancy
-brilliant
-brilliantly
-brim
-brimmed
-brimming
-brims
-brimstone
-brindled
-brine
-brines
-bring
-bringer
-bringing
-brings
-brink
-brinkmanship
-brinks
-briny
-brio
-brioche
-briquettes
-brisbane
-brisk
-brisker
-briskest
-briskly
-briskness
-bristle
-bristled
-bristles
-bristling
-bristly
-brit
-britain
-british
-britons
-brittle
-brittleness
-broach
-broached
-broaches
-broaching
-broad
-broadband
-broadcast
-broadcaster
-broadcasters
-broadcasting
-broadcasts
-broaden
-broadened
-broadening
-broadens
-broader
-broadest
-broadleaved
-broadloom
-broadly
-broadminded
-broadmindedness
-broadness
-broadsheet
-broadsheets
-broadside
-broadsides
-broadsword
-broadswords
-broadway
-brocade
-brocaded
-broccoli
-brochure
-brochures
-brogue
-brogues
-broil
-broiled
-broiler
-broiling
-broils
-broke
-broken
-brokenhearted
-brokenly
-broker
-brokerage
-brokered
-brokers
-broking
-bromide
-bromides
-bromine
-bronchi
-bronchial
-bronchitis
-bronco
-brontosaurus
-bronze
-bronzed
-bronzes
-brooch
-brooches
-brood
-brooded
-broodiness
-brooding
-broodingly
-broods
-broody
-brook
-brooklyn
-brooks
-broom
-brooms
-broomstick
-broomsticks
-broth
-brothel
-brothels
-brother
-brotherhood
-brotherinlaw
-brotherly
-brothers
-brothersinlaw
-broths
-brought
-brouhaha
-brow
-browbeat
-browbeaten
-browbeating
-brown
-browned
-browner
-brownest
-brownie
-brownies
-browning
-brownish
-brownness
-browns
-brows
-browse
-browsed
-browser
-browsers
-browses
-browsing
-bruise
-bruised
-bruiser
-bruisers
-bruises
-bruising
-brunch
-brunches
-brunei
-brunet
-brunets
-brunette
-brunettes
-brunt
-brunts
-brush
-brushed
-brushes
-brushing
-brushoff
-brushup
-brushwood
-brushwork
-brushy
-brusque
-brusquely
-brusqueness
-brussels
-brutal
-brutalisation
-brutalise
-brutalised
-brutalising
-brutalism
-brutalities
-brutality
-brutally
-brute
-brutes
-brutish
-brutishness
-brutus
-bub
-bubble
-bubbled
-bubblegum
-bubbles
-bubblier
-bubbliest
-bubbling
-bubbly
-bubonic
-buccaneer
-buccaneering
-buccaneers
-buck
-bucked
-bucket
-bucketful
-bucketfuls
-bucketing
-buckets
-bucking
-buckle
-buckled
-buckler
-bucklers
-buckles
-buckling
-buckminsterfullerene
-buckpassing
-bucks
-buckshot
-buckskin
-bucolic
-bud
-budapest
-budded
-buddhism
-buddhist
-buddies
-budding
-buddings
-buddy
-budge
-budged
-budgerigar
-budget
-budgetary
-budgeted
-budgeting
-budgets
-budgie
-budgies
-budging
-buds
-buff
-buffalo
-buffer
-buffered
-buffering
-buffers
-buffet
-buffeted
-buffeting
-buffetings
-buffets
-buffing
-buffoon
-buffoonery
-buffoons
-buffs
-bug
-bugbear
-bugbears
-bugeyed
-bugged
-bugger
-buggered
-buggering
-buggers
-buggery
-buggies
-bugging
-buggy
-bugle
-bugler
-buglers
-bugles
-bugs
-build
-builder
-builders
-building
-buildings
-builds
-buildup
-buildups
-built
-builtin
-builtup
-bulb
-bulbous
-bulbs
-bulgaria
-bulge
-bulged
-bulges
-bulging
-bulgy
-bulimia
-bulimic
-bulk
-bulkhead
-bulkheads
-bulkier
-bulkiest
-bulks
-bulky
-bull
-bulldog
-bulldogs
-bulldoze
-bulldozed
-bulldozer
-bulldozers
-bulldozing
-bullet
-bulletin
-bulletins
-bulletproof
-bullets
-bullfight
-bullfighting
-bullfinch
-bullfrog
-bullied
-bullies
-bullion
-bullish
-bullock
-bullocks
-bulls
-bully
-bullying
-bulrushes
-bulwark
-bulwarks
-bum
-bumble
-bumbled
-bumbler
-bumblers
-bumbles
-bumbling
-bump
-bumped
-bumper
-bumpers
-bumpier
-bumpiest
-bumping
-bumpkin
-bumpkins
-bumps
-bumptious
-bumpy
-bums
-bun
-bunch
-bunched
-bunches
-bunching
-bundle
-bundled
-bundles
-bundling
-bung
-bungalow
-bungalows
-bungee
-bungle
-bungled
-bungler
-bunglers
-bungles
-bungling
-bunion
-bunions
-bunk
-bunked
-bunker
-bunkered
-bunkers
-bunks
-bunkum
-bunnies
-bunny
-buns
-bunting
-bunyan
-buoy
-buoyancy
-buoyant
-buoyantly
-buoyed
-buoys
-bur
-burble
-burbled
-burbles
-burbling
-burden
-burdened
-burdening
-burdens
-burdensome
-burdock
-bureau
-bureaucracies
-bureaucracy
-bureaucrat
-bureaucratic
-bureaucratically
-bureaucratisation
-bureaucrats
-bureaus
-bureaux
-burette
-burg
-burgeon
-burgeoned
-burgeoning
-burgeons
-burger
-burgers
-burghers
-burglar
-burglaries
-burglars
-burglary
-burgle
-burgled
-burgles
-burgling
-burgundy
-burial
-burials
-buried
-buries
-burlesque
-burlesquing
-burlier
-burliest
-burly
-burma
-burmese
-burn
-burned
-burner
-burners
-burning
-burnings
-burnished
-burnishing
-burns
-burnt
-burp
-burped
-burping
-burps
-burr
-burrow
-burrowed
-burrowing
-burrows
-burs
-bursar
-bursaries
-bursars
-bursary
-burst
-bursted
-bursting
-bursts
-burundi
-bury
-burying
-bus
-buses
-bush
-bushel
-bushels
-bushes
-bushfire
-bushier
-bushiest
-bushiness
-bushing
-bushland
-bushman
-bushmen
-bushy
-busied
-busier
-busies
-busiest
-busily
-business
-businesses
-businesslike
-businessman
-businessmen
-businesswoman
-busk
-busker
-buskers
-busking
-busman
-busmen
-bussed
-bussing
-bust
-bustard
-bustards
-busted
-busters
-bustier
-busting
-bustle
-bustled
-bustles
-bustling
-busts
-busty
-busy
-busybodies
-busybody
-busying
-but
-butane
-butcher
-butchered
-butchering
-butchers
-butchery
-butler
-butlers
-buts
-butt
-butted
-butter
-buttercup
-buttercups
-buttered
-butterfat
-butterflies
-butterfly
-buttering
-buttermilk
-butters
-butterscotch
-buttery
-butting
-buttock
-buttocks
-button
-buttoned
-buttonhole
-buttonholed
-buttonholes
-buttoning
-buttons
-buttress
-buttressed
-buttresses
-buttressing
-butts
-buxom
-buy
-buyer
-buyers
-buying
-buyout
-buys
-buzz
-buzzard
-buzzards
-buzzed
-buzzer
-buzzers
-buzzes
-buzzing
-buzzwords
-by
-bye
-byebye
-byelaw
-byelaws
-byelection
-byelections
-byes
-bygone
-bygones
-bylaw
-bylaws
-byline
-bypass
-bypassed
-bypasses
-bypassing
-bypath
-bypaths
-byproduct
-byproducts
-bystander
-bystanders
-byte
-bytes
-byway
-byways
-byword
-cab
-cabal
-cabals
-cabaret
-cabarets
-cabbage
-cabbages
-cabby
-cabin
-cabinet
-cabinetmaker
-cabinets
-cabins
-cable
-cabled
-cables
-cableway
-cabling
-cabman
-cabmen
-caboodle
-caboose
-cabriolet
-cabs
-cacao
-cache
-cached
-caches
-cachet
-caching
-cackle
-cackled
-cackles
-cackling
-cacophonous
-cacophony
-cacti
-cactus
-cactuses
-cad
-cadaver
-cadaverous
-cadavers
-caddie
-caddied
-caddies
-caddy
-caddying
-cade
-cadence
-cadences
-cadenza
-cadenzas
-cadet
-cadets
-cadge
-cadged
-cadger
-cadges
-cadmium
-cads
-caesar
-cafe
-cafes
-cafeteria
-cafeterias
-caftan
-caftans
-cage
-caged
-cages
-cagey
-cagiest
-caging
-cagoule
-cagoules
-cagy
-cahoots
-caiman
-caimans
-cain
-cairn
-cairns
-cairo
-cajole
-cajoled
-cajoling
-cake
-caked
-cakes
-caking
-calamities
-calamitous
-calamitously
-calamity
-calcareous
-calcification
-calcified
-calcify
-calcite
-calcium
-calculable
-calculate
-calculated
-calculatedly
-calculates
-calculating
-calculation
-calculations
-calculative
-calculator
-calculators
-calculus
-calcutta
-caldera
-caldron
-caldrons
-calendar
-calendars
-calf
-calibrate
-calibrated
-calibrates
-calibrating
-calibration
-calibrations
-calibrator
-calibrators
-calibre
-calico
-calif
-california
-caliper
-calipers
-caliph
-call
-callable
-called
-caller
-callers
-callgirl
-callgirls
-calligrapher
-calligraphic
-calligraphy
-calling
-callings
-calliper
-callipers
-callisthenics
-callous
-calloused
-callously
-callousness
-callow
-callowness
-calls
-callup
-callus
-calm
-calmed
-calmer
-calmest
-calming
-calmly
-calmness
-calms
-calorie
-calories
-calorific
-calorimeter
-calorimeters
-calorimetry
-calory
-calumniate
-calumnies
-calumny
-calvary
-calve
-calves
-calvin
-calving
-calypso
-cam
-camaraderie
-camber
-cambodia
-camcorder
-camcorders
-came
-camel
-camelhair
-camelot
-camels
-cameo
-camera
-cameraman
-cameramen
-cameras
-camerawork
-camisole
-camomile
-camouflage
-camouflaged
-camouflages
-camouflaging
-camp
-campaign
-campaigned
-campaigner
-campaigners
-campaigning
-campaigns
-campanile
-campanological
-campanologist
-campanology
-camped
-camper
-campers
-campfire
-campfires
-camphor
-camping
-camps
-campsite
-campsites
-campus
-campuses
-cams
-camshaft
-can
-canaan
-canada
-canadian
-canal
-canalisation
-canals
-canape
-canapes
-canard
-canaries
-canary
-canberra
-cancan
-cancel
-cancellation
-cancellations
-cancelled
-cancelling
-cancels
-cancer
-cancerous
-cancers
-candelabra
-candelas
-candid
-candidacy
-candidate
-candidates
-candidature
-candidatures
-candidly
-candies
-candle
-candlelight
-candlelit
-candlepower
-candles
-candlestick
-candlesticks
-candour
-candy
-cane
-caned
-canes
-canine
-canines
-caning
-canings
-canister
-canisters
-cannabis
-canned
-cannel
-cannery
-cannes
-cannibal
-cannibalise
-cannibalised
-cannibalising
-cannibalism
-cannibalistic
-cannibals
-cannily
-canning
-cannon
-cannonball
-cannonballs
-cannoned
-cannoning
-cannons
-cannot
-cannula
-canny
-canoe
-canoed
-canoeing
-canoeist
-canoeists
-canoes
-canon
-canonic
-canonical
-canonically
-canonisation
-canonise
-canonised
-canonry
-canons
-canopener
-canopied
-canopies
-canopy
-cans
-cant
-cantaloupe
-cantankerous
-cantata
-cantatas
-canted
-canteen
-canteens
-canter
-cantered
-cantering
-canters
-canticle
-canticles
-cantilever
-cantilevered
-canton
-cantons
-cantor
-canvas
-canvased
-canvases
-canvass
-canvassed
-canvasser
-canvassers
-canvasses
-canvassing
-canyon
-canyons
-cap
-capabilities
-capability
-capable
-capably
-capacious
-capacitance
-capacities
-capacitive
-capacitor
-capacitors
-capacity
-caparisoned
-cape
-caped
-caper
-capered
-capering
-capers
-capes
-capetown
-capillaries
-capillary
-capita
-capital
-capitalisation
-capitalise
-capitalised
-capitalises
-capitalising
-capitalism
-capitalist
-capitalistic
-capitalists
-capitally
-capitals
-capitate
-capitation
-capitol
-capitulate
-capitulated
-capitulates
-capitulating
-capitulation
-capped
-capping
-cappuccino
-capri
-caprice
-caprices
-capricious
-capriciously
-capriciousness
-capriole
-capris
-caps
-capsize
-capsized
-capsizes
-capsizing
-capstan
-capstans
-capsule
-capsules
-captain
-captaincy
-captained
-captaining
-captains
-caption
-captioned
-captions
-captious
-captivate
-captivated
-captivating
-captivation
-captive
-captives
-captivity
-captor
-captors
-capture
-captured
-captures
-capturing
-capybara
-car
-carabinieri
-caracal
-caracals
-carafe
-caramel
-caramelised
-caramels
-carapace
-carat
-carats
-caravan
-caravanning
-caravans
-caravel
-caraway
-carbide
-carbine
-carbines
-carbohydrate
-carbohydrates
-carbolic
-carbon
-carbonaceous
-carbonate
-carbonated
-carbonates
-carbonic
-carboniferous
-carbonise
-carbons
-carbonyl
-carborundum
-carboxyl
-carbuncle
-carbuncles
-carburettor
-carburettors
-carcase
-carcases
-carcass
-carcasses
-carcinogen
-carcinogenesis
-carcinogenic
-carcinogens
-carcinoma
-carcinomas
-card
-cardboard
-carded
-cardholders
-cardiac
-cardiff
-cardigan
-cardigans
-cardinal
-cardinality
-cardinals
-carding
-cardioid
-cardiologist
-cardiology
-cardiopulmonary
-cardiovascular
-cards
-care
-cared
-career
-careered
-careering
-careerism
-careerist
-careerists
-careers
-carefree
-careful
-carefully
-carefulness
-careless
-carelessly
-carelessness
-carer
-carers
-cares
-caress
-caressed
-caresses
-caressing
-caressingly
-caretaker
-caretakers
-carets
-careworn
-cargo
-caribou
-caricature
-caricatured
-caricatures
-caricaturisation
-caries
-caring
-carmine
-carnage
-carnages
-carnal
-carnality
-carnally
-carnation
-carnations
-carnival
-carnivals
-carnivore
-carnivores
-carnivorous
-carnivorousness
-carol
-carols
-carotene
-carotid
-carotin
-carouse
-carousel
-carousing
-carp
-carpal
-carpenter
-carpenters
-carpentry
-carpet
-carpeted
-carpeting
-carpets
-carping
-carport
-carports
-carps
-carrel
-carriage
-carriages
-carriageway
-carriageways
-carried
-carrier
-carriers
-carries
-carrion
-carrot
-carrots
-carroty
-carry
-carrycot
-carrying
-cars
-carsick
-cart
-carted
-cartel
-cartels
-carter
-carthorses
-cartilage
-carting
-cartload
-cartloads
-cartographer
-cartographers
-cartographic
-cartography
-carton
-cartons
-cartoon
-cartoonist
-cartoonists
-cartoons
-cartouche
-cartridge
-cartridges
-carts
-cartwheel
-cartwheels
-carve
-carved
-carver
-carvers
-carvery
-carves
-carving
-carvings
-caryatids
-casanova
-cascade
-cascaded
-cascades
-cascading
-cascara
-case
-casebook
-cased
-caseload
-caseloads
-casement
-casements
-cases
-casework
-cash
-cashbox
-cashed
-cashes
-cashew
-cashier
-cashiers
-cashing
-cashless
-cashmere
-casing
-casings
-casino
-cask
-casket
-caskets
-casks
-cassava
-casserole
-casseroles
-cassette
-cassettes
-cassock
-cassocks
-cassowary
-cast
-castanet
-castanets
-castaway
-castaways
-caste
-castellated
-caster
-casters
-castes
-castigate
-castigated
-castigates
-castigating
-casting
-castings
-castiron
-castle
-castled
-castles
-castling
-castoff
-castoffs
-castor
-castors
-castrate
-castrated
-castrating
-castration
-castrato
-casts
-casual
-casually
-casualness
-casuals
-casualties
-casualty
-casuistry
-cat
-cataclysm
-cataclysmic
-catacomb
-catacombs
-catalepsy
-catalogue
-catalogued
-cataloguer
-cataloguers
-catalogues
-cataloguing
-catalyse
-catalysed
-catalyses
-catalysing
-catalysis
-catalyst
-catalysts
-catalytic
-catamaran
-catamarans
-catanddog
-catapult
-catapulted
-catapulting
-catapults
-cataract
-cataracts
-catarrh
-catastrophe
-catastrophes
-catastrophic
-catastrophically
-catatonic
-catcalls
-catch
-catched
-catcher
-catchers
-catches
-catchier
-catchiest
-catching
-catchment
-catchphrase
-catchphrases
-catchword
-catchwords
-catchy
-catechism
-catechisms
-catechist
-catechists
-categorical
-categorically
-categories
-categorisation
-categorisations
-categorise
-categorised
-categorises
-categorising
-category
-cater
-catered
-caterer
-caterers
-catering
-caterpillar
-caterpillars
-caters
-caterwaul
-caterwauls
-catfish
-catgut
-catguts
-catharsis
-cathartic
-cathedral
-cathedrals
-catheter
-catheterisation
-catheters
-cathode
-cathodes
-catholic
-cation
-cationic
-cations
-catlike
-catnap
-catnip
-cats
-catsuit
-cattery
-cattle
-catwalk
-catwalks
-caucus
-caucuses
-caudal
-caught
-cauldron
-cauldrons
-cauliflower
-cauliflowers
-caulking
-causal
-causality
-causally
-causation
-causative
-cause
-caused
-causes
-causeway
-causeways
-causing
-caustic
-caustically
-caustics
-cauterise
-cauterising
-caution
-cautionary
-cautioned
-cautioning
-cautions
-cautious
-cautiously
-cautiousness
-cavalcade
-cavalier
-cavalierly
-cavaliers
-cavalry
-cavalryman
-cavalrymen
-cave
-caveat
-caveats
-caved
-cavein
-caveman
-cavemen
-caver
-cavern
-cavernous
-caverns
-cavers
-caves
-caviar
-caviare
-caviars
-caving
-cavitation
-cavities
-cavity
-cavort
-cavorted
-cavorting
-cavorts
-caw
-cawing
-cayman
-caymans
-cease
-ceased
-ceasefire
-ceasefires
-ceaseless
-ceaselessly
-ceases
-ceasing
-cedar
-cedars
-cedarwood
-cede
-ceded
-cedilla
-ceding
-ceilidh
-ceilidhs
-ceiling
-ceilings
-celandine
-celeb
-celebrant
-celebrants
-celebrate
-celebrated
-celebrates
-celebrating
-celebration
-celebrations
-celebratory
-celebrities
-celebrity
-celeriac
-celery
-celestial
-celestially
-celibacy
-celibate
-cell
-cellar
-cellars
-cellist
-cellists
-cello
-cellophane
-cells
-cellular
-cellulite
-celluloid
-cellulose
-celsius
-celtic
-cement
-cemented
-cementing
-cements
-cemeteries
-cemetery
-cenotaph
-censer
-censor
-censored
-censorial
-censoring
-censorious
-censoriousness
-censors
-censorship
-censure
-censured
-censures
-censuring
-census
-censuses
-cent
-centaur
-centaurs
-centenarians
-centenary
-centennial
-centigrade
-centime
-centimes
-centimetre
-centimetres
-centipede
-centipedes
-central
-centralisation
-centralise
-centralised
-centraliser
-centralisers
-centralises
-centralising
-centralism
-centralist
-centrality
-centrally
-centre
-centred
-centrefold
-centrefolds
-centreing
-centrepiece
-centrepieces
-centres
-centric
-centrifugal
-centrifugally
-centrifugation
-centrifuge
-centrifuged
-centrifuges
-centrifuging
-centring
-centripetal
-centrist
-centrists
-centroid
-centroids
-cents
-centuries
-centurion
-centurions
-century
-cephalopods
-ceramic
-ceramics
-ceramist
-cereal
-cereals
-cerebellum
-cerebral
-cerebrum
-ceremonial
-ceremonially
-ceremonials
-ceremonies
-ceremonious
-ceremoniously
-ceremony
-ceres
-cerise
-certain
-certainly
-certainties
-certainty
-certifiable
-certifiably
-certificate
-certificated
-certificates
-certification
-certified
-certifies
-certify
-certifying
-certitude
-certitudes
-cervical
-cervix
-cess
-cessation
-cessations
-cession
-cesspit
-cesspool
-cesspools
-cetacean
-ceylon
-chacha
-chad
-chafe
-chafed
-chafes
-chaff
-chaffed
-chaffinch
-chaffinches
-chaffing
-chafing
-chagrin
-chagrined
-chain
-chained
-chaining
-chains
-chainsaw
-chainsaws
-chainsmoke
-chainsmoked
-chainsmoking
-chair
-chaired
-chairing
-chairlift
-chairman
-chairmanship
-chairmanships
-chairmen
-chairperson
-chairpersons
-chairs
-chairwoman
-chairwomen
-chaldronxxxxxxxxxxxxxx
-chalet
-chalets
-chalice
-chalices
-chalk
-chalked
-chalking
-chalks
-chalky
-challenge
-challenged
-challenger
-challengers
-challenges
-challenging
-challengingly
-chamber
-chambered
-chamberlain
-chamberlains
-chambermaid
-chambermaids
-chamberpot
-chamberpots
-chambers
-chameleon
-chameleons
-chamfer
-chamfered
-chamois
-chamomile
-champ
-champagne
-champagnes
-champing
-champion
-championed
-championing
-champions
-championship
-championships
-champs
-chance
-chanced
-chancel
-chancellery
-chancellor
-chancellors
-chancellorship
-chancer
-chancery
-chances
-chancier
-chanciest
-chancing
-chancy
-chandelier
-chandeliers
-chandler
-change
-changeability
-changeable
-changed
-changeless
-changeling
-changeover
-changeovers
-changer
-changers
-changes
-changing
-channel
-channelled
-channelling
-channels
-chant
-chanted
-chanter
-chanteuse
-chanting
-chantings
-chantries
-chantry
-chants
-chaos
-chaotic
-chaotically
-chap
-chapel
-chapels
-chaperon
-chaperone
-chaperoned
-chaperones
-chaplain
-chaplaincy
-chaplains
-chaplainxxxxxxxx
-chapman
-chapped
-chapping
-chaps
-chapter
-chapters
-char
-charabanc
-character
-characterful
-characterisation
-characterisations
-characterise
-characterised
-characterises
-characterising
-characteristic
-characteristically
-characteristics
-characterless
-characters
-charade
-charades
-charcoal
-charcuterie
-chared
-charge
-chargeable
-charged
-charger
-chargers
-charges
-charging
-chariot
-charioteer
-charioteers
-chariots
-charisma
-charismas
-charismatic
-charismatically
-charismatics
-charitable
-charitably
-charities
-charity
-charlady
-charlatan
-charlatans
-charles
-charlie
-charm
-charmed
-charmer
-charmers
-charming
-charmingly
-charmless
-charms
-charon
-charred
-charring
-chars
-chart
-charted
-charter
-chartered
-chartering
-charters
-charting
-chartists
-charts
-charwoman
-chary
-chase
-chased
-chaser
-chasers
-chases
-chasing
-chasm
-chasms
-chassis
-chaste
-chastely
-chastened
-chastening
-chastise
-chastised
-chastisement
-chastises
-chastising
-chastity
-chat
-chateau
-chats
-chatted
-chattel
-chattels
-chatter
-chatterbox
-chattered
-chatterer
-chattering
-chatters
-chattily
-chatting
-chatty
-chauffeur
-chauffeured
-chauffeurs
-chauvinism
-chauvinist
-chauvinistic
-chauvinists
-cheap
-cheapen
-cheapened
-cheapening
-cheapens
-cheaper
-cheapest
-cheapish
-cheaply
-cheapness
-cheapskates
-cheat
-cheated
-cheater
-cheaters
-cheating
-cheats
-check
-checked
-checker
-checkered
-checkering
-checkers
-checkin
-checking
-checklist
-checklists
-checkmate
-checkout
-checkouts
-checkpoint
-checkpoints
-checks
-checkup
-checkups
-cheddar
-cheek
-cheekbone
-cheekbones
-cheeked
-cheekier
-cheekiest
-cheekily
-cheeking
-cheeks
-cheeky
-cheep
-cheeping
-cheer
-cheered
-cheerful
-cheerfully
-cheerfulness
-cheerier
-cheeriest
-cheerily
-cheering
-cheerio
-cheerleader
-cheerleaders
-cheerless
-cheerlessness
-cheers
-cheery
-cheese
-cheeseboard
-cheeseburger
-cheeseburgers
-cheesecake
-cheesecloth
-cheesemaking
-cheeses
-cheesy
-cheetah
-cheetahs
-chef
-chefs
-chekov
-chemic
-chemical
-chemically
-chemicals
-chemiluminescence
-chemiluminescent
-chemise
-chemist
-chemistry
-chemists
-chemosynthesis
-chemotherapeutic
-chemotherapy
-cheque
-chequebook
-chequebooks
-chequer
-chequerboard
-chequered
-chequering
-chequers
-cheques
-cherish
-cherished
-cherishes
-cherishing
-cheroot
-cheroots
-cherries
-cherry
-cherryred
-cherub
-cherubic
-cherubim
-cherubs
-chess
-chessboard
-chessboards
-chessmen
-chest
-chested
-chester
-chesterfield
-chestnut
-chestnuts
-chests
-chesty
-chevalier
-chevron
-chevrons
-chew
-chewable
-chewed
-chewer
-chewier
-chewiest
-chewing
-chews
-chewy
-chic
-chicago
-chicane
-chicanery
-chick
-chicken
-chickens
-chicks
-chicory
-chide
-chided
-chides
-chiding
-chief
-chiefly
-chiefs
-chieftain
-chieftains
-chiffon
-chihuahua
-chihuahuas
-chilblain
-chilblains
-child
-childbearing
-childbirth
-childcare
-childhood
-childhoods
-childish
-childishly
-childishness
-childless
-childlessness
-childlike
-childly
-childminders
-childproof
-children
-chilean
-chili
-chill
-chilled
-chiller
-chillers
-chilli
-chillier
-chillies
-chilliest
-chilliness
-chilling
-chillingly
-chills
-chilly
-chimaera
-chimaerical
-chime
-chimed
-chimera
-chimeras
-chimerical
-chimes
-chiming
-chimney
-chimneys
-chimp
-chimpanzee
-chimpanzees
-chimps
-chin
-china
-chinese
-chink
-chinked
-chinking
-chinks
-chinless
-chinoiserie
-chins
-chintz
-chintzy
-chip
-chipboard
-chipmunk
-chipped
-chipping
-chippings
-chips
-chiral
-chiropodist
-chiropody
-chiropractic
-chiropractor
-chiropractors
-chirp
-chirped
-chirping
-chirps
-chirpy
-chirruped
-chisel
-chiseled
-chiselled
-chiselling
-chisels
-chit
-chits
-chivalric
-chivalrous
-chivalrously
-chivalry
-chives
-chivvied
-chivvy
-chivvying
-chlamydia
-chlorate
-chloride
-chlorinated
-chlorination
-chlorine
-chlorofluorocarbon
-chlorofluorocarbons
-chloroform
-chloroformed
-chloroforming
-chlorophyll
-chloroquine
-chock
-chockablock
-chockfull
-chocks
-chocolate
-chocolates
-choice
-choices
-choicest
-choir
-choirboy
-choirboys
-choirmaster
-choirs
-choke
-choked
-choker
-chokes
-choking
-cholera
-cholesterol
-choline
-chomp
-chomped
-chomping
-chomps
-choose
-chooser
-choosers
-chooses
-choosey
-choosier
-choosing
-choosy
-chop
-chopin
-chopped
-chopper
-choppers
-choppier
-choppiest
-chopping
-choppy
-chops
-chopsticks
-choral
-chorale
-chorales
-chorals
-chord
-chordal
-chords
-chore
-chorea
-choreographed
-choreographer
-choreographers
-choreographic
-choreographing
-choreography
-chores
-chorister
-choristers
-chortle
-chortled
-chortles
-chortling
-chorus
-chorused
-choruses
-chose
-chosen
-choughs
-chow
-christ
-christen
-christened
-christening
-christenings
-christian
-chroma
-chromatic
-chromaticism
-chromatograph
-chromatographic
-chromatography
-chrome
-chromed
-chromite
-chromium
-chromosomal
-chromosome
-chromosomes
-chronic
-chronically
-chronicle
-chronicled
-chronicler
-chroniclers
-chronicles
-chronicling
-chronograph
-chronological
-chronologically
-chronologies
-chronology
-chronometer
-chronometric
-chrysalis
-chrysanthemum
-chrysanthemums
-chubbiness
-chubby
-chuck
-chucked
-chucking
-chuckle
-chuckled
-chuckles
-chuckling
-chucks
-chuff
-chuffed
-chug
-chugged
-chugging
-chugs
-chum
-chump
-chums
-chunk
-chunkier
-chunks
-chunky
-chunnel
-chuntering
-church
-churches
-churchgoer
-churchgoers
-churchman
-churchmen
-churchwarden
-churchwardens
-churchyard
-churchyards
-churlish
-churlishly
-churlishness
-churn
-churned
-churning
-churns
-chute
-chutes
-chutney
-chutzpah
-cicada
-cicadas
-cicero
-cider
-ciders
-cigar
-cigaret
-cigarette
-cigarettes
-cigars
-cilia
-cilium
-cinch
-cinder
-cinders
-cine
-cinema
-cinemas
-cinematic
-cinematographer
-cinematography
-cinnamon
-cipher
-ciphered
-ciphers
-circa
-circadian
-circle
-circled
-circles
-circlet
-circlets
-circling
-circuit
-circuitous
-circuitry
-circuits
-circulant
-circular
-circularise
-circularised
-circularity
-circularly
-circulars
-circulate
-circulated
-circulates
-circulating
-circulation
-circulations
-circulatory
-circumcise
-circumcised
-circumcision
-circumference
-circumferences
-circumferential
-circumflex
-circumflexes
-circumlocution
-circumlocutions
-circumlocutory
-circumnavigate
-circumnavigated
-circumnavigates
-circumnavigation
-circumnavigational
-circumscribe
-circumscribed
-circumscribing
-circumspect
-circumspection
-circumspectly
-circumstance
-circumstances
-circumstantial
-circumstantially
-circumvent
-circumventable
-circumvented
-circumventing
-circumvention
-circumventions
-circumvents
-circus
-circuses
-cirrhosis
-cirrhotic
-cirrus
-cist
-cistern
-cisterns
-citadel
-citadels
-citation
-citations
-cite
-cited
-cites
-cithers
-cities
-citing
-citizen
-citizenry
-citizens
-citizenship
-citrate
-citrates
-citric
-citron
-citrons
-citrus
-citruses
-cittern
-city
-cityscape
-civic
-civics
-civies
-civil
-civilian
-civilians
-civilisation
-civilisations
-civilise
-civilised
-civilising
-civilities
-civility
-civilly
-clacking
-clad
-cladding
-claim
-claimable
-claimant
-claimants
-claimed
-claiming
-claims
-clairvoyance
-clairvoyant
-clairvoyants
-clam
-clamber
-clambered
-clambering
-clambers
-clammed
-clamming
-clammy
-clamorous
-clamorously
-clamour
-clamoured
-clamouring
-clamours
-clamp
-clampdown
-clamped
-clamping
-clamps
-clams
-clan
-clandestine
-clandestinely
-clang
-clanged
-clangers
-clanging
-clank
-clanked
-clanking
-clannish
-clans
-clansmen
-clap
-clapped
-clapper
-clappers
-clapping
-claps
-claptrap
-claret
-clarets
-clarification
-clarifications
-clarified
-clarifies
-clarify
-clarifying
-clarinet
-clarinets
-clarinettist
-clarion
-clarity
-clash
-clashed
-clashes
-clashing
-clasp
-clasped
-clasper
-clasping
-clasps
-class
-classed
-classes
-classic
-classical
-classically
-classicism
-classicist
-classicists
-classics
-classier
-classiest
-classifiable
-classification
-classifications
-classificatory
-classified
-classifier
-classifiers
-classifies
-classify
-classifying
-classing
-classless
-classlessness
-classmate
-classmates
-classroom
-classrooms
-classy
-clatter
-clattered
-clattering
-clatters
-clausal
-clause
-clauses
-claustrophobia
-claustrophobic
-clavichord
-clavicle
-claw
-clawed
-clawing
-claws
-clay
-clayey
-claymore
-claymores
-clays
-clean
-cleancut
-cleaned
-cleaner
-cleaners
-cleanest
-cleaning
-cleanliness
-cleanliving
-cleanly
-cleanness
-cleans
-cleanse
-cleansed
-cleanser
-cleanses
-cleanshaven
-cleansing
-cleanup
-clear
-clearance
-clearances
-clearcut
-cleared
-clearer
-clearest
-clearheaded
-clearing
-clearings
-clearly
-clearness
-clears
-clearsighted
-clearup
-clearups
-clearway
-cleat
-cleavage
-cleavages
-cleave
-cleaved
-cleaver
-cleavers
-cleaves
-cleaving
-clef
-cleft
-clefts
-cleg
-clematis
-clemency
-clement
-clench
-clenched
-clenches
-clenching
-clergies
-clergy
-clergyman
-clergymen
-cleric
-clerical
-clerically
-clerics
-clerk
-clerks
-clever
-cleverer
-cleverest
-cleverly
-cleverness
-cliche
-cliches
-click
-clicked
-clicking
-clicks
-client
-clientele
-clients
-cliff
-cliffhanger
-cliffs
-climactic
-climate
-climates
-climatic
-climatically
-climatological
-climatologists
-climatology
-climax
-climaxed
-climaxes
-climaxing
-climb
-climbable
-climbdown
-climbed
-climber
-climbers
-climbing
-climbs
-climes
-clinch
-clinched
-clinches
-clinching
-cling
-clingers
-clinging
-clings
-clinic
-clinical
-clinically
-clinician
-clinicians
-clinics
-clink
-clinked
-clinker
-clinking
-clip
-clipboard
-clipboards
-clipped
-clipper
-clippers
-clipping
-clippings
-clips
-clique
-cliques
-cliquey
-clitoral
-clitoris
-cloaca
-cloak
-cloakanddagger
-cloaked
-cloaking
-cloakroom
-cloakrooms
-cloaks
-clobber
-clock
-clocked
-clocking
-clockmaker
-clocks
-clockwise
-clockwork
-clod
-clods
-clog
-clogged
-clogging
-clogs
-cloister
-cloistered
-cloisters
-clonal
-clone
-cloned
-clones
-cloning
-closable
-close
-closed
-closedcircuit
-closeknit
-closely
-closeness
-closer
-closers
-closes
-closest
-closet
-closeted
-closets
-closeup
-closeups
-closing
-closings
-closure
-closures
-clot
-cloth
-clothe
-clothed
-clothes
-clothespeg
-clothespegs
-clothier
-clothiers
-clothing
-cloths
-clots
-clotted
-clotting
-cloud
-cloudburst
-cloudbursts
-clouded
-cloudier
-cloudiest
-cloudiness
-clouding
-cloudless
-clouds
-cloudscape
-cloudscapes
-cloudy
-clout
-clouted
-clouts
-clove
-cloven
-clover
-cloves
-clown
-clowned
-clowning
-clownish
-clowns
-cloying
-cloyingly
-club
-clubbed
-clubbing
-clubfooted
-clubhouse
-clubman
-clubroom
-clubs
-cluck
-clucked
-clucking
-clucks
-clue
-clued
-cluedup
-clueless
-clues
-clumber
-clump
-clumped
-clumping
-clumps
-clumpy
-clumsier
-clumsiest
-clumsily
-clumsiness
-clumsy
-clung
-cluster
-clustered
-clustering
-clusters
-clutch
-clutched
-clutches
-clutching
-clutter
-cluttered
-cluttering
-clutters
-coach
-coached
-coaches
-coaching
-coachload
-coachloads
-coachman
-coachmen
-coachwork
-coacted
-coaction
-coacts
-coagulate
-coagulated
-coagulation
-coal
-coalblack
-coalesce
-coalesced
-coalescence
-coalesces
-coalescing
-coalface
-coalfield
-coalfields
-coalition
-coalitions
-coalminers
-coals
-coapts
-coarse
-coarsely
-coarseness
-coarsens
-coarser
-coarsest
-coast
-coastal
-coasted
-coaster
-coasters
-coastguard
-coastguards
-coasting
-coastlands
-coastline
-coastlines
-coasts
-coat
-coated
-coathanger
-coating
-coatings
-coats
-coauthor
-coauthored
-coauthoring
-coauthors
-coax
-coaxed
-coaxes
-coaxial
-coaxing
-coaxingly
-cob
-cobalt
-cobble
-cobbled
-cobbler
-cobblers
-cobbles
-cobblestones
-cobbling
-coble
-cobra
-cobras
-cobs
-cobweb
-cobwebbed
-cobwebby
-cobwebs
-coca
-cocain
-cocaine
-cochlea
-cochlear
-cock
-cockatoo
-cockatoos
-cockatrice
-cockatrices
-cockcrow
-cocked
-cockerel
-cockerels
-cockeyed
-cockier
-cockiest
-cockiness
-cocking
-cockle
-cockles
-cockney
-cockneys
-cockpit
-cockpits
-cockroach
-cockroaches
-cocks
-cockshies
-cocksure
-cocktail
-cocktails
-cocky
-cocoa
-coconut
-coconuts
-cocoon
-cocooned
-cocoons
-cod
-coda
-coddle
-coddling
-code
-codebreaker
-coded
-codeine
-codename
-codenamed
-coder
-coders
-codes
-codeword
-codewords
-codex
-codfish
-codices
-codicil
-codicils
-codification
-codifications
-codified
-codifies
-codify
-codifying
-coding
-codling
-codpiece
-cods
-coefficient
-coefficients
-coelenterates
-coerce
-coerced
-coercer
-coerces
-coercible
-coercing
-coercion
-coercions
-coercive
-coercively
-coeval
-coexist
-coexisted
-coexistence
-coexistent
-coexisting
-coexists
-coextensive
-coffee
-coffees
-coffer
-cofferdam
-cofferdams
-coffers
-coffin
-coffins
-cog
-cogency
-cogent
-cogently
-cogitate
-cogitated
-cogitating
-cogitation
-cogitations
-cogitative
-cognac
-cognacs
-cognate
-cognates
-cognisance
-cognisant
-cognition
-cognitive
-cognitively
-cognizance
-cognizant
-cognoscenti
-cogs
-cohabit
-cohabitation
-cohabitees
-cohabiting
-cohere
-cohered
-coherence
-coherency
-coherent
-coherently
-coheres
-cohesion
-cohesive
-cohesively
-cohesiveness
-cohort
-cohorts
-coiffure
-coil
-coiled
-coiling
-coils
-coin
-coinage
-coinages
-coincide
-coincided
-coincidence
-coincidences
-coincident
-coincidental
-coincidentally
-coincides
-coinciding
-coined
-coiner
-coiners
-coining
-coins
-coital
-coitus
-coke
-col
-cola
-colander
-colas
-cold
-coldblooded
-coldbloodedly
-colder
-coldest
-coldhearted
-coldish
-coldly
-coldness
-colds
-coldwar
-cole
-coleslaw
-colitis
-collaborate
-collaborated
-collaborates
-collaborating
-collaboration
-collaborationist
-collaborations
-collaborative
-collaboratively
-collaborator
-collaborators
-collage
-collagen
-collages
-collapse
-collapsed
-collapses
-collapsible
-collapsing
-collar
-collarbone
-collared
-collaring
-collarless
-collars
-collate
-collated
-collateral
-collaterally
-collates
-collating
-collation
-colleague
-colleagues
-collect
-collectability
-collectable
-collectables
-collected
-collecting
-collection
-collections
-collective
-collectively
-collectives
-collectivisation
-collectivism
-collectivist
-collectivity
-collector
-collectors
-collects
-college
-colleges
-collegial
-collegiate
-collide
-collided
-collides
-colliding
-collie
-collier
-collieries
-colliers
-colliery
-collies
-collimation
-collimator
-collinear
-collins
-collision
-collisional
-collisions
-collocated
-collocation
-collocational
-collocations
-colloid
-colloidal
-colloids
-colloquia
-colloquial
-colloquialism
-colloquialisms
-colloquially
-colloquium
-collude
-colluded
-colluding
-collusion
-colobus
-cologne
-colon
-colonel
-colonels
-colonial
-colonialism
-colonialist
-colonialists
-colonials
-colonic
-colonies
-colonisation
-colonisations
-colonise
-colonised
-colonisers
-colonising
-colonist
-colonists
-colonnade
-colonnaded
-colonnades
-colons
-colony
-colossal
-colossally
-colossus
-colostomies
-colostomy
-colour
-colourant
-colourants
-colouration
-colourblind
-coloure
-colourful
-colourfully
-colouring
-colourings
-colourisation
-colourise
-colourised
-colourising
-colourless
-colours
-coloury
-cols
-colt
-colts
-columbus
-column
-columnar
-columned
-columnist
-columnists
-columns
-coma
-comas
-comatose
-comb
-combat
-combatant
-combatants
-combated
-combating
-combative
-combativeness
-combats
-combed
-comber
-combination
-combinations
-combinatorial
-combine
-combined
-combines
-combing
-combining
-combs
-combusted
-combustible
-combustibles
-combustion
-combusts
-come
-comeback
-comedian
-comedians
-comedies
-comedown
-comedy
-comeliness
-comely
-comer
-comers
-comes
-comestible
-comestibles
-comet
-cometary
-comets
-comfort
-comfortable
-comfortably
-comforted
-comforter
-comforters
-comforting
-comfortingly
-comforts
-comfy
-comic
-comical
-comically
-comics
-coming
-comings
-comity
-comma
-command
-commandant
-commanded
-commandeer
-commandeered
-commandeering
-commander
-commanders
-commanding
-commandingly
-commandment
-commandments
-commando
-commands
-commas
-commemorate
-commemorated
-commemorates
-commemorating
-commemoration
-commemorations
-commemorative
-commence
-commenced
-commencement
-commences
-commencing
-commend
-commendable
-commendably
-commendation
-commendations
-commended
-commending
-commends
-commensurate
-commensurately
-comment
-commentaries
-commentary
-commentate
-commentating
-commentator
-commentators
-commented
-commenter
-commenting
-comments
-commerce
-commercial
-commercialisation
-commercialise
-commercialised
-commercialism
-commercially
-commercials
-commiserate
-commiserated
-commiserating
-commiseration
-commiserations
-commissar
-commissariat
-commissars
-commission
-commissionaire
-commissioned
-commissioner
-commissioners
-commissioning
-commissions
-commit
-commitment
-commitments
-commits
-committal
-committed
-committee
-committees
-committing
-commode
-commodes
-commodious
-commodities
-commodity
-commodore
-commodores
-common
-commonalities
-commonality
-commoner
-commoners
-commonest
-commonlaw
-commonly
-commonness
-commonplace
-commonplaces
-commons
-commonsense
-commonsensical
-commonwealth
-commotion
-commotions
-communal
-communality
-communally
-commune
-communed
-communes
-communicable
-communicant
-communicants
-communicate
-communicated
-communicates
-communicating
-communication
-communications
-communicative
-communicativeness
-communicator
-communicators
-communing
-communion
-communions
-communique
-communiques
-communism
-communist
-communists
-communitarian
-communities
-community
-commutation
-commutative
-commutativity
-commutator
-commute
-commuted
-commuter
-commuters
-commutes
-commuting
-compact
-compacted
-compacting
-compaction
-compactions
-compactly
-compactness
-compacts
-companies
-companion
-companionable
-companionably
-companions
-companionship
-company
-comparability
-comparable
-comparably
-comparative
-comparatively
-comparatives
-comparator
-comparators
-compare
-compared
-compares
-comparing
-comparison
-comparisons
-compartment
-compartmentalisation
-compartmentalised
-compartmentalising
-compartments
-compass
-compassed
-compasses
-compassion
-compassionate
-compassionately
-compatibilities
-compatibility
-compatible
-compatibles
-compatibly
-compatriot
-compatriots
-compel
-compelled
-compelling
-compellingly
-compels
-compendia
-compendium
-compendiums
-compensate
-compensated
-compensates
-compensating
-compensation
-compensations
-compensator
-compensatory
-compere
-compete
-competed
-competence
-competences
-competencies
-competency
-competent
-competently
-competes
-competing
-competition
-competitions
-competitive
-competitively
-competitiveness
-competitor
-competitors
-compilable
-compilation
-compilations
-compile
-compiled
-compiler
-compilers
-compiles
-compiling
-complacency
-complacent
-complacently
-complain
-complainant
-complainants
-complained
-complainer
-complaining
-complainingly
-complains
-complaint
-complaints
-complaisant
-complement
-complementarity
-complementary
-complemented
-complementing
-complements
-completable
-complete
-completed
-completely
-completeness
-completes
-completing
-completion
-completions
-complex
-complexes
-complexion
-complexioned
-complexions
-complexities
-complexity
-complexly
-compliance
-compliant
-complicate
-complicated
-complicates
-complicating
-complication
-complications
-complicit
-complicity
-complied
-complies
-compliment
-complimentary
-complimented
-complimenting
-compliments
-complot
-comply
-complying
-component
-components
-comport
-compose
-composed
-composedly
-composer
-composers
-composes
-composing
-composite
-composites
-composition
-compositional
-compositions
-compositor
-compositors
-compost
-composts
-composure
-compound
-compounded
-compounding
-compounds
-comprehend
-comprehended
-comprehending
-comprehends
-comprehensibility
-comprehensible
-comprehensibly
-comprehension
-comprehensive
-comprehensively
-comprehensiveness
-comprehensives
-compress
-compressed
-compresses
-compressibility
-compressible
-compressing
-compression
-compressional
-compressions
-compressive
-compressor
-compressors
-comprise
-comprised
-comprises
-comprising
-compromise
-compromised
-compromises
-compromising
-comptroller
-compulsion
-compulsions
-compulsive
-compulsively
-compulsorily
-compulsory
-compunction
-computability
-computable
-computably
-computation
-computational
-computationally
-computations
-compute
-computed
-computer
-computerisation
-computerise
-computerised
-computerising
-computerliterate
-computers
-computes
-computing
-comrade
-comradeinarms
-comradely
-comrades
-comradeship
-con
-conakry
-concatenate
-concatenated
-concatenates
-concatenating
-concatenation
-concatenations
-concave
-concavity
-conceal
-concealed
-concealing
-concealment
-conceals
-concede
-conceded
-concedes
-conceding
-conceit
-conceited
-conceits
-conceivability
-conceivable
-conceivably
-conceive
-conceived
-conceives
-conceiving
-concentrate
-concentrated
-concentrates
-concentrating
-concentration
-concentrations
-concentrator
-concentrators
-concentric
-concept
-conception
-conceptions
-concepts
-conceptual
-conceptualisation
-conceptualisations
-conceptualise
-conceptualised
-conceptualising
-conceptually
-concern
-concerned
-concernedly
-concerning
-concerns
-concert
-concerted
-concertgoers
-concerti
-concertina
-concerto
-concerts
-concession
-concessional
-concessionary
-concessions
-concierge
-conciliar
-conciliate
-conciliating
-conciliation
-conciliator
-conciliatory
-concise
-concisely
-conciseness
-conclave
-conclaves
-conclude
-concluded
-concludes
-concluding
-conclusion
-conclusions
-conclusive
-conclusively
-concoct
-concocted
-concocting
-concoction
-concoctions
-concocts
-concomitant
-concomitantly
-concord
-concordance
-concordances
-concordant
-concordat
-concords
-concourse
-concourses
-concrete
-concreted
-concretely
-concreteness
-concretes
-concreting
-concretions
-concubine
-concubines
-concur
-concurred
-concurrence
-concurrency
-concurrent
-concurrently
-concurring
-concurs
-concuss
-concussed
-concussion
-condemn
-condemnable
-condemnation
-condemnations
-condemnatory
-condemned
-condemning
-condemns
-condensate
-condensation
-condensations
-condense
-condensed
-condenser
-condensers
-condenses
-condensing
-condescend
-condescended
-condescending
-condescendingly
-condescends
-condescension
-condiment
-condiments
-condition
-conditional
-conditionality
-conditionally
-conditionals
-conditioned
-conditioner
-conditioners
-conditioning
-conditions
-condole
-condoled
-condolence
-condolences
-condoles
-condonable
-condone
-condoned
-condones
-condoning
-condor
-condors
-conducive
-conduct
-conductance
-conducted
-conducting
-conduction
-conductive
-conductivities
-conductivity
-conductor
-conductors
-conductress
-conducts
-conduit
-conduits
-cone
-coned
-cones
-confabulate
-confection
-confectioner
-confectioners
-confectionery
-confectionist
-confections
-confederacy
-confederate
-confederates
-confederation
-confederations
-confer
-conference
-conferences
-conferencing
-conferment
-conferred
-conferring
-confers
-confess
-confessed
-confesses
-confessing
-confession
-confessional
-confessionals
-confessions
-confessor
-confessors
-confetti
-confidant
-confidante
-confidantes
-confidants
-confide
-confided
-confidence
-confidences
-confident
-confidential
-confidentiality
-confidentially
-confidently
-confides
-confiding
-confidingly
-configurable
-configuration
-configurations
-configure
-configured
-configures
-configuring
-confine
-confined
-confinement
-confinements
-confines
-confining
-confirm
-confirmation
-confirmations
-confirmatory
-confirmed
-confirming
-confirms
-confiscate
-confiscated
-confiscates
-confiscating
-confiscation
-confiscations
-confiscatory
-conflagration
-conflagrations
-conflated
-conflates
-conflating
-conflation
-conflict
-conflicted
-conflicting
-conflictingly
-conflicts
-conflictual
-confluence
-confluent
-confocal
-conform
-conformable
-conformal
-conformance
-conformation
-conformational
-conformed
-conforming
-conformism
-conformist
-conformists
-conformity
-conforms
-confound
-confounded
-confoundedly
-confounding
-confounds
-confront
-confrontation
-confrontational
-confrontations
-confronted
-confronting
-confronts
-confusable
-confuse
-confused
-confusedly
-confuser
-confuses
-confusing
-confusingly
-confusion
-confusions
-conga
-congeal
-congealed
-congealing
-congeals
-congenial
-congeniality
-congenital
-congenitally
-conger
-congest
-congested
-congesting
-congestion
-congestive
-conglomerate
-conglomerated
-conglomerates
-conglomeration
-congo
-congratulate
-congratulated
-congratulates
-congratulating
-congratulation
-congratulations
-congratulatory
-congregate
-congregated
-congregating
-congregation
-congregational
-congregations
-congress
-congresses
-congressional
-congressman
-congressmen
-congruence
-congruences
-congruency
-congruent
-congruential
-congruity
-conic
-conical
-conics
-conifer
-coniferous
-conifers
-conjectural
-conjecture
-conjectured
-conjectures
-conjecturing
-conjoin
-conjoined
-conjoining
-conjoint
-conjugacy
-conjugal
-conjugate
-conjugated
-conjugates
-conjugating
-conjugation
-conjugations
-conjunct
-conjunction
-conjunctions
-conjunctive
-conjunctivitis
-conjunctures
-conjure
-conjured
-conjurer
-conjurers
-conjures
-conjuring
-conjuror
-conjurors
-conjury
-conk
-conker
-conkers
-conman
-conmen
-connect
-connected
-connectedness
-connecting
-connection
-connectionless
-connections
-connective
-connectives
-connectivity
-connector
-connectors
-connects
-conned
-connexion
-connexions
-connivance
-connive
-connived
-conniving
-connoisseur
-connoisseurs
-connoisseurship
-connotation
-connotations
-connote
-connoted
-connotes
-connoting
-conquer
-conquerable
-conquered
-conquering
-conqueror
-conquerors
-conquers
-conquest
-conquests
-conquistador
-conquistadores
-cons
-consanguineous
-consanguinity
-conscience
-consciences
-consciencestricken
-conscientious
-conscientiously
-conscientiousness
-conscionable
-conscious
-consciously
-consciousness
-consciousnesses
-conscript
-conscripted
-conscripting
-conscription
-conscripts
-consecrate
-consecrated
-consecrating
-consecration
-consecutive
-consecutively
-consensual
-consensually
-consensus
-consent
-consented
-consenting
-consents
-consequence
-consequences
-consequent
-consequential
-consequentially
-consequently
-conservation
-conservationist
-conservationists
-conservations
-conservatism
-conservative
-conservatively
-conservativeness
-conservatives
-conservatoire
-conservator
-conservatories
-conservators
-conservatory
-conserve
-conserved
-conserves
-conserving
-consider
-considerable
-considerably
-considerate
-considerately
-consideration
-considerations
-considered
-considering
-considers
-consign
-consigned
-consignee
-consigning
-consignment
-consignments
-consigns
-consist
-consisted
-consistencies
-consistency
-consistent
-consistently
-consisting
-consists
-consolation
-consolations
-console
-consoled
-consoles
-consolidate
-consolidated
-consolidates
-consolidating
-consolidation
-consolidations
-consoling
-consolingly
-consonance
-consonant
-consonantal
-consonants
-consort
-consorted
-consortia
-consorting
-consortium
-consorts
-conspecific
-conspicuous
-conspicuously
-conspicuousness
-conspiracies
-conspiracy
-conspirator
-conspiratorial
-conspiratorially
-conspirators
-conspire
-conspired
-conspires
-conspiring
-constable
-constables
-constabularies
-constabulary
-constancy
-constant
-constantly
-constants
-constellation
-constellations
-consternating
-consternation
-constipated
-constipation
-constituencies
-constituency
-constituent
-constituents
-constitute
-constituted
-constitutes
-constituting
-constitution
-constitutional
-constitutionalism
-constitutionalists
-constitutionality
-constitutionally
-constitutions
-constitutive
-constitutively
-constrain
-constrained
-constraining
-constrains
-constraint
-constraints
-constrict
-constricted
-constricting
-constriction
-constrictions
-constrictive
-constrictor
-constrictors
-constricts
-construct
-constructable
-constructed
-constructing
-construction
-constructional
-constructions
-constructive
-constructively
-constructivism
-constructivist
-constructor
-constructors
-constructs
-construe
-construed
-construes
-construing
-consul
-consular
-consulate
-consulates
-consuls
-consult
-consultancies
-consultancy
-consultant
-consultants
-consultation
-consultations
-consultative
-consulted
-consulting
-consults
-consumable
-consumables
-consume
-consumed
-consumer
-consumerism
-consumerist
-consumers
-consumes
-consuming
-consummate
-consummated
-consummately
-consummation
-consumption
-consumptions
-consumptive
-contact
-contactable
-contacted
-contacting
-contacts
-contagion
-contagious
-contain
-containable
-contained
-container
-containers
-containing
-containment
-contains
-contaminant
-contaminants
-contaminate
-contaminated
-contaminates
-contaminating
-contamination
-contemplate
-contemplated
-contemplates
-contemplating
-contemplation
-contemplations
-contemplative
-contemporaneity
-contemporaneous
-contemporaneously
-contemporaries
-contemporary
-contempt
-contemptible
-contemptibly
-contemptuous
-contemptuously
-contend
-contended
-contender
-contenders
-contending
-contends
-content
-contented
-contentedly
-contenting
-contention
-contentions
-contentious
-contentiously
-contentment
-contents
-contest
-contestable
-contestant
-contestants
-contested
-contesting
-contests
-context
-contexts
-contextual
-contextualisation
-contextually
-contiguity
-contiguous
-contiguously
-continence
-continent
-continental
-continentals
-continents
-contingencies
-contingency
-contingent
-contingently
-contingents
-continua
-continuable
-continual
-continually
-continuance
-continuation
-continuations
-continue
-continued
-continues
-continuing
-continuities
-continuity
-continuous
-continuously
-continuum
-contort
-contorted
-contorting
-contortion
-contortionist
-contortions
-contorts
-contour
-contoured
-contouring
-contours
-contra
-contraband
-contraception
-contraceptive
-contraceptives
-contract
-contracted
-contractible
-contractile
-contracting
-contraction
-contractions
-contractor
-contractors
-contracts
-contractual
-contractually
-contradict
-contradicted
-contradicting
-contradiction
-contradictions
-contradictorily
-contradictory
-contradicts
-contradistinction
-contraflow
-contraflows
-contraindication
-contraindications
-contralto
-contraption
-contraptions
-contrapuntal
-contrarily
-contrariness
-contrariwise
-contrary
-contras
-contrast
-contrasted
-contrasting
-contrastingly
-contrastive
-contrasts
-contrasty
-contravene
-contravened
-contravenes
-contravening
-contravention
-contraventions
-contretemps
-contribute
-contributed
-contributes
-contributing
-contribution
-contributions
-contributor
-contributors
-contributory
-contrite
-contritely
-contrition
-contrivance
-contrivances
-contrive
-contrived
-contrives
-contriving
-control
-controllable
-controlled
-controller
-controllers
-controlling
-controls
-controversial
-controversially
-controversies
-controversy
-controvert
-controverted
-contumely
-contuse
-contusion
-contusions
-conundrum
-conundrums
-conurbation
-conurbations
-convalesce
-convalescence
-convalescent
-convalescing
-convect
-convected
-convecting
-convection
-convectional
-convective
-convector
-convects
-convene
-convened
-convener
-convenes
-convenience
-conveniences
-convenient
-conveniently
-convening
-convenor
-convenors
-convent
-conventicle
-convention
-conventional
-conventionalism
-conventionalist
-conventionality
-conventionally
-conventions
-convents
-converge
-converged
-convergence
-convergences
-convergent
-converges
-converging
-conversant
-conversation
-conversational
-conversationalist
-conversationalists
-conversationally
-conversations
-conversazione
-converse
-conversed
-conversely
-converses
-conversing
-conversion
-conversions
-convert
-converted
-converter
-converters
-convertibility
-convertible
-convertibles
-converting
-convertor
-convertors
-converts
-convex
-convexity
-convey
-conveyance
-conveyancing
-conveyed
-conveying
-conveyor
-conveyors
-conveys
-convict
-convicted
-convicting
-conviction
-convictions
-convicts
-convince
-convinced
-convinces
-convincing
-convincingly
-convivial
-conviviality
-convocation
-convocations
-convoluted
-convolution
-convolutions
-convolve
-convolved
-convoy
-convoys
-convulse
-convulsed
-convulses
-convulsing
-convulsion
-convulsions
-convulsive
-convulsively
-cony
-coo
-cooed
-cooing
-cook
-cookbook
-cookbooks
-cooked
-cooker
-cookers
-cookery
-cookies
-cooking
-cooks
-cookware
-cool
-coolant
-coolants
-cooled
-cooler
-coolers
-coolest
-cooling
-coolness
-cools
-coon
-coons
-coop
-cooped
-cooper
-cooperate
-cooperated
-cooperates
-cooperating
-cooperation
-cooperative
-cooperatively
-cooperatives
-coopers
-coops
-coordinate
-coordinated
-coordinates
-coordinating
-coordination
-coordinator
-coordinators
-coos
-cop
-cope
-coped
-copes
-copied
-copier
-copiers
-copies
-copilot
-coping
-copious
-copiously
-coplanar
-copout
-copouts
-copper
-copperplate
-coppers
-coppery
-coppice
-coppiced
-coppices
-coppicing
-copra
-coprocessor
-coprocessors
-coproduced
-coprolite
-coprophagous
-cops
-copse
-copses
-copulate
-copulating
-copulation
-copulations
-copulatory
-copy
-copyable
-copycat
-copycats
-copying
-copyist
-copyists
-copyright
-copyrightable
-copyrighted
-copyrighting
-copyrights
-copywriter
-coquette
-coquettes
-coquettish
-coquettishly
-cor
-coracle
-coral
-coralline
-corals
-cord
-cordage
-cordate
-corded
-cordial
-cordiality
-cordially
-cordials
-cordillera
-cordite
-cordless
-cordon
-cordoned
-cordons
-cords
-corduroy
-corduroys
-core
-cores
-corespondent
-corgi
-corgis
-coriander
-corinth
-cork
-corkage
-corked
-corks
-corkscrew
-corkscrews
-corky
-cormorant
-cormorants
-corn
-corncrake
-cornea
-corneal
-corneas
-corned
-corner
-cornered
-cornering
-corners
-cornerstone
-cornerstones
-cornet
-cornets
-cornfield
-cornfields
-cornflake
-cornflakes
-cornflour
-cornflower
-cornflowers
-cornice
-cornices
-cornish
-cornmeal
-corns
-cornucopia
-corny
-corollaries
-corollary
-corona
-coronal
-coronaries
-coronary
-coronas
-coronation
-coronations
-coroner
-coroners
-coronet
-coronets
-corpora
-corporal
-corporals
-corporate
-corporately
-corporates
-corporation
-corporations
-corporatism
-corporatist
-corporeal
-corporeally
-corps
-corpse
-corpses
-corpulent
-corpus
-corpuscle
-corpuscles
-corpuscular
-corral
-corralled
-corrals
-correct
-correctable
-corrected
-correcting
-correction
-correctional
-corrections
-corrective
-correctly
-correctness
-corrector
-correctors
-corrects
-correlate
-correlated
-correlates
-correlating
-correlation
-correlations
-correlative
-correspond
-corresponded
-correspondence
-correspondences
-correspondent
-correspondents
-corresponding
-correspondingly
-corresponds
-corridor
-corridors
-corrigenda
-corroborate
-corroborated
-corroborates
-corroborating
-corroboration
-corroborative
-corroboratory
-corrode
-corroded
-corrodes
-corroding
-corrosion
-corrosive
-corrugated
-corrugations
-corrupt
-corrupted
-corruptible
-corrupting
-corruption
-corruptions
-corruptly
-corrupts
-corsage
-corse
-corset
-corsets
-corsica
-corslet
-cortege
-cortex
-cortical
-corticosteroid
-corticosteroids
-cortisol
-cortisone
-coruscates
-corvette
-corvettes
-cosier
-cosiest
-cosily
-cosine
-cosines
-cosiness
-cosmetic
-cosmetically
-cosmetics
-cosmic
-cosmical
-cosmically
-cosmological
-cosmologically
-cosmologies
-cosmologist
-cosmologists
-cosmology
-cosmonaut
-cosmonauts
-cosmopolitan
-cosmopolitans
-cosmos
-cossacks
-cosset
-cosseted
-cossets
-cost
-costar
-costarred
-costarring
-costars
-costcutting
-costed
-costeffective
-costeffectiveness
-costefficient
-costing
-costings
-costive
-costless
-costlier
-costliest
-costliness
-costly
-costs
-costume
-costumed
-costumes
-cosy
-cot
-coterie
-coterminous
-cots
-cottage
-cottages
-cotton
-cottoned
-cottons
-couch
-couched
-couches
-couching
-cougar
-cougars
-cough
-coughed
-coughing
-coughs
-could
-couloir
-coulomb
-coulombs
-council
-councillor
-councillors
-councils
-counsel
-counselled
-counselling
-counsellor
-counsellors
-counsels
-count
-countability
-countable
-countably
-countdown
-counted
-countenance
-countenanced
-countenances
-countenancing
-counter
-counteract
-counteracted
-counteracting
-counteracts
-counterattack
-counterattacked
-counterattacks
-counterbalance
-counterbalanced
-counterbalancing
-countered
-counterfeit
-counterfeited
-counterfeiters
-counterfeiting
-counterfeits
-counterfoil
-counterfoils
-countering
-counterintelligence
-counterintuitive
-countermanded
-countermeasures
-counteroffensive
-counterpane
-counterpart
-counterparts
-counterpoint
-counterpointed
-counterpoints
-counterpoise
-counterproductive
-counterrevolution
-counterrevolutionaries
-counterrevolutionary
-counters
-countersign
-countersigned
-countersigns
-countess
-countesses
-counties
-counting
-countless
-countries
-country
-countryman
-countrymen
-countryside
-countrywide
-counts
-county
-coup
-coupe
-coupes
-couple
-coupled
-coupler
-couplers
-couples
-couplet
-couplets
-coupling
-couplings
-coupon
-coupons
-coups
-courage
-courageous
-courageously
-courgette
-courgettes
-courier
-couriers
-course
-coursebook
-coursed
-courses
-coursework
-coursing
-court
-courted
-courteous
-courteously
-courtesan
-courtesans
-courtesies
-courtesy
-courthouse
-courtier
-courtiers
-courting
-courtly
-courtmartial
-courtroom
-courtrooms
-courts
-courtship
-courtships
-courtyard
-courtyards
-couscous
-cousin
-cousinly
-cousins
-couther
-couture
-couturier
-couturiers
-covalent
-covalently
-covariance
-covariances
-cove
-coven
-covenant
-covenanted
-covenanters
-covenants
-covens
-cover
-coverage
-coverages
-coveralls
-covered
-covering
-coverings
-coverlet
-coverlets
-covers
-coversheet
-covert
-covertly
-coverts
-coverup
-coverups
-coves
-covet
-coveted
-coveting
-covetous
-covetousness
-covets
-cow
-coward
-cowardice
-cowardly
-cowards
-cowboy
-cowboys
-cowed
-cower
-cowered
-cowering
-cowers
-cowgirl
-cowgirls
-cowhand
-cowherd
-cowing
-cowl
-cowled
-cowling
-coworker
-coworkers
-cowriter
-cowritten
-cows
-cowshed
-cowsheds
-cowslip
-cowslips
-cox
-coxcomb
-coxcombs
-coxed
-coxes
-coxing
-coxswain
-coy
-coyly
-coyness
-coyote
-coyotes
-cozier
-crab
-crabby
-crabs
-crack
-crackable
-crackdown
-crackdowns
-cracked
-cracker
-crackers
-cracking
-crackle
-crackled
-crackles
-crackling
-crackly
-crackpot
-crackpots
-cracks
-cradle
-cradled
-cradles
-cradling
-craft
-crafted
-crafter
-craftier
-craftiest
-craftily
-crafting
-crafts
-craftsman
-craftsmanship
-craftsmen
-craftspeople
-crafty
-crag
-craggy
-crags
-cram
-crammed
-crammer
-cramming
-cramp
-cramped
-cramping
-crampon
-crampons
-cramps
-crams
-cran
-cranberries
-cranberry
-crane
-craned
-cranes
-cranial
-craning
-cranium
-crank
-cranked
-cranking
-cranks
-crankshaft
-cranky
-crannies
-cranny
-crap
-crash
-crashed
-crasher
-crashers
-crashes
-crashing
-crashingly
-crashland
-crashlanded
-crashlanding
-crass
-crasser
-crassly
-crassness
-crate
-crateful
-crater
-cratered
-craters
-crates
-cravat
-cravats
-crave
-craved
-craven
-cravenly
-craves
-craving
-cravings
-crawl
-crawled
-crawler
-crawlers
-crawling
-crawls
-craws
-crayfish
-crayon
-crayoned
-crayons
-craze
-crazed
-crazes
-crazier
-craziest
-crazily
-craziness
-crazy
-creak
-creaked
-creakier
-creakiest
-creaking
-creaks
-creaky
-cream
-creamed
-creamer
-creamery
-creamier
-creamiest
-creaming
-creams
-creamy
-crease
-creased
-creases
-creasing
-creatable
-create
-created
-creates
-creating
-creation
-creationism
-creationist
-creationists
-creations
-creative
-creatively
-creativeness
-creativity
-creator
-creators
-creature
-creatures
-creche
-creches
-credence
-credentials
-credibility
-credible
-credibly
-credit
-creditability
-creditable
-creditably
-credited
-crediting
-creditor
-creditors
-credits
-creditworthiness
-creditworthy
-credo
-credulity
-credulous
-creed
-creeds
-creek
-creeks
-creel
-creep
-creeper
-creepers
-creeping
-creeps
-creepy
-cremate
-cremated
-cremates
-cremation
-cremations
-crematoria
-crematorium
-creme
-crenellated
-crenellation
-crenellations
-creole
-creoles
-creosote
-crepe
-crept
-crepuscular
-crescendo
-crescent
-crescents
-cress
-crest
-crested
-crestfallen
-cresting
-crests
-cretaceous
-cretan
-cretans
-crete
-cretin
-cretinous
-cretins
-crevasse
-crevasses
-crevice
-crevices
-crew
-crewed
-crewing
-crewman
-crewmen
-crews
-crib
-cribbage
-cribbed
-cribbing
-cribs
-crick
-cricket
-cricketer
-cricketers
-cricketing
-crickets
-cried
-crier
-cries
-crim
-crime
-crimea
-crimes
-criminal
-criminalisation
-criminalise
-criminalised
-criminalising
-criminality
-criminally
-criminals
-criminological
-criminologist
-criminologists
-criminology
-crimp
-crimped
-crimping
-crimson
-cringe
-cringed
-cringes
-cringing
-crinkle
-crinkled
-crinkling
-crinkly
-crinoline
-cripple
-crippled
-cripples
-crippling
-cripplingly
-crises
-crisis
-crisp
-crisped
-crisper
-crispier
-crispiest
-crisply
-crispness
-crisps
-crispy
-crisscrossed
-crisscrosses
-criteria
-criterion
-critic
-critical
-critically
-criticise
-criticised
-criticises
-criticising
-criticism
-criticisms
-critics
-critique
-critiques
-critter
-croak
-croaked
-croakier
-croakiest
-croaking
-croaks
-croatia
-croatian
-crochet
-crocheted
-crochets
-crock
-crockery
-crocks
-crocodile
-crocodiles
-crocus
-crocuses
-croft
-crofter
-crofters
-crofting
-crofts
-croissant
-croissants
-crone
-crones
-cronies
-crony
-crook
-crooked
-crookedly
-crookedness
-crooking
-crooks
-croon
-crooned
-crooner
-crooners
-crooning
-croons
-crop
-cropped
-cropper
-croppers
-cropping
-crops
-croquet
-croqueted
-croqueting
-croquette
-crores
-crosier
-crosiers
-cross
-crossbar
-crossbars
-crossbones
-crossbow
-crossbows
-crossbred
-crosscheck
-crosschecked
-crosschecking
-crosschecks
-crosscountry
-crossed
-crosser
-crosses
-crossexamination
-crossexamine
-crossexamined
-crossexamines
-crossexamining
-crossfertilisation
-crossfire
-crossing
-crossings
-crossly
-crossness
-crossover
-crossovers
-crossreference
-crossreferenced
-crossreferences
-crossreferencing
-crossroads
-crosssection
-crosssectional
-crosssections
-crosstalk
-crossways
-crosswind
-crosswinds
-crossword
-crosswords
-crotch
-crotchet
-crotchetiness
-crotchety
-crotchless
-crouch
-crouched
-crouches
-crouching
-croup
-croupier
-croutons
-crow
-crowbar
-crowbars
-crowd
-crowded
-crowding
-crowds
-crowed
-crowing
-crown
-crowned
-crowning
-crowns
-crows
-crozier
-croziers
-crucial
-crucially
-cruciate
-crucible
-crucibles
-crucifiable
-crucified
-crucifix
-crucifixes
-crucifixion
-crucifixions
-cruciform
-crucify
-crucifying
-crude
-crudely
-crudeness
-cruder
-crudest
-crudities
-crudity
-cruel
-crueler
-cruelest
-crueller
-cruellest
-cruelly
-cruelness
-cruelties
-cruelty
-cruise
-cruised
-cruiser
-cruisers
-cruises
-cruising
-cruller
-crumb
-crumbing
-crumble
-crumbled
-crumbles
-crumblier
-crumbliest
-crumbling
-crumbly
-crumbs
-crumby
-crummy
-crumpet
-crumpets
-crumple
-crumpled
-crumples
-crumpling
-crunch
-crunched
-cruncher
-crunchers
-crunches
-crunchier
-crunchiest
-crunching
-crunchy
-crusade
-crusaded
-crusader
-crusaders
-crusades
-crusading
-crush
-crushed
-crusher
-crushers
-crushes
-crushing
-crushingly
-crust
-crustacean
-crustaceans
-crustal
-crusted
-crustier
-crustiest
-crusts
-crusty
-crutch
-crutches
-crux
-cruxes
-cry
-crying
-cryings
-cryogenic
-cryogenics
-cryostat
-crypt
-cryptanalysis
-cryptanalyst
-cryptanalytic
-cryptic
-cryptically
-cryptogram
-cryptographer
-cryptographers
-cryptographic
-cryptographically
-cryptography
-cryptology
-crypts
-crystal
-crystalclear
-crystalline
-crystallisation
-crystallise
-crystallised
-crystallises
-crystallising
-crystallographer
-crystallographers
-crystallographic
-crystallography
-crystals
-cub
-cuba
-cuban
-cubans
-cube
-cubed
-cubes
-cubic
-cubical
-cubically
-cubicle
-cubicles
-cubing
-cubism
-cubist
-cubistic
-cubists
-cubit
-cubits
-cuboid
-cubs
-cuckold
-cuckolded
-cuckoo
-cuckoos
-cucumber
-cucumbers
-cud
-cuddle
-cuddled
-cuddles
-cuddlier
-cuddliest
-cuddliness
-cuddling
-cuddly
-cudgel
-cudgels
-cuds
-cue
-cued
-cueing
-cues
-cuff
-cuffed
-cuffing
-cuffs
-cuing
-cuirass
-cuisine
-culdesac
-culinary
-cull
-culled
-culling
-culls
-culminate
-culminated
-culminates
-culminating
-culmination
-culpability
-culpable
-culpably
-culprit
-culprits
-cult
-cultivable
-cultivar
-cultivate
-cultivated
-cultivates
-cultivating
-cultivation
-cultivations
-cultivator
-cultivators
-cults
-cultural
-culturally
-culture
-cultured
-cultures
-culturing
-cultus
-culvert
-cumbersome
-cumbersomely
-cumlaude
-cummerbund
-cumulative
-cumulatively
-cumulus
-cuneiform
-cunnilingus
-cunning
-cunningly
-cup
-cupboard
-cupboards
-cupful
-cupid
-cupidinously
-cupidity
-cupola
-cupolas
-cupped
-cupping
-cuprous
-cups
-cur
-curable
-curare
-curate
-curated
-curates
-curative
-curator
-curatorial
-curators
-curatorships
-curb
-curbed
-curbing
-curbs
-curd
-curdle
-curdled
-curdles
-curdling
-curds
-cure
-cured
-curer
-cures
-curfew
-curfews
-curia
-curial
-curie
-curies
-curing
-curio
-curiosities
-curiosity
-curious
-curiously
-curl
-curled
-curlers
-curlew
-curlews
-curlicues
-curlier
-curliest
-curliness
-curling
-curls
-curly
-curmudgeons
-currant
-currants
-currencies
-currency
-current
-currently
-currents
-curricle
-curricula
-curricular
-curriculum
-curried
-curries
-curry
-currying
-curs
-curse
-cursed
-curses
-cursing
-cursive
-cursor
-cursorily
-cursors
-cursory
-curt
-curtail
-curtailed
-curtailing
-curtailment
-curtailments
-curtails
-curtain
-curtained
-curtaining
-curtains
-curtilage
-curtly
-curtness
-curtsey
-curtseyed
-curtseying
-curtseys
-curtsied
-curtsies
-curtsy
-curtsying
-curvaceous
-curvature
-curvatures
-curve
-curved
-curves
-curvilinear
-curving
-curvy
-cushion
-cushioned
-cushioning
-cushions
-cusp
-cusps
-cuss
-cussedness
-custard
-custards
-custodial
-custodian
-custodians
-custodianship
-custody
-custom
-customarily
-customary
-customer
-customers
-customisable
-customisation
-customisations
-customise
-customised
-customising
-customs
-cut
-cutback
-cutbacks
-cute
-cutely
-cuteness
-cutest
-cuticle
-cuticles
-cutlass
-cutlasses
-cutler
-cutlery
-cutlet
-cutlets
-cutout
-cutouts
-cutprice
-cutrate
-cuts
-cutter
-cutters
-cutthroat
-cutting
-cuttingly
-cuttings
-cuttle
-cuttlefish
-cyan
-cyanide
-cyanogen
-cybernetic
-cybernetics
-cyberpunk
-cyberspace
-cyborg
-cycad
-cycads
-cycle
-cycled
-cycles
-cycleway
-cycleways
-cyclic
-cyclical
-cyclically
-cycling
-cyclist
-cyclists
-cycloid
-cyclone
-cyclones
-cyclops
-cyclotron
-cyclotrons
-cygnet
-cygnets
-cylinder
-cylinders
-cylindrical
-cylindrically
-cymbal
-cymbals
-cynic
-cynical
-cynically
-cynicism
-cynics
-cypher
-cyphers
-cypress
-cypresses
-cyprian
-cyprians
-cypriot
-cypriots
-cyprus
-cyst
-cysteine
-cystic
-cystine
-cystitis
-cysts
-cytochrome
-cytogenetic
-cytological
-cytology
-cytoplasm
-cytoplasmic
-cytosine
-cytotoxic
-czar
-czars
-czech
-czechs
-dab
-dabbed
-dabbing
-dabble
-dabbled
-dabbler
-dabbles
-dabbling
-dabs
-dace
-dacha
-dachau
-dachshund
-dactyl
-dactylic
-dactyls
-dad
-daddies
-daddy
-daddylonglegs
-dado
-dads
-daemon
-daemonic
-daemons
-daffodil
-daffodils
-daffy
-daft
-dafter
-daftest
-daftness
-dagama
-dagga
-dagger
-daggers
-dahlia
-dahlias
-dahomey
-dailies
-daily
-daintier
-daintiest
-daintily
-daintiness
-dainty
-dairies
-dairy
-dairying
-dairyman
-dairymen
-dais
-daisies
-daisy
-dakar
-dakoits
-dale
-dales
-dallas
-dalliance
-dallied
-dally
-dallying
-dam
-damage
-damaged
-damages
-damaging
-damagingly
-damascus
-damask
-dame
-dames
-dammed
-damming
-damn
-damnable
-damnably
-damnation
-damned
-damnify
-damning
-damningly
-damns
-damp
-damped
-dampen
-dampened
-dampening
-dampens
-damper
-dampers
-dampest
-damping
-dampish
-damply
-dampness
-damps
-dams
-damsel
-damsels
-damson
-damsons
-dan
-dance
-danceable
-danced
-dancer
-dancers
-dances
-dancing
-dandelion
-dandelions
-dandies
-dandruff
-dandy
-dane
-danes
-danger
-dangerous
-dangerously
-dangerousness
-dangers
-dangle
-dangled
-dangles
-dangling
-daniel
-danish
-dank
-dankest
-dante
-danube
-danzig
-dapper
-dapple
-dappled
-dapples
-dare
-dared
-daredevil
-dares
-daring
-daringly
-dark
-darken
-darkened
-darkening
-darkens
-darker
-darkest
-darkish
-darkly
-darkness
-darkroom
-darkrooms
-darling
-darlings
-darn
-darned
-darning
-darns
-dart
-dartboard
-dartboards
-darted
-darter
-darters
-darting
-darts
-darwin
-dash
-dashboard
-dashed
-dashes
-dashing
-dassie
-dassies
-dastardly
-data
-database
-databases
-datable
-date
-dated
-dateline
-dates
-dating
-dative
-datum
-daub
-daubed
-dauber
-daubing
-daughter
-daughterinlaw
-daughters
-daughtersinlaw
-daunt
-daunted
-daunting
-dauntingly
-dauntless
-daunts
-dauphin
-dauphins
-david
-davinci
-dawdle
-dawdled
-dawdling
-dawn
-dawned
-dawning
-dawns
-day
-daybreak
-daycare
-daydream
-daydreaming
-daydreams
-daylight
-daylights
-daylong
-dayold
-days
-daytime
-daze
-dazed
-dazedly
-dazing
-dazzle
-dazzled
-dazzler
-dazzles
-dazzling
-dazzlingly
-dday
-deacon
-deaconess
-deaconesses
-deacons
-deactivate
-deactivated
-deactivates
-deactivating
-deactivation
-dead
-deadbeat
-deaden
-deadend
-deadened
-deadening
-deadens
-deader
-deadlier
-deadliest
-deadline
-deadlines
-deadlock
-deadlocked
-deadlocking
-deadlocks
-deadly
-deadness
-deadon
-deadpan
-deadsea
-deaf
-deafanddumb
-deafen
-deafened
-deafening
-deafeningly
-deafens
-deafer
-deafest
-deafness
-deal
-dealer
-dealers
-dealership
-dealerships
-dealing
-dealings
-deals
-dealt
-dean
-deanery
-deans
-dear
-dearer
-dearest
-dearie
-dearies
-dearly
-dearness
-dears
-dearth
-deary
-death
-deathbed
-deathless
-deathly
-deaths
-deb
-debacle
-debacles
-debar
-debark
-debarred
-debars
-debase
-debased
-debasement
-debaser
-debasing
-debatable
-debate
-debated
-debater
-debaters
-debates
-debating
-debauch
-debauched
-debauchery
-debenture
-debentures
-debilitate
-debilitated
-debilitating
-debility
-debit
-debited
-debiting
-debits
-debonair
-debone
-deboned
-debones
-debrief
-debriefed
-debriefing
-debris
-debt
-debtor
-debtors
-debts
-debug
-debugged
-debugger
-debuggers
-debugging
-debugs
-debunk
-debunks
-debut
-debutant
-debutante
-debutantes
-debutants
-debuts
-decade
-decadence
-decadent
-decades
-decaf
-decaffeinate
-decaffeinated
-decagon
-decagons
-decamp
-decamped
-decant
-decanted
-decanter
-decanters
-decanting
-decants
-decapitate
-decapitated
-decapitates
-decapitating
-decapitation
-decapitations
-decapod
-decathlon
-decay
-decayed
-decaying
-decays
-decease
-deceased
-deceases
-deceit
-deceitful
-deceitfulness
-deceits
-deceive
-deceived
-deceiver
-deceives
-deceiving
-decelerate
-decelerated
-decelerates
-decelerating
-deceleration
-decelerations
-december
-decency
-decent
-decently
-decentralisation
-decentralise
-decentralised
-decentralising
-deception
-deceptions
-deceptive
-deceptively
-decibel
-decibels
-decidability
-decidable
-decide
-decided
-decidedly
-decider
-decides
-deciding
-deciduous
-decile
-deciles
-decilitre
-decimal
-decimalisation
-decimalise
-decimals
-decimate
-decimated
-decimating
-decimation
-decimetres
-decipher
-decipherable
-deciphered
-deciphering
-decipherment
-decipherments
-decision
-decisions
-decisive
-decisively
-decisiveness
-deck
-deckchair
-deckchairs
-decked
-decker
-decking
-decks
-declaim
-declaimed
-declaiming
-declaims
-declamation
-declamatory
-declaration
-declarations
-declarative
-declaratory
-declare
-declared
-declarer
-declarers
-declares
-declaring
-declassification
-declassified
-declension
-declensions
-declination
-declinations
-decline
-declined
-declines
-declining
-declivity
-deco
-decode
-decoded
-decoder
-decoders
-decodes
-decoding
-decoke
-decolonisation
-decommission
-decommissioned
-decommissioning
-decomposable
-decompose
-decomposed
-decomposes
-decomposing
-decomposition
-decompositions
-decompress
-decompressed
-decompressing
-decompression
-decongestants
-deconstruct
-deconstructed
-deconstructing
-deconstruction
-deconstructionist
-deconstructive
-decontaminated
-decontaminating
-decontamination
-deconvolution
-deconvolve
-decor
-decorate
-decorated
-decorates
-decorating
-decoration
-decorations
-decorative
-decoratively
-decorator
-decorators
-decorous
-decorously
-decors
-decorum
-decouple
-decoupled
-decoupling
-decoy
-decoyed
-decoying
-decoys
-decrease
-decreased
-decreases
-decreasing
-decreasingly
-decree
-decreed
-decreeing
-decrees
-decrement
-decremental
-decremented
-decrementing
-decrements
-decrepit
-decrepitude
-decried
-decries
-decriminalisation
-decriminalise
-decriminalised
-decriminalising
-decry
-decrying
-decrypt
-decrypted
-decrypting
-decryption
-decrypts
-decustomised
-dedicate
-dedicated
-dedicates
-dedicating
-dedication
-dedications
-deduce
-deduced
-deduces
-deducible
-deducing
-deduct
-deducted
-deductible
-deducting
-deduction
-deductions
-deductive
-deductively
-deducts
-dee
-deed
-deeds
-deejay
-deem
-deemed
-deeming
-deems
-deep
-deepen
-deepened
-deepening
-deepens
-deeper
-deepest
-deepfreeze
-deepfreezing
-deepfried
-deepfrozen
-deepish
-deeply
-deepness
-deeprooted
-deeps
-deepsea
-deepseated
-deer
-deerstalker
-deerstalkers
-deerstalking
-deface
-defaced
-defaces
-defacing
-defacto
-defamation
-defamatory
-defame
-defamed
-defamer
-defames
-defaming
-default
-defaulted
-defaulter
-defaulters
-defaulting
-defaults
-defeat
-defeated
-defeater
-defeating
-defeatism
-defeatist
-defeats
-defecate
-defecating
-defect
-defected
-defecting
-defection
-defections
-defective
-defectiveness
-defectives
-defector
-defectors
-defects
-defence
-defenceless
-defencelessness
-defences
-defend
-defendant
-defendants
-defended
-defender
-defenders
-defending
-defends
-defenestrate
-defenestrated
-defenestration
-defenses
-defensibility
-defensible
-defensive
-defensively
-defensiveness
-defer
-deference
-deferential
-deferentially
-deferment
-deferral
-deferred
-deferring
-defers
-defiance
-defiant
-defiantly
-defibrillator
-defibrillators
-deficiencies
-deficiency
-deficient
-deficit
-deficits
-defied
-defier
-defies
-defile
-defiled
-defilement
-defiles
-defiling
-definable
-definably
-define
-defined
-definer
-defines
-defining
-definite
-definitely
-definiteness
-definition
-definitional
-definitions
-definitive
-definitively
-definitiveness
-deflatable
-deflate
-deflated
-deflates
-deflating
-deflation
-deflationary
-deflect
-deflected
-deflecting
-deflection
-deflections
-deflector
-deflectors
-deflects
-deflower
-deflowering
-defoliants
-defoliation
-deforestation
-deforested
-deform
-deformable
-deformation
-deformations
-deformed
-deforming
-deformities
-deformity
-deforms
-defragmentation
-defraud
-defrauded
-defrauding
-defrauds
-defray
-defrayed
-defrost
-defrosted
-defrosting
-defrosts
-deft
-defter
-deftly
-deftness
-defunct
-defuse
-defused
-defuses
-defusing
-defy
-defying
-degas
-degauss
-degaussed
-degaussing
-degeneracies
-degeneracy
-degenerate
-degenerated
-degenerates
-degenerating
-degeneration
-degenerative
-degradable
-degradation
-degradations
-degrade
-degraded
-degrades
-degrading
-degrease
-degree
-degrees
-dehorn
-dehumanised
-dehumanises
-dehumanising
-dehumidifier
-dehydrate
-dehydrated
-dehydrating
-dehydration
-deification
-deified
-deifies
-deify
-deifying
-deism
-deist
-deists
-deities
-deity
-deject
-dejected
-dejectedly
-dejection
-dejects
-deklerk
-delate
-delay
-delayed
-delaying
-delays
-delectable
-delectation
-delegate
-delegated
-delegates
-delegating
-delegation
-delegations
-deletable
-delete
-deleted
-deleter
-deleterious
-deleteriously
-deletes
-deleting
-deletion
-deletions
-delhi
-deli
-deliberate
-deliberated
-deliberately
-deliberating
-deliberation
-deliberations
-deliberative
-delible
-delicacies
-delicacy
-delicate
-delicately
-delicatessen
-delicatessens
-delicious
-deliciously
-delict
-delight
-delighted
-delightedly
-delightful
-delightfully
-delighting
-delights
-delilah
-delimit
-delimited
-delimiter
-delimiters
-delimiting
-delimits
-delineate
-delineated
-delineates
-delineating
-delineation
-delinquency
-delinquent
-delinquents
-deliquesced
-deliquescent
-delirious
-deliriously
-delirium
-deliver
-deliverable
-deliverance
-delivered
-deliverer
-deliverers
-deliveries
-delivering
-delivers
-delivery
-dell
-dells
-delphi
-delphiniums
-delta
-deltas
-deltoid
-deltoids
-delude
-deluded
-deludes
-deluding
-deluge
-deluged
-deluges
-deluging
-delusion
-delusional
-delusions
-delusive
-deluxe
-delve
-delved
-delves
-delving
-demagnetisation
-demagnetise
-demagog
-demagogic
-demagogue
-demagoguery
-demagogues
-demagogy
-demand
-demanded
-demander
-demanding
-demands
-demarcate
-demarcated
-demarcating
-demarcation
-demarcations
-dematerialise
-dematerialised
-dematerialises
-demean
-demeaned
-demeaning
-demeanour
-demeans
-dement
-demented
-dementedly
-dementia
-demerge
-demerit
-demigod
-demigods
-demijohns
-demilitarisation
-demilitarised
-demise
-demised
-demises
-demist
-demists
-demo
-demobilisation
-demobilised
-demobs
-democracies
-democracy
-democrat
-democratic
-democratically
-democratisation
-democratising
-democrats
-demodulator
-demographer
-demographers
-demographic
-demographically
-demographics
-demography
-demolish
-demolished
-demolisher
-demolishes
-demolishing
-demolition
-demolitions
-demon
-demonic
-demonise
-demonology
-demons
-demonstrable
-demonstrably
-demonstrate
-demonstrated
-demonstrates
-demonstrating
-demonstration
-demonstrations
-demonstrative
-demonstratively
-demonstratives
-demonstrator
-demonstrators
-demoralisation
-demoralise
-demoralised
-demoralising
-demote
-demoted
-demotes
-demotic
-demotion
-demount
-demountable
-demounted
-demounting
-demur
-demure
-demurely
-demurred
-demurring
-demurs
-demystification
-demystify
-demystifying
-den
-denationalisation
-denatured
-denaturing
-dendrites
-dendritic
-dendrochronological
-dendrochronology
-deniable
-denial
-denials
-denied
-denier
-deniers
-denies
-denigrate
-denigrated
-denigrates
-denigrating
-denigration
-denigrations
-denim
-denims
-denizen
-denizens
-denmark
-denominated
-denomination
-denominational
-denominations
-denominator
-denominators
-denotation
-denotational
-denotations
-denote
-denoted
-denotes
-denoting
-denouement
-denounce
-denounced
-denouncements
-denounces
-denouncing
-dens
-dense
-densely
-denseness
-denser
-densest
-densities
-densitometry
-density
-dent
-dental
-dented
-dentin
-dentine
-denting
-dentist
-dentistry
-dentists
-dentition
-dents
-denture
-dentures
-denudation
-denude
-denuded
-denudes
-denunciation
-denunciations
-denver
-deny
-denying
-deodorant
-deodorants
-deodorised
-depart
-departed
-departer
-departing
-department
-departmental
-departmentally
-departments
-departs
-departure
-departures
-depend
-dependability
-dependable
-dependant
-dependants
-depended
-dependence
-dependencies
-dependency
-dependent
-depending
-depends
-depersonalisation
-depersonalising
-depict
-depicted
-depicting
-depiction
-depictions
-depicts
-deplete
-depleted
-depleting
-depletion
-deplorable
-deplorably
-deplore
-deplored
-deplores
-deploring
-deploy
-deployed
-deploying
-deployment
-deployments
-deploys
-depolarisation
-depolarisations
-depoliticisation
-deponent
-depopulated
-depopulation
-deport
-deportation
-deportations
-deported
-deportee
-deportees
-deporting
-deportment
-deports
-depose
-deposed
-deposing
-deposit
-depositary
-deposited
-depositing
-deposition
-depositional
-depositions
-depositories
-depositors
-depository
-deposits
-depot
-depots
-deprave
-depraved
-depraves
-depraving
-depravity
-deprecate
-deprecated
-deprecates
-deprecating
-deprecatingly
-deprecation
-deprecations
-deprecatory
-depreciate
-depreciated
-depreciating
-depreciation
-depredation
-depredations
-depress
-depressant
-depressants
-depressed
-depresses
-depressing
-depressingly
-depression
-depressions
-depressive
-depressives
-deprivation
-deprivations
-deprive
-deprived
-deprives
-depriving
-depth
-depths
-deputation
-deputations
-depute
-deputed
-deputes
-deputies
-deputise
-deputised
-deputises
-deputising
-deputy
-derail
-derailed
-derailing
-derailment
-derails
-derange
-deranged
-derangement
-derate
-derated
-derates
-derbies
-derby
-deregulate
-deregulated
-deregulating
-deregulation
-derelict
-dereliction
-derelictions
-deride
-derided
-deriders
-derides
-deriding
-derision
-derisive
-derisively
-derisory
-derivable
-derivation
-derivations
-derivative
-derivatively
-derivatives
-derive
-derived
-derives
-deriving
-dermal
-dermatitis
-dermatological
-dermatologist
-dermatologists
-dermatology
-dermic
-dermis
-derogate
-derogation
-derogations
-derogatory
-derrick
-dervishes
-desalination
-desalt
-desaturated
-descant
-descend
-descendant
-descendants
-descended
-descendent
-descender
-descenders
-descending
-descends
-descent
-descents
-describable
-describe
-described
-describer
-describers
-describes
-describing
-description
-descriptions
-descriptive
-descriptively
-descriptiveness
-descriptivism
-descriptor
-descriptors
-desecrate
-desecrated
-desecrates
-desecrating
-desecration
-desegregation
-deselected
-desensitising
-desert
-deserted
-deserter
-deserters
-desertification
-deserting
-desertion
-desertions
-deserts
-deserve
-deserved
-deservedly
-deserves
-deserving
-desiccated
-desiccation
-desiccator
-desiderata
-desideratum
-design
-designable
-designate
-designated
-designates
-designating
-designation
-designational
-designations
-designator
-designators
-designed
-designedly
-designer
-designers
-designing
-designs
-desirabilia
-desirability
-desirable
-desirableness
-desirably
-desire
-desired
-desires
-desiring
-desirous
-desist
-desisted
-desisting
-desk
-deskilling
-desks
-desktop
-desktops
-desolate
-desolated
-desolating
-desolation
-desorption
-despair
-despaired
-despairing
-despairingly
-despairs
-despatch
-despatched
-despatches
-despatching
-desperado
-desperate
-desperately
-desperation
-despicable
-despicably
-despisal
-despise
-despised
-despises
-despising
-despite
-despoil
-despoiled
-despoiling
-despond
-despondency
-despondent
-despondently
-despot
-despotic
-despotism
-despots
-dessert
-desserts
-dessicated
-dessication
-destabilisation
-destabilise
-destabilised
-destabilising
-destination
-destinations
-destine
-destined
-destinies
-destiny
-destitute
-destitution
-destroy
-destroyable
-destroyed
-destroyer
-destroyers
-destroying
-destroys
-destruct
-destruction
-destructive
-destructively
-destructiveness
-desuetude
-desultorily
-desultoriness
-desultory
-detach
-detachable
-detached
-detaches
-detaching
-detachment
-detachments
-detail
-detailed
-detailing
-details
-detain
-detained
-detainee
-detainees
-detainer
-detaining
-detains
-detect
-detectability
-detectable
-detectably
-detected
-detecting
-detection
-detections
-detective
-detectives
-detector
-detectors
-detects
-detent
-detente
-detention
-detentions
-deter
-detergent
-detergents
-deteriorate
-deteriorated
-deteriorates
-deteriorating
-deterioration
-determinable
-determinacy
-determinant
-determinants
-determinate
-determinately
-determination
-determinations
-determinative
-determine
-determined
-determinedly
-determiner
-determines
-determining
-determinism
-determinist
-deterministic
-deterministically
-deterred
-deterrence
-deterrent
-deterrents
-deterring
-deters
-detest
-detestable
-detestably
-detestation
-detested
-detester
-detesters
-detesting
-detests
-dethrone
-dethroned
-detonate
-detonated
-detonates
-detonating
-detonation
-detonations
-detonator
-detonators
-detour
-detoured
-detours
-detox
-detoxification
-detoxify
-detract
-detracted
-detracting
-detraction
-detractor
-detractors
-detracts
-detriment
-detrimental
-detrimentally
-detrital
-detritus
-detroit
-deuce
-deuced
-deuces
-deuterium
-deuteron
-devaluation
-devaluations
-devalue
-devalued
-devalues
-devaluing
-devastate
-devastated
-devastating
-devastatingly
-devastation
-develop
-developed
-developer
-developers
-developing
-development
-developmental
-developmentally
-developments
-develops
-deviance
-deviancy
-deviant
-deviants
-deviate
-deviated
-deviates
-deviating
-deviation
-deviations
-device
-devices
-devil
-devilish
-devilishly
-devilled
-devilment
-devilry
-devils
-devious
-deviously
-deviousness
-devisal
-devise
-devised
-deviser
-devises
-devising
-devoice
-devoid
-devoir
-devolution
-devolve
-devolved
-devolving
-devote
-devoted
-devotedly
-devotedness
-devotee
-devotees
-devotes
-devoting
-devotion
-devotional
-devotions
-devour
-devoured
-devourer
-devourers
-devouring
-devours
-devout
-devoutly
-devoutness
-dew
-dewdrop
-dewdrops
-dews
-dewy
-dexterity
-dexterous
-dexterously
-dextral
-dextrose
-dextrous
-dextrously
-dhow
-diabetes
-diabetic
-diabetics
-diabolic
-diabolical
-diabolically
-diabolism
-diachronic
-diaconal
-diacritical
-diacriticals
-diacritics
-diadem
-diadems
-diagnosable
-diagnose
-diagnosed
-diagnoses
-diagnosing
-diagnosis
-diagnostic
-diagnostically
-diagnostician
-diagnostics
-diagonal
-diagonalise
-diagonalised
-diagonalises
-diagonalising
-diagonally
-diagonals
-diagram
-diagrammatic
-diagrammatically
-diagrams
-dial
-dialect
-dialectal
-dialectic
-dialectical
-dialectically
-dialectics
-dialects
-dialing
-dialled
-dialler
-dialling
-dialog
-dialogue
-dialogues
-dials
-dialysis
-diamante
-diameter
-diameters
-diametric
-diametrically
-diamond
-diamonds
-diana
-diapason
-diaper
-diapers
-diaphanous
-diaphragm
-diaphragmatic
-diaphragms
-diaries
-diarist
-diarrhea
-diarrhoea
-diarrhoeal
-diary
-diaspora
-diastolic
-diathermy
-diatom
-diatomic
-diatoms
-diatonic
-diatribe
-diatribes
-dice
-diced
-dices
-dicey
-dichloride
-dichotomies
-dichotomous
-dichotomy
-diciest
-dicing
-dickens
-dictate
-dictated
-dictates
-dictating
-dictation
-dictator
-dictatorial
-dictatorially
-dictators
-dictatorship
-dictatorships
-diction
-dictionaries
-dictionary
-dictions
-dictum
-did
-didactic
-didnt
-die
-died
-diehard
-diehards
-dielectric
-dielectrics
-dies
-diesel
-dieselelectric
-diesels
-diet
-dietary
-dieted
-dieter
-dietetic
-dietician
-dieticians
-dieting
-dietitian
-dietitians
-diets
-differ
-differed
-difference
-differences
-differencing
-different
-differentiability
-differentiable
-differential
-differentially
-differentials
-differentiate
-differentiated
-differentiates
-differentiating
-differentiation
-differentiations
-differentiators
-differently
-differing
-differs
-difficult
-difficulties
-difficulty
-diffidence
-diffident
-diffidently
-diffract
-diffracted
-diffracting
-diffraction
-diffracts
-diffuse
-diffused
-diffuser
-diffusers
-diffuses
-diffusing
-diffusion
-diffusional
-diffusive
-diffusivity
-dig
-digest
-digested
-digester
-digestible
-digesting
-digestion
-digestions
-digestive
-digestives
-digests
-digger
-diggers
-digging
-diggings
-digit
-digital
-digitalis
-digitally
-digitisation
-digitise
-digitised
-digitiser
-digitisers
-digitising
-digits
-dignified
-dignify
-dignifying
-dignitaries
-dignitary
-dignities
-dignity
-digraphs
-digress
-digressed
-digressing
-digression
-digressions
-digs
-dihedral
-dikes
-diktat
-diktats
-dilapidated
-dilapidation
-dilatation
-dilate
-dilated
-dilates
-dilating
-dilation
-dilator
-dilatory
-dildo
-dilemma
-dilemmas
-dilettante
-dilettantes
-diligence
-diligent
-diligently
-dill
-dilly
-diluent
-dilute
-diluted
-diluter
-dilutes
-diluting
-dilution
-dilutions
-dim
-dime
-dimension
-dimensional
-dimensionality
-dimensionally
-dimensioned
-dimensioning
-dimensionless
-dimensions
-dimer
-dimers
-dimes
-diminish
-diminishable
-diminished
-diminishes
-diminishing
-diminuendo
-diminution
-diminutive
-diminutives
-dimly
-dimmed
-dimmer
-dimmers
-dimmest
-dimming
-dimness
-dimorphic
-dimorphism
-dimple
-dimpled
-dimples
-dims
-dimwit
-din
-dinar
-dinars
-dine
-dined
-diner
-diners
-dines
-ding
-dingdong
-dinged
-dinghies
-dinghy
-dingier
-dingiest
-dinginess
-dingle
-dingo
-dingy
-dining
-dinky
-dinner
-dinners
-dinosaur
-dinosaurs
-dint
-dints
-diocesan
-diocese
-diode
-diodes
-dioptre
-dioptres
-dioxide
-dioxides
-dioxin
-dioxins
-dip
-diphtheria
-diphthong
-diphthongs
-diplexers
-diploid
-diploma
-diplomacy
-diplomas
-diplomat
-diplomatic
-diplomatically
-diplomats
-dipolar
-dipole
-dipoles
-dipped
-dipper
-dipping
-dips
-dipsomania
-dipsomaniac
-dipsomaniacs
-dipstick
-dipsticks
-dire
-direct
-directed
-directing
-direction
-directional
-directionality
-directionally
-directionless
-directions
-directive
-directives
-directly
-directness
-director
-directorate
-directorates
-directorial
-directories
-directors
-directorship
-directorships
-directory
-directs
-direly
-direness
-direst
-dirge
-dirges
-dirigible
-dirigiste
-dirt
-dirtied
-dirtier
-dirties
-dirtiest
-dirtily
-dirtiness
-dirts
-dirty
-dirtying
-disabilities
-disability
-disable
-disabled
-disablement
-disables
-disabling
-disabuse
-disabused
-disadvantage
-disadvantaged
-disadvantageous
-disadvantageously
-disadvantages
-disaffected
-disaffection
-disaffiliate
-disaffiliated
-disaffiliating
-disaffiliation
-disaggregate
-disaggregated
-disaggregation
-disagree
-disagreeable
-disagreeably
-disagreed
-disagreeing
-disagreement
-disagreements
-disagrees
-disallow
-disallowed
-disallowing
-disallows
-disambiguate
-disambiguated
-disambiguating
-disambiguation
-disappear
-disappearance
-disappearances
-disappeared
-disappearing
-disappears
-disappoint
-disappointed
-disappointing
-disappointingly
-disappointment
-disappointments
-disappoints
-disapprobation
-disapproval
-disapprove
-disapproved
-disapproves
-disapproving
-disapprovingly
-disarm
-disarmament
-disarmed
-disarmer
-disarming
-disarmingly
-disarms
-disarranging
-disarray
-disarrayed
-disassemble
-disassembled
-disassembler
-disassembles
-disassembling
-disassembly
-disassociate
-disassociated
-disassociating
-disassociation
-disaster
-disasters
-disastrous
-disastrously
-disavow
-disavowal
-disavowed
-disavowing
-disband
-disbanded
-disbanding
-disbandment
-disbands
-disbars
-disbelief
-disbelieve
-disbelieved
-disbeliever
-disbelievers
-disbelieving
-disbelievingly
-disburse
-disbursed
-disbursement
-disbursements
-disc
-discant
-discard
-discarded
-discarding
-discards
-discern
-discerned
-discernible
-discernibly
-discerning
-discernment
-discerns
-discharge
-discharged
-discharges
-discharging
-disciple
-disciples
-discipleship
-disciplinarian
-disciplinarians
-disciplinary
-discipline
-disciplined
-disciplines
-disciplining
-disclaim
-disclaimed
-disclaimer
-disclaimers
-disclaiming
-disclaims
-disclose
-disclosed
-discloses
-disclosing
-disclosure
-disclosures
-disco
-discography
-discolour
-discolouration
-discoloured
-discolours
-discomfit
-discomfited
-discomfiture
-discomfort
-discomforting
-discomforts
-disconcert
-disconcerted
-disconcerting
-disconcertingly
-disconnect
-disconnected
-disconnecting
-disconnection
-disconnections
-disconnects
-disconsolate
-disconsolately
-disconsolation
-discontent
-discontented
-discontentedly
-discontents
-discontinuance
-discontinuation
-discontinue
-discontinued
-discontinues
-discontinuing
-discontinuities
-discontinuity
-discontinuous
-discontinuously
-discord
-discordance
-discordant
-discords
-discotheque
-discotheques
-discount
-discountability
-discountable
-discounted
-discounting
-discounts
-discourage
-discouraged
-discouragement
-discouragements
-discourages
-discouraging
-discouragingly
-discourse
-discoursed
-discourses
-discoursing
-discourteous
-discourteously
-discourtesy
-discover
-discoverable
-discovered
-discoverer
-discoverers
-discoveries
-discovering
-discovers
-discovery
-discredit
-discreditable
-discredited
-discrediting
-discredits
-discreet
-discreetly
-discreetness
-discrepancies
-discrepancy
-discrepant
-discrete
-discretely
-discretion
-discretionary
-discriminant
-discriminants
-discriminate
-discriminated
-discriminates
-discriminating
-discrimination
-discriminative
-discriminator
-discriminators
-discriminatory
-discs
-discursive
-discursively
-discus
-discuss
-discussable
-discussed
-discusses
-discussing
-discussion
-discussions
-disdain
-disdained
-disdainful
-disdainfully
-disdaining
-disease
-diseased
-diseases
-disembark
-disembarkation
-disembarked
-disembarking
-disembodied
-disembodiment
-disembowel
-disembowelled
-disembowelment
-disembowels
-disenchanted
-disenchantment
-disenfranchise
-disenfranchised
-disenfranchisement
-disenfranchises
-disenfranchising
-disengage
-disengaged
-disengagement
-disengaging
-disentangle
-disentangled
-disentangles
-disentangling
-disequilibrium
-disestablish
-disestablished
-disestablishing
-disestablishment
-disfavour
-disfigure
-disfigured
-disfigurement
-disfigurements
-disfigures
-disfiguring
-disfranchise
-disgorge
-disgorged
-disgorging
-disgrace
-disgraced
-disgraceful
-disgracefully
-disgraces
-disgracing
-disgruntled
-disgruntlement
-disguise
-disguised
-disguises
-disguising
-disgust
-disgusted
-disgustedly
-disgusting
-disgustingly
-disgusts
-dish
-disharmonious
-disharmony
-dishcloth
-disheartened
-disheartening
-dished
-dishes
-dishevelled
-dishier
-dishing
-dishonest
-dishonestly
-dishonesty
-dishonour
-dishonourable
-dishonourably
-dishonoured
-dishpan
-dishwasher
-dishwashers
-dishwater
-dishy
-disillusion
-disillusioned
-disillusioning
-disillusionment
-disincentive
-disincentives
-disinclination
-disinclined
-disinfect
-disinfectant
-disinfectants
-disinfected
-disinfecting
-disinfection
-disinformation
-disingenuous
-disingenuously
-disinherit
-disinherited
-disintegrate
-disintegrated
-disintegrates
-disintegrating
-disintegration
-disinter
-disinterest
-disinterested
-disinterestedly
-disinterestedness
-disinterred
-disinvest
-disinvestment
-disjoin
-disjoint
-disjointed
-disjointedly
-disjointness
-disjunct
-disjunction
-disjunctions
-disjunctive
-diskette
-diskettes
-dislike
-disliked
-dislikes
-disliking
-dislocate
-dislocated
-dislocates
-dislocating
-dislocation
-dislocations
-dislodge
-dislodged
-dislodges
-dislodging
-disloyal
-disloyalty
-dismal
-dismally
-dismantle
-dismantled
-dismantles
-dismantling
-dismay
-dismayed
-dismaying
-dismays
-dismember
-dismembered
-dismembering
-dismemberment
-dismembers
-dismiss
-dismissal
-dismissals
-dismissed
-dismisses
-dismissible
-dismissing
-dismissive
-dismissively
-dismount
-dismounted
-dismounting
-dismounts
-disobedience
-disobedient
-disobey
-disobeyed
-disobeying
-disobeys
-disorder
-disordered
-disorderly
-disorders
-disorganisation
-disorganise
-disorganised
-disorganising
-disorient
-disorientated
-disorientating
-disorientation
-disoriented
-disown
-disowned
-disowning
-disowns
-disparage
-disparaged
-disparagement
-disparaging
-disparagingly
-disparate
-disparities
-disparity
-dispassionate
-dispassionately
-dispatch
-dispatched
-dispatcher
-dispatchers
-dispatches
-dispatching
-dispel
-dispelled
-dispelling
-dispels
-dispensable
-dispensaries
-dispensary
-dispensation
-dispensations
-dispense
-dispensed
-dispenser
-dispensers
-dispenses
-dispensing
-dispersal
-dispersant
-disperse
-dispersed
-disperser
-dispersers
-disperses
-dispersing
-dispersion
-dispersions
-dispersive
-dispersively
-dispirited
-dispiritedly
-dispiriting
-displace
-displaced
-displacement
-displacements
-displacer
-displaces
-displacing
-display
-displayable
-displayed
-displaying
-displays
-displease
-displeased
-displeasing
-displeasure
-disporting
-disposable
-disposables
-disposal
-disposals
-dispose
-disposed
-disposer
-disposers
-disposes
-disposing
-disposition
-dispositions
-dispossess
-dispossessed
-dispossession
-disproof
-disproofs
-disproportional
-disproportionally
-disproportionate
-disproportionately
-disprovable
-disprove
-disproved
-disproves
-disproving
-disputable
-disputant
-disputants
-disputation
-disputatious
-dispute
-disputed
-disputes
-disputing
-disqualification
-disqualifications
-disqualified
-disqualifies
-disqualify
-disqualifying
-disquiet
-disquieting
-disquietude
-disquisition
-disquisitions
-disregard
-disregarded
-disregarding
-disregards
-disrepair
-disreputable
-disrepute
-disrespect
-disrespectful
-disrespectfully
-disrespects
-disrobe
-disrobing
-disrupt
-disrupted
-disrupting
-disruption
-disruptions
-disruptive
-disruptively
-disruptor
-disrupts
-dissatisfaction
-dissatisfactions
-dissatisfied
-dissatisfies
-dissatisfy
-dissatisfying
-dissect
-dissected
-dissecting
-dissection
-dissections
-dissector
-dissects
-dissemble
-dissembled
-dissembling
-disseminate
-disseminated
-disseminating
-dissemination
-dissension
-dissensions
-dissent
-dissented
-dissenter
-dissenters
-dissenting
-dissertation
-dissertations
-disservice
-dissidence
-dissident
-dissidents
-dissimilar
-dissimilarities
-dissimilarity
-dissimulation
-dissipate
-dissipated
-dissipates
-dissipating
-dissipation
-dissipative
-dissociate
-dissociated
-dissociating
-dissociation
-dissociative
-dissociatively
-dissolute
-dissolution
-dissolve
-dissolved
-dissolves
-dissolving
-dissonance
-dissonances
-dissonant
-dissuade
-dissuaded
-dissuades
-dissuading
-distaff
-distal
-distally
-distance
-distanced
-distances
-distancing
-distant
-distantly
-distaste
-distasteful
-distastefully
-distemper
-distempered
-distempers
-distended
-distension
-distil
-distillate
-distillation
-distillations
-distilled
-distiller
-distilleries
-distillers
-distillery
-distilling
-distils
-distinct
-distinction
-distinctions
-distinctive
-distinctively
-distinctiveness
-distinctly
-distinctness
-distinguish
-distinguishable
-distinguishably
-distinguished
-distinguishes
-distinguishing
-distort
-distorted
-distorter
-distorting
-distortion
-distortions
-distorts
-distract
-distracted
-distractedly
-distractedness
-distracting
-distractingly
-distraction
-distractions
-distracts
-distraught
-distress
-distressed
-distresses
-distressing
-distressingly
-distributable
-distribute
-distributed
-distributes
-distributing
-distribution
-distributional
-distributions
-distributive
-distributivity
-distributor
-distributors
-district
-districts
-distrust
-distrusted
-distrustful
-distrustfully
-distrusting
-distrusts
-disturb
-disturbance
-disturbances
-disturbed
-disturbing
-disturbingly
-disturbs
-disulphide
-disunion
-disunite
-disunity
-disuse
-disused
-disyllabic
-disyllable
-ditch
-ditched
-ditches
-ditching
-dither
-dithered
-dithering
-dithers
-ditties
-ditto
-ditty
-diuresis
-diuretic
-diuretics
-diurnal
-diva
-divan
-divans
-divas
-dive
-divebombing
-dived
-diver
-diverge
-diverged
-divergence
-divergences
-divergent
-diverges
-diverging
-divers
-diverse
-diversely
-diversification
-diversified
-diversifies
-diversify
-diversifying
-diversion
-diversionary
-diversions
-diversities
-diversity
-divert
-diverted
-diverticular
-diverting
-diverts
-dives
-divest
-divested
-divesting
-divide
-divided
-dividend
-dividends
-divider
-dividers
-divides
-dividing
-divination
-divine
-divined
-divinely
-diviner
-divines
-divinest
-diving
-divining
-divinities
-divinity
-divisibility
-divisible
-division
-divisional
-divisions
-divisive
-divisiveness
-divisor
-divisors
-divorce
-divorced
-divorcee
-divorcees
-divorces
-divorcing
-divot
-divots
-divulge
-divulged
-divulges
-divulging
-dizzier
-dizziest
-dizzily
-dizziness
-dizzy
-dizzying
-dizzyingly
-do
-doberman
-doc
-docile
-docilely
-docility
-dock
-dockage
-docked
-docker
-dockers
-docket
-dockets
-docking
-dockland
-docklands
-docks
-dockside
-dockyard
-dockyards
-docs
-doctor
-doctoral
-doctorate
-doctorates
-doctored
-doctoring
-doctors
-doctrinaire
-doctrinal
-doctrinally
-doctrine
-doctrines
-document
-documentaries
-documentary
-documentation
-documented
-documenting
-documents
-dodecahedra
-dodecahedral
-dodecahedron
-dodge
-dodged
-dodgem
-dodgems
-dodger
-dodgers
-dodges
-dodgier
-dodging
-dodgy
-dodo
-doe
-doer
-doers
-does
-doesnt
-doffed
-doffing
-dog
-dogdays
-doge
-dogeared
-doges
-dogfight
-dogfights
-dogfish
-dogged
-doggedly
-doggedness
-doggerel
-dogging
-doggy
-doglike
-dogma
-dogmas
-dogmatic
-dogmatically
-dogmatism
-dogmatist
-dogmatists
-dogood
-dogooder
-dogooders
-dogs
-dogsbody
-dogtag
-dogy
-doh
-dohs
-doily
-doing
-doings
-doityourself
-doldrums
-dole
-doled
-doleful
-dolefully
-dolerite
-doles
-doling
-doll
-dollar
-dollars
-dolled
-dollies
-dollop
-dolls
-dolly
-dolman
-dolmen
-dolomite
-dolorous
-dolphin
-dolphinarium
-dolphins
-dolt
-domain
-domains
-dome
-domed
-domes
-domestic
-domestically
-domesticated
-domestication
-domesticity
-domestics
-domicile
-domiciled
-domiciliary
-dominance
-dominant
-dominantly
-dominate
-dominated
-dominates
-dominating
-domination
-domineer
-domineered
-domineering
-dominion
-dominions
-domino
-don
-donate
-donated
-donates
-donating
-donation
-donations
-done
-dong
-donga
-donjuan
-donkey
-donkeys
-donned
-donning
-donor
-donors
-dons
-dont
-donut
-doodle
-doodled
-doodles
-doodling
-doom
-doomed
-dooming
-dooms
-doomsday
-door
-doorbell
-doorbells
-doorhandles
-doorkeeper
-doorkeepers
-doorknob
-doorknobs
-doorman
-doormat
-doormats
-doormen
-doornail
-doorpost
-doors
-doorstep
-doorsteps
-doorstop
-doorstops
-doorway
-doorways
-dopamine
-dope
-doped
-dopes
-dopey
-dopier
-doping
-dopy
-dor
-dorado
-dormancy
-dormant
-dormer
-dormers
-dormice
-dormitories
-dormitory
-dormouse
-dorsal
-dorsally
-dosage
-dosages
-dose
-dosed
-doses
-dosing
-dossier
-dossiers
-dot
-dotage
-dote
-doted
-dotes
-doting
-dots
-dotted
-dottiness
-dotting
-dotty
-double
-doublebarrelled
-doublecross
-doublecrossing
-doubled
-doubledealing
-doubledecker
-doubledeckers
-doubles
-doublet
-doubletalk
-doublets
-doubling
-doubly
-doubt
-doubted
-doubter
-doubters
-doubtful
-doubtfully
-doubting
-doubtingly
-doubtless
-doubtlessly
-doubts
-douche
-douching
-dough
-doughnut
-doughnuts
-doughs
-doughty
-dour
-dourly
-dourness
-douse
-doused
-dousing
-dove
-dovecot
-dovecote
-dover
-doves
-dovetail
-dovetails
-dowager
-dowagers
-dowdier
-dowdiest
-dowdy
-dowel
-dowelling
-dowels
-down
-downbeat
-downcast
-downed
-downfall
-downgrade
-downgraded
-downgrades
-downgrading
-downhearted
-downhill
-downing
-downland
-downlands
-download
-downloaded
-downloading
-downloads
-downpipe
-downpipes
-downplay
-downplayed
-downpour
-downpours
-downright
-downs
-downside
-downsize
-downsized
-downsizing
-downstage
-downstairs
-downstream
-downswing
-downtoearth
-downtrodden
-downturn
-downturns
-downward
-downwardly
-downwards
-downwind
-downy
-dowries
-dowry
-dowse
-dowser
-dowsers
-dowsing
-doyen
-doyenne
-doyens
-doze
-dozed
-dozen
-dozens
-dozes
-dozier
-dozing
-dozy
-dr
-drab
-drabness
-drachm
-drachma
-drachmas
-dracone
-draconian
-dracula
-draft
-drafted
-draftee
-draftees
-drafter
-drafters
-draftier
-drafting
-drafts
-draftsman
-drafty
-drag
-dragged
-dragging
-dragnet
-dragon
-dragonflies
-dragonfly
-dragons
-dragoon
-dragooned
-dragoons
-drags
-drain
-drainage
-drained
-drainer
-draining
-drainpipe
-drainpipes
-drains
-drake
-drakes
-dram
-drama
-dramas
-dramatic
-dramatically
-dramatics
-dramatisation
-dramatisations
-dramatise
-dramatised
-dramatising
-dramatist
-dramatists
-dramaturgical
-drank
-drape
-draped
-draper
-draperies
-drapers
-drapery
-drapes
-draping
-drastic
-drastically
-drat
-draught
-draughtier
-draughtiest
-draughts
-draughtsman
-draughtsmanship
-draughtsmen
-draughty
-draw
-drawable
-drawback
-drawbacks
-drawbridge
-drawbridges
-drawcord
-drawees
-drawer
-drawers
-drawing
-drawings
-drawl
-drawled
-drawling
-drawls
-drawn
-draws
-dray
-drays
-dread
-dreaded
-dreadful
-dreadfully
-dreadfulness
-dreading
-dreadlocks
-dreadnought
-dreads
-dream
-dreamed
-dreamer
-dreamers
-dreamier
-dreamiest
-dreamily
-dreaming
-dreamland
-dreamless
-dreamlike
-dreams
-dreamt
-dreamy
-drear
-drearier
-dreariest
-drearily
-dreariness
-dreary
-dredge
-dredged
-dredger
-dredges
-dredging
-dregs
-drench
-drenched
-drenches
-drenching
-dress
-dressage
-dressed
-dresser
-dressers
-dresses
-dressing
-dressings
-dressmaker
-dressmakers
-dressmaking
-dressy
-drew
-dribble
-dribbled
-dribbler
-dribbles
-dribbling
-dried
-drier
-driers
-dries
-driest
-drift
-drifted
-drifter
-drifters
-drifting
-drifts
-driftwood
-drill
-drilled
-driller
-drilling
-drills
-drily
-drink
-drinkable
-drinker
-drinkers
-drinking
-drinks
-drip
-dripdry
-dripped
-dripping
-drippy
-drips
-drivable
-drive
-drive
-drivein
-driveins
-drivel
-drivelled
-drivelling
-drivels
-driven
-driver
-driverless
-drivers
-drives
-driveway
-driveways
-driving
-drizzle
-drizzled
-drizzles
-drizzling
-drizzly
-droll
-droller
-drollery
-drollest
-dromedaries
-dromedary
-drone
-droned
-drones
-droning
-drool
-drooled
-drooling
-drools
-droop
-drooped
-droopier
-droopiest
-drooping
-droopingly
-droops
-droopy
-drop
-droplet
-droplets
-dropout
-dropouts
-dropped
-dropper
-dropping
-droppings
-drops
-dropsy
-dross
-drought
-droughts
-drove
-drover
-drovers
-droves
-droving
-drown
-drowned
-drowning
-drownings
-drowns
-drowse
-drowsed
-drowses
-drowsier
-drowsiest
-drowsily
-drowsiness
-drowsy
-drub
-drubbed
-drubbing
-drudge
-drudgery
-drudges
-drug
-drugged
-drugging
-druggist
-drugs
-druid
-druids
-drum
-drumbeat
-drumbeats
-drummed
-drummer
-drummers
-drumming
-drums
-drumsticks
-drunk
-drunkard
-drunkards
-drunken
-drunkenly
-drunkenness
-drunker
-drunks
-dry
-drycleaned
-drycleaning
-dryer
-dryers
-dryeyed
-drying
-dryish
-dryly
-dryness
-drystone
-dual
-dualism
-dualisms
-dualist
-dualistic
-dualities
-duality
-dually
-duals
-dub
-dubbed
-dubbing
-dubious
-dubiously
-dubiousness
-dublin
-dubs
-duce
-duchess
-duchesses
-duchies
-duchy
-duck
-duckbill
-duckbilled
-duckboards
-ducked
-ducking
-duckings
-duckling
-ducklings
-duckpond
-ducks
-duct
-ducted
-ductile
-ducting
-ducts
-dud
-dude
-dudes
-dudgeon
-duds
-due
-duel
-duelled
-dueller
-duellers
-duelling
-duellist
-duels
-dues
-duet
-duets
-duff
-duffel
-dug
-dugout
-dugouts
-duiker
-duke
-dukedom
-dukedoms
-dukes
-dulcet
-dulcimer
-dull
-dullard
-dullards
-dulled
-duller
-dullest
-dulling
-dullness
-dulls
-dully
-dulness
-duly
-dumb
-dumbbell
-dumber
-dumbest
-dumbfound
-dumbfounded
-dumbfounding
-dumbfounds
-dumbly
-dumbness
-dumbstruck
-dumfound
-dumfounded
-dumfounding
-dumfounds
-dummied
-dummies
-dummy
-dump
-dumped
-dumper
-dumping
-dumpling
-dumplings
-dumps
-dumpy
-dun
-dunce
-dunces
-dune
-dunes
-dung
-dungarees
-dungbeetle
-dungeon
-dungeons
-dunghill
-dunked
-dunking
-dunkirk
-duo
-duodenal
-duodenum
-duologue
-duomo
-duopoly
-dupe
-duped
-dupes
-duplex
-duplicability
-duplicate
-duplicated
-duplicates
-duplicating
-duplication
-duplications
-duplicator
-duplicators
-duplicities
-duplicitous
-duplicity
-durability
-durable
-durables
-durance
-duration
-durations
-durban
-duress
-during
-dusk
-duskier
-dusky
-dust
-dustbin
-dustbins
-dustcart
-dusted
-duster
-dusters
-dustier
-dustily
-dusting
-dustman
-dustmen
-dustpan
-dusts
-dusty
-dutch
-dutchman
-dutchmen
-duties
-dutiful
-dutifully
-dutifulness
-duty
-dutyfree
-duvet
-duvets
-dux
-dwarf
-dwarfed
-dwarfing
-dwarfish
-dwarfs
-dwarves
-dwell
-dwelled
-dweller
-dwellers
-dwelling
-dwellings
-dwells
-dwelt
-dwindle
-dwindled
-dwindles
-dwindling
-dyad
-dyadic
-dye
-dyed
-dyeing
-dyeings
-dyer
-dyers
-dyes
-dyestuff
-dyestuffs
-dying
-dyke
-dykes
-dynamic
-dynamical
-dynamically
-dynamics
-dynamism
-dynamite
-dynamited
-dynamo
-dynast
-dynastic
-dynasties
-dynasts
-dynasty
-dyne
-dysentery
-dysfunction
-dysfunctional
-dysfunctions
-dyslexia
-dyslexic
-dyslexically
-dyslexics
-dyspepsia
-dyspeptic
-dystrophy
-each
-eager
-eagerly
-eagerness
-eagle
-eagles
-eaglet
-eaglets
-ear
-earache
-earaches
-eardrop
-eardrops
-eardrum
-eardrums
-eared
-earful
-earholes
-earl
-earldom
-earldoms
-earlier
-earliest
-earlobe
-earlobes
-earls
-early
-earmark
-earmarked
-earmarking
-earn
-earned
-earner
-earners
-earnest
-earnestly
-earnestness
-earning
-earnings
-earns
-earphone
-earphones
-earpiece
-earpieces
-earplug
-earplugs
-earring
-earrings
-ears
-earshot
-earsplitting
-earth
-earthbound
-earthed
-earthen
-earthenware
-earthiness
-earthing
-earthling
-earthlings
-earthly
-earthquake
-earthquakes
-earths
-earthshaking
-earthshattering
-earthwards
-earthwork
-earthworks
-earthworm
-earthworms
-earthy
-earwax
-earwig
-earwigs
-ease
-eased
-easel
-easels
-easement
-easements
-eases
-easier
-easiest
-easily
-easiness
-easing
-east
-eastbound
-easter
-easterly
-eastern
-easterners
-easternmost
-easting
-eastward
-eastwards
-easy
-easygoing
-eat
-eatable
-eatage
-eaten
-eater
-eaters
-eatery
-eating
-eatings
-eats
-eaves
-eavesdrop
-eavesdropped
-eavesdropper
-eavesdroppers
-eavesdropping
-eavesdrops
-ebb
-ebbed
-ebbing
-ebbs
-ebbtide
-ebony
-ebullience
-ebullient
-eccentric
-eccentrically
-eccentricities
-eccentricity
-eccentrics
-ecclesiastic
-ecclesiastical
-ecclesiastically
-echelon
-echelons
-echidna
-echidnas
-echinoderm
-echinoderms
-echo
-echoed
-echoic
-echoing
-eclair
-eclairs
-eclectic
-eclecticism
-eclipse
-eclipsed
-eclipses
-eclipsing
-ecliptic
-ecological
-ecologically
-ecologist
-ecologists
-ecology
-econometric
-econometrics
-economic
-economical
-economically
-economics
-economies
-economisation
-economise
-economised
-economises
-economising
-economist
-economists
-economy
-ecosystem
-ecosystems
-ecstasies
-ecstasy
-ecstatic
-ecstatically
-ectopic
-ectoplasm
-ecuador
-ecumenical
-ecumenically
-ecumenism
-eczema
-eddied
-eddies
-eddy
-eddying
-edema
-eden
-edge
-edged
-edgeless
-edges
-edgeways
-edgewise
-edgier
-edgily
-edginess
-edging
-edgings
-edgy
-edibility
-edible
-edibles
-edict
-edicts
-edification
-edifice
-edifices
-edified
-edifies
-edify
-edifying
-edison
-edit
-editable
-edited
-editing
-edition
-editions
-editor
-editorial
-editorialised
-editorially
-editorials
-editors
-editorship
-editorships
-edits
-educate
-educated
-educates
-educating
-education
-educational
-educationalist
-educationalists
-educationally
-educationist
-educationists
-educations
-educative
-educator
-educators
-eduction
-eel
-eels
-eelworm
-eelworms
-eerie
-eerier
-eeriest
-eerily
-eeriness
-eery
-efface
-effaced
-effacing
-effect
-effected
-effecting
-effective
-effectively
-effectiveness
-effector
-effectors
-effects
-effectual
-effectually
-effeminacy
-effeminate
-efferent
-effervescence
-effervescent
-effete
-efficacious
-efficacy
-efficiencies
-efficiency
-efficient
-efficiently
-effigies
-effigy
-effluent
-effluents
-effluvia
-effluxion
-effort
-effortless
-effortlessly
-efforts
-effrontery
-effulgence
-effulgent
-effusion
-effusions
-effusive
-effusively
-eg
-egalitarian
-egalitarianism
-egalitarians
-egg
-egged
-eggheads
-egging
-eggs
-eggshell
-eggshells
-ego
-egocentric
-egocentricity
-egoism
-egoist
-egoistic
-egoists
-egomania
-egomaniac
-egomaniacs
-egotism
-egotist
-egotistic
-egotistical
-egotistically
-egotists
-egregious
-egress
-egret
-egrets
-egypt
-egyptian
-eh
-eider
-eiderdown
-eidetic
-eigenfunction
-eigenfunctions
-eigenstate
-eigenstates
-eigenvalue
-eigenvalues
-eight
-eighteen
-eighteenth
-eightfold
-eighth
-eighties
-eightieth
-eightpence
-eights
-eighty
-einstein
-eire
-eisteddfod
-either
-eject
-ejected
-ejecting
-ejection
-ejections
-ejector
-ejectors
-ejects
-eke
-eked
-eking
-elaborate
-elaborated
-elaborately
-elaborateness
-elaborates
-elaborating
-elaboration
-elaborations
-elal
-elan
-eland
-elands
-elapse
-elapsed
-elapses
-elapsing
-elastic
-elastically
-elasticated
-elasticities
-elasticity
-elastics
-elastin
-elastodynamics
-elate
-elated
-elates
-elation
-elbe
-elbow
-elbowed
-elbowing
-elbows
-elder
-elderberries
-elderberry
-elderflower
-elderly
-elders
-eldest
-eldorado
-elect
-electability
-electable
-elected
-electing
-election
-electioneering
-elections
-elective
-elector
-electoral
-electorally
-electorate
-electorates
-electors
-electric
-electrical
-electrically
-electrician
-electricians
-electricity
-electrics
-electrification
-electrified
-electrify
-electrifying
-electro
-electrocardiogram
-electrocardiographic
-electrochemical
-electrochemically
-electrocute
-electrocuted
-electrocutes
-electrocuting
-electrocution
-electrode
-electrodes
-electrodynamic
-electrodynamics
-electroencephalogram
-electroluminescent
-electrolyse
-electrolysed
-electrolysing
-electrolysis
-electrolyte
-electrolytes
-electrolytic
-electrolytically
-electromagnet
-electromagnetic
-electromagnetically
-electromagnetism
-electromechanical
-electromechanics
-electromotive
-electron
-electronegative
-electronic
-electronically
-electronics
-electrons
-electrophoresis
-electrostatic
-electrostatics
-electrotechnical
-elects
-elegance
-elegant
-elegantly
-elegiac
-elegies
-elegy
-element
-elemental
-elementally
-elementarily
-elementary
-elements
-elephant
-elephantiasis
-elephantine
-elephants
-elevate
-elevated
-elevates
-elevating
-elevation
-elevations
-elevator
-elevators
-eleven
-eleventh
-elf
-elfin
-elflike
-elgreco
-elicit
-elicitation
-elicited
-eliciting
-elicits
-elide
-elided
-elides
-eliding
-eligibility
-eligible
-eligibly
-elijah
-eliminate
-eliminated
-eliminates
-eliminating
-elimination
-eliminations
-eliminator
-elision
-elisions
-elite
-elites
-elitism
-elitist
-elitists
-elixir
-elixirs
-elk
-elks
-ell
-ellipse
-ellipses
-ellipsis
-ellipsoid
-ellipsoidal
-ellipsoids
-elliptic
-elliptical
-elliptically
-ells
-elm
-elms
-elnino
-elocution
-elongate
-elongated
-elongates
-elongating
-elongation
-elongations
-elope
-eloped
-elopement
-elopes
-eloping
-eloquence
-eloquent
-eloquently
-els
-else
-elsewhere
-elucidate
-elucidated
-elucidates
-elucidating
-elucidation
-elude
-eluded
-eludes
-eluding
-elusion
-elusions
-elusive
-elusively
-elusiveness
-eluted
-elution
-elven
-elves
-elvish
-elysee
-em
-emaciate
-emaciated
-emaciation
-email
-emailed
-emanate
-emanated
-emanates
-emanating
-emanation
-emanations
-emancipate
-emancipated
-emancipates
-emancipating
-emancipation
-emancipator
-emancipatory
-emasculate
-emasculated
-emasculating
-emasculation
-embalm
-embalmed
-embalmer
-embalmers
-embalming
-embalms
-embank
-embankment
-embankments
-embargo
-embargoed
-embark
-embarkation
-embarked
-embarking
-embarks
-embarrass
-embarrassed
-embarrassedly
-embarrasses
-embarrassing
-embarrassingly
-embarrassment
-embarrassments
-embassies
-embassy
-embattle
-embattled
-embed
-embeddable
-embedded
-embedding
-embeddings
-embeds
-embellish
-embellished
-embellishing
-embellishment
-embellishments
-ember
-embers
-embezzle
-embezzled
-embezzlement
-embezzler
-embezzlers
-embezzling
-embitter
-embittered
-embittering
-embitterment
-emblazoned
-emblem
-emblematic
-emblems
-embodied
-embodies
-embodiment
-embodiments
-embody
-embodying
-embolden
-emboldened
-emboldening
-emboldens
-embolism
-embosom
-emboss
-embossed
-embrace
-embraced
-embraces
-embracing
-embrasure
-embrocation
-embroider
-embroidered
-embroiderers
-embroideries
-embroidering
-embroidery
-embroil
-embroiled
-embroiling
-embryo
-embryological
-embryology
-embryonal
-embryonic
-emendation
-emendations
-emended
-emerald
-emeralds
-emerge
-emerged
-emergence
-emergencies
-emergency
-emergent
-emerges
-emerging
-emeritus
-emersion
-emery
-emetic
-emigrant
-emigrants
-emigrate
-emigrated
-emigrating
-emigration
-emigre
-emigres
-eminence
-eminences
-eminent
-eminently
-emir
-emirate
-emirates
-emirs
-emissaries
-emissary
-emission
-emissions
-emissivities
-emissivity
-emit
-emits
-emitted
-emitter
-emitters
-emitting
-emollient
-emolument
-emoluments
-emotion
-emotional
-emotionalism
-emotionality
-emotionally
-emotionless
-emotions
-emotive
-emotively
-empathetic
-empathetical
-empathic
-empathise
-empathising
-empathy
-emperor
-emperors
-emphases
-emphasis
-emphasise
-emphasised
-emphasises
-emphasising
-emphatic
-emphatically
-emphysema
-empire
-empires
-empiric
-empirical
-empirically
-empiricism
-empiricist
-empiricists
-emplacement
-emplacements
-employ
-employability
-employable
-employed
-employee
-employees
-employer
-employers
-employing
-employment
-employments
-employs
-emporia
-emporium
-empower
-empowered
-empowering
-empowerment
-empowers
-empress
-emptied
-emptier
-empties
-emptiest
-emptily
-emptiness
-empty
-emptyhanded
-emptying
-ems
-emu
-emulate
-emulated
-emulates
-emulating
-emulation
-emulations
-emulator
-emulators
-emulsifies
-emulsion
-emulsions
-emus
-enable
-enabled
-enables
-enabling
-enact
-enacted
-enacting
-enactment
-enactments
-enacts
-enamel
-enamelled
-enamels
-enamoured
-encage
-encamp
-encamped
-encampment
-encampments
-encapsulate
-encapsulated
-encapsulates
-encapsulating
-encapsulation
-encapsulations
-encase
-encased
-encases
-encashment
-encasing
-encephalitis
-encephalopathy
-enchain
-enchant
-enchanted
-enchanter
-enchanters
-enchanting
-enchantingly
-enchantment
-enchantments
-enchantress
-enchants
-enchiladas
-enciphering
-encircle
-encircled
-encirclement
-encirclements
-encircles
-encircling
-enclasp
-enclave
-enclaves
-enclose
-enclosed
-encloses
-enclosing
-enclosure
-enclosures
-encode
-encoded
-encoder
-encoders
-encodes
-encoding
-encomium
-encompass
-encompassed
-encompasses
-encompassing
-encore
-encored
-encores
-encounter
-encountered
-encountering
-encounters
-encourage
-encouraged
-encouragement
-encouragements
-encourager
-encourages
-encouraging
-encouragingly
-encroach
-encroached
-encroaches
-encroaching
-encroachment
-encroachments
-encrust
-encrustation
-encrusted
-encrusting
-encrypt
-encrypted
-encrypting
-encryption
-encrypts
-encumber
-encumbered
-encumbering
-encumbrance
-encumbrances
-encyclical
-encyclopaedia
-encyclopaedias
-encyclopaedic
-encyclopedia
-encyclopedias
-encyclopedic
-end
-endanger
-endangered
-endangering
-endangers
-endear
-endeared
-endearing
-endearingly
-endearment
-endearments
-endears
-endeavour
-endeavoured
-endeavouring
-endeavours
-ended
-endemic
-endemically
-endgame
-ending
-endings
-endive
-endless
-endlessly
-endlessness
-endocrine
-endogenous
-endogenously
-endometrial
-endometriosis
-endometrium
-endomorphism
-endomorphisms
-endoplasmic
-endorphins
-endorse
-endorsed
-endorsement
-endorsements
-endorser
-endorses
-endorsing
-endoscope
-endoscopic
-endoscopy
-endothermic
-endotoxin
-endow
-endowed
-endowing
-endowment
-endowments
-endows
-endpapers
-ends
-endued
-endues
-endungeoned
-endurable
-endurance
-endure
-endured
-endures
-enduring
-enema
-enemas
-enemies
-enemy
-energetic
-energetically
-energetics
-energies
-energise
-energised
-energiser
-energisers
-energising
-energy
-enervate
-enervated
-enervating
-enfeeble
-enfeebled
-enfeeblement
-enfold
-enfolded
-enfolding
-enfolds
-enforce
-enforceability
-enforceable
-enforced
-enforcement
-enforcements
-enforcer
-enforcers
-enforces
-enforcing
-enfranchise
-enfranchised
-enfranchisement
-enfranchiser
-enfranchising
-engage
-engaged
-engagement
-engagements
-engages
-engaging
-engagingly
-engarde
-engels
-engender
-engendered
-engendering
-engenders
-engine
-engined
-engineer
-engineered
-engineering
-engineers
-engines
-england
-english
-engorge
-engorged
-engrained
-engrave
-engraved
-engraver
-engravers
-engraves
-engraving
-engravings
-engross
-engrossed
-engrossing
-engulf
-engulfed
-engulfing
-engulfs
-enhance
-enhanceable
-enhanced
-enhancement
-enhancements
-enhancer
-enhancers
-enhances
-enhancing
-enharmonic
-enigma
-enigmas
-enigmatic
-enigmatically
-enjoin
-enjoined
-enjoining
-enjoins
-enjoy
-enjoyability
-enjoyable
-enjoyably
-enjoyed
-enjoyer
-enjoying
-enjoyment
-enjoyments
-enjoys
-enlace
-enlarge
-enlarged
-enlargement
-enlargements
-enlarger
-enlarges
-enlarging
-enlighten
-enlightened
-enlightening
-enlightenment
-enlightens
-enlist
-enlisted
-enlisting
-enlistment
-enlists
-enliven
-enlivened
-enlivening
-enlivens
-enmasse
-enmeshed
-enmities
-enmity
-enneads
-ennoble
-ennobled
-ennobles
-ennobling
-ennui
-enormities
-enormity
-enormous
-enormously
-enough
-enounced
-enounces
-enquire
-enquired
-enquirer
-enquirers
-enquires
-enquiries
-enquiring
-enquiringly
-enquiry
-enrage
-enraged
-enrages
-enraging
-enraptured
-enrich
-enriched
-enriches
-enriching
-enrichment
-enrichments
-enrobe
-enrobed
-enrol
-enroll
-enrolled
-enrolling
-enrolls
-enrolment
-enrolments
-enrols
-enroute
-ensconce
-ensconced
-ensemble
-ensembles
-enshrine
-enshrined
-enshrines
-enshrining
-enshroud
-enshrouded
-ensign
-ensigns
-enslave
-enslaved
-enslavement
-enslaves
-enslaving
-ensnare
-ensnared
-ensnaring
-ensnarl
-ensue
-ensued
-ensues
-ensuing
-ensure
-ensured
-ensures
-ensuring
-entablature
-entail
-entailed
-entailing
-entailment
-entails
-entangle
-entangled
-entanglement
-entanglements
-entangler
-entangles
-entangling
-entente
-enter
-entered
-entering
-enteritis
-enterprise
-enterprises
-enterprising
-enters
-entertain
-entertained
-entertainer
-entertainers
-entertaining
-entertainingly
-entertainment
-entertainments
-entertains
-enthalpies
-enthalpy
-enthralled
-enthralling
-enthrone
-enthroned
-enthronement
-enthuse
-enthused
-enthuses
-enthusiasm
-enthusiasms
-enthusiast
-enthusiastic
-enthusiastically
-enthusiasts
-enthusing
-entice
-enticed
-enticement
-enticements
-entices
-enticing
-enticingly
-entire
-entirely
-entires
-entirety
-entities
-entitle
-entitled
-entitlement
-entitlements
-entitles
-entitling
-entity
-entomb
-entombed
-entombment
-entombs
-entomological
-entomologist
-entomologists
-entomology
-entourage
-entrails
-entrain
-entrained
-entrainment
-entrance
-entranced
-entrances
-entrancing
-entrant
-entrants
-entrap
-entrapment
-entrapped
-entrapping
-entreat
-entreated
-entreaties
-entreating
-entreatingly
-entreats
-entreaty
-entree
-entrench
-entrenched
-entrenching
-entrenchment
-entrepreneur
-entrepreneurial
-entrepreneurs
-entrepreneurship
-entries
-entropic
-entropy
-entrust
-entrusted
-entrusting
-entrusts
-entry
-entwine
-entwined
-entwines
-entwining
-enumerable
-enumerate
-enumerated
-enumerates
-enumerating
-enumeration
-enumerations
-enumerator
-enumerators
-enunciate
-enunciated
-enunciating
-enunciation
-envelop
-envelope
-enveloped
-enveloper
-envelopers
-envelopes
-enveloping
-envelops
-enviable
-enviably
-envied
-envies
-envious
-enviously
-environ
-environment
-environmental
-environmentalism
-environmentalist
-environmentalists
-environmentally
-environments
-environs
-envisage
-envisaged
-envisages
-envisaging
-envision
-envisioned
-envoy
-envoys
-envy
-envying
-enwrap
-enzymatic
-enzyme
-enzymes
-eon
-eons
-eosin
-epaulettes
-ephemera
-ephemeral
-ephemeris
-ephor
-epic
-epically
-epicarp
-epicentre
-epics
-epicure
-epicurean
-epicycles
-epicycloid
-epidemic
-epidemics
-epidemiological
-epidemiologist
-epidemiologists
-epidemiology
-epidermal
-epidermis
-epidural
-epigenetic
-epigon
-epigones
-epigram
-epigrammatic
-epigrams
-epigraph
-epigraphical
-epigraphy
-epilepsy
-epileptic
-epileptics
-epilogue
-epinephrine
-epiphanies
-epiphenomena
-epiphenomenon
-episcopacy
-episcopal
-episcopalian
-episcopate
-episode
-episodes
-episodic
-episodically
-epistemic
-epistemological
-epistemology
-epistle
-epistles
-epistolary
-epitap
-epitaph
-epitaphs
-epitaxial
-epitaxy
-epithelial
-epithelium
-epithet
-epithetic
-epithets
-epitome
-epitomise
-epitomised
-epitomises
-epoch
-epochal
-epochs
-epoxies
-epoxy
-epsilon
-equable
-equably
-equal
-equalisation
-equalise
-equalised
-equaliser
-equalisers
-equalising
-equalities
-equality
-equalled
-equalling
-equally
-equals
-equanimity
-equate
-equated
-equates
-equating
-equation
-equations
-equator
-equatorial
-equerry
-equestrian
-equestrianism
-equiangular
-equidistant
-equilateral
-equilibrating
-equilibration
-equilibria
-equilibrium
-equine
-equinoctial
-equinox
-equinoxes
-equip
-equipartition
-equipment
-equipments
-equipped
-equipping
-equips
-equitable
-equitably
-equities
-equity
-equivalence
-equivalences
-equivalent
-equivalently
-equivalents
-equivocal
-equivocated
-equivocating
-equivocation
-equivocations
-era
-eradicate
-eradicated
-eradicating
-eradication
-eras
-erasable
-erase
-erased
-eraser
-erasers
-erases
-erasing
-erasure
-erasures
-erbium
-ere
-erect
-erected
-erecter
-erectile
-erecting
-erection
-erections
-erectly
-erects
-erg
-ergo
-ergodic
-ergonomic
-ergonomically
-ergonomics
-ergophobia
-ergot
-ergs
-erica
-ericas
-eritrea
-ermine
-erode
-eroded
-erodes
-eroding
-erogenous
-eros
-erose
-erosion
-erosional
-erosions
-erosive
-erotic
-erotica
-erotically
-eroticism
-err
-errand
-errands
-errant
-errata
-erratic
-erratically
-erratum
-erred
-erring
-erroneous
-erroneously
-error
-errors
-errs
-ersatz
-erst
-erstwhile
-erudite
-erudition
-erupt
-erupted
-erupting
-eruption
-eruptions
-eruptive
-erupts
-erysipelas
-esau
-escalade
-escalate
-escalated
-escalates
-escalating
-escalation
-escalator
-escalators
-escapade
-escapades
-escape
-escaped
-escapee
-escapees
-escapement
-escapes
-escaping
-escapism
-escapist
-escapology
-escarp
-escarpment
-escarpments
-escarps
-eschatological
-eschatology
-eschew
-eschewed
-eschewing
-eschews
-escort
-escorted
-escorting
-escorts
-escudo
-eskimo
-esoteric
-esoterica
-esoterically
-espadrilles
-especial
-especially
-espied
-espionage
-esplanade
-espousal
-espouse
-espoused
-espouses
-espousing
-espresso
-esprit
-espy
-espying
-esquire
-esquires
-essay
-essayed
-essayist
-essayists
-essays
-essen
-essence
-essences
-essential
-essentialism
-essentialist
-essentially
-essentials
-est
-establish
-established
-establishes
-establishing
-establishment
-establishments
-estate
-estates
-esteem
-esteemed
-esteems
-ester
-esters
-esthete
-esthetic
-estimable
-estimate
-estimated
-estimates
-estimating
-estimation
-estimations
-estimator
-estimators
-estonia
-estranged
-estrangement
-estrangements
-estuaries
-estuarine
-estuary
-eta
-etal
-etcetera
-etch
-etched
-etcher
-etchers
-etches
-etching
-etchings
-eternal
-eternally
-eternity
-ethane
-ethanol
-ether
-ethereal
-ethereally
-etherised
-ethic
-ethical
-ethically
-ethicist
-ethics
-ethiopia
-ethnic
-ethnical
-ethnically
-ethnicity
-ethnocentric
-ethnographer
-ethnographers
-ethnographic
-ethnography
-ethnological
-ethnology
-ethological
-ethologist
-ethologists
-ethology
-ethos
-ethyl
-ethylene
-etiquette
-etna
-etudes
-etui
-etymological
-etymologically
-etymologies
-etymologist
-etymologists
-etymology
-eucalyptus
-eugenic
-eugenics
-eukaryote
-eukaryotes
-eukaryotic
-eulogies
-eulogise
-eulogises
-eulogising
-eulogistic
-eulogy
-eunuch
-eunuchs
-euphemism
-euphemisms
-euphemistic
-euphemistically
-euphonious
-euphonium
-euphoniums
-euphony
-euphoria
-euphoric
-eurasia
-eurasian
-eureka
-eurekas
-euro
-europe
-european
-eurydice
-eutectic
-euthanasia
-evacuate
-evacuated
-evacuating
-evacuation
-evacuations
-evacuee
-evacuees
-evadable
-evade
-evaded
-evader
-evaders
-evades
-evading
-evaluable
-evaluate
-evaluated
-evaluates
-evaluating
-evaluation
-evaluational
-evaluations
-evaluative
-evaluator
-evaluators
-evanescent
-evangelical
-evangelicalism
-evangelicals
-evangelisation
-evangelise
-evangelising
-evangelism
-evangelist
-evangelistic
-evangelists
-evaporate
-evaporated
-evaporates
-evaporating
-evaporation
-evaporator
-evasion
-evasions
-evasive
-evasively
-evasiveness
-eve
-even
-evened
-evener
-evenhanded
-evening
-evenings
-evenly
-evenness
-evens
-evensong
-event
-eventful
-eventide
-eventing
-events
-eventual
-eventualities
-eventuality
-eventually
-ever
-everchanging
-everest
-evergreen
-evergreens
-everincreasing
-everlasting
-everlastingly
-everliving
-evermore
-everpresent
-eversion
-everting
-every
-everybody
-everyday
-everyone
-everything
-everywhere
-eves
-evict
-evicted
-evicting
-eviction
-evictions
-evicts
-evidence
-evidenced
-evidences
-evident
-evidential
-evidently
-evil
-evildoer
-evilly
-evilness
-evils
-evince
-evinced
-evinces
-evincing
-eviscerate
-evocation
-evocations
-evocative
-evocatively
-evoke
-evoked
-evokes
-evoking
-evolute
-evolution
-evolutionarily
-evolutionary
-evolutionism
-evolutionist
-evolutionists
-evolutions
-evolve
-evolved
-evolves
-evolving
-ewe
-ewes
-exacerbate
-exacerbated
-exacerbates
-exacerbating
-exacerbation
-exact
-exacted
-exacting
-exaction
-exactitude
-exactly
-exactness
-exacts
-exaggerate
-exaggerated
-exaggeratedly
-exaggerates
-exaggerating
-exaggeration
-exaggerations
-exalt
-exaltation
-exalted
-exalting
-exalts
-exam
-examinable
-examination
-examinations
-examine
-examined
-examinees
-examiner
-examiners
-examines
-examining
-example
-examples
-exams
-exasperate
-exasperated
-exasperatedly
-exasperating
-exasperation
-excavate
-excavated
-excavating
-excavation
-excavations
-excavator
-excavators
-exceed
-exceeded
-exceeding
-exceedingly
-exceeds
-excel
-excelled
-excellence
-excellencies
-excellency
-excellent
-excellently
-excelling
-excels
-excelsior
-except
-excepted
-excepting
-exception
-exceptionable
-exceptional
-exceptionally
-exceptions
-excepts
-excerpt
-excerpted
-excerpts
-excess
-excesses
-excessive
-excessively
-exchange
-exchangeable
-exchanged
-exchanger
-exchangers
-exchanges
-exchanging
-exchequer
-excise
-excised
-excising
-excision
-excitability
-excitable
-excitation
-excitations
-excite
-excited
-excitedly
-excitement
-excitements
-excites
-exciting
-excitingly
-exciton
-exclaim
-exclaimed
-exclaiming
-exclaims
-exclamation
-exclamations
-exclamatory
-exclude
-excluded
-excludes
-excluding
-exclusion
-exclusionary
-exclusions
-exclusive
-exclusively
-exclusiveness
-exclusivist
-exclusivity
-excommunicate
-excommunicated
-excommunicating
-excommunication
-excrete
-excruciating
-excruciatingly
-excruciation
-excursion
-excursionists
-excursions
-excursus
-excusable
-excuse
-excused
-excuses
-excusing
-executable
-execute
-executed
-executes
-executing
-execution
-executioner
-executioners
-executions
-executive
-executives
-executor
-executors
-exegesis
-exegetical
-exemplar
-exemplars
-exemplary
-exemplification
-exemplified
-exemplifies
-exemplify
-exemplifying
-exempt
-exempted
-exempting
-exemption
-exemptions
-exempts
-exercisable
-exercise
-exercised
-exerciser
-exercises
-exercising
-exert
-exerted
-exerting
-exertion
-exertions
-exerts
-exes
-exeunt
-exfoliation
-exhalation
-exhalations
-exhale
-exhaled
-exhales
-exhaling
-exhaust
-exhausted
-exhaustible
-exhausting
-exhaustion
-exhaustive
-exhaustively
-exhausts
-exhibit
-exhibited
-exhibiting
-exhibition
-exhibitioner
-exhibitioners
-exhibitionism
-exhibitionist
-exhibitionists
-exhibitions
-exhibitor
-exhibitors
-exhibits
-exhilarate
-exhilarated
-exhilarating
-exhilaration
-exhort
-exhortation
-exhortations
-exhorted
-exhorting
-exhorts
-exhumation
-exhume
-exhumed
-exhumes
-exhuming
-exhusband
-exigencies
-exigency
-exigent
-exiguous
-exile
-exiled
-exiles
-exiling
-exist
-existed
-existence
-existences
-existent
-existential
-existentialism
-existentialist
-existentialistic
-existentially
-existing
-exists
-exit
-exited
-exiting
-exits
-exmember
-exmembers
-exocrine
-exoderm
-exodus
-exogenous
-exogenously
-exonerate
-exonerated
-exonerates
-exonerating
-exoneration
-exorbitant
-exorbitantly
-exorcise
-exorcised
-exorcising
-exorcism
-exorcisms
-exorcist
-exoskeleton
-exothermic
-exothermically
-exotic
-exotica
-exotically
-exoticism
-expand
-expandability
-expandable
-expanded
-expander
-expanding
-expands
-expanse
-expanses
-expansible
-expansion
-expansionary
-expansionism
-expansionist
-expansions
-expansive
-expansively
-expansiveness
-expatriate
-expatriated
-expatriates
-expect
-expectancies
-expectancy
-expectant
-expectantly
-expectation
-expectational
-expectations
-expected
-expecting
-expectorate
-expectorated
-expectoration
-expects
-expedience
-expediency
-expedient
-expedients
-expedite
-expedited
-expedites
-expediting
-expedition
-expeditionary
-expeditions
-expeditious
-expeditiously
-expel
-expelled
-expelling
-expels
-expend
-expendable
-expended
-expending
-expenditure
-expenditures
-expends
-expense
-expenses
-expensive
-expensively
-experience
-experienced
-experiences
-experiencing
-experiential
-experiment
-experimental
-experimentalist
-experimentalists
-experimentally
-experimentation
-experimented
-experimenter
-experimenters
-experimenting
-experiments
-expert
-expertise
-expertly
-expertness
-experts
-expiate
-expiation
-expiatory
-expiration
-expiratory
-expire
-expired
-expires
-expiring
-expiry
-explain
-explainable
-explained
-explaining
-explains
-explanation
-explanations
-explanatory
-expletive
-expletives
-explicable
-explicate
-explicated
-explication
-explicative
-explicit
-explicitly
-explicitness
-explode
-exploded
-exploder
-exploders
-explodes
-exploding
-exploit
-exploitable
-exploitation
-exploitations
-exploitative
-exploited
-exploiter
-exploiters
-exploiting
-exploits
-explorable
-exploration
-explorations
-exploratory
-explore
-explored
-explorer
-explorers
-explores
-exploring
-explosion
-explosions
-explosive
-explosively
-explosiveness
-explosives
-expo
-exponent
-exponential
-exponentially
-exponentiation
-exponents
-export
-exportability
-exportable
-exported
-exporter
-exporters
-exporting
-exports
-expose
-exposed
-exposes
-exposing
-exposition
-expositions
-expository
-expostulate
-expostulated
-expostulating
-expostulation
-expostulations
-exposure
-exposures
-expound
-expounded
-expounding
-expounds
-express
-expressed
-expresses
-expressible
-expressing
-expression
-expressionism
-expressionist
-expressionistic
-expressionists
-expressionless
-expressionlessly
-expressions
-expressive
-expressively
-expressiveness
-expressly
-expropriate
-expropriated
-expropriation
-expropriations
-expulsion
-expulsions
-expunge
-expunged
-expunges
-expunging
-expurgate
-expurgated
-expurgating
-exquisite
-exquisitely
-exquisiteness
-ext
-extend
-extendability
-extendable
-extended
-extender
-extenders
-extendible
-extending
-extends
-extensibility
-extensible
-extension
-extensional
-extensionally
-extensions
-extensive
-extensively
-extensiveness
-extensors
-extent
-extents
-extenuate
-extenuated
-extenuating
-extenuation
-exterior
-exteriors
-exterminate
-exterminated
-exterminates
-exterminating
-extermination
-exterminations
-exterminator
-exterminators
-extern
-external
-externalised
-externally
-externals
-externs
-extinct
-extinction
-extinctions
-extinguish
-extinguished
-extinguisher
-extinguishers
-extinguishes
-extinguishing
-extinguishment
-extirpate
-extirpation
-extol
-extolled
-extolling
-extols
-extort
-extorted
-extorting
-extortion
-extortionate
-extortionately
-extortionists
-extorts
-extra
-extracellular
-extract
-extractable
-extracted
-extracting
-extraction
-extractions
-extractive
-extractor
-extracts
-extraditable
-extradite
-extradited
-extraditing
-extradition
-extragalactic
-extrajudicial
-extralinguistic
-extramarital
-extramural
-extraneous
-extraordinarily
-extraordinary
-extrapolate
-extrapolated
-extrapolating
-extrapolation
-extrapolations
-extras
-extrasolar
-extraterrestrial
-extraterrestrials
-extraterritorial
-extravagance
-extravagances
-extravagant
-extravagantly
-extravaganza
-extravaganzas
-extrema
-extremal
-extreme
-extremely
-extremes
-extremest
-extremism
-extremist
-extremists
-extremities
-extremity
-extricate
-extricated
-extricating
-extrication
-extrinsic
-extrinsically
-extroversion
-extrovert
-extroverts
-extrude
-extruded
-extrusion
-extrusions
-exuberance
-exuberant
-exuberantly
-exudate
-exude
-exuded
-exudes
-exuding
-exult
-exultant
-exultantly
-exultation
-exulted
-exulting
-exultingly
-exults
-exwife
-exwives
-eye
-eyeball
-eyeballs
-eyebrow
-eyebrows
-eyecatching
-eyed
-eyeful
-eyeglass
-eyeglasses
-eyeing
-eyelash
-eyelashes
-eyeless
-eyelet
-eyelets
-eyelevel
-eyelid
-eyelids
-eyelike
-eyeliner
-eyepatch
-eyepiece
-eyes
-eyeshadow
-eyesight
-eyesore
-eyesores
-eyeteeth
-eyetooth
-eyewash
-eyewitness
-eyewitnesses
-fab
-fable
-fabled
-fables
-fabric
-fabricate
-fabricated
-fabricates
-fabricating
-fabrication
-fabrications
-fabricator
-fabrics
-fabulists
-fabulous
-fabulously
-facade
-facades
-face
-faced
-faceless
-facelift
-faceplate
-facer
-facers
-faces
-facet
-faceted
-faceting
-facetious
-facetiously
-facetiousness
-facets
-facia
-facial
-facials
-facile
-facilitate
-facilitated
-facilitates
-facilitating
-facilitation
-facilitative
-facilitator
-facilitators
-facilities
-facility
-facing
-facings
-facsimile
-facsimiles
-fact
-faction
-factional
-factionalism
-factions
-factious
-factitious
-factor
-factored
-factorial
-factorials
-factories
-factoring
-factorisable
-factorisation
-factorisations
-factorise
-factorised
-factorises
-factorising
-factors
-factory
-factotum
-facts
-factual
-factually
-faculties
-faculty
-fad
-fade
-faded
-fadeout
-fades
-fading
-fads
-faecal
-faeces
-fag
-faggot
-faggots
-fagot
-fags
-fail
-failed
-failing
-failings
-fails
-failure
-failures
-faint
-fainted
-fainter
-faintest
-fainthearted
-fainting
-faintly
-faintness
-faints
-fair
-fairer
-fairest
-fairground
-fairgrounds
-fairies
-fairing
-fairish
-fairly
-fairness
-fairs
-fairsex
-fairway
-fairways
-fairy
-fairytale
-faith
-faithful
-faithfully
-faithfulness
-faithless
-faithlessness
-faiths
-fake
-faked
-fakers
-fakery
-fakes
-faking
-falcon
-falconer
-falconry
-falcons
-fall
-fallacies
-fallacious
-fallacy
-fallen
-faller
-fallers
-fallguy
-fallibility
-fallible
-falling
-fallopian
-fallout
-fallow
-falls
-false
-falsebay
-falsehood
-falsehoods
-falsely
-falseness
-falser
-falsetto
-falsifiability
-falsifiable
-falsification
-falsifications
-falsified
-falsifier
-falsifiers
-falsifies
-falsify
-falsifying
-falsities
-falsity
-falter
-faltered
-faltering
-falteringly
-falters
-fame
-famed
-familial
-familiar
-familiarisation
-familiarise
-familiarised
-familiarising
-familiarities
-familiarity
-familiarly
-families
-family
-famine
-famines
-famish
-famished
-famous
-famously
-fan
-fanatic
-fanatical
-fanatically
-fanaticism
-fanatics
-fanbelt
-fanciable
-fancied
-fancier
-fanciers
-fancies
-fanciest
-fanciful
-fancifully
-fancy
-fancying
-fandango
-fanfare
-fanfares
-fang
-fangs
-fanlight
-fanned
-fanning
-fanny
-fans
-fantail
-fantails
-fantasia
-fantastic
-far
-farad
-faraday
-faraway
-farce
-farces
-farcical
-fare
-fared
-fares
-farewell
-farewells
-farfetched
-farflung
-faring
-farm
-farmed
-farmer
-farmers
-farmhouse
-farmhouses
-farming
-farmings
-farmland
-farms
-farmstead
-farmsteads
-farmyard
-farmyards
-faroff
-farout
-farrago
-farreaching
-farrier
-farriers
-farrow
-farseeing
-farsighted
-farther
-farthest
-farthing
-farthings
-fascia
-fascias
-fascinate
-fascinated
-fascinates
-fascinating
-fascinatingly
-fascination
-fascinations
-fascism
-fascist
-fascists
-fashion
-fashionable
-fashionably
-fashioned
-fashioning
-fashions
-fast
-fasted
-fasten
-fastened
-fastener
-fasteners
-fastening
-fastenings
-fastens
-faster
-fastest
-fastidious
-fastidiously
-fastidiousness
-fasting
-fastings
-fastness
-fastnesses
-fasts
-fat
-fatal
-fatalism
-fatalist
-fatalistic
-fatalistically
-fatalities
-fatality
-fatally
-fatcat
-fate
-fated
-fateful
-fates
-fatheadedness
-father
-fathered
-fatherhood
-fathering
-fatherinlaw
-fatherland
-fatherless
-fatherly
-fathers
-fathersinlaw
-fathom
-fathomed
-fathoming
-fathomless
-fathoms
-fatigue
-fatigued
-fatigues
-fatiguing
-fatless
-fatness
-fats
-fatted
-fatten
-fattened
-fattening
-fattens
-fatter
-fattest
-fattier
-fattiest
-fatty
-fatuity
-fatuous
-fatuously
-fatwa
-faucet
-faucets
-fault
-faulted
-faulting
-faultless
-faultlessly
-faults
-faulty
-faun
-fauna
-faunal
-faunas
-fauns
-faust
-faustus
-favour
-favourable
-favourably
-favoured
-favouring
-favourite
-favourites
-favouritism
-favours
-fawn
-fawned
-fawning
-fawningly
-fawns
-fax
-faxed
-faxes
-faxing
-fealty
-fear
-feared
-fearful
-fearfully
-fearfulness
-fearing
-fearless
-fearlessly
-fearlessness
-fears
-fearsome
-fearsomely
-fearsomeness
-feasibility
-feasible
-feasibly
-feast
-feasted
-feasting
-feasts
-feat
-feather
-feathered
-feathering
-featherlight
-feathers
-featherweight
-feathery
-feats
-feature
-featured
-featureless
-features
-featuring
-febrile
-february
-feckless
-fecklessness
-fecund
-fecundity
-fed
-federal
-federalism
-federalist
-federalists
-federally
-federate
-federated
-federation
-federations
-fedora
-feds
-fedup
-fee
-feeble
-feebleminded
-feebleness
-feebler
-feeblest
-feebly
-feed
-feedback
-feeder
-feeders
-feeding
-feedings
-feeds
-feedstock
-feedstuffs
-feel
-feeler
-feelers
-feeling
-feelingly
-feelings
-feels
-fees
-feet
-feign
-feigned
-feigning
-feigns
-feint
-feinted
-feinting
-feints
-feldspar
-feldspars
-felicia
-felicitation
-felicitations
-felicities
-felicitous
-felicity
-feline
-felines
-fell
-fellatio
-felled
-feller
-felling
-fellow
-fellows
-fellowship
-fellowships
-fells
-felon
-felonious
-felons
-felony
-felt
-feltpen
-female
-femaleness
-females
-feminine
-femininely
-femininity
-feminism
-feminist
-feminists
-femur
-femurs
-fen
-fence
-fenced
-fencepost
-fencer
-fencers
-fences
-fencing
-fencings
-fend
-fended
-fender
-fenders
-fending
-fends
-fenland
-fennel
-fens
-feral
-ferment
-fermentation
-fermented
-fermenting
-ferments
-fermion
-fermions
-fern
-ferns
-ferny
-ferocious
-ferociously
-ferociousness
-ferocity
-ferret
-ferreted
-ferreting
-ferrets
-ferric
-ferried
-ferries
-ferrite
-ferromagnetic
-ferrous
-ferrule
-ferry
-ferrying
-ferryman
-fertile
-fertilisation
-fertilise
-fertilised
-fertiliser
-fertilisers
-fertilises
-fertilising
-fertility
-fervent
-fervently
-fervid
-fervidly
-fervour
-fescue
-fest
-festal
-fester
-festered
-festering
-festers
-festival
-festivals
-festive
-festivities
-festivity
-festoon
-festooned
-festooning
-festoons
-fetal
-fetch
-fetched
-fetches
-fetching
-fete
-feted
-fetes
-fetid
-fetish
-fetishes
-fetishism
-fetishist
-fetishistic
-fetishists
-fetlock
-fetlocks
-fetter
-fettered
-fetters
-fettle
-fetus
-feud
-feudal
-feudalism
-feuded
-feuding
-feudist
-feuds
-fever
-fevered
-feverish
-feverishly
-fevers
-few
-fewer
-fewest
-fewness
-fez
-fiance
-fiancee
-fiasco
-fiat
-fib
-fibbed
-fibber
-fibbers
-fibbing
-fibers
-fibre
-fibreboard
-fibred
-fibreglass
-fibres
-fibrillating
-fibrillation
-fibroblast
-fibroblasts
-fibrosis
-fibrous
-fibs
-fibula
-fiche
-fiches
-fickle
-fickleness
-fiction
-fictional
-fictions
-fictitious
-fictive
-ficus
-fiddle
-fiddled
-fiddler
-fiddlers
-fiddles
-fiddlesticks
-fiddling
-fiddlings
-fiddly
-fidelity
-fidget
-fidgeted
-fidgeting
-fidgets
-fidgety
-fiduciary
-fief
-fiefdom
-fiefdoms
-fiefs
-field
-fielded
-fielder
-fielders
-fielding
-fields
-fieldwork
-fieldworker
-fieldworkers
-fiend
-fiendish
-fiendishly
-fiends
-fierce
-fiercely
-fierceness
-fiercer
-fiercest
-fierier
-fieriest
-fierily
-fiery
-fiesta
-fiestas
-fife
-fifes
-fifteen
-fifteenth
-fifth
-fifthly
-fifths
-fifties
-fiftieth
-fifty
-fig
-fight
-fightback
-fighter
-fighters
-fighting
-fights
-figleaf
-figment
-figments
-figs
-figtree
-figural
-figuration
-figurative
-figuratively
-figure
-figured
-figurehead
-figureheads
-figurer
-figures
-figurine
-figurines
-figuring
-fiji
-fijians
-filament
-filamentary
-filamentous
-filaments
-filch
-filched
-file
-filed
-filer
-filers
-files
-filet
-filial
-filibuster
-filigree
-filing
-filings
-fill
-filled
-filler
-fillers
-fillet
-fillets
-fillies
-filling
-fillings
-fillip
-fills
-filly
-film
-filmed
-filmic
-filming
-filmmakers
-films
-filmset
-filmy
-filter
-filtered
-filtering
-filters
-filth
-filthier
-filthiest
-filthily
-filthy
-filtrate
-filtration
-fin
-final
-finale
-finales
-finalisation
-finalise
-finalised
-finalising
-finalist
-finalists
-finality
-finally
-finals
-finance
-financed
-finances
-financial
-financially
-financier
-financiers
-financing
-finch
-finches
-find
-findable
-finder
-finders
-finding
-findings
-finds
-fine
-fined
-finely
-fineness
-finer
-finery
-fines
-finesse
-finest
-finetune
-finetuned
-finetunes
-finetuning
-finger
-fingerboard
-fingered
-fingering
-fingerings
-fingerless
-fingermarks
-fingernail
-fingernails
-fingerprint
-fingerprinted
-fingerprinting
-fingerprints
-fingers
-fingertip
-fingertips
-finial
-finicky
-fining
-finis
-finish
-finished
-finisher
-finishers
-finishes
-finishing
-finite
-finitely
-finiteness
-finland
-finn
-finned
-finnish
-fins
-fiord
-fiords
-fir
-fire
-firearm
-firearms
-fireball
-fireballs
-firebomb
-firebombed
-firebombing
-firebombs
-firebox
-firebrand
-firecontrol
-fired
-firefight
-firefighter
-firefighters
-firefighting
-fireflies
-firefly
-fireguard
-firelight
-firelighters
-fireman
-firemen
-fireplace
-fireplaces
-firepower
-fireproof
-fireproofed
-firer
-fires
-fireside
-firesides
-firewood
-firework
-fireworks
-firing
-firings
-firkin
-firm
-firmament
-firmed
-firmer
-firmest
-firming
-firmly
-firmness
-firms
-firmware
-firs
-first
-firstaid
-firstborn
-firstborns
-firsthand
-firstly
-firsts
-firth
-fiscal
-fiscally
-fish
-fished
-fisher
-fisheries
-fisherman
-fishermen
-fishers
-fishery
-fishes
-fishhook
-fishhooks
-fishier
-fishiest
-fishing
-fishings
-fishlike
-fishmonger
-fishmongers
-fishnet
-fishwife
-fishy
-fissile
-fission
-fissions
-fissure
-fissured
-fissures
-fist
-fisted
-fistful
-fisticuffs
-fists
-fistula
-fit
-fitful
-fitfully
-fitfulness
-fitly
-fitment
-fitments
-fitness
-fits
-fitted
-fitter
-fitters
-fittest
-fitting
-fittingly
-fittings
-five
-fivefold
-fiver
-fivers
-fives
-fix
-fixable
-fixate
-fixated
-fixates
-fixation
-fixations
-fixative
-fixed
-fixedly
-fixer
-fixers
-fixes
-fixing
-fixings
-fixture
-fixtures
-fizz
-fizzed
-fizzes
-fizzier
-fizziest
-fizzing
-fizzle
-fizzled
-fizzles
-fizzy
-fjord
-fjords
-flab
-flabbergasted
-flabbier
-flabbiest
-flabby
-flabs
-flaccid
-flaccidity
-flack
-flag
-flagella
-flagellate
-flagellation
-flagged
-flagging
-flagon
-flagons
-flagpole
-flagrant
-flagrantly
-flags
-flagship
-flagships
-flair
-flak
-flake
-flaked
-flakes
-flakiest
-flaking
-flaky
-flamboyance
-flamboyant
-flamboyantly
-flame
-flamed
-flamenco
-flameproof
-flames
-flaming
-flamingo
-flammability
-flammable
-flan
-flange
-flanged
-flanges
-flank
-flanked
-flanker
-flanking
-flanks
-flannel
-flannelette
-flannels
-flans
-flap
-flapjack
-flapped
-flapper
-flappers
-flapping
-flaps
-flare
-flared
-flares
-flareup
-flareups
-flaring
-flash
-flashback
-flashbacks
-flashbulb
-flashed
-flasher
-flashes
-flashier
-flashiest
-flashily
-flashing
-flashlight
-flashlights
-flashpoint
-flashpoints
-flashy
-flask
-flasks
-flat
-flatfish
-flatly
-flatmate
-flatmates
-flatness
-flats
-flatten
-flattened
-flattening
-flattens
-flatter
-flattered
-flatterer
-flatterers
-flattering
-flatteringly
-flatters
-flattery
-flattest
-flattish
-flatulence
-flatulent
-flatus
-flatworms
-flaunt
-flaunted
-flaunting
-flaunts
-flautist
-flavour
-flavoured
-flavouring
-flavourings
-flavours
-flaw
-flawed
-flawless
-flawlessly
-flaws
-flax
-flaxen
-flay
-flayed
-flayer
-flayers
-flaying
-flea
-fleabites
-fleas
-fleck
-flecked
-flecks
-fled
-fledge
-fledged
-fledgeling
-fledges
-fledgling
-fledglings
-flee
-fleece
-fleeced
-fleeces
-fleecing
-fleecy
-fleeing
-flees
-fleet
-fleeted
-fleeter
-fleeting
-fleetingly
-fleetly
-fleets
-flemish
-flesh
-fleshed
-flesher
-fleshes
-fleshier
-fleshiest
-fleshing
-fleshless
-fleshly
-fleshpots
-fleshy
-flew
-flex
-flexed
-flexes
-flexibilities
-flexibility
-flexible
-flexibly
-flexile
-flexing
-flexion
-flexor
-flick
-flicked
-flicker
-flickered
-flickering
-flickers
-flickery
-flicking
-flicks
-flier
-fliers
-flies
-flight
-flighted
-flightless
-flightpath
-flights
-flighty
-flimsier
-flimsiest
-flimsily
-flimsiness
-flimsy
-flinch
-flinched
-flinching
-fling
-flinging
-flings
-flint
-flintlock
-flintlocks
-flints
-flinty
-flip
-flipflop
-flipflops
-flippable
-flippancy
-flippant
-flippantly
-flipped
-flipper
-flippers
-flipping
-flips
-flirt
-flirtation
-flirtations
-flirtatious
-flirtatiously
-flirted
-flirting
-flirts
-flit
-fliting
-flits
-flitted
-flitting
-float
-floated
-floater
-floaters
-floating
-floats
-floaty
-flock
-flocked
-flocking
-flocks
-floe
-flog
-flogged
-flogger
-floggers
-flogging
-floggings
-flogs
-flood
-flooded
-floodgates
-flooding
-floodlight
-floodlighting
-floodlights
-floodlit
-floods
-floor
-floorboard
-floorboards
-floored
-flooring
-floors
-floorspace
-floozie
-floozies
-floozy
-flop
-flopped
-flopper
-floppier
-floppies
-floppiest
-flopping
-floppy
-flops
-flora
-floral
-floras
-floreat
-florence
-floret
-florid
-florida
-floridly
-florin
-florins
-florist
-florists
-floss
-flosses
-flossing
-flossy
-flotation
-flotations
-flotilla
-flotillas
-flotsam
-flounce
-flounced
-flounces
-flouncing
-flounder
-floundered
-floundering
-flounders
-flour
-floured
-flourish
-flourished
-flourishes
-flourishing
-flours
-floury
-flout
-flouted
-flouting
-flouts
-flow
-flowed
-flower
-flowered
-flowering
-flowerless
-flowerpot
-flowerpots
-flowers
-flowery
-flowing
-flown
-flows
-flub
-flubbed
-fluctuate
-fluctuated
-fluctuates
-fluctuating
-fluctuation
-fluctuations
-flue
-fluency
-fluent
-fluently
-flues
-fluff
-fluffed
-fluffier
-fluffiest
-fluffing
-fluffs
-fluffy
-fluid
-fluidised
-fluidity
-fluidly
-fluids
-fluke
-flukes
-flukey
-flukier
-flukiest
-flumes
-flumped
-flung
-flunked
-fluor
-fluoresce
-fluorescence
-fluorescent
-fluoresces
-fluorescing
-fluoridation
-fluoride
-fluorine
-fluorocarbon
-fluorocarbons
-flurried
-flurries
-flurry
-flush
-flushed
-flusher
-flushes
-flushing
-fluster
-flustered
-flute
-fluted
-flutes
-fluting
-flutist
-flutter
-fluttered
-fluttering
-flutters
-fluttery
-fluvial
-flux
-fluxes
-fly
-flyaway
-flyer
-flyers
-flyhalf
-flying
-flyover
-flyovers
-flypaper
-flypast
-flyway
-flyways
-flyweight
-flywheel
-foal
-foaled
-foaling
-foals
-foam
-foamed
-foamier
-foamiest
-foaming
-foams
-foamy
-fob
-fobbed
-fobbing
-fobs
-focal
-focally
-foci
-focus
-focused
-focuses
-focusing
-focussed
-focusses
-focussing
-fodder
-fodders
-foe
-foehns
-foes
-foetal
-foetid
-foetus
-foetuses
-fog
-fogbank
-fogey
-fogged
-foggier
-foggiest
-fogging
-foggy
-foghorn
-foghorns
-fogs
-fogy
-foible
-foibles
-foil
-foiled
-foiling
-foils
-foist
-foisted
-foisting
-fold
-folded
-folder
-folders
-folding
-folds
-foliage
-foliate
-foliated
-folio
-folk
-folkart
-folkish
-folklore
-folklorist
-folklorists
-folks
-folktale
-follicle
-follicles
-follicular
-follies
-follow
-followable
-followed
-follower
-followers
-following
-followings
-follows
-folly
-foment
-fomented
-fomenting
-fond
-fondant
-fonder
-fondest
-fondle
-fondled
-fondles
-fondling
-fondly
-fondness
-fondue
-fondues
-font
-fontanel
-fonts
-food
-foodless
-foods
-foodstuff
-foodstuffs
-fool
-fooled
-foolery
-foolhardily
-foolhardiness
-foolhardy
-fooling
-foolish
-foolishly
-foolishness
-foolproof
-fools
-foolscap
-foot
-footage
-footages
-football
-footballer
-footballers
-footballing
-footballs
-footbath
-footbridge
-footed
-footfall
-footfalls
-footgear
-foothill
-foothills
-foothold
-footholds
-footing
-footings
-footless
-footlights
-footloose
-footman
-footmarks
-footmen
-footnote
-footnotes
-footpads
-footpath
-footpaths
-footplate
-footprint
-footprints
-footrest
-foots
-footsie
-footsore
-footstep
-footsteps
-footstool
-footstools
-footway
-footwear
-footwork
-fop
-fops
-for
-forage
-foraged
-foragers
-forages
-foraging
-foramen
-foray
-forays
-forbad
-forbade
-forbear
-forbearance
-forbearing
-forbears
-forbid
-forbidden
-forbidding
-forbiddingly
-forbids
-forbore
-force
-forced
-forcefeed
-forcefeeding
-forceful
-forcefully
-forcefulness
-forceps
-forces
-forcible
-forcibly
-forcing
-ford
-forded
-fording
-fords
-fore
-forearm
-forearmed
-forearms
-forebear
-forebears
-foreboded
-foreboding
-forebodings
-forebrain
-forecast
-forecaster
-forecasters
-forecasting
-forecasts
-foreclose
-foreclosed
-foreclosure
-forecourt
-forecourts
-foredeck
-forefather
-forefathers
-forefinger
-forefingers
-forefront
-foregather
-foregathered
-forego
-foregoing
-foregone
-foreground
-foregrounded
-foregrounding
-foregrounds
-forehand
-forehead
-foreheads
-foreign
-foreigner
-foreigners
-foreignness
-foreknowledge
-foreland
-foreleg
-forelegs
-forelimbs
-forelock
-foreman
-foremen
-foremost
-forename
-forenames
-forensic
-forensically
-forepaw
-forepaws
-foreplay
-forerunner
-forerunners
-foresail
-foresaw
-foresee
-foreseeability
-foreseeable
-foreseeing
-foreseen
-foresees
-foreshadow
-foreshadowed
-foreshadowing
-foreshadows
-foreshore
-foreshores
-foreshortened
-foreshortening
-foresight
-foreskin
-foreskins
-forest
-forestall
-forestalled
-forestalling
-forestalls
-forested
-forester
-foresters
-forestry
-forests
-foretaste
-foretastes
-foretell
-foretelling
-forethought
-foretold
-forever
-forewarn
-forewarned
-forewarning
-foreword
-forewords
-forfeit
-forfeited
-forfeiting
-forfeits
-forfeiture
-forgave
-forge
-forged
-forger
-forgeries
-forgers
-forgery
-forges
-forget
-forgetful
-forgetfulness
-forgetmenot
-forgetmenots
-forgets
-forgettable
-forgetting
-forging
-forgings
-forgivable
-forgive
-forgiven
-forgiveness
-forgives
-forgiving
-forgo
-forgoing
-forgone
-forgot
-forgotten
-fork
-forked
-forking
-forks
-forlorn
-forlornly
-forlornness
-form
-formal
-formaldehyde
-formalin
-formalisation
-formalisations
-formalise
-formalised
-formalises
-formalising
-formalism
-formalisms
-formalist
-formalistic
-formalities
-formality
-formally
-formant
-format
-formated
-formation
-formations
-formative
-formats
-formatted
-formatting
-formed
-former
-formerly
-formers
-formic
-formidable
-formidably
-forming
-formless
-formlessness
-formosa
-forms
-formula
-formulae
-formulaic
-formulary
-formulas
-formulate
-formulated
-formulates
-formulating
-formulation
-formulations
-formulator
-fornicate
-fornicated
-fornicates
-fornicating
-fornication
-fornicator
-fornicators
-forsake
-forsaken
-forsakes
-forsaking
-forsook
-forswear
-forswearing
-forswore
-forsworn
-forsythia
-fort
-forte
-forth
-forthcoming
-forthright
-forthrightly
-forthrightness
-forthwith
-forties
-fortieth
-fortification
-fortifications
-fortified
-fortify
-fortifying
-fortissimo
-fortitude
-fortknox
-fortnight
-fortnightly
-fortnights
-fortress
-fortresses
-forts
-fortuitous
-fortuitously
-fortunate
-fortunately
-fortune
-fortunes
-fortuneteller
-fortunetellers
-fortunetelling
-forty
-forum
-forums
-forward
-forwarded
-forwarder
-forwarding
-forwardlooking
-forwardly
-forwardness
-forwards
-fossa
-fossil
-fossiliferous
-fossilise
-fossilised
-fossilising
-fossils
-foster
-fostered
-fostering
-fosters
-fought
-foul
-fouled
-fouler
-foulest
-fouling
-foully
-foulmouthed
-foulness
-fouls
-foulup
-foulups
-found
-foundation
-foundational
-foundations
-founded
-founder
-foundered
-foundering
-founders
-founding
-foundling
-foundries
-foundry
-founds
-fount
-fountain
-fountains
-founts
-four
-fourfold
-fours
-foursome
-fourteen
-fourteenth
-fourth
-fourthly
-fourths
-fowl
-fowls
-fox
-foxed
-foxes
-foxhole
-foxholes
-foxhounds
-foxhunt
-foxhunting
-foxhunts
-foxier
-foxiest
-foxily
-foxiness
-foxing
-foxtrot
-foxtrots
-foxy
-foyer
-foyers
-fracas
-fractal
-fractals
-fraction
-fractional
-fractionally
-fractionate
-fractionated
-fractionating
-fractionation
-fractions
-fractious
-fracture
-fractured
-fractures
-fracturing
-fragile
-fragility
-fragment
-fragmentary
-fragmentation
-fragmented
-fragmenting
-fragments
-fragrance
-fragrances
-fragrant
-frail
-frailer
-frailest
-frailly
-frailties
-frailty
-frame
-framed
-framer
-framers
-frames
-frameup
-framework
-frameworks
-framing
-franc
-france
-franchise
-franchised
-franchisee
-franchisees
-franchises
-franchising
-franchisor
-francophone
-francs
-frangipani
-frank
-franked
-franker
-frankest
-frankfurter
-frankincense
-franking
-frankly
-frankness
-franks
-frantic
-frantically
-fraternal
-fraternise
-fraternising
-fraternities
-fraternity
-fratricidal
-fratricide
-fraud
-frauds
-fraudster
-fraudsters
-fraudulent
-fraudulently
-fraught
-fray
-frayed
-fraying
-frays
-frazzle
-frazzled
-freak
-freaked
-freakish
-freaks
-freaky
-freckle
-freckled
-freckles
-free
-freebie
-freebooters
-freed
-freedom
-freedoms
-freefall
-freefalling
-freeforall
-freehand
-freehold
-freeholder
-freeholders
-freeholds
-freeing
-freelance
-freelancer
-freelancers
-freelances
-freelancing
-freely
-freeman
-freemasonry
-freemen
-freer
-freerange
-frees
-freesia
-freesias
-freestanding
-freestyle
-freeway
-freewheeling
-freewheels
-freeze
-freezer
-freezers
-freezes
-freezing
-freight
-freighted
-freighter
-freighters
-freights
-french
-frenetic
-frenetically
-frenzied
-frenziedly
-frenzies
-frenzy
-freon
-freons
-frequencies
-frequency
-frequent
-frequented
-frequenting
-frequently
-frequents
-fresco
-fresh
-freshen
-freshened
-freshener
-fresheners
-freshening
-freshens
-fresher
-freshers
-freshest
-freshly
-freshman
-freshmen
-freshness
-freshwater
-fret
-fretboard
-fretful
-fretfully
-fretfulness
-fretless
-frets
-fretsaw
-fretsaws
-fretted
-fretting
-fretwork
-freud
-freya
-friable
-friar
-friars
-friary
-fricative
-fricatives
-friction
-frictional
-frictionless
-frictions
-friday
-fridays
-fridge
-fridges
-fried
-friend
-friendless
-friendlessness
-friendlier
-friendlies
-friendliest
-friendlily
-friendliness
-friendly
-friends
-friendship
-friendships
-friers
-fries
-frieze
-friezes
-frigate
-frigates
-fright
-frighted
-frighten
-frightened
-frighteners
-frightening
-frighteningly
-frightens
-frightful
-frightfully
-frights
-frigid
-frigidity
-frigidly
-frijole
-frill
-frilled
-frillier
-frilliest
-frills
-frilly
-fringe
-fringed
-fringes
-fringing
-fringy
-frippery
-frisk
-frisked
-friskier
-friskiest
-friskily
-frisking
-frisks
-frisky
-frisson
-fritter
-frittered
-frittering
-fritters
-frivol
-frivolities
-frivolity
-frivolous
-frivolously
-frivols
-frizzle
-frizzles
-frizzy
-fro
-frock
-frocks
-frog
-froggy
-frogman
-frogmarched
-frogmen
-frogs
-frolic
-frolicked
-frolicking
-frolics
-frolicsome
-from
-frond
-fronds
-front
-frontage
-frontages
-frontal
-frontally
-frontals
-fronted
-frontier
-frontiers
-fronting
-frontispiece
-frontispieces
-frontline
-frontpage
-fronts
-frost
-frostbite
-frostbitten
-frosted
-frostier
-frostiest
-frostily
-frosting
-frosts
-frosty
-froth
-frothed
-frothier
-frothiest
-frothing
-froths
-frothy
-froward
-frown
-frowned
-frowning
-frowningly
-frowns
-froze
-frozen
-fructose
-frugal
-frugality
-frugally
-fruit
-fruitcake
-fruitcakes
-fruited
-fruiter
-fruitful
-fruitfully
-fruitfulness
-fruitier
-fruitiest
-fruitiness
-fruiting
-fruition
-fruitless
-fruitlessly
-fruitlessness
-fruits
-fruity
-frumps
-frumpy
-frustrate
-frustrated
-frustratedly
-frustrates
-frustrating
-frustratingly
-frustration
-frustrations
-frustum
-fry
-fryer
-fryers
-frying
-fryings
-fuchsia
-fuchsias
-fuddle
-fuddled
-fuddles
-fudge
-fudged
-fudges
-fudging
-fuel
-fuelled
-fuelling
-fuels
-fug
-fugal
-fugitive
-fugitives
-fugue
-fugues
-fuhrer
-fulcrum
-fulfil
-fulfilled
-fulfilling
-fulfilment
-fulfils
-full
-fullback
-fullbacks
-fullblooded
-fullblown
-fullbodied
-fullcolour
-fuller
-fullest
-fullgrown
-fulling
-fullish
-fulllength
-fullmoon
-fullness
-fullpage
-fullscale
-fullstop
-fullstops
-fulltime
-fulltimer
-fulltimers
-fully
-fulminant
-fulminate
-fulminating
-fulmination
-fulminations
-fulsome
-fulsomely
-fumarole
-fumaroles
-fumble
-fumbled
-fumbles
-fumbling
-fume
-fumed
-fumes
-fumigate
-fumigating
-fumigation
-fuming
-fumingly
-fun
-function
-functional
-functionalism
-functionalist
-functionalities
-functionality
-functionally
-functionaries
-functionary
-functioned
-functioning
-functionless
-functions
-fund
-fundamental
-fundamentalism
-fundamentalist
-fundamentalists
-fundamentally
-fundamentals
-funded
-fundholders
-fundholding
-funding
-fundings
-fundraiser
-fundraisers
-fundraising
-funds
-funeral
-funerals
-funerary
-funereal
-funfair
-fungal
-fungi
-fungicidal
-fungicide
-fungicides
-fungoid
-fungous
-fungus
-funguses
-funicular
-funk
-funked
-funkier
-funky
-funnel
-funnelled
-funnelling
-funnels
-funnier
-funnies
-funniest
-funnily
-funny
-fur
-furbished
-furbishing
-furies
-furious
-furiously
-furled
-furling
-furlong
-furlongs
-furlough
-furls
-furnace
-furnaces
-furnish
-furnished
-furnishers
-furnishes
-furnishing
-furnishings
-furniture
-furore
-furores
-furred
-furrier
-furriers
-furriest
-furriness
-furring
-furrow
-furrowed
-furrows
-furry
-furs
-further
-furtherance
-furthered
-furthering
-furthermore
-furthers
-furthest
-furtive
-furtively
-furtiveness
-fury
-furze
-fuse
-fused
-fuselage
-fuses
-fusible
-fusilier
-fusiliers
-fusillade
-fusing
-fusion
-fusions
-fuss
-fussed
-fusses
-fussier
-fussiest
-fussily
-fussiness
-fussing
-fussy
-fustian
-fusty
-futile
-futilely
-futility
-futon
-future
-futures
-futurism
-futurist
-futuristic
-futurists
-futurity
-futurologists
-fuzz
-fuzzed
-fuzzes
-fuzzier
-fuzziest
-fuzzily
-fuzziness
-fuzzy
-gab
-gabble
-gabbled
-gabbles
-gabbling
-gaberdine
-gable
-gabled
-gables
-gabon
-gad
-gadded
-gadding
-gadfly
-gadget
-gadgetry
-gadgets
-gaff
-gaffe
-gaffes
-gag
-gaga
-gage
-gagged
-gagging
-gaggle
-gaggled
-gaging
-gags
-gagster
-gaiety
-gaijin
-gaily
-gain
-gained
-gainer
-gainers
-gainful
-gainfully
-gaining
-gainly
-gains
-gainsay
-gainsaying
-gait
-gaiter
-gaiters
-gaits
-gal
-gala
-galactic
-galas
-galaxies
-galaxy
-gale
-galena
-gales
-galilean
-galileo
-gall
-gallant
-gallantly
-gallantries
-gallantry
-gallants
-galled
-galleon
-galleons
-galleried
-galleries
-gallery
-galley
-galleys
-gallic
-galling
-gallium
-gallivanted
-gallivanting
-gallon
-gallons
-gallop
-galloped
-galloping
-gallops
-gallows
-galls
-gallstones
-galop
-galore
-galoshes
-gals
-galvanic
-galvanise
-galvanised
-galvanising
-galvanometer
-galvanometric
-gambia
-gambian
-gambit
-gambits
-gamble
-gambled
-gambler
-gamblers
-gambles
-gambling
-gambol
-gambolling
-gambols
-game
-gamed
-gamekeeper
-gamekeepers
-gamely
-gamers
-games
-gamesmanship
-gamesmen
-gamete
-gametes
-gaming
-gamma
-gammon
-gamut
-gamy
-gander
-ganders
-gandhi
-gang
-ganged
-ganger
-gangers
-ganges
-ganging
-gangland
-ganglia
-gangling
-ganglion
-ganglionic
-gangly
-gangplank
-gangrene
-gangrenous
-gangs
-gangster
-gangsterism
-gangsters
-gangway
-gangways
-gannet
-gannets
-gantries
-gantry
-gaol
-gaoled
-gaoler
-gaolers
-gaols
-gap
-gape
-gaped
-gapes
-gaping
-gapingly
-gaps
-garage
-garaged
-garages
-garb
-garbage
-garbed
-garble
-garbled
-garbles
-garbling
-garbs
-garden
-gardener
-gardeners
-gardening
-gardens
-gargantuan
-gargle
-gargled
-gargles
-gargling
-gargoyle
-gargoyles
-garish
-garishly
-garland
-garlanded
-garlands
-garlic
-garment
-garments
-garner
-garnered
-garnering
-garnet
-garnets
-garnish
-garnished
-garnishing
-garotte
-garotted
-garottes
-garotting
-garret
-garrets
-garrison
-garrisoned
-garrisons
-garrotte
-garrotted
-garrottes
-garrotting
-garrulous
-garter
-garters
-gas
-gaseous
-gases
-gash
-gashed
-gashes
-gashing
-gasholder
-gasify
-gasket
-gaskets
-gaslight
-gasometer
-gasp
-gasped
-gasper
-gasping
-gasps
-gassed
-gasses
-gassier
-gassiest
-gassing
-gassy
-gastrectomy
-gastric
-gastritis
-gastroenteritis
-gastrointestinal
-gastronomic
-gastronomy
-gastropod
-gastropods
-gasworks
-gate
-gateau
-gateaus
-gateaux
-gatecrash
-gatecrashed
-gatecrasher
-gatecrashers
-gatecrashing
-gated
-gatehouse
-gatehouses
-gatekeeper
-gatekeepers
-gatepost
-gateposts
-gates
-gateway
-gateways
-gather
-gathered
-gatherer
-gatherers
-gathering
-gatherings
-gathers
-gating
-gauche
-gaucheness
-gaucherie
-gaud
-gaudiest
-gaudily
-gaudiness
-gaudy
-gauge
-gauged
-gauges
-gauging
-gaul
-gauls
-gaunt
-gaunter
-gauntlet
-gauntlets
-gauntly
-gauze
-gave
-gavel
-gavial
-gavials
-gavotte
-gawk
-gawking
-gawky
-gawpin
-gay
-gayest
-gays
-gaze
-gazebo
-gazed
-gazelle
-gazelles
-gazes
-gazette
-gazetteer
-gazettes
-gazing
-gdansk
-gear
-gearbox
-gearboxes
-geared
-gearing
-gears
-gearstick
-gecko
-geek
-geeks
-geese
-geezer
-geiger
-geisha
-geishas
-gel
-gelatin
-gelatine
-gelatinous
-gelding
-geldings
-gelignite
-gelled
-gels
-gem
-gemini
-gemmed
-gems
-gemsbok
-gemstone
-gemstones
-gen
-gender
-gendered
-genderless
-genders
-gene
-genealogical
-genealogies
-genealogist
-genealogy
-genera
-general
-generalisable
-generalisation
-generalisations
-generalise
-generalised
-generalises
-generalising
-generalist
-generalists
-generalities
-generality
-generally
-generals
-generalship
-generate
-generated
-generates
-generating
-generation
-generational
-generations
-generative
-generator
-generators
-generic
-generically
-generosities
-generosity
-generous
-generously
-genes
-genesis
-genetic
-genetically
-geneticist
-geneticists
-genetics
-genets
-geneva
-genial
-geniality
-genially
-genie
-genii
-genital
-genitalia
-genitals
-genitive
-genitives
-genius
-geniuses
-genoa
-genocidal
-genocide
-genome
-genomes
-genomic
-genotype
-genotypes
-genre
-genres
-gent
-genteel
-genteelest
-genteelly
-gentians
-gentile
-gentiles
-gentility
-gentle
-gentlefolk
-gentleman
-gentlemanly
-gentlemen
-gentleness
-gentler
-gentlest
-gentling
-gently
-gentrification
-gentrified
-gentrifying
-gentry
-gents
-genuflect
-genuflections
-genuine
-genuinely
-genuineness
-genus
-geocentric
-geochemical
-geochemistry
-geodesic
-geodesics
-geographer
-geographers
-geographic
-geographical
-geographically
-geography
-geologic
-geological
-geologically
-geologist
-geologists
-geology
-geomagnetic
-geomagnetically
-geomagnetism
-geometer
-geometers
-geometric
-geometrical
-geometrically
-geometries
-geometry
-geomorphological
-geomorphologists
-geomorphology
-geophysical
-geophysicist
-geophysicists
-geophysics
-geopolitical
-george
-georgia
-geoscientific
-geostationary
-geosynchronous
-geothermal
-geranium
-geraniums
-gerbil
-gerbils
-geriatric
-geriatrics
-germ
-german
-germane
-germanic
-germanium
-germans
-germany
-germicidal
-germicides
-germinal
-germinate
-germinated
-germinating
-germination
-germs
-gerontocracy
-gerontologist
-gerontology
-gerrymander
-gerrymandered
-gerund
-gerundive
-gestalt
-gestapo
-gestate
-gestating
-gestation
-gestational
-gesticulate
-gesticulated
-gesticulating
-gesticulation
-gesticulations
-gestural
-gesture
-gestured
-gestures
-gesturing
-get
-getable
-getaway
-getrichquick
-gets
-gettable
-getter
-getting
-geyser
-geysers
-ghana
-ghanian
-ghastlier
-ghastliest
-ghastliness
-ghastly
-gherkin
-gherkins
-ghetto
-ghost
-ghosted
-ghosting
-ghostlier
-ghostliest
-ghostlike
-ghostly
-ghosts
-ghoul
-ghoulish
-ghouls
-giant
-giantess
-giantism
-giantkiller
-giantkillers
-giants
-gibber
-gibbered
-gibbering
-gibberish
-gibbet
-gibbets
-gibbon
-gibbons
-gibbous
-gibed
-gibes
-giblets
-giddier
-giddiest
-giddily
-giddiness
-giddy
-gift
-gifted
-gifting
-gifts
-giftware
-gig
-gigabytes
-gigantic
-gigantically
-gigavolt
-giggle
-giggled
-giggles
-giggling
-giggly
-gigolo
-gilded
-gilders
-gilding
-gilds
-gill
-gillie
-gills
-gilt
-giltedged
-gilts
-gimcrack
-gimlet
-gimlets
-gimmick
-gimmickry
-gimmicks
-gimmicky
-gin
-ginger
-gingerbread
-gingerly
-gingers
-gingery
-gingham
-gingivitis
-gins
-ginseng
-gipsies
-gipsy
-giraffe
-giraffes
-gird
-girded
-girder
-girders
-girding
-girdle
-girdled
-girdles
-girdling
-girl
-girlfriend
-girlfriends
-girlhood
-girlie
-girlish
-girlishly
-girlishness
-girls
-giro
-girt
-girth
-girths
-gist
-give
-giveaway
-given
-giver
-givers
-gives
-giving
-givings
-gizzard
-glace
-glacial
-glacially
-glaciated
-glaciation
-glaciations
-glacier
-glaciers
-glaciological
-glaciologist
-glaciologists
-glaciology
-glad
-gladden
-gladdened
-gladdening
-gladdens
-gladder
-gladdest
-glade
-glades
-gladiator
-gladiatorial
-gladiators
-gladioli
-gladiolus
-gladly
-gladness
-glamorous
-glamour
-glance
-glanced
-glances
-glancing
-gland
-glands
-glandular
-glans
-glare
-glared
-glares
-glaring
-glaringly
-glasgow
-glasnost
-glass
-glassed
-glasses
-glassful
-glasshouse
-glasshouses
-glassier
-glassiest
-glassless
-glassware
-glassy
-glaucoma
-glaucous
-glaze
-glazed
-glazer
-glazes
-glazier
-glaziers
-glazing
-gleam
-gleamed
-gleaming
-gleams
-glean
-gleaned
-gleaning
-gleanings
-gleans
-glebe
-glee
-gleeful
-gleefully
-gleefulness
-glen
-glenn
-glens
-glia
-glib
-glibly
-glibness
-glide
-glided
-glider
-gliders
-glides
-gliding
-glim
-glimmer
-glimmered
-glimmering
-glimmerings
-glimmers
-glimpse
-glimpsed
-glimpses
-glimpsing
-glint
-glinted
-glinting
-glints
-glisten
-glistened
-glistening
-glistens
-glitter
-glittered
-glittering
-glitters
-glittery
-glitzy
-gloaming
-gloat
-gloated
-gloating
-glob
-global
-globalisation
-globally
-globe
-globed
-globes
-globetrotters
-globetrotting
-globose
-globular
-globule
-globules
-gloom
-gloomful
-gloomier
-gloomiest
-gloomily
-gloominess
-glooms
-gloomy
-gloried
-glories
-glorification
-glorified
-glorifies
-glorify
-glorifying
-glorious
-gloriously
-glory
-glorying
-gloss
-glossaries
-glossary
-glossed
-glosses
-glossier
-glossiest
-glossily
-glossing
-glossy
-glottal
-glove
-gloved
-gloves
-glow
-glowed
-glower
-glowered
-glowering
-glowers
-glowing
-glowingly
-glows
-glowworm
-glowworms
-glucose
-glue
-glued
-glueing
-glues
-gluey
-gluing
-glum
-glumly
-gluon
-glut
-glutamate
-gluten
-glutinous
-glutted
-glutton
-gluttonous
-gluttons
-gluttony
-glycerine
-glycerol
-glycine
-glycol
-glyph
-glyphs
-gnarl
-gnarled
-gnarling
-gnarls
-gnash
-gnashed
-gnashes
-gnashing
-gnat
-gnats
-gnaw
-gnawed
-gnawer
-gnawers
-gnawing
-gnaws
-gneiss
-gnome
-gnomes
-gnomic
-gnostic
-gnosticism
-gnu
-gnus
-go
-goad
-goaded
-goading
-goads
-goahead
-goal
-goalies
-goalkeeper
-goalkeepers
-goalkeeping
-goalless
-goalmouth
-goalpost
-goalposts
-goals
-goalscorer
-goalscorers
-goalscoring
-goat
-goatee
-goatees
-goats
-goatskin
-gobbet
-gobbets
-gobble
-gobbled
-gobbledegook
-gobbledygook
-gobbler
-gobbles
-gobbling
-gobetween
-gobi
-gobies
-goblet
-goblets
-goblin
-goblins
-god
-godchild
-goddess
-goddesses
-godfather
-godfathers
-godforsaken
-godhead
-godless
-godlessness
-godlier
-godlike
-godliness
-godly
-godmother
-godmothers
-godparents
-gods
-godsend
-godson
-godsons
-goer
-goers
-goes
-goethe
-gofer
-goggled
-goggles
-goggling
-going
-goings
-goitre
-goitres
-gold
-golden
-goldfish
-golds
-goldsmith
-goldsmiths
-golf
-golfer
-golfers
-golfing
-golgotha
-goliath
-golliwog
-golly
-gonad
-gonads
-gondola
-gondolas
-gondolier
-gondoliers
-gone
-gong
-gongs
-gonorrhoea
-goo
-good
-goodbye
-goodbyes
-goodfornothing
-goodfornothings
-goodhope
-goodhumoured
-goodhumouredly
-goodies
-goodish
-goodlooking
-goodly
-goodnatured
-goodnaturedly
-goodness
-goodnight
-goods
-goodtempered
-goodwill
-goody
-gooey
-goof
-goofed
-goofing
-goofs
-goofy
-googlies
-googly
-goon
-goons
-goose
-gooseberries
-gooseberry
-goosestep
-goosestepping
-gopher
-gophers
-gordian
-gore
-gored
-gores
-gorge
-gorged
-gorgeous
-gorgeously
-gorgeousness
-gorges
-gorging
-gorgon
-gorgons
-gorier
-goriest
-gorilla
-gorillas
-goring
-gormless
-gorse
-gory
-gosh
-gosling
-goslings
-goslow
-goslows
-gospel
-gospels
-gossamer
-gossip
-gossiped
-gossiping
-gossips
-gossipy
-got
-goth
-gothic
-goths
-gotten
-gouda
-gouge
-gouged
-gouges
-gouging
-goulash
-gourd
-gourds
-gourmand
-gourmet
-gourmets
-gout
-govern
-governance
-governed
-governess
-governesses
-governing
-government
-governmental
-governments
-governor
-governors
-governorship
-governorships
-governs
-gown
-gowned
-gowns
-grab
-grabbed
-grabber
-grabbers
-grabbing
-grabs
-grace
-graced
-graceful
-gracefully
-gracefulness
-graceless
-gracelessly
-graces
-gracing
-gracious
-graciously
-graciousness
-gradation
-gradations
-grade
-graded
-grader
-graders
-grades
-gradient
-gradients
-grading
-gradings
-gradual
-gradualism
-gradualist
-gradually
-graduand
-graduands
-graduate
-graduated
-graduates
-graduating
-graduation
-graduations
-graffiti
-graffito
-graft
-grafted
-grafting
-grafts
-graham
-grail
-grails
-grain
-grained
-grainier
-grainiest
-graininess
-grains
-grainy
-gram
-grammar
-grammarian
-grammarians
-grammars
-grammatical
-grammatically
-gramme
-grammes
-gramophone
-gramophones
-grams
-granaries
-granary
-grand
-grandads
-grandchild
-grandchildren
-granddad
-granddaughter
-granddaughters
-grandee
-grandees
-grander
-grandest
-grandeur
-grandfather
-grandfathers
-grandiloquent
-grandiose
-grandiosity
-grandly
-grandma
-grandmas
-grandmaster
-grandmasters
-grandmother
-grandmothers
-grandpa
-grandparent
-grandparents
-grandpas
-grands
-grandson
-grandsons
-grandstand
-grange
-granite
-granites
-granitic
-grannie
-grannies
-granny
-grant
-granted
-grantee
-granting
-grants
-granular
-granularity
-granulated
-granulation
-granule
-granules
-granulocyte
-grape
-grapefruit
-grapes
-grapeshot
-grapevine
-graph
-graphed
-graphic
-graphical
-graphically
-graphics
-graphite
-graphologist
-graphologists
-graphology
-graphs
-grapnel
-grapple
-grappled
-grapples
-grappling
-graptolites
-grasp
-grasped
-grasper
-grasping
-grasps
-grass
-grassed
-grasses
-grasshopper
-grasshoppers
-grassier
-grassiest
-grassland
-grasslands
-grassroots
-grassy
-grate
-grated
-grateful
-gratefully
-grater
-graters
-grates
-graticule
-gratification
-gratifications
-gratified
-gratifies
-gratify
-gratifying
-gratifyingly
-grating
-gratings
-gratis
-gratitude
-gratuities
-gratuitous
-gratuitously
-gratuitousness
-gratuity
-grave
-gravedigger
-gravediggers
-gravel
-gravelled
-gravelly
-gravels
-gravely
-graven
-graver
-graves
-graveside
-gravest
-gravestone
-gravestones
-graveyard
-graveyards
-gravies
-gravitas
-gravitate
-gravitated
-gravitating
-gravitation
-gravitational
-gravitationally
-gravities
-graviton
-gravitons
-gravity
-gravures
-gravy
-graze
-grazed
-grazer
-grazes
-grazing
-grease
-greased
-greasepaint
-greaseproof
-greasers
-greases
-greasier
-greasiest
-greasing
-greasy
-great
-greataunt
-greataunts
-greatcoat
-greatcoats
-greater
-greatest
-greatgrandchildren
-greatgranddaughter
-greatgrandfather
-greatgrandmother
-greatgrandmothers
-greatgrandson
-greatly
-greatness
-grecian
-greece
-greed
-greedier
-greediest
-greedily
-greediness
-greeds
-greedy
-greek
-greeks
-green
-greened
-greener
-greenery
-greenest
-greeneyed
-greenfield
-greenfly
-greengages
-greengrocer
-greengrocers
-greengrocery
-greenhorn
-greenhorns
-greenhouse
-greenhouses
-greenie
-greening
-greenish
-greenly
-greenness
-greens
-greenstone
-greensward
-greenwich
-greet
-greeted
-greeting
-greetings
-greets
-gregarious
-gregariously
-gregariousness
-gremlin
-gremlins
-grenade
-grenades
-grenadier
-grenadiers
-grew
-grey
-greybeard
-greyed
-greyer
-greyest
-greyhound
-greyhounds
-greying
-greyish
-greyness
-greys
-grid
-gridded
-gridiron
-gridlock
-grids
-grief
-griefs
-grievance
-grievances
-grieve
-grieved
-griever
-grievers
-grieves
-grieving
-grievous
-grievously
-griffin
-griffins
-griffon
-grill
-grille
-grilled
-grilles
-grilling
-grills
-grim
-grimace
-grimaced
-grimaces
-grimacing
-grime
-grimiest
-grimly
-grimm
-grimmer
-grimmest
-grimness
-grimy
-grin
-grind
-grinded
-grinder
-grinders
-grinding
-grinds
-grindstone
-grinned
-grinner
-grinning
-grins
-grip
-gripe
-griped
-gripes
-griping
-gripped
-gripper
-grippers
-gripping
-grips
-grislier
-grisliest
-grisly
-grist
-gristle
-grit
-grits
-gritted
-grittier
-grittiest
-gritting
-gritty
-grizzled
-grizzlier
-grizzliest
-grizzly
-groan
-groaned
-groaner
-groaners
-groaning
-groans
-groat
-groats
-grocer
-groceries
-grocers
-grocery
-grog
-groggiest
-groggily
-groggy
-groin
-groins
-grommet
-grommets
-groom
-groomed
-groomer
-groomers
-grooming
-grooms
-groove
-grooved
-grooves
-groovier
-grooving
-groovy
-grope
-groped
-groper
-gropers
-gropes
-groping
-gropingly
-gropings
-gross
-grossed
-grosser
-grossest
-grossly
-grossness
-grotesque
-grotesquely
-grotesqueness
-grotto
-grouch
-grouchy
-ground
-grounded
-grounding
-groundless
-groundnut
-groundnuts
-grounds
-groundsheet
-groundsman
-groundswell
-groundwater
-groundwork
-group
-grouped
-grouper
-groupie
-groupies
-grouping
-groupings
-groups
-grouse
-grouses
-grout
-grouting
-grove
-grovel
-grovelled
-groveller
-grovelling
-grovels
-groves
-grow
-grower
-growers
-growing
-growl
-growled
-growler
-growling
-growls
-grown
-grownup
-grownups
-grows
-growth
-growths
-grub
-grubbed
-grubbier
-grubbiest
-grubbing
-grubby
-grubs
-grudge
-grudges
-grudging
-grudgingly
-gruel
-grueling
-gruelling
-gruesome
-gruesomely
-gruesomeness
-gruff
-gruffly
-gruffness
-grumble
-grumbled
-grumbler
-grumbles
-grumbling
-grumblings
-grumpier
-grumpiest
-grumpily
-grumps
-grumpy
-grunge
-grunt
-grunted
-grunter
-grunting
-grunts
-guacamole
-guanaco
-guanine
-guano
-guarantee
-guaranteed
-guaranteeing
-guarantees
-guarantor
-guarantors
-guard
-guarded
-guardedly
-guardedness
-guardhouse
-guardian
-guardians
-guardianship
-guarding
-guardroom
-guards
-guardsman
-guardsmen
-guava
-guavas
-gubernatorial
-gudgeon
-guerilla
-guerillas
-guerrilla
-guerrillas
-guess
-guessable
-guessed
-guesses
-guessing
-guesswork
-guest
-guesting
-guests
-guffaw
-guffawed
-guffaws
-guidance
-guide
-guidebook
-guidebooks
-guided
-guideline
-guidelines
-guider
-guiders
-guides
-guiding
-guidings
-guild
-guilder
-guilders
-guilds
-guile
-guileless
-guilelessness
-guillemot
-guillemots
-guillotine
-guillotined
-guillotines
-guillotining
-guilt
-guiltier
-guiltiest
-guiltily
-guiltiness
-guiltless
-guilts
-guilty
-guinea
-guineas
-guise
-guises
-guitar
-guitarist
-guitarists
-guitars
-gulf
-gulfs
-gulfwar
-gull
-gullet
-gullets
-gulley
-gulleys
-gullibility
-gullible
-gullies
-gulls
-gully
-gulp
-gulped
-gulping
-gulps
-gum
-gumboil
-gumboils
-gumboots
-gumdrop
-gumdrops
-gummed
-gumming
-gums
-gumshoe
-gumtree
-gumtrees
-gun
-gunboat
-gunboats
-gunfight
-gunfire
-gunfires
-gunite
-gunk
-gunman
-gunmen
-gunmetal
-gunned
-gunner
-gunners
-gunnery
-gunning
-gunpoint
-gunpowder
-guns
-gunship
-gunships
-gunshot
-gunshots
-gunsight
-gunsmith
-gunsmiths
-gunwale
-gunwales
-guppies
-guppy
-gurgle
-gurgled
-gurgles
-gurgling
-guru
-gurus
-gush
-gushed
-gusher
-gushes
-gushing
-gusset
-gust
-gusted
-gustier
-gustiest
-gusting
-gusto
-gusts
-gusty
-gut
-gutless
-guts
-gutsier
-gutsy
-gutted
-gutter
-guttered
-guttering
-gutters
-guttersnipe
-guttersnipes
-gutting
-guttural
-gutturally
-guy
-guys
-guzzle
-guzzled
-guzzler
-guzzlers
-guzzling
-gym
-gymkhana
-gymnasia
-gymnasium
-gymnasiums
-gymnast
-gymnastic
-gymnastics
-gymnasts
-gyms
-gynaecological
-gynaecologist
-gynaecologists
-gynaecology
-gypsies
-gypsum
-gypsy
-gyrate
-gyrated
-gyrates
-gyrating
-gyration
-gyrations
-gyro
-gyromagnetic
-gyroscope
-gyroscopes
-gyroscopic
-ha
-haberdasher
-haberdashers
-haberdashery
-habit
-habitability
-habitable
-habitat
-habitation
-habitations
-habitats
-habitforming
-habits
-habitual
-habitually
-habituate
-habituated
-habituation
-hacienda
-hack
-hackable
-hacked
-hacker
-hackers
-hacking
-hackle
-hackles
-hackling
-hackney
-hackneyed
-hacks
-hacksaw
-had
-haddock
-haddocks
-hades
-hadnt
-hadron
-hadrons
-haematological
-haematologist
-haematology
-haematoma
-haematuria
-haemoglobin
-haemolytic
-haemophilia
-haemophiliac
-haemophiliacs
-haemorrhage
-haemorrhages
-haemorrhagic
-haemorrhaging
-haemorrhoid
-haemorrhoids
-haft
-hafts
-hag
-haggard
-haggardness
-haggis
-haggle
-haggled
-haggler
-haggling
-hagiography
-hags
-haha
-haiku
-hail
-hailed
-hailing
-hails
-hailstone
-hailstones
-hailstorm
-hailstorms
-hair
-hairbrush
-haircare
-haircut
-haircuts
-hairdo
-hairdresser
-hairdressers
-hairdressing
-haired
-hairier
-hairiest
-hairiness
-hairless
-hairline
-hairnet
-hairpiece
-hairpin
-hairpins
-hairraising
-hairs
-hairsplitting
-hairspray
-hairsprays
-hairstyle
-hairstyles
-hairstyling
-hairy
-haiti
-haitian
-hake
-hakea
-hale
-half
-halfhearted
-halfheartedly
-halfheartedness
-halfhour
-halfhourly
-halfhours
-halfsister
-halftruth
-halftruths
-halfway
-halibut
-halifax
-halite
-halitosis
-hall
-hallelujah
-hallmark
-hallmarks
-hallo
-hallow
-hallowed
-hallows
-halls
-hallucinate
-hallucinated
-hallucinating
-hallucination
-hallucinations
-hallucinatory
-hallway
-hallways
-halo
-haloed
-halogen
-halogenated
-halogens
-halon
-halons
-halt
-halted
-halter
-haltered
-halters
-halting
-haltingly
-halts
-halve
-halved
-halves
-halving
-ham
-hamburg
-hamburger
-hamburgers
-hamitic
-hamlet
-hamlets
-hammer
-hammered
-hammerhead
-hammering
-hammers
-hammock
-hammocks
-hamper
-hampered
-hampering
-hampers
-hams
-hamster
-hamsters
-hamstring
-hamstrings
-hamstrung
-hand
-handbag
-handbags
-handball
-handbasin
-handbell
-handbill
-handbills
-handbook
-handbooks
-handbrake
-handbrakes
-handcar
-handcart
-handcuff
-handcuffed
-handcuffing
-handcuffs
-handed
-handedness
-handel
-handful
-handfuls
-handgun
-handguns
-handhold
-handholds
-handicap
-handicapped
-handicapping
-handicaps
-handicraft
-handicrafts
-handier
-handiest
-handily
-handing
-handiwork
-handkerchief
-handkerchiefs
-handle
-handlebar
-handlebars
-handled
-handler
-handlers
-handles
-handling
-handmade
-handmaiden
-handmaidens
-handout
-handouts
-handover
-handovers
-handpicked
-handrail
-handrails
-hands
-handset
-handsets
-handshake
-handshakes
-handshaking
-handsome
-handsomely
-handsomeness
-handsomer
-handsomest
-handstand
-handstands
-handwriting
-handwritten
-handy
-handyman
-handymen
-hang
-hangar
-hangars
-hangdog
-hanged
-hanger
-hangers
-hangglide
-hangglided
-hangglider
-hanggliders
-hangglides
-hanggliding
-hanging
-hangings
-hangman
-hangmen
-hangouts
-hangover
-hangovers
-hangs
-hangup
-hanker
-hankered
-hankering
-hankers
-hankie
-hankies
-hanoi
-hanover
-hansard
-hansom
-haphazard
-haphazardly
-hapless
-happen
-happened
-happening
-happenings
-happens
-happier
-happiest
-happily
-happiness
-happy
-happygolucky
-harangue
-harangued
-harangues
-haranguing
-harare
-harass
-harassed
-harassers
-harasses
-harassing
-harassment
-harbinger
-harbingers
-harbour
-harboured
-harbouring
-harbours
-hard
-hardback
-hardbacks
-hardboard
-hardboiled
-hardcore
-hardearned
-harden
-hardened
-hardener
-hardeners
-hardening
-hardens
-harder
-hardest
-hardheaded
-hardhearted
-hardheartedness
-hardhit
-hardhitting
-hardier
-hardiest
-hardily
-hardiness
-hardline
-hardliner
-hardliners
-hardly
-hardness
-hardpressed
-hardship
-hardships
-hardup
-hardware
-hardwood
-hardwoods
-hardworking
-hardy
-hare
-harebell
-harebells
-harebrained
-hared
-harem
-harems
-hares
-hark
-harked
-harken
-harkened
-harkens
-harking
-harks
-harlequin
-harlequins
-harlot
-harlots
-harm
-harmed
-harmer
-harmful
-harmfully
-harmfulness
-harming
-harmless
-harmlessly
-harmlessness
-harmonic
-harmonica
-harmonically
-harmonics
-harmonies
-harmonious
-harmoniously
-harmonisation
-harmonise
-harmonised
-harmonising
-harmonium
-harmony
-harms
-harness
-harnessed
-harnesses
-harnessing
-harp
-harped
-harping
-harpist
-harpists
-harpoon
-harpoons
-harps
-harpsichord
-harpsichords
-harridan
-harried
-harrier
-harriers
-harrow
-harrowed
-harrowing
-harrows
-harry
-harrying
-harsh
-harshen
-harshens
-harsher
-harshest
-harshly
-harshness
-hart
-harts
-harvard
-harvest
-harvested
-harvester
-harvesters
-harvesting
-harvests
-has
-hasbeen
-hasbeens
-hash
-hashed
-hashes
-hashing
-hashish
-hasnt
-hasp
-hassle
-haste
-hasted
-hasten
-hastened
-hastening
-hastens
-hastes
-hastier
-hastiest
-hastily
-hastiness
-hasty
-hat
-hatch
-hatchback
-hatchbacks
-hatched
-hatcheries
-hatchery
-hatches
-hatchet
-hatchets
-hatching
-hatchway
-hate
-hated
-hateful
-hatefully
-hater
-haters
-hates
-hatful
-hating
-hatless
-hatrack
-hatracks
-hatred
-hatreds
-hats
-hatstands
-hatted
-hatter
-hatters
-hattrick
-hattricks
-haughtier
-haughtiest
-haughtily
-haughtiness
-haughty
-haul
-haulage
-haulages
-hauled
-hauler
-haulers
-haulier
-hauliers
-hauling
-haulms
-hauls
-haunch
-haunches
-haunt
-haunted
-haunting
-hauntingly
-haunts
-hauteur
-havana
-have
-haven
-havenots
-havens
-havent
-havering
-haversack
-haves
-having
-havoc
-hawaii
-hawaiian
-hawk
-hawked
-hawker
-hawkers
-hawking
-hawkish
-hawks
-hawser
-hawsers
-hawthorn
-hawthorns
-hay
-haydn
-hayfever
-hayfield
-hayloft
-haystack
-haystacks
-haywain
-haywire
-hazard
-hazarded
-hazarding
-hazardous
-hazards
-haze
-hazel
-hazelnut
-hazelnuts
-hazier
-haziest
-hazily
-haziness
-hazy
-he
-head
-headache
-headaches
-headband
-headbands
-headboard
-headboards
-headcount
-headdress
-headdresses
-headed
-header
-headers
-headfast
-headgear
-headhunted
-headhunters
-headier
-headiest
-heading
-headings
-headlamp
-headlamps
-headland
-headlands
-headless
-headlight
-headlights
-headline
-headlined
-headlines
-headlining
-headlock
-headlong
-headman
-headmaster
-headmasters
-headmastership
-headmen
-headmistress
-headmistresses
-headnote
-headon
-headphone
-headphones
-headpiece
-headquarters
-headrest
-headroom
-heads
-headscarf
-headscarves
-headset
-headsets
-headship
-headstand
-headstock
-headstone
-headstones
-headstrong
-headwaters
-headway
-headwind
-headwinds
-headword
-headwords
-headwork
-heady
-heal
-healed
-healer
-healers
-healing
-heals
-health
-healthful
-healthier
-healthiest
-healthily
-healthiness
-healths
-healthy
-heap
-heaped
-heaping
-heaps
-hear
-hearable
-heard
-hearer
-hearers
-hearing
-hearings
-hearken
-hearkened
-hearkening
-hearkens
-hears
-hearsay
-hearse
-hearses
-heart
-heartache
-heartbeat
-heartbeats
-heartbreak
-heartbreaking
-heartbreaks
-heartbroken
-heartburn
-hearten
-heartened
-heartening
-heartfelt
-hearth
-hearthrug
-hearths
-hearties
-heartiest
-heartily
-heartiness
-heartland
-heartlands
-heartless
-heartlessly
-heartlessness
-heartrending
-hearts
-heartsearching
-heartstrings
-hearttoheart
-heartwarming
-heartwood
-hearty
-heat
-heated
-heatedly
-heater
-heaters
-heath
-heathen
-heathenish
-heathenism
-heathens
-heather
-heathers
-heathery
-heathland
-heaths
-heating
-heatresistant
-heats
-heatwave
-heave
-heaved
-heaveho
-heaven
-heavenly
-heavens
-heavensent
-heavenward
-heavenwards
-heaves
-heavier
-heavies
-heaviest
-heavily
-heaviness
-heaving
-heavings
-heavy
-heavyduty
-heavyweight
-heavyweights
-hebrew
-hebrews
-heck
-heckle
-heckled
-heckler
-hecklers
-heckles
-heckling
-hectare
-hectares
-hectic
-hectically
-hectolitres
-hector
-hectoring
-hedge
-hedged
-hedgehog
-hedgehogs
-hedgerow
-hedgerows
-hedges
-hedging
-hedonism
-hedonist
-hedonistic
-hedonists
-heed
-heeded
-heedful
-heeding
-heedless
-heedlessly
-heedlessness
-heeds
-heel
-heeled
-heels
-heft
-hefted
-heftier
-hefting
-hefty
-hegemonic
-hegemony
-heifer
-heifers
-height
-heighten
-heightened
-heightening
-heightens
-heights
-heinous
-heir
-heiress
-heiresses
-heirloom
-heirlooms
-heirs
-heist
-heists
-held
-helen
-helical
-helices
-helicopter
-helicopters
-heliocentric
-heliography
-heliosphere
-heliotrope
-helipad
-helium
-helix
-helixes
-hell
-hellenic
-hellfire
-hellish
-hellishly
-hello
-hellraiser
-hells
-helm
-helmet
-helmeted
-helmets
-helms
-helmsman
-helots
-help
-helped
-helper
-helpers
-helpful
-helpfully
-helpfulness
-helping
-helpings
-helpless
-helplessly
-helplessness
-helpline
-helplines
-helpmate
-helpmates
-helps
-helsinki
-helterskelter
-hem
-heman
-hemen
-hemisphere
-hemispheres
-hemispheric
-hemispherical
-hemline
-hemlines
-hemlock
-hemmed
-hemming
-hemp
-hems
-hen
-hence
-henceforth
-henceforward
-henchman
-henchmen
-henge
-henna
-henpeck
-henry
-hens
-hepatic
-hepatitis
-heptagon
-heptagonal
-heptagons
-heptane
-her
-herald
-heralded
-heraldic
-heralding
-heraldry
-heralds
-herb
-herbaceous
-herbage
-herbal
-herbalism
-herbalist
-herbalists
-herbicide
-herbicides
-herbivore
-herbivores
-herbivorous
-herbs
-herd
-herded
-herding
-herds
-herdsman
-herdsmen
-here
-hereabouts
-hereafter
-hereby
-hereditary
-heredity
-herein
-hereinafter
-hereof
-heresies
-heresy
-heretic
-heretical
-heretics
-hereto
-heretofore
-hereunder
-hereupon
-herewith
-heritability
-heritable
-heritage
-heritors
-herm
-hermaphrodite
-hermaphrodites
-hermaphroditic
-hermeneutic
-hermeneutics
-hermetic
-hermetically
-hermit
-hermitage
-hermits
-hernia
-hernias
-hero
-herod
-heroic
-heroical
-heroically
-heroics
-heroin
-heroine
-heroines
-heroism
-heron
-heronry
-herons
-herpes
-herring
-herringbone
-herrings
-hers
-herself
-hertz
-hesitancy
-hesitant
-hesitantly
-hesitate
-hesitated
-hesitates
-hesitating
-hesitatingly
-hesitation
-hesitations
-heterodox
-heterodoxy
-heterogeneity
-heterogeneous
-heterologous
-heterosexist
-heterosexual
-heterosexuality
-heterosexually
-heterosexuals
-heterozygous
-heuristic
-heuristically
-heuristics
-hew
-hewed
-hewer
-hewing
-hewn
-hex
-hexadecimal
-hexagon
-hexagonal
-hexagons
-hexagram
-hexagrams
-hexameter
-hexane
-hexed
-hey
-heyday
-heydays
-hi
-hiatus
-hiatuses
-hibernal
-hibernate
-hibernating
-hibernation
-hibiscus
-hic
-hiccough
-hiccup
-hiccups
-hickory
-hid
-hidden
-hide
-hideandseek
-hideaway
-hideaways
-hidebound
-hideous
-hideously
-hideousness
-hideout
-hideouts
-hider
-hides
-hiding
-hidings
-hierarch
-hierarchic
-hierarchical
-hierarchically
-hierarchies
-hierarchy
-hieratic
-hieroglyph
-hieroglyphic
-hieroglyphics
-hieroglyphs
-higgledypiggledy
-high
-highbrow
-higher
-highest
-highhandedness
-highheeled
-highish
-highjack
-highland
-highlander
-highlanders
-highlands
-highlight
-highlighted
-highlighter
-highlighting
-highlights
-highly
-highness
-highpitched
-highpoint
-highranking
-highs
-highspirited
-hight
-highway
-highwayman
-highwaymen
-highways
-hijack
-hijacked
-hijacker
-hijackers
-hijacking
-hijackings
-hijacks
-hike
-hiked
-hiker
-hikers
-hikes
-hiking
-hilarious
-hilariously
-hilarity
-hill
-hilled
-hillier
-hilliest
-hillman
-hillock
-hillocks
-hillocky
-hills
-hillside
-hillsides
-hilltop
-hilltops
-hillwalking
-hilly
-hilt
-hilts
-him
-himself
-hind
-hindbrain
-hinder
-hindered
-hinderer
-hindering
-hinders
-hindmost
-hindquarters
-hindrance
-hindrances
-hindsight
-hindu
-hinduism
-hinge
-hinged
-hinges
-hinnies
-hinny
-hint
-hinted
-hinterland
-hinterlands
-hinting
-hints
-hip
-hipbone
-hippie
-hippies
-hippo
-hippocampus
-hippodrome
-hippopotamus
-hippy
-hips
-hipster
-hipsters
-hire
-hired
-hireling
-hirer
-hires
-hiring
-hirings
-hirsute
-hirsuteness
-his
-hispanic
-hiss
-hissed
-hisses
-hissing
-hissings
-histamine
-histogram
-histograms
-histological
-histologically
-histologists
-histology
-historian
-historians
-historic
-historical
-historically
-historicist
-histories
-historiographical
-historiography
-history
-histrionic
-histrionics
-hit
-hitandrun
-hitch
-hitched
-hitcher
-hitches
-hitchhike
-hitchhiked
-hitchhiker
-hitchhikers
-hitchhiking
-hitching
-hither
-hitherto
-hitler
-hits
-hittable
-hitters
-hitting
-hive
-hived
-hives
-hiving
-hmm
-ho
-hoar
-hoard
-hoarded
-hoarder
-hoarders
-hoarding
-hoardings
-hoards
-hoarfrost
-hoarse
-hoarsely
-hoarseness
-hoarser
-hoary
-hoax
-hoaxed
-hoaxer
-hoaxers
-hoaxes
-hoaxing
-hob
-hobbies
-hobbit
-hobble
-hobbled
-hobbles
-hobbling
-hobby
-hobbyist
-hobbyists
-hobgoblin
-hobgoblins
-hobnailed
-hobnails
-hobo
-hobs
-hock
-hockey
-hocks
-hocus
-hocuspocus
-hod
-hoe
-hoed
-hoeing
-hoes
-hog
-hogg
-hogged
-hogger
-hogging
-hoggs
-hogs
-hogwash
-hoist
-hoisted
-hoisting
-hoists
-hold
-holdable
-holdall
-holdalls
-holder
-holders
-holding
-holdings
-holdout
-holds
-holdup
-holdups
-hole
-holed
-holeinone
-holes
-holiday
-holidaying
-holidaymaker
-holidaymakers
-holidays
-holier
-holies
-holiest
-holily
-holiness
-holing
-holism
-holistic
-holistically
-holland
-holler
-hollered
-hollies
-hollow
-hollowed
-hollowly
-hollowness
-hollows
-holly
-hollyhocks
-holmes
-holocaust
-holocausts
-hologram
-holograms
-holographic
-holography
-holster
-holsters
-holy
-homage
-homages
-hombre
-home
-homecoming
-homecomings
-homed
-homeland
-homelands
-homeless
-homelessness
-homelier
-homeliness
-homely
-homemade
-homeowner
-homeowners
-homes
-homesick
-homesickness
-homespun
-homestead
-homesteads
-homeward
-homewardbound
-homewards
-homework
-homicidal
-homicide
-homicides
-homiest
-homilies
-homily
-homing
-hominid
-hominids
-homoeopathic
-homoeopathy
-homogenates
-homogeneity
-homogeneous
-homogeneously
-homogenisation
-homogenise
-homogenised
-homogenising
-homological
-homologies
-homologous
-homologue
-homologues
-homology
-homomorphism
-homomorphisms
-homonym
-homonyms
-homophobes
-homophobia
-homophobic
-homophones
-homophony
-homosexual
-homosexuality
-homosexually
-homosexuals
-homotopy
-homozygous
-homunculus
-homy
-hone
-honed
-hones
-honest
-honestly
-honesty
-honey
-honeybee
-honeycomb
-honeycombed
-honeycombing
-honeydew
-honeyed
-honeymoon
-honeymooners
-honeymoons
-honeysuckle
-honeysuckles
-honing
-honk
-honking
-honks
-honorarium
-honorary
-honorific
-honors
-honour
-honourable
-honourably
-honoured
-honouring
-honours
-honshu
-hood
-hooded
-hoodlum
-hoodlums
-hoods
-hoodwink
-hoodwinked
-hoodwinking
-hoof
-hoofs
-hook
-hookah
-hooked
-hooker
-hookers
-hooking
-hooknosed
-hooks
-hooky
-hooligan
-hooliganism
-hooligans
-hoop
-hooped
-hoops
-hooray
-hoot
-hooted
-hooter
-hooters
-hooting
-hoots
-hoover
-hoovered
-hoovering
-hooves
-hop
-hope
-hoped
-hopeful
-hopefully
-hopefulness
-hopefuls
-hopeless
-hopelessly
-hopelessness
-hopes
-hoping
-hopped
-hopper
-hoppers
-hopping
-hops
-horde
-hordes
-horizon
-horizons
-horizontal
-horizontally
-horizontals
-hormonal
-hormonally
-hormone
-hormones
-horn
-hornbeam
-hornbills
-horned
-hornet
-hornets
-hornpipe
-hornpipes
-horns
-horny
-horoscope
-horoscopes
-horrendous
-horrendously
-horrible
-horribly
-horrid
-horridly
-horrific
-horrifically
-horrified
-horrifies
-horrify
-horrifying
-horrifyingly
-horror
-horrors
-horrorstricken
-horse
-horseback
-horsebox
-horseflesh
-horsefly
-horsehair
-horseless
-horseman
-horsemen
-horseplay
-horsepower
-horseradish
-horses
-horseshoe
-horseshoes
-horsewhip
-horsewhipped
-horsey
-horsing
-horticultural
-horticulture
-horticulturist
-horticulturists
-hosanna
-hosannas
-hose
-hosed
-hosepipe
-hoses
-hosier
-hosiery
-hosing
-hospice
-hospices
-hospitable
-hospitably
-hospital
-hospitalisation
-hospitalised
-hospitality
-hospitals
-host
-hosta
-hostage
-hostages
-hosted
-hostel
-hostelries
-hostelry
-hostels
-hostess
-hostesses
-hostile
-hostilely
-hostilities
-hostility
-hosting
-hostler
-hosts
-hot
-hotair
-hotbed
-hotbeds
-hotblooded
-hotchpotch
-hotdog
-hotdogs
-hotel
-hotelier
-hoteliers
-hotels
-hotheaded
-hotheads
-hothouse
-hothouses
-hotline
-hotly
-hotness
-hotplate
-hotplates
-hotpot
-hotrod
-hotspot
-hotspots
-hottempered
-hotter
-hottest
-hotting
-hound
-hounded
-hounding
-hounds
-hour
-hourglass
-hourly
-hours
-house
-houseboat
-houseboats
-housebound
-housebreaker
-housebreakers
-housebreaking
-housebuilder
-housebuilders
-housebuilding
-housebuyers
-housed
-houseflies
-houseful
-household
-householder
-householders
-households
-househunting
-housekeeper
-housekeepers
-housekeeping
-housemaid
-housemaids
-houseroom
-houses
-housewife
-housewives
-housework
-housing
-housings
-houston
-hove
-hovel
-hovels
-hover
-hovercraft
-hovered
-hoverer
-hovering
-hovers
-how
-howdy
-however
-howitzer
-howitzers
-howl
-howled
-howler
-howlers
-howling
-howlings
-howls
-howsoever
-hub
-hubbies
-hubbub
-hubby
-hubcap
-hubcaps
-hubris
-hubristic
-hubs
-huckleberry
-huddle
-huddled
-huddles
-huddling
-hue
-hues
-huff
-huffed
-huffily
-huffing
-huffy
-hug
-huge
-hugely
-hugeness
-hugged
-hugging
-hugs
-huguenot
-huh
-hulk
-hulking
-hulks
-hull
-hullabaloo
-hulled
-hullo
-hulls
-hum
-human
-humane
-humanely
-humaner
-humanise
-humanised
-humanising
-humanism
-humanist
-humanistic
-humanists
-humanitarian
-humanitarianism
-humanities
-humanity
-humankind
-humanly
-humanness
-humanoid
-humanoids
-humans
-humble
-humbled
-humbleness
-humbler
-humbles
-humblest
-humbling
-humbly
-humbug
-humbugs
-humdrum
-humerus
-humid
-humidifier
-humidifiers
-humidity
-humify
-humiliate
-humiliated
-humiliates
-humiliating
-humiliatingly
-humiliation
-humiliations
-humility
-hummable
-hummed
-hummer
-humming
-hummingbird
-hummingbirds
-hummock
-hummocks
-hummocky
-humorist
-humorous
-humorously
-humour
-humoured
-humouring
-humourless
-humours
-hump
-humpback
-humped
-humping
-humps
-hums
-humus
-hunch
-hunchback
-hunchbacked
-hunched
-hunches
-hunching
-hundred
-hundredfold
-hundreds
-hundredth
-hundredths
-hundredweight
-hundredweights
-hung
-hungary
-hunger
-hungered
-hungering
-hungers
-hungrier
-hungriest
-hungrily
-hungry
-hunk
-hunkers
-hunks
-hunt
-hunted
-hunter
-huntergatherer
-huntergatherers
-hunters
-hunting
-hunts
-huntsman
-huntsmen
-hurdle
-hurdled
-hurdler
-hurdlers
-hurdles
-hurl
-hurled
-hurling
-hurls
-hurlyburly
-hurrah
-hurrahs
-hurray
-hurricane
-hurricanes
-hurried
-hurriedly
-hurries
-hurry
-hurrying
-hurt
-hurtful
-hurting
-hurtle
-hurtled
-hurtles
-hurtling
-hurts
-husband
-husbandman
-husbandmen
-husbandry
-husbands
-hush
-hushed
-hushes
-hushhush
-hushing
-husk
-husked
-huskier
-huskies
-huskiest
-huskily
-husks
-husky
-hussies
-hussy
-hustings
-hustle
-hustled
-hustler
-hustlers
-hustles
-hustling
-hut
-hutch
-hutches
-huts
-hyacinth
-hyacinths
-hyaena
-hyaenas
-hybrid
-hybridisation
-hybridised
-hybrids
-hydra
-hydrangea
-hydrangeas
-hydrant
-hydrants
-hydrate
-hydrated
-hydration
-hydraulic
-hydraulically
-hydraulics
-hydrazine
-hydride
-hydro
-hydrocarbon
-hydrocarbons
-hydrochloric
-hydrochloride
-hydrodynamic
-hydrodynamical
-hydrodynamics
-hydroelectric
-hydroelectricity
-hydrofluoric
-hydrofoil
-hydrofoils
-hydrogen
-hydrogenated
-hydrogenation
-hydrographer
-hydrographic
-hydrological
-hydrologically
-hydrologists
-hydrology
-hydrolysis
-hydromagnetic
-hydromechanics
-hydrophobia
-hydrophobic
-hydroponically
-hydrosphere
-hydrostatic
-hydrostatics
-hydrothermal
-hydrous
-hydroxide
-hydroxides
-hyena
-hyenas
-hygiene
-hygienic
-hygienically
-hygienist
-hygienists
-hygroscopic
-hymen
-hymens
-hymn
-hymnal
-hymnbook
-hymns
-hype
-hyperactive
-hyperactivity
-hyperbola
-hyperbolas
-hyperbole
-hyperbolic
-hyperboloid
-hyperboloids
-hypercholesterolaemia
-hypercube
-hypercubes
-hyperfine
-hyperinflation
-hypermarket
-hypermarkets
-hyperplane
-hyperplanes
-hypersensitive
-hypersensitiveness
-hypersensitivity
-hypersonic
-hyperspace
-hypersphere
-hypertension
-hypertext
-hypertonic
-hyperventilated
-hyperventilating
-hyperventilation
-hyphen
-hyphenate
-hyphenated
-hyphenates
-hyphenating
-hyphenation
-hyphenations
-hyphened
-hyphens
-hypnosis
-hypnotherapists
-hypnotherapy
-hypnotic
-hypnotically
-hypnotise
-hypnotised
-hypnotises
-hypnotising
-hypnotism
-hypnotist
-hypochondria
-hypochondriac
-hypochondriacal
-hypochondriacs
-hypocrisies
-hypocrisy
-hypocrite
-hypocrites
-hypocritical
-hypocritically
-hypodermic
-hypoglycaemia
-hypoglycaemic
-hypotension
-hypothalamus
-hypothermia
-hypotheses
-hypothesis
-hypothesise
-hypothesised
-hypothesiser
-hypothesises
-hypothesising
-hypothetical
-hypothetically
-hypoxia
-hyssop
-hysterectomy
-hysteresis
-hysteria
-hysteric
-hysterical
-hysterically
-hysterics
-iambic
-iambus
-iatrogenic
-iberia
-iberian
-ibex
-ibexes
-ibis
-ibises
-ibsen
-icarus
-ice
-iceage
-iceberg
-icebergs
-icebox
-icecap
-icecold
-icecream
-iced
-iceland
-iceman
-icepack
-icepick
-icepicks
-ices
-iceskate
-iceskating
-ichneumon
-icicle
-icicles
-icier
-iciest
-icily
-iciness
-icing
-icings
-icon
-iconic
-iconoclasm
-iconoclast
-iconoclastic
-iconoclasts
-iconographic
-iconographical
-iconography
-icons
-icosahedra
-icosahedral
-icosahedron
-icy
-id
-idaho
-idea
-ideal
-idealisation
-idealisations
-idealise
-idealised
-idealises
-idealising
-idealism
-idealist
-idealistic
-idealistically
-idealists
-ideality
-ideally
-ideals
-ideas
-idem
-identical
-identically
-identifiable
-identifiably
-identification
-identifications
-identified
-identifier
-identifiers
-identifies
-identify
-identifying
-identities
-identity
-ideograms
-ideographic
-ideographs
-ideological
-ideologically
-ideologies
-ideologist
-ideologists
-ideologue
-ideologues
-ideology
-ides
-idiocies
-idiocy
-idiolect
-idiom
-idiomatic
-idiomatically
-idioms
-idiopathic
-idiosyncrasies
-idiosyncrasy
-idiosyncratic
-idiosyncratically
-idiot
-idiotic
-idiotically
-idiots
-idle
-idled
-idleness
-idler
-idlers
-idles
-idlest
-idling
-idly
-idol
-idolaters
-idolatrous
-idolatry
-idolisation
-idolise
-idolised
-idols
-ids
-idyll
-idyllic
-idyllically
-if
-ifs
-igloo
-igloos
-iglu
-igneous
-ignite
-ignited
-igniter
-ignites
-igniting
-ignition
-ignoble
-ignobly
-ignominious
-ignominiously
-ignominy
-ignorable
-ignoramus
-ignoramuses
-ignorance
-ignorant
-ignorantly
-ignore
-ignored
-ignores
-ignoring
-iguana
-iguanas
-ileum
-iliad
-ilk
-ill
-illadvised
-illbehaved
-illconceived
-illdefined
-illegal
-illegalities
-illegality
-illegally
-illegibility
-illegible
-illegibly
-illegitimacy
-illegitimate
-illegitimately
-illequipped
-illfated
-illfavoured
-illhumoured
-illiberal
-illicit
-illicitly
-illimitable
-illinformed
-illinois
-illiquid
-illiteracy
-illiterate
-illiterates
-illmannered
-illness
-illnesses
-illogic
-illogical
-illogicality
-illogically
-ills
-illtempered
-illtreated
-illuminant
-illuminate
-illuminated
-illuminates
-illuminating
-illumination
-illuminations
-illumine
-illusion
-illusionist
-illusionists
-illusions
-illusive
-illusory
-illustrate
-illustrated
-illustrates
-illustrating
-illustration
-illustrations
-illustrative
-illustrator
-illustrators
-illustrious
-ilmenite
-im
-image
-imaged
-imagery
-images
-imaginable
-imaginary
-imagination
-imaginations
-imaginative
-imaginatively
-imagine
-imagined
-imagines
-imaging
-imagining
-imaginings
-imago
-imam
-imams
-imbalance
-imbalanced
-imbalances
-imbecile
-imbeciles
-imbecilic
-imbecilities
-imbecility
-imbedded
-imbeds
-imbibe
-imbibed
-imbiber
-imbibers
-imbibing
-imbroglio
-imbue
-imbued
-imitate
-imitated
-imitates
-imitating
-imitation
-imitations
-imitative
-imitator
-imitators
-immaculate
-immaculately
-immanence
-immanent
-immanently
-immaterial
-immature
-immaturely
-immaturity
-immeasurable
-immeasurably
-immediacy
-immediate
-immediately
-immediateness
-immemorial
-immense
-immensely
-immenseness
-immensities
-immensity
-immerse
-immersed
-immerses
-immersing
-immersion
-immigrant
-immigrants
-immigrate
-immigrated
-immigrating
-immigration
-immigrations
-imminence
-imminent
-imminently
-immiscible
-immobile
-immobilisation
-immobilise
-immobilised
-immobiliser
-immobilises
-immobilising
-immobility
-immoderate
-immoderately
-immodest
-immolate
-immolated
-immolation
-immoral
-immorality
-immorally
-immortal
-immortalised
-immortality
-immortally
-immortals
-immovability
-immovable
-immoveable
-immune
-immunisation
-immunisations
-immunise
-immunised
-immunises
-immunities
-immunity
-immunoassay
-immunocompromised
-immunodeficiency
-immunological
-immunologically
-immunologist
-immunologists
-immunology
-immunosuppression
-immunosuppressive
-immured
-immutability
-immutable
-immutably
-imp
-impact
-impacted
-impacting
-impaction
-impacts
-impair
-impaired
-impairing
-impairment
-impairments
-impairs
-impala
-impalas
-impale
-impaled
-impaler
-impales
-impaling
-impalpable
-impart
-imparted
-impartial
-impartiality
-impartially
-imparting
-imparts
-impassable
-impasse
-impassioned
-impassive
-impassively
-impassiveness
-impassivity
-impatience
-impatient
-impatiently
-impeach
-impeached
-impeaches
-impeachment
-impeachments
-impeccable
-impeccably
-impecunious
-impedance
-impede
-impeded
-impedes
-impediment
-impedimenta
-impediments
-impeding
-impel
-impelled
-impelling
-impels
-impend
-impending
-impenetrability
-impenetrable
-impenetrably
-imperative
-imperatively
-imperatives
-imperceptible
-imperceptibly
-imperfect
-imperfection
-imperfections
-imperfectly
-imperial
-imperialism
-imperialist
-imperialistic
-imperialists
-imperially
-imperil
-imperilled
-imperious
-imperiously
-imperiousness
-imperishable
-imperium
-impermanence
-impermanent
-impermeability
-impermeable
-impermissible
-impersonal
-impersonality
-impersonally
-impersonate
-impersonated
-impersonates
-impersonating
-impersonation
-impersonations
-impersonator
-impersonators
-impertinence
-impertinent
-impertinently
-imperturbability
-imperturbable
-imperturbably
-impervious
-impetuosity
-impetuous
-impetuously
-impetus
-impi
-impiety
-impinge
-impinged
-impingement
-impinges
-impinging
-impious
-impish
-impishly
-impishness
-implacable
-implacably
-implant
-implantation
-implanted
-implanting
-implants
-implausibility
-implausible
-implausibly
-implement
-implementable
-implementation
-implementations
-implemented
-implementer
-implementers
-implementing
-implements
-implicate
-implicated
-implicates
-implicating
-implication
-implications
-implicit
-implicitly
-implied
-impliedly
-implies
-implode
-imploded
-implodes
-imploding
-implore
-implored
-implores
-imploring
-imploringly
-implosion
-imply
-implying
-impolite
-impoliteness
-impolitic
-imponderable
-imponderables
-import
-importable
-importance
-important
-importantly
-importation
-imported
-importer
-importers
-importing
-imports
-importunate
-importunately
-importune
-importuned
-importunity
-imposable
-impose
-imposed
-imposes
-imposing
-imposition
-impositions
-impossibilities
-impossibility
-impossible
-impossibly
-imposter
-imposters
-impostor
-impostors
-impotence
-impotency
-impotent
-impotently
-impound
-impounded
-impounding
-impoverish
-impoverished
-impoverishing
-impoverishment
-impracticability
-impracticable
-impractical
-impracticalities
-impracticality
-impractically
-imprecation
-imprecations
-imprecise
-imprecisely
-impreciseness
-imprecision
-impregnable
-impregnably
-impregnate
-impregnated
-impregnating
-impregnation
-impresario
-impress
-impressed
-impresses
-impressing
-impression
-impressionable
-impressionism
-impressionist
-impressionistic
-impressionists
-impressions
-impressive
-impressively
-impressiveness
-imprimatur
-imprint
-imprinted
-imprinting
-imprints
-imprison
-imprisoned
-imprisoning
-imprisonment
-imprisonments
-imprisons
-improbabilities
-improbability
-improbable
-improbably
-impromptu
-improper
-improperly
-improprieties
-impropriety
-improvable
-improve
-improved
-improvement
-improvements
-improver
-improves
-improvidence
-improvident
-improving
-improvisation
-improvisational
-improvisations
-improvisatory
-improvise
-improvised
-improvises
-improvising
-imprudence
-imprudent
-imprudently
-imps
-impudence
-impudent
-impudently
-impugn
-impugnable
-impugned
-impugning
-impulse
-impulses
-impulsion
-impulsive
-impulsively
-impulsiveness
-impunity
-impure
-impurities
-impurity
-imputation
-imputations
-impute
-imputed
-imputing
-in
-inabilities
-inability
-inaccessibility
-inaccessible
-inaccuracies
-inaccuracy
-inaccurate
-inaccurately
-inaction
-inactivated
-inactivating
-inactivation
-inactive
-inactivity
-inadequacies
-inadequacy
-inadequate
-inadequately
-inadmissible
-inadvertence
-inadvertent
-inadvertently
-inadvisability
-inadvisable
-inadvisedly
-inalienable
-inane
-inanely
-inanimate
-inanities
-inanity
-inapplicability
-inapplicable
-inappropriate
-inappropriately
-inappropriateness
-inaptly
-inarticulacy
-inarticulate
-inarticulateness
-inasmuch
-inattention
-inattentive
-inattentively
-inaudibility
-inaudible
-inaudibly
-inaugural
-inaugurate
-inaugurated
-inaugurates
-inaugurating
-inauguration
-inauspicious
-inauspiciously
-inauthenticity
-inboard
-inborn
-inbound
-inbred
-inbreeding
-inbuilt
-inca
-incalculable
-incalculably
-incandescence
-incandescent
-incandescently
-incant
-incantation
-incantations
-incantatory
-incapability
-incapable
-incapacitate
-incapacitated
-incapacitates
-incapacitating
-incapacitation
-incapacity
-incarcerated
-incarcerating
-incarceration
-incarnate
-incarnated
-incarnation
-incarnations
-incas
-incased
-incautious
-incautiously
-incendiaries
-incendiary
-incense
-incensed
-incenses
-incensing
-incentive
-incentives
-inception
-incessant
-incessantly
-incest
-incests
-incestuous
-incestuousness
-inch
-inched
-inches
-inching
-inchoate
-incidence
-incidences
-incident
-incidental
-incidentally
-incidents
-incinerate
-incinerated
-incinerates
-incinerating
-incineration
-incinerator
-incinerators
-incipient
-incised
-incision
-incisions
-incisive
-incisively
-incisiveness
-incisor
-incisors
-incite
-incited
-incitement
-incitements
-inciter
-inciters
-incites
-inciting
-inclemency
-inclement
-inclination
-inclinations
-incline
-inclined
-inclines
-inclining
-include
-included
-includes
-including
-inclusion
-inclusions
-inclusive
-inclusively
-inclusiveness
-incognito
-incoherence
-incoherency
-incoherent
-incoherently
-incombustible
-income
-incomer
-incomers
-incomes
-incoming
-incommensurable
-incommoding
-incommunicable
-incommunicado
-incomparable
-incomparably
-incompatibilities
-incompatibility
-incompatible
-incompatibly
-incompetence
-incompetent
-incompetently
-incompetents
-incomplete
-incompletely
-incompleteness
-incomprehensibility
-incomprehensible
-incomprehensibly
-incomprehension
-incompressible
-inconceivable
-inconceivably
-inconclusive
-inconclusively
-incongruities
-incongruity
-incongruous
-incongruously
-inconsequential
-inconsequentially
-inconsiderable
-inconsiderate
-inconsiderately
-inconsiderateness
-inconsistencies
-inconsistency
-inconsistent
-inconsistently
-inconsolable
-inconsolably
-inconspicuous
-inconspicuously
-inconspicuousness
-inconstancy
-inconstant
-incontestable
-incontestably
-incontinence
-incontinent
-incontinently
-incontrovertible
-incontrovertibly
-inconvenience
-inconvenienced
-inconveniences
-inconveniencing
-inconvenient
-inconveniently
-incorporable
-incorporate
-incorporated
-incorporates
-incorporating
-incorporation
-incorrect
-incorrectly
-incorrectness
-incorrigible
-incorrigibly
-incorruptible
-increase
-increased
-increases
-increasing
-increasingly
-incredible
-incredibly
-incredulity
-incredulous
-incredulously
-increment
-incremental
-incrementally
-incrementation
-incremented
-incrementing
-increments
-incriminate
-incriminated
-incriminates
-incriminating
-incrimination
-incubate
-incubated
-incubating
-incubation
-incubations
-incubator
-incubators
-inculcate
-inculcated
-inculcating
-inculcation
-incumbency
-incumbent
-incumbents
-incur
-incurable
-incurably
-incuriously
-incurred
-incurring
-incurs
-incursion
-incursions
-indaba
-indebted
-indebtedness
-indecency
-indecent
-indecently
-indecipherable
-indecision
-indecisive
-indecisively
-indecisiveness
-indeclinable
-indecorous
-indeed
-indefatigable
-indefeasible
-indefensible
-indefinable
-indefinably
-indefinite
-indefinitely
-indelible
-indelibly
-indelicacy
-indelicate
-indemnified
-indemnify
-indemnities
-indemnity
-indent
-indentation
-indentations
-indented
-indenting
-indents
-indentures
-independence
-independent
-independently
-independents
-indepth
-indescribable
-indescribably
-indestructibility
-indestructible
-indeterminable
-indeterminacy
-indeterminate
-index
-indexation
-indexed
-indexer
-indexers
-indexes
-indexing
-india
-indian
-indiana
-indians
-indicant
-indicants
-indicate
-indicated
-indicates
-indicating
-indication
-indications
-indicative
-indicator
-indicators
-indices
-indict
-indictable
-indicted
-indicting
-indictment
-indictments
-indicts
-indifference
-indifferent
-indifferently
-indigenous
-indigestible
-indigestion
-indignant
-indignantly
-indignation
-indignities
-indignity
-indigo
-indirect
-indirection
-indirections
-indirectly
-indirectness
-indiscipline
-indiscreet
-indiscreetly
-indiscretion
-indiscretions
-indiscriminate
-indiscriminately
-indispensability
-indispensable
-indispensably
-indispose
-indisposed
-indisposition
-indisputable
-indisputably
-indissoluble
-indissolubly
-indistinct
-indistinctly
-indistinctness
-indistinguishable
-indistinguishably
-indite
-individual
-individualised
-individualism
-individualist
-individualistic
-individualists
-individuality
-individually
-individuals
-individuation
-indivisibility
-indivisible
-indivisibly
-indoctrinate
-indoctrinated
-indoctrinates
-indoctrinating
-indoctrination
-indoctrinations
-indoctrinator
-indoctrinators
-indole
-indolence
-indolent
-indolently
-indomitable
-indoor
-indoors
-indorsed
-indorses
-indrawn
-indubitable
-indubitably
-induce
-induced
-inducement
-inducements
-induces
-inducible
-inducing
-induct
-inductance
-inducted
-induction
-inductions
-inductive
-inductively
-inductor
-inductors
-inducts
-indulge
-indulged
-indulgence
-indulgences
-indulgent
-indulgently
-indulger
-indulges
-indulging
-induna
-industrial
-industrialisation
-industrialise
-industrialised
-industrialising
-industrialism
-industrialist
-industrialists
-industrially
-industries
-industrious
-industriously
-industriousness
-industry
-inebriate
-inebriated
-inebriation
-inedible
-ineffable
-ineffective
-ineffectively
-ineffectiveness
-ineffectual
-ineffectually
-ineffectualness
-inefficiencies
-inefficiency
-inefficient
-inefficiently
-inelastic
-inelegance
-inelegant
-inelegantly
-ineligibility
-ineligible
-ineluctable
-ineluctably
-inept
-ineptitude
-ineptly
-ineptness
-inequalities
-inequality
-inequitable
-inequities
-inequity
-ineradicable
-ineradicably
-inert
-inertia
-inertial
-inertness
-inescapable
-inescapably
-inessential
-inestimable
-inestimably
-inevitability
-inevitable
-inevitably
-inexact
-inexactitude
-inexactitudes
-inexcusable
-inexcusably
-inexhaustible
-inexhaustibly
-inexorability
-inexorable
-inexorably
-inexpedient
-inexpensive
-inexpensively
-inexperience
-inexperienced
-inexpert
-inexpertly
-inexplicable
-inexplicably
-inexpressibility
-inexpressible
-inexpressibly
-inextensible
-inextinguishable
-inextricable
-inextricably
-infallibility
-infallible
-infallibly
-infamous
-infamously
-infamy
-infancy
-infant
-infanta
-infante
-infanticide
-infantile
-infantry
-infantryman
-infantrymen
-infants
-infarct
-infarction
-infarctions
-infatuate
-infatuated
-infatuation
-infatuations
-infeasibility
-infeasible
-infect
-infected
-infecting
-infection
-infections
-infectious
-infectiously
-infective
-infects
-infelicities
-infelicitous
-infelicitously
-infelicity
-infer
-inference
-inferences
-inferential
-inferentially
-inferior
-inferiority
-inferiors
-infernal
-infernally
-inferno
-inferred
-inferring
-infers
-infertile
-infertility
-infest
-infestation
-infestations
-infested
-infesting
-infests
-infidel
-infidelities
-infidelity
-infidels
-infield
-infighting
-infill
-infilling
-infiltrate
-infiltrated
-infiltrates
-infiltrating
-infiltration
-infiltrations
-infiltrator
-infiltrators
-infinite
-infinitely
-infinitesimal
-infinitesimally
-infinitesimals
-infinities
-infinitive
-infinitives
-infinitude
-infinity
-infirm
-infirmaries
-infirmary
-infirmities
-infirmity
-infix
-inflame
-inflamed
-inflames
-inflaming
-inflammable
-inflammation
-inflammatory
-inflatable
-inflate
-inflated
-inflates
-inflating
-inflation
-inflationary
-inflect
-inflected
-inflecting
-inflection
-inflectional
-inflections
-inflects
-inflexibility
-inflexible
-inflexibly
-inflexion
-inflexions
-inflict
-inflicted
-inflicter
-inflicting
-infliction
-inflictions
-inflicts
-inflow
-inflowing
-inflows
-influence
-influenced
-influences
-influencing
-influential
-influenza
-influx
-influxes
-info
-inform
-informal
-informality
-informally
-informant
-informants
-informatics
-information
-informational
-informative
-informatively
-informativeness
-informatory
-informed
-informer
-informers
-informing
-informs
-infra
-infraction
-infractions
-infrared
-infrastructural
-infrastructure
-infrastructures
-infrequency
-infrequent
-infrequently
-infringe
-infringed
-infringement
-infringements
-infringes
-infringing
-infuriate
-infuriated
-infuriates
-infuriating
-infuriatingly
-infuse
-infused
-infuses
-infusing
-infusion
-infusions
-ingathered
-ingenious
-ingeniously
-ingenuity
-ingenuous
-ingenuously
-ingenuousness
-ingest
-ingested
-ingesting
-ingestion
-inglorious
-ingoing
-ingot
-ingots
-ingrained
-ingrate
-ingratiate
-ingratiated
-ingratiating
-ingratiatingly
-ingratitude
-ingredient
-ingredients
-ingress
-ingression
-ingrown
-inhabit
-inhabitable
-inhabitant
-inhabitants
-inhabited
-inhabiting
-inhabits
-inhalant
-inhalation
-inhalations
-inhale
-inhaled
-inhaler
-inhalers
-inhales
-inhaling
-inherent
-inherently
-inherit
-inheritable
-inheritance
-inheritances
-inherited
-inheriting
-inheritor
-inheritors
-inherits
-inhibit
-inhibited
-inhibiting
-inhibition
-inhibitions
-inhibitor
-inhibitors
-inhibitory
-inhibits
-inhomogeneities
-inhomogeneity
-inhomogeneous
-inhospitable
-inhouse
-inhuman
-inhumane
-inhumanely
-inhumanities
-inhumanity
-inhumanly
-inimical
-inimitable
-inimitably
-iniquities
-iniquitous
-iniquitously
-iniquity
-initial
-initialisation
-initialisations
-initialise
-initialised
-initialises
-initialising
-initialled
-initially
-initials
-initiate
-initiated
-initiates
-initiating
-initiation
-initiations
-initiative
-initiatives
-initiator
-initiators
-inject
-injectable
-injected
-injecting
-injection
-injections
-injector
-injects
-injoke
-injokes
-injudicious
-injudiciously
-injunction
-injunctions
-injure
-injured
-injures
-injuries
-injuring
-injurious
-injuriously
-injury
-injustice
-injustices
-ink
-inked
-inkier
-inkiest
-inking
-inkling
-inklings
-inkpad
-inkpot
-inkpots
-inks
-inkstand
-inkstands
-inkwell
-inkwells
-inky
-inlaid
-inland
-inlaw
-inlaws
-inlay
-inlays
-inlet
-inlets
-inmate
-inmates
-inmost
-inn
-innards
-innate
-innately
-inner
-innermost
-innervation
-innings
-innkeeper
-innkeepers
-innocence
-innocent
-innocently
-innocents
-innocuous
-innocuousness
-innovate
-innovated
-innovating
-innovation
-innovations
-innovative
-innovatively
-innovator
-innovators
-innovatory
-inns
-innuendo
-innumerable
-innumerably
-innumeracy
-innumerate
-inoculate
-inoculated
-inoculates
-inoculating
-inoculation
-inoculations
-inoffensive
-inoperable
-inoperative
-inopportune
-inordinate
-inordinately
-inorganic
-input
-inputs
-inputting
-inquest
-inquests
-inquire
-inquired
-inquirer
-inquirers
-inquires
-inquiries
-inquiring
-inquiringly
-inquiry
-inquisition
-inquisitional
-inquisitions
-inquisitive
-inquisitively
-inquisitiveness
-inquisitor
-inquisitorial
-inquisitorially
-inquisitors
-inquorate
-inroad
-inroads
-inrush
-ins
-insalubrious
-insane
-insanely
-insanitary
-insanities
-insanity
-insatiable
-insatiably
-inscribe
-inscribed
-inscribing
-inscription
-inscriptions
-inscrutability
-inscrutable
-inscrutably
-insect
-insecticidal
-insecticide
-insecticides
-insectivores
-insectivorous
-insects
-insecure
-insecurely
-insecurities
-insecurity
-insemination
-insensibility
-insensible
-insensibly
-insensitive
-insensitively
-insensitivity
-inseparable
-inseparably
-insert
-inserted
-inserting
-insertion
-insertions
-inserts
-inset
-insets
-inshore
-inside
-insideout
-insider
-insiders
-insides
-insidious
-insidiously
-insight
-insightful
-insights
-insignia
-insignificance
-insignificant
-insignificantly
-insincere
-insincerely
-insincerity
-insinuate
-insinuated
-insinuating
-insinuatingly
-insinuation
-insinuations
-insipid
-insist
-insisted
-insistence
-insistent
-insistently
-insisting
-insists
-insofar
-insole
-insolence
-insolent
-insolently
-insolubility
-insoluble
-insolvencies
-insolvency
-insolvent
-insomnia
-insomniac
-insomniacs
-insouciance
-insouciant
-inspect
-inspected
-inspecting
-inspection
-inspections
-inspector
-inspectorate
-inspectorates
-inspectors
-inspects
-inspiration
-inspirational
-inspirations
-inspire
-inspired
-inspires
-inspiring
-instabilities
-instability
-install
-installable
-installation
-installations
-installed
-installer
-installers
-installing
-installs
-instalment
-instalments
-instance
-instanced
-instances
-instancy
-instant
-instantaneous
-instantaneously
-instantiate
-instantiated
-instantiates
-instantiating
-instantiation
-instantiations
-instantly
-instants
-instated
-instead
-instep
-insteps
-instigate
-instigated
-instigates
-instigating
-instigation
-instigator
-instigators
-instil
-instillation
-instilled
-instilling
-instills
-instils
-instinct
-instinctive
-instinctively
-instincts
-instinctual
-institute
-instituted
-institutes
-instituting
-institution
-institutional
-institutionalisation
-institutionalise
-institutionalised
-institutionalising
-institutionalism
-institutionally
-institutions
-instruct
-instructed
-instructing
-instruction
-instructional
-instructions
-instructive
-instructor
-instructors
-instructs
-instrument
-instrumental
-instrumentalist
-instrumentalists
-instrumentality
-instrumentally
-instrumentals
-instrumentation
-instrumented
-instruments
-insubordinate
-insubordination
-insubstantial
-insufferable
-insufferably
-insufficiency
-insufficient
-insufficiently
-insulant
-insular
-insularity
-insulate
-insulated
-insulates
-insulating
-insulation
-insulator
-insulators
-insulin
-insult
-insulted
-insulter
-insulting
-insultingly
-insults
-insuperable
-insupportable
-insurance
-insurances
-insure
-insured
-insurer
-insurers
-insures
-insurgency
-insurgent
-insurgents
-insuring
-insurmountable
-insurmountably
-insurrection
-insurrectionary
-insurrections
-intact
-intaglio
-intake
-intakes
-intangible
-intangibles
-integer
-integers
-integrability
-integrable
-integral
-integrally
-integrals
-integrand
-integrands
-integrate
-integrated
-integrates
-integrating
-integration
-integrationist
-integrations
-integrative
-integrator
-integrators
-integrity
-intellect
-intellects
-intellectual
-intellectualism
-intellectuality
-intellectually
-intellectuals
-intelligence
-intelligences
-intelligent
-intelligently
-intelligentsia
-intelligibility
-intelligible
-intelligibly
-intemperance
-intemperate
-intend
-intended
-intending
-intends
-intense
-intensely
-intensification
-intensified
-intensifies
-intensify
-intensifying
-intensities
-intensity
-intensive
-intensively
-intent
-intention
-intentional
-intentionality
-intentionally
-intentioned
-intentions
-intently
-intentness
-intents
-inter
-interact
-interacted
-interacting
-interaction
-interactional
-interactions
-interactive
-interactively
-interactiveness
-interacts
-interatomic
-interbank
-interbred
-interbreed
-interbreeding
-intercede
-interceded
-interceding
-intercept
-intercepted
-intercepting
-interception
-interceptions
-interceptor
-interceptors
-intercepts
-intercession
-intercessions
-interchange
-interchangeability
-interchangeable
-interchangeably
-interchanged
-interchanges
-interchanging
-intercity
-intercollegiate
-intercom
-intercommunicate
-intercommunication
-interconnect
-interconnected
-interconnectedness
-interconnecting
-interconnection
-interconnections
-interconnects
-intercontinental
-interconversion
-intercountry
-intercourse
-intercut
-interdenominational
-interdepartmental
-interdependence
-interdependency
-interdependent
-interdict
-interdicted
-interdisciplinary
-interest
-interested
-interestedly
-interesting
-interestingly
-interests
-interface
-interfaced
-interfaces
-interfacing
-interfere
-interfered
-interference
-interferences
-interferer
-interferes
-interfering
-interferometer
-interferometers
-interferometric
-interferometry
-interferon
-intergalactic
-interglacial
-intergovernmental
-interim
-interims
-interior
-interiors
-interject
-interjected
-interjecting
-interjection
-interjectional
-interjections
-interjects
-interlace
-interlaced
-interlacing
-interlap
-interleave
-interleaved
-interleaves
-interleaving
-interlingual
-interlinked
-interlock
-interlocked
-interlocking
-interlocks
-interlocutor
-interlocutors
-interlocutory
-interloper
-interlopers
-interlude
-interludes
-intermarriage
-intermarriages
-intermediaries
-intermediary
-intermediate
-intermediates
-interment
-interments
-interminable
-interminably
-intermingled
-intermingling
-intermission
-intermissions
-intermittent
-intermittently
-intermix
-intermixed
-intermixing
-intermolecular
-intern
-internal
-internalisation
-internalise
-internalised
-internalises
-internalising
-internally
-internals
-international
-internationalisation
-internationalised
-internationalism
-internationalist
-internationalists
-internationally
-internationals
-interned
-internees
-internet
-interning
-internment
-internments
-interns
-internuclear
-interocular
-interoperability
-interoperable
-interpellation
-interpenetration
-interpersonal
-interplanetary
-interplay
-interplays
-interpolatable
-interpolate
-interpolated
-interpolates
-interpolating
-interpolation
-interpolations
-interpose
-interposed
-interposes
-interposing
-interposition
-interpret
-interpretable
-interpretation
-interpretational
-interpretations
-interpretative
-interpreted
-interpreter
-interpreters
-interpreting
-interpretive
-interpretively
-interprets
-interracial
-interred
-interregnum
-interrelate
-interrelated
-interrelatedness
-interrelation
-interrelations
-interrelationship
-interrelationships
-interrogate
-interrogated
-interrogates
-interrogating
-interrogation
-interrogations
-interrogative
-interrogatively
-interrogatives
-interrogator
-interrogators
-interrogatory
-interrupt
-interrupted
-interruptibility
-interrupting
-interruption
-interruptions
-interrupts
-intersect
-intersected
-intersecting
-intersection
-intersections
-intersects
-intersperse
-interspersed
-intersperses
-interspersing
-interstellar
-interstices
-interstitial
-interstitially
-intertidal
-intertwine
-intertwined
-intertwining
-interval
-intervals
-intervene
-intervened
-intervenes
-intervening
-intervention
-interventionism
-interventionist
-interventions
-interview
-interviewed
-interviewee
-interviewees
-interviewer
-interviewers
-interviewing
-interviews
-interweaving
-interwoven
-intestacy
-intestate
-intestinal
-intestine
-intestines
-intifada
-intimacies
-intimacy
-intimate
-intimated
-intimately
-intimates
-intimating
-intimation
-intimations
-intimidate
-intimidated
-intimidates
-intimidating
-intimidation
-intimidatory
-into
-intolerable
-intolerably
-intolerance
-intolerant
-intonation
-intonational
-intonations
-intone
-intoned
-intones
-intoning
-intoxicant
-intoxicants
-intoxicate
-intoxicated
-intoxicating
-intoxication
-intracellular
-intractability
-intractable
-intractably
-intramural
-intramuscular
-intransigence
-intransigent
-intransitive
-intrauterine
-intravenous
-intravenously
-intrepid
-intrepidly
-intricacies
-intricacy
-intricate
-intricately
-intrigue
-intrigued
-intrigues
-intriguing
-intriguingly
-intrinsic
-intrinsically
-intro
-introduce
-introduced
-introduces
-introducing
-introduction
-introductions
-introductory
-introspection
-introspective
-introspectively
-introversion
-introvert
-introverted
-introverts
-intrude
-intruded
-intruder
-intruders
-intrudes
-intruding
-intrusion
-intrusions
-intrusive
-intrusiveness
-intuited
-intuition
-intuitionist
-intuitions
-intuitive
-intuitively
-intuitiveness
-inuit
-inuits
-inundate
-inundated
-inundation
-inure
-inured
-invade
-invaded
-invader
-invaders
-invades
-invading
-invalid
-invalidate
-invalidated
-invalidates
-invalidating
-invalidation
-invalided
-invalidity
-invalids
-invaluable
-invariable
-invariably
-invariance
-invariant
-invariants
-invasion
-invasions
-invasive
-invective
-invectives
-inveigh
-inveighing
-inveigle
-inveigled
-inveigler
-inveiglers
-inveigling
-invent
-invented
-inventing
-invention
-inventions
-inventive
-inventively
-inventiveness
-inventor
-inventories
-inventors
-inventory
-invents
-inverse
-inversely
-inverses
-inversion
-inversions
-invert
-invertebrate
-invertebrates
-inverted
-inverter
-inverters
-invertible
-inverting
-inverts
-invest
-invested
-investigate
-investigated
-investigates
-investigating
-investigation
-investigations
-investigative
-investigator
-investigators
-investigatory
-investing
-investiture
-investment
-investments
-investor
-investors
-invests
-inveterate
-invidious
-invigilate
-invigilated
-invigilating
-invigilator
-invigilators
-invigorate
-invigorated
-invigorating
-invigoratingly
-invincibility
-invincible
-inviolability
-inviolable
-inviolate
-inviscid
-invisibilities
-invisibility
-invisible
-invisibles
-invisibly
-invitation
-invitations
-invite
-invited
-invites
-inviting
-invitingly
-invocation
-invocations
-invoice
-invoiced
-invoices
-invoicing
-invokable
-invoke
-invoked
-invoker
-invokers
-invokes
-invoking
-involuntarily
-involuntary
-involute
-involution
-involutions
-involve
-involved
-involvement
-involvements
-involves
-involving
-invulnerability
-invulnerable
-inward
-inwardly
-inwardness
-inwards
-iodide
-iodine
-ion
-ionian
-ionic
-ionisation
-ionise
-ionised
-ionising
-ionosphere
-ionospheric
-ions
-iota
-iotas
-iran
-iranian
-iranians
-iraq
-iraqi
-iraqis
-irascibility
-irascible
-irascibly
-irate
-ire
-ireland
-iridescence
-iridescent
-iridium
-iris
-irises
-irish
-irishman
-irishmen
-irk
-irked
-irking
-irks
-irksome
-irksomeness
-iron
-ironage
-ironed
-ironic
-ironical
-ironically
-ironies
-ironing
-ironlady
-ironmonger
-ironmongers
-ironmongery
-irons
-ironstone
-ironwork
-ironworks
-irony
-irradiate
-irradiated
-irradiating
-irradiation
-irrational
-irrationalities
-irrationality
-irrationally
-irreconcilable
-irrecoverable
-irrecoverably
-irredeemable
-irredeemably
-irreducibility
-irreducible
-irreducibly
-irrefutable
-irregular
-irregularities
-irregularity
-irregularly
-irregulars
-irrelevance
-irrelevances
-irrelevancy
-irrelevant
-irrelevantly
-irreligious
-irremediable
-irremovable
-irreparable
-irreparably
-irreplaceable
-irrepressible
-irrepressibly
-irreproachable
-irreproachably
-irresistible
-irresistibly
-irresolute
-irresolutely
-irresolution
-irresolvable
-irrespective
-irrespectively
-irresponsibility
-irresponsible
-irresponsibly
-irretrievable
-irretrievably
-irreverence
-irreverent
-irreverently
-irreversibility
-irreversible
-irreversibly
-irrevocable
-irrevocably
-irrigate
-irrigated
-irrigating
-irrigation
-irritability
-irritable
-irritably
-irritant
-irritants
-irritate
-irritated
-irritatedly
-irritates
-irritating
-irritatingly
-irritation
-irritations
-irrupted
-irruption
-is
-isis
-islam
-islamic
-island
-islander
-islanders
-islands
-isle
-isles
-islet
-islets
-isms
-isnt
-isobar
-isobars
-isogram
-isolate
-isolated
-isolates
-isolating
-isolation
-isolationism
-isolationist
-isolator
-isolators
-isomer
-isomeric
-isomers
-isometric
-isometrically
-isometry
-isomorph
-isomorphic
-isomorphism
-isomorphisms
-isoperimetrical
-isosceles
-isostatic
-isothermal
-isothermally
-isotonic
-isotope
-isotopes
-isotopic
-isotropic
-isotropically
-isotropy
-israel
-israeli
-israelis
-issuable
-issuance
-issue
-issued
-issuer
-issuers
-issues
-issuing
-istanbul
-isthmus
-it
-italian
-italians
-italic
-italicisation
-italicise
-italicised
-italics
-italy
-itch
-itched
-itches
-itchier
-itchiest
-itching
-itchy
-item
-itemise
-itemised
-itemises
-itemising
-items
-iterate
-iterated
-iterates
-iterating
-iteration
-iterations
-iterative
-iteratively
-iterators
-itinerant
-itinerants
-itineraries
-itinerary
-itll
-its
-itself
-ive
-ivies
-ivories
-ivory
-ivy
-jab
-jabbed
-jabber
-jabbered
-jabbering
-jabbers
-jabbing
-jabs
-jack
-jackal
-jackals
-jackass
-jackasses
-jackboot
-jackbooted
-jackboots
-jackdaw
-jackdaws
-jacked
-jacket
-jackets
-jacking
-jackinthebox
-jackpot
-jackpots
-jacks
-jacob
-jacuzzi
-jade
-jaded
-jadedly
-jadedness
-jades
-jag
-jagged
-jaggedly
-jaguar
-jaguars
-jahweh
-jail
-jailbird
-jailed
-jailer
-jailers
-jailing
-jails
-jakarta
-jalopy
-jam
-jamaica
-jamaican
-jamb
-jamboree
-jambs
-james
-jammed
-jamming
-jams
-jangle
-jangled
-jangling
-jangly
-janitor
-janitors
-january
-janus
-jap
-japan
-jape
-japes
-japonica
-jar
-jargon
-jargons
-jarl
-jarred
-jarring
-jars
-jasmine
-jaundice
-jaundiced
-jaunt
-jaunted
-jauntier
-jauntiest
-jauntily
-jaunting
-jaunts
-jaunty
-java
-javelin
-javelins
-jaw
-jawbone
-jawbones
-jawed
-jawing
-jawline
-jaws
-jay
-jays
-jaywalk
-jaywalker
-jaywalking
-jazz
-jazzed
-jazzier
-jazziest
-jazzy
-jealous
-jealousies
-jealously
-jealousy
-jeans
-jeep
-jeeps
-jeer
-jeered
-jeering
-jeeringly
-jeerings
-jeers
-jehad
-jejune
-jejunum
-jell
-jellied
-jellies
-jellify
-jelly
-jellyfish
-jemmy
-jennets
-jeopardise
-jeopardised
-jeopardises
-jeopardising
-jeopardy
-jerboas
-jeremiah
-jericho
-jerk
-jerked
-jerkier
-jerkiest
-jerkily
-jerkin
-jerking
-jerkings
-jerkins
-jerks
-jerky
-jersey
-jerseys
-jest
-jested
-jester
-jesters
-jesting
-jestingly
-jests
-jesuit
-jesus
-jet
-jetlagged
-jetplane
-jetpropelled
-jets
-jetsam
-jetsetting
-jetted
-jetties
-jetting
-jettison
-jettisoned
-jettisoning
-jetty
-jew
-jewel
-jewelled
-jeweller
-jewellers
-jewellery
-jewelry
-jewels
-jewess
-jewish
-jews
-jewsharp
-jezebel
-jiffy
-jiggle
-jiggling
-jigs
-jigsaw
-jigsaws
-jihad
-jilt
-jilted
-jilting
-jilts
-jimmy
-jingle
-jingled
-jingles
-jingling
-jingo
-jingoism
-jingoistic
-jinked
-jinks
-jinx
-jinxed
-jinxes
-jitter
-jitters
-jittery
-jiujitsu
-jive
-jived
-jives
-job
-jobbing
-jobless
-joblessness
-jobs
-jock
-jockey
-jockeying
-jockeys
-jocular
-jocularity
-jocularly
-joey
-jog
-jogged
-jogger
-joggers
-jogging
-jogs
-john
-join
-joined
-joiner
-joiners
-joinery
-joining
-joins
-joint
-jointed
-jointing
-jointly
-joints
-jointures
-joist
-joists
-joke
-joked
-joker
-jokers
-jokes
-jokey
-jokier
-jokily
-joking
-jokingly
-jollier
-jolliest
-jollify
-jollily
-jollity
-jolly
-jolt
-jolted
-jolting
-jolts
-jonah
-jonathan
-joseph
-joshua
-jostle
-jostled
-jostles
-jostling
-jot
-jots
-jotted
-jotter
-jotting
-jottings
-joule
-joules
-journal
-journalese
-journalism
-journalist
-journalistic
-journalists
-journalled
-journalling
-journals
-journey
-journeyed
-journeyer
-journeying
-journeyman
-journeys
-joust
-jouster
-jousting
-jousts
-jovial
-joviality
-jovially
-jovian
-jowl
-jowls
-joy
-joyed
-joyful
-joyfully
-joyfulness
-joyless
-joylessness
-joyous
-joyously
-joyousness
-joyride
-joyrider
-joyriders
-joyriding
-joys
-joystick
-joysticks
-jubilant
-jubilantly
-jubilate
-jubilation
-jubilee
-jubilees
-judaic
-judaism
-judas
-judder
-juddered
-juddering
-judders
-judge
-judged
-judgement
-judgemental
-judgements
-judges
-judging
-judgment
-judgmental
-judgments
-judicature
-judicial
-judicially
-judiciaries
-judiciary
-judicious
-judiciously
-judo
-jug
-jugged
-juggernaut
-juggernauts
-juggle
-juggled
-juggler
-jugglers
-juggles
-juggling
-jugs
-jugular
-juice
-juices
-juicier
-juiciest
-juiciness
-juicy
-jukebox
-jukeboxes
-julep
-juleps
-july
-jumble
-jumbled
-jumbles
-jumbo
-jump
-jumped
-jumper
-jumpers
-jumpier
-jumpiest
-jumpiness
-jumping
-jumps
-jumpstart
-jumpstarting
-jumpsuit
-jumpy
-junction
-junctions
-juncture
-june
-jungle
-jungles
-junior
-juniority
-juniors
-juniper
-junk
-junker
-junket
-junkie
-junkies
-junkmail
-junks
-junkyard
-juno
-junta
-juntas
-jupiter
-jurassic
-juridic
-juridical
-juries
-jurisdiction
-jurisdictional
-jurisdictions
-jurisprudence
-jurisprudential
-jurist
-juristic
-jurists
-juror
-jurors
-jury
-juryman
-jurymen
-jussive
-just
-justice
-justices
-justifiability
-justifiable
-justifiably
-justification
-justifications
-justificatory
-justified
-justifies
-justify
-justifying
-justly
-justness
-jut
-jute
-juts
-jutted
-jutting
-juvenile
-juveniles
-juxtapose
-juxtaposed
-juxtaposes
-juxtaposing
-juxtaposition
-juxtapositions
-kaftan
-kaftans
-kaiser
-kalahari
-kale
-kaleidoscope
-kaleidoscopic
-kalif
-kamikaze
-kampala
-kampong
-kangaroo
-kangaroos
-kaolin
-karakul
-karaoke
-karate
-karma
-karst
-katydid
-kayak
-kayaks
-kebab
-kebabs
-kedgeree
-keel
-keeled
-keelhaul
-keeling
-keels
-keen
-keener
-keenest
-keening
-keenly
-keenness
-keep
-keeper
-keepers
-keeping
-keeps
-keepsake
-keepsakes
-keg
-kegs
-kelp
-kelpers
-kelt
-kelts
-kelvin
-ken
-kennedy
-kennel
-kennelled
-kennels
-kent
-kentucky
-kenya
-kenyan
-kept
-keratin
-kerb
-kerbs
-kerbside
-kerchief
-kerned
-kernel
-kernels
-kerning
-kerosene
-kestrel
-kestrels
-ketch
-ketchup
-kettle
-kettleful
-kettles
-key
-keyboard
-keyboardist
-keyboards
-keyed
-keyhole
-keyholes
-keying
-keynote
-keynotes
-keypad
-keypads
-keyring
-keys
-keystone
-keystones
-keystroke
-keystrokes
-keyword
-keywords
-khaki
-khalif
-khan
-khans
-khoikhoi
-khoisan
-kibbutz
-kick
-kickback
-kicked
-kicker
-kicking
-kicks
-kickstart
-kickstarted
-kickstarting
-kickstarts
-kid
-kidded
-kiddie
-kidding
-kidnap
-kidnapped
-kidnapper
-kidnappers
-kidnapping
-kidnappings
-kidnaps
-kidney
-kidneys
-kidneyshaped
-kids
-kiev
-kill
-killed
-killer
-killers
-killing
-killings
-killjoy
-killjoys
-kills
-kiln
-kilns
-kilo
-kilobits
-kilobyte
-kilobytes
-kilohertz
-kilojoules
-kilometre
-kilometres
-kiloton
-kilotons
-kilovolt
-kilowatt
-kilowatts
-kilt
-kilted
-kilter
-kilts
-kimono
-kin
-kina
-kinase
-kind
-kinder
-kindergarten
-kindergartens
-kindest
-kindhearted
-kindheartedness
-kindle
-kindled
-kindles
-kindlier
-kindliest
-kindliness
-kindling
-kindly
-kindness
-kindnesses
-kindred
-kinds
-kinematic
-kinematics
-kinetic
-kinetically
-kinetics
-kinfolk
-king
-kingdom
-kingdoms
-kingfisher
-kingfishers
-kingly
-kingpin
-kings
-kingship
-kingsize
-kingsized
-kink
-kinked
-kinks
-kinky
-kinsfolk
-kinshasa
-kinship
-kinsman
-kinsmen
-kinswoman
-kiosk
-kiosks
-kipper
-kippers
-kirk
-kismet
-kiss
-kissed
-kisser
-kisses
-kissing
-kit
-kitbag
-kitbags
-kitchen
-kitchenette
-kitchens
-kitchenware
-kite
-kites
-kith
-kits
-kitsch
-kitted
-kitten
-kittenish
-kittens
-kitting
-kittiwakes
-kitty
-kiwi
-kiwis
-klaxon
-klaxons
-kleptomania
-kleptomaniac
-kleptomaniacs
-klick
-kloof
-knack
-knacker
-knackers
-knacks
-knapsack
-knapsacks
-knave
-knavery
-knaves
-knavish
-knead
-kneaded
-kneading
-kneads
-knee
-kneecap
-kneecaps
-kneed
-kneedeep
-kneel
-kneeled
-kneeler
-kneeling
-kneels
-knees
-knell
-knelt
-knesset
-knew
-knickers
-knife
-knifed
-knifepoint
-knifes
-knifing
-knight
-knighted
-knighthood
-knighthoods
-knightly
-knights
-knit
-knits
-knitted
-knitter
-knitters
-knitting
-knitwear
-knives
-knob
-knobbly
-knobs
-knock
-knocked
-knocker
-knockers
-knocking
-knockings
-knockout
-knocks
-knoll
-knolls
-knot
-knots
-knotted
-knottier
-knottiest
-knotting
-knotty
-know
-knowable
-knowhow
-knowing
-knowingly
-knowledge
-knowledgeable
-knowledgeably
-known
-knows
-knuckle
-knuckled
-knuckleduster
-knuckledusters
-knuckles
-knuckling
-koala
-koalas
-kongo
-kookaburra
-koran
-korea
-korean
-koreans
-kosher
-kraal
-kraals
-kraft
-kremlin
-kriegspiel
-krill
-krypton
-kudu
-kudus
-kungfu
-kuwait
-kwacha
-kwachas
-laager
-lab
-label
-labelled
-labelling
-labellings
-labels
-labia
-labial
-labials
-labile
-labium
-laboratories
-laboratory
-laborious
-laboriously
-laboriousness
-labour
-laboured
-labourer
-labourers
-labouring
-labourintensive
-labours
-laboursaving
-labs
-laburnum
-labyrinth
-labyrinthine
-labyrinths
-lace
-laced
-lacerate
-lacerated
-lacerating
-laceration
-lacerations
-laces
-lacework
-laches
-lachrymal
-lachrymose
-lacier
-lacing
-lacings
-lack
-lackadaisical
-lacked
-lackey
-lackeys
-lacking
-lacklustre
-lacks
-laconic
-laconically
-lacquer
-lacquered
-lacquers
-lacrosse
-lacs
-lactate
-lactation
-lacteal
-lactic
-lactose
-lacuna
-lacunae
-lacunas
-lacy
-lad
-ladder
-laddered
-ladders
-laddie
-laddies
-lade
-laden
-ladies
-lading
-ladle
-ladled
-ladles
-ladling
-lads
-lady
-ladybird
-ladybirds
-ladybug
-ladylike
-ladyship
-ladyships
-lag
-lager
-lagers
-laggard
-laggards
-lagged
-lagging
-lagoon
-lagoons
-lagos
-lags
-lagune
-laid
-lain
-lair
-laird
-lairds
-lairs
-laissezfaire
-laity
-lake
-lakes
-lakeside
-lam
-lama
-lamas
-lamb
-lambasted
-lambasting
-lambda
-lambent
-lambing
-lambs
-lambskin
-lambswool
-lame
-lamed
-lamely
-lameness
-lament
-lamentable
-lamentably
-lamentation
-lamentations
-lamented
-lamenter
-lamenting
-laments
-lamest
-lamina
-laminar
-laminate
-laminated
-laminates
-lamination
-lamp
-lamplight
-lamplighter
-lamplit
-lampoon
-lampooned
-lampoonery
-lampooning
-lampoons
-lamppost
-lampposts
-lamprey
-lampreys
-lamps
-lampshade
-lampshades
-lance
-lanced
-lancelot
-lancer
-lancers
-lances
-lancet
-lancets
-lancing
-land
-landed
-lander
-landfall
-landfill
-landform
-landforms
-landholders
-landholding
-landholdings
-landing
-landings
-landladies
-landlady
-landless
-landlines
-landlocked
-landlord
-landlords
-landman
-landmark
-landmarks
-landmass
-landmine
-landowner
-landowners
-landowning
-lands
-landscape
-landscaped
-landscapes
-landscaping
-landside
-landslide
-landslides
-landslip
-landslips
-landward
-lane
-lanes
-language
-languages
-languid
-languidly
-languish
-languished
-languishes
-languishing
-languor
-languorous
-languorously
-lank
-lankier
-lankiest
-lanky
-lanolin
-lantern
-lanterns
-lanyard
-laos
-lap
-lapdog
-lapdogs
-lapel
-lapels
-lapful
-lapidary
-lapland
-lapp
-lapped
-lapping
-laps
-lapse
-lapsed
-lapses
-lapsing
-laptop
-laptops
-lapwing
-lapwings
-larceny
-larch
-larches
-lard
-larder
-larders
-lards
-large
-largely
-largeness
-larger
-largest
-largish
-largo
-lark
-larking
-larks
-larva
-larvae
-larval
-laryngeal
-laryngitis
-larynx
-larynxes
-las
-lasagne
-lascivious
-lasciviously
-lasciviousness
-lase
-laser
-lasers
-lash
-lashed
-lashers
-lashes
-lashing
-lashings
-lasing
-lass
-lasses
-lassie
-lassies
-lassitude
-lasso
-lassoed
-lassoing
-last
-lasted
-lasting
-lastly
-lasts
-latch
-latched
-latches
-latching
-late
-latecomer
-latecomers
-lately
-latencies
-latency
-lateness
-latent
-later
-lateral
-lateralisation
-laterally
-laterals
-latest
-latex
-lath
-lathe
-lather
-lathered
-lathers
-lathes
-laths
-latices
-latin
-latino
-latitude
-latitudes
-latitudinal
-latrine
-latrines
-latter
-lattice
-latticed
-lattices
-latvia
-latvian
-laud
-laudable
-laudatory
-lauded
-lauders
-lauding
-lauds
-laugh
-laughable
-laughably
-laughed
-laugher
-laughing
-laughingly
-laughs
-laughter
-launch
-launched
-launcher
-launchers
-launches
-launching
-launder
-laundered
-launderette
-launderettes
-laundering
-laundress
-laundrette
-laundrettes
-laundries
-laundry
-laureate
-laurel
-laurels
-lava
-lavas
-lavatorial
-lavatories
-lavatory
-lavender
-lavish
-lavished
-lavishes
-lavishing
-lavishly
-lavishness
-law
-lawabiding
-lawbreaker
-lawbreakers
-lawbreaking
-lawful
-lawfully
-lawfulness
-lawless
-lawlessness
-lawmaker
-lawmakers
-lawman
-lawmen
-lawn
-lawnmower
-lawnmowers
-lawns
-laws
-lawsuit
-lawsuits
-lawyer
-lawyers
-lax
-laxative
-laxatives
-laxer
-laxity
-laxness
-lay
-layabout
-layabouts
-layby
-laybys
-layer
-layered
-layering
-layers
-laying
-layman
-laymen
-layoff
-layoffs
-layout
-layouts
-layperson
-lays
-lazaret
-lazarus
-laze
-lazed
-lazier
-laziest
-lazily
-laziness
-lazing
-lazuli
-lazy
-lazybones
-lea
-leach
-leached
-leaches
-leaching
-lead
-leaded
-leaden
-leader
-leaderless
-leaders
-leadership
-leaderships
-leadfree
-leading
-leads
-leaf
-leafed
-leafier
-leafiest
-leafiness
-leafing
-leafless
-leaflet
-leaflets
-leafy
-league
-leagues
-leak
-leakage
-leakages
-leaked
-leakier
-leakiest
-leakiness
-leaking
-leaks
-leaky
-lean
-leaned
-leaner
-leanest
-leaning
-leanings
-leanness
-leans
-leant
-leap
-leaped
-leaper
-leapfrog
-leapfrogging
-leaping
-leaps
-leapt
-leapyear
-learn
-learnable
-learned
-learnedly
-learner
-learners
-learning
-learns
-learnt
-lease
-leased
-leasehold
-leaseholder
-leaseholders
-leases
-leash
-leashed
-leashes
-leashing
-leasing
-least
-leat
-leather
-leathers
-leathery
-leave
-leaved
-leaven
-leavened
-leavening
-leaver
-leavers
-leaves
-leaving
-leavings
-lebanon
-lebensraum
-lecher
-lecherous
-lecherousness
-lechery
-lectern
-lector
-lectors
-lecture
-lectured
-lecturer
-lecturers
-lectures
-lectureship
-lectureships
-lecturing
-led
-ledge
-ledger
-ledgers
-ledges
-lee
-leech
-leeches
-leeching
-leeds
-leek
-leeks
-leer
-leered
-leering
-leeringly
-leers
-lees
-leeward
-leeway
-left
-lefthanded
-lefthandedly
-lefthandedness
-lefthander
-lefthanders
-lefties
-leftish
-leftist
-leftists
-leftmost
-leftover
-leftovers
-lefts
-leftward
-leftwards
-lefty
-leg
-legacies
-legacy
-legal
-legalese
-legalisation
-legalise
-legalised
-legalising
-legalism
-legalistic
-legalities
-legality
-legally
-legate
-legatee
-legatees
-legates
-legation
-legato
-legator
-legend
-legendary
-legends
-legerdemain
-legged
-legging
-leggings
-leggy
-leghorn
-leghorns
-legibility
-legible
-legibly
-legion
-legionaries
-legionary
-legionnaires
-legions
-legislate
-legislated
-legislating
-legislation
-legislative
-legislatively
-legislator
-legislators
-legislature
-legislatures
-legitimacy
-legitimate
-legitimated
-legitimately
-legitimating
-legitimation
-legitimisation
-legitimise
-legitimised
-legitimising
-legless
-legman
-legroom
-legs
-legume
-legumes
-leguminous
-legwork
-leipzig
-leisure
-leisured
-leisurely
-leisurewear
-leitmotif
-leitmotifs
-leitmotiv
-leitmotivs
-lemma
-lemmas
-lemming
-lemmings
-lemon
-lemonade
-lemons
-lemur
-lemurs
-lend
-lender
-lenders
-lending
-lends
-length
-lengthen
-lengthened
-lengthening
-lengthens
-lengthier
-lengthiest
-lengthily
-lengths
-lengthways
-lengthwise
-lengthy
-leniency
-lenient
-leniently
-lenin
-lens
-lenses
-lensing
-lent
-lentil
-lentils
-lento
-leonardo
-leone
-leopard
-leopards
-leopardskin
-leotard
-leotards
-leper
-lepers
-leprechaun
-leprechauns
-leprose
-leprosy
-leprous
-lepton
-leptons
-lesbian
-lesbianism
-lesbians
-lesion
-lesions
-lesotho
-less
-lessee
-lessees
-lessen
-lessened
-lessening
-lessens
-lesser
-lesson
-lessons
-lessor
-lessors
-lest
-let
-lethal
-lethality
-lethally
-lethargic
-lethargically
-lethargy
-lets
-letter
-letterbox
-letterboxes
-lettered
-letterhead
-letterheads
-lettering
-letterpress
-letters
-letterwriter
-letting
-lettings
-lettish
-lettuce
-lettuces
-leucine
-leukaemia
-leukemia
-level
-levelheaded
-levelled
-leveller
-levelling
-levelly
-levels
-lever
-leverage
-leveraged
-levered
-levering
-levers
-levi
-leviathan
-levied
-levies
-levitate
-levitated
-levitates
-levitating
-levitation
-levity
-levy
-levying
-lewd
-lewdness
-lexeme
-lexemes
-lexical
-lexically
-lexicographer
-lexicographers
-lexicographic
-lexicographical
-lexicographically
-lexicography
-lexicon
-lexicons
-leyden
-liabilities
-liability
-liable
-liaise
-liaised
-liaises
-liaising
-liaison
-liaisons
-liar
-liars
-libation
-libations
-libel
-libeled
-libeler
-libelled
-libeller
-libelling
-libellous
-libels
-liberal
-liberalisation
-liberalise
-liberalised
-liberalising
-liberalism
-liberality
-liberally
-liberals
-liberate
-liberated
-liberates
-liberating
-liberation
-liberationists
-liberator
-liberators
-liberia
-libero
-libertarian
-libertarianism
-libertarians
-liberties
-libertine
-libertines
-liberty
-libidinous
-libido
-librarian
-librarians
-librarianship
-libraries
-library
-librate
-librated
-librates
-libretti
-librettist
-librettists
-libretto
-libya
-libyan
-libyans
-lice
-licence
-licences
-license
-licensed
-licensee
-licensees
-licenses
-licensing
-licentiate
-licentious
-licentiousness
-lichee
-lichen
-lichened
-lichens
-lichi
-lichis
-lick
-licked
-lickerish
-licking
-licks
-licorice
-lid
-lidded
-lidless
-lido
-lids
-lie
-lied
-lieder
-lien
-liens
-lies
-lieu
-lieutenancy
-lieutenant
-lieutenants
-life
-lifeanddeath
-lifebelt
-lifeblood
-lifeboat
-lifeboatmen
-lifeboats
-lifeforms
-lifegiving
-lifeguard
-lifeguards
-lifeless
-lifelessly
-lifelessness
-lifelike
-lifeline
-lifelines
-lifelong
-liferaft
-liferafts
-lifesaving
-lifesize
-lifesized
-lifespan
-lifespans
-lifestyle
-lifestyles
-lifetaking
-lifethreatening
-lifetime
-lifetimes
-lifework
-lift
-lifted
-lifter
-lifters
-lifting
-liftman
-liftmen
-liftoff
-lifts
-ligament
-ligaments
-ligand
-ligands
-ligature
-ligatured
-ligatures
-ligaturing
-light
-lighted
-lighten
-lightened
-lightening
-lightens
-lighter
-lighters
-lightest
-lightheaded
-lightheadedness
-lighthearted
-lightheartedly
-lightheartedness
-lighthouse
-lighthouses
-lighting
-lightless
-lightly
-lightness
-lightning
-lights
-lightship
-lightweight
-lightweights
-lignite
-likable
-like
-likeability
-likeable
-liked
-likelier
-likeliest
-likelihood
-likely
-likeminded
-liken
-likened
-likeness
-likenesses
-likening
-likens
-likes
-likewise
-liking
-likings
-lilac
-lilacs
-lilies
-lilliput
-lilliputian
-lilongwe
-lilt
-lilting
-lily
-lilylivered
-lilywhite
-lima
-limb
-limber
-limbering
-limbers
-limbless
-limbo
-limbs
-lime
-limekiln
-limelight
-limerick
-limericks
-limes
-limestone
-limestones
-limeys
-liminal
-liming
-limit
-limitation
-limitations
-limited
-limiter
-limiters
-limiting
-limitless
-limits
-limo
-limousin
-limousine
-limousines
-limp
-limped
-limpet
-limpets
-limpid
-limping
-limply
-limpopo
-limps
-linage
-linchpin
-lincoln
-linden
-line
-lineage
-lineages
-lineally
-lineaments
-linear
-linearised
-linearity
-linearly
-lined
-linefeed
-lineman
-linemen
-linen
-linens
-lineout
-lineouts
-liner
-liners
-lines
-linesman
-linesmen
-lineup
-lineups
-linger
-lingered
-lingerer
-lingerie
-lingering
-lingeringly
-lingers
-lingua
-lingual
-linguist
-linguistic
-linguistically
-linguistics
-linguists
-liniment
-liniments
-lining
-linings
-link
-linkable
-linkage
-linkages
-linked
-linker
-linkers
-linking
-links
-linkup
-linkups
-linnet
-linnets
-lino
-linoleum
-linseed
-lint
-lintel
-lintels
-liny
-lion
-lioness
-lionesses
-lionise
-lionised
-lions
-lip
-lipase
-lipid
-lipids
-lipped
-lipread
-lipreading
-lips
-lipservice
-lipstick
-lipsticks
-liquefaction
-liquefied
-liquefy
-liqueur
-liqueurs
-liquid
-liquidate
-liquidated
-liquidating
-liquidation
-liquidations
-liquidator
-liquidators
-liquidise
-liquidised
-liquidiser
-liquidising
-liquidity
-liquids
-liquify
-liquor
-liquorice
-liquorish
-liquors
-lira
-lire
-lisbon
-lisp
-lisped
-lisping
-lisps
-lissom
-lissome
-lissomeness
-lissomness
-list
-listed
-listen
-listened
-listener
-listeners
-listening
-listens
-listeria
-listing
-listings
-listless
-listlessly
-listlessness
-lists
-lit
-litanies
-litany
-litchi
-literacy
-literal
-literalism
-literalistic
-literally
-literals
-literary
-literate
-literati
-literature
-literatures
-lithe
-lithely
-lithium
-lithograph
-lithographic
-lithographs
-lithography
-lithological
-lithologies
-lithology
-lithosphere
-litigant
-litigants
-litigate
-litigating
-litigation
-litigious
-litigiousness
-litmus
-litotes
-litre
-litres
-litter
-littered
-littering
-litters
-little
-littleness
-littler
-littlest
-littoral
-liturgical
-liturgies
-liturgy
-livable
-live
-liveable
-lived
-livelier
-liveliest
-livelihood
-livelihoods
-liveliness
-lively
-liven
-livened
-livening
-livens
-liver
-liveried
-liveries
-liverish
-livers
-liverworts
-livery
-lives
-livestock
-livewire
-livid
-lividly
-living
-livings
-lizard
-lizards
-llama
-llamas
-lls
-load
-loadable
-loaded
-loader
-loaders
-loading
-loadings
-loads
-loaf
-loafed
-loafer
-loafers
-loafing
-loafs
-loam
-loams
-loamy
-loan
-loanable
-loaned
-loaner
-loaning
-loans
-loanword
-loanwords
-loath
-loathe
-loathed
-loathes
-loathing
-loathsome
-loathsomely
-loathsomeness
-loaves
-lob
-lobbed
-lobbied
-lobbies
-lobbing
-lobby
-lobbying
-lobbyist
-lobbyists
-lobe
-lobed
-lobelia
-lobes
-lobotomies
-lobotomised
-lobotomising
-lobotomist
-lobotomy
-lobs
-lobster
-lobsters
-lobular
-local
-locale
-locales
-localisation
-localisations
-localise
-localised
-localises
-localising
-localities
-locality
-locally
-locals
-locatable
-locate
-located
-locates
-locating
-location
-locational
-locations
-locative
-locator
-locators
-loch
-lochness
-lochs
-loci
-lock
-lockable
-lockage
-locked
-locker
-lockers
-locket
-locking
-lockjaw
-lockout
-lockouts
-locks
-locksmith
-loco
-locomote
-locomotion
-locomotive
-locomotives
-locus
-locust
-locusts
-lode
-lodestar
-lodestone
-lodge
-lodged
-lodgement
-lodger
-lodgers
-lodges
-lodging
-lodgings
-loess
-loft
-lofted
-loftier
-loftiest
-loftily
-loftiness
-lofts
-lofty
-log
-loganberries
-loganberry
-logarithm
-logarithmic
-logarithmically
-logarithms
-logbook
-logbooks
-logged
-logger
-loggerheads
-loggers
-logging
-logic
-logical
-logicality
-logically
-logician
-logicians
-logics
-logistic
-logistical
-logistically
-logistics
-logjam
-logo
-logoff
-logos
-logs
-loin
-loincloth
-loins
-loire
-loiter
-loitered
-loiterer
-loiterers
-loitering
-loiters
-loll
-lolled
-lollies
-lolling
-lollipop
-lollipops
-lolly
-london
-londoner
-lone
-lonelier
-loneliest
-loneliness
-lonely
-loner
-loners
-lonesome
-lonesomeness
-long
-longawaited
-longed
-longer
-longest
-longevity
-longfaced
-longhand
-longing
-longingly
-longings
-longish
-longitude
-longitudes
-longitudinal
-longitudinally
-longlasting
-longlived
-longlost
-longs
-longstanding
-longsuffering
-longwinded
-longwindedness
-loo
-look
-lookalike
-lookalikes
-looked
-looker
-lookers
-looking
-lookingglass
-lookingglasses
-lookout
-lookouts
-looks
-loom
-loomed
-looming
-looms
-loon
-looney
-loony
-loop
-looped
-loophole
-loopholes
-looping
-loops
-loopy
-loose
-loosed
-loosely
-loosen
-loosened
-looseness
-loosening
-loosens
-looser
-looses
-loosest
-loosing
-loot
-looted
-looter
-looters
-looting
-loots
-lop
-lope
-loped
-lopes
-loping
-lopped
-lopper
-loppers
-lopping
-lopsided
-lopsidedly
-loquacious
-loquacity
-lord
-lording
-lordly
-lords
-lordship
-lordships
-lore
-lorelei
-lorries
-lorry
-lorryload
-lorryloads
-losable
-lose
-loser
-losers
-loses
-losing
-losings
-loss
-losses
-lost
-lot
-loth
-lotion
-lotions
-lots
-lotteries
-lottery
-lotto
-lotus
-louche
-loud
-louder
-loudest
-loudhailer
-loudhailers
-loudly
-loudmouthed
-loudness
-loudspeaker
-loudspeakers
-louis
-lounge
-lounged
-lounger
-loungers
-lounges
-lounging
-louse
-lousiest
-lousily
-lousy
-lout
-loutish
-loutishness
-louts
-louver
-louvers
-louvre
-louvred
-louvres
-lovable
-love
-loveable
-lovebirds
-loved
-loveless
-lovelier
-lovelies
-loveliest
-loveliness
-lovelorn
-lovely
-lovemaking
-lover
-lovers
-loves
-lovesick
-lovestruck
-loving
-lovingly
-low
-lower
-lowercase
-lowered
-lowering
-lowers
-lowest
-lowing
-lowish
-lowkey
-lowland
-lowlanders
-lowlands
-lowlier
-lowliest
-lowly
-lowlying
-lowness
-lowpitched
-lows
-lowspirited
-loyal
-loyalist
-loyalists
-loyally
-loyalties
-loyalty
-lozenge
-lozenges
-luanda
-lubber
-lubbers
-lubricant
-lubricants
-lubricate
-lubricated
-lubricates
-lubricating
-lubrication
-lubricious
-lucid
-lucidity
-lucidly
-lucifer
-luck
-luckier
-luckiest
-luckily
-luckless
-lucky
-lucrative
-lucre
-ludicrous
-ludicrously
-ludicrousness
-ludo
-lug
-luggage
-lugged
-lugging
-lugs
-lugubrious
-lugubriously
-luke
-lukewarm
-lull
-lullabies
-lullaby
-lulled
-lulling
-lulls
-lulu
-lumbago
-lumbar
-lumber
-lumbered
-lumbering
-lumberjack
-lumberjacks
-lumbers
-lumen
-luminal
-luminance
-luminaries
-luminary
-luminescence
-luminescent
-luminosities
-luminosity
-luminous
-luminously
-lump
-lumped
-lumpen
-lumpier
-lumpiest
-lumpiness
-lumping
-lumpish
-lumps
-lumpy
-luna
-lunacies
-lunacy
-lunar
-lunate
-lunatic
-lunatics
-lunch
-lunched
-luncheon
-luncheons
-lunchers
-lunches
-lunching
-lunchpack
-lunchtime
-lunchtimes
-lune
-lung
-lunge
-lunged
-lunges
-lungfish
-lungful
-lungfuls
-lunging
-lungs
-lupin
-lupines
-lupins
-lur
-lurch
-lurched
-lurchers
-lurches
-lurching
-lure
-lured
-lures
-lurex
-lurid
-luridly
-luring
-lurk
-lurked
-lurker
-lurkers
-lurking
-lurks
-lusaka
-luscious
-lusciously
-lush
-lusher
-lushest
-lushness
-lust
-lusted
-lustful
-lustfully
-lustier
-lustiest
-lustily
-lusting
-lustre
-lustreless
-lustrous
-lusts
-lusty
-lute
-lutes
-luther
-lux
-luxor
-luxuriance
-luxuriant
-luxuriantly
-luxuriate
-luxuriating
-luxuries
-luxurious
-luxuriously
-luxury
-lychee
-lychees
-lye
-lying
-lymph
-lymphatic
-lymphocyte
-lymphocytes
-lymphocytic
-lymphoid
-lymphoma
-lymphomas
-lynch
-lynched
-lynches
-lynching
-lynchpin
-lynx
-lynxes
-lyon
-lyons
-lyra
-lyre
-lyres
-lyric
-lyrical
-lyrically
-lyricism
-lyricist
-lyricists
-lyrics
-lyrist
-lysine
-mac
-macabre
-macaque
-macaques
-macaroni
-macaroon
-macaroons
-macaw
-macaws
-mace
-maces
-machete
-machetes
-machination
-machinations
-machine
-machined
-machinegun
-machineguns
-machinery
-machines
-machinist
-machinists
-machismo
-macho
-macintosh
-macintoshes
-mackerel
-mackintosh
-mackintoshes
-macro
-macrobiotic
-macrocosm
-macroeconomic
-macroeconomics
-macromolecular
-macromolecules
-macron
-macrophage
-macrophages
-macroscopic
-macroscopically
-mad
-madam
-madame
-madams
-madcap
-madden
-maddened
-maddening
-maddeningly
-maddens
-madder
-maddest
-made
-madeira
-mademoiselle
-madhouse
-madly
-madman
-madmen
-madness
-madras
-madrid
-madrigal
-madrigals
-madwoman
-maelstrom
-maestro
-mafia
-mafiosi
-mag
-magazine
-magazines
-magenta
-maggot
-maggots
-magi
-magic
-magical
-magically
-magician
-magicians
-magics
-magisterial
-magisterially
-magistrate
-magistrates
-magma
-magmas
-magmatic
-magnanimity
-magnanimosity
-magnanimous
-magnanimously
-magnate
-magnates
-magnesia
-magnesium
-magnet
-magnetic
-magnetically
-magnetisation
-magnetise
-magnetised
-magnetism
-magnetite
-magneto
-magnetodynamics
-magnetohydrodynamical
-magnetohydrodynamics
-magnetometer
-magnetometers
-magnetosphere
-magnetron
-magnets
-magnification
-magnifications
-magnificence
-magnificent
-magnificently
-magnified
-magnifier
-magnifies
-magnify
-magnifying
-magniloquent
-magnitude
-magnitudes
-magnolia
-magnolias
-magnum
-magnums
-magpie
-magpies
-mags
-mahatma
-mahogany
-maid
-maiden
-maidenly
-maidens
-maids
-maidservant
-maidservants
-mail
-mailable
-mailbox
-mailed
-mailer
-mailing
-mailings
-mailman
-mailmen
-mailorder
-mails
-mailshot
-mailshots
-maim
-maimed
-maiming
-maimings
-maims
-main
-mainbrace
-maine
-mainframe
-mainframes
-mainland
-mainline
-mainly
-mains
-mainsail
-mainspring
-mainstay
-mainstays
-mainstream
-maintain
-maintainability
-maintainable
-maintained
-maintainer
-maintainers
-maintaining
-maintains
-maintenance
-maisonette
-maisonettes
-maize
-maizes
-majestic
-majestically
-majesties
-majesty
-majolica
-major
-majorette
-majorettes
-majorities
-majority
-majors
-make
-makeover
-maker
-makers
-makes
-makeshift
-makeup
-makeweight
-making
-makings
-malachite
-maladaptive
-maladies
-maladjusted
-maladjustment
-maladministration
-maladroit
-malady
-malaise
-malaria
-malarial
-malathion
-malawi
-malay
-malayan
-malays
-malaysia
-malcontent
-malcontents
-maldives
-male
-malefaction
-malefactions
-malefactor
-malefactors
-maleness
-males
-malevolence
-malevolent
-malevolently
-malformation
-malformations
-malformed
-malfunction
-malfunctioned
-malfunctioning
-malfunctions
-malice
-malices
-malicious
-maliciously
-maliciousness
-malign
-malignancies
-malignancy
-malignant
-malignantly
-maligned
-maligners
-maligning
-malignity
-maligns
-malingerers
-malingering
-mall
-mallard
-mallards
-malleability
-malleable
-mallet
-mallets
-mallow
-malls
-malnourished
-malnourishment
-malnutrition
-malodorous
-malpractice
-malpractices
-malt
-malta
-malted
-maltese
-malting
-maltreat
-maltreated
-maltreatment
-malts
-malty
-malva
-mama
-mamas
-mamba
-mambas
-mammal
-mammalia
-mammalian
-mammals
-mammary
-mammoth
-mammoths
-mammy
-man
-manacle
-manacled
-manacles
-manage
-manageability
-manageable
-managed
-management
-managements
-manager
-manageress
-manageresses
-managerial
-managerially
-managers
-managership
-manages
-managing
-manatee
-manciple
-mandarin
-mandarins
-mandate
-mandated
-mandates
-mandating
-mandatory
-mandela
-mandible
-mandibles
-mandibular
-mandolin
-mandolins
-mandrake
-mandril
-mandrill
-mane
-maned
-manes
-maneuver
-manfully
-manganese
-mange
-manger
-mangers
-mangle
-mangled
-mangler
-mangles
-mangling
-mango
-mangrove
-mangroves
-manhandle
-manhandled
-manhandling
-manhole
-manholes
-manhood
-manhunt
-manhunts
-mania
-maniac
-maniacal
-maniacally
-maniacs
-manias
-manic
-manically
-manicdepressive
-manicure
-manicured
-manifest
-manifestation
-manifestations
-manifested
-manifesting
-manifestly
-manifesto
-manifests
-manifold
-manifolds
-manikin
-manila
-manipulable
-manipulate
-manipulated
-manipulates
-manipulating
-manipulation
-manipulations
-manipulative
-manipulator
-manipulators
-mankind
-manliest
-manliness
-manly
-manmade
-manna
-manned
-mannequin
-mannequins
-manner
-mannered
-mannerism
-mannerisms
-mannerist
-mannerliness
-mannerly
-manners
-manning
-manoeuvrability
-manoeuvrable
-manoeuvre
-manoeuvred
-manoeuvres
-manoeuvring
-manoeuvrings
-manometer
-manor
-manorial
-manors
-manpower
-manse
-manservant
-mansion
-mansions
-mansized
-manslaughter
-mantel
-mantelpiece
-mantelpieces
-mantelshelf
-mantids
-mantis
-mantissa
-mantissas
-mantle
-mantled
-mantles
-mantling
-mantra
-mantrap
-mantraps
-mantras
-manual
-manually
-manuals
-manufacture
-manufactured
-manufacturer
-manufacturers
-manufactures
-manufacturing
-manure
-manured
-manures
-manuring
-manuscript
-manuscripts
-many
-maoism
-maoist
-maoists
-maori
-map
-maple
-maples
-mappable
-mapped
-mapper
-mappers
-mapping
-mappings
-maps
-maputo
-maquettes
-mar
-mara
-marathon
-marathons
-marauders
-marauding
-marble
-marbled
-marbles
-march
-marched
-marcher
-marchers
-marches
-marching
-marchioness
-mare
-mares
-margarine
-margarines
-margate
-margin
-marginal
-marginalia
-marginalisation
-marginalise
-marginalised
-marginalises
-marginalising
-marginality
-marginally
-marginals
-margins
-maria
-marigold
-marigolds
-marijuana
-marina
-marinade
-marinas
-marinate
-marinated
-marine
-mariner
-mariners
-marines
-marionette
-marionettes
-marital
-maritime
-mark
-marked
-markedly
-marker
-markers
-market
-marketability
-marketable
-marketed
-marketeer
-marketeers
-marketer
-marketing
-marketplace
-markets
-marking
-markings
-marks
-marksman
-marksmanship
-marksmen
-markup
-markups
-marl
-marls
-marmalade
-marmoset
-marmosets
-marmot
-marmots
-maroon
-marooned
-marooning
-maroons
-marque
-marquee
-marquees
-marques
-marquess
-marquetry
-marquis
-marred
-marriage
-marriageable
-marriages
-married
-marries
-marring
-marrow
-marrows
-marry
-marrying
-mars
-marsala
-marsh
-marshal
-marshalled
-marshaller
-marshalling
-marshals
-marshes
-marshgas
-marshier
-marshiest
-marshiness
-marshland
-marshmallow
-marshmallows
-marshy
-marsupial
-marsupials
-mart
-marten
-martens
-martial
-martian
-martians
-martin
-martinet
-martingale
-martingales
-martini
-martins
-martyr
-martyrdom
-martyred
-martyrs
-martyry
-marvel
-marvelled
-marvelling
-marvellous
-marvellously
-marvels
-marx
-marxism
-marxist
-marxists
-mary
-marzipan
-mas
-mascara
-mascot
-mascots
-masculine
-masculinity
-maser
-maseru
-mash
-mashed
-masher
-mashing
-mask
-masked
-masking
-masks
-masochism
-masochist
-masochistic
-masochistically
-masochists
-mason
-masonic
-masonry
-masons
-masque
-masquerade
-masqueraded
-masquerades
-masquerading
-masques
-mass
-massacre
-massacred
-massacres
-massacring
-massage
-massaged
-massager
-massages
-massaging
-massed
-masses
-masseur
-masseurs
-masseuse
-masseuses
-massif
-massing
-massive
-massively
-massless
-massproduced
-massproducing
-mast
-mastectomy
-masted
-master
-masterclass
-mastered
-masterful
-masterfully
-mastering
-masterly
-mastermind
-masterminded
-masterminding
-masterpiece
-masterpieces
-masters
-mastership
-masterwork
-masterworks
-mastery
-masthead
-masticating
-mastication
-mastiff
-mastitis
-mastodon
-mastodons
-mastoid
-mastoids
-masts
-mat
-matador
-matadors
-match
-matchable
-matchbox
-matchboxes
-matched
-matcher
-matches
-matching
-matchless
-matchmaker
-matchmaking
-matchplay
-matchstick
-matchsticks
-mate
-mated
-mater
-material
-materialisation
-materialise
-materialised
-materialises
-materialising
-materialism
-materialist
-materialistic
-materialistically
-materialists
-materiality
-materially
-materials
-maternal
-maternally
-maternity
-mates
-math
-mathematical
-mathematically
-mathematician
-mathematicians
-mathematics
-maths
-matinee
-matinees
-mating
-matings
-matins
-matriarch
-matriarchal
-matriarchies
-matriarchy
-matrices
-matriculate
-matriculated
-matriculating
-matriculation
-matrilineal
-matrimonial
-matrimonially
-matrimony
-matrix
-matrixes
-matron
-matronly
-matrons
-mats
-matt
-matte
-matted
-matter
-mattered
-mattering
-matteroffact
-matters
-matthew
-matting
-mattress
-mattresses
-maturation
-maturational
-mature
-matured
-maturely
-maturer
-matures
-maturing
-maturity
-maudlin
-maul
-mauled
-mauler
-maulers
-mauling
-mauls
-maumau
-mausoleum
-mausoleums
-mauve
-maverick
-mavericks
-maw
-mawkish
-mawkishness
-maxi
-maxim
-maxima
-maximal
-maximality
-maximally
-maximisation
-maximise
-maximised
-maximiser
-maximises
-maximising
-maxims
-maximum
-may
-maya
-mayas
-maybe
-mayday
-maydays
-mayflies
-mayflower
-mayfly
-mayhap
-mayhem
-mayonnaise
-mayor
-mayoral
-mayoralty
-mayoress
-mayors
-maypole
-maze
-mazes
-mazier
-maziest
-mazurka
-mazy
-mbabane
-me
-mead
-meadow
-meadowland
-meadows
-meagre
-meagrely
-meagreness
-meal
-mealie
-mealies
-meals
-mealtime
-mealtimes
-mealy
-mean
-meander
-meandered
-meandering
-meanderings
-meanders
-meaner
-meanest
-meanie
-meanies
-meaning
-meaningful
-meaningfully
-meaningfulness
-meaningless
-meaninglessly
-meaninglessness
-meanings
-meanly
-meanness
-means
-meant
-meantime
-meanwhile
-meany
-measles
-measly
-measurable
-measurably
-measure
-measured
-measureless
-measurement
-measurements
-measures
-measuring
-meat
-meataxe
-meatball
-meatballs
-meatier
-meatiest
-meatless
-meatpie
-meats
-meaty
-mecca
-mechanic
-mechanical
-mechanically
-mechanicals
-mechanics
-mechanisable
-mechanisation
-mechanise
-mechanised
-mechanising
-mechanism
-mechanisms
-mechanist
-mechanistic
-mechanistically
-medal
-medallion
-medallions
-medallist
-medallists
-medals
-meddle
-meddled
-meddler
-meddlers
-meddles
-meddlesome
-meddling
-media
-mediaeval
-medial
-medially
-median
-medians
-mediate
-mediated
-mediates
-mediating
-mediation
-mediator
-mediators
-mediatory
-medic
-medical
-medically
-medicals
-medicate
-medicated
-medication
-medications
-medicinal
-medicine
-medicines
-medics
-medieval
-medievalist
-medievalists
-mediocre
-mediocrity
-meditate
-meditated
-meditates
-meditating
-meditation
-meditations
-meditative
-meditatively
-meditator
-medium
-mediums
-mediumsized
-medlar
-medley
-medleys
-medulla
-medusa
-meek
-meeker
-meekest
-meekly
-meekness
-meet
-meeter
-meeting
-meetings
-meets
-mega
-megabyte
-megabytes
-megahertz
-megajoules
-megalith
-megalithic
-megalomania
-megalomaniac
-megalomaniacs
-megaparsec
-megaphone
-megastar
-megaton
-megatons
-megavolt
-megawatt
-megawatts
-meiosis
-meiotic
-melancholia
-melancholic
-melancholies
-melancholy
-melange
-melanin
-melanoma
-melanomas
-melatonin
-meld
-melee
-mellifluous
-mellifluously
-mellifluousness
-mellow
-mellowed
-mellower
-mellowing
-mellows
-melodic
-melodically
-melodies
-melodious
-melodiously
-melodrama
-melodramas
-melodramatic
-melodramatically
-melody
-melon
-melons
-melt
-meltdown
-melted
-melter
-melting
-melts
-member
-members
-membership
-memberships
-membrane
-membranes
-memento
-memo
-memoir
-memoirs
-memorabilia
-memorable
-memorably
-memoranda
-memorandum
-memorandums
-memorial
-memorials
-memories
-memorisation
-memorise
-memorised
-memorises
-memorising
-memory
-memphis
-men
-menace
-menaced
-menaces
-menacing
-menacingly
-menagerie
-menarche
-mend
-mendacious
-mendacity
-mended
-mendel
-mendelevium
-mender
-menders
-mendicant
-mending
-mends
-menfolk
-menhir
-menhirs
-menial
-meningitis
-meniscus
-menopausal
-menopause
-menorah
-menstrual
-menstruating
-menstruation
-menswear
-mental
-mentalistic
-mentalities
-mentality
-mentally
-menthol
-mention
-mentionable
-mentioned
-mentioning
-mentions
-mentor
-mentors
-menu
-menus
-meow
-meows
-mercantile
-mercenaries
-mercenary
-merchandise
-merchandising
-merchant
-merchantability
-merchantable
-merchantman
-merchantmen
-merchants
-mercies
-merciful
-mercifully
-merciless
-mercilessly
-mercurial
-mercuric
-mercury
-mercy
-mere
-merely
-merest
-meretricious
-merge
-merged
-merger
-mergers
-merges
-merging
-meridian
-meridians
-meridional
-meringue
-meringues
-merino
-merit
-merited
-meriting
-meritocracy
-meritocratic
-meritocrats
-meritorious
-merits
-mermaid
-mermaids
-merman
-mermen
-meromorphic
-merrier
-merriest
-merrily
-merriment
-merry
-merrygoround
-merrygorounds
-merrymaking
-mescaline
-mesh
-meshed
-meshes
-meshing
-mesmeric
-mesmerised
-mesmerising
-mesolithic
-meson
-mesons
-mesosphere
-mesozoic
-mess
-message
-messages
-messaging
-messed
-messenger
-messengers
-messes
-messiah
-messier
-messiest
-messily
-messiness
-messing
-messy
-mestizo
-met
-metabolic
-metabolically
-metabolise
-metabolised
-metabolises
-metabolism
-metabolisms
-metal
-metalanguage
-metalinguistic
-metalled
-metallic
-metallised
-metallurgical
-metallurgist
-metallurgy
-metals
-metalwork
-metalworking
-metamorphic
-metamorphism
-metamorphose
-metamorphosed
-metamorphoses
-metamorphosis
-metaphor
-metaphoric
-metaphorical
-metaphorically
-metaphors
-metaphysical
-metaphysically
-metaphysics
-metastability
-metastable
-metastases
-metastasis
-metastatic
-metatarsal
-meted
-metempsychosis
-meteor
-meteoric
-meteorite
-meteorites
-meteoritic
-meteorological
-meteorologist
-meteorologists
-meteorology
-meteors
-meter
-metered
-metering
-meters
-methadone
-methane
-methanol
-methionine
-method
-methodical
-methodically
-methodological
-methodologically
-methodologies
-methodology
-methods
-methyl
-methylated
-methylene
-meticulous
-meticulously
-metier
-metonymic
-metonymy
-metre
-metres
-metric
-metrical
-metrically
-metrication
-metrics
-metro
-metronome
-metronomes
-metronomic
-metropolis
-metropolises
-metropolitan
-mettle
-mew
-mewing
-mews
-mexican
-mexicans
-mexico
-mezzanine
-mezzosoprano
-miami
-miasma
-mica
-mice
-micelles
-michigan
-micro
-microanalyses
-microbe
-microbes
-microbial
-microbic
-microbiological
-microbiologist
-microbiologists
-microbiology
-microchip
-microchips
-microcode
-microcomputer
-microcomputers
-microcosm
-microcosmic
-microdensitometer
-microdot
-microelectronic
-microelectronics
-microfarad
-microfiche
-microfilm
-microfilming
-microgrammes
-micrograms
-micrograph
-micrographs
-microgravity
-microhydrodynamics
-microlight
-micrometer
-micrometers
-micrometres
-micron
-microns
-microorganism
-microorganisms
-microphone
-microphones
-microprocessor
-microprocessors
-microprogram
-microscope
-microscopes
-microscopic
-microscopically
-microscopist
-microscopy
-microsecond
-microseconds
-microsurgery
-microwave
-microwaveable
-microwaved
-microwaves
-micturition
-mid
-midafternoon
-midair
-midas
-midday
-middays
-midden
-middle
-middleage
-middleaged
-middleclass
-middleman
-middlemen
-middleoftheroad
-middles
-middlesized
-middleweight
-middling
-midevening
-midfield
-midfielder
-midfielders
-midflight
-midge
-midges
-midget
-midgets
-midi
-midland
-midlands
-midlife
-midline
-midmorning
-midmost
-midnight
-midnights
-midribs
-midriff
-midship
-midshipman
-midships
-midst
-midstream
-midsummer
-midway
-midweek
-midwicket
-midwife
-midwifery
-midwinter
-midwives
-mien
-might
-mightier
-mightiest
-mightily
-mights
-mighty
-migraine
-migraines
-migrant
-migrants
-migrate
-migrated
-migrates
-migrating
-migration
-migrations
-migratory
-mike
-mikes
-milady
-milan
-mild
-milder
-mildest
-mildew
-mildewed
-mildews
-mildewy
-mildly
-mildmannered
-mildness
-mile
-mileage
-mileages
-milepost
-mileposts
-miler
-miles
-milestone
-milestones
-milieu
-milieus
-milieux
-militancy
-militant
-militantly
-militants
-militarily
-militarisation
-militarised
-militarism
-militarist
-militaristic
-military
-militate
-militated
-militates
-militating
-militia
-militiaman
-militiamen
-militias
-milk
-milked
-milker
-milkers
-milkier
-milkiest
-milking
-milkmaid
-milkmaids
-milkman
-milkmen
-milks
-milkshake
-milkshakes
-milky
-milkyway
-mill
-milled
-millenarian
-millenarianism
-millennia
-millennial
-millennium
-miller
-millers
-millet
-millibars
-milligram
-milligrams
-millilitres
-millimetre
-millimetres
-milliner
-milliners
-millinery
-milling
-million
-millionaire
-millionaires
-millions
-millionth
-millionths
-millipede
-millipedes
-millisecond
-milliseconds
-millpond
-mills
-millstone
-millstones
-milord
-milt
-mime
-mimed
-mimeographed
-mimes
-mimetic
-mimic
-mimicked
-mimicker
-mimicking
-mimicry
-mimics
-miming
-mimosa
-minaret
-minarets
-mince
-minced
-mincemeat
-mincer
-mincers
-minces
-mincing
-mind
-mindboggling
-mindbogglingly
-minded
-mindedness
-minder
-minders
-mindful
-minding
-mindless
-mindlessly
-mindlessness
-mindreader
-minds
-mindset
-mine
-mined
-minedetector
-minefield
-minefields
-miner
-mineral
-mineralisation
-mineralised
-mineralogical
-mineralogy
-minerals
-miners
-mines
-mineshaft
-minestrone
-minesweeper
-minesweepers
-mineworkers
-mingle
-mingled
-mingles
-mingling
-mini
-miniature
-miniatures
-miniaturisation
-miniaturise
-miniaturised
-miniaturises
-miniaturising
-miniaturist
-minibar
-minibus
-minibuses
-minicab
-minicomputer
-minicomputers
-minify
-minim
-minima
-minimal
-minimalism
-minimalist
-minimalistic
-minimalists
-minimality
-minimally
-minimisation
-minimise
-minimised
-minimiser
-minimises
-minimising
-minimum
-mining
-minings
-minion
-minions
-miniskirt
-minister
-ministered
-ministerial
-ministerially
-ministering
-ministers
-ministration
-ministrations
-ministries
-ministry
-mink
-minke
-minks
-minnow
-minnows
-minor
-minorities
-minority
-minors
-minster
-minstrel
-minstrels
-mint
-minted
-mintier
-mintiest
-minting
-mints
-minty
-minuet
-minuets
-minus
-minuscule
-minuses
-minute
-minuted
-minutely
-minuteness
-minutes
-minutest
-minutiae
-minx
-minxes
-miosis
-miracle
-miracles
-miraculous
-miraculously
-miraculousness
-mirage
-mirages
-mire
-mired
-mires
-mirror
-mirrored
-mirroring
-mirrors
-mirth
-mirthful
-mirthless
-mirthlessly
-misadventure
-misaligned
-misalignment
-misanalysed
-misanthrope
-misanthropes
-misanthropic
-misanthropists
-misanthropy
-misapplication
-misapply
-misapprehension
-misapprehensions
-misappropriated
-misappropriation
-misbegotten
-misbehave
-misbehaved
-misbehaves
-misbehaving
-misbehaviour
-miscalculate
-miscalculated
-miscalculation
-miscalculations
-miscarriage
-miscarriages
-miscarried
-miscarry
-miscarrying
-miscast
-miscasting
-miscegenation
-miscellanea
-miscellaneous
-miscellanies
-miscellany
-mischance
-mischief
-mischiefmakers
-mischiefmaking
-mischievous
-mischievously
-miscible
-misclassified
-miscomprehended
-misconceived
-misconception
-misconceptions
-misconduct
-misconfiguration
-misconstrued
-miscopying
-miscount
-miscounted
-miscounting
-miscreant
-miscreants
-miscue
-miscues
-misdate
-misdeal
-misdealing
-misdeed
-misdeeds
-misdemeanour
-misdemeanours
-misdiagnosis
-misdirect
-misdirected
-misdirecting
-misdirection
-misdirections
-misdoing
-miser
-miserable
-miserably
-miseries
-miserliness
-miserly
-misers
-misery
-misfield
-misfiled
-misfire
-misfired
-misfires
-misfit
-misfits
-misfortune
-misfortunes
-misgive
-misgiving
-misgivings
-misgovernment
-misguide
-misguided
-misguidedly
-mishandle
-mishandled
-mishandles
-mishandling
-mishap
-mishaps
-mishear
-misheard
-mishearing
-mishears
-mishitting
-misidentification
-misinform
-misinformation
-misinformed
-misinterpret
-misinterpretation
-misinterpretations
-misinterpreted
-misinterpreting
-misinterprets
-misjudge
-misjudged
-misjudgement
-misjudgements
-misjudging
-misjudgment
-mislabelled
-mislaid
-mislay
-mislead
-misleading
-misleadingly
-misleads
-misled
-mismanage
-mismanaged
-mismanagement
-mismatch
-mismatched
-mismatches
-mismatching
-misname
-misnamed
-misnomer
-misnomers
-misogynist
-misogynistic
-misogynists
-misogyny
-misplace
-misplaced
-misplacement
-misplaces
-misplacing
-mispositioned
-misprint
-misprinted
-misprinting
-misprints
-mispronounced
-mispronouncing
-mispronunciation
-mispronunciations
-misquotation
-misquote
-misquoted
-misquotes
-misquoting
-misread
-misreading
-misremember
-misremembered
-misremembering
-misrepresent
-misrepresentation
-misrepresentations
-misrepresented
-misrepresenting
-misrepresents
-misrule
-miss
-missal
-missals
-missed
-misses
-misshapen
-missile
-missiles
-missing
-mission
-missionaries
-missionary
-missions
-missive
-missives
-missouri
-misspell
-misspelled
-misspelling
-misspellings
-misspells
-misspelt
-misspend
-misspent
-misstatement
-missteps
-missus
-missuses
-missy
-mist
-mistake
-mistaken
-mistakenly
-mistakes
-mistaking
-misted
-mister
-misters
-mistier
-mistiest
-mistily
-mistime
-mistimed
-mistiness
-misting
-mistletoe
-mistook
-mistranslated
-mistranslates
-mistranslating
-mistranslation
-mistranslations
-mistreat
-mistreated
-mistreating
-mistreatment
-mistress
-mistresses
-mistrust
-mistrusted
-mistrustful
-mistrustfully
-mistrusting
-mistrusts
-mists
-misty
-mistype
-mistyped
-mistypes
-mistyping
-mistypings
-misunderstand
-misunderstanding
-misunderstandings
-misunderstands
-misunderstood
-misuse
-misused
-misuser
-misuses
-misusing
-mite
-mites
-mitigate
-mitigated
-mitigates
-mitigating
-mitigation
-mitigatory
-mitochondria
-mitochondrial
-mitosis
-mitre
-mitred
-mitres
-mitt
-mitten
-mittens
-mitts
-mix
-mixable
-mixed
-mixer
-mixers
-mixes
-mixing
-mixture
-mixtures
-mixup
-mixups
-mnemonic
-mnemonically
-mnemonics
-moan
-moaned
-moaner
-moaners
-moaning
-moans
-moas
-moat
-moated
-moats
-mob
-mobbed
-mobbing
-mobbish
-mobile
-mobiles
-mobilisable
-mobilisation
-mobilise
-mobilised
-mobilises
-mobilising
-mobilities
-mobility
-mobs
-mobster
-mobsters
-moccasin
-moccasins
-mock
-mocked
-mocker
-mockeries
-mockers
-mockery
-mocking
-mockingbird
-mockingly
-mocks
-mockup
-mockups
-mod
-modal
-modalities
-modality
-mode
-model
-modelled
-modeller
-modellers
-modelling
-models
-modem
-modems
-moderate
-moderated
-moderately
-moderates
-moderating
-moderation
-moderations
-moderator
-moderators
-modern
-moderner
-modernisation
-modernisations
-modernise
-modernised
-modernising
-modernism
-modernist
-modernistic
-modernists
-modernity
-modes
-modest
-modestly
-modesty
-modicum
-modifiable
-modification
-modifications
-modified
-modifier
-modifiers
-modifies
-modify
-modifying
-modish
-modishly
-modular
-modularisation
-modularise
-modularised
-modularising
-modularity
-modulate
-modulated
-modulates
-modulating
-modulation
-modulations
-modulator
-module
-modules
-moduli
-modulus
-mogul
-moguls
-mohair
-mohairs
-moiety
-moist
-moisten
-moistened
-moistening
-moistens
-moister
-moistness
-moisture
-moisturise
-moisturiser
-moisturisers
-moisturising
-molar
-molarities
-molarity
-molars
-molasses
-mold
-molds
-moldy
-mole
-molecular
-molecule
-molecules
-molehill
-molehills
-moles
-moleskin
-molest
-molestation
-molestations
-molested
-molester
-molesters
-molesting
-molests
-mollified
-mollifies
-mollify
-mollusc
-molluscan
-molluscs
-molten
-molts
-molybdenum
-mom
-moment
-momentarily
-momentary
-momentous
-moments
-momentum
-moms
-monaco
-monadic
-monalisa
-monarch
-monarchic
-monarchical
-monarchies
-monarchist
-monarchists
-monarchs
-monarchy
-monasteries
-monastery
-monastic
-monasticism
-monaural
-monday
-mondays
-monetarism
-monetarist
-monetarists
-monetary
-money
-moneyed
-moneylender
-moneylenders
-moneyless
-moneys
-monger
-mongers
-mongol
-mongols
-mongoose
-mongrel
-mongrels
-monies
-monition
-monitor
-monitored
-monitoring
-monitors
-monk
-monkey
-monkeyed
-monkeying
-monkeys
-monkfish
-monkish
-monks
-mono
-monochromatic
-monochrome
-monocle
-monocled
-monoclonal
-monocular
-monoculture
-monocytes
-monogamous
-monogamously
-monogamy
-monogram
-monogrammed
-monograph
-monographic
-monographs
-monolayer
-monolayers
-monolingual
-monolith
-monolithic
-monoliths
-monologue
-monologues
-monomania
-monomer
-monomeric
-monomers
-monomial
-monomials
-monomolecular
-monophonic
-monophthongs
-monoplane
-monopole
-monopoles
-monopolies
-monopolisation
-monopolise
-monopolised
-monopolises
-monopolising
-monopolist
-monopolistic
-monopolists
-monopoly
-monorail
-monostable
-monosyllabic
-monosyllable
-monosyllables
-monotheism
-monotheist
-monotheistic
-monotheists
-monotone
-monotonic
-monotonically
-monotonicity
-monotonous
-monotonously
-monotony
-monoxide
-monroe
-monsieur
-monsoon
-monsoons
-monster
-monsters
-monstrosities
-monstrosity
-monstrous
-monstrously
-montage
-montages
-month
-monthlies
-monthly
-months
-montreal
-monument
-monumental
-monumentally
-monuments
-moo
-mood
-moodiest
-moodily
-moodiness
-moods
-moody
-mooed
-mooing
-moon
-moonbeam
-moonbeams
-mooning
-moonless
-moonlight
-moonlighting
-moonlit
-moonrise
-moons
-moonshine
-moonshot
-moonshots
-moonstones
-moor
-moored
-moorhen
-moorhens
-mooring
-moorings
-moorland
-moorlands
-moors
-moos
-moose
-moot
-mooted
-mop
-mope
-moped
-mopeds
-mopes
-moping
-mopped
-mopping
-mops
-moraine
-moraines
-moral
-morale
-morales
-moralise
-moralised
-moralising
-moralism
-moralist
-moralistic
-moralists
-moralities
-morality
-morally
-morals
-morass
-morasses
-moratorium
-moray
-morays
-morbid
-morbidity
-morbidly
-mordant
-more
-moreover
-mores
-morgue
-moribund
-moribundity
-moribundly
-mormon
-mormons
-morn
-morning
-mornings
-morns
-moroccan
-morocco
-moron
-moronic
-morons
-morose
-morosely
-moroseness
-morph
-morpheme
-morphemes
-morpheus
-morphia
-morphine
-morphism
-morphisms
-morphogenesis
-morphogenetic
-morphological
-morphologically
-morphologies
-morphology
-morrow
-morse
-morsel
-morsels
-mort
-mortal
-mortalities
-mortality
-mortally
-mortals
-mortar
-mortars
-mortgage
-mortgageable
-mortgaged
-mortgagee
-mortgagees
-mortgages
-mortgaging
-mortgagor
-mortice
-mortices
-mortification
-mortified
-mortify
-mortifying
-mortise
-mortises
-mortuary
-mosaic
-mosaics
-moscow
-moses
-mosque
-mosques
-mosquito
-moss
-mosses
-mossier
-mossiest
-mossy
-most
-mostly
-motel
-motels
-motes
-motet
-motets
-moth
-mothball
-mothballed
-mothballs
-motheaten
-mother
-motherboard
-motherboards
-mothered
-motherhood
-mothering
-motherinlaw
-motherland
-motherless
-motherly
-motherofpearl
-mothers
-mothersinlaw
-motherstobe
-moths
-motif
-motifs
-motile
-motility
-motion
-motional
-motioned
-motioning
-motionless
-motionlessly
-motions
-motivate
-motivated
-motivates
-motivating
-motivation
-motivational
-motivations
-motivator
-motivators
-motive
-motiveless
-motives
-motley
-motlier
-motliest
-motocross
-motor
-motorbike
-motorbikes
-motorcade
-motorcar
-motorcars
-motorcycle
-motorcycles
-motorcycling
-motorcyclist
-motorcyclists
-motored
-motoring
-motorised
-motorist
-motorists
-motors
-motorway
-motorways
-mottled
-motto
-mould
-moulded
-moulder
-mouldering
-moulders
-mouldier
-mouldiest
-moulding
-mouldings
-moulds
-mouldy
-moult
-moulted
-moulting
-moults
-mound
-mounded
-mounds
-mount
-mountable
-mountain
-mountaineer
-mountaineering
-mountaineers
-mountainous
-mountains
-mountainside
-mountainsides
-mounted
-mountie
-mounties
-mounting
-mountings
-mounts
-mourn
-mourned
-mourner
-mourners
-mournful
-mournfully
-mournfulness
-mourning
-mourns
-mouse
-mouselike
-mousetrap
-mousetraps
-mousey
-moussaka
-mousse
-mousses
-moustache
-moustached
-moustaches
-mousy
-mouth
-mouthed
-mouthful
-mouthfuls
-mouthing
-mouthorgan
-mouthparts
-mouthpiece
-mouthpieces
-mouths
-mouthtomouth
-mouthwash
-mouthwatering
-movable
-move
-moveable
-moved
-movement
-movements
-mover
-movers
-moves
-movie
-movies
-moving
-movingly
-mow
-mowed
-mower
-mowers
-mowing
-mown
-mows
-mozart
-mr
-mrs
-ms
-mu
-much
-muchness
-muck
-mucked
-mucking
-mucks
-mucky
-mucosa
-mucous
-mucus
-mud
-muddied
-muddier
-muddies
-muddiest
-muddle
-muddled
-muddles
-muddling
-muddy
-muddying
-mudflats
-mudflow
-mudflows
-mudguard
-mudguards
-mudlarks
-muds
-muesli
-muff
-muffed
-muffin
-muffins
-muffle
-muffled
-muffler
-mufflers
-muffling
-muffs
-mufti
-mug
-mugged
-mugger
-muggers
-muggier
-mugging
-muggings
-muggy
-mugs
-mugshots
-mulberries
-mulberry
-mulch
-mulches
-mulching
-mule
-mules
-mull
-mullah
-mullahs
-mulled
-mullet
-mulling
-mullioned
-mullions
-multichannel
-multicolour
-multicoloured
-multicultural
-multiculturalism
-multidimensional
-multifarious
-multiform
-multifunction
-multifunctional
-multilateral
-multilateralism
-multilayer
-multilevel
-multilingual
-multimedia
-multimeter
-multimillion
-multinational
-multinationals
-multiphase
-multiple
-multiples
-multiplex
-multiplexed
-multiplexer
-multiplexers
-multiplexes
-multiplexing
-multiplexor
-multiplexors
-multiplication
-multiplications
-multiplicative
-multiplicities
-multiplicity
-multiplied
-multiplier
-multipliers
-multiplies
-multiply
-multiplying
-multiprocessing
-multiprocessor
-multiprocessors
-multiprogramming
-multiracial
-multitude
-multitudes
-mum
-mumble
-mumbled
-mumbler
-mumbles
-mumbling
-mumblings
-mumbojumbo
-mummies
-mummification
-mummified
-mummify
-mummy
-mumps
-mums
-munch
-munched
-muncher
-munchers
-munches
-munching
-mundane
-mundanely
-munich
-municipal
-municipalities
-municipality
-munificence
-munificent
-munificently
-munition
-munitions
-muons
-mural
-murals
-murder
-murdered
-murderer
-murderers
-murderess
-murdering
-murderous
-murderously
-murders
-murk
-murkier
-murkiest
-murkiness
-murky
-murmur
-murmured
-murmurer
-murmuring
-murmurings
-murmurs
-murray
-muscadel
-muscat
-muscle
-muscled
-muscles
-muscling
-muscular
-muscularity
-musculature
-musculoskeletal
-muse
-mused
-muses
-museum
-museums
-mush
-mushes
-mushroom
-mushroomed
-mushrooming
-mushrooms
-mushy
-music
-musical
-musicality
-musically
-musicals
-musician
-musicians
-musicianship
-musicologist
-musicologists
-musicology
-musing
-musingly
-musings
-musk
-musket
-musketeer
-musketeers
-muskets
-muskier
-muskiest
-musks
-musky
-muslim
-muslims
-muslin
-mussel
-mussels
-must
-mustache
-mustang
-mustangs
-mustard
-muster
-mustered
-mustering
-musters
-mustier
-mustiest
-mustily
-mustiness
-musts
-musty
-mutability
-mutable
-mutagens
-mutant
-mutants
-mutate
-mutated
-mutates
-mutating
-mutation
-mutational
-mutations
-mute
-muted
-mutely
-muteness
-mutes
-mutilate
-mutilated
-mutilates
-mutilating
-mutilation
-mutilations
-mutineer
-mutineers
-muting
-mutinied
-mutinies
-mutinous
-mutinously
-mutiny
-mutt
-mutter
-muttered
-mutterer
-mutterers
-muttering
-mutterings
-mutters
-mutton
-muttons
-mutts
-mutual
-mutuality
-mutually
-muzak
-muzzle
-muzzled
-muzzles
-muzzling
-my
-myalgic
-myelin
-myna
-mynahs
-myocardial
-myope
-myopia
-myopic
-myopically
-myriad
-myriads
-myrrh
-myself
-mysteries
-mysterious
-mysteriously
-mystery
-mystic
-mystical
-mystically
-mysticism
-mystics
-mystification
-mystified
-mystifies
-mystify
-mystifying
-mystique
-myth
-mythic
-mythical
-mythological
-mythologies
-mythologised
-mythology
-myths
-myxomatosis
-nab
-nabbed
-nabs
-nadir
-nag
-nagasaki
-nagged
-nagger
-nagging
-nags
-naiad
-naiads
-nail
-nailbiting
-nailed
-nailing
-nails
-nairobi
-naive
-naively
-naivete
-naivety
-naked
-nakedly
-nakedness
-name
-nameable
-namecalling
-named
-namedropping
-nameless
-namely
-nameplate
-nameplates
-names
-namesake
-namesakes
-namibia
-namibian
-naming
-namings
-nannies
-nanny
-nanometre
-nanometres
-nanosecond
-nanoseconds
-nanotechnology
-naomi
-nap
-napalm
-nape
-naphtha
-napkin
-napkins
-naples
-napoleon
-napped
-nappies
-napping
-nappy
-naps
-narcissism
-narcissistic
-narcoleptic
-narcosis
-narcotic
-narcotics
-narrate
-narrated
-narrates
-narrating
-narration
-narrations
-narrative
-narratives
-narratology
-narrator
-narrators
-narrow
-narrowed
-narrower
-narrowest
-narrowing
-narrowly
-narrowminded
-narrowmindedness
-narrowness
-narrows
-narwhal
-nasal
-nasalised
-nasally
-nascent
-nastier
-nastiest
-nastily
-nastiness
-nasturtium
-nasturtiums
-nasty
-natal
-nation
-national
-nationalisation
-nationalisations
-nationalise
-nationalised
-nationalising
-nationalism
-nationalist
-nationalistic
-nationalists
-nationalities
-nationality
-nationally
-nationals
-nationhood
-nations
-nationwide
-native
-natives
-nativity
-nato
-nattering
-natural
-naturalisation
-naturalise
-naturalised
-naturalism
-naturalist
-naturalistic
-naturalists
-naturally
-naturalness
-nature
-natures
-naturist
-naturists
-naught
-naughtiest
-naughtily
-naughtiness
-naughts
-naughty
-nausea
-nauseate
-nauseated
-nauseates
-nauseating
-nauseatingly
-nauseous
-nauseousness
-nautical
-nautili
-nautilus
-naval
-nave
-navel
-navels
-navies
-navigable
-navigate
-navigated
-navigating
-navigation
-navigational
-navigator
-navigators
-navvies
-navvy
-navy
-nay
-nazi
-naziism
-nazis
-nazism
-ndebele
-ne
-near
-nearby
-neared
-nearer
-nearest
-nearing
-nearly
-nearness
-nears
-nearside
-nearsighted
-neat
-neaten
-neatening
-neatens
-neater
-neatest
-neatly
-neatness
-nebula
-nebulae
-nebular
-nebulas
-nebulosity
-nebulous
-nebulously
-nebulousness
-necessaries
-necessarily
-necessary
-necessitate
-necessitated
-necessitates
-necessitating
-necessities
-necessity
-neck
-neckband
-necked
-necking
-necklace
-necklaces
-neckline
-necklines
-necks
-necktie
-necromancer
-necromancers
-necromancy
-necromantic
-necrophilia
-necrophiliac
-necrophiliacs
-necropolis
-necropsy
-necrosis
-necrotic
-nectar
-nectarines
-nectars
-nee
-need
-needed
-needful
-needier
-neediest
-neediness
-needing
-needle
-needlecraft
-needled
-needles
-needless
-needlessly
-needlework
-needling
-needs
-needy
-negate
-negated
-negates
-negating
-negation
-negations
-negative
-negatively
-negativeness
-negatives
-negativism
-negativity
-negev
-neglect
-neglected
-neglectful
-neglecting
-neglects
-negligee
-negligees
-negligence
-negligent
-negligently
-negligibility
-negligible
-negligibly
-negotiable
-negotiate
-negotiated
-negotiates
-negotiating
-negotiation
-negotiations
-negotiator
-negotiators
-negroid
-neigh
-neighbour
-neighbourhood
-neighbourhoods
-neighbouring
-neighbourliness
-neighbourly
-neighbours
-neighed
-neighing
-neither
-nematode
-nematodes
-nemesis
-neolithic
-neologism
-neologisms
-neon
-neonatal
-neonate
-neonates
-neophyte
-neophytes
-neoplasm
-neoplasms
-neoprene
-nepal
-nephew
-nephews
-nephritis
-nepotism
-neptune
-neptunium
-nerd
-nerds
-nerve
-nerveless
-nervelessness
-nerves
-nervous
-nervously
-nervousness
-nervy
-nest
-nestable
-nested
-nestegg
-nesting
-nestle
-nestled
-nestles
-nestling
-nests
-net
-netball
-nether
-nethermost
-nets
-nett
-netted
-netting
-nettle
-nettled
-nettles
-netts
-network
-networked
-networking
-networks
-neural
-neuralgia
-neurobiology
-neurological
-neurologically
-neurologist
-neurologists
-neurology
-neuron
-neuronal
-neurone
-neurones
-neurons
-neurophysiology
-neuroscience
-neuroscientists
-neuroses
-neurosis
-neurosurgeon
-neurosurgeons
-neurosurgery
-neurotic
-neurotically
-neurotics
-neurotransmitter
-neurotransmitters
-neuter
-neutered
-neutering
-neuters
-neutral
-neutralisation
-neutralise
-neutralised
-neutraliser
-neutralises
-neutralising
-neutralism
-neutralist
-neutrality
-neutrally
-neutrals
-neutrino
-neutron
-neutrons
-never
-neverending
-nevertheless
-new
-newborn
-newcomer
-newcomers
-newer
-newest
-newfangled
-newfound
-newish
-newlook
-newly
-newlywed
-newlyweds
-newness
-news
-newsagent
-newsagents
-newsboy
-newscast
-newscasters
-newsflash
-newsflashes
-newsletter
-newsletters
-newsman
-newsmen
-newspaper
-newspapermen
-newspapers
-newsprint
-newsreader
-newsreaders
-newsreel
-newsreels
-newsroom
-newsstand
-newsstands
-newsworthy
-newsy
-newt
-newton
-newts
-next
-ngoing
-nguni
-ngunis
-niagara
-nib
-nibble
-nibbled
-nibbler
-nibblers
-nibbles
-nibbling
-nibs
-nice
-nicely
-niceness
-nicer
-nicest
-niceties
-nicety
-niche
-niches
-nick
-nicked
-nickel
-nicking
-nickname
-nicknamed
-nicknames
-nicks
-nicotine
-niece
-nieces
-niftily
-nifty
-niger
-nigeria
-niggardly
-niggle
-niggled
-niggles
-niggling
-nigh
-night
-nightcap
-nightcaps
-nightclothes
-nightclub
-nightclubs
-nightdress
-nightdresses
-nightfall
-nightgown
-nightie
-nighties
-nightingale
-nightingales
-nightlife
-nightly
-nightmare
-nightmares
-nightmarish
-nights
-nightwatchman
-nightwear
-nihilism
-nihilist
-nihilistic
-nil
-nile
-nils
-nimble
-nimbleness
-nimbly
-nimbus
-nincompoop
-nine
-ninefold
-nines
-nineteen
-nineteenth
-nineties
-ninetieth
-ninety
-nineveh
-ninny
-ninth
-ninths
-nip
-nipped
-nipper
-nipping
-nipple
-nipples
-nippon
-nips
-nirvana
-nit
-nitpicking
-nitrate
-nitrates
-nitric
-nitrogen
-nitrogenous
-nitroglycerine
-nitrous
-nits
-nitwit
-nixon
-no
-noah
-nobility
-noble
-nobleman
-noblemen
-nobleness
-nobler
-nobles
-noblest
-nobly
-nobodies
-nobody
-noctuids
-nocturnal
-nocturnally
-nocturne
-nocturnes
-nod
-nodal
-nodded
-nodding
-noddle
-noddy
-node
-nodes
-nods
-nodular
-nodule
-noduled
-nodules
-noel
-noggin
-nogging
-nohow
-noise
-noiseless
-noiselessly
-noises
-noisier
-noisiest
-noisily
-noisiness
-noisome
-noisy
-nomad
-nomadic
-nomads
-nomenclature
-nomenclatures
-nominal
-nominally
-nominate
-nominated
-nominates
-nominating
-nomination
-nominations
-nominative
-nominator
-nominee
-nominees
-non
-nonbeliever
-nonbelievers
-nonchalance
-nonchalant
-nonchalantly
-nonconformist
-nonconformists
-nonconformity
-nondrinkers
-none
-nonentities
-nonentity
-nonessential
-nonessentials
-nonetheless
-nonevent
-nonexistence
-nonexistent
-nonfunctional
-noninterference
-nonintervention
-nonparticipation
-nonpayment
-nonplussed
-nonsense
-nonsenses
-nonsensical
-nonsmoker
-nonsmokers
-nonsmoking
-nonviolence
-nonviolent
-noodle
-noodles
-nook
-nooks
-noon
-noonday
-noons
-noontide
-noose
-noosed
-nooses
-nor
-noradrenalin
-noradrenaline
-nordic
-norm
-normal
-normalcy
-normalisable
-normalisation
-normalisations
-normalise
-normalised
-normaliser
-normalisers
-normalises
-normalising
-normality
-normally
-normals
-norman
-normandy
-normans
-normative
-normed
-norms
-norsemen
-north
-northbound
-northerly
-northern
-northerner
-northerners
-northernmost
-northmen
-northward
-northwards
-norway
-nose
-nosed
-nosedive
-noses
-nosey
-nosier
-nosiest
-nosily
-nosiness
-nosing
-nostalgia
-nostalgic
-nostalgically
-nostril
-nostrils
-nostrum
-nosy
-not
-notable
-notables
-notably
-notaries
-notary
-notation
-notational
-notationally
-notations
-notch
-notched
-notches
-notching
-note
-notebook
-notebooks
-noted
-notepad
-notepads
-notepaper
-notes
-noteworthy
-nothing
-nothingness
-nothings
-notice
-noticeable
-noticeably
-noticeboard
-noticeboards
-noticed
-notices
-noticing
-notifiable
-notification
-notifications
-notified
-notifies
-notify
-notifying
-noting
-notion
-notional
-notionally
-notions
-notoriety
-notorious
-notoriously
-notwithstanding
-nougat
-nougats
-nought
-noughts
-noun
-nounal
-nouns
-nourish
-nourished
-nourishes
-nourishing
-nourishment
-novel
-novelette
-novelist
-novelistic
-novelists
-novelle
-novels
-novelties
-novelty
-november
-novice
-novices
-now
-nowadays
-nowhere
-noxious
-noxiously
-noxiousness
-nozzle
-nozzles
-nu
-nuance
-nuances
-nuclear
-nuclei
-nucleic
-nucleus
-nude
-nudeness
-nudes
-nudge
-nudged
-nudges
-nudging
-nudism
-nudist
-nudists
-nudities
-nudity
-nugget
-nuggets
-nuisance
-nuisances
-nuke
-null
-nullification
-nullified
-nullifies
-nullify
-nullifying
-nullity
-nulls
-numb
-numbed
-number
-numbered
-numbering
-numberings
-numberless
-numberplate
-numbers
-numbing
-numbingly
-numbly
-numbness
-numbs
-numbskull
-numeracy
-numeral
-numerals
-numerate
-numerator
-numerators
-numeric
-numerical
-numerically
-numerological
-numerologist
-numerologists
-numerology
-numerous
-numismatic
-numismatics
-numskull
-nun
-nunneries
-nunnery
-nuns
-nuptial
-nuptials
-nurse
-nursed
-nursemaid
-nursemaids
-nurseries
-nursery
-nurseryman
-nurserymen
-nurses
-nursing
-nurture
-nurtured
-nurtures
-nurturing
-nut
-nutation
-nutcracker
-nutcrackers
-nutmeg
-nutmegs
-nutrient
-nutrients
-nutriment
-nutrition
-nutritional
-nutritionally
-nutritionist
-nutritionists
-nutritious
-nutritive
-nuts
-nutshell
-nuttier
-nutty
-nuzzle
-nuzzled
-nuzzles
-nuzzling
-nyala
-nylon
-nylons
-nymph
-nympholepsy
-nymphomania
-nymphomaniac
-nymphs
-oaf
-oafish
-oafs
-oak
-oaken
-oaks
-oakum
-oar
-oars
-oarsman
-oarsmen
-oases
-oasis
-oast
-oat
-oatcakes
-oath
-oaths
-oatmeal
-oats
-obduracy
-obdurate
-obdurately
-obedience
-obedient
-obediently
-obeisance
-obelisk
-obelisks
-obese
-obesity
-obey
-obeyed
-obeying
-obeys
-obfuscate
-obfuscated
-obfuscates
-obfuscation
-obfuscatory
-obituaries
-obituary
-object
-objected
-objectified
-objecting
-objection
-objectionable
-objectionableness
-objectionably
-objections
-objective
-objectively
-objectives
-objectivity
-objectless
-objector
-objectors
-objects
-oblate
-obligate
-obligated
-obligation
-obligations
-obligatorily
-obligatory
-oblige
-obliged
-obliges
-obliging
-obligingly
-oblique
-obliqued
-obliquely
-obliqueness
-obliquity
-obliterate
-obliterated
-obliterates
-obliterating
-obliteration
-oblivion
-oblivious
-obliviousness
-oblong
-oblongs
-obloquy
-obnoxious
-obnoxiously
-obnoxiousness
-oboe
-oboes
-oboist
-obscene
-obscenely
-obscenities
-obscenity
-obscurantism
-obscurantist
-obscuration
-obscure
-obscured
-obscurely
-obscureness
-obscurer
-obscures
-obscurest
-obscuring
-obscurities
-obscurity
-obsequious
-obsequiously
-obsequiousness
-observability
-observable
-observables
-observably
-observance
-observances
-observant
-observation
-observational
-observationally
-observations
-observatories
-observatory
-observe
-observed
-observer
-observers
-observes
-observing
-obsess
-obsessed
-obsesses
-obsessing
-obsession
-obsessional
-obsessions
-obsessive
-obsessively
-obsessiveness
-obsidian
-obsolescence
-obsolescent
-obsolete
-obstacle
-obstacles
-obstetric
-obstetrician
-obstetricians
-obstetrics
-obstinacy
-obstinate
-obstinately
-obstreperous
-obstruct
-obstructed
-obstructing
-obstruction
-obstructionism
-obstructions
-obstructive
-obstructively
-obstructiveness
-obstructs
-obtain
-obtainable
-obtained
-obtaining
-obtains
-obtrude
-obtruded
-obtruding
-obtrusive
-obtrusiveness
-obtuse
-obtusely
-obtuseness
-obverse
-obviate
-obviated
-obviates
-obviating
-obvious
-obviously
-obviousness
-occasion
-occasional
-occasionally
-occasioned
-occasioning
-occasions
-occident
-occidental
-occipital
-occluded
-occludes
-occlusion
-occult
-occultism
-occults
-occupancies
-occupancy
-occupant
-occupants
-occupation
-occupational
-occupationally
-occupations
-occupied
-occupier
-occupiers
-occupies
-occupy
-occupying
-occur
-occurred
-occurrence
-occurrences
-occurring
-occurs
-ocean
-oceanic
-oceanographer
-oceanographers
-oceanographic
-oceanography
-oceans
-ocelot
-ocelots
-ochre
-ochres
-octagon
-octagonal
-octagons
-octahedral
-octahedron
-octal
-octane
-octanes
-octant
-octave
-octaves
-octavo
-octet
-octets
-october
-octogenarian
-octogenarians
-octopus
-octopuses
-ocular
-oculist
-odd
-odder
-oddest
-oddities
-oddity
-oddjob
-oddly
-oddment
-oddments
-oddness
-odds
-ode
-odes
-odin
-odious
-odiously
-odiousness
-odium
-odiums
-odometer
-odoriferous
-odorous
-odour
-odourless
-odours
-odyssey
-oedema
-oedipus
-oesophagus
-oestrogen
-oestrogens
-oestrus
-oeuvre
-oeuvres
-of
-off
-offal
-offbeat
-offcut
-offcuts
-offence
-offences
-offend
-offended
-offender
-offenders
-offending
-offends
-offensive
-offensively
-offensiveness
-offensives
-offer
-offered
-offering
-offerings
-offers
-offertory
-offhand
-office
-officer
-officers
-officership
-officerships
-offices
-official
-officialdom
-officially
-officialness
-officials
-officiate
-officiated
-officiating
-officious
-officiously
-officiousness
-offprint
-offset
-offshoot
-offshore
-oft
-often
-ogle
-ogled
-ogling
-ogre
-ogres
-ogrish
-oh
-ohio
-ohm
-ohmic
-ohms
-oil
-oilcloth
-oiled
-oiler
-oilers
-oilfield
-oilfields
-oilier
-oiliest
-oiliness
-oiling
-oilman
-oilmen
-oilrig
-oils
-oily
-oink
-oinked
-oinks
-ointment
-ointments
-ok
-okapi
-okapis
-okay
-okayed
-okays
-oklahoma
-old
-oldage
-olden
-older
-oldest
-oldfashioned
-oldie
-oldish
-oldmaids
-oldtimer
-oldtimers
-ole
-oleander
-oleanders
-olfactory
-olive
-oliveoil
-oliver
-olives
-olm
-olms
-olympia
-olympiad
-olympian
-olympic
-olympics
-olympus
-ombudsman
-ombudsmen
-omega
-omelette
-omelettes
-omen
-omens
-ominous
-ominously
-omission
-omissions
-omit
-omits
-omitted
-omitting
-omnibus
-omnibuses
-omnidirectional
-omnipotence
-omnipotent
-omnipresence
-omnipresent
-omniscience
-omniscient
-omnivore
-omnivores
-omnivorous
-on
-onager
-onagers
-once
-one
-oneness
-oner
-onerous
-ones
-oneself
-onesided
-onesidedly
-onesidedness
-ongoing
-onion
-onions
-onlooker
-onlookers
-onlooking
-only
-onlybegotten
-onset
-onshore
-onslaught
-onslaughts
-ontario
-onto
-ontogeny
-ontological
-ontologically
-ontology
-onus
-onuses
-onward
-onwards
-onyx
-onyxes
-oocytes
-oodles
-ooh
-oolitic
-oology
-oompah
-oops
-ooze
-oozed
-oozes
-oozing
-oozy
-opacity
-opal
-opalescent
-opals
-opaque
-open
-opened
-opener
-openers
-openhanded
-openhandedness
-openheart
-openhearted
-opening
-openings
-openly
-openminded
-openmindedness
-openness
-opens
-opera
-operable
-operand
-operands
-operas
-operate
-operated
-operates
-operatic
-operating
-operation
-operational
-operationally
-operations
-operative
-operatives
-operator
-operators
-operculum
-operetta
-operettas
-ophthalmic
-ophthalmics
-ophthalmologist
-ophthalmologists
-ophthalmology
-opiate
-opiates
-opine
-opined
-opines
-opining
-opinion
-opinionated
-opinions
-opioid
-opioids
-opium
-opossum
-opponent
-opponents
-opportune
-opportunely
-opportunism
-opportunist
-opportunistic
-opportunistically
-opportunists
-opportunities
-opportunity
-oppose
-opposed
-opposes
-opposing
-opposite
-oppositely
-opposites
-opposition
-oppositional
-oppositions
-oppress
-oppressed
-oppresses
-oppressing
-oppression
-oppressions
-oppressive
-oppressively
-oppressiveness
-oppressor
-oppressors
-opprobrious
-opprobrium
-opt
-opted
-optic
-optical
-optically
-optician
-opticians
-optics
-optima
-optimal
-optimality
-optimally
-optimisation
-optimisations
-optimise
-optimised
-optimiser
-optimisers
-optimises
-optimising
-optimism
-optimist
-optimistic
-optimistically
-optimists
-optimum
-opting
-option
-optional
-optionality
-optionally
-options
-optoelectronic
-opts
-opulence
-opulent
-opus
-opuses
-or
-oracle
-oracles
-oracular
-oral
-orally
-orang
-orange
-oranges
-orangs
-orangutan
-orangutans
-orate
-orated
-orates
-orating
-oration
-orations
-orator
-oratorical
-oratorio
-orators
-oratory
-orb
-orbit
-orbital
-orbitals
-orbited
-orbiter
-orbiting
-orbits
-orbs
-orca
-orchard
-orchards
-orchestra
-orchestral
-orchestras
-orchestrate
-orchestrated
-orchestrates
-orchestrating
-orchestration
-orchestrations
-orchestrator
-orchid
-orchids
-ordain
-ordained
-ordaining
-ordains
-ordeal
-ordeals
-order
-ordered
-ordering
-orderings
-orderless
-orderlies
-orderliness
-orderly
-orders
-ordinal
-ordinals
-ordinance
-ordinances
-ordinands
-ordinarily
-ordinariness
-ordinary
-ordinate
-ordinates
-ordination
-ordinations
-ordnance
-ordure
-ore
-ores
-organ
-organelles
-organic
-organically
-organics
-organisable
-organisation
-organisational
-organisationally
-organisations
-organise
-organised
-organiser
-organisers
-organises
-organising
-organism
-organisms
-organist
-organists
-organs
-organza
-orgies
-orgy
-orient
-orientable
-oriental
-orientalism
-orientals
-orientate
-orientated
-orientates
-orientation
-orientations
-oriented
-orienteering
-orienting
-orifice
-orifices
-origami
-origin
-original
-originality
-originally
-originals
-originate
-originated
-originates
-originating
-origination
-originator
-originators
-origins
-orimulsion
-ornament
-ornamental
-ornamentation
-ornamented
-ornamenting
-ornaments
-ornate
-ornately
-ornithological
-ornithologist
-ornithologists
-ornithology
-orphan
-orphanage
-orphanages
-orphaned
-orphans
-orpheus
-orthodontist
-orthodox
-orthodoxies
-orthodoxy
-orthogonal
-orthogonality
-orthogonally
-orthographic
-orthographical
-orthographically
-orthography
-orthonormal
-orthopaedic
-orthopaedics
-orthorhombic
-oryxes
-oscar
-oscars
-oscillate
-oscillated
-oscillates
-oscillating
-oscillation
-oscillations
-oscillator
-oscillators
-oscillatory
-oscilloscope
-oscilloscopes
-osiris
-oslo
-osmium
-osmosis
-osmotic
-osprey
-ospreys
-ossification
-ossified
-ostensible
-ostensibly
-ostentation
-ostentatious
-ostentatiously
-osteoarthritis
-osteopath
-osteopaths
-osteopathy
-osteoporosis
-ostler
-ostlers
-ostracise
-ostracised
-ostracism
-ostrich
-ostriches
-other
-otherness
-others
-otherwise
-otter
-otters
-ottoman
-ouch
-ought
-ounce
-ounces
-our
-ours
-ourselves
-oust
-ousted
-ouster
-ousting
-ousts
-out
-outage
-outages
-outback
-outbid
-outbids
-outboard
-outbound
-outbreak
-outbreaks
-outbred
-outbuilding
-outbuildings
-outburst
-outbursts
-outcall
-outcast
-outcasts
-outclassed
-outcome
-outcomes
-outcries
-outcrop
-outcrops
-outcry
-outdated
-outdid
-outdo
-outdoes
-outdoing
-outdone
-outdoor
-outdoors
-outer
-outermost
-outface
-outfall
-outfalls
-outfield
-outfit
-outfits
-outfitters
-outflank
-outflanked
-outflow
-outflows
-outfox
-outfoxed
-outfoxes
-outgo
-outgoing
-outgoings
-outgrew
-outgrow
-outgrowing
-outgrown
-outgrowth
-outgrowths
-outguess
-outhouse
-outhouses
-outing
-outings
-outlandish
-outlast
-outlasted
-outlasts
-outlaw
-outlawed
-outlawing
-outlawry
-outlaws
-outlay
-outlays
-outlet
-outlets
-outlier
-outliers
-outline
-outlined
-outlines
-outlining
-outlive
-outlived
-outlives
-outliving
-outlook
-outlooks
-outlying
-outmanoeuvre
-outmanoeuvred
-outmoded
-outmost
-outnumber
-outnumbered
-outnumbering
-outnumbers
-outpace
-outpaced
-outpacing
-outpatient
-outpatients
-outperform
-outperformed
-outperforming
-outperforms
-outplacement
-outplay
-outplayed
-outpointed
-outpointing
-outpost
-outposts
-outpouring
-outpourings
-output
-outputs
-outputting
-outrage
-outraged
-outrageous
-outrageously
-outrages
-outraging
-outran
-outrank
-outreach
-outride
-outrider
-outriders
-outrigger
-outright
-outrun
-outruns
-outs
-outsell
-outset
-outsets
-outshine
-outshines
-outshining
-outshone
-outside
-outsider
-outsiders
-outsides
-outsize
-outskirts
-outsmart
-outsold
-outsourcing
-outspan
-outspoken
-outspokenly
-outspokenness
-outspread
-outstanding
-outstandingly
-outstation
-outstations
-outstay
-outstayed
-outstep
-outstretched
-outstrip
-outstripped
-outstripping
-outstrips
-outvoted
-outward
-outwardly
-outwards
-outweigh
-outweighed
-outweighing
-outweighs
-outwit
-outwith
-outwits
-outwitted
-outwitting
-outwork
-outworking
-ova
-oval
-ovals
-ovarian
-ovaries
-ovary
-ovate
-ovation
-ovations
-oven
-ovens
-over
-overact
-overacted
-overacting
-overactive
-overacts
-overall
-overallocation
-overalls
-overambitious
-overanxious
-overate
-overbearing
-overboard
-overburdened
-overcame
-overcapacity
-overcast
-overcharge
-overcharged
-overcharging
-overcoat
-overcoats
-overcome
-overcomes
-overcoming
-overcommitment
-overcommitments
-overcompensate
-overcomplexity
-overcomplicated
-overconfident
-overcook
-overcooked
-overcrowd
-overcrowded
-overcrowding
-overdetermined
-overdid
-overdo
-overdoes
-overdoing
-overdone
-overdose
-overdosed
-overdoses
-overdosing
-overdraft
-overdrafts
-overdramatic
-overdraw
-overdrawn
-overdressed
-overdrive
-overdubbing
-overdue
-overeat
-overeating
-overeats
-overemotional
-overemphasis
-overemphasise
-overemphasised
-overenthusiastic
-overestimate
-overestimated
-overestimates
-overestimating
-overestimation
-overexposed
-overexposure
-overextended
-overfamiliarity
-overfed
-overfeed
-overfeeding
-overfill
-overfishing
-overflow
-overflowed
-overflowing
-overflown
-overflows
-overfly
-overflying
-overfull
-overgeneralised
-overgeneralising
-overgrazing
-overground
-overgrown
-overgrowth
-overhand
-overhang
-overhanging
-overhangs
-overhasty
-overhaul
-overhauled
-overhauling
-overhauls
-overhead
-overheads
-overhear
-overheard
-overhearing
-overhears
-overheat
-overheated
-overheating
-overhung
-overincredulous
-overindulgence
-overindulgent
-overinflated
-overjoyed
-overkill
-overladen
-overlaid
-overlain
-overland
-overlap
-overlapped
-overlapping
-overlaps
-overlay
-overlaying
-overlays
-overleaf
-overlie
-overlies
-overload
-overloaded
-overloading
-overloads
-overlong
-overlook
-overlooked
-overlooking
-overlooks
-overlord
-overlords
-overly
-overlying
-overmanning
-overmantel
-overmatching
-overmuch
-overnight
-overoptimistic
-overpaid
-overpass
-overpay
-overpayment
-overplay
-overplayed
-overplaying
-overpopulated
-overpopulation
-overpopulous
-overpower
-overpowered
-overpowering
-overpoweringly
-overpowers
-overpressure
-overpriced
-overprint
-overprinted
-overprinting
-overprints
-overproduced
-overproduction
-overqualified
-overran
-overrate
-overrated
-overreach
-overreached
-overreaching
-overreact
-overreacted
-overreacting
-overreaction
-overreacts
-overrepresented
-overridden
-override
-overrides
-overriding
-overripe
-overrode
-overrule
-overruled
-overruling
-overrun
-overrunning
-overruns
-overs
-oversampled
-oversampling
-oversaw
-overseas
-oversee
-overseeing
-overseen
-overseer
-overseers
-oversees
-oversensitive
-oversensitivity
-oversexed
-overshadow
-overshadowed
-overshadowing
-overshadows
-overshoot
-overshooting
-overshoots
-overshot
-oversight
-oversights
-oversimplification
-oversimplifications
-oversimplified
-oversimplifies
-oversimplify
-oversimplifying
-oversize
-oversized
-oversleep
-overslept
-overspend
-overspending
-overspent
-overspill
-overstaffed
-overstate
-overstated
-overstatement
-overstates
-overstating
-overstep
-overstepped
-overstepping
-oversteps
-overstocked
-overstocking
-overstress
-overstressed
-overstretch
-overstretched
-overstrung
-overstuffed
-oversubscribed
-oversupply
-overt
-overtake
-overtaken
-overtaker
-overtakers
-overtakes
-overtaking
-overtax
-overthetop
-overthrew
-overthrow
-overthrowing
-overthrown
-overthrows
-overtightened
-overtime
-overtly
-overtness
-overtone
-overtones
-overtook
-overtops
-overture
-overtures
-overturn
-overturned
-overturning
-overturns
-overuse
-overused
-overuses
-overvalue
-overvalued
-overview
-overviews
-overweening
-overweight
-overwhelm
-overwhelmed
-overwhelming
-overwhelmingly
-overwhelms
-overwinter
-overwintered
-overwintering
-overwork
-overworked
-overworking
-overwrite
-overwrites
-overwriting
-overwritten
-overwrote
-overwrought
-oviduct
-ovoid
-ovular
-ovulation
-ovum
-ow
-owe
-owed
-owes
-owing
-owl
-owlet
-owlets
-owlish
-owlishly
-owls
-own
-owned
-owner
-owners
-ownership
-ownerships
-owning
-owns
-ox
-oxalate
-oxalic
-oxcart
-oxen
-oxford
-oxidant
-oxidants
-oxidation
-oxide
-oxides
-oxidisation
-oxidise
-oxidised
-oxidiser
-oxidising
-oxtail
-oxtails
-oxygen
-oxygenated
-oxygenating
-oxygenation
-oxymoron
-oyster
-oysters
-ozone
-ozonefriendly
-pa
-pace
-paced
-pacemaker
-pacemakers
-paceman
-pacemen
-pacer
-pacers
-paces
-pacey
-pachyderm
-pacific
-pacification
-pacified
-pacifier
-pacifies
-pacifism
-pacifist
-pacifists
-pacify
-pacifying
-pacing
-pack
-packable
-package
-packaged
-packages
-packaging
-packed
-packer
-packers
-packet
-packets
-packhorse
-packing
-packings
-packs
-pact
-pacts
-pad
-padded
-padding
-paddings
-paddle
-paddled
-paddler
-paddlers
-paddles
-paddling
-paddock
-paddocks
-paddy
-padlock
-padlocked
-padlocking
-padlocks
-padre
-padres
-pads
-paean
-paeans
-paediatric
-paediatrician
-paediatricians
-paediatrics
-paedophile
-paedophiles
-paedophilia
-paella
-paeony
-pagan
-paganism
-pagans
-page
-pageant
-pageantry
-pageants
-pageboy
-paged
-pageful
-pager
-pagers
-pages
-paginal
-paginate
-paginated
-paginating
-pagination
-paging
-pagoda
-pagodas
-paid
-paidup
-pail
-pails
-pain
-pained
-painful
-painfully
-painfulness
-paining
-painkiller
-painkillers
-painless
-painlessly
-pains
-painstaking
-painstakingly
-paint
-paintbox
-paintbrush
-painted
-painter
-painters
-painting
-paintings
-paints
-paintwork
-pair
-paired
-pairing
-pairings
-pairs
-pairwise
-pajama
-pajamas
-pakistan
-pal
-palace
-palaces
-palaeographic
-palaeolithic
-palaeontological
-palaeontologist
-palaeontologists
-palaeontology
-palatability
-palatable
-palatal
-palate
-palates
-palatial
-palatinate
-palatine
-palaver
-pale
-paled
-paleface
-palely
-paleness
-paler
-pales
-palest
-palette
-palettes
-palimpsest
-palindrome
-palindromes
-palindromic
-paling
-palisade
-palisades
-pall
-palladium
-pallbearers
-palled
-pallet
-pallets
-palliative
-palliatives
-pallid
-pallmall
-pallor
-palls
-palm
-palmed
-palming
-palmist
-palmistry
-palms
-palmtop
-palmtops
-palmy
-palp
-palpable
-palpably
-palpate
-palpated
-palpates
-palpitate
-palpitated
-palpitating
-palpitation
-palpitations
-pals
-palsied
-palsy
-paltrier
-paltriest
-paltriness
-paltry
-paludal
-pampas
-pamper
-pampered
-pampering
-pampers
-pamphlet
-pamphleteer
-pamphleteers
-pamphlets
-pan
-panacea
-panaceas
-panache
-panama
-pancake
-pancaked
-pancakes
-pancreas
-pancreatic
-panda
-pandas
-pandemic
-pandemics
-pandemonium
-pander
-pandering
-panders
-pandora
-pane
-paned
-panel
-panelled
-panelling
-panellist
-panellists
-panels
-panes
-pang
-panga
-pangas
-pangolin
-pangs
-panic
-panicked
-panicking
-panicky
-panics
-panicstricken
-panjandrum
-panned
-pannier
-panniers
-panning
-panoply
-panorama
-panoramas
-panoramic
-pans
-pansies
-pansy
-pant
-pantaloons
-pantechnicon
-panted
-pantheism
-pantheist
-pantheistic
-pantheon
-panther
-panthers
-panties
-pantile
-pantiled
-pantiles
-panting
-pantograph
-pantographs
-pantomime
-pantomimes
-pantries
-pantry
-pants
-panzer
-pap
-papa
-papacy
-papal
-paparazzi
-papas
-papaw
-papaws
-papaya
-paper
-paperback
-paperbacks
-papered
-papering
-paperless
-papers
-paperthin
-paperweight
-paperweights
-paperwork
-papery
-papilla
-papist
-pappy
-paprika
-papua
-papule
-papyri
-papyrus
-par
-parable
-parables
-parabola
-parabolas
-parabolic
-paraboloid
-paraboloids
-paracetamol
-parachute
-parachuted
-parachutes
-parachuting
-parachutist
-parachutists
-parade
-paraded
-parader
-parades
-paradigm
-paradigmatic
-paradigms
-parading
-paradise
-paradises
-paradox
-paradoxes
-paradoxical
-paradoxically
-paraffin
-paragliding
-paragon
-paragons
-paragraph
-paragraphing
-paragraphs
-paraguay
-parakeet
-parakeets
-paralinguistic
-parallax
-parallaxes
-parallel
-paralleled
-parallelepiped
-paralleling
-parallelism
-parallelogram
-parallelograms
-parallels
-paralyse
-paralysed
-paralyses
-paralysing
-paralysis
-paralytic
-paralytically
-paramagnetic
-paramagnetism
-paramedic
-paramedical
-paramedics
-parameter
-parameters
-parametric
-parametrically
-parametrisation
-parametrise
-parametrised
-parametrises
-paramilitaries
-paramilitary
-paramount
-paramountcy
-paramour
-paranoia
-paranoiac
-paranoiacs
-paranoid
-paranormal
-parapet
-parapets
-paraphernalia
-paraphrase
-paraphrased
-paraphrases
-paraphrasing
-paraplegic
-parapsychologist
-parapsychology
-paraquat
-parasite
-parasites
-parasitic
-parasitical
-parasitised
-parasitism
-parasitologist
-parasitology
-parasol
-parasols
-paratroop
-paratrooper
-paratroopers
-paratroops
-parboil
-parcel
-parcelled
-parcelling
-parcels
-parch
-parched
-parches
-parchment
-parchments
-pardon
-pardonable
-pardoned
-pardoning
-pardons
-pare
-pared
-parent
-parentage
-parental
-parented
-parenteral
-parentheses
-parenthesis
-parenthesise
-parenthesised
-parenthetic
-parenthetical
-parenthetically
-parenthood
-parenting
-parentinlaw
-parents
-parentsinlaw
-pares
-parfait
-parfaits
-pariah
-pariahs
-parietal
-paring
-paris
-parish
-parishes
-parishioner
-parishioners
-parisian
-parities
-parity
-park
-parka
-parkas
-parked
-parking
-parkland
-parks
-parlance
-parley
-parleying
-parliament
-parliamentarian
-parliamentarians
-parliamentary
-parliaments
-parlour
-parlourmaid
-parlours
-parlous
-parochial
-parochialism
-parochiality
-parodied
-parodies
-parodist
-parody
-parodying
-parole
-paroxysm
-paroxysms
-parquet
-parried
-parries
-parrot
-parroting
-parrots
-parry
-parrying
-parse
-parsec
-parsecs
-parsed
-parser
-parsers
-parses
-parsimonious
-parsimony
-parsing
-parsings
-parsley
-parsnip
-parsnips
-parson
-parsonage
-parsons
-part
-partake
-partaken
-partaker
-partakers
-partakes
-partaking
-parted
-parthenogenesis
-partial
-partiality
-partially
-participant
-participants
-participate
-participated
-participates
-participating
-participation
-participative
-participators
-participatory
-participle
-participles
-particle
-particles
-particular
-particularise
-particularised
-particularism
-particularities
-particularity
-particularly
-particulars
-particulate
-particulates
-parties
-parting
-partings
-partisan
-partisans
-partisanship
-partition
-partitioned
-partitioning
-partitions
-partly
-partner
-partnered
-partnering
-partners
-partnership
-partnerships
-partook
-partridge
-partridges
-parts
-parttime
-party
-parvenu
-pascal
-pascals
-paschal
-pass
-passable
-passably
-passage
-passages
-passageway
-passageways
-passant
-passe
-passed
-passenger
-passengers
-passer
-passers
-passersby
-passes
-passim
-passing
-passion
-passionate
-passionately
-passionateness
-passionless
-passions
-passivated
-passive
-passively
-passives
-passivity
-passmark
-passover
-passport
-passports
-password
-passwords
-past
-pasta
-pastas
-paste
-pasteboard
-pasted
-pastel
-pastels
-pastes
-pasteur
-pasteurisation
-pasteurised
-pastiche
-pastiches
-pasties
-pastille
-pastime
-pastimes
-pasting
-pastis
-pastor
-pastoral
-pastoralism
-pastors
-pastrami
-pastries
-pastry
-pasts
-pasture
-pastured
-pastureland
-pastures
-pasturing
-pasty
-pat
-patch
-patchable
-patched
-patches
-patchier
-patchiest
-patchily
-patchiness
-patching
-patchup
-patchwork
-patchy
-pate
-patella
-paten
-patent
-patentable
-patented
-patentee
-patenting
-patently
-patents
-pater
-paternal
-paternalism
-paternalist
-paternalistic
-paternally
-paternity
-pates
-path
-pathetic
-pathetically
-pathfinder
-pathfinders
-pathless
-pathogen
-pathogenesis
-pathogenic
-pathogens
-pathological
-pathologically
-pathologies
-pathologist
-pathologists
-pathology
-pathos
-paths
-pathway
-pathways
-patience
-patient
-patiently
-patients
-patina
-patination
-patio
-patisserie
-patois
-patriarch
-patriarchal
-patriarchies
-patriarchs
-patriarchy
-patrician
-patricians
-patrilineal
-patrimony
-patriot
-patriotic
-patriotism
-patriots
-patrol
-patrolled
-patrolling
-patrols
-patron
-patronage
-patroness
-patronesses
-patronisation
-patronise
-patronised
-patronises
-patronising
-patronisingly
-patrons
-pats
-patted
-patten
-pattens
-patter
-pattered
-pattering
-pattern
-patterned
-patterning
-patternless
-patterns
-patters
-patties
-patting
-paucity
-paul
-paunch
-paunchy
-pauper
-paupers
-pause
-paused
-pauses
-pausing
-pave
-paved
-pavement
-pavements
-paves
-pavilion
-pavilions
-paving
-pavings
-pavlov
-paw
-pawed
-pawing
-pawn
-pawnbroker
-pawnbrokers
-pawned
-pawning
-pawns
-pawnshop
-pawnshops
-pawpaw
-pawpaws
-paws
-pay
-payable
-payback
-payday
-paydays
-payed
-payee
-payees
-payer
-payers
-paying
-payload
-payloads
-paymaster
-paymasters
-payment
-payments
-payphone
-payphones
-payroll
-payrolls
-pays
-payslips
-pea
-peace
-peaceable
-peaceably
-peaceful
-peacefully
-peacefulness
-peacekeepers
-peacekeeping
-peacemaker
-peacemakers
-peacemaking
-peacetime
-peach
-peaches
-peachier
-peachiest
-peachy
-peacock
-peacocks
-peafowl
-peahens
-peak
-peaked
-peakiness
-peaking
-peaks
-peaky
-peal
-pealed
-pealing
-peals
-peanut
-peanuts
-pear
-pearl
-pearls
-pearly
-pears
-peartrees
-peas
-peasant
-peasantry
-peasants
-peat
-peatland
-peatlands
-peaty
-pebble
-pebbled
-pebbles
-pebbly
-pecan
-peccary
-peck
-pecked
-pecker
-peckers
-pecking
-peckish
-pecks
-pectin
-pectoral
-pectorals
-peculiar
-peculiarities
-peculiarity
-peculiarly
-pecuniary
-pedagogic
-pedagogical
-pedagogically
-pedagogue
-pedagogy
-pedal
-pedalled
-pedalling
-pedals
-pedant
-pedantic
-pedantically
-pedantry
-pedants
-peddle
-peddled
-peddler
-peddlers
-peddles
-peddling
-pederasts
-pedestal
-pedestals
-pedestrian
-pedestrianisation
-pedestrianised
-pedestrians
-pedigree
-pedigrees
-pediment
-pedimented
-pediments
-pedlar
-pedlars
-pedology
-peek
-peeked
-peeking
-peeks
-peel
-peeled
-peeler
-peelers
-peeling
-peelings
-peels
-peep
-peeped
-peeper
-peepers
-peephole
-peeping
-peeps
-peer
-peerage
-peerages
-peered
-peering
-peerless
-peers
-peevish
-peevishly
-peevishness
-peg
-pegasus
-pegged
-pegging
-pegs
-pejorative
-pejoratively
-pejoratives
-pekan
-peking
-pele
-pelican
-pelicans
-pellet
-pellets
-pelmet
-pelmets
-pelt
-pelted
-pelting
-pelts
-pelvic
-pelvis
-pelvises
-pen
-penal
-penalisation
-penalise
-penalised
-penalises
-penalising
-penalties
-penalty
-penance
-penances
-pence
-penchant
-pencil
-pencilled
-pencilling
-pencils
-pendant
-pendants
-pending
-pendulous
-pendulum
-pendulums
-penetrable
-penetrate
-penetrated
-penetrates
-penetrating
-penetratingly
-penetration
-penetrations
-penetrative
-penguin
-penguins
-penicillin
-penile
-peninsula
-peninsular
-peninsulas
-penitence
-penitent
-penitential
-penitentiary
-penitently
-penitents
-penknife
-penname
-pennames
-pennant
-pennants
-penned
-pennies
-penniless
-penning
-penny
-pennypinching
-penology
-pens
-pension
-pensionable
-pensioned
-pensioner
-pensioners
-pensioning
-pensions
-pensive
-pensively
-pensiveness
-pent
-pentagon
-pentagonal
-pentagons
-pentagram
-pentagrams
-pentameter
-pentameters
-pentasyllabic
-pentathlete
-pentathlon
-pentatonic
-pentecostal
-penthouse
-penultimate
-penultimately
-penumbra
-penurious
-penury
-peonies
-people
-peopled
-peoples
-pep
-peperoni
-pepper
-peppercorn
-peppercorns
-peppered
-peppering
-peppermint
-peppermints
-peppers
-peppery
-peps
-peptic
-peptide
-peptides
-per
-perambulate
-perambulated
-perambulating
-perambulations
-perambulator
-perannum
-percales
-perceivable
-perceive
-perceived
-perceives
-perceiving
-percent
-percentage
-percentages
-percentile
-percentiles
-percept
-perceptibility
-perceptible
-perceptibly
-perception
-perceptions
-perceptive
-perceptively
-perceptiveness
-percepts
-perceptual
-perceptually
-perch
-perchance
-perched
-percher
-perches
-perching
-perchlorate
-percipient
-percolate
-percolated
-percolates
-percolating
-percolation
-percolator
-percolators
-percuss
-percussed
-percusses
-percussing
-percussion
-percussionist
-percussionists
-percussive
-percussively
-percutaneous
-perdition
-peregrinations
-peregrine
-peregrines
-peremptorily
-peremptoriness
-peremptory
-perennial
-perennially
-perennials
-perestroika
-perfect
-perfected
-perfectibility
-perfecting
-perfection
-perfectionism
-perfectionist
-perfectionists
-perfections
-perfectly
-perfects
-perfidious
-perfidiously
-perfidy
-perforate
-perforated
-perforation
-perforations
-perforce
-perform
-performable
-performance
-performances
-performed
-performer
-performers
-performing
-performs
-perfume
-perfumed
-perfumery
-perfumes
-perfuming
-perfunctorily
-perfunctory
-perfused
-perfusion
-pergola
-pergolas
-perhaps
-peri
-periastron
-perigee
-periglacial
-perihelion
-peril
-perilous
-perilously
-perils
-perimeter
-perimeters
-perinatal
-perineal
-perineum
-period
-periodic
-periodical
-periodically
-periodicals
-periodicity
-periods
-perioperative
-peripatetic
-peripheral
-peripherally
-peripherals
-peripheries
-periphery
-periphrasis
-periphrastic
-periscope
-periscopes
-perish
-perishable
-perishables
-perished
-perishes
-perishing
-peritoneum
-perjure
-perjured
-perjurer
-perjury
-perk
-perked
-perkier
-perkiest
-perkily
-perking
-perks
-perky
-perm
-permafrost
-permanence
-permanency
-permanent
-permanently
-permanganate
-permeability
-permeable
-permeate
-permeated
-permeates
-permeating
-permeation
-permed
-perming
-permissibility
-permissible
-permission
-permissions
-permissive
-permissiveness
-permit
-permits
-permitted
-permitting
-permittivity
-perms
-permutation
-permutations
-permute
-permuted
-permutes
-permuting
-pernicious
-perniciousness
-peroration
-peroxidase
-peroxide
-peroxides
-perpendicular
-perpendicularly
-perpendiculars
-perpetrate
-perpetrated
-perpetrates
-perpetrating
-perpetration
-perpetrator
-perpetrators
-perpetual
-perpetually
-perpetuate
-perpetuated
-perpetuates
-perpetuating
-perpetuation
-perpetuity
-perplex
-perplexed
-perplexedly
-perplexing
-perplexities
-perplexity
-perquisite
-perquisites
-perron
-perry
-persecute
-persecuted
-persecuting
-persecution
-persecutions
-persecutor
-persecutors
-perseverance
-persevere
-persevered
-perseveres
-persevering
-perseveringly
-persia
-persian
-persist
-persisted
-persistence
-persistent
-persistently
-persisting
-persists
-person
-persona
-personable
-personae
-personage
-personages
-personal
-personalisation
-personalise
-personalised
-personalising
-personalities
-personality
-personally
-personification
-personifications
-personified
-personifies
-personify
-personifying
-personnel
-persons
-perspective
-perspectives
-perspex
-perspicacious
-perspicacity
-perspicuity
-perspicuous
-perspicuously
-perspiration
-perspire
-perspiring
-persuade
-persuaded
-persuaders
-persuades
-persuading
-persuasion
-persuasions
-persuasive
-persuasively
-persuasiveness
-pert
-pertain
-pertained
-pertaining
-pertains
-perth
-pertinacious
-pertinaciously
-pertinacity
-pertinence
-pertinent
-pertinently
-pertly
-pertness
-perturb
-perturbation
-perturbations
-perturbed
-perturbing
-peru
-perusal
-peruse
-perused
-peruses
-perusing
-peruvian
-pervade
-pervaded
-pervades
-pervading
-pervasive
-pervasiveness
-perverse
-perversely
-perverseness
-perversion
-perversions
-perversity
-pervert
-perverted
-perverting
-perverts
-peseta
-pesetas
-pesky
-pessimism
-pessimist
-pessimistic
-pessimistically
-pessimists
-pest
-pester
-pestered
-pestering
-pesticide
-pesticides
-pestilence
-pestilent
-pestilential
-pestle
-pests
-pet
-petal
-petals
-petard
-peter
-petered
-petering
-peters
-pethidine
-petit
-petite
-petition
-petitioned
-petitioner
-petitioners
-petitioning
-petitions
-petrel
-petrels
-petrification
-petrified
-petrifies
-petrify
-petrifying
-petrochemical
-petrochemicals
-petrographic
-petrographical
-petrol
-petroleum
-petrological
-petrology
-pets
-petted
-petticoat
-petticoats
-pettier
-pettiest
-pettifoggers
-pettifogging
-pettiness
-petting
-pettish
-pettishly
-pettishness
-petty
-petulance
-petulant
-petulantly
-petunia
-petunias
-pew
-pews
-pewter
-phalanx
-phantasy
-phantom
-phantoms
-pharaoh
-pharmaceutical
-pharmaceuticals
-pharmacies
-pharmacist
-pharmacists
-pharmacological
-pharmacologist
-pharmacologists
-pharmacology
-pharmacy
-pharynx
-phase
-phased
-phases
-phasing
-pheasant
-pheasants
-phenol
-phenols
-phenomena
-phenomenal
-phenomenally
-phenomenological
-phenomenologically
-phenomenologists
-phenomenology
-phenomenon
-phenotype
-phenotypes
-phenylalanine
-pheromone
-pheromones
-phew
-philanthropic
-philanthropist
-philanthropists
-philanthropy
-philatelic
-philatelists
-philately
-philharmonic
-philistine
-philological
-philologist
-philologists
-philology
-philosopher
-philosophers
-philosophic
-philosophical
-philosophically
-philosophies
-philosophise
-philosophising
-philosophy
-phlebotomy
-phlegm
-phlegmatic
-phlegmatically
-phlogiston
-phlox
-phobia
-phobias
-phobic
-phoenix
-phoenixes
-phone
-phoned
-phoneme
-phonemes
-phonemic
-phonemically
-phoner
-phones
-phonetic
-phonetically
-phoneticians
-phoneticist
-phonetics
-phoney
-phoneys
-phoning
-phonograph
-phonographic
-phonological
-phonologically
-phonology
-phonon
-phony
-phooey
-phosphatase
-phosphate
-phosphates
-phosphatic
-phospholipids
-phosphor
-phosphorescence
-phosphorescent
-phosphoric
-phosphorous
-phosphors
-phosphorus
-photo
-photocells
-photochemical
-photochemically
-photochemistry
-photocopied
-photocopier
-photocopiers
-photocopies
-photocopy
-photocopying
-photoelectric
-photoelectrically
-photogenic
-photograph
-photographed
-photographer
-photographers
-photographic
-photographically
-photographing
-photographs
-photography
-photolysis
-photolytic
-photometric
-photometrically
-photometry
-photomultiplier
-photon
-photons
-photoreceptor
-photos
-photosensitive
-photosphere
-photostat
-photosynthesis
-photosynthesising
-photosynthetic
-photosynthetically
-phototypesetter
-phototypesetting
-photovoltaic
-phrasal
-phrase
-phrasebook
-phrased
-phraseology
-phrases
-phrasing
-phrenological
-phrenologically
-phrenologists
-phrenology
-phyla
-phylactery
-phylogenetic
-phylogeny
-phylum
-physic
-physical
-physicality
-physically
-physician
-physicians
-physicist
-physicists
-physics
-physio
-physiognomies
-physiognomy
-physiological
-physiologically
-physiologist
-physiologists
-physiology
-physiotherapist
-physiotherapists
-physiotherapy
-physique
-phytoplankton
-pi
-pianissimo
-pianist
-pianistic
-pianists
-piano
-pianoforte
-pianola
-piazza
-piazzas
-pica
-picaresque
-picasso
-piccolo
-pick
-pickaxe
-pickaxes
-picked
-picker
-pickerel
-pickerels
-pickers
-picket
-picketed
-picketing
-pickets
-picking
-pickings
-pickle
-pickled
-pickles
-pickling
-pickpocket
-pickpocketing
-pickpockets
-picks
-pickup
-pickups
-picnic
-picnicked
-picnickers
-picnicking
-picnics
-picoseconds
-pictogram
-pictograms
-pictographic
-pictorial
-pictorially
-pictural
-picture
-pictured
-pictures
-picturesque
-picturesquely
-picturesqueness
-picturing
-pidgin
-pie
-piebald
-piece
-pieced
-piecemeal
-pieces
-piecewise
-piecework
-piecing
-pied
-pier
-pierce
-pierced
-piercer
-piercers
-pierces
-piercing
-piercingly
-piers
-pies
-pieta
-piety
-piezoelectric
-piffle
-pig
-pigeon
-pigeons
-piggery
-piggish
-piggy
-piggyback
-piglet
-piglets
-pigment
-pigmentation
-pigmented
-pigments
-pigs
-pigsties
-pigsty
-pigtail
-pigtailed
-pigtails
-pike
-pikemen
-pikes
-pikestaff
-pilaster
-pilasters
-pilchard
-pilchards
-pile
-piled
-piles
-pileup
-pilfer
-pilfered
-pilfering
-pilgrim
-pilgrimage
-pilgrimages
-pilgrims
-piling
-pill
-pillage
-pillaged
-pillages
-pillaging
-pillar
-pillared
-pillars
-pillbox
-pillion
-pilloried
-pillories
-pillory
-pillow
-pillowcase
-pillowcases
-pillowed
-pillows
-pills
-pilot
-piloted
-piloting
-pilots
-pimp
-pimpernel
-pimping
-pimple
-pimpled
-pimples
-pimply
-pimps
-pin
-pinafore
-pinafores
-pinball
-pincer
-pincered
-pincers
-pinch
-pinched
-pincher
-pinches
-pinching
-pincushion
-pincushions
-pine
-pineal
-pineapple
-pineapples
-pined
-pines
-ping
-pingpong
-pings
-pinhead
-pinheads
-pinhole
-pinholes
-pining
-pinion
-pinioned
-pinions
-pink
-pinked
-pinker
-pinkie
-pinkies
-pinking
-pinkish
-pinkness
-pinks
-pinky
-pinnacle
-pinnacled
-pinnacles
-pinned
-pinning
-pinpoint
-pinpointed
-pinpointing
-pinpoints
-pinprick
-pinpricks
-pins
-pinstripe
-pinstriped
-pinstripes
-pint
-pints
-pintsized
-pinup
-pinups
-piny
-pion
-pioneer
-pioneered
-pioneering
-pioneers
-pions
-pious
-piously
-pip
-pipe
-piped
-pipeline
-pipelines
-piper
-pipers
-pipes
-pipette
-pipettes
-pipework
-piping
-pipings
-pipit
-pipits
-pipped
-pippin
-pipping
-pips
-piquancy
-piquant
-pique
-piqued
-piracies
-piracy
-piranha
-piranhas
-pirate
-pirated
-pirates
-piratical
-pirating
-pirouette
-pirouetted
-pirouettes
-pirouetting
-pisa
-pistol
-pistols
-piston
-pistons
-pit
-pitbull
-pitch
-pitchdark
-pitched
-pitcher
-pitchers
-pitches
-pitchfork
-pitchforks
-pitching
-piteous
-piteously
-pitfall
-pitfalls
-pith
-pithead
-pithier
-pithiest
-pithily
-piths
-pithy
-pitiable
-pitiably
-pitied
-pities
-pitiful
-pitifully
-pitiless
-pitilessly
-piton
-pitons
-pits
-pittance
-pitted
-pitting
-pituitary
-pity
-pitying
-pityingly
-pivot
-pivotal
-pivoted
-pivoting
-pivots
-pixel
-pixels
-pixie
-pixies
-pizazz
-pizza
-pizzas
-pizzeria
-pizzerias
-pizzicato
-placard
-placards
-placate
-placated
-placates
-placating
-placatingly
-placatory
-place
-placebo
-placed
-placeholder
-placemen
-placement
-placements
-placenta
-placentae
-placental
-placentas
-placer
-placers
-places
-placid
-placidity
-placidly
-placing
-placings
-plagiarise
-plagiarised
-plagiarising
-plagiarism
-plagiarist
-plagiarists
-plague
-plagued
-plagues
-plaguing
-plaice
-plaid
-plaids
-plain
-plainest
-plainly
-plainness
-plains
-plaint
-plaintiff
-plaintiffs
-plaintive
-plaintively
-plait
-plaited
-plaiting
-plaits
-plan
-planar
-plane
-planed
-planes
-planet
-planetarium
-planetary
-planetesimals
-planetoids
-planets
-plangent
-planing
-plank
-planking
-planks
-plankton
-planktonic
-planned
-planner
-planners
-planning
-plans
-plant
-plantain
-plantation
-plantations
-planted
-planter
-planters
-planting
-plantings
-plants
-plaque
-plaques
-plasm
-plasma
-plasmas
-plasmid
-plasmids
-plaster
-plasterboard
-plastered
-plasterer
-plasterers
-plastering
-plasters
-plasterwork
-plastic
-plasticised
-plasticisers
-plasticity
-plastics
-plate
-plateau
-plateaus
-plateaux
-plated
-plateful
-platefuls
-platelet
-platelets
-platen
-platens
-plates
-platform
-platforms
-plating
-platinum
-platitude
-platitudes
-platitudinous
-plato
-platonic
-platoon
-platoons
-platter
-platters
-platypus
-platypuses
-plaudits
-plausibility
-plausible
-plausibly
-play
-playable
-playback
-playboy
-playboys
-played
-player
-players
-playfellow
-playfellows
-playful
-playfully
-playfulness
-playground
-playgrounds
-playgroup
-playgroups
-playhouse
-playing
-playings
-playmate
-playmates
-playroom
-plays
-plaything
-playthings
-playtime
-playwright
-playwrights
-plaza
-plazas
-plea
-plead
-pleaded
-pleading
-pleadingly
-pleadings
-pleads
-pleas
-pleasant
-pleasanter
-pleasantest
-pleasantly
-pleasantness
-pleasantries
-pleasantry
-please
-pleased
-pleases
-pleasing
-pleasingly
-pleasurable
-pleasurably
-pleasure
-pleasures
-pleat
-pleated
-pleats
-pleb
-plebeian
-plebiscite
-plebs
-plectrum
-plectrums
-pledge
-pledged
-pledges
-pledging
-plenary
-plenipotentiary
-plenitude
-plenteous
-plenteously
-plentiful
-plentifully
-plenty
-plenum
-plethora
-pleura
-pleural
-pleurisy
-plexus
-pliable
-pliant
-plied
-pliers
-plies
-plight
-plights
-plimsolls
-plinth
-plinths
-plod
-plodded
-plodder
-plodding
-plods
-plop
-plopped
-plopping
-plops
-plosive
-plot
-plots
-plotted
-plotter
-plotters
-plotting
-plough
-ploughed
-ploughers
-ploughing
-ploughman
-ploughmen
-ploughs
-ploughshare
-ploughshares
-plover
-plovers
-ploy
-ploys
-pluck
-plucked
-plucker
-pluckier
-pluckiest
-plucking
-plucks
-plucky
-plug
-plugged
-plugging
-plughole
-plugs
-plum
-plumage
-plumages
-plumb
-plumbago
-plumbed
-plumber
-plumbers
-plumbing
-plumbs
-plume
-plumed
-plumes
-pluming
-plummet
-plummeted
-plummeting
-plummets
-plummy
-plump
-plumped
-plumper
-plumping
-plumpness
-plums
-plumtree
-plumy
-plunder
-plundered
-plunderers
-plundering
-plunders
-plunge
-plunged
-plunger
-plungers
-plunges
-plunging
-pluperfect
-plural
-pluralisation
-pluralise
-pluralised
-pluralising
-pluralism
-pluralist
-pluralistic
-pluralists
-plurality
-plurals
-plus
-pluses
-plush
-plushy
-pluto
-plutocracy
-plutocrats
-plutonic
-plutonium
-ply
-plying
-plywood
-pneumatic
-pneumatics
-pneumonia
-poach
-poached
-poacher
-poachers
-poaches
-poaching
-pock
-pocked
-pocket
-pocketbook
-pocketed
-pocketful
-pocketing
-pockets
-pockmarked
-pocks
-pod
-podded
-podgy
-podia
-podium
-podiums
-pods
-poem
-poems
-poet
-poetess
-poetic
-poetical
-poetically
-poetics
-poetise
-poetry
-poets
-pogo
-pogrom
-pogroms
-poignancy
-poignant
-poignantly
-poikilothermic
-poinsettias
-point
-pointblank
-pointed
-pointedly
-pointedness
-pointer
-pointers
-pointillism
-pointillist
-pointing
-pointless
-pointlessly
-pointlessness
-points
-pointy
-poise
-poised
-poises
-poising
-poison
-poisoned
-poisoner
-poisoning
-poisonings
-poisonous
-poisons
-poke
-poked
-poker
-pokerfaced
-pokers
-pokes
-poking
-poky
-poland
-polar
-polarisation
-polarisations
-polarise
-polarised
-polarising
-polarities
-polarity
-polder
-pole
-polecat
-polecats
-poled
-polemic
-polemical
-polemicist
-polemics
-poles
-polestar
-polevaulting
-poleward
-polewards
-police
-policed
-policeman
-policemen
-polices
-policewoman
-policewomen
-policies
-policing
-policy
-policyholder
-policyholders
-polio
-poliomyelitis
-polish
-polished
-polisher
-polishers
-polishes
-polishing
-polishings
-politburo
-polite
-politely
-politeness
-politer
-politesse
-politest
-politic
-political
-politically
-politician
-politicians
-politicisation
-politicise
-politicised
-politicising
-politicking
-politics
-polity
-polka
-polkas
-poll
-pollarded
-polled
-pollen
-pollens
-pollinate
-pollinated
-pollinating
-pollination
-pollinator
-pollinators
-polling
-polls
-pollster
-pollsters
-pollutant
-pollutants
-pollute
-polluted
-polluter
-polluters
-pollutes
-polluting
-pollution
-pollutions
-polo
-polonaise
-polonaises
-poloneck
-polonies
-polonium
-polony
-poltergeist
-poltergeists
-poltroon
-polyandry
-polyatomic
-polycarbonate
-polychromatic
-polychrome
-polycotton
-polycrystalline
-polycyclic
-polyester
-polyesters
-polyethylene
-polygamous
-polygamy
-polyglot
-polyglots
-polygon
-polygonal
-polygons
-polygraph
-polygynous
-polygyny
-polyhedra
-polyhedral
-polyhedron
-polymath
-polymer
-polymerase
-polymerases
-polymeric
-polymerisation
-polymerised
-polymers
-polymorphic
-polymorphism
-polymorphisms
-polymorphous
-polynomial
-polynomially
-polynomials
-polyp
-polypeptide
-polypeptides
-polyphonic
-polyphony
-polypropylene
-polyps
-polysaccharide
-polysaccharides
-polystyrene
-polysyllabic
-polysyllable
-polysyllables
-polytechnic
-polytechnics
-polytheism
-polytheist
-polytheistic
-polytheists
-polythene
-polytopes
-polyunsaturated
-polyunsaturates
-polyurethane
-pomade
-pomades
-pomegranate
-pomegranates
-pomelo
-pomp
-pompadour
-pompeii
-pompey
-pomposity
-pompous
-pompously
-pompousness
-ponce
-poncho
-pond
-ponder
-pondered
-pondering
-ponderous
-ponderously
-ponders
-ponds
-ponies
-pontiff
-pontiffs
-pontifical
-pontificate
-pontificated
-pontificating
-pontification
-pontifications
-pontoon
-pontoons
-pony
-ponytail
-pooch
-pooches
-poodle
-poodles
-poof
-pooh
-pool
-pooled
-pooling
-pools
-poolside
-poop
-poor
-poorer
-poorest
-poorly
-poorness
-poorspirited
-pop
-popcorn
-pope
-popes
-popeyed
-poplar
-poplars
-popmusic
-popped
-popper
-poppet
-poppies
-popping
-poppy
-poppycock
-pops
-populace
-popular
-popularisation
-popularisations
-popularise
-popularised
-popularising
-popularity
-popularly
-populate
-populated
-populating
-population
-populations
-populism
-populist
-populists
-populous
-popup
-porcelain
-porch
-porches
-porcine
-porcupine
-porcupines
-pore
-pored
-pores
-poring
-pork
-porkchop
-porker
-porky
-porn
-porno
-pornographer
-pornographers
-pornographic
-pornography
-porns
-porosity
-porous
-porphyritic
-porphyry
-porpoise
-porpoises
-porridge
-port
-portability
-portable
-portables
-portage
-portal
-portals
-portcullis
-portcullises
-ported
-portend
-portended
-portending
-portends
-portent
-portentous
-portentously
-portents
-porter
-porterage
-porters
-portfolio
-porthole
-portholes
-portico
-porting
-portion
-portions
-portly
-portmanteau
-portmanteaus
-portrait
-portraitist
-portraits
-portraiture
-portray
-portrayal
-portrayals
-portrayed
-portraying
-portrays
-ports
-portugal
-pose
-posed
-poseidon
-poser
-posers
-poses
-poseur
-poseurs
-posh
-posies
-posing
-posit
-posited
-positing
-position
-positionable
-positional
-positionally
-positioned
-positioning
-positions
-positive
-positively
-positiveness
-positives
-positivism
-positivist
-positivists
-positivity
-positron
-positrons
-posits
-posse
-possess
-possessed
-possesses
-possessing
-possession
-possessions
-possessive
-possessively
-possessiveness
-possessives
-possessor
-possessors
-possibilities
-possibility
-possible
-possibles
-possibly
-possum
-possums
-post
-postage
-postal
-postbag
-postbox
-postboxes
-postcard
-postcards
-postcode
-postcodes
-postdated
-posted
-poster
-posterior
-posteriors
-posterity
-posters
-postfixes
-postgraduate
-postgraduates
-posthumous
-posthumously
-postilion
-postilions
-postillion
-posting
-postings
-postlude
-postman
-postmark
-postmarked
-postmarks
-postmaster
-postmasters
-postmen
-postmistress
-postmodern
-postmodernism
-postmodernist
-postmortem
-postmortems
-postnatal
-postoperative
-postoperatively
-postpone
-postponed
-postponement
-postponements
-postpones
-postponing
-posts
-postscript
-postscripts
-postulate
-postulated
-postulates
-postulating
-postulation
-postural
-posture
-postured
-postures
-posturing
-posturings
-posy
-pot
-potable
-potash
-potassium
-potato
-potbellied
-potch
-potencies
-potency
-potent
-potentate
-potentates
-potential
-potentialities
-potentiality
-potentially
-potentials
-potentiometer
-potentiometers
-potently
-pothole
-potholes
-potion
-potions
-potpourri
-pots
-potsherds
-potshot
-potshots
-pottage
-potted
-potter
-pottered
-potteries
-pottering
-potters
-pottery
-potties
-potting
-potty
-pouch
-pouches
-pouffe
-pouffes
-poult
-poulterer
-poultice
-poultry
-pounce
-pounced
-pounces
-pouncing
-pound
-poundage
-pounded
-pounding
-pounds
-pour
-pourable
-poured
-pouring
-pours
-pout
-pouted
-pouter
-pouting
-pouts
-poverty
-povertystricken
-powder
-powdered
-powdering
-powders
-powdery
-power
-powerboat
-powerboats
-powered
-powerful
-powerfully
-powerfulness
-powerhouse
-powerhouses
-powering
-powerless
-powerlessness
-powers
-powersharing
-pox
-practicabilities
-practicability
-practicable
-practical
-practicalities
-practicality
-practically
-practicals
-practice
-practices
-practise
-practised
-practises
-practising
-practitioner
-practitioners
-pragmatic
-pragmatically
-pragmatics
-pragmatism
-pragmatist
-pragmatists
-prague
-prairie
-prairies
-praise
-praised
-praises
-praiseworthy
-praising
-praline
-pram
-prams
-prance
-pranced
-prancer
-prancing
-prang
-prank
-pranks
-prankster
-pranksters
-prat
-prattle
-prattled
-prattler
-prattling
-prawn
-prawns
-pray
-prayed
-prayer
-prayerbook
-prayerful
-prayerfully
-prayers
-praying
-prays
-pre
-preach
-preached
-preacher
-preachers
-preaches
-preaching
-preachings
-preadolescent
-preallocate
-preamble
-preambles
-preamp
-preamplifier
-prearranged
-preauthorise
-prebend
-prebendary
-precarious
-precariously
-precariousness
-precaution
-precautionary
-precautions
-precede
-preceded
-precedence
-precedences
-precedent
-precedents
-precedes
-preceding
-precept
-precepts
-precess
-precessed
-precessing
-precession
-precinct
-precincts
-precious
-preciously
-preciousness
-precipice
-precipices
-precipitate
-precipitated
-precipitately
-precipitates
-precipitating
-precipitation
-precipitous
-precipitously
-precis
-precise
-precisely
-preciseness
-precision
-precisions
-preclinical
-preclude
-precluded
-precludes
-precluding
-precocious
-precociously
-precociousness
-precocity
-precognition
-precognitions
-precomputed
-preconceived
-preconception
-preconceptions
-precondition
-preconditions
-precooked
-precursor
-precursors
-predate
-predated
-predates
-predating
-predation
-predations
-predator
-predators
-predatory
-predeceased
-predecessor
-predecessors
-predeclared
-predefine
-predefined
-predefining
-predestination
-predestined
-predetermination
-predetermine
-predetermined
-predetermines
-predicament
-predicaments
-predicate
-predicated
-predicates
-predicating
-predicative
-predict
-predictability
-predictable
-predictably
-predicted
-predicting
-prediction
-predictions
-predictive
-predictor
-predictors
-predicts
-predilection
-predilections
-predispose
-predisposed
-predisposes
-predisposing
-predisposition
-predispositions
-predominance
-predominant
-predominantly
-predominate
-predominated
-predominates
-predominating
-preen
-preened
-preening
-preens
-prefab
-prefabricated
-prefabrication
-prefabs
-preface
-prefaced
-prefaces
-prefacing
-prefatory
-prefect
-prefects
-prefecture
-prefer
-preferable
-preferably
-preference
-preferences
-preferential
-preferentially
-preferment
-preferred
-preferring
-prefers
-prefigured
-prefix
-prefixed
-prefixes
-prefixing
-pregnancies
-pregnancy
-pregnant
-preheat
-preheating
-prehensile
-prehistoric
-prehistory
-prejudge
-prejudged
-prejudging
-prejudice
-prejudiced
-prejudices
-prejudicial
-prejudicing
-prelate
-prelates
-preliminaries
-preliminarily
-preliminary
-prelude
-preludes
-premature
-prematurely
-prematureness
-prematurity
-premeditate
-premeditated
-premeditation
-premenstrual
-premier
-premiere
-premiered
-premieres
-premiers
-premiership
-premise
-premised
-premises
-premising
-premiss
-premisses
-premium
-premiums
-premolar
-premolars
-premonition
-premonitions
-prenatal
-preoccupation
-preoccupations
-preoccupied
-preoccupy
-preoccupying
-preordained
-prep
-prepaid
-preparation
-preparations
-preparative
-preparatory
-prepare
-prepared
-preparedness
-preparer
-preparers
-prepares
-preparing
-prepayment
-prepays
-preplanned
-preponderance
-preponderant
-preponderantly
-preposition
-prepositional
-prepositions
-preposterous
-preposterously
-preps
-prerogative
-prerogatives
-presbytery
-preschool
-prescribe
-prescribed
-prescribes
-prescribing
-prescription
-prescriptions
-prescriptive
-prescriptively
-prescriptivism
-prescriptivist
-preselect
-preselected
-preselects
-presence
-presences
-present
-presentable
-presentation
-presentational
-presentations
-presented
-presenter
-presenters
-presentiment
-presentiments
-presenting
-presently
-presents
-preservation
-preservationists
-preservative
-preservatives
-preserve
-preserved
-preserver
-preserves
-preserving
-preset
-presets
-presetting
-preside
-presided
-presidencies
-presidency
-president
-presidential
-presidents
-presides
-presiding
-presidium
-press
-pressed
-presses
-pressing
-pressingly
-pressings
-pressman
-pressmen
-pressup
-pressups
-pressure
-pressurecooking
-pressured
-pressures
-pressuring
-pressurise
-pressurised
-pressurises
-pressurising
-prestidigitation
-prestidigitator
-prestidigitatorial
-prestige
-prestigious
-presto
-presumable
-presumably
-presume
-presumed
-presumes
-presuming
-presumption
-presumptions
-presumptive
-presumptively
-presumptuous
-presumptuously
-presumptuousness
-presuppose
-presupposed
-presupposes
-presupposing
-presupposition
-presuppositions
-pretence
-pretences
-pretend
-pretended
-pretender
-pretenders
-pretending
-pretends
-pretension
-pretensions
-pretentious
-pretentiously
-pretentiousness
-preterite
-preternatural
-preternaturally
-pretext
-pretexts
-pretor
-pretoria
-pretreated
-pretreatment
-pretreatments
-prettier
-prettiest
-prettify
-prettily
-prettiness
-pretty
-prevail
-prevailed
-prevailing
-prevails
-prevalence
-prevalent
-prevalently
-prevaricate
-prevaricated
-prevaricating
-prevarication
-prevent
-preventable
-prevented
-preventing
-prevention
-preventions
-preventive
-prevents
-preview
-previewed
-previewer
-previewers
-previewing
-previews
-previous
-previously
-prevue
-prevues
-prey
-preyed
-preying
-preys
-priapic
-price
-priced
-priceless
-prices
-pricewar
-pricey
-pricier
-pricing
-prick
-pricked
-pricking
-prickle
-prickled
-prickles
-pricklier
-prickliest
-prickliness
-prickling
-prickly
-pricks
-pricy
-pride
-prided
-prides
-pried
-pries
-priest
-priestess
-priestesses
-priesthood
-priestly
-priests
-prig
-priggish
-priggishly
-priggishness
-prim
-primacy
-primaeval
-primal
-primaries
-primarily
-primary
-primate
-primates
-prime
-primed
-primeness
-primer
-primers
-primes
-primetime
-primeval
-priming
-primitive
-primitively
-primitiveness
-primitives
-primly
-primness
-primogeniture
-primordial
-primrose
-primroses
-primus
-prince
-princelings
-princely
-princes
-princess
-princesses
-principal
-principalities
-principality
-principally
-principals
-principle
-principled
-principles
-print
-printable
-printed
-printer
-printers
-printing
-printings
-printmakers
-printmaking
-printout
-printouts
-prints
-prions
-prior
-priories
-priorities
-prioritisation
-prioritise
-prioritised
-prioritises
-prioritising
-priority
-priors
-priory
-prise
-prised
-prises
-prising
-prism
-prismatic
-prisms
-prison
-prisoner
-prisoners
-prisons
-prissy
-pristine
-privacy
-private
-privateer
-privateers
-privately
-privates
-privation
-privations
-privatisation
-privatisations
-privatise
-privatised
-privatises
-privatising
-privet
-privilege
-privileged
-privileges
-privileging
-privy
-prize
-prized
-prizer
-prizes
-prizewinner
-prizing
-pro
-proactive
-probabilist
-probabilistic
-probabilistically
-probabilities
-probability
-probable
-probably
-probate
-probation
-probationary
-probative
-probe
-probed
-prober
-probes
-probing
-probity
-problem
-problematic
-problematical
-problematically
-problems
-proboscis
-procedural
-procedurally
-procedure
-procedures
-proceed
-proceeded
-proceeding
-proceedings
-proceeds
-process
-processable
-processed
-processes
-processing
-procession
-processional
-processions
-processor
-processors
-proclaim
-proclaimed
-proclaimers
-proclaiming
-proclaims
-proclamation
-proclamations
-proclivities
-proclivity
-procrastinate
-procrastinating
-procrastination
-procrastinations
-procrastinator
-procrastinators
-procreate
-procreated
-procreating
-procreation
-procreational
-procreative
-procreatory
-proctor
-proctorial
-proctors
-procurable
-procure
-procured
-procurement
-procurements
-procures
-procuring
-prod
-prodded
-prodding
-prodeo
-prodigal
-prodigality
-prodigally
-prodigies
-prodigious
-prodigiously
-prodigy
-prods
-produce
-produced
-producer
-producers
-produces
-producible
-producing
-product
-production
-productions
-productive
-productively
-productivity
-products
-profanation
-profane
-profaned
-profanely
-profaneness
-profanities
-profanity
-profess
-professed
-professedly
-professes
-professing
-profession
-professional
-professionalisation
-professionalised
-professionalism
-professionally
-professionals
-professions
-professor
-professorial
-professors
-professorship
-professorships
-proffer
-proffered
-proffering
-proffers
-proficiencies
-proficiency
-proficient
-proficiently
-profile
-profiled
-profiles
-profiling
-profit
-profitability
-profitable
-profitably
-profited
-profiteering
-profiteers
-profiteroles
-profiting
-profitless
-profits
-profittaking
-profligacy
-profligate
-profligately
-proforma
-proformas
-profound
-profounder
-profoundest
-profoundly
-profundity
-profuse
-profusely
-profuseness
-profusion
-progenitor
-progenitors
-progeny
-progesterone
-prognoses
-prognosis
-prognosticate
-prognostication
-prognostications
-program
-programmable
-programmatic
-programme
-programmed
-programmer
-programmers
-programmes
-programming
-programs
-progress
-progressed
-progresses
-progressing
-progression
-progressions
-progressive
-progressively
-progressiveness
-progressives
-prohibit
-prohibited
-prohibiting
-prohibition
-prohibitionist
-prohibitionists
-prohibitions
-prohibitive
-prohibitively
-prohibits
-project
-projected
-projectile
-projectiles
-projecting
-projection
-projectionist
-projections
-projective
-projectively
-projector
-projectors
-projects
-prokaryotes
-prolactin
-prolapse
-prolapsed
-proletarian
-proletarianisation
-proletarians
-proletariat
-proliferate
-proliferated
-proliferates
-proliferating
-proliferation
-proliferative
-prolific
-prolifically
-prolix
-prologue
-prologues
-prolong
-prolongation
-prolonged
-prolonging
-prolongs
-promenade
-promenaded
-promenader
-promenaders
-promenades
-prominence
-prominences
-prominent
-prominently
-promiscuity
-promiscuous
-promiscuously
-promise
-promised
-promises
-promising
-promisingly
-promissory
-promontories
-promontory
-promotable
-promote
-promoted
-promoter
-promoters
-promotes
-promoting
-promotion
-promotional
-promotions
-prompt
-prompted
-prompter
-prompters
-prompting
-promptings
-promptitude
-promptly
-promptness
-prompts
-promulgate
-promulgated
-promulgating
-promulgation
-promulgations
-prone
-proneness
-prong
-prongs
-pronominal
-pronoun
-pronounce
-pronounceable
-pronounced
-pronouncedly
-pronouncement
-pronouncements
-pronounces
-pronouncing
-pronouns
-pronto
-pronunciation
-pronunciations
-proof
-proofed
-proofing
-proofread
-proofreader
-proofreaders
-proofreading
-proofreads
-proofs
-prop
-propaganda
-propagandist
-propagandists
-propagate
-propagated
-propagates
-propagating
-propagation
-propagator
-propagators
-propane
-propel
-propellant
-propellants
-propelled
-propeller
-propellers
-propelling
-propels
-propensities
-propensity
-proper
-properly
-propertied
-properties
-property
-prophecies
-prophecy
-prophesied
-prophesies
-prophesy
-prophesying
-prophet
-prophetess
-prophetic
-prophetically
-prophets
-prophylactic
-prophylactics
-prophylaxis
-propinquity
-propionate
-propitiate
-propitiated
-propitiating
-propitiation
-propitiatory
-propitious
-proponent
-proponents
-proportion
-proportional
-proportionality
-proportionally
-proportionate
-proportionately
-proportioned
-proportions
-proposal
-proposals
-propose
-proposed
-proposer
-proposers
-proposes
-proposing
-proposition
-propositional
-propositioned
-propositioning
-propositions
-propound
-propounded
-propounding
-propped
-propping
-proprietary
-proprieties
-proprietor
-proprietorial
-proprietorially
-proprietors
-proprietorship
-proprietress
-propriety
-proprioceptive
-props
-propulsion
-propulsive
-propylene
-pros
-prosaic
-prosaically
-prosaist
-proscenium
-proscribe
-proscribed
-proscription
-proscriptive
-prose
-prosecutable
-prosecute
-prosecuted
-prosecutes
-prosecuting
-prosecution
-prosecutions
-prosecutor
-prosecutorial
-prosecutors
-proselytise
-proselytising
-prosodic
-prosody
-prospect
-prospecting
-prospective
-prospectively
-prospector
-prospectors
-prospects
-prospectus
-prospectuses
-prosper
-prospered
-prospering
-prosperity
-prosperous
-prosperously
-prospers
-prostaglandin
-prostaglandins
-prostate
-prostates
-prostatic
-prosthesis
-prosthetic
-prostitute
-prostituted
-prostitutes
-prostituting
-prostitution
-prostrate
-prostrated
-prostrates
-prostrating
-prostration
-protactinium
-protagonist
-protagonists
-protea
-protean
-proteas
-protease
-protect
-protected
-protecting
-protection
-protectionism
-protectionist
-protectionists
-protections
-protective
-protectively
-protectiveness
-protector
-protectorate
-protectorates
-protectors
-protects
-protege
-protegee
-protegees
-proteges
-protein
-proteins
-protest
-protestant
-protestantism
-protestants
-protestation
-protestations
-protested
-protester
-protesters
-protesting
-protestor
-protestors
-protests
-protists
-protocol
-protocols
-proton
-protons
-protoplasm
-protoplasmic
-prototype
-prototyped
-prototypes
-prototypical
-prototyping
-protozoa
-protozoan
-protozoans
-protract
-protracted
-protractor
-protractors
-protrude
-protruded
-protrudes
-protruding
-protrusion
-protrusions
-protrusive
-protuberance
-protuberances
-proud
-prouder
-proudest
-proudly
-provable
-provably
-prove
-proved
-proven
-provenance
-provence
-proverb
-proverbial
-proverbially
-proverbs
-proves
-providable
-provide
-provided
-providence
-provident
-providential
-providentially
-provider
-providers
-provides
-providing
-province
-provinces
-provincial
-provincialism
-proving
-provision
-provisional
-provisionally
-provisioned
-provisioning
-provisions
-provocation
-provocations
-provocative
-provocatively
-provoke
-provoked
-provoker
-provokes
-provoking
-provokingly
-provost
-prow
-prowess
-prowl
-prowled
-prowler
-prowlers
-prowling
-prowls
-prows
-proxies
-proximal
-proximally
-proximate
-proximately
-proximity
-proximo
-proxy
-prude
-prudence
-prudent
-prudential
-prudently
-prudery
-prudish
-prudishness
-prune
-pruned
-pruners
-prunes
-pruning
-prunings
-prurience
-prurient
-pruritus
-prussia
-prussian
-prussic
-pry
-prying
-pryings
-psalm
-psalmist
-psalmody
-psalms
-psalter
-psalters
-psaltery
-psephologist
-pseudo
-pseudonym
-pseudonymous
-pseudonyms
-pseudopod
-psoriasis
-psyche
-psychedelia
-psychedelic
-psychiatric
-psychiatrist
-psychiatrists
-psychiatry
-psychic
-psychically
-psychics
-psycho
-psychoanalyse
-psychoanalysis
-psychoanalyst
-psychoanalysts
-psychoanalytic
-psychokinesis
-psychokinetic
-psycholinguistic
-psycholinguistics
-psycholinguists
-psychological
-psychologically
-psychologies
-psychologist
-psychologists
-psychology
-psychometric
-psychopath
-psychopathic
-psychopathology
-psychopaths
-psychoses
-psychosis
-psychosocial
-psychosomatic
-psychotherapist
-psychotherapists
-psychotherapy
-psychotic
-psychotically
-psychotics
-ptarmigan
-ptarmigans
-pterodactyl
-pterosaurs
-ptolemy
-pub
-puberty
-pubescent
-pubic
-public
-publican
-publicans
-publication
-publications
-publicise
-publicised
-publicises
-publicising
-publicist
-publicists
-publicity
-publicly
-publish
-publishable
-published
-publisher
-publishers
-publishes
-publishing
-pubs
-pudding
-puddings
-puddle
-puddles
-puerile
-puerility
-puerperal
-puff
-puffballs
-puffed
-puffer
-puffin
-puffiness
-puffing
-puffins
-puffs
-puffy
-pug
-pugilist
-pugilistic
-pugnacious
-pugnaciously
-pugnacity
-pugs
-puissant
-puke
-puking
-pulchritude
-puling
-pull
-pulled
-puller
-pullets
-pulley
-pulleys
-pulling
-pullover
-pullovers
-pulls
-pulmonary
-pulp
-pulped
-pulping
-pulpit
-pulpits
-pulps
-pulpy
-pulsar
-pulsars
-pulsate
-pulsated
-pulsates
-pulsating
-pulsation
-pulsations
-pulse
-pulsed
-pulses
-pulsing
-pulverisation
-pulverise
-pulverised
-pulverising
-puma
-pumas
-pumice
-pummel
-pummelled
-pummelling
-pummels
-pump
-pumped
-pumping
-pumpkin
-pumpkins
-pumps
-pun
-punch
-punchable
-punchbowl
-punchcard
-punched
-puncher
-punches
-punching
-punchline
-punchlines
-punchy
-punctate
-punctilious
-punctiliously
-punctual
-punctuality
-punctually
-punctuate
-punctuated
-punctuates
-punctuating
-punctuation
-punctuational
-punctuations
-puncture
-punctured
-punctures
-puncturing
-pundit
-pundits
-pungency
-pungent
-pungently
-punier
-puniest
-punish
-punishable
-punished
-punishes
-punishing
-punishment
-punishments
-punitive
-punitively
-punk
-punks
-punky
-punned
-punnet
-punning
-puns
-punster
-punt
-punted
-punter
-punters
-punting
-punts
-puny
-pup
-pupa
-pupae
-pupal
-pupated
-pupates
-pupating
-pupil
-pupillage
-pupils
-puppet
-puppeteer
-puppetry
-puppets
-puppies
-puppy
-puppyhood
-pups
-purblind
-purchasable
-purchase
-purchased
-purchaser
-purchasers
-purchases
-purchasing
-purdah
-pure
-puree
-purees
-purely
-pureness
-purer
-purest
-purgative
-purgatorial
-purgatory
-purge
-purged
-purges
-purging
-purgings
-purification
-purified
-purifier
-purifies
-purify
-purifying
-purims
-purines
-purist
-purists
-puritan
-puritanical
-puritanism
-puritans
-purities
-purity
-purl
-purlieus
-purling
-purlins
-purloin
-purloined
-purls
-purple
-purples
-purplish
-purport
-purported
-purportedly
-purporting
-purports
-purpose
-purposed
-purposeful
-purposefully
-purposefulness
-purposeless
-purposelessly
-purposely
-purposes
-purposing
-purposive
-purr
-purred
-purring
-purrs
-purse
-pursed
-purser
-purses
-pursing
-pursuance
-pursuant
-pursue
-pursued
-pursuer
-pursuers
-pursues
-pursuing
-pursuit
-pursuits
-purvey
-purveyance
-purveyed
-purveying
-purveyor
-purveyors
-purview
-pus
-push
-pushable
-pushed
-pusher
-pushers
-pushes
-pushier
-pushing
-pushovers
-pushups
-pushy
-puss
-pussy
-pussycat
-pussyfooting
-pustular
-pustule
-pustules
-put
-putative
-putatively
-putput
-putrefaction
-putrefy
-putrefying
-putrescent
-putrid
-putridity
-puts
-putsch
-putt
-putted
-putter
-putters
-putti
-putting
-putts
-putty
-puzzle
-puzzled
-puzzlement
-puzzler
-puzzles
-puzzling
-puzzlingly
-pygmies
-pygmy
-pyjama
-pyjamas
-pylon
-pylons
-pyracantha
-pyramid
-pyramidal
-pyramids
-pyre
-pyres
-pyridine
-pyrite
-pyrites
-pyrolyse
-pyrolysis
-pyromaniac
-pyromaniacs
-pyrotechnic
-pyrotechnics
-pyroxene
-pyroxenes
-python
-pythons
-qatar
-qua
-quack
-quacked
-quacking
-quackish
-quacks
-quadrangle
-quadrangles
-quadrangular
-quadrant
-quadrants
-quadratic
-quadratically
-quadratics
-quadrature
-quadratures
-quadrilateral
-quadrilaterals
-quadrille
-quadrilles
-quadripartite
-quadrophonic
-quadruped
-quadrupeds
-quadruple
-quadrupled
-quadruples
-quadruplets
-quadruplicate
-quadrupling
-quadruply
-quadrupole
-quaff
-quaffed
-quaffing
-quagga
-quaggas
-quagmire
-quagmires
-quail
-quailed
-quails
-quaint
-quainter
-quaintly
-quaintness
-quake
-quaked
-quaker
-quakers
-quakes
-quaking
-qualification
-qualifications
-qualified
-qualifier
-qualifiers
-qualifies
-qualify
-qualifying
-qualitative
-qualitatively
-qualities
-quality
-qualm
-qualms
-quantifiable
-quantification
-quantified
-quantifier
-quantifiers
-quantifies
-quantify
-quantifying
-quantisation
-quantise
-quantised
-quantitative
-quantitatively
-quantities
-quantity
-quantum
-quarantine
-quarantined
-quark
-quarks
-quarrel
-quarrelled
-quarrelling
-quarrels
-quarrelsome
-quarried
-quarries
-quarry
-quarrying
-quarrymen
-quart
-quarter
-quarterback
-quartered
-quartering
-quarterly
-quartermaster
-quarters
-quarterstaff
-quarterstaffs
-quartet
-quartets
-quartic
-quartics
-quartile
-quartiles
-quarto
-quarts
-quartz
-quartzite
-quasar
-quasars
-quash
-quashed
-quashing
-quasi
-quasilinear
-quaternary
-quaternion
-quaternions
-quatrain
-quatrains
-quaver
-quavered
-quavering
-quavers
-quay
-quays
-quayside
-queasiness
-queasy
-quebec
-queen
-queenly
-queens
-queer
-queerest
-queerly
-quell
-quelled
-quelling
-quells
-quench
-quenched
-quencher
-quenchers
-quenches
-quenching
-queried
-queries
-quern
-querulous
-querulously
-querulousness
-query
-querying
-quest
-questing
-question
-questionable
-questionably
-questioned
-questioner
-questioners
-questioning
-questioningly
-questionings
-questionnaire
-questionnaires
-questions
-quests
-queue
-queued
-queueing
-queues
-queuing
-quibble
-quibbles
-quibbling
-quiche
-quiches
-quick
-quicken
-quickened
-quickening
-quickens
-quicker
-quickest
-quicklime
-quickly
-quickness
-quicksand
-quicksands
-quicksilver
-quickwitted
-quid
-quids
-quiesce
-quiesced
-quiescence
-quiescent
-quiet
-quieted
-quieten
-quietened
-quietening
-quietens
-quieter
-quietest
-quieting
-quietly
-quietness
-quiets
-quietus
-quiff
-quill
-quills
-quilt
-quilted
-quilting
-quilts
-quince
-quincentenary
-quinces
-quinine
-quinquennial
-quintessence
-quintessential
-quintessentially
-quintet
-quintets
-quintic
-quintillion
-quintuple
-quip
-quipped
-quipper
-quips
-quire
-quirk
-quirkier
-quirkiest
-quirkiness
-quirks
-quirky
-quisling
-quit
-quite
-quits
-quitted
-quitter
-quitting
-quiver
-quivered
-quivering
-quiveringly
-quivers
-quixotic
-quiz
-quizzed
-quizzes
-quizzical
-quizzically
-quizzing
-quoins
-quoits
-quondam
-quorate
-quorum
-quota
-quotable
-quotas
-quotation
-quotations
-quote
-quoted
-quoter
-quotes
-quotidian
-quotient
-quotients
-quoting
-quovadis
-rabat
-rabats
-rabbi
-rabbis
-rabbit
-rabbiting
-rabbits
-rabble
-rabid
-rabidly
-rabies
-raccoon
-raccoons
-race
-racecourse
-racecourses
-raced
-racegoers
-racehorse
-racehorses
-racer
-racers
-races
-racetrack
-rachis
-racial
-racialism
-racialist
-racialists
-racially
-racier
-raciest
-racily
-racing
-racings
-racism
-racist
-racists
-rack
-racked
-racket
-racketeering
-rackets
-racking
-racks
-raconteur
-racoon
-racquet
-racquets
-racy
-rad
-radar
-radars
-radial
-radially
-radials
-radian
-radiance
-radiancy
-radians
-radiant
-radiantly
-radiate
-radiated
-radiates
-radiating
-radiation
-radiations
-radiative
-radiatively
-radiator
-radiators
-radical
-radicalism
-radically
-radicals
-radices
-radii
-radio
-radioactive
-radioactively
-radioactivity
-radioastronomical
-radiocarbon
-radioed
-radiogalaxies
-radiogalaxy
-radiogram
-radiograph
-radiographer
-radiographers
-radiographic
-radiographs
-radiography
-radioing
-radiological
-radiologist
-radiologists
-radiology
-radiometric
-radionuclide
-radios
-radiotherapy
-radish
-radishes
-radium
-radius
-radix
-radon
-raffia
-raffle
-raffled
-raffles
-raft
-rafter
-rafters
-rafting
-raftman
-rafts
-raftsman
-rag
-ragamuffin
-ragamuffins
-ragbag
-rage
-raged
-rages
-ragged
-raggedly
-raging
-ragout
-rags
-ragstoriches
-ragtime
-ragwort
-raid
-raided
-raider
-raiders
-raiding
-raids
-rail
-railed
-railes
-railing
-railings
-raillery
-railroad
-rails
-railway
-railwayman
-railwaymen
-railways
-raiment
-rain
-rainbow
-rainbows
-raincloud
-rainclouds
-raincoat
-raincoats
-raindrop
-raindrops
-rained
-rainfall
-rainforest
-rainforests
-rainier
-rainiest
-raining
-rainless
-rainout
-rains
-rainstorm
-rainstorms
-rainswept
-rainwater
-rainy
-raise
-raised
-raiser
-raises
-raisin
-raising
-raisins
-raj
-rajah
-rake
-raked
-rakes
-raking
-rakish
-rallied
-rallies
-rally
-rallying
-ram
-ramble
-rambled
-rambler
-ramblers
-rambles
-rambling
-ramblings
-ramification
-ramifications
-ramified
-ramifies
-ramify
-rammed
-rammer
-ramming
-ramp
-rampage
-rampaged
-rampages
-rampaging
-rampant
-rampantly
-rampart
-ramparts
-ramped
-ramping
-ramps
-ramrod
-rams
-ramshackle
-ran
-ranch
-rancher
-ranchers
-ranches
-ranching
-rancid
-rancorous
-rancour
-rand
-random
-randomisation
-randomise
-randomised
-randomising
-randomly
-randomness
-rands
-randy
-rang
-range
-ranged
-ranger
-rangers
-ranges
-ranging
-rangy
-rani
-ranis
-rank
-ranked
-ranker
-rankers
-rankest
-ranking
-rankings
-rankle
-rankled
-rankles
-rankling
-rankness
-ranks
-ransack
-ransacked
-ransacking
-ransom
-ransomed
-ransoming
-ransoms
-rant
-ranted
-ranter
-ranters
-ranting
-rantings
-rants
-rap
-rapacious
-rapacity
-rape
-raped
-rapes
-rapeseed
-rapid
-rapidity
-rapidly
-rapids
-rapier
-rapiers
-rapine
-raping
-rapist
-rapists
-rapped
-rapping
-rapport
-rapporteur
-rapporteurs
-rapports
-rapprochement
-raps
-rapt
-raptor
-raptors
-rapture
-raptures
-rapturous
-rapturously
-rare
-rarebit
-rarefaction
-rarefactions
-rarefied
-rarely
-rareness
-rarer
-rarest
-raring
-rarities
-rarity
-rascal
-rascally
-rascals
-rased
-rash
-rasher
-rashers
-rashes
-rashest
-rashly
-rashness
-rasing
-rasp
-raspberries
-raspberry
-rasped
-rasper
-rasping
-rasps
-raspy
-raster
-rasters
-rat
-ratatouille
-rate
-rated
-ratepayer
-ratepayers
-rater
-rates
-rather
-ratification
-ratifications
-ratified
-ratifier
-ratifies
-ratify
-ratifying
-rating
-ratings
-ratio
-ratiocination
-ration
-rational
-rationale
-rationales
-rationalisation
-rationalisations
-rationalise
-rationalised
-rationalising
-rationalism
-rationalist
-rationalistic
-rationalists
-rationalities
-rationality
-rationally
-rationed
-rationing
-rations
-ratios
-ratlike
-ratrace
-rats
-rattier
-rattle
-rattled
-rattler
-rattles
-rattlesnake
-rattlesnakes
-rattling
-ratty
-raucous
-raucously
-ravage
-ravaged
-ravages
-ravaging
-rave
-raved
-ravel
-ravelled
-ravelling
-ravels
-raven
-ravening
-ravenous
-ravenously
-ravens
-raver
-ravers
-raves
-ravine
-ravines
-raving
-ravingly
-ravings
-ravioli
-ravish
-ravished
-ravisher
-ravishes
-ravishing
-ravishingly
-raw
-rawest
-rawness
-ray
-rayed
-rayon
-rays
-raze
-razed
-razes
-razing
-razor
-razorbills
-razorblades
-razoring
-razors
-razorsharp
-razzmatazz
-re
-reabsorb
-reabsorbed
-reabsorption
-reaccept
-reaccessed
-reach
-reachable
-reached
-reaches
-reachieved
-reaching
-reacquainting
-reacquired
-reacquisition
-react
-reactant
-reactants
-reacted
-reacting
-reaction
-reactionaries
-reactionary
-reactions
-reactivate
-reactivated
-reactivates
-reactivating
-reactivation
-reactive
-reactivities
-reactivity
-reactor
-reactors
-reacts
-read
-readability
-readable
-readably
-readapt
-reader
-readers
-readership
-readerships
-readied
-readier
-readies
-readiest
-readily
-readiness
-reading
-readings
-readjust
-readjusted
-readjusting
-readjustment
-readjustments
-readmission
-readmit
-readmits
-readmitted
-reads
-ready
-readying
-readymade
-reaffirm
-reaffirmation
-reaffirmed
-reaffirming
-reaffirms
-reafforestation
-reagent
-reagents
-real
-realign
-realigned
-realigning
-realignment
-realignments
-realigns
-realisable
-realisation
-realisations
-realise
-realised
-realises
-realising
-realism
-realist
-realistic
-realistically
-realists
-realities
-reality
-reallife
-reallocate
-reallocated
-reallocates
-reallocating
-reallocation
-really
-realm
-realms
-realness
-realpolitik
-reals
-realty
-ream
-reams
-reanimated
-reanimating
-reap
-reaped
-reaper
-reapers
-reaping
-reappear
-reappearance
-reappeared
-reappearing
-reappears
-reapplied
-reapply
-reapplying
-reappoint
-reappointed
-reappointment
-reappraisal
-reappraised
-reappraising
-reaps
-rear
-reared
-rearer
-rearguard
-rearing
-rearm
-rearmament
-rearmed
-rearming
-rearms
-rearrange
-rearranged
-rearrangement
-rearrangements
-rearranges
-rearranging
-rears
-rearview
-rearward
-reason
-reasonable
-reasonableness
-reasonably
-reasoned
-reasoner
-reasoners
-reasoning
-reasonless
-reasons
-reassemble
-reassembled
-reassembling
-reassembly
-reassert
-reasserted
-reasserting
-reassertion
-reasserts
-reassess
-reassessed
-reassessment
-reassessments
-reassign
-reassigned
-reassigning
-reassignment
-reassigns
-reassume
-reassuming
-reassurance
-reassurances
-reassure
-reassured
-reassures
-reassuring
-reassuringly
-reattachment
-reattempt
-reawaken
-reawakened
-reawakening
-rebalanced
-rebate
-rebates
-rebel
-rebelled
-rebelling
-rebellion
-rebellions
-rebellious
-rebelliously
-rebelliousness
-rebels
-rebind
-rebirth
-rebirths
-rebook
-reboot
-rebooted
-reborn
-rebound
-rebounded
-rebounding
-rebounds
-rebuff
-rebuffed
-rebuffing
-rebuffs
-rebuild
-rebuilding
-rebuilds
-rebuilt
-rebuke
-rebuked
-rebukes
-rebuking
-reburial
-reburied
-rebury
-rebus
-rebut
-rebuttable
-rebuttal
-rebuttals
-rebutted
-rebutting
-recalcitrance
-recalcitrant
-recalculate
-recalculated
-recalculation
-recalibrate
-recalibrating
-recalibration
-recall
-recalled
-recalling
-recalls
-recant
-recantation
-recanted
-recanting
-recants
-recap
-recapitalisation
-recapitulate
-recapitulates
-recapitulation
-recapped
-recaps
-recapture
-recaptured
-recapturing
-recast
-recasting
-recasts
-recede
-receded
-recedes
-receding
-receipt
-receipted
-receipts
-receivable
-receive
-received
-receiver
-receivers
-receivership
-receives
-receiving
-recency
-recension
-recent
-recently
-receptacle
-receptacles
-reception
-receptionist
-receptionists
-receptions
-receptive
-receptiveness
-receptivity
-receptor
-receptors
-recess
-recessed
-recesses
-recession
-recessional
-recessionary
-recessions
-recessive
-recharge
-rechargeable
-recharged
-recharger
-recharges
-recharging
-recheck
-rechecked
-rechecking
-recidivism
-recidivist
-recidivists
-recipe
-recipes
-recipient
-recipients
-reciprocal
-reciprocally
-reciprocals
-reciprocate
-reciprocated
-reciprocating
-reciprocation
-reciprocity
-recirculate
-recirculated
-recirculating
-recirculation
-recital
-recitals
-recitation
-recitations
-recitative
-recitatives
-recite
-recited
-recites
-reciting
-reckless
-recklessly
-recklessness
-reckon
-reckoned
-reckoner
-reckoning
-reckons
-reclaim
-reclaimable
-reclaimed
-reclaimer
-reclaiming
-reclaims
-reclamation
-reclamations
-reclassification
-reclassified
-reclassifies
-reclassify
-reclassifying
-recline
-reclined
-recliner
-reclines
-reclining
-reclothe
-recluse
-recluses
-reclusive
-recode
-recoded
-recodes
-recoding
-recognisable
-recognisably
-recognisances
-recognise
-recognised
-recogniser
-recognisers
-recognises
-recognising
-recognition
-recognitions
-recoil
-recoiled
-recoiling
-recoils
-recollect
-recollected
-recollecting
-recollection
-recollections
-recollects
-recombinant
-recombinants
-recombination
-recombine
-recombined
-recombines
-recombining
-recommence
-recommenced
-recommencement
-recommences
-recommencing
-recommend
-recommendable
-recommendation
-recommendations
-recommended
-recommending
-recommends
-recommissioning
-recompense
-recompensed
-recompenses
-recompilation
-recompilations
-recompile
-recompiled
-recompiling
-recomputable
-recompute
-recomputed
-recomputes
-recomputing
-reconcilable
-reconcile
-reconciled
-reconcilement
-reconciles
-reconciliation
-reconciliations
-reconciling
-recondite
-reconditioned
-reconditioning
-reconfigurable
-reconfiguration
-reconfigurations
-reconfigure
-reconfigured
-reconfigures
-reconfiguring
-reconnaissance
-reconnect
-reconnected
-reconnecting
-reconnection
-reconnoitre
-reconnoitred
-reconnoitring
-reconquer
-reconquest
-reconsider
-reconsideration
-reconsidered
-reconsidering
-reconsiders
-reconstitute
-reconstituted
-reconstitutes
-reconstituting
-reconstitution
-reconstruct
-reconstructed
-reconstructing
-reconstruction
-reconstructions
-reconstructs
-reconsult
-reconsulted
-reconsulting
-recontribute
-reconvene
-reconvened
-reconvening
-reconversion
-reconvert
-reconverted
-recopied
-recopy
-record
-recordable
-recordbreaking
-recorded
-recorder
-recorders
-recording
-recordings
-recordist
-recordists
-records
-recount
-recounted
-recounting
-recounts
-recoup
-recouped
-recouping
-recouple
-recoups
-recourse
-recover
-recoverability
-recoverable
-recovered
-recoveries
-recovering
-recovers
-recovery
-recreate
-recreated
-recreates
-recreating
-recreation
-recreational
-recreations
-recriminate
-recrimination
-recriminations
-recruit
-recruited
-recruiter
-recruiters
-recruiting
-recruitment
-recruits
-recrystallisation
-rectal
-rectangle
-rectangles
-rectangular
-rectifiable
-rectification
-rectified
-rectifier
-rectifies
-rectify
-rectifying
-rectilinear
-rectitude
-recto
-rector
-rectors
-rectory
-rectrix
-rectum
-rectums
-recumbent
-recuperate
-recuperated
-recuperates
-recuperating
-recuperation
-recuperative
-recur
-recured
-recures
-recuring
-recurred
-recurrence
-recurrences
-recurrent
-recurrently
-recurring
-recurs
-recursion
-recursions
-recursive
-recursively
-recyclable
-recycle
-recycled
-recyclers
-recycles
-recycling
-red
-redaction
-redblooded
-redbreast
-redcoats
-redcross
-redden
-reddened
-reddening
-reddens
-redder
-reddest
-reddish
-redeclaration
-redecorated
-redecorating
-redecoration
-rededication
-redeem
-redeemable
-redeemed
-redeemer
-redeeming
-redeems
-redefine
-redefined
-redefiner
-redefines
-redefining
-redefinition
-redefinitions
-redeliver
-redelivery
-redemption
-redemptions
-redemptive
-redeploy
-redeployed
-redeploying
-redeployment
-redeposited
-redeposition
-redesign
-redesigned
-redesigning
-redesigns
-redevelop
-redeveloped
-redeveloping
-redevelopment
-redfaced
-redhanded
-redhead
-redheaded
-redheads
-redial
-redialling
-redirect
-redirected
-redirecting
-redirection
-redirects
-rediscover
-rediscovered
-rediscoveries
-rediscovering
-rediscovers
-rediscovery
-rediscussed
-redisplay
-redisplayed
-redistributable
-redistribute
-redistributed
-redistributes
-redistributing
-redistribution
-redistributions
-redistributive
-redneck
-redness
-redo
-redoing
-redolent
-redone
-redouble
-redoubled
-redoubling
-redoubt
-redoubtable
-redoubts
-redound
-redounded
-redox
-redraft
-redrafted
-redrafting
-redraw
-redrawing
-redrawn
-redraws
-redress
-redressed
-redressing
-reds
-redsea
-redshift
-redshifts
-redstarts
-redtape
-reduce
-reduced
-reducer
-reducers
-reduces
-reducibility
-reducible
-reducing
-reduction
-reductionism
-reductionist
-reductionists
-reductions
-reductive
-redundancies
-redundancy
-redundant
-redundantly
-redwood
-reed
-reeds
-reef
-reefed
-reefing
-reefs
-reek
-reeked
-reeking
-reeks
-reel
-reelects
-reeled
-reeling
-reels
-ref
-refer
-referable
-referee
-refereed
-refereeing
-referees
-reference
-referenced
-referencer
-references
-referencing
-referenda
-referendum
-referendums
-referent
-referential
-referentially
-referents
-referral
-referrals
-referred
-referring
-refers
-refile
-refiled
-refiling
-refill
-refillable
-refilled
-refilling
-refillings
-refills
-refinance
-refinanced
-refinancing
-refine
-refined
-refinement
-refinements
-refiner
-refineries
-refiners
-refinery
-refines
-refining
-refinish
-refit
-refits
-refitted
-refitting
-reflation
-reflect
-reflectance
-reflected
-reflecting
-reflection
-reflectional
-reflections
-reflective
-reflectively
-reflectiveness
-reflectivity
-reflector
-reflectors
-reflects
-reflex
-reflexes
-reflexion
-reflexions
-reflexive
-reflexively
-reflexiveness
-reflexivity
-reflexology
-refloat
-reflooring
-reflux
-refluxed
-refluxing
-refocus
-refocused
-refocuses
-refocusing
-refocussed
-refocusses
-refocussing
-refolded
-refolding
-reforestation
-reform
-reformable
-reformat
-reformation
-reformations
-reformative
-reformatted
-reformatting
-reformed
-reformer
-reformers
-reforming
-reformist
-reformists
-reforms
-reformulate
-reformulated
-reformulates
-reformulating
-reformulation
-reformulations
-refract
-refracted
-refracting
-refraction
-refractions
-refractive
-refractors
-refractory
-refracts
-refrain
-refrained
-refraining
-refrains
-refreeze
-refresh
-refreshable
-refreshed
-refresher
-refreshes
-refreshing
-refreshingly
-refreshment
-refreshments
-refrigerant
-refrigerants
-refrigerate
-refrigerated
-refrigeration
-refrigerator
-refrigerators
-refs
-refuel
-refuelled
-refuelling
-refuels
-refuge
-refugee
-refugees
-refuges
-refund
-refundable
-refunded
-refunding
-refunds
-refurbish
-refurbished
-refurbishing
-refurbishment
-refurbishments
-refusal
-refusals
-refuse
-refused
-refuseniks
-refuses
-refusing
-refutable
-refutation
-refutations
-refute
-refuted
-refutes
-refuting
-regain
-regained
-regaining
-regains
-regal
-regale
-regaled
-regales
-regalia
-regaling
-regality
-regally
-regard
-regarded
-regarding
-regardless
-regards
-regatta
-regattas
-regelate
-regency
-regenerate
-regenerated
-regenerates
-regenerating
-regeneration
-regenerations
-regenerative
-regent
-regents
-reggae
-regicide
-regime
-regimen
-regimens
-regiment
-regimental
-regimentation
-regimented
-regiments
-regimes
-regina
-reginas
-region
-regional
-regionalisation
-regionalism
-regionally
-regions
-register
-registered
-registering
-registers
-registrable
-registrar
-registrars
-registration
-registrations
-registries
-registry
-regrading
-regress
-regressed
-regresses
-regressing
-regression
-regressions
-regressive
-regret
-regretful
-regretfully
-regrets
-regrettable
-regrettably
-regretted
-regretting
-regroup
-regrouped
-regrouping
-regrow
-regrowth
-regular
-regularisation
-regularise
-regularised
-regularities
-regularity
-regularly
-regulars
-regulate
-regulated
-regulates
-regulating
-regulation
-regulations
-regulative
-regulator
-regulators
-regulatory
-regurgitate
-regurgitated
-regurgitating
-regurgitation
-rehabilitate
-rehabilitated
-rehabilitating
-rehabilitation
-rehash
-rehashed
-rehashes
-rehashing
-reheard
-rehearing
-rehears
-rehearsal
-rehearsals
-rehearse
-rehearsed
-rehearses
-rehearsing
-reheat
-reheated
-reheating
-reheats
-rehouse
-rehoused
-rehousing
-rehydrate
-reich
-reification
-reify
-reign
-reigned
-reigning
-reigns
-reimburse
-reimbursed
-reimbursement
-reimburses
-reimbursing
-reimplementation
-reimplemented
-reimplementing
-reimporting
-reimpose
-reimposed
-rein
-reincarnate
-reincarnated
-reincarnating
-reincarnation
-reincarnations
-reindeer
-reined
-reinfection
-reinforce
-reinforced
-reinforcement
-reinforcements
-reinforces
-reinforcing
-reining
-reinitialisation
-reinitialise
-reinitialised
-reinitialising
-reins
-reinsert
-reinserted
-reinstall
-reinstalled
-reinstalling
-reinstate
-reinstated
-reinstatement
-reinstates
-reinstating
-reinsurance
-reintegration
-reinterpret
-reinterpretation
-reinterpreted
-reinterpreting
-reintroduce
-reintroduced
-reintroduces
-reintroducing
-reintroduction
-reintroductions
-reinvent
-reinvented
-reinventing
-reinvention
-reinventions
-reinvents
-reinvest
-reinvested
-reinvestigation
-reinvestment
-reinvigorate
-reinvigorated
-reissue
-reissued
-reissues
-reissuing
-reiterate
-reiterated
-reiterates
-reiterating
-reiteration
-reject
-rejected
-rejecting
-rejection
-rejections
-rejects
-rejoice
-rejoiced
-rejoices
-rejoicing
-rejoicings
-rejoin
-rejoinder
-rejoinders
-rejoined
-rejoining
-rejoins
-rejustified
-rejuvenate
-rejuvenated
-rejuvenating
-rejuvenation
-rejuvenations
-rejuvenatory
-rekindle
-rekindled
-relabel
-relabelled
-relabelling
-relabellings
-relaid
-relapse
-relapsed
-relapses
-relapsing
-relate
-related
-relatedness
-relates
-relating
-relation
-relational
-relationally
-relations
-relationship
-relationships
-relative
-relatively
-relatives
-relativism
-relativist
-relativistic
-relativistically
-relativists
-relativity
-relator
-relaunch
-relaunched
-relaunching
-relax
-relaxant
-relaxants
-relaxation
-relaxations
-relaxed
-relaxes
-relaxing
-relaxingly
-relay
-relayed
-relaying
-relays
-relearn
-relearning
-releasable
-release
-released
-releases
-releasing
-relegate
-relegated
-relegates
-relegating
-relegation
-relent
-relented
-relenting
-relentless
-relentlessly
-relentlessness
-relents
-relevance
-relevancy
-relevant
-relevantly
-reliabilities
-reliability
-reliable
-reliably
-reliance
-reliant
-relic
-relics
-relict
-relicts
-relied
-relief
-reliefs
-relies
-relieve
-relieved
-relieves
-relieving
-relight
-relighting
-religion
-religions
-religiosity
-religious
-religiously
-religiousness
-relined
-relink
-relinked
-relinking
-relinquish
-relinquished
-relinquishes
-relinquishing
-reliquaries
-reliquary
-relish
-relished
-relishes
-relishing
-relit
-relive
-relived
-relives
-reliving
-reload
-reloaded
-reloading
-reloads
-relocatable
-relocate
-relocated
-relocates
-relocating
-relocation
-relocations
-relocked
-reluctance
-reluctant
-reluctantly
-rely
-relying
-rem
-remade
-remain
-remainder
-remaindered
-remaindering
-remainders
-remained
-remaining
-remains
-remake
-remakes
-remaking
-remand
-remanded
-remands
-remap
-remaps
-remark
-remarkable
-remarkably
-remarked
-remarking
-remarks
-remarriage
-remarried
-remarry
-remaster
-remastered
-remastering
-remasters
-rematch
-rematching
-rematerialised
-remediable
-remedial
-remedied
-remedies
-remedy
-remedying
-remember
-remembered
-remembering
-remembers
-remembrance
-remembrances
-remind
-reminded
-reminder
-reminders
-reminding
-reminds
-reminisce
-reminisced
-reminiscence
-reminiscences
-reminiscent
-reminiscently
-reminisces
-reminiscing
-remiss
-remission
-remissions
-remit
-remits
-remittal
-remittance
-remittances
-remitted
-remitting
-remix
-remixed
-remixes
-remnant
-remnants
-remodel
-remodelled
-remodelling
-remonstrance
-remonstrate
-remonstrated
-remonstrating
-remonstration
-remonstrations
-remorse
-remorseful
-remorsefully
-remorseless
-remorselessly
-remote
-remotely
-remoteness
-remoter
-remotest
-remould
-remount
-remounted
-remounts
-removable
-removal
-removals
-remove
-removed
-remover
-removers
-removes
-removing
-remunerate
-remunerated
-remuneration
-remunerative
-remus
-renaissance
-renal
-rename
-renamed
-renames
-renaming
-render
-rendered
-rendering
-renderings
-renders
-rendezvous
-rendezvoused
-rending
-rendition
-renditions
-rends
-renegade
-renegades
-renege
-reneged
-reneging
-renegotiate
-renegotiated
-renegotiating
-renegotiation
-renew
-renewable
-renewal
-renewals
-renewed
-renewing
-renews
-renormalisation
-renounce
-renounced
-renouncement
-renounces
-renouncing
-renovate
-renovated
-renovating
-renovation
-renovations
-renown
-renowned
-rent
-rental
-rentals
-rented
-renter
-renters
-rentiers
-renting
-rents
-renumber
-renumbered
-renumbering
-renunciation
-renunciations
-reoccupation
-reoccupied
-reoccupy
-reoccupying
-reoccur
-reopen
-reopened
-reopening
-reopens
-reorder
-reordered
-reordering
-reorders
-reorganisation
-reorganisations
-reorganise
-reorganised
-reorganises
-reorganising
-reorientated
-reorientates
-reorientation
-rep
-repack
-repackage
-repackaged
-repacked
-repacking
-repaid
-repaint
-repainted
-repainting
-repair
-repairable
-repaired
-repairer
-repairers
-repairing
-repairman
-repairs
-repaper
-reparation
-reparations
-repartee
-repartition
-repartitioned
-repartitioning
-repast
-repasts
-repatriate
-repatriated
-repatriating
-repatriation
-repatriations
-repay
-repayable
-repaying
-repayment
-repayments
-repays
-repeal
-repealed
-repealing
-repeals
-repeat
-repeatability
-repeatable
-repeatably
-repeated
-repeatedly
-repeater
-repeaters
-repeating
-repeats
-repel
-repelled
-repellent
-repelling
-repellingly
-repels
-repent
-repentance
-repentant
-repentantly
-repented
-repenting
-repents
-repercussion
-repercussions
-repertoire
-repertoires
-repertory
-repetition
-repetitions
-repetitious
-repetitive
-repetitively
-repetitiveness
-rephrase
-rephrased
-rephrases
-rephrasing
-repine
-repined
-repining
-replace
-replaceable
-replaced
-replacement
-replacements
-replaces
-replacing
-replanning
-replant
-replanted
-replanting
-replay
-replayed
-replaying
-replays
-replenish
-replenished
-replenishing
-replenishment
-replete
-replica
-replicable
-replicas
-replicate
-replicated
-replicates
-replicating
-replication
-replications
-replicator
-replicators
-replied
-replier
-repliers
-replies
-replotted
-replug
-replugged
-replugging
-reply
-replying
-repopulate
-repopulated
-report
-reportable
-reportage
-reported
-reportedly
-reporter
-reporters
-reporting
-reports
-repose
-reposed
-reposes
-reposing
-reposition
-repositioned
-repositioning
-repositions
-repositories
-repository
-repossess
-repossessed
-repossessing
-repossession
-repossessions
-reprehend
-reprehensible
-represent
-representable
-representation
-representational
-representations
-representative
-representativeness
-representatives
-represented
-representing
-represents
-repress
-repressed
-represses
-repressing
-repression
-repressions
-repressive
-repressively
-reprieve
-reprieved
-reprimand
-reprimanded
-reprimanding
-reprimands
-reprint
-reprinted
-reprinting
-reprints
-reprisal
-reprisals
-reprise
-reproach
-reproached
-reproaches
-reproachful
-reproachfully
-reproachfulness
-reproaching
-reprobate
-reprobates
-reprocess
-reprocessed
-reprocessing
-reproduce
-reproduced
-reproduces
-reproducibility
-reproducible
-reproducibly
-reproducing
-reproduction
-reproductions
-reproductive
-reproductively
-reprogram
-reprogrammable
-reprogramme
-reprogrammed
-reprogramming
-reprojected
-reproof
-reproofs
-reprove
-reproved
-reprovingly
-reps
-reptile
-reptiles
-reptilian
-reptilians
-republic
-republican
-republicanism
-republicans
-republication
-republics
-republish
-republished
-republishes
-republishing
-repudiate
-repudiated
-repudiates
-repudiating
-repudiation
-repugnance
-repugnant
-repulse
-repulsed
-repulsing
-repulsion
-repulsions
-repulsive
-repulsively
-repulsiveness
-repurchase
-reputable
-reputably
-reputation
-reputations
-repute
-reputed
-reputedly
-reputes
-request
-requested
-requester
-requesting
-requests
-requiem
-requiems
-require
-required
-requirement
-requirements
-requires
-requiring
-requisite
-requisites
-requisition
-requisitioned
-requisitioning
-requisitions
-requital
-requite
-requited
-reran
-reread
-rereading
-rereads
-reregistration
-rerolled
-reroute
-rerouted
-rerouteing
-reroutes
-rerouting
-rerun
-rerunning
-reruns
-resale
-rescale
-rescaled
-rescales
-rescaling
-rescan
-rescanned
-rescanning
-rescans
-reschedule
-rescheduled
-rescheduling
-rescind
-rescinded
-rescinding
-rescue
-rescued
-rescuer
-rescuers
-rescues
-rescuing
-resea
-resealed
-research
-researched
-researcher
-researchers
-researches
-researching
-reseated
-reseeding
-reselect
-reselected
-reselection
-resell
-reseller
-resellers
-reselling
-resemblance
-resemblances
-resemble
-resembled
-resembles
-resembling
-resend
-resending
-resent
-resented
-resentful
-resentfully
-resenting
-resentment
-resentments
-resents
-reservation
-reservations
-reserve
-reserved
-reserver
-reserves
-reserving
-reservists
-reservoir
-reservoirs
-reset
-resets
-resettable
-resetting
-resettle
-resettled
-resettlement
-resettling
-reshape
-reshaped
-reshapes
-reshaping
-resharpen
-resharpened
-resharpening
-reshow
-reshowing
-reshuffle
-reshuffled
-reshuffles
-reshuffling
-reside
-resided
-residence
-residences
-residency
-resident
-residential
-residents
-resides
-residing
-residual
-residuals
-residuary
-residue
-residues
-residuum
-resign
-resignal
-resignation
-resignations
-resigned
-resignedly
-resigning
-resigns
-resilience
-resilient
-resin
-resinous
-resins
-resiny
-resist
-resistance
-resistances
-resistant
-resisted
-resistible
-resisting
-resistive
-resistively
-resistivity
-resistor
-resistors
-resists
-resit
-resiting
-resits
-resize
-resizing
-resold
-resolute
-resolutely
-resolution
-resolutions
-resolvability
-resolvable
-resolve
-resolved
-resolvent
-resolver
-resolvers
-resolves
-resolving
-resonance
-resonances
-resonant
-resonantly
-resonate
-resonated
-resonates
-resonating
-resonator
-resonators
-resort
-resorted
-resorting
-resorts
-resound
-resounded
-resounding
-resoundingly
-resounds
-resource
-resourced
-resourceful
-resourcefulness
-resources
-resourcing
-respecified
-respecify
-respect
-respectability
-respectable
-respectably
-respected
-respectful
-respectfully
-respecting
-respective
-respectively
-respects
-respiration
-respirator
-respirators
-respiratory
-respire
-respired
-respite
-resplendent
-respond
-responded
-respondent
-respondents
-responder
-responders
-responding
-responds
-response
-responses
-responsibilities
-responsibility
-responsible
-responsibly
-responsive
-responsively
-responsiveness
-respray
-resprayed
-resprays
-rest
-restart
-restartable
-restarted
-restarting
-restarts
-restate
-restated
-restatement
-restates
-restating
-restaurant
-restaurants
-restaurateur
-restaurateurs
-rested
-restful
-restfulness
-resting
-restitution
-restive
-restiveness
-restless
-restlessly
-restlessness
-restock
-restocking
-restoration
-restorations
-restorative
-restore
-restored
-restorer
-restorers
-restores
-restoring
-restrain
-restrained
-restraining
-restrains
-restraint
-restraints
-restrict
-restricted
-restricting
-restriction
-restrictions
-restrictive
-restrictively
-restricts
-restroom
-restructure
-restructured
-restructures
-restructuring
-rests
-restyled
-resubmission
-resubmissions
-resubmit
-resubmits
-resubmitted
-resubmitting
-resubstitute
-result
-resultant
-resulted
-resulting
-results
-resume
-resumed
-resumes
-resuming
-resumption
-resupply
-resurface
-resurfaced
-resurfacing
-resurgence
-resurgent
-resurrect
-resurrected
-resurrecting
-resurrection
-resurrects
-resuscitate
-resuscitated
-resuscitating
-resuscitation
-retail
-retailed
-retailer
-retailers
-retailing
-retails
-retain
-retained
-retainer
-retainers
-retaining
-retains
-retake
-retaken
-retakes
-retaking
-retaliate
-retaliated
-retaliates
-retaliating
-retaliation
-retaliatory
-retard
-retardant
-retardation
-retarded
-retarding
-retards
-retch
-retched
-retching
-retell
-retelling
-retention
-retentions
-retentive
-retentiveness
-retentivity
-retest
-retested
-retesting
-retests
-rethink
-rethinking
-rethought
-reticence
-reticent
-reticular
-reticulated
-reticulation
-reticule
-reticules
-reticulum
-retied
-retina
-retinal
-retinas
-retinitis
-retinue
-retinues
-retire
-retired
-retiree
-retirement
-retirements
-retires
-retiring
-retitle
-retitled
-retitling
-retold
-retook
-retort
-retorted
-retorting
-retorts
-retouch
-retouched
-retouching
-retrace
-retraced
-retraces
-retracing
-retract
-retractable
-retracted
-retracting
-retraction
-retractions
-retracts
-retrain
-retrained
-retraining
-retral
-retransmission
-retransmissions
-retransmit
-retransmits
-retransmitted
-retransmitting
-retread
-retreads
-retreat
-retreated
-retreating
-retreats
-retrench
-retrenchment
-retrial
-retribution
-retributive
-retried
-retries
-retrievable
-retrieval
-retrievals
-retrieve
-retrieved
-retriever
-retrievers
-retrieves
-retrieving
-retro
-retroactive
-retroactively
-retrofit
-retrofitted
-retrofitting
-retrograde
-retrogressive
-retrospect
-retrospection
-retrospective
-retrospectively
-retrospectives
-retroviruses
-retry
-retrying
-retsina
-retted
-retune
-retuning
-return
-returnable
-returned
-returnees
-returning
-returns
-retype
-retyped
-retypes
-retyping
-reunification
-reunified
-reunify
-reunion
-reunions
-reunite
-reunited
-reunites
-reuniting
-reusable
-reuse
-reused
-reuses
-reusing
-rev
-revaluation
-revaluations
-revalue
-revalued
-revalues
-revamp
-revamped
-revamping
-revamps
-revanchist
-reveal
-revealable
-revealed
-revealing
-revealingly
-reveals
-reveille
-revel
-revelation
-revelations
-revelatory
-revelled
-reveller
-revellers
-revelling
-revelries
-revelry
-revels
-revenant
-revenge
-revenged
-revengeful
-revenges
-revenging
-revenue
-revenues
-reverberant
-reverberate
-reverberated
-reverberates
-reverberating
-reverberation
-reverberations
-revere
-revered
-reverence
-reverend
-reverent
-reverential
-reverentially
-reverently
-reveres
-reverie
-reveries
-revering
-reversal
-reversals
-reverse
-reversed
-reverser
-reverses
-reversibility
-reversible
-reversibly
-reversing
-reversion
-revert
-reverted
-reverting
-reverts
-review
-reviewable
-reviewed
-reviewer
-reviewers
-reviewing
-reviews
-revile
-reviled
-reviling
-revisable
-revisal
-revise
-revised
-reviser
-revises
-revising
-revision
-revisionary
-revisionism
-revisionist
-revisionists
-revisions
-revisit
-revisited
-revisiting
-revisits
-revitalisation
-revitalise
-revitalised
-revitalising
-revival
-revivalism
-revivalist
-revivalists
-revivals
-revive
-revived
-reviver
-revives
-revivify
-revivifying
-reviving
-revocable
-revocation
-revocations
-revoke
-revoked
-revoker
-revokers
-revokes
-revoking
-revolt
-revolted
-revolting
-revoltingly
-revolts
-revolution
-revolutionaries
-revolutionary
-revolutionise
-revolutionised
-revolutionises
-revolutionising
-revolutions
-revolve
-revolved
-revolver
-revolvers
-revolves
-revolving
-revs
-revue
-revues
-revulsion
-revved
-revving
-reward
-rewarded
-rewarding
-rewards
-reweighed
-rewind
-rewindable
-rewinding
-rewinds
-rewire
-rewired
-rewiring
-reword
-reworded
-rewording
-rewordings
-rework
-reworked
-reworking
-reworks
-rewound
-rewrap
-rewritable
-rewrite
-rewrites
-rewriting
-rewritings
-rewritten
-rewrote
-rhapsodic
-rhapsodical
-rhapsodies
-rhapsody
-rhea
-rhein
-rhenium
-rheological
-rheology
-rheostat
-rhesus
-rhetoric
-rhetorical
-rhetorically
-rhetorician
-rhetoricians
-rheumatic
-rheumatics
-rheumatism
-rheumatoid
-rheumatology
-rhine
-rhinestone
-rhinitis
-rhino
-rhinoceros
-rhinoceroses
-rhizome
-rho
-rhodesia
-rhodium
-rhododendron
-rhododendrons
-rhombic
-rhomboids
-rhombus
-rhombuses
-rhubarb
-rhumbas
-rhyme
-rhymed
-rhymer
-rhymes
-rhyming
-rhythm
-rhythmic
-rhythmical
-rhythmically
-rhythms
-ria
-rial
-rials
-rialto
-rib
-ribald
-ribaldry
-ribbed
-ribbing
-ribbon
-ribbons
-ribcage
-riboflavin
-ribonucleic
-ribosomal
-ribosome
-ribosomes
-ribs
-rice
-rich
-richer
-riches
-richest
-richly
-richness
-rick
-rickets
-rickety
-ricking
-ricks
-ricksha
-rickshas
-rickshaw
-rickshaws
-ricochet
-ricocheted
-ricocheting
-rid
-riddance
-ridden
-ridding
-riddle
-riddled
-riddles
-riddling
-ride
-rider
-riders
-rides
-ridge
-ridged
-ridges
-ridicule
-ridiculed
-ridicules
-ridiculing
-ridiculous
-ridiculously
-ridiculousness
-riding
-ridings
-rids
-rife
-riff
-riffle
-riffled
-riffs
-rifle
-rifled
-rifleman
-riflemen
-rifles
-rifling
-riflings
-rift
-rifting
-rifts
-rig
-rigged
-rigger
-riggers
-rigging
-right
-righted
-righten
-righteous
-righteously
-righteousness
-righter
-rightful
-rightfully
-righthand
-righthanded
-righthandedness
-righthander
-righthanders
-righting
-rightist
-rightly
-rightminded
-rightmost
-rightness
-rights
-rightthinking
-rightward
-rightwards
-rightwing
-rightwinger
-rightwingers
-rigid
-rigidifies
-rigidify
-rigidities
-rigidity
-rigidly
-rigmarole
-rigor
-rigorous
-rigorously
-rigour
-rigours
-rigs
-rile
-riled
-riles
-riling
-rill
-rills
-rim
-rime
-rimless
-rimmed
-rims
-rind
-rinds
-ring
-ringed
-ringer
-ringers
-ringing
-ringingly
-ringleader
-ringleaders
-ringless
-ringlet
-ringlets
-ringmaster
-rings
-ringside
-ringworm
-rink
-rinks
-rinse
-rinsed
-rinses
-rinsing
-riot
-rioted
-rioter
-rioters
-rioting
-riotous
-riotously
-riots
-rip
-ripcord
-ripe
-ripely
-ripen
-ripened
-ripeness
-ripening
-ripens
-riper
-ripest
-riping
-ripoff
-riposte
-riposted
-ripostes
-ripped
-ripper
-rippers
-ripping
-ripple
-rippled
-ripples
-rippling
-rips
-ripstop
-rise
-risen
-riser
-risers
-rises
-risible
-rising
-risings
-risk
-risked
-riskier
-riskiest
-riskiness
-risking
-risks
-risky
-risotto
-risque
-rissole
-rissoles
-rite
-rites
-ritual
-ritualised
-ritualistic
-ritualistically
-ritually
-rituals
-rival
-rivalled
-rivalling
-rivalries
-rivalry
-rivals
-riven
-river
-riverine
-rivers
-riverside
-rivet
-riveted
-riveter
-riveting
-rivetingly
-rivets
-riviera
-rivulet
-rivulets
-roach
-roaches
-road
-roadblock
-roadblocks
-roadhouse
-roadmap
-roads
-roadshow
-roadshows
-roadside
-roadsides
-roadsigns
-roadster
-roadsweepers
-roadway
-roadways
-roadworks
-roadworthy
-roam
-roamed
-roamer
-roaming
-roams
-roan
-roar
-roared
-roarer
-roaring
-roars
-roast
-roasted
-roaster
-roasting
-roasts
-rob
-robbed
-robber
-robberies
-robbers
-robbery
-robbing
-robe
-robed
-robes
-robin
-robins
-robot
-robotic
-robotics
-robots
-robs
-robust
-robustly
-robustness
-roc
-rock
-rockbottom
-rocked
-rocker
-rockers
-rockery
-rocket
-rocketed
-rocketing
-rocketry
-rockets
-rockfall
-rockfalls
-rockier
-rockiest
-rocking
-rocks
-rocksolid
-rocky
-rococo
-rocs
-rod
-rode
-rodent
-rodents
-rodeo
-rodeos
-rods
-roe
-roebuck
-roentgen
-roes
-rogue
-roguery
-rogues
-roguish
-roguishly
-roguishness
-roister
-roistering
-role
-roles
-roll
-rollcall
-rolled
-roller
-rollercoaster
-rollers
-rollerskating
-rollicking
-rolling
-rolls
-rolypoly
-rom
-roman
-romance
-romanced
-romancer
-romances
-romancing
-romans
-romantic
-romantically
-romanticised
-romanticises
-romanticising
-romanticism
-romantics
-romany
-rome
-rommel
-romp
-romped
-romper
-romping
-romps
-romulus
-rondavel
-roo
-roof
-roofed
-roofer
-roofgarden
-roofing
-roofings
-roofless
-roofs
-rooftop
-rooftops
-rooibos
-rook
-rookeries
-rookery
-rookies
-rooks
-room
-roomful
-roomier
-roomiest
-roommate
-rooms
-roomy
-roost
-roosted
-rooster
-roosters
-roosting
-roosts
-root
-rooted
-rooting
-rootings
-rootless
-roots
-rope
-roped
-ropes
-roping
-rosaries
-rosary
-rose
-rosebud
-rosebuds
-rosebush
-rosemary
-roses
-rosette
-rosettes
-rosewood
-rosier
-rosiest
-rosily
-rosin
-roster
-rostering
-rosters
-rostrum
-rostrums
-rosy
-rot
-rota
-rotary
-rotas
-rotatable
-rotate
-rotated
-rotates
-rotating
-rotation
-rotational
-rotationally
-rotations
-rotator
-rotators
-rotatory
-rote
-rotor
-rotors
-rots
-rotted
-rotten
-rottenly
-rottenness
-rotter
-rotting
-rotund
-rotunda
-rotundity
-rouble
-roubles
-rouge
-rouged
-rouges
-rough
-roughage
-roughed
-roughen
-roughened
-roughens
-rougher
-roughest
-roughie
-roughing
-roughly
-roughness
-roughs
-roughshod
-roulette
-round
-roundabout
-roundabouts
-rounded
-roundel
-roundels
-rounder
-rounders
-roundest
-roundhouse
-rounding
-roundish
-roundly
-roundness
-rounds
-roundtheclock
-roundup
-roundups
-rouse
-roused
-rouses
-rousing
-rout
-route
-routed
-routeing
-router
-routers
-routes
-routine
-routinely
-routines
-routing
-routs
-rove
-roved
-rover
-rovers
-roves
-roving
-rovings
-row
-rowboat
-rowboats
-rowdier
-rowdiest
-rowdily
-rowdiness
-rowdy
-rowdyism
-rowed
-rower
-rowers
-rowing
-rows
-royal
-royalist
-royalists
-royally
-royals
-royalties
-royalty
-ruanda
-rub
-rubbed
-rubber
-rubberised
-rubbers
-rubberstamp
-rubberstamped
-rubberstamping
-rubbery
-rubbing
-rubbings
-rubbish
-rubbished
-rubbishes
-rubbishing
-rubbishy
-rubble
-rubbles
-rubella
-rubicon
-rubicund
-rubidium
-rubies
-rubric
-rubs
-ruby
-ruck
-rucks
-rucksack
-rucksacks
-ruction
-ructions
-rudder
-rudderless
-rudders
-ruddiness
-ruddy
-rude
-rudely
-rudeness
-ruder
-rudest
-rudimentary
-rudiments
-rue
-rueful
-ruefully
-ruefulness
-rues
-ruff
-ruffian
-ruffians
-ruffle
-ruffled
-ruffles
-ruffling
-ruffs
-rug
-rugby
-rugged
-ruggedly
-ruggedness
-rugs
-ruin
-ruination
-ruinations
-ruined
-ruiner
-ruining
-ruinous
-ruinously
-ruins
-rule
-rulebook
-rulebooks
-ruled
-ruler
-rulers
-rules
-ruling
-rulings
-rum
-rumania
-rumba
-rumbas
-rumble
-rumbled
-rumbles
-rumbling
-rumblings
-rumbustious
-rumen
-ruminant
-ruminants
-ruminate
-ruminated
-ruminating
-rumination
-ruminations
-ruminative
-ruminatively
-rummage
-rummaged
-rummages
-rummaging
-rummy
-rumour
-rumoured
-rumours
-rump
-rumple
-rumpled
-rumpling
-rumps
-rumpus
-rumpuses
-run
-runaway
-rundown
-rune
-runes
-rung
-rungs
-runnable
-runner
-runners
-runnersup
-runnerup
-runnier
-runniest
-running
-runny
-runofthemill
-runs
-runt
-runts
-runway
-runways
-rupee
-rupees
-rupert
-rupture
-ruptured
-ruptures
-rupturing
-rural
-ruralist
-rurally
-ruse
-rush
-rushed
-rushes
-rushhour
-rushier
-rushing
-rusk
-rusks
-russet
-russia
-russian
-rust
-rusted
-rustic
-rustically
-rusticate
-rusticated
-rusticity
-rustics
-rustier
-rustiest
-rustiness
-rusting
-rustle
-rustled
-rustler
-rustlers
-rustles
-rustling
-rustproof
-rusts
-rusty
-rut
-ruth
-ruthless
-ruthlessly
-ruthlessness
-ruts
-rutted
-rwanda
-rye
-sabbat
-sabbath
-sabbaths
-sabbatical
-sabbaticals
-saber
-sable
-sables
-sabotage
-sabotaged
-sabotages
-sabotaging
-saboteur
-saboteurs
-sabra
-sabras
-sabre
-sabres
-sabretoothed
-sac
-saccharides
-saccharin
-saccharine
-sacerdotal
-sachet
-sachets
-sack
-sackcloth
-sacked
-sackful
-sackfuls
-sacking
-sacks
-sacral
-sacrament
-sacramental
-sacraments
-sacred
-sacredly
-sacredness
-sacrifice
-sacrificed
-sacrifices
-sacrificial
-sacrificing
-sacrilege
-sacrilegious
-sacristy
-sacrosanct
-sacrum
-sacs
-sad
-sadden
-saddened
-saddening
-saddens
-sadder
-saddest
-saddle
-saddlebag
-saddlebags
-saddled
-saddler
-saddlers
-saddles
-saddling
-sadism
-sadist
-sadistic
-sadistically
-sadists
-sadly
-sadness
-sadomasochism
-sadomasochistic
-sadsack
-safari
-safaris
-safe
-safeguard
-safeguarded
-safeguarding
-safeguards
-safely
-safeness
-safer
-safes
-safest
-safeties
-safety
-saffron
-sag
-saga
-sagacious
-sagaciously
-sagacity
-sagas
-sage
-sagely
-sages
-sagest
-sagged
-sagging
-sago
-sags
-sahara
-sahib
-said
-saigon
-sail
-sailcloth
-sailed
-sailer
-sailing
-sailings
-sailmaker
-sailor
-sailors
-sails
-saint
-sainted
-sainthood
-saintlier
-saintliest
-saintliness
-saintly
-saints
-saipan
-sake
-sakes
-saki
-salaam
-salacious
-salad
-salads
-salamander
-salamanders
-salami
-salamis
-salaried
-salaries
-salary
-sale
-saleability
-saleable
-salem
-sales
-salesgirl
-salesman
-salesmanship
-salesmen
-salespeople
-salesperson
-saleswoman
-salicylic
-salience
-salient
-saline
-salinity
-saliva
-salivary
-salivas
-salivate
-salivating
-salivation
-salivations
-sallied
-sallies
-sallow
-sally
-sallying
-salmon
-salmonella
-salmons
-salome
-salon
-salons
-saloon
-saloons
-salsa
-salt
-salted
-saltier
-saltiest
-saltiness
-saltpetre
-salts
-saltwater
-salty
-salubrious
-salubrity
-salutary
-salutation
-salutations
-salute
-saluted
-salutes
-saluting
-salvage
-salvageable
-salvaged
-salvager
-salvages
-salvaging
-salvation
-salve
-salved
-salver
-salvers
-salving
-salvo
-sam
-samba
-sambas
-same
-sameness
-samizdat
-samoa
-samosas
-samovar
-sampan
-sample
-sampled
-sampler
-samplers
-samples
-sampling
-samplings
-samurai
-san
-sanatorium
-sanctification
-sanctified
-sanctifies
-sanctify
-sanctifying
-sanctimonious
-sanction
-sanctioned
-sanctioning
-sanctions
-sanctity
-sanctuaries
-sanctuary
-sanctum
-sand
-sandal
-sandalled
-sandals
-sandalwood
-sandbag
-sandbagged
-sandbags
-sandbank
-sandbanks
-sandcastle
-sandcastles
-sanddune
-sanded
-sander
-sandier
-sandiest
-sanding
-sandman
-sandpaper
-sandpapering
-sandpiper
-sandpipers
-sandpit
-sands
-sandstone
-sandstones
-sandwich
-sandwiched
-sandwiches
-sandwiching
-sandy
-sane
-sanely
-saner
-sanest
-sang
-sanguine
-sanitary
-sanitation
-sanitise
-sanitised
-sanitiser
-sanitisers
-sanity
-sank
-sanserif
-sanskrit
-santiago
-sap
-sapient
-sapling
-saplings
-sapped
-sapper
-sappers
-sapphire
-sapphires
-sapping
-saps
-sarcasm
-sarcasms
-sarcastic
-sarcastically
-sarcoma
-sarcophagi
-sarcophagus
-sardine
-sardines
-sardinia
-sardonic
-sardonically
-sarge
-sari
-saris
-sarong
-sartorial
-sartorially
-sash
-sashes
-sat
-satan
-satanic
-satanically
-satanism
-satchel
-satchels
-sated
-satellite
-satellites
-satiate
-satiated
-satiation
-satin
-sating
-satins
-satinwood
-satiny
-satire
-satires
-satiric
-satirical
-satirically
-satirise
-satirised
-satirises
-satirising
-satirist
-satirists
-satisfaction
-satisfactions
-satisfactorily
-satisfactory
-satisfiable
-satisfied
-satisfies
-satisfy
-satisfying
-satisfyingly
-satrap
-satraps
-satsumas
-saturate
-saturated
-saturates
-saturating
-saturation
-saturday
-saturn
-saturnalia
-saturnine
-satyr
-satyric
-satyrs
-sauce
-saucepan
-saucepans
-saucer
-saucers
-sauces
-saucier
-sauciest
-saucily
-sauciness
-saucy
-saudi
-saudis
-sauerkraut
-sauna
-saunas
-saunter
-sauntered
-sauntering
-saunters
-sausage
-sausages
-saute
-savage
-savaged
-savagely
-savagery
-savages
-savaging
-savanna
-savannah
-savant
-savants
-save
-saved
-saveloy
-saver
-savers
-saves
-saving
-savings
-saviour
-saviours
-savour
-savoured
-savouring
-savours
-savoury
-savvy
-saw
-sawdust
-sawed
-sawing
-sawmill
-sawmills
-sawn
-saws
-sawtooth
-sawyer
-sawyers
-saxon
-saxons
-saxony
-saxophone
-saxophones
-saxophonist
-say
-saying
-sayings
-says
-scab
-scabbard
-scabbards
-scabbed
-scabby
-scabies
-scabs
-scaffold
-scaffolding
-scaffolds
-scalability
-scalable
-scalar
-scalars
-scald
-scalded
-scalding
-scalds
-scale
-scaled
-scalene
-scales
-scaling
-scallop
-scalloped
-scallops
-scalp
-scalped
-scalpel
-scalpels
-scalping
-scalps
-scaly
-scam
-scamp
-scamped
-scamper
-scampered
-scampering
-scampi
-scams
-scan
-scandal
-scandalise
-scandalised
-scandalous
-scandalously
-scandals
-scanned
-scanner
-scanners
-scanning
-scans
-scansion
-scant
-scantier
-scantiest
-scantily
-scantiness
-scanty
-scape
-scapegoat
-scapegoats
-scapula
-scar
-scarab
-scarce
-scarcely
-scarceness
-scarcer
-scarcest
-scarcities
-scarcity
-scare
-scarecrow
-scarecrows
-scared
-scaremonger
-scaremongering
-scares
-scarf
-scarfs
-scarier
-scariest
-scarified
-scarify
-scarifying
-scarily
-scaring
-scarlet
-scarlets
-scarp
-scarred
-scarring
-scars
-scarves
-scary
-scat
-scathe
-scathed
-scathing
-scathingly
-scatological
-scatter
-scattered
-scatterer
-scatterers
-scattering
-scatterings
-scatters
-scavenge
-scavenged
-scavenger
-scavengers
-scavenging
-scenario
-scene
-scenery
-scenes
-scenic
-scenically
-scent
-scented
-scenting
-scentless
-scents
-sceptic
-sceptical
-sceptically
-scepticism
-sceptics
-sceptre
-sceptred
-sceptres
-schedule
-scheduled
-scheduler
-schedulers
-schedules
-scheduling
-schema
-schemas
-schemata
-schematic
-schematically
-schematics
-scheme
-schemed
-schemer
-schemes
-scheming
-scherzi
-scherzo
-schism
-schismatic
-schismatics
-schisms
-schist
-schistosomiasis
-schists
-schizoid
-schizophrenia
-schizophrenic
-schizophrenically
-schizophrenics
-schmalz
-schnapps
-scholar
-scholarly
-scholars
-scholarship
-scholarships
-scholastic
-scholasticism
-school
-schoolboy
-schoolboys
-schoolchild
-schoolchildren
-schooldays
-schooled
-schoolgirl
-schoolgirls
-schoolhouse
-schooling
-schoolmaster
-schoolmasters
-schoolmates
-schoolmistress
-schoolroom
-schools
-schoolteacher
-schoolteachers
-schooner
-schooners
-schwa
-schwas
-sciatica
-science
-sciences
-scientific
-scientifically
-scientist
-scientists
-scifi
-scimitar
-scimitars
-scintigraphy
-scintillate
-scintillated
-scintillating
-scintillation
-scintillations
-scintillator
-scintillators
-scissor
-scissored
-scissors
-sclerosis
-scoff
-scoffed
-scoffing
-scold
-scolded
-scolder
-scolding
-scolds
-scone
-scones
-scoop
-scooped
-scooper
-scoopful
-scooping
-scoops
-scoot
-scooter
-scooters
-scooting
-scoots
-scope
-scopes
-scorch
-scorched
-scorcher
-scorches
-scorching
-score
-scoreboard
-scoreboards
-scorecard
-scorecards
-scored
-scoreless
-scoreline
-scorer
-scorers
-scores
-scoring
-scorn
-scorned
-scornful
-scornfully
-scorning
-scorns
-scorpion
-scorpions
-scot
-scotch
-scotched
-scotches
-scotfree
-scotland
-scots
-scotsman
-scottish
-scoundrel
-scoundrels
-scour
-scoured
-scourge
-scourged
-scourges
-scourging
-scouring
-scours
-scout
-scouted
-scouting
-scoutmaster
-scoutmasters
-scouts
-scowl
-scowled
-scowling
-scowls
-scrabble
-scrabbled
-scrabbling
-scram
-scramble
-scrambled
-scrambler
-scramblers
-scrambles
-scrambling
-scrams
-scrap
-scrapbook
-scrapbooks
-scrape
-scraped
-scraper
-scrapers
-scrapes
-scrapie
-scraping
-scrapings
-scrapped
-scrappier
-scrappiest
-scrapping
-scrappy
-scraps
-scrapyard
-scrapyards
-scratch
-scratched
-scratches
-scratchier
-scratchiest
-scratchiness
-scratching
-scratchings
-scratchy
-scrawl
-scrawled
-scrawling
-scrawls
-scrawnier
-scrawniest
-scrawny
-scream
-screamed
-screamer
-screamers
-screaming
-screamingly
-screams
-scree
-screech
-screeched
-screeches
-screechier
-screechiest
-screeching
-screechy
-screed
-screeds
-screen
-screened
-screening
-screenings
-screenplay
-screenplays
-screens
-screenwriter
-screw
-screwdriver
-screwdrivers
-screwed
-screwing
-screws
-screwy
-scribal
-scribble
-scribbled
-scribbler
-scribblers
-scribbles
-scribbling
-scribblings
-scribe
-scribed
-scribes
-scribing
-scrimped
-script
-scripted
-scripting
-scriptorium
-scripts
-scriptural
-scripture
-scriptures
-scriptwriter
-scriptwriters
-scriptwriting
-scroll
-scrollable
-scrolled
-scrolling
-scrolls
-scrooge
-scrooges
-scrotum
-scrub
-scrubbed
-scrubber
-scrubbers
-scrubbing
-scrubby
-scrubland
-scrubs
-scruff
-scruffier
-scruffy
-scrum
-scrumhalf
-scrummage
-scrummaging
-scrums
-scrunched
-scruple
-scruples
-scrupulous
-scrupulously
-scrupulousness
-scrutineers
-scrutinies
-scrutinise
-scrutinised
-scrutinises
-scrutinising
-scrutiny
-scuba
-scubas
-scud
-scudded
-scudding
-scuds
-scuff
-scuffed
-scuffing
-scuffle
-scuffled
-scuffles
-scuffling
-scull
-sculled
-sculler
-sculleries
-scullery
-sculling
-sculls
-sculpt
-sculpted
-sculpting
-sculptor
-sculptors
-sculptress
-sculptural
-sculpture
-sculptured
-sculptures
-scum
-scupper
-scuppered
-scurried
-scurries
-scurrilous
-scurry
-scurrying
-scurryings
-scurvy
-scuttle
-scuttled
-scuttles
-scuttling
-scythe
-scythed
-scythes
-scything
-sea
-seabed
-seabird
-seabirds
-seaboard
-seaborne
-seacow
-seacows
-seafarer
-seafarers
-seafaring
-seafood
-seafront
-seagod
-seagoing
-seagreen
-seagull
-seagulls
-seal
-sealant
-sealants
-sealed
-sealer
-sealers
-sealing
-sealion
-seals
-seam
-seamail
-seaman
-seamanship
-seamed
-seamen
-seamier
-seamless
-seamlessly
-seams
-seamstress
-seamstresses
-seamy
-seance
-seances
-seaplane
-seaplanes
-seaport
-seaports
-sear
-search
-searched
-searcher
-searchers
-searches
-searching
-searchingly
-searchlight
-searchlights
-seared
-searing
-sears
-seas
-seascape
-seascapes
-seashells
-seashore
-seashores
-seasick
-seasickness
-seaside
-season
-seasonable
-seasonably
-seasonal
-seasonality
-seasonally
-seasoned
-seasoner
-seasoning
-seasons
-seat
-seated
-seating
-seatings
-seats
-seattle
-seaward
-seawards
-seawater
-seaweed
-seaweeds
-seaworthy
-sebaceous
-sec
-secant
-secateurs
-secede
-seceded
-secedes
-seceding
-secession
-secessionist
-secessionists
-secessions
-seclude
-secluded
-seclusion
-second
-secondaries
-secondarily
-secondary
-secondbest
-secondclass
-seconded
-seconder
-seconders
-secondhand
-seconding
-secondly
-secondment
-secondments
-secondrate
-seconds
-secrecy
-secret
-secretarial
-secretariat
-secretariats
-secretaries
-secretary
-secretaryship
-secrete
-secreted
-secretes
-secreting
-secretion
-secretions
-secretive
-secretively
-secretiveness
-secretly
-secretory
-secrets
-sect
-sectarian
-sectarianism
-section
-sectional
-sectioned
-sectioning
-sections
-sector
-sectoral
-sectored
-sectors
-sects
-secular
-secularisation
-secularised
-secularism
-secularist
-secularists
-secure
-secured
-securely
-securer
-secures
-securest
-securing
-securities
-security
-sedan
-sedate
-sedated
-sedately
-sedateness
-sedater
-sedates
-sedating
-sedation
-sedative
-sedatives
-sedentary
-sedge
-sedges
-sediment
-sedimentary
-sedimentation
-sediments
-sedition
-seditious
-seduce
-seduced
-seducer
-seducers
-seduces
-seducing
-seduction
-seductions
-seductive
-seductively
-seductiveness
-sedulously
-see
-seeable
-seed
-seedbed
-seeded
-seeder
-seedier
-seediest
-seediness
-seeding
-seedless
-seedling
-seedlings
-seeds
-seedy
-seeing
-seeings
-seek
-seeker
-seekers
-seeking
-seeks
-seem
-seemed
-seeming
-seemingly
-seemlier
-seemliest
-seemly
-seems
-seen
-seep
-seepage
-seeped
-seeping
-seeps
-seer
-seers
-sees
-seesaw
-seesaws
-seethe
-seethed
-seethes
-seething
-seethrough
-segment
-segmental
-segmentation
-segmented
-segmenting
-segments
-segregate
-segregated
-segregates
-segregating
-segregation
-seine
-seisin
-seismic
-seismogram
-seismograph
-seismological
-seismologist
-seismologists
-seismology
-seismometer
-seismometers
-seize
-seized
-seizer
-seizes
-seizing
-seizure
-seizures
-seldom
-select
-selectable
-selected
-selectee
-selecting
-selection
-selections
-selective
-selectively
-selectivity
-selector
-selectors
-selects
-selenium
-selenology
-self
-selfcentred
-selfcentredness
-selfconfidence
-selfconfident
-selfconscious
-selfconsciously
-selfconsciousness
-selfcontrol
-selfcontrolled
-selfdefence
-selfdestruct
-selfdestructed
-selfdestructing
-selfdestruction
-selfdestructive
-selfdestructs
-selfdiscipline
-selfemployed
-selfesteem
-selfevident
-selfgoverning
-selfgovernment
-selfinflicted
-selfinterest
-selfish
-selfishly
-selfishness
-selfless
-selflessly
-selfmade
-selfpity
-selfportrait
-selfportraits
-selfrespect
-selfrespecting
-selfrestraint
-selfrighteous
-selfrighteously
-selfrighteousness
-selfsacrifice
-selfsacrificing
-selfsame
-selfsupporting
-selftaught
-sell
-sellable
-seller
-sellers
-selling
-sells
-selves
-semantic
-semantically
-semantics
-semaphore
-semaphores
-semaphoring
-semblance
-semblances
-semen
-semester
-semesters
-semi
-semicircle
-semicircular
-semicolon
-semicolons
-semiconducting
-semiconductor
-semiconductors
-semiconscious
-semidetached
-semifinal
-semifinalist
-semifinalists
-semifinals
-seminar
-seminaries
-seminars
-seminary
-semite
-semites
-semitic
-semitics
-sen
-senate
-senates
-senator
-senatorial
-senators
-send
-sender
-senders
-sending
-sends
-senegal
-senhor
-senhors
-senile
-senility
-senior
-seniority
-seniors
-senora
-senoritas
-sensation
-sensational
-sensationalised
-sensationalism
-sensationalist
-sensationalistic
-sensationally
-sensations
-sense
-sensed
-senseless
-senselessly
-senselessness
-senses
-sensibilities
-sensibility
-sensible
-sensibleness
-sensibly
-sensing
-sensings
-sensitisation
-sensitised
-sensitisers
-sensitive
-sensitively
-sensitiveness
-sensitivities
-sensitivity
-sensor
-sensors
-sensory
-sensual
-sensuality
-sensually
-sensuous
-sensuously
-sensuousness
-sent
-sentence
-sentenced
-sentences
-sentencing
-sentential
-sententious
-sententiously
-sentience
-sentient
-sentiment
-sentimental
-sentimentalised
-sentimentalism
-sentimentalist
-sentimentality
-sentimentally
-sentiments
-sentinel
-sentinels
-sentries
-sentry
-seoul
-separability
-separable
-separate
-separated
-separately
-separateness
-separates
-separating
-separation
-separations
-separatism
-separatist
-separatists
-separator
-separators
-sepia
-september
-septet
-septets
-septic
-septicaemia
-sepulchral
-sepulchre
-sepulchres
-sequel
-sequels
-sequence
-sequenced
-sequencer
-sequencers
-sequences
-sequencing
-sequent
-sequential
-sequentially
-sequestered
-sequestrated
-sequestration
-sequin
-sequinned
-sequins
-sequoia
-seraglio
-serai
-seraphic
-seraphically
-seraphim
-seraphs
-serenade
-serenader
-serenades
-serenading
-serenata
-serendipitous
-serendipitously
-serendipity
-serene
-serenely
-serener
-serenest
-serenity
-serf
-serfdom
-serfhood
-serfs
-serge
-sergeant
-sergeants
-serial
-serialisation
-serialisations
-serialise
-serialised
-serialising
-serially
-serials
-series
-serif
-serifed
-serifs
-serious
-seriously
-seriousness
-sermon
-sermons
-serological
-serology
-seronegative
-serotonin
-serpent
-serpentine
-serpents
-serrate
-serrated
-serried
-serum
-serums
-servant
-servants
-serve
-served
-server
-servers
-serves
-service
-serviceability
-serviceable
-serviced
-serviceman
-servicemen
-services
-servicing
-serviette
-servile
-servilely
-servility
-serving
-servings
-servitude
-sesame
-sesotho
-sessile
-session
-sessions
-set
-setback
-setbacks
-seth
-sets
-setswana
-settee
-settees
-setter
-setters
-setting
-settings
-settle
-settled
-settlement
-settlements
-settler
-settlers
-settles
-settling
-setts
-setup
-seven
-sevenfold
-sevenpence
-sevens
-seventeen
-seventeenth
-seventh
-seventies
-seventieth
-seventy
-sever
-severable
-several
-severally
-severance
-severe
-severed
-severely
-severer
-severest
-severing
-severity
-severs
-sew
-sewage
-sewed
-sewer
-sewerage
-sewerrat
-sewers
-sewing
-sewings
-sewn
-sews
-sex
-sexed
-sexes
-sexier
-sexiest
-sexily
-sexiness
-sexing
-sexism
-sexist
-sexists
-sexless
-sexologists
-sexology
-sextant
-sextants
-sextet
-sextets
-sexton
-sextons
-sextuplet
-sextuplets
-sexual
-sexualities
-sexuality
-sexually
-sexy
-shabbier
-shabbiest
-shabbily
-shabbiness
-shabby
-shack
-shackle
-shackled
-shackles
-shacks
-shade
-shaded
-shadeless
-shades
-shadier
-shadiest
-shadily
-shading
-shadings
-shadow
-shadowed
-shadowing
-shadowless
-shadows
-shadowy
-shady
-shaft
-shafted
-shafting
-shafts
-shag
-shagged
-shaggiest
-shaggy
-shags
-shah
-shahs
-shakable
-shake
-shakeable
-shakedown
-shaken
-shaker
-shakers
-shakes
-shakeup
-shakeups
-shakier
-shakiest
-shakily
-shaking
-shaky
-shale
-shall
-shallot
-shallots
-shallow
-shallower
-shallowest
-shallowly
-shallowness
-shallows
-sham
-shaman
-shamanic
-shamanism
-shamanistic
-shamans
-shamble
-shambled
-shambles
-shambling
-shame
-shamed
-shamefaced
-shamefacedly
-shameful
-shamefully
-shameless
-shamelessly
-shamelessness
-shames
-shaming
-shammed
-shamming
-shampoo
-shampooed
-shampooing
-shampoos
-shamrock
-shams
-shandy
-shank
-shanks
-shanties
-shanty
-shape
-shaped
-shapeless
-shapelier
-shapeliest
-shapely
-shaper
-shapers
-shapes
-shaping
-sharable
-shard
-shards
-share
-shareable
-shared
-shareholder
-shareholders
-shareholding
-shareholdings
-sharer
-shares
-shareware
-sharing
-shark
-sharks
-sharp
-sharpen
-sharpened
-sharpener
-sharpeners
-sharpening
-sharpens
-sharper
-sharpest
-sharply
-sharpness
-sharps
-shatter
-shattered
-shattering
-shatteringly
-shatterproof
-shatters
-shave
-shaved
-shaven
-shaver
-shavers
-shaves
-shaving
-shavings
-shaw
-shawl
-shawls
-she
-sheaf
-shear
-sheared
-shearer
-shearers
-shearing
-shears
-shearwater
-shearwaters
-sheath
-sheathe
-sheathed
-sheathing
-sheaths
-sheaves
-shed
-shedding
-sheds
-sheen
-sheep
-sheepdog
-sheepdogs
-sheepish
-sheepishly
-sheepishness
-sheepskin
-sheepskins
-sheer
-sheered
-sheerest
-sheerness
-sheet
-sheeted
-sheeting
-sheets
-sheik
-sheikh
-sheikhs
-sheiks
-shekel
-shekels
-shelf
-shell
-shellac
-shelled
-shellfire
-shellfish
-shelling
-shells
-shelter
-sheltered
-sheltering
-shelters
-shelve
-shelved
-shelves
-shelving
-shepherd
-shepherded
-shepherdess
-shepherding
-shepherds
-sherbet
-sherds
-sheriff
-sheriffs
-sherlock
-sherries
-sherry
-shetland
-shibboleth
-shibboleths
-shied
-shield
-shielded
-shielding
-shields
-shielings
-shies
-shift
-shifted
-shifter
-shifters
-shiftier
-shiftily
-shiftiness
-shifting
-shiftless
-shifts
-shifty
-shilling
-shimmer
-shimmered
-shimmering
-shimmers
-shin
-shinbone
-shindig
-shine
-shined
-shiner
-shines
-shingle
-shingles
-shinier
-shiniest
-shining
-shinned
-shinning
-shins
-shiny
-ship
-shipboard
-shipborne
-shipbuilder
-shipbuilders
-shipbuilding
-shipload
-shiploads
-shipmate
-shipmates
-shipment
-shipments
-shipowner
-shipowners
-shippable
-shipped
-shipping
-ships
-shipshape
-shipwreck
-shipwrecked
-shipwrecks
-shipwright
-shipwrights
-shipyard
-shipyards
-shire
-shires
-shirk
-shirked
-shirking
-shirt
-shirtless
-shirts
-shirtsleeves
-shiver
-shivered
-shivering
-shiveringly
-shivers
-shivery
-shoal
-shoals
-shock
-shocked
-shocker
-shockers
-shocking
-shockingly
-shocks
-shod
-shoddier
-shoddiest
-shoddily
-shoddiness
-shoddy
-shoe
-shoebox
-shoed
-shoehorn
-shoeing
-shoelace
-shoelaces
-shoeless
-shoemaker
-shoemakers
-shoes
-shoestring
-shoestrings
-shogun
-shoguns
-shone
-shoo
-shooed
-shooing
-shook
-shoot
-shooter
-shooters
-shooting
-shootings
-shoots
-shop
-shopfront
-shopfronts
-shopkeeper
-shopkeepers
-shopkeeping
-shoplift
-shoplifted
-shoplifter
-shoplifters
-shoplifting
-shopped
-shopper
-shoppers
-shopping
-shops
-shore
-shored
-shoreline
-shorelines
-shores
-shoreward
-shorewards
-shoring
-shorn
-short
-shortage
-shortages
-shortbread
-shortcircuit
-shortcircuited
-shortcircuiting
-shortcoming
-shortcomings
-shortcrust
-shortcut
-shortcuts
-shorted
-shorten
-shortened
-shortening
-shortens
-shorter
-shortest
-shortfall
-shortfalls
-shorthand
-shorting
-shortish
-shortlist
-shortlisted
-shortlisting
-shortlived
-shortly
-shortness
-shorts
-shortsighted
-shortsightedly
-shortsightedness
-shortstaffed
-shorttempered
-shortterm
-shortwinded
-shorty
-shot
-shotgun
-shotguns
-shots
-should
-shoulder
-shouldered
-shouldering
-shoulders
-shout
-shouted
-shouter
-shouters
-shouting
-shouts
-shove
-shoved
-shovel
-shovelful
-shovelled
-shoveller
-shovelling
-shovels
-shoves
-shoving
-show
-showcase
-showcases
-showcasing
-showdown
-showed
-shower
-showered
-showering
-showers
-showery
-showgirl
-showground
-showier
-showiest
-showing
-showings
-showjumpers
-showman
-showmanship
-showmen
-shown
-showoff
-showpiece
-showpieces
-showplace
-showroom
-showrooms
-shows
-showy
-shrank
-shrapnel
-shred
-shredded
-shredder
-shredders
-shredding
-shreds
-shrew
-shrewd
-shrewder
-shrewdest
-shrewdly
-shrewdness
-shrews
-shriek
-shrieked
-shrieker
-shriekers
-shrieking
-shrieks
-shrift
-shrill
-shrilled
-shrillest
-shrillness
-shrills
-shrilly
-shrimp
-shrimps
-shrine
-shrines
-shrink
-shrinkable
-shrinkage
-shrinking
-shrinkingly
-shrinks
-shrivel
-shrivelled
-shrivelling
-shrivels
-shroud
-shrouded
-shrouding
-shrouds
-shrub
-shrubberies
-shrubbery
-shrubby
-shrubs
-shrug
-shrugged
-shrugging
-shrugs
-shrunk
-shrunken
-shudder
-shuddered
-shuddering
-shudders
-shuffle
-shuffled
-shuffler
-shufflers
-shuffles
-shuffling
-shun
-shunned
-shunning
-shuns
-shunt
-shunted
-shunter
-shunters
-shunting
-shunts
-shushed
-shut
-shutdown
-shutdowns
-shuts
-shutter
-shuttered
-shuttering
-shutters
-shutting
-shuttle
-shuttlecock
-shuttlecocks
-shuttled
-shuttles
-shuttling
-shutup
-shy
-shyer
-shyest
-shying
-shyly
-shyness
-siam
-siamese
-siberia
-siberian
-sibilance
-sibilancy
-sibilant
-sibling
-siblings
-sibyl
-sic
-sicilian
-sicily
-sick
-sickbay
-sickbed
-sicken
-sickened
-sickening
-sickeningly
-sickens
-sicker
-sickest
-sickle
-sickles
-sickliest
-sickly
-sickness
-sicknesses
-sickroom
-side
-sideband
-sidebands
-sideboard
-sideboards
-sideburns
-sidecar
-sided
-sidekick
-sidelight
-sidelights
-sideline
-sidelines
-sidelong
-sider
-sidereal
-sides
-sideshow
-sideshows
-sidestep
-sidestepped
-sidestepping
-sidesteps
-sideswipes
-sidetrack
-sidetracked
-sidetracking
-sidewalk
-sidewards
-sideways
-sidewinders
-siding
-sidings
-sidle
-sidled
-sidling
-siege
-sieges
-sienna
-sierra
-siesta
-siestas
-sieve
-sieved
-sieves
-sieving
-sift
-sifted
-sifter
-sifters
-sifting
-siftings
-sifts
-sigh
-sighed
-sighing
-sighs
-sight
-sighted
-sightedness
-sighting
-sightings
-sightless
-sightlessly
-sightly
-sights
-sightsee
-sightseeing
-sightseers
-sigma
-sigmoid
-sign
-signal
-signalled
-signaller
-signallers
-signalling
-signally
-signalman
-signalmen
-signals
-signatories
-signatory
-signature
-signatures
-signboards
-signed
-signer
-signers
-signet
-significance
-significances
-significant
-significantly
-signification
-significations
-signified
-signifier
-signifies
-signify
-signifying
-signing
-signings
-signor
-signora
-signors
-signpost
-signposted
-signposting
-signposts
-signs
-signwriter
-silage
-silence
-silenced
-silencer
-silencers
-silences
-silencing
-silent
-silently
-silhouette
-silhouetted
-silhouettes
-silica
-silicate
-silicates
-silicon
-silicone
-silicosis
-silk
-silken
-silkier
-silkiest
-silkily
-silkiness
-silklike
-silks
-silkworm
-silkworms
-silky
-sillier
-silliest
-silliness
-silly
-silo
-silt
-silted
-silting
-silts
-siltstone
-silty
-silver
-silvered
-silvering
-silvers
-silversmith
-silversmiths
-silverware
-silvery
-simeon
-similar
-similarities
-similarity
-similarly
-simile
-similes
-similitude
-simmer
-simmered
-simmering
-simmers
-simper
-simpered
-simpering
-simpers
-simple
-simpleminded
-simpler
-simplest
-simpleton
-simpletons
-simplex
-simplexes
-simplicities
-simplicity
-simplification
-simplifications
-simplified
-simplifier
-simplifies
-simplify
-simplifying
-simplism
-simplistic
-simplistically
-simply
-simulacrum
-simulate
-simulated
-simulates
-simulating
-simulation
-simulations
-simulator
-simulators
-simulcasts
-simultaneity
-simultaneous
-simultaneously
-sin
-sinai
-since
-sincere
-sincerely
-sincerest
-sincerity
-sine
-sinecure
-sinecures
-sinecurist
-sines
-sinew
-sinews
-sinewy
-sinful
-sinfully
-sinfulness
-sing
-singable
-singalong
-singe
-singed
-singeing
-singer
-singers
-singes
-singing
-single
-singlehanded
-singlehandedly
-singleminded
-singlemindedly
-singlemindedness
-singleness
-singles
-singly
-sings
-singsong
-singular
-singularisation
-singularities
-singularity
-singularly
-singulars
-sinister
-sinisterly
-sinistral
-sink
-sinkable
-sinker
-sinkers
-sinking
-sinks
-sinless
-sinned
-sinner
-sinners
-sinning
-sins
-sinter
-sinters
-sinuous
-sinuously
-sinus
-sinuses
-sinusitis
-sinusoid
-sinusoidal
-sinusoidally
-sip
-siphon
-siphoned
-siphoning
-siphons
-sipped
-sipper
-sippers
-sipping
-sips
-sir
-sire
-sired
-siren
-sirens
-sires
-sirius
-sirloin
-sirloins
-sirs
-sis
-sisal
-sissies
-sissy
-sister
-sisterhood
-sisterinlaw
-sisterly
-sisters
-sistersinlaw
-sit
-sitar
-sitcom
-sitcoms
-site
-sited
-sites
-siting
-sitings
-sits
-sitter
-sitters
-sitting
-sittings
-situate
-situated
-situating
-situation
-situational
-situationally
-situationist
-situations
-six
-sixes
-sixfold
-sixpence
-sixteen
-sixteenth
-sixth
-sixths
-sixties
-sixtieth
-sixty
-size
-sizeable
-sized
-sizes
-sizing
-sizzle
-sizzled
-sizzles
-sizzling
-sjambok
-skate
-skateboard
-skateboards
-skated
-skater
-skaters
-skates
-skating
-skein
-skeletal
-skeleton
-skeletons
-skeptic
-skerries
-sketch
-sketchbook
-sketchbooks
-sketched
-sketcher
-sketches
-sketchier
-sketchiest
-sketchily
-sketching
-sketchpad
-sketchy
-skew
-skewed
-skewer
-skewered
-skewers
-skewness
-skews
-ski
-skid
-skidded
-skidding
-skids
-skied
-skier
-skiers
-skies
-skiing
-skilful
-skilfully
-skill
-skilled
-skillet
-skillful
-skills
-skim
-skimmed
-skimmer
-skimming
-skimp
-skimped
-skimping
-skimpy
-skims
-skin
-skincare
-skindeep
-skinflint
-skinhead
-skinheads
-skinless
-skinned
-skinner
-skinners
-skinnier
-skinniest
-skinning
-skinny
-skins
-skintight
-skip
-skipped
-skipper
-skippered
-skippering
-skippers
-skipping
-skips
-skirl
-skirmish
-skirmishes
-skirmishing
-skirt
-skirted
-skirting
-skirts
-skis
-skit
-skits
-skittish
-skittishly
-skittishness
-skittle
-skittles
-skua
-skuas
-skulduggery
-skulk
-skulked
-skulking
-skulks
-skull
-skullcap
-skullduggery
-skulls
-skunk
-skunks
-sky
-skydive
-skydived
-skydiver
-skydivers
-skydives
-skydiving
-skyhigh
-skylark
-skylarks
-skylight
-skylights
-skyline
-skylines
-skyscape
-skyscraper
-skyscrapers
-skyward
-skywards
-slab
-slabs
-slack
-slacked
-slacken
-slackened
-slackening
-slackens
-slacker
-slackers
-slackest
-slacking
-slackly
-slackness
-slacks
-slag
-slags
-slain
-slake
-slaked
-slalom
-slaloms
-slam
-slammed
-slamming
-slams
-slander
-slandered
-slanderer
-slanderers
-slandering
-slanderous
-slanders
-slang
-slanging
-slant
-slanted
-slanting
-slants
-slantwise
-slap
-slapdash
-slapped
-slapper
-slapping
-slaps
-slapstick
-slash
-slashed
-slasher
-slashes
-slashing
-slat
-slate
-slated
-slater
-slaters
-slates
-slating
-slats
-slatted
-slaughter
-slaughtered
-slaughterer
-slaughterhouse
-slaughterhouses
-slaughtering
-slaughterings
-slaughters
-slav
-slave
-slaved
-slavedriver
-slavedrivers
-slaver
-slavered
-slavering
-slavers
-slavery
-slaves
-slavic
-slaving
-slavish
-slavishly
-slavs
-slay
-slayed
-slayer
-slayers
-slaying
-slays
-sleaze
-sleazier
-sleaziest
-sleazy
-sled
-sledding
-sledge
-sledgehammer
-sledgehammers
-sledges
-sledging
-sleds
-sleek
-sleeker
-sleekly
-sleekness
-sleeks
-sleep
-sleeper
-sleepers
-sleepier
-sleepiest
-sleepily
-sleepiness
-sleeping
-sleepless
-sleeplessness
-sleeps
-sleepwalk
-sleepwalker
-sleepwalking
-sleepwalks
-sleepy
-sleet
-sleets
-sleeve
-sleeved
-sleeveless
-sleeves
-sleigh
-sleighs
-sleight
-sleights
-slender
-slenderest
-slenderly
-slenderness
-slept
-sleuth
-sleuths
-slew
-slewed
-slewing
-slice
-sliced
-slicer
-slicers
-slices
-slicing
-slicings
-slick
-slicked
-slicker
-slickest
-slickly
-slickness
-slicks
-slid
-slide
-slided
-slider
-sliders
-slides
-sliding
-slight
-slighted
-slighter
-slightest
-slighting
-slightingly
-slightly
-slights
-slily
-slim
-slime
-slimes
-slimier
-slimiest
-slimline
-slimly
-slimmed
-slimmer
-slimmers
-slimmest
-slimming
-slimness
-slims
-slimy
-sling
-slinging
-slings
-slingshot
-slink
-slinking
-slinky
-slip
-slippage
-slipped
-slipper
-slipperiness
-slippers
-slippery
-slipping
-slips
-slipshod
-slipstream
-slipup
-slipway
-slit
-slither
-slithered
-slithering
-slithers
-slithery
-slits
-slitting
-sliver
-slivers
-slob
-slobber
-slobbering
-slobbers
-slobbery
-slobs
-slog
-slogan
-slogans
-slogged
-slogging
-slogs
-sloop
-slop
-slope
-sloped
-slopes
-sloping
-slopped
-sloppier
-sloppiest
-sloppily
-sloppiness
-slopping
-sloppy
-slops
-slosh
-sloshed
-sloshing
-slot
-sloth
-slothful
-sloths
-slots
-slotted
-slotting
-slouch
-slouched
-slouches
-slouching
-slough
-sloughed
-sloughing
-slovak
-slovenia
-slovenliness
-slovenly
-slow
-slowcoaches
-slowdown
-slowed
-slower
-slowest
-slowing
-slowish
-slowly
-slowness
-slowpoke
-slows
-sludge
-sludgy
-slug
-sluggard
-sluggards
-slugged
-slugging
-sluggish
-sluggishly
-sluggishness
-slugs
-sluice
-sluiced
-sluices
-sluicing
-slum
-slumber
-slumbered
-slumbering
-slumbers
-slumming
-slump
-slumped
-slumping
-slumps
-slums
-slung
-slunk
-slur
-slurp
-slurped
-slurping
-slurps
-slurred
-slurring
-slurry
-slurs
-slush
-slushed
-slushes
-slushier
-slushiest
-slushy
-slut
-sluts
-sly
-slyer
-slyly
-slyness
-smack
-smacked
-smacker
-smacking
-smacks
-small
-smaller
-smallest
-smallholder
-smallholders
-smallholding
-smallholdings
-smallish
-smallminded
-smallmindedness
-smallness
-smallpox
-smalls
-smallscale
-smalltalk
-smalltime
-smalltown
-smart
-smarted
-smarten
-smartened
-smartening
-smarter
-smartest
-smarting
-smartly
-smartness
-smarts
-smash
-smashed
-smasher
-smashes
-smashing
-smattering
-smatterings
-smear
-smeared
-smearing
-smears
-smegma
-smell
-smellable
-smelled
-smellier
-smelliest
-smelling
-smells
-smelly
-smelt
-smelted
-smelter
-smelters
-smelting
-smidgeon
-smile
-smiled
-smiler
-smilers
-smiles
-smiling
-smilingly
-smirk
-smirked
-smirking
-smirks
-smite
-smith
-smithereens
-smiths
-smithy
-smiting
-smitten
-smock
-smocks
-smog
-smoggy
-smogs
-smoke
-smoked
-smokeless
-smoker
-smokers
-smokes
-smokescreen
-smokestack
-smokestacks
-smokier
-smokiest
-smokiness
-smoking
-smoky
-smolder
-smooch
-smooth
-smoothed
-smoother
-smoothest
-smoothing
-smoothly
-smoothness
-smooths
-smoothtongued
-smote
-smother
-smothered
-smothering
-smothers
-smoulder
-smouldered
-smouldering
-smoulders
-smudge
-smudged
-smudges
-smudgier
-smudgiest
-smudging
-smudgy
-smug
-smuggle
-smuggled
-smuggler
-smugglers
-smuggles
-smuggling
-smugly
-smugness
-smut
-smuts
-smutty
-snack
-snacks
-snaffle
-snag
-snagged
-snagging
-snags
-snail
-snails
-snake
-snaked
-snakepit
-snakes
-snakeskin
-snaking
-snaky
-snap
-snapped
-snapper
-snappier
-snappily
-snapping
-snappy
-snaps
-snapshot
-snapshots
-snare
-snared
-snares
-snaring
-snarl
-snarled
-snarling
-snarls
-snatch
-snatched
-snatcher
-snatchers
-snatches
-snatching
-sneak
-sneaked
-sneakers
-sneakier
-sneakiest
-sneakily
-sneaking
-sneaks
-sneaky
-sneer
-sneered
-sneering
-sneeringly
-sneers
-sneeze
-sneezed
-sneezes
-sneezing
-snick
-snide
-sniff
-sniffed
-sniffer
-sniffers
-sniffing
-sniffle
-sniffles
-sniffling
-sniffly
-sniffs
-snifter
-snigger
-sniggered
-sniggering
-sniggers
-snip
-snipe
-sniper
-snipers
-snipes
-sniping
-snipped
-snippet
-snippets
-snipping
-snips
-snits
-snivel
-snivelling
-snob
-snobbery
-snobbish
-snobbishly
-snobbishness
-snobs
-snoek
-snooker
-snoop
-snooped
-snooper
-snoopers
-snooping
-snoops
-snoopy
-snooze
-snoozed
-snoozes
-snoozing
-snore
-snored
-snorer
-snorers
-snores
-snoring
-snorkel
-snorkelling
-snorkels
-snort
-snorted
-snorting
-snorts
-snotty
-snout
-snouts
-snow
-snowball
-snowballed
-snowballing
-snowballs
-snowbound
-snowcapped
-snowdrift
-snowdrifts
-snowdrop
-snowdrops
-snowed
-snowfall
-snowfalls
-snowfields
-snowflake
-snowflakes
-snowier
-snowiest
-snowing
-snowline
-snowman
-snowmen
-snowplough
-snowploughs
-snows
-snowstorm
-snowstorms
-snowwhite
-snowy
-snub
-snubbed
-snubbing
-snubnosed
-snubs
-snuff
-snuffbox
-snuffed
-snuffing
-snuffle
-snuffled
-snuffles
-snuffling
-snuffs
-snug
-snugger
-snuggle
-snuggled
-snuggles
-snuggling
-snugly
-snugness
-so
-soak
-soaked
-soaker
-soakers
-soaking
-soakings
-soaks
-soandso
-soap
-soapbox
-soaped
-soapier
-soapiest
-soaping
-soaps
-soapy
-soar
-soared
-soaring
-soaringly
-soars
-sob
-sobbed
-sobbing
-sobbings
-sober
-sobered
-soberer
-sobering
-soberly
-sobers
-sobriety
-sobriquet
-sobs
-socalled
-soccer
-sociability
-sociable
-sociably
-social
-socialisation
-socialise
-socialised
-socialising
-socialism
-socialist
-socialistic
-socialists
-socialite
-socially
-socials
-societal
-societies
-society
-sociobiology
-sociocultural
-socioeconomic
-sociolinguistic
-sociolinguistics
-sociolinguists
-sociological
-sociologically
-sociologist
-sociologists
-sociology
-sociopolitical
-sock
-socked
-socket
-sockets
-socking
-socks
-socrates
-sod
-soda
-sodas
-sodded
-sodden
-soddy
-sodium
-sodom
-sodomise
-sodomised
-sodomising
-sodomite
-sodomites
-sodomy
-sods
-sofa
-sofas
-soffit
-soft
-softball
-softboiled
-soften
-softened
-softener
-softeners
-softening
-softens
-softer
-softest
-softhearted
-softie
-softish
-softly
-softness
-softspoken
-software
-softwood
-softy
-soggier
-soggiest
-soggy
-soh
-soil
-soiled
-soiling
-soilings
-soils
-soiree
-sojourn
-sojourned
-sojourner
-sojourners
-sojourning
-sojourns
-solace
-solaces
-solanum
-solar
-solaria
-solarium
-sold
-solder
-soldered
-soldering
-solders
-soldier
-soldiered
-soldiering
-soldierly
-soldiers
-soldiery
-sole
-solecism
-solecisms
-solely
-solemn
-solemnities
-solemnity
-solemnly
-solenoid
-solenoidal
-solenoids
-soler
-soles
-solfa
-solicit
-solicitation
-solicitations
-solicited
-soliciting
-solicitor
-solicitors
-solicitous
-solicitously
-solicits
-solicitude
-solid
-solidarity
-solidification
-solidified
-solidifies
-solidify
-solidifying
-solidity
-solidly
-solidness
-solids
-solitaire
-solitary
-solitude
-solitudes
-solo
-soloing
-soloist
-soloists
-solstice
-solstices
-solubility
-soluble
-solute
-solutes
-solution
-solutions
-solvable
-solve
-solved
-solvency
-solvent
-solvents
-solver
-solvers
-solves
-solving
-soma
-somali
-somalia
-somas
-somatic
-sombre
-sombrely
-sombreness
-sombrero
-some
-somebody
-someday
-somehow
-someone
-somersault
-somersaulted
-somersaulting
-somersaults
-something
-sometime
-sometimes
-someway
-someways
-somewhat
-somewhere
-somnambulist
-somnolence
-somnolent
-son
-sonar
-sonars
-sonata
-sonatas
-sones
-song
-songbird
-songbirds
-songbook
-songs
-songsters
-songwriter
-songwriters
-songwriting
-sonic
-sonically
-soninlaw
-sonnet
-sonnets
-sonny
-sonora
-sonorities
-sonority
-sonorous
-sonorously
-sonorousness
-sons
-sonsinlaw
-soon
-sooner
-soonest
-soonish
-soot
-soothe
-soothed
-soothers
-soothes
-soothing
-soothingly
-soothsayer
-soothsayers
-soothsaying
-sootier
-soots
-sooty
-sop
-sophist
-sophisticate
-sophisticated
-sophisticates
-sophistication
-sophistry
-sophists
-soporific
-sopping
-soppy
-soprano
-sorbet
-sorbets
-sorcerer
-sorcerers
-sorceress
-sorcery
-sordid
-sordidly
-sordidness
-sore
-sorely
-soreness
-sores
-sorghum
-sorority
-sorrel
-sorrier
-sorriest
-sorrow
-sorrowed
-sorrowful
-sorrowfully
-sorrowing
-sorrows
-sorry
-sort
-sortable
-sorted
-sorter
-sorters
-sortie
-sorties
-sorting
-sorts
-sos
-soso
-sot
-sotho
-soubriquet
-soudan
-souffle
-sought
-soughtafter
-souk
-souks
-soul
-souldestroying
-souled
-soulful
-soulfully
-soulless
-souls
-soulsearching
-sound
-soundcheck
-sounded
-sounder
-soundest
-sounding
-soundings
-soundless
-soundlessly
-soundly
-soundness
-soundproof
-soundproofed
-soundproofing
-sounds
-soundtrack
-soundtracks
-soup
-soups
-soupy
-sour
-source
-sourced
-sourceless
-sources
-sourcing
-soured
-sourest
-souring
-sourly
-sourness
-sours
-soused
-south
-southbound
-southerly
-southern
-southerner
-southerners
-southernmost
-southward
-southwards
-souvenir
-souvenirs
-sovereign
-sovereigns
-sovereignty
-soviet
-sow
-sowed
-sower
-sowers
-soweto
-sowing
-sown
-sows
-soy
-soya
-soybean
-soybeans
-spa
-space
-spaceage
-spacecraft
-spaced
-spaceflight
-spaceman
-spacemen
-spacer
-spacers
-spaces
-spaceship
-spaceships
-spacesuit
-spacesuits
-spacey
-spacial
-spacing
-spacings
-spacious
-spaciously
-spaciousness
-spade
-spaded
-spades
-spadework
-spaghetti
-spain
-spam
-span
-spandrels
-spangle
-spangled
-spangles
-spaniel
-spaniels
-spanish
-spank
-spanked
-spanker
-spanking
-spankings
-spanks
-spanned
-spanner
-spanners
-spanning
-spans
-spar
-spare
-spared
-sparely
-spares
-sparetime
-sparing
-sparingly
-spark
-sparked
-sparking
-sparkle
-sparkled
-sparkler
-sparklers
-sparkles
-sparkling
-sparklingly
-sparkly
-sparks
-sparred
-sparring
-sparrow
-sparrowhawk
-sparrows
-spars
-sparse
-sparsely
-sparseness
-sparser
-sparsest
-sparsity
-sparta
-spartan
-spartans
-spas
-spasm
-spasmodic
-spasmodically
-spasms
-spastic
-spastics
-spat
-spate
-spatial
-spatially
-spats
-spatter
-spattered
-spattering
-spatters
-spatula
-spatulas
-spawn
-spawned
-spawning
-spawns
-spay
-spayed
-spaying
-spays
-speak
-speakable
-speaker
-speakers
-speaking
-speaks
-spear
-speared
-spearhead
-spearheaded
-spearheading
-spearheads
-spearing
-spears
-spec
-special
-specialisation
-specialisations
-specialise
-specialised
-specialises
-specialising
-specialism
-specialisms
-specialist
-specialists
-specialities
-speciality
-specially
-specialness
-specials
-specialty
-speciation
-species
-specifiable
-specifiably
-specific
-specifically
-specification
-specifications
-specificities
-specificity
-specificness
-specifics
-specified
-specifier
-specifiers
-specifies
-specify
-specifying
-specimen
-specimens
-specious
-speck
-speckle
-speckled
-speckles
-specks
-specs
-spectacle
-spectacles
-spectacular
-spectacularly
-spectaculars
-spectator
-spectators
-spectra
-spectral
-spectre
-spectres
-spectrogram
-spectrograph
-spectrometer
-spectrometers
-spectrometric
-spectrometry
-spectrophotometer
-spectrophotometers
-spectrophotometry
-spectroscope
-spectroscopes
-spectroscopic
-spectroscopically
-spectroscopy
-spectrum
-specular
-speculate
-speculated
-speculates
-speculating
-speculation
-speculations
-speculative
-speculatively
-speculator
-speculators
-speculum
-sped
-speech
-speeches
-speechifying
-speechless
-speechlessly
-speed
-speedboat
-speedboats
-speedcop
-speeded
-speedier
-speediest
-speedily
-speeding
-speedometer
-speedometers
-speeds
-speedup
-speedway
-speedwell
-speedy
-spell
-spellable
-spellbinder
-spellbinding
-spellbound
-spelled
-speller
-spellers
-spelling
-spellings
-spells
-spelt
-spencer
-spend
-spender
-spenders
-spending
-spends
-spendthrift
-spent
-spermatozoa
-spew
-spewed
-spewing
-spews
-sphagnum
-sphere
-spheres
-spheric
-spherical
-spherically
-spheroid
-spheroidal
-sphincter
-sphincters
-sphinx
-sphygmomanometer
-spice
-spiced
-spicer
-spicery
-spices
-spicier
-spicily
-spicing
-spicy
-spider
-spiders
-spidery
-spied
-spies
-spigot
-spike
-spiked
-spikes
-spikier
-spikiest
-spiking
-spiky
-spill
-spillage
-spillages
-spilled
-spiller
-spilling
-spills
-spilt
-spin
-spinach
-spinal
-spindle
-spindles
-spindly
-spindrier
-spindriers
-spindrift
-spindry
-spine
-spinechilling
-spineless
-spines
-spinet
-spinnaker
-spinner
-spinners
-spinney
-spinning
-spinoff
-spinoffs
-spins
-spinster
-spinsterhood
-spinsters
-spiny
-spiral
-spiralled
-spiralling
-spirally
-spirals
-spirant
-spirants
-spire
-spires
-spirit
-spirited
-spiritedl
-spiritedly
-spiritless
-spirits
-spiritual
-spiritualised
-spiritualism
-spiritualist
-spiritualists
-spirituality
-spiritually
-spirituals
-spit
-spite
-spiteful
-spitefully
-spitfire
-spitfires
-spits
-spitting
-spittle
-spittoon
-spittoons
-splash
-splashdown
-splashed
-splashes
-splashing
-splashy
-splat
-splatter
-splattered
-splattering
-splayed
-splaying
-spleen
-spleens
-splendid
-splendidly
-splendour
-splendours
-splenetic
-splice
-spliced
-splicer
-splicers
-splices
-splicing
-spline
-splines
-splint
-splinted
-splinter
-splintered
-splintering
-splinters
-splints
-split
-splits
-splittable
-splitter
-splitters
-splitting
-splittings
-splodge
-splodges
-splotches
-splurge
-splutter
-spluttered
-spluttering
-splutters
-spoil
-spoilage
-spoiled
-spoiler
-spoilers
-spoiling
-spoils
-spoilsport
-spoilt
-spoke
-spoken
-spokes
-spokeshave
-spokeshaves
-spokesman
-spokesmen
-spokespeople
-spokesperson
-spokespersons
-spokeswoman
-spokeswomen
-sponge
-sponged
-sponger
-sponges
-spongier
-spongiest
-sponginess
-sponging
-spongy
-sponsor
-sponsored
-sponsoring
-sponsors
-sponsorship
-sponsorships
-spontaneity
-spontaneous
-spontaneously
-spoof
-spoofs
-spook
-spooked
-spooking
-spooks
-spooky
-spool
-spooled
-spooling
-spools
-spoon
-spooned
-spoonful
-spoonfuls
-spooning
-spoons
-spoor
-sporadic
-sporadically
-spore
-spores
-sporran
-sporrans
-sport
-sported
-sporting
-sportingly
-sportive
-sports
-sportsman
-sportsmanship
-sportsmen
-sportswear
-sporty
-spot
-spotless
-spotlessly
-spotlessness
-spotlight
-spotlighting
-spotlights
-spotlit
-spoton
-spots
-spotted
-spotter
-spotters
-spottier
-spottiest
-spotting
-spotty
-spouse
-spouses
-spout
-spouted
-spouting
-spouts
-sprain
-sprained
-spraining
-sprains
-sprang
-sprat
-sprats
-sprawl
-sprawled
-sprawling
-sprawls
-spray
-sprayed
-sprayer
-sprayers
-spraying
-sprays
-spread
-spreadeagled
-spreaders
-spreading
-spreads
-spreadsheet
-spreadsheets
-spree
-spreeing
-sprig
-sprightlier
-sprightliest
-sprightliness
-sprightly
-sprigs
-spring
-springboard
-springboards
-springbok
-springboks
-springclean
-springcleaned
-springer
-springier
-springiest
-springing
-springs
-springtime
-springy
-sprinkle
-sprinkled
-sprinkler
-sprinklers
-sprinkles
-sprinkling
-sprint
-sprinted
-sprinter
-sprinters
-sprinting
-sprints
-sprite
-sprites
-sprocket
-sprockets
-sprout
-sprouted
-sprouting
-sprouts
-spruce
-spruced
-sprucing
-sprung
-spry
-spud
-spume
-spun
-spunky
-spur
-spurge
-spurges
-spurious
-spuriously
-spurn
-spurned
-spurning
-spurns
-spurred
-spurring
-spurs
-spurt
-spurted
-spurting
-spurts
-sputnik
-sputniks
-sputter
-sputtered
-sputtering
-sputum
-spy
-spyglass
-spyhole
-spying
-spyings
-squabble
-squabbled
-squabbles
-squabbling
-squad
-squadron
-squadrons
-squads
-squalid
-squall
-squalling
-squalls
-squally
-squalor
-squander
-squandered
-squandering
-squanders
-square
-squared
-squarely
-squareness
-squarer
-squares
-squaring
-squarish
-squash
-squashed
-squashes
-squashier
-squashiest
-squashing
-squashy
-squat
-squats
-squatted
-squatter
-squatters
-squatting
-squaw
-squawk
-squawked
-squawking
-squawks
-squeak
-squeaked
-squeaker
-squeakier
-squeakiest
-squeaking
-squeaks
-squeaky
-squeal
-squealed
-squealer
-squealing
-squeals
-squeamish
-squeamishly
-squeamishness
-squeegee
-squeeze
-squeezed
-squeezer
-squeezes
-squeezing
-squeezy
-squelch
-squelched
-squelching
-squelchy
-squib
-squibs
-squid
-squids
-squiggle
-squiggles
-squint
-squinted
-squinting
-squints
-squire
-squirearchy
-squires
-squirm
-squirmed
-squirming
-squirms
-squirrel
-squirrelled
-squirrels
-squirt
-squirted
-squirting
-squirts
-srilanka
-stab
-stabbed
-stabber
-stabbing
-stabbings
-stabilisation
-stabilise
-stabilised
-stabiliser
-stabilisers
-stabilises
-stabilising
-stability
-stable
-stabled
-stablemate
-stabler
-stables
-stabling
-stably
-stabs
-staccato
-stack
-stacked
-stacker
-stacking
-stacks
-stadia
-stadium
-stadiums
-staff
-staffed
-staffing
-staffroom
-staffs
-stag
-stage
-stagecoach
-stagecoaches
-staged
-stagehands
-stager
-stages
-stagey
-stagflation
-stagger
-staggered
-staggering
-staggeringly
-staggers
-staging
-stagings
-stagnancy
-stagnant
-stagnate
-stagnated
-stagnates
-stagnating
-stagnation
-stags
-staid
-staidness
-stain
-stained
-stainer
-staining
-stainless
-stains
-stair
-staircase
-staircases
-stairhead
-stairs
-stairway
-stairways
-stairwell
-stairwells
-stake
-staked
-stakeholder
-stakeholders
-stakes
-staking
-stalactite
-stalactites
-stalagmite
-stalagmites
-stale
-stalemate
-stalemated
-stalemates
-staleness
-stalin
-stalk
-stalked
-stalker
-stalkers
-stalking
-stalks
-stall
-stalled
-stallholders
-stalling
-stallion
-stallions
-stalls
-stalwart
-stalwarts
-stamen
-stamens
-stamina
-stammer
-stammered
-stammering
-stammers
-stamp
-stamped
-stampede
-stampeded
-stampeding
-stamper
-stampers
-stamping
-stampings
-stamps
-stance
-stances
-stanchion
-stanchions
-stand
-standard
-standardisation
-standardisations
-standardise
-standardised
-standardises
-standardising
-standards
-standby
-standing
-standings
-standpoint
-standpoints
-stands
-standstill
-stank
-stanza
-stanzas
-stapes
-staphylococcus
-staple
-stapled
-stapler
-staplers
-staples
-stapling
-star
-starboard
-starch
-starched
-starches
-starchier
-starchiest
-starchy
-stardom
-stardust
-stare
-stared
-starer
-stares
-starfish
-stargaze
-stargazer
-stargazers
-stargazing
-staring
-stark
-starker
-starkest
-starkly
-starkness
-starless
-starlet
-starlets
-starlight
-starlike
-starling
-starlings
-starlit
-starred
-starrier
-starriest
-starring
-starry
-starryeyed
-stars
-starship
-starspangled
-starstruck
-starstudded
-start
-started
-starter
-starters
-starting
-startle
-startled
-startles
-startling
-startlingly
-starts
-startup
-startups
-starvation
-starve
-starved
-starves
-starving
-stashed
-stashes
-stashing
-stasis
-state
-statecraft
-stated
-statehood
-stateless
-stateliest
-stateliness
-stately
-statement
-statements
-stateoftheart
-staterooms
-states
-statesman
-statesmanlike
-statesmanship
-statesmen
-static
-statical
-statically
-statics
-stating
-station
-stationary
-stationed
-stationer
-stationers
-stationery
-stationing
-stationmaster
-stations
-statistic
-statistical
-statistically
-statistician
-statisticians
-statistics
-stator
-stators
-statuary
-statue
-statues
-statuesque
-statuette
-statuettes
-stature
-statures
-status
-statuses
-statute
-statutes
-statutorily
-statutory
-staunch
-staunchest
-staunching
-staunchly
-staunchness
-stave
-staved
-staves
-staving
-stay
-stayed
-stayers
-staying
-stays
-stead
-steadfast
-steadfastly
-steadfastness
-steadied
-steadier
-steadiest
-steadily
-steadiness
-steady
-steadygoing
-steadying
-steak
-steaks
-steal
-stealer
-stealers
-stealing
-steals
-stealth
-stealthier
-stealthiest
-stealthily
-stealthy
-steam
-steamboat
-steamboats
-steamed
-steamer
-steamers
-steamier
-steamiest
-steaming
-steamroller
-steamrollers
-steams
-steamship
-steamships
-steamy
-steed
-steeds
-steel
-steelclad
-steeled
-steeling
-steels
-steelwork
-steelworker
-steelworkers
-steelworks
-steely
-steep
-steeped
-steepen
-steepened
-steepening
-steepens
-steeper
-steepest
-steeping
-steeple
-steeplechase
-steeplechaser
-steeplechasers
-steeplechasing
-steepled
-steeplejack
-steeples
-steeply
-steepness
-steeps
-steer
-steerable
-steerage
-steered
-steering
-steers
-stegosaurus
-stellar
-stellated
-stem
-stemmed
-stemming
-stems
-stench
-stenches
-stencil
-stencilled
-stencils
-stenographer
-stenographers
-stenographic
-stenography
-stenosis
-stentor
-stentorian
-step
-stepbrother
-stepchildren
-stepdaughter
-stepfather
-stepladder
-stepmother
-stepparents
-steppe
-stepped
-steppes
-stepping
-steps
-stepsister
-stepson
-stepsons
-stepwise
-steradians
-stereo
-stereographic
-stereophonic
-stereos
-stereoscopic
-stereoscopically
-stereoscopy
-stereotype
-stereotyped
-stereotypes
-stereotypical
-stereotypically
-stereotyping
-sterile
-sterilisation
-sterilisations
-sterilise
-sterilised
-steriliser
-sterilising
-sterility
-sterling
-stern
-sterner
-sternest
-sternly
-sternness
-sterns
-sternum
-steroid
-steroids
-stet
-stethoscope
-stevedore
-stew
-steward
-stewardess
-stewardesses
-stewards
-stewardship
-stewed
-stewing
-stews
-stick
-sticker
-stickers
-stickiest
-stickily
-stickiness
-sticking
-stickleback
-sticklebacks
-stickler
-sticks
-sticky
-sties
-stiff
-stiffen
-stiffened
-stiffener
-stiffening
-stiffens
-stiffer
-stiffest
-stiffly
-stiffnecked
-stiffness
-stifle
-stifled
-stifles
-stifling
-stiflingly
-stigma
-stigmas
-stigmata
-stigmatisation
-stigmatise
-stigmatised
-stigmatising
-stiletto
-still
-stillbirths
-stillborn
-stilled
-stiller
-stilling
-stillness
-stills
-stilt
-stilted
-stilts
-stimulant
-stimulants
-stimulate
-stimulated
-stimulates
-stimulating
-stimulation
-stimulator
-stimulatory
-stimuli
-stimulus
-sting
-stinged
-stinger
-stingers
-stingier
-stingily
-stinging
-stingray
-stings
-stingy
-stink
-stinker
-stinkers
-stinking
-stinks
-stinky
-stint
-stinted
-stints
-stipel
-stipend
-stipendiary
-stipends
-stippled
-stipples
-stipulate
-stipulated
-stipulates
-stipulating
-stipulation
-stipulations
-stir
-stirfried
-stirfry
-stirred
-stirrer
-stirrers
-stirring
-stirrings
-stirrup
-stirrups
-stirs
-stitch
-stitched
-stitcher
-stitches
-stitching
-stoa
-stoat
-stoats
-stochastic
-stock
-stockade
-stockbroker
-stockbrokers
-stockbroking
-stockcar
-stocked
-stockholders
-stockholding
-stockier
-stockily
-stocking
-stockinged
-stockings
-stockist
-stockists
-stockpile
-stockpiled
-stockpiles
-stockpiling
-stockroom
-stocks
-stocktaking
-stocky
-stodge
-stodgier
-stodgiest
-stodgy
-stoep
-stoic
-stoical
-stoically
-stoicism
-stoics
-stoke
-stoked
-stoker
-stokers
-stokes
-stoking
-stole
-stolen
-stolid
-stolidity
-stolidly
-stoma
-stomach
-stomachache
-stomachs
-stomata
-stomp
-stomped
-stomping
-stomps
-stone
-stonecold
-stoned
-stoneless
-stonemason
-stonemasons
-stones
-stonewalled
-stoneware
-stonework
-stonier
-stoniest
-stonily
-stoning
-stony
-stood
-stooge
-stooges
-stool
-stoolpigeon
-stools
-stoop
-stooped
-stooping
-stoops
-stop
-stopcock
-stopgap
-stopover
-stoppable
-stoppage
-stoppages
-stopped
-stopper
-stoppered
-stoppers
-stopping
-stops
-stopwatch
-storage
-storages
-store
-stored
-storehouse
-storehouses
-storekeeper
-storekeepers
-storeman
-storeroom
-storerooms
-stores
-storey
-storeys
-stories
-storing
-stork
-storks
-storm
-stormed
-stormer
-stormers
-stormier
-stormiest
-storming
-storms
-stormtroopers
-stormy
-story
-storybook
-storyline
-storylines
-storyteller
-storytellers
-storytelling
-stout
-stouter
-stoutest
-stoutly
-stoutness
-stove
-stovepipe
-stoves
-stow
-stowage
-stowaway
-stowed
-stowing
-stows
-straddle
-straddled
-straddles
-straddling
-strafe
-strafed
-strafing
-straggle
-straggled
-straggler
-stragglers
-straggling
-straggly
-straight
-straightaway
-straighten
-straightened
-straightening
-straightens
-straighter
-straightest
-straightforward
-straightforwardly
-straightforwardness
-straightness
-strain
-strained
-strainer
-strainers
-straining
-strains
-strait
-straiten
-straitened
-straitjacket
-straitjackets
-straits
-strand
-stranded
-stranding
-strands
-strange
-strangely
-strangeness
-stranger
-strangers
-strangest
-strangle
-strangled
-stranglehold
-strangler
-stranglers
-strangles
-strangling
-strangulated
-strangulation
-strap
-strapless
-strapped
-strapper
-strapping
-straps
-strata
-stratagem
-stratagems
-strategic
-strategically
-strategies
-strategist
-strategists
-strategy
-stratification
-stratified
-stratifies
-stratifying
-stratigraphic
-stratigraphical
-stratigraphy
-stratosphere
-stratospheric
-stratospherically
-stratum
-stratus
-straw
-strawberries
-strawberry
-strawman
-straws
-stray
-strayed
-strayer
-straying
-strays
-streak
-streaked
-streaker
-streakers
-streakier
-streakiest
-streaking
-streaks
-streaky
-stream
-streamed
-streamer
-streamers
-streaming
-streamline
-streamlined
-streamlines
-streamlining
-streams
-street
-streets
-streetwalkers
-streetwise
-strength
-strengthen
-strengthened
-strengthening
-strengthens
-strengths
-strenuous
-strenuously
-streptococcal
-streptococci
-streptomycin
-stress
-stressed
-stresses
-stressful
-stressfulness
-stressing
-stretch
-stretchability
-stretchable
-stretched
-stretcher
-stretchered
-stretchers
-stretches
-stretchiness
-stretching
-stretchy
-strew
-strewed
-strewing
-strewn
-striated
-striation
-striations
-stricken
-strict
-stricter
-strictest
-strictly
-strictness
-stricture
-strictures
-stride
-stridency
-strident
-stridently
-strider
-strides
-striding
-strife
-strifes
-strike
-striker
-strikers
-strikes
-striking
-strikingly
-string
-stringed
-stringencies
-stringency
-stringent
-stringently
-stringer
-stringing
-strings
-stringy
-strip
-stripe
-striped
-striper
-stripes
-stripier
-stripiest
-striping
-stripling
-stripped
-stripper
-strippers
-stripping
-strips
-stripy
-strive
-strived
-striven
-striver
-strives
-striving
-strivings
-strode
-stroke
-stroked
-strokes
-stroking
-stroll
-strolled
-stroller
-strollers
-strolling
-strolls
-strong
-stronger
-strongest
-stronghold
-strongholds
-strongish
-strongly
-strongman
-strongmen
-strongminded
-strongroom
-strontium
-strop
-stropped
-stropping
-strops
-strove
-struck
-structural
-structuralism
-structuralist
-structuralists
-structurally
-structure
-structured
-structureless
-structures
-structuring
-strudel
-strudels
-struggle
-struggled
-struggles
-struggling
-strum
-strummed
-strumming
-strumpet
-strung
-strut
-struts
-strutted
-strutter
-strutting
-strychnine
-stub
-stubbed
-stubbing
-stubble
-stubbled
-stubbles
-stubbly
-stubborn
-stubbornly
-stubbornness
-stubby
-stubs
-stucco
-stuccoed
-stuck
-stuckup
-stud
-studded
-student
-students
-studentship
-studentships
-studied
-studier
-studiers
-studies
-studio
-studios
-studious
-studiously
-studiousness
-studs
-study
-studying
-stuff
-stuffed
-stuffer
-stuffier
-stuffiest
-stuffiness
-stuffing
-stuffs
-stuffy
-stultified
-stultify
-stultifying
-stumble
-stumbled
-stumbles
-stumbling
-stumblingly
-stump
-stumped
-stumping
-stumps
-stumpy
-stun
-stung
-stunned
-stunner
-stunning
-stunningly
-stuns
-stunt
-stunted
-stunting
-stuntman
-stunts
-stupefaction
-stupefied
-stupefy
-stupefying
-stupefyingly
-stupendous
-stupendously
-stupid
-stupider
-stupidest
-stupidities
-stupidity
-stupidly
-stupor
-stupors
-sturdier
-sturdiest
-sturdily
-sturdy
-sturgeon
-sturgeons
-stutter
-stuttered
-stuttering
-stutters
-sty
-style
-styled
-styles
-styli
-styling
-stylisation
-stylised
-stylish
-stylishly
-stylishness
-stylist
-stylistic
-stylistically
-stylistics
-stylists
-stylus
-styluses
-stymie
-stymied
-styrene
-styx
-suasion
-suave
-suavely
-sub
-subaltern
-subalterns
-subarctic
-subatomic
-subbed
-subbing
-subclass
-subclasses
-subcommittee
-subcommittees
-subconscious
-subconsciously
-subconsciousness
-subcontinent
-subcontract
-subcontracted
-subcontracting
-subcontractor
-subcontractors
-subcultural
-subculture
-subcultures
-subcutaneous
-subcutaneously
-subdivide
-subdivided
-subdivides
-subdividing
-subdivision
-subdivisions
-subducted
-subduction
-subdue
-subdued
-subdues
-subduing
-subeditor
-subeditors
-subfamily
-subgroup
-subgroups
-subharmonic
-subharmonics
-subhuman
-subject
-subjected
-subjecting
-subjection
-subjective
-subjectively
-subjectivism
-subjectivist
-subjectivity
-subjects
-subjugate
-subjugated
-subjugating
-subjugation
-subjunctive
-sublayer
-sublimate
-sublimated
-sublimation
-sublime
-sublimed
-sublimely
-sublimes
-sublimest
-subliminal
-subliminally
-sublimity
-sublunary
-submarine
-submarines
-submerge
-submerged
-submergence
-submerges
-submerging
-submersible
-submersion
-submission
-submissions
-submissive
-submissively
-submissiveness
-submit
-submits
-submittable
-submitted
-submitter
-submitters
-submitting
-subnormal
-suboptimal
-subordinate
-subordinated
-subordinates
-subordinating
-subordination
-subplot
-subplots
-subpoena
-subpoenaed
-subprogram
-subprograms
-subregional
-subroutine
-subroutines
-subs
-subscribe
-subscribed
-subscriber
-subscribers
-subscribes
-subscribing
-subscript
-subscription
-subscriptions
-subscripts
-subsection
-subsections
-subsequent
-subsequently
-subservience
-subservient
-subset
-subsets
-subside
-subsided
-subsidence
-subsides
-subsidiaries
-subsidiarity
-subsidiary
-subsidies
-subsiding
-subsidise
-subsidised
-subsidises
-subsidising
-subsidy
-subsist
-subsisted
-subsistence
-subsisting
-subsists
-subsoil
-subsonic
-subspace
-subspaces
-subspecies
-substance
-substances
-substandard
-substantial
-substantially
-substantiate
-substantiated
-substantiates
-substantiating
-substantiation
-substantive
-substantively
-substantives
-substation
-substitutable
-substitute
-substituted
-substitutes
-substituting
-substitution
-substitutions
-substrata
-substrate
-substrates
-substratum
-substructure
-substructures
-subsume
-subsumed
-subsumes
-subsuming
-subsurface
-subsystem
-subsystems
-subtenants
-subtend
-subtended
-subtending
-subtends
-subterfuge
-subterranean
-subtext
-subtitle
-subtitled
-subtitles
-subtitling
-subtle
-subtler
-subtlest
-subtleties
-subtlety
-subtly
-subtotal
-subtotals
-subtract
-subtracted
-subtracting
-subtraction
-subtractions
-subtractive
-subtractively
-subtracts
-subtropical
-subtropics
-subtype
-subtypes
-subunit
-subunits
-suburb
-suburban
-suburbanisation
-suburbanites
-suburbia
-suburbs
-subvention
-subventions
-subversion
-subversive
-subversively
-subversives
-subvert
-subverted
-subverting
-subverts
-subway
-subways
-subzero
-succeed
-succeeded
-succeeding
-succeeds
-success
-successes
-successful
-successfully
-succession
-successions
-successive
-successively
-successor
-successors
-succinct
-succinctly
-succinctness
-succour
-succulence
-succulent
-succumb
-succumbed
-succumbing
-succumbs
-such
-suchandsuch
-suchlike
-suck
-suckable
-sucked
-sucker
-suckers
-sucking
-suckle
-suckled
-suckles
-suckling
-sucklings
-sucks
-sucrose
-suction
-sud
-sudan
-sudden
-suddenly
-suddenness
-suds
-sue
-sued
-suede
-sues
-suet
-suffer
-sufferance
-suffered
-sufferer
-sufferers
-suffering
-sufferings
-suffers
-suffice
-sufficed
-suffices
-sufficiency
-sufficient
-sufficiently
-sufficing
-suffix
-suffixed
-suffixes
-suffocate
-suffocated
-suffocates
-suffocating
-suffocatingly
-suffocation
-suffrage
-suffragette
-suffragettes
-suffragist
-suffuse
-suffused
-suffuses
-suffusing
-suffusion
-sugar
-sugarcoated
-sugared
-sugaring
-sugarplums
-sugars
-sugary
-suggest
-suggested
-suggester
-suggesters
-suggestibility
-suggestible
-suggesting
-suggestion
-suggestions
-suggestive
-suggestively
-suggestiveness
-suggests
-sugillate
-suicidal
-suicidally
-suicide
-suicides
-suing
-suit
-suitabilities
-suitability
-suitable
-suitableness
-suitably
-suitcase
-suitcases
-suite
-suited
-suites
-suiting
-suitor
-suitors
-suits
-sulk
-sulked
-sulkier
-sulkiest
-sulkily
-sulkiness
-sulking
-sulks
-sulky
-sullen
-sullenly
-sullenness
-sullied
-sully
-sullying
-sulphate
-sulphates
-sulphide
-sulphides
-sulphonamides
-sulphur
-sulphuric
-sulphurous
-sultan
-sultana
-sultanas
-sultans
-sultry
-sum
-sumatra
-summa
-summability
-summable
-summaries
-summarily
-summarise
-summarised
-summariser
-summarisers
-summarises
-summarising
-summary
-summation
-summations
-summed
-summer
-summers
-summertime
-summery
-summing
-summit
-summits
-summon
-summoned
-summoner
-summoning
-summonings
-summons
-summonsed
-summonses
-summonsing
-sumo
-sump
-sumps
-sumptuous
-sumptuously
-sumptuousness
-sums
-sun
-sunbath
-sunbathe
-sunbathed
-sunbathers
-sunbathing
-sunbeam
-sunbeams
-sunbed
-sunbeds
-sunblock
-sunburn
-sunburned
-sunburns
-sunburnt
-sunburst
-suncream
-sundaes
-sunday
-sundays
-sundial
-sundials
-sundown
-sundried
-sundries
-sundry
-sunflower
-sunflowers
-sung
-sunglasses
-sunk
-sunken
-sunking
-sunless
-sunlight
-sunlit
-sunlounger
-sunned
-sunnier
-sunniest
-sunning
-sunny
-sunrise
-sunrises
-sunroof
-suns
-sunscreen
-sunscreens
-sunset
-sunsets
-sunshade
-sunshine
-sunspot
-sunspots
-sunstroke
-suntan
-suntanned
-sup
-super
-superabundance
-superabundant
-superannuate
-superannuated
-superannuating
-superannuation
-superb
-superbly
-supercharged
-supercharger
-supercilious
-superciliously
-superciliousness
-supercomputer
-supercomputers
-supercomputing
-superconducting
-superconductivity
-superconductor
-superconductors
-supercooled
-supercooling
-supercritical
-superdense
-superfamily
-superficial
-superficiality
-superficially
-superfix
-superfluities
-superfluity
-superfluous
-superfluously
-superglue
-superheat
-superheated
-superhero
-superhuman
-superimpose
-superimposed
-superimposes
-superimposing
-superimposition
-superintend
-superintendence
-superintendent
-superintendents
-superior
-superiority
-superiors
-superlative
-superlatively
-superlatives
-superman
-supermarket
-supermarkets
-supermen
-supermodel
-supermodels
-supernatant
-supernatural
-supernaturally
-supernova
-supernovae
-supernumerary
-superordinate
-superpose
-superposed
-superposition
-superpositions
-superpower
-superpowers
-supersaturated
-supersaturation
-superscript
-superscripts
-supersede
-superseded
-supersedes
-superseding
-supersonic
-supersonically
-superstar
-superstars
-superstate
-superstates
-superstition
-superstitions
-superstitious
-superstitiously
-superstore
-superstores
-superstructure
-superstructures
-supertanker
-supertankers
-supervene
-supervise
-supervised
-supervises
-supervising
-supervision
-supervisions
-supervisor
-supervisors
-supervisory
-supine
-supped
-supper
-suppers
-supping
-supplant
-supplanted
-supplanting
-supple
-supplement
-supplemental
-supplementary
-supplementation
-supplemented
-supplementing
-supplements
-suppleness
-suppliant
-suppliants
-supplicant
-supplicants
-supplicate
-supplicating
-supplication
-supplications
-supplied
-supplier
-suppliers
-supplies
-supply
-supplying
-support
-supportability
-supportable
-supported
-supporter
-supporters
-supporting
-supportive
-supports
-suppose
-supposed
-supposedly
-supposes
-supposing
-supposition
-suppositions
-suppositories
-suppress
-suppressed
-suppresses
-suppressible
-suppressing
-suppression
-suppressive
-suppressor
-suppressors
-suppurating
-supranational
-supranationalism
-supremacist
-supremacy
-supremal
-supreme
-supremely
-supremo
-sups
-surcharge
-surcharged
-surcharges
-surd
-sure
-surefooted
-surely
-sureness
-surer
-surest
-sureties
-surety
-surf
-surface
-surfaced
-surfacer
-surfaces
-surfacing
-surfactant
-surfactants
-surfboard
-surfed
-surfeit
-surfer
-surfers
-surfing
-surfings
-surfs
-surge
-surged
-surgeon
-surgeons
-surgeries
-surgery
-surges
-surgical
-surgically
-surging
-surliest
-surlily
-surliness
-surly
-surmise
-surmised
-surmises
-surmising
-surmount
-surmountable
-surmounted
-surmounting
-surname
-surnames
-surpass
-surpassed
-surpasses
-surpassing
-surplice
-surplus
-surpluses
-surprise
-surprised
-surprises
-surprising
-surprisingly
-surreal
-surrealism
-surrealist
-surrealistic
-surrealists
-surreality
-surrender
-surrendered
-surrendering
-surrenders
-surreptitious
-surreptitiously
-surrey
-surreys
-surrogacy
-surrogate
-surrogates
-surround
-surrounded
-surrounding
-surroundings
-surrounds
-surtax
-surtitles
-surveillance
-survey
-surveyed
-surveying
-surveyor
-surveyors
-surveys
-survivability
-survivable
-survival
-survivals
-survive
-survived
-survives
-surviving
-survivor
-survivors
-susceptibilities
-susceptibility
-susceptible
-sushi
-sushis
-suspect
-suspected
-suspecting
-suspects
-suspend
-suspended
-suspender
-suspenders
-suspending
-suspends
-suspense
-suspension
-suspensions
-suspicion
-suspicions
-suspicious
-suspiciously
-sustain
-sustainability
-sustainable
-sustainably
-sustained
-sustaining
-sustains
-sustenance
-suture
-sutures
-suzerainty
-swab
-swabbed
-swabbing
-swabs
-swad
-swaddled
-swaddling
-swads
-swag
-swagger
-swaggered
-swaggering
-swags
-swahili
-swains
-swallow
-swallowed
-swallower
-swallowing
-swallows
-swallowtail
-swam
-swamp
-swamped
-swampier
-swampiest
-swamping
-swampland
-swamplands
-swamps
-swampy
-swan
-swans
-swansong
-swap
-swappable
-swapped
-swapper
-swappers
-swapping
-swaps
-sward
-swarm
-swarmed
-swarming
-swarms
-swarthier
-swarthiest
-swarthy
-swashbuckling
-swastika
-swastikas
-swat
-swathe
-swathed
-swathes
-swats
-swatted
-swatting
-sway
-swayed
-swaying
-sways
-swazi
-swazis
-swear
-swearer
-swearers
-swearing
-swears
-swearword
-swearwords
-sweat
-sweatband
-sweated
-sweater
-sweaters
-sweatier
-sweatiest
-sweatily
-sweating
-sweats
-sweatshirt
-sweatshirts
-sweatshop
-sweatshops
-sweaty
-swede
-sweden
-swedish
-sweep
-sweepable
-sweeper
-sweepers
-sweeping
-sweepingly
-sweepings
-sweeps
-sweepstake
-sweet
-sweetbread
-sweetcorn
-sweeten
-sweetened
-sweetener
-sweeteners
-sweetening
-sweetens
-sweeter
-sweetest
-sweetheart
-sweethearts
-sweetie
-sweetish
-sweetly
-sweetmeat
-sweetmeats
-sweetness
-sweetpea
-sweets
-sweetshop
-swell
-swelled
-swelling
-swellings
-swells
-sweltering
-sweltry
-swept
-swerve
-swerved
-swerves
-swerving
-swift
-swifter
-swiftest
-swiftlet
-swiftly
-swiftness
-swifts
-swill
-swilled
-swilling
-swim
-swimmer
-swimmers
-swimming
-swimmingly
-swims
-swimsuit
-swimsuits
-swimwear
-swindle
-swindled
-swindler
-swindlers
-swindles
-swindling
-swine
-swines
-swing
-swingeing
-swinger
-swingers
-swinging
-swings
-swingy
-swipe
-swiped
-swipes
-swirl
-swirled
-swirling
-swirls
-swish
-swished
-swishing
-swishy
-swiss
-switch
-switchable
-switchback
-switchboard
-switchboards
-switched
-switcher
-switches
-switchgear
-switching
-swivel
-swivelled
-swivelling
-swivels
-swollen
-swoon
-swooned
-swooning
-swoons
-swoop
-swooped
-swooping
-swoops
-swop
-swopped
-swopping
-swops
-sword
-swordfish
-swords
-swordsman
-swordsmen
-swore
-sworn
-swot
-swots
-swotted
-swotting
-swum
-swung
-sycamore
-sycamores
-sycophancy
-sycophant
-sycophantic
-sycophantically
-sycophants
-sydney
-syllabary
-syllabi
-syllabic
-syllable
-syllables
-syllabub
-syllabus
-syllabuses
-syllogism
-syllogisms
-syllogistic
-sylph
-sylphs
-symbiont
-symbiosis
-symbiotic
-symbiotically
-symbol
-symbolic
-symbolical
-symbolically
-symbolisation
-symbolise
-symbolised
-symbolises
-symbolising
-symbolism
-symbolist
-symbolists
-symbols
-symmetric
-symmetrical
-symmetrically
-symmetries
-symmetrisation
-symmetrising
-symmetry
-sympathetic
-sympathetically
-sympathies
-sympathise
-sympathised
-sympathiser
-sympathisers
-sympathises
-sympathising
-sympathy
-symphonic
-symphonies
-symphonists
-symphony
-symposia
-symposium
-symptom
-symptomatic
-symptomatically
-symptomless
-symptoms
-synagogue
-synagogues
-synapse
-synapses
-synaptic
-sync
-synchronic
-synchronicity
-synchronisation
-synchronise
-synchronised
-synchronises
-synchronising
-synchronous
-synchronously
-synchrony
-synchrotron
-syncopated
-syncopation
-syncretic
-syndicalism
-syndicalist
-syndicate
-syndicated
-syndicates
-syndication
-syndrome
-syndromes
-synergism
-synergistic
-synergy
-synod
-synodic
-synods
-synonym
-synonymic
-synonymous
-synonymously
-synonyms
-synonymy
-synopses
-synopsis
-synoptic
-synovial
-syntactic
-syntactical
-syntactically
-syntagmatic
-syntax
-syntheses
-synthesis
-synthesise
-synthesised
-synthesiser
-synthesisers
-synthesises
-synthesising
-synthetic
-synthetically
-synthetics
-syphilis
-syphilitic
-syphon
-syphoned
-syphoning
-syphons
-syria
-syrian
-syringe
-syringes
-syrup
-syrups
-syrupy
-system
-systematic
-systematically
-systematisation
-systematise
-systemic
-systemically
-systems
-systoles
-systolic
-taal
-tab
-tabasco
-tabbed
-tabbing
-tabby
-tabernacle
-tabernacles
-table
-tableau
-tableaux
-tablebay
-tablecloth
-tablecloths
-tabled
-tableland
-tables
-tablespoon
-tablespoonfuls
-tablespoons
-tablet
-tablets
-tableware
-tabling
-tabloid
-tabloids
-taboo
-taboos
-tabs
-tabular
-tabulate
-tabulated
-tabulates
-tabulating
-tabulation
-tabulations
-tabulator
-tachograph
-tachographs
-tachycardia
-tachyon
-tachyons
-tacit
-tacitly
-taciturn
-tack
-tacked
-tackier
-tackiest
-tackiness
-tacking
-tackle
-tackled
-tackler
-tackles
-tackling
-tacks
-tacky
-tact
-tactful
-tactfully
-tactic
-tactical
-tactically
-tactician
-tactics
-tactile
-tactless
-tactlessly
-tactlessness
-tactual
-tadpole
-tadpoles
-taffeta
-tag
-tagged
-tagging
-tags
-tahiti
-tahr
-tail
-tailed
-tailing
-tailless
-taillessness
-tailor
-tailorable
-tailored
-tailoring
-tailormade
-tailors
-tailpiece
-tailplane
-tails
-tailspin
-tailwind
-taint
-tainted
-tainting
-taints
-taipei
-taiwan
-take
-takeable
-takeaway
-takeaways
-taken
-takeover
-takeovers
-taker
-takers
-takes
-taking
-takings
-talc
-talcum
-tale
-talent
-talented
-talentless
-talents
-tales
-talisman
-talismans
-talk
-talkative
-talkativeness
-talkback
-talked
-talker
-talkers
-talkie
-talkies
-talking
-talkings
-talks
-tall
-tallboy
-taller
-tallest
-tallied
-tallies
-tallish
-tallness
-tallow
-tally
-tallyho
-tallying
-talmud
-talon
-talons
-tambourine
-tambourines
-tame
-tamed
-tamely
-tameness
-tamer
-tamers
-tames
-tamest
-taming
-tamp
-tamped
-tamper
-tampered
-tampering
-tampers
-tan
-tandem
-tandems
-tang
-tangelo
-tangent
-tangential
-tangentially
-tangents
-tangerine
-tangerines
-tangible
-tangibly
-tangle
-tangled
-tangles
-tangling
-tango
-tangy
-tank
-tankage
-tankard
-tankards
-tanked
-tanker
-tankers
-tankful
-tanking
-tanks
-tanned
-tanner
-tanneries
-tanners
-tannery
-tannic
-tannin
-tanning
-tannins
-tannoy
-tans
-tantalise
-tantalised
-tantalising
-tantalisingly
-tantalum
-tantamount
-tantrum
-tantrums
-tanzania
-tap
-tapas
-tapdance
-tapdancing
-tape
-taped
-taper
-taperecorded
-taperecording
-tapered
-taperer
-tapering
-tapers
-tapes
-tapestries
-tapestry
-tapeworm
-tapeworms
-taping
-tapioca
-tapir
-tapped
-tappers
-tapping
-tappings
-taproom
-taps
-tar
-taramasalata
-tarantula
-tarantulas
-tardily
-tardiness
-tardy
-tares
-target
-targeted
-targeting
-targets
-tariff
-tariffs
-tarmac
-tarmacadam
-tarn
-tarnish
-tarnished
-tarnishing
-tarns
-tarot
-tarpaulin
-tarpaulins
-tarragon
-tarred
-tarried
-tarrier
-tarriest
-tarring
-tarry
-tarrying
-tars
-tarsal
-tarsus
-tart
-tartan
-tartans
-tartar
-tartaric
-tartly
-tartness
-tartrate
-tarts
-tarty
-tarzan
-task
-tasked
-tasking
-taskmaster
-tasks
-tasmania
-tassel
-tasselled
-tassels
-taste
-tasted
-tasteful
-tastefully
-tastefulness
-tasteless
-tastelessly
-tastelessness
-taster
-tasters
-tastes
-tastier
-tastiest
-tasting
-tastings
-tasty
-tat
-tattered
-tatters
-tattle
-tattoo
-tattooed
-tattooing
-tattoos
-tatty
-tau
-taught
-taunt
-taunted
-taunter
-taunting
-tauntingly
-taunts
-taut
-tauter
-tautest
-tautly
-tautness
-tautological
-tautologically
-tautologies
-tautologous
-tautology
-tavern
-taverna
-tavernas
-taverns
-tawdry
-tawny
-tax
-taxable
-taxation
-taxdeductible
-taxed
-taxes
-taxfree
-taxi
-taxicab
-taxidermist
-taxidermists
-taxidermy
-taxied
-taxies
-taxiing
-taxing
-taxis
-taxman
-taxonomic
-taxonomical
-taxonomies
-taxonomist
-taxonomists
-taxonomy
-taxpayer
-taxpayers
-taxpaying
-taylor
-tea
-teabag
-teabags
-teach
-teachable
-teacher
-teachers
-teaches
-teaching
-teachings
-teacloth
-teacup
-teacups
-teak
-teal
-team
-teamed
-teaming
-teammate
-teammates
-teams
-teamster
-teamwork
-teaparty
-teapot
-teapots
-tear
-tearaway
-teardrop
-teardrops
-tearful
-tearfully
-tearfulness
-teargas
-tearing
-tearless
-tearoom
-tearooms
-tears
-tearstained
-teas
-tease
-teased
-teaser
-teasers
-teases
-teashop
-teashops
-teasing
-teasingly
-teaspoon
-teaspoonful
-teaspoonfuls
-teaspoons
-teat
-teatime
-teatimes
-teats
-tech
-technical
-technicalities
-technicality
-technically
-technician
-technicians
-technique
-techniques
-technocracies
-technocracy
-technocrat
-technocratic
-technocrats
-technological
-technologically
-technologies
-technologist
-technologists
-technology
-technophiles
-technophobia
-technophobic
-tectonic
-tectonically
-tectonics
-ted
-teddies
-teddy
-tedious
-tediously
-tediousness
-tedium
-tediums
-teds
-tee
-teed
-teehee
-teeing
-teem
-teemed
-teeming
-teems
-teen
-teenage
-teenaged
-teenager
-teenagers
-teeniest
-teens
-teensy
-teeny
-teenyweeny
-teepee
-teepees
-tees
-teeter
-teetered
-teetering
-teeth
-teethe
-teethed
-teethes
-teething
-teethmarks
-teetotal
-teetotalism
-teetotaller
-teetotallers
-teheran
-telaviv
-telecommunication
-telecommunications
-telecommuting
-telecoms
-teleconference
-telegram
-telegrams
-telegraph
-telegraphed
-telegraphic
-telegraphing
-telegraphs
-telegraphy
-telekinesis
-telemetry
-teleological
-teleology
-telepathic
-telepathically
-telepathy
-telephone
-telephoned
-telephones
-telephonic
-telephoning
-telephonist
-telephonists
-telephony
-telephoto
-teleprinter
-teleprinters
-telesales
-telescope
-telescoped
-telescopes
-telescopic
-telescoping
-teletext
-telethon
-teletype
-teletypes
-televise
-televised
-televising
-television
-televisions
-televisual
-teleworking
-telex
-telexes
-tell
-teller
-tellers
-telling
-tellingly
-tells
-telltale
-telly
-temerity
-temper
-tempera
-temperament
-temperamental
-temperamentally
-temperaments
-temperance
-temperate
-temperately
-temperature
-temperatures
-tempered
-tempering
-tempers
-tempest
-tempests
-tempestuous
-tempi
-template
-templates
-temple
-temples
-tempo
-temporal
-temporality
-temporally
-temporaries
-temporarily
-temporary
-tempt
-temptation
-temptations
-tempted
-tempter
-tempters
-tempting
-temptingly
-temptress
-tempts
-ten
-tenability
-tenable
-tenacious
-tenaciously
-tenacity
-tenancies
-tenancy
-tenant
-tenanted
-tenantry
-tenants
-tench
-tend
-tended
-tendencies
-tendency
-tendentious
-tendentiously
-tender
-tendered
-tenderer
-tenderest
-tendering
-tenderly
-tenderness
-tenders
-tending
-tendon
-tendons
-tendril
-tendrils
-tends
-tenement
-tenements
-tenet
-tenets
-tenfold
-tenners
-tennis
-tenon
-tenor
-tenors
-tens
-tense
-tensed
-tensely
-tenseness
-tenser
-tenses
-tensest
-tensile
-tensing
-tension
-tensional
-tensioned
-tensions
-tensity
-tensor
-tensors
-tent
-tentacle
-tentacled
-tentacles
-tentative
-tentatively
-tented
-tenterhooks
-tenth
-tenths
-tents
-tenuous
-tenuously
-tenure
-tenured
-tenures
-tenurial
-tepee
-tepid
-tequila
-tercentenary
-term
-termed
-terminal
-terminally
-terminals
-terminate
-terminated
-terminates
-terminating
-termination
-terminations
-terminator
-terminators
-terming
-termini
-terminological
-terminologies
-terminology
-terminus
-termite
-termites
-termly
-terms
-tern
-ternary
-terns
-terrace
-terraced
-terraces
-terracing
-terracotta
-terraform
-terraformed
-terrain
-terrains
-terrapin
-terrapins
-terrazzo
-terrestrial
-terrible
-terribly
-terrier
-terriers
-terrific
-terrifically
-terrified
-terrifies
-terrify
-terrifying
-terrifyingly
-terrine
-territorial
-territoriality
-territorially
-territories
-territory
-terror
-terrorise
-terrorised
-terrorising
-terrorism
-terrorist
-terrorists
-terrors
-terrorstricken
-terry
-terse
-tersely
-terseness
-terser
-tertiaries
-tertiary
-tessellated
-tessellation
-tessellations
-tesseral
-test
-testability
-testable
-testament
-testamentary
-testaments
-testdrive
-testdriving
-tested
-tester
-testers
-testes
-testicle
-testicles
-testicular
-testier
-testiest
-testified
-testifies
-testify
-testifying
-testily
-testimonial
-testimonials
-testimonies
-testimony
-testiness
-testing
-testings
-testis
-testosterone
-tests
-testtube
-testy
-tetanus
-tetchily
-tetchy
-tether
-tethered
-tethering
-tethers
-tetra
-tetrachloride
-tetrahedra
-tetrahedral
-tetrahedron
-tetrahedrons
-tetrameters
-tetroxide
-texan
-texans
-texas
-text
-textbook
-textbooks
-textile
-textiles
-texts
-textual
-textuality
-textually
-textural
-texturally
-texture
-textured
-textures
-thai
-thalamus
-thalidomide
-thallium
-thames
-than
-thane
-thank
-thanked
-thankful
-thankfully
-thankfulness
-thanking
-thankless
-thanklessly
-thanks
-thanksgiving
-that
-thatch
-thatched
-thatcher
-thatchers
-thatching
-thaumaturge
-thaw
-thawed
-thawing
-thaws
-the
-theatre
-theatres
-theatrical
-theatricality
-theatrically
-theatricals
-thebes
-thee
-theft
-thefts
-their
-theirs
-theism
-theist
-theistic
-theists
-them
-themas
-thematic
-thematically
-theme
-themed
-themes
-themselves
-then
-thence
-thenceforth
-thenceforward
-theocracies
-theocracy
-theodolite
-theodolites
-theologian
-theologians
-theological
-theologically
-theologies
-theologists
-theology
-theorem
-theorems
-theoretic
-theoretical
-theoretically
-theoretician
-theoreticians
-theories
-theorisation
-theorise
-theorised
-theorises
-theorising
-theorist
-theorists
-theory
-theosophy
-therapeutic
-therapeutically
-therapies
-therapist
-therapists
-therapy
-there
-thereabouts
-thereafter
-thereby
-therefor
-therefore
-therefrom
-therein
-thereof
-thereon
-thereto
-thereunder
-thereupon
-therewith
-thermal
-thermally
-thermals
-thermochemical
-thermodynamic
-thermodynamical
-thermodynamically
-thermodynamics
-thermoelectric
-thermometer
-thermometers
-thermoplastic
-thermostat
-thermostatic
-thermostatically
-thermostats
-therms
-thesauri
-thesaurus
-these
-thesis
-thespian
-thespians
-theta
-they
-thick
-thicken
-thickened
-thickening
-thickens
-thicker
-thickest
-thicket
-thickets
-thickish
-thickly
-thickness
-thicknesses
-thickset
-thickskinned
-thief
-thieve
-thieved
-thievery
-thieves
-thieving
-thievish
-thievishness
-thigh
-thighs
-thimble
-thimbleful
-thimblefuls
-thimbles
-thin
-thine
-thing
-things
-think
-thinkable
-thinker
-thinkers
-thinking
-thinks
-thinktank
-thinly
-thinned
-thinner
-thinners
-thinness
-thinnest
-thinning
-thinnish
-thins
-third
-thirdly
-thirds
-thirst
-thirsted
-thirstier
-thirstiest
-thirstily
-thirsting
-thirsts
-thirsty
-thirteen
-thirteenth
-thirties
-thirtieth
-thirty
-this
-thistle
-thistles
-thither
-thomas
-thong
-thongs
-thor
-thoracic
-thorax
-thorium
-thorn
-thornier
-thorniest
-thorns
-thorny
-thorough
-thoroughbred
-thoroughbreds
-thoroughfare
-thoroughfares
-thoroughgoing
-thoroughly
-thoroughness
-those
-thou
-though
-thought
-thoughtful
-thoughtfully
-thoughtfulness
-thoughtless
-thoughtlessly
-thoughtlessness
-thoughtprovoking
-thoughts
-thousand
-thousandfold
-thousands
-thousandth
-thousandths
-thrall
-thrash
-thrashed
-thrasher
-thrashes
-thrashing
-thrashings
-thread
-threadbare
-threaded
-threading
-threads
-threat
-threaten
-threatened
-threatening
-threateningly
-threatens
-threats
-three
-threedimensional
-threefold
-threequarters
-threes
-threesome
-threesomes
-thresh
-threshed
-thresher
-threshers
-threshing
-threshold
-thresholds
-threw
-thrice
-thrift
-thriftier
-thriftiest
-thriftless
-thrifts
-thrifty
-thrill
-thrilled
-thriller
-thrillers
-thrilling
-thrillingly
-thrills
-thrive
-thrived
-thrives
-thriving
-throat
-throatier
-throatiest
-throatily
-throats
-throaty
-throb
-throbbed
-throbbing
-throbs
-thromboses
-thrombosis
-thrombus
-throne
-throned
-thrones
-throng
-thronged
-thronging
-throngs
-throroughly
-throttle
-throttled
-throttles
-throttling
-through
-throughout
-throughput
-throw
-throwaway
-throwback
-thrower
-throwers
-throwing
-thrown
-throws
-thrum
-thrush
-thrushes
-thrust
-thruster
-thrusters
-thrusting
-thrusts
-thud
-thudded
-thudding
-thuds
-thug
-thuggery
-thuggish
-thugs
-thumb
-thumbed
-thumbing
-thumbnail
-thumbprint
-thumbs
-thumbscrew
-thumbscrews
-thump
-thumped
-thumping
-thumps
-thunder
-thunderbolt
-thunderbolts
-thunderclap
-thunderclaps
-thundercloud
-thundered
-thunderflashes
-thundering
-thunderous
-thunderously
-thunders
-thunderstorm
-thunderstorms
-thunderstruck
-thundery
-thursday
-thus
-thwack
-thwart
-thwarted
-thwarting
-thwarts
-thy
-thyme
-thymus
-thyristor
-thyristors
-thyroid
-thyroids
-thyself
-tiara
-tiaras
-tibia
-tibiae
-tic
-tick
-ticked
-ticker
-tickers
-ticket
-ticketed
-tickets
-ticking
-tickle
-tickled
-tickler
-tickles
-tickling
-ticklish
-ticks
-tics
-tidal
-tidbit
-tidbits
-tiddlers
-tiddlywinks
-tide
-tideless
-tides
-tideway
-tidied
-tidier
-tidies
-tidiest
-tidily
-tidiness
-tiding
-tidings
-tidy
-tidying
-tie
-tiebreak
-tied
-tier
-tiered
-tiers
-ties
-tiger
-tigerish
-tigers
-tight
-tighten
-tightened
-tightening
-tightens
-tighter
-tightest
-tightfisted
-tightlipped
-tightly
-tightness
-tightrope
-tights
-tightwad
-tigress
-tigris
-tikka
-tilde
-tildes
-tile
-tiled
-tiler
-tiles
-tiling
-tilings
-till
-tillage
-tilled
-tiller
-tillers
-tilling
-tills
-tilt
-tilted
-tilting
-tilts
-timber
-timbered
-timbre
-time
-timebase
-timeconsuming
-timed
-timeframe
-timehonoured
-timekeeper
-timekeepers
-timekeeping
-timelapse
-timeless
-timelessness
-timeliness
-timely
-timeout
-timepiece
-timer
-timers
-times
-timescale
-timescales
-timeshare
-timetable
-timetabled
-timetables
-timetabling
-timid
-timidity
-timidly
-timing
-timings
-tin
-tincan
-tincture
-tinctured
-tinder
-tinderbox
-tinfoil
-tinge
-tinged
-tinges
-tingle
-tingled
-tingles
-tinglier
-tingliest
-tingling
-tingly
-tinier
-tiniest
-tinker
-tinkered
-tinkering
-tinkers
-tinkle
-tinkled
-tinkling
-tinkly
-tinned
-tinner
-tinnier
-tinniest
-tinnily
-tinnitus
-tinny
-tinopener
-tinpot
-tins
-tinsel
-tinsels
-tint
-tinted
-tinting
-tintings
-tints
-tinware
-tiny
-tip
-tipoff
-tipoffs
-tipped
-tipper
-tipping
-tipple
-tippling
-tips
-tipster
-tipsters
-tipsy
-tiptoe
-tiptoed
-tiptoeing
-tiptoes
-tiptop
-tirade
-tirades
-tire
-tired
-tiredly
-tiredness
-tireless
-tirelessly
-tires
-tiresome
-tiresomely
-tiring
-tiro
-tissue
-tissues
-tit
-titan
-titanic
-titanically
-titanium
-titans
-titbit
-titbits
-titfortat
-tithe
-tithes
-tithing
-titillate
-titillated
-titillating
-titillation
-title
-titled
-titles
-titling
-titrated
-titration
-titre
-titres
-tits
-titter
-tittered
-tittering
-titters
-titular
-to
-toad
-toadies
-toads
-toadstool
-toadstools
-toady
-toast
-toasted
-toaster
-toasters
-toasting
-toasts
-toasty
-tobacco
-tobacconist
-tobacconists
-tobago
-toboggan
-tobogganing
-toby
-toccata
-tocsin
-today
-toddle
-toddled
-toddler
-toddlers
-toddling
-toddy
-todies
-toe
-toed
-toehold
-toeing
-toeless
-toenail
-toenails
-toes
-toffee
-toffees
-toffy
-tofu
-tog
-toga
-togas
-together
-togetherness
-toggle
-toggled
-toggles
-toggling
-togo
-togs
-toil
-toiled
-toiler
-toilet
-toileting
-toiletries
-toiletry
-toilets
-toilette
-toiling
-toils
-toitoi
-tokamak
-token
-tokenism
-tokenistic
-tokens
-tokyo
-tolbooth
-told
-toledo
-tolerable
-tolerably
-tolerance
-tolerances
-tolerant
-tolerantly
-tolerate
-tolerated
-tolerates
-tolerating
-toleration
-toll
-tolled
-tollgate
-tolling
-tolls
-toluene
-tomahawk
-tomahawks
-tomato
-tomb
-tombola
-tomboy
-tomboys
-tombs
-tombstone
-tombstones
-tomcat
-tome
-tomes
-tomfoolery
-tomography
-tomorrow
-tomorrows
-tomtom
-ton
-tonal
-tonalities
-tonality
-tonally
-tone
-toned
-tonedeaf
-toneless
-tonelessly
-toner
-toners
-tones
-tonga
-tongs
-tongue
-tongueincheek
-tongues
-tonguetied
-tonguetwister
-tonguetwisters
-tonic
-tonics
-tonight
-toning
-tonnage
-tonnages
-tonne
-tonnes
-tons
-tonsil
-tonsillectomy
-tonsillitis
-tonsils
-tonsure
-tony
-too
-took
-tool
-toolbox
-toolboxes
-tooled
-tooling
-toolmaker
-toolmaking
-tools
-toot
-tooted
-tooth
-toothache
-toothbrush
-toothbrushes
-toothed
-toothier
-toothiest
-toothless
-toothmarks
-toothpaste
-toothpick
-toothpicks
-toothsome
-toothy
-tooting
-tootle
-top
-topaz
-topazes
-topcoat
-topheavy
-topiary
-topic
-topical
-topicality
-topically
-topics
-topless
-toplevel
-topmost
-topnotch
-topographic
-topographical
-topographically
-topography
-topological
-topologically
-topologies
-topologist
-topologists
-topology
-topped
-topper
-topping
-toppings
-topple
-toppled
-topples
-toppling
-tops
-topsoil
-topspin
-topsyturvy
-torah
-torch
-torchbearer
-torchbearers
-torched
-torches
-torchlight
-torchlit
-tore
-tori
-tories
-torment
-tormented
-tormenting
-tormentor
-tormentors
-torments
-torn
-tornado
-toronto
-torpedo
-torpedoed
-torpid
-torpor
-torque
-torques
-torrent
-torrential
-torrents
-torrid
-torsion
-torsional
-torsions
-torso
-tortoise
-tortoises
-tortoiseshell
-torts
-tortuous
-tortuously
-torture
-tortured
-torturer
-torturers
-tortures
-torturing
-torturous
-torus
-tory
-toss
-tossed
-tossers
-tosses
-tossing
-tossup
-tossups
-tot
-total
-totalising
-totalitarian
-totalitarianism
-totality
-totalled
-totalling
-totally
-totals
-totem
-totemic
-totems
-tots
-totted
-totter
-tottered
-tottering
-totters
-totting
-toucans
-touch
-touchandgo
-touchdown
-touchdowns
-touche
-touched
-toucher
-touches
-touchier
-touchiest
-touchiness
-touching
-touchingly
-touchy
-tough
-toughen
-toughened
-toughens
-tougher
-toughest
-toughie
-toughies
-toughly
-toughness
-toughs
-toupee
-tour
-toured
-tourer
-tourers
-touring
-tourism
-tourist
-touristic
-tourists
-touristy
-tournament
-tournaments
-tourney
-tourniquet
-tours
-tousled
-tousles
-tout
-touted
-touting
-touts
-tow
-toward
-towards
-towed
-towel
-towelled
-towelling
-towels
-tower
-towered
-towering
-towers
-towing
-town
-towns
-townscape
-townscapes
-townsfolk
-township
-townships
-townsman
-townsmen
-townspeople
-towpath
-towpaths
-tows
-toxaemia
-toxic
-toxicity
-toxicological
-toxicology
-toxin
-toxins
-toy
-toyed
-toying
-toymaker
-toys
-toyshop
-trace
-traceability
-traceable
-traced
-traceless
-tracer
-tracers
-tracery
-traces
-trachea
-tracheal
-tracheostomy
-tracheotomy
-tracing
-tracings
-track
-trackbed
-tracked
-tracker
-trackers
-tracking
-trackless
-tracks
-tracksuit
-tracksuits
-trackway
-trackways
-tract
-tractability
-tractable
-traction
-tractor
-tractors
-tracts
-trad
-trade
-tradeable
-traded
-tradein
-tradeins
-trademark
-trademarked
-trademarks
-trader
-traders
-trades
-tradesman
-tradesmen
-tradespeople
-trading
-tradings
-tradition
-traditional
-traditionalism
-traditionalist
-traditionalists
-traditionally
-traditions
-traduced
-traducer
-traffic
-trafficked
-trafficker
-traffickers
-trafficking
-tragedian
-tragedians
-tragedies
-tragedy
-tragic
-tragical
-tragically
-trail
-trailed
-trailer
-trailers
-trailing
-trails
-train
-trained
-trainee
-trainees
-trainer
-trainers
-training
-trainings
-trainload
-trains
-trait
-traitor
-traitorous
-traitorously
-traitors
-traits
-trajectories
-trajectory
-tram
-tramcar
-tramcars
-tramlines
-trammel
-tramp
-tramped
-tramping
-trample
-trampled
-tramples
-trampling
-trampoline
-trampolines
-trampolining
-trampolinist
-tramps
-trams
-tramway
-tramways
-trance
-trances
-tranche
-tranches
-tranny
-tranquil
-tranquillise
-tranquillised
-tranquilliser
-tranquillisers
-tranquillity
-tranquilly
-transact
-transacted
-transacting
-transaction
-transactional
-transactions
-transactor
-transatlantic
-transceiver
-transceivers
-transcend
-transcended
-transcendence
-transcendent
-transcendental
-transcendentally
-transcendentals
-transcending
-transcends
-transcontinental
-transcribe
-transcribed
-transcriber
-transcribers
-transcribes
-transcribing
-transcript
-transcription
-transcriptional
-transcriptions
-transcripts
-transducer
-transducers
-transduction
-transection
-transept
-transepts
-transfer
-transferability
-transferable
-transferee
-transferees
-transference
-transferral
-transferred
-transferring
-transfers
-transfiguration
-transfigured
-transfinite
-transfinitely
-transfixed
-transform
-transformation
-transformational
-transformations
-transformative
-transformed
-transformer
-transformers
-transforming
-transforms
-transfused
-transfusing
-transfusion
-transfusions
-transgress
-transgressed
-transgresses
-transgressing
-transgression
-transgressions
-transgressive
-transgressor
-transgressors
-transhipment
-transience
-transient
-transiently
-transients
-transistor
-transistorised
-transistors
-transit
-transition
-transitional
-transitions
-transitive
-transitively
-transitivity
-transitoriness
-transitory
-transits
-translatable
-translate
-translated
-translates
-translating
-translation
-translational
-translations
-translator
-translators
-transliterate
-transliterated
-transliterates
-transliterating
-transliteration
-transliterations
-translucence
-translucency
-translucent
-transmigration
-transmissible
-transmission
-transmissions
-transmissive
-transmit
-transmits
-transmittable
-transmittance
-transmitted
-transmitter
-transmitters
-transmitting
-transmogrification
-transmogrifies
-transmogrify
-transmutation
-transmute
-transmuted
-transmuting
-transnational
-transom
-transonic
-transparencies
-transparency
-transparent
-transparently
-transpiration
-transpire
-transpired
-transpires
-transplant
-transplantation
-transplanted
-transplanting
-transplants
-transponder
-transponders
-transport
-transportability
-transportable
-transportation
-transported
-transporter
-transporters
-transporting
-transports
-transpose
-transposed
-transposes
-transposing
-transposition
-transpositions
-transverse
-transversely
-transvestism
-transvestite
-transvestites
-trap
-trapdoor
-trapdoors
-trapeze
-trappable
-trapped
-trapper
-trappers
-trapping
-trappings
-traps
-trash
-trashed
-trashy
-trauma
-traumas
-traumata
-traumatic
-traumatise
-traumatised
-travail
-travails
-travel
-travelled
-traveller
-travellers
-travelling
-travelogue
-travelogues
-travels
-traversal
-traversals
-traverse
-traversed
-traverses
-traversing
-travesties
-travesty
-trawl
-trawled
-trawler
-trawlers
-trawling
-trawlnet
-trawls
-tray
-trays
-treacherous
-treacherously
-treachery
-treacle
-tread
-treader
-treading
-treadle
-treadmill
-treadmills
-treads
-treason
-treasonable
-treasonous
-treasons
-treasure
-treasured
-treasurer
-treasurers
-treasurership
-treasures
-treasuries
-treasuring
-treasury
-treat
-treatable
-treated
-treaties
-treating
-treatise
-treatises
-treatment
-treatments
-treats
-treaty
-treble
-trebled
-trebles
-trebling
-tree
-treeless
-trees
-treetop
-treetops
-trefoil
-trefoils
-trek
-trekked
-trekker
-trekkers
-trekking
-treks
-trellis
-trellised
-trellises
-tremble
-trembled
-trembler
-trembles
-trembling
-tremblingly
-tremblings
-tremendous
-tremendously
-tremolo
-tremor
-tremors
-tremulous
-tremulously
-tremulousness
-trench
-trenchant
-trenchantly
-trenched
-trencher
-trenches
-trenching
-trend
-trendier
-trendiest
-trendiness
-trends
-trendy
-trepanned
-trepidation
-trepidations
-trespass
-trespassed
-trespasser
-trespassers
-trespasses
-trespassing
-tress
-tresses
-trestle
-trestles
-trews
-triad
-triadic
-triads
-triage
-trial
-trials
-triangle
-triangles
-triangular
-triangulate
-triangulated
-triangulating
-triangulation
-triangulations
-triathlon
-triatomic
-tribal
-tribalism
-tribally
-tribe
-tribes
-tribesman
-tribesmen
-tribespeople
-tribulation
-tribulations
-tribunal
-tribunals
-tribune
-tribunes
-tributaries
-tributary
-tribute
-tributes
-trice
-trick
-tricked
-trickery
-trickier
-trickiest
-trickily
-tricking
-trickle
-trickled
-trickles
-trickling
-tricks
-trickster
-tricksters
-tricky
-tricolour
-tricolours
-tricycle
-tricycles
-trident
-tridents
-tried
-triennial
-trier
-tries
-triffid
-triffids
-trifle
-trifled
-trifler
-trifles
-trifling
-trigger
-triggered
-triggerhappy
-triggering
-triggers
-triglyceride
-trigonometric
-trigonometrical
-trigonometry
-trigram
-trigrams
-trigs
-trikes
-trilateral
-trilby
-trilingual
-trill
-trilled
-trilling
-trillion
-trillions
-trills
-trilobite
-trilobites
-trilogies
-trilogy
-trim
-trimaran
-trimmed
-trimmer
-trimmers
-trimming
-trimmings
-trimodal
-trims
-trinidad
-trinity
-trinket
-trinkets
-trio
-trip
-tripartite
-tripe
-triplane
-triple
-tripled
-triples
-triplet
-triplets
-triplex
-triplicate
-triplication
-tripling
-triply
-tripod
-tripods
-tripoli
-tripped
-trippers
-tripping
-trips
-triptych
-tripwire
-tripwires
-trireme
-trisecting
-trisection
-trisector
-tristan
-trite
-triteness
-tritium
-triumph
-triumphal
-triumphalism
-triumphalist
-triumphant
-triumphantly
-triumphed
-triumphing
-triumphs
-triumvirate
-trivia
-trivial
-trivialisation
-trivialisations
-trivialise
-trivialised
-trivialises
-trivialising
-trivialities
-triviality
-trivially
-trod
-trodden
-troglodyte
-troglodytes
-troika
-troikas
-troll
-trolley
-trolleys
-trolling
-trollish
-trolls
-trombone
-trombones
-trombonist
-trombonists
-troop
-trooped
-trooper
-troopers
-trooping
-troops
-troopship
-trope
-tropes
-trophies
-trophy
-tropic
-tropical
-tropically
-tropics
-tropopause
-troposphere
-tropospheric
-trot
-trots
-trotted
-trotter
-trotters
-trotting
-troubadour
-troubadours
-trouble
-troubled
-troublemaker
-troublemakers
-troubles
-troubleshooter
-troubleshooters
-troubleshooting
-troublesome
-troublesomeness
-troubling
-trough
-troughs
-trounce
-trounced
-trounces
-trouncing
-troupe
-trouper
-troupers
-troupes
-trouser
-trousers
-trout
-trouts
-trove
-trowel
-trowels
-troy
-truancy
-truant
-truanting
-truants
-truce
-truces
-truck
-trucks
-truculence
-truculent
-truculently
-trudge
-trudged
-trudges
-trudging
-true
-trueblue
-truer
-truest
-truffle
-truffles
-truism
-truisms
-truly
-trump
-trumped
-trumpery
-trumpet
-trumpeted
-trumpeter
-trumpeters
-trumpeting
-trumpets
-trumps
-truncate
-truncated
-truncates
-truncating
-truncation
-truncations
-truncheon
-truncheons
-trundle
-trundled
-trundles
-trundling
-trunk
-trunking
-trunks
-trunnion
-trunnions
-truss
-trussed
-trusses
-trussing
-trust
-trusted
-trustee
-trustees
-trusteeship
-trustful
-trustfully
-trustfulness
-trusties
-trusting
-trustingly
-trusts
-trustworthiness
-trustworthy
-trusty
-truth
-truthful
-truthfully
-truthfulness
-truths
-try
-trying
-tsetse
-tshirt
-tsunami
-tswana
-tswanas
-tuareg
-tuaregs
-tuatara
-tub
-tuba
-tubas
-tubby
-tube
-tubed
-tubeless
-tuber
-tubercular
-tuberculosis
-tubers
-tubes
-tubing
-tubs
-tubular
-tubules
-tuck
-tucked
-tucker
-tuckers
-tucking
-tucks
-tues
-tuesday
-tuesdays
-tuft
-tufted
-tufting
-tufts
-tug
-tugela
-tugged
-tugging
-tugs
-tuition
-tulip
-tulips
-tumble
-tumbled
-tumbledown
-tumbler
-tumblers
-tumbles
-tumbling
-tumbrils
-tumescent
-tummies
-tummy
-tumour
-tumours
-tumult
-tumults
-tumultuous
-tumultuously
-tumulus
-tun
-tuna
-tunable
-tunas
-tundra
-tundras
-tune
-tuned
-tuneful
-tunefully
-tuneless
-tunelessly
-tuner
-tuners
-tunes
-tungsten
-tunic
-tunics
-tuning
-tunings
-tunisia
-tunisian
-tunnel
-tunnelled
-tunnellers
-tunnelling
-tunnels
-tunny
-tuns
-tuppence
-tuppences
-turban
-turbans
-turbid
-turbidity
-turbine
-turbines
-turbo
-turbocharged
-turbocharger
-turboprop
-turbot
-turbulence
-turbulent
-tureen
-tureens
-turf
-turfed
-turfs
-turfy
-turgid
-turgidity
-turgidly
-turin
-turk
-turkey
-turkeys
-turkish
-turks
-turmeric
-turmoil
-turmoils
-turn
-turnabout
-turnaround
-turncoat
-turncoats
-turned
-turner
-turners
-turning
-turnings
-turnip
-turnips
-turnkey
-turnout
-turnouts
-turnover
-turnovers
-turnpike
-turnround
-turns
-turnstile
-turnstiles
-turntable
-turntables
-turpentine
-turpitude
-turquoise
-turret
-turreted
-turrets
-turtle
-turtleneck
-turtles
-tuscany
-tusk
-tusked
-tusker
-tusks
-tussle
-tussles
-tussling
-tussock
-tussocks
-tussocky
-tutelage
-tutelary
-tutor
-tutored
-tutorial
-tutorials
-tutoring
-tutors
-tutu
-tuxedo
-twain
-twang
-twanged
-twanging
-twangs
-tweak
-tweaked
-tweaking
-tweaks
-twee
-tweed
-tweeds
-tweedy
-tweeness
-tweet
-tweeter
-tweeters
-tweets
-tweezers
-twelfth
-twelfths
-twelve
-twelves
-twenties
-twentieth
-twenty
-twice
-twiddle
-twiddled
-twiddler
-twiddles
-twiddling
-twiddly
-twig
-twigged
-twiggy
-twigs
-twilight
-twilit
-twill
-twin
-twine
-twined
-twines
-twinge
-twinges
-twining
-twinkle
-twinkled
-twinkles
-twinkling
-twinned
-twinning
-twins
-twirl
-twirled
-twirling
-twirls
-twist
-twisted
-twister
-twisters
-twisting
-twists
-twisty
-twit
-twitch
-twitched
-twitches
-twitching
-twitchy
-twitter
-twittered
-twittering
-two
-twodimensional
-twofaced
-twofold
-twosome
-tycoon
-tycoons
-tying
-tyke
-tykes
-type
-typecast
-typecasting
-typed
-typeface
-typefaces
-typeless
-types
-typescript
-typescripts
-typeset
-typesets
-typesetter
-typesetters
-typesetting
-typewriter
-typewriters
-typewriting
-typewritten
-typhoid
-typhoon
-typhoons
-typhus
-typical
-typicality
-typically
-typified
-typifies
-typify
-typifying
-typing
-typings
-typist
-typists
-typographer
-typographers
-typographic
-typographical
-typographically
-typography
-typological
-typologically
-typologies
-typology
-tyrannic
-tyrannical
-tyrannically
-tyrannicide
-tyrannies
-tyrannise
-tyrannised
-tyrannous
-tyranny
-tyrant
-tyrants
-tyre
-tyres
-uboats
-udder
-udders
-ufo
-uganda
-ugandan
-uglier
-ugliest
-uglification
-ugliness
-ugly
-uhuh
-uke
-ukraine
-ukulele
-ukuleles
-ulcer
-ulcerate
-ulcerated
-ulceration
-ulcerations
-ulcerous
-ulcers
-ulster
-ulsters
-ulterior
-ultimacy
-ultimate
-ultimately
-ultimatum
-ultimatums
-ultimo
-ultra
-ultramarine
-ultramontane
-ultrasonic
-ultrasonics
-ultrasound
-ultraviolet
-umbilical
-umbilicus
-umbra
-umbrae
-umbrage
-umbrageous
-umbras
-umbrella
-umbrellas
-umlaut
-umlauts
-umpire
-umpired
-umpires
-umpiring
-umpteen
-umpteenth
-unabashed
-unabashedly
-unabated
-unable
-unabridged
-unabsorbed
-unacceptability
-unacceptable
-unacceptably
-unaccepted
-unaccommodating
-unaccompanied
-unaccountability
-unaccountable
-unaccountably
-unaccounted
-unaccustomed
-unachievable
-unacknowledged
-unacquainted
-unactivated
-unadapted
-unadaptive
-unaddressable
-unaddressed
-unadjusted
-unadorned
-unadulterated
-unadventurous
-unadvertised
-unaesthetic
-unaffected
-unaffectedly
-unaffiliated
-unaffordable
-unafraid
-unaided
-unaligned
-unalike
-unallocated
-unalloyed
-unalterable
-unalterably
-unaltered
-unambiguity
-unambiguous
-unambiguously
-unambitious
-unamended
-unamused
-unanimity
-unanimous
-unanimously
-unannotated
-unannounced
-unanswerable
-unanswered
-unanticipated
-unapologetic
-unappealing
-unappeased
-unappetising
-unappreciated
-unappreciative
-unapproachable
-unapproved
-unapt
-unarchived
-unarguable
-unarguably
-unarm
-unarmed
-unarms
-unaroused
-unarticulated
-unary
-unashamed
-unashamedly
-unasked
-unassailable
-unassailed
-unassertive
-unassigned
-unassisted
-unassociated
-unassuaged
-unassuming
-unattached
-unattainable
-unattainably
-unattained
-unattended
-unattenuated
-unattractive
-unattractiveness
-unattributable
-unattributed
-unaudited
-unauthenticated
-unauthorised
-unavailability
-unavailable
-unavailing
-unavailingly
-unavenged
-unavoidable
-unavoidably
-unawakened
-unaware
-unawareness
-unawares
-unawed
-unbalance
-unbalanced
-unbalances
-unbalancing
-unbanned
-unbanning
-unbaptised
-unbar
-unbarred
-unbars
-unbearable
-unbearably
-unbeatable
-unbeaten
-unbecoming
-unbeknown
-unbeknownst
-unbelievability
-unbelievable
-unbelievably
-unbelieved
-unbeliever
-unbelievers
-unbelieving
-unbend
-unbending
-unbent
-unbiased
-unbiasedly
-unbiassed
-unbiassedly
-unbidden
-unbind
-unbleached
-unblemished
-unblinking
-unblinkingly
-unblock
-unblocked
-unblocking
-unbloodied
-unboiled
-unbolt
-unbolted
-unbooked
-unborn
-unbosom
-unbothered
-unbound
-unbounded
-unbowed
-unbraced
-unbracketed
-unbranded
-unbreakability
-unbreakable
-unbridgeable
-unbridged
-unbridled
-unbroken
-unbruised
-unbuckle
-unbuckled
-unbuckling
-unbundled
-unburden
-unburdened
-unburdening
-unburied
-unburned
-unburnt
-unbutton
-unbuttoned
-unbuttoning
-uncalibrated
-uncalled
-uncancelled
-uncannily
-uncanny
-uncapped
-uncared
-uncaring
-uncased
-uncatalogued
-uncaught
-unceasing
-unceasingly
-uncelebrated
-uncensored
-unceremoniously
-uncertain
-uncertainly
-uncertainties
-uncertainty
-unchain
-unchained
-unchaining
-unchallengeable
-unchallenged
-unchangeable
-unchanged
-unchanging
-unchaperoned
-uncharacteristic
-uncharacteristically
-uncharged
-uncharismatic
-uncharitable
-uncharitably
-uncharted
-unchartered
-uncheckable
-unchecked
-unchristened
-unchristian
-unchronicled
-uncircumcised
-uncivil
-uncivilised
-unclad
-unclaimed
-unclasped
-unclasping
-unclassifiable
-unclassified
-uncle
-unclean
-uncleanliness
-uncleanly
-unclear
-uncleared
-unclench
-unclenched
-unclenching
-uncles
-unclesam
-unclimbable
-unclimbed
-unclog
-unclosed
-unclothed
-unclouded
-uncluttered
-uncoil
-uncoiled
-uncoiling
-uncoils
-uncollated
-uncollected
-uncollimated
-uncombed
-uncomely
-uncomfortable
-uncomfortableness
-uncomfortably
-uncommitted
-uncommon
-uncommonly
-uncommunicative
-uncompetitive
-uncompetitiveness
-uncompilable
-uncomplaining
-uncomplainingly
-uncompleted
-uncomplicated
-uncomplimentary
-uncomprehending
-uncomprehendingly
-uncompressed
-uncompromisable
-uncompromising
-uncompromisingly
-unconcern
-unconcerned
-unconcernedly
-unconditional
-unconditionally
-unconditioned
-unconfined
-unconfirmed
-unconfused
-uncongenial
-unconnected
-unconquerable
-unconquered
-unconscionable
-unconscionably
-unconscious
-unconsciously
-unconsciousness
-unconsecrated
-unconsidered
-unconsoled
-unconstitutional
-unconstitutionally
-unconstrained
-unconsumed
-uncontainable
-uncontaminated
-uncontentious
-uncontested
-uncontrollable
-uncontrollably
-uncontrolled
-uncontroversial
-uncontroversially
-unconventional
-unconventionally
-unconverted
-unconvinced
-unconvincing
-unconvincingly
-uncooked
-uncooperative
-uncoordinated
-uncorked
-uncorrectable
-uncorrected
-uncorrelated
-uncorroborated
-uncorrupted
-uncountable
-uncountably
-uncounted
-uncouple
-uncoupled
-uncouth
-uncouthness
-uncover
-uncovered
-uncovering
-uncovers
-uncrackable
-uncreased
-uncreated
-uncreative
-uncredited
-uncritical
-uncritically
-uncross
-uncrossable
-uncrossed
-uncrowded
-uncrowned
-uncrushable
-unction
-unctuous
-unctuously
-uncultivated
-uncultured
-uncured
-uncurled
-uncut
-undamaged
-undated
-undaunted
-undead
-undeceived
-undecidability
-undecidable
-undecided
-undeclared
-undecorated
-undefeated
-undefended
-undefiled
-undefinable
-undefined
-undeliverable
-undelivered
-undemanding
-undemocratic
-undemocratically
-undemonstrative
-undeniable
-undeniably
-under
-underachievement
-underachieving
-underarm
-underbelly
-underbody
-undercarriage
-underclass
-underclothes
-underclothing
-undercoat
-undercoating
-undercooked
-undercover
-undercroft
-undercurrent
-undercurrents
-undercut
-undercuts
-undercutting
-underdeveloped
-underdevelopment
-underdog
-underdogs
-underdone
-undereducated
-underemphasis
-underemployment
-underestimate
-underestimated
-underestimates
-underestimating
-underestimation
-underexploited
-underfed
-underfloor
-underflow
-underfoot
-underframe
-underfund
-underfunded
-underfunding
-undergarment
-undergarments
-undergo
-undergoes
-undergoing
-undergone
-undergraduate
-undergraduates
-underground
-undergrounds
-undergrowth
-underhand
-underinvestment
-underlain
-underlay
-underlie
-underlies
-underline
-underlined
-underlines
-underling
-underlings
-underlining
-underlinings
-underloaded
-underlying
-undermanned
-undermine
-undermined
-undermines
-undermining
-underneath
-undernourished
-undernourishment
-underpaid
-underpants
-underparts
-underpass
-underpay
-underpaying
-underperformance
-underperformed
-underpin
-underpinned
-underpinning
-underpinnings
-underpins
-underplay
-underplayed
-underplays
-underpopulated
-underpopulation
-underpowered
-underpriced
-underpricing
-underprivileged
-underrate
-underrated
-underscored
-undersea
-underside
-undersides
-undersigned
-undersized
-underskirt
-understaffed
-understand
-understandability
-understandable
-understandably
-understander
-understanding
-understandingly
-understandings
-understands
-understate
-understated
-understatement
-understates
-understating
-understocked
-understood
-understorey
-understudy
-undertake
-undertaken
-undertaker
-undertakers
-undertakes
-undertaking
-undertakings
-undertone
-undertones
-undertook
-underutilised
-undervalued
-undervalues
-undervaluing
-underwater
-underwear
-underweight
-underwent
-underwood
-underworld
-underwrite
-underwriter
-underwriters
-underwrites
-underwriting
-underwritten
-underwrote
-undeserved
-undeservedly
-undeserving
-undesirability
-undesirable
-undesirables
-undesirably
-undesired
-undetectability
-undetectable
-undetectably
-undetected
-undetermined
-undeterred
-undetonated
-undeveloped
-undiagnosable
-undiagnosed
-undid
-undifferentiated
-undigested
-undignified
-undiluted
-undiminished
-undiplomatic
-undirected
-undiscerning
-undisciplined
-undisclosed
-undiscovered
-undiscriminated
-undiscriminating
-undisguised
-undisguisedly
-undismayed
-undisplayed
-undisputed
-undissipated
-undistinguished
-undistorted
-undistributed
-undisturbed
-undivided
-undo
-undocumented
-undoing
-undoings
-undomesticated
-undone
-undoubted
-undoubtedly
-undress
-undressed
-undressing
-undrinkability
-undrinkable
-undroppable
-undue
-undulate
-undulated
-undulates
-undulating
-undulation
-undulations
-unduly
-undying
-unearned
-unearth
-unearthed
-unearthing
-unearthly
-unearths
-unease
-uneasier
-uneasiest
-uneasily
-uneasiness
-uneasy
-uneatable
-uneaten
-uneconomic
-uneconomical
-unedifying
-unedited
-uneducated
-unelectable
-unelected
-unemotional
-unemotionally
-unemployable
-unemployed
-unemployment
-unencrypted
-unencumbered
-unending
-unendingly
-unendurable
-unenforceable
-unengaged
-unenlightened
-unenlightening
-unentered
-unenthusiastic
-unenthusiastically
-unenviable
-unequal
-unequalled
-unequally
-unequivocal
-unequivocally
-unergonomic
-unerring
-unerringly
-unescorted
-unestablished
-unethical
-unethically
-unevaluated
-uneven
-unevenly
-unevenness
-uneventful
-uneventfully
-unexacting
-unexamined
-unexceptionable
-unexceptional
-unexcited
-unexciting
-unexpanded
-unexpected
-unexpectedly
-unexpectedness
-unexpired
-unexplainable
-unexplained
-unexploded
-unexploited
-unexplored
-unexpressed
-unexpurgated
-unfailing
-unfailingly
-unfair
-unfairly
-unfairness
-unfaithful
-unfaithfulness
-unfalsifiable
-unfamiliar
-unfamiliarity
-unfancied
-unfashionable
-unfashionably
-unfasten
-unfastened
-unfastening
-unfathomable
-unfathomed
-unfatigued
-unfavourable
-unfavourably
-unfavoured
-unfeasible
-unfeasibly
-unfed
-unfeeling
-unfeelingly
-unfeigned
-unfelt
-unfeminine
-unfenced
-unfertilised
-unfetchable
-unfettered
-unfilled
-unfinished
-unfired
-unfirm
-unfit
-unfitness
-unfits
-unfitting
-unfix
-unfixed
-unflagging
-unflattering
-unflawed
-unfledged
-unflinching
-unflinchingly
-unfocused
-unfocussed
-unfold
-unfolded
-unfolding
-unfolds
-unforced
-unfordable
-unforeseeable
-unforeseen
-unforgettable
-unforgivable
-unforgivably
-unforgiven
-unforgiving
-unformed
-unforthcoming
-unfortunate
-unfortunately
-unfortunates
-unfounded
-unfreeze
-unfreezing
-unfrequented
-unfriendlier
-unfriendliest
-unfriendliness
-unfriendly
-unfrozen
-unfruitful
-unfulfillable
-unfulfilled
-unfunded
-unfunny
-unfurl
-unfurled
-unfurling
-unfurls
-unfurnished
-unfussy
-ungainly
-ungenerous
-ungenerously
-ungentlemanly
-ungerminated
-unglamorous
-unglazed
-ungodly
-ungovernable
-ungoverned
-ungraceful
-ungracious
-ungraciously
-ungrammatical
-ungrateful
-ungratefully
-ungrounded
-unguarded
-unguessable
-unguided
-ungulates
-unhampered
-unhand
-unhandy
-unhappier
-unhappiest
-unhappily
-unhappiness
-unhappy
-unharmed
-unhealthier
-unhealthiest
-unhealthily
-unhealthy
-unheard
-unheated
-unheeded
-unhelpful
-unhelpfully
-unheralded
-unheroic
-unhesitating
-unhesitatingly
-unhidden
-unhindered
-unhinge
-unhinged
-unholy
-unhonoured
-unhook
-unhooked
-unhooks
-unhoped
-unhuman
-unhurried
-unhurriedly
-unhurt
-unhygienic
-unhyphenated
-unicameral
-unicellular
-unicorn
-unicorns
-unicycle
-unicycles
-unicyclist
-unicyclists
-unideal
-unidentifiable
-unidentified
-unidirectional
-unifiable
-unification
-unified
-unifier
-unifies
-uniform
-uniformed
-uniformity
-uniformly
-uniforms
-unify
-unifying
-unilateral
-unilateralism
-unilateralist
-unilaterally
-unillustrated
-unimaginable
-unimaginably
-unimaginative
-unimaginatively
-unimagined
-unimpaired
-unimpeachable
-unimpeded
-unimplementable
-unimplemented
-unimportance
-unimportant
-unimpressed
-unimpressive
-unimproved
-unincorporated
-uninfected
-uninfluenced
-uninformative
-uninformatively
-uninformed
-uninhabitable
-uninhabited
-uninhibited
-uninhibitedly
-uninitialised
-uninitiated
-uninjured
-uninspired
-uninspiring
-uninsulated
-uninsurable
-uninsured
-unintellectual
-unintelligent
-unintelligible
-unintended
-unintentional
-unintentionally
-uninterested
-uninterestedly
-uninteresting
-uninterpretable
-uninterpreted
-uninterrupted
-uninterruptedly
-unintuitive
-uninvented
-uninvited
-uninviting
-uninvolved
-union
-unionisation
-unionised
-unionism
-unionist
-unionists
-unions
-unipolar
-unique
-uniquely
-uniqueness
-unisex
-unison
-unisons
-unissued
-unit
-unitary
-unite
-united
-unites
-unities
-uniting
-units
-unity
-universal
-universalism
-universalist
-universality
-universally
-universals
-universe
-universes
-universities
-university
-unjam
-unjammed
-unjamming
-unjaundiced
-unjust
-unjustifiable
-unjustifiably
-unjustified
-unjustly
-unjustness
-unkempt
-unkept
-unkind
-unkindest
-unkindly
-unkindness
-unknightly
-unknowable
-unknowing
-unknowingly
-unknown
-unknowns
-unlabelled
-unlace
-unlaced
-unlacing
-unladen
-unladylike
-unlamented
-unlatching
-unlawful
-unlawfully
-unlawfulness
-unleaded
-unlearn
-unlearned
-unleash
-unleashed
-unleashes
-unleashing
-unleavened
-unless
-unlicensed
-unlike
-unlikeable
-unlikeliest
-unlikelihood
-unlikeliness
-unlikely
-unlimited
-unlined
-unlink
-unlinked
-unlisted
-unlit
-unload
-unloaded
-unloading
-unloads
-unlock
-unlocked
-unlocking
-unlocks
-unloose
-unlovable
-unloved
-unlovely
-unloving
-unluckier
-unluckiest
-unluckily
-unlucky
-unmade
-unmagnified
-unmaintainable
-unmaintained
-unmaking
-unmanageable
-unmanageably
-unmanly
-unmanned
-unmannerly
-unmapped
-unmarked
-unmarried
-unmask
-unmasked
-unmasks
-unmatchable
-unmatched
-unmeasurable
-unmechanised
-unmeetable
-unmelodious
-unmemorable
-unmemorised
-unmentionable
-unmentionables
-unmentioned
-unmercifully
-unmerited
-unmet
-unmissable
-unmistakable
-unmistakably
-unmistakeable
-unmistakeably
-unmitigated
-unmixed
-unmnemonic
-unmodifiable
-unmodified
-unmolested
-unmonitored
-unmotivated
-unmounted
-unmoved
-unmoving
-unmusical
-unmusically
-unmutilated
-unmuzzled
-unnamed
-unnatural
-unnaturally
-unnavigable
-unnecessarily
-unnecessary
-unneeded
-unnerve
-unnerved
-unnerving
-unnervingly
-unnoted
-unnoticeable
-unnoticed
-unnumbered
-unobjectionable
-unobliging
-unobservable
-unobservant
-unobserved
-unobstructed
-unobtainable
-unobtrusive
-unobtrusively
-unoccupied
-unofficial
-unofficially
-unopened
-unopposed
-unoptimised
-unordered
-unorganised
-unoriginal
-unoriginality
-unorthodox
-unorthodoxy
-unowned
-unpack
-unpacked
-unpackers
-unpacking
-unpacks
-unpaid
-unpainted
-unpaired
-unpalatable
-unparalleled
-unpardonable
-unparodied
-unpasted
-unpasteurised
-unpatriotic
-unpaved
-unpeeled
-unperceived
-unpersonalised
-unpersuaded
-unpersuasive
-unperturbed
-unphysical
-unpick
-unpicked
-unpicking
-unplaced
-unplanned
-unplayability
-unplayable
-unpleasant
-unpleasantly
-unpleasantness
-unpleasing
-unploughed
-unplug
-unplugged
-unplugging
-unpoetical
-unpolished
-unpolluted
-unpopular
-unpopularity
-unpopulated
-unportable
-unpractical
-unpractised
-unprecedented
-unprecedentedly
-unpredictability
-unpredictable
-unpredictably
-unpredicted
-unprejudiced
-unpremeditated
-unprepared
-unpreparedness
-unprepossessing
-unpressurised
-unpretending
-unpretentious
-unprincipled
-unprintable
-unprinted
-unprivileged
-unproblematic
-unprocessed
-unproductive
-unprofessional
-unprofitable
-unprofitably
-unpromising
-unprompted
-unpronounceable
-unpronounced
-unprotected
-unprovable
-unproved
-unproven
-unprovoked
-unpublicised
-unpublishable
-unpublished
-unpunctual
-unpunctuality
-unpunished
-unqualified
-unquantifiable
-unquantified
-unquenchable
-unquestionable
-unquestionably
-unquestioned
-unquestioning
-unquestioningly
-unquiet
-unquote
-unquoted
-unraisable
-unravel
-unravelled
-unravelling
-unravels
-unreachable
-unreached
-unread
-unreadability
-unreadable
-unready
-unreal
-unrealisable
-unrealised
-unrealistic
-unrealistically
-unreality
-unreasonable
-unreasonableness
-unreasonably
-unreasoned
-unreasoning
-unreceived
-unreceptive
-unrecognisable
-unrecognisably
-unrecognised
-unrecommended
-unreconciled
-unreconstructed
-unrecorded
-unrecoverable
-unredeemed
-unreduced
-unrefereed
-unreferenced
-unreferencing
-unrefined
-unreflected
-unreformed
-unrefreshed
-unrefrigerated
-unregarded
-unregenerate
-unregistered
-unregulated
-unrehearsed
-unrelated
-unreleasable
-unreleased
-unrelenting
-unrelentingly
-unreliability
-unreliable
-unreliably
-unrelieved
-unremarkable
-unremarked
-unremembered
-unremitting
-unremittingly
-unrepairable
-unrepeatability
-unrepeatable
-unrepeated
-unrepentant
-unrepentantly
-unreported
-unrepresentable
-unrepresentative
-unrepresented
-unreproducible
-unrequested
-unrequited
-unreserved
-unreservedly
-unresisting
-unresistingly
-unresolvable
-unresolved
-unresponsive
-unresponsiveness
-unrest
-unrestrained
-unrestricted
-unrests
-unrevealed
-unrevealing
-unrevised
-unrewarded
-unrewarding
-unriddle
-unripe
-unrivalled
-unroll
-unrolled
-unrolling
-unromantic
-unruffled
-unruliness
-unruly
-unsaddled
-unsafe
-unsafely
-unsafeness
-unsaid
-unsaleable
-unsalted
-unsanitary
-unsatisfactorily
-unsatisfactoriness
-unsatisfactory
-unsatisfiable
-unsatisfied
-unsatisfying
-unsaturated
-unsaved
-unsavory
-unsavoury
-unscaled
-unscathed
-unscheduled
-unscientific
-unscramble
-unscrambled
-unscrambles
-unscrambling
-unscratched
-unscrew
-unscrewed
-unscrewing
-unscripted
-unscrupulous
-unseal
-unsealable
-unsealed
-unsealing
-unseasonable
-unseasonably
-unseasonal
-unseat
-unseated
-unseaworthiness
-unsecured
-unseeded
-unseeing
-unseeingly
-unseemly
-unseen
-unselected
-unselfconscious
-unselfconsciously
-unselfish
-unselfishly
-unselfishness
-unsellable
-unsensational
-unsent
-unsentimental
-unserviceable
-unserviced
-unset
-unsettle
-unsettled
-unsettling
-unshackled
-unshaded
-unshakable
-unshakeable
-unshaken
-unshaped
-unshapen
-unsharable
-unshared
-unshaved
-unshaven
-unsheathed
-unshielded
-unshockable
-unshod
-unshorn
-unshrinking
-unsighted
-unsightly
-unsigned
-unsimplified
-unsinkable
-unskilful
-unskilled
-unsliced
-unsmiling
-unsmilingly
-unsmooth
-unsociable
-unsocial
-unsoiled
-unsold
-unsolder
-unsolicited
-unsolvable
-unsolved
-unsophisticated
-unsophistication
-unsorted
-unsought
-unsound
-unsoundness
-unspanned
-unspeakable
-unspeakably
-unspecialised
-unspecific
-unspecified
-unspectacular
-unspent
-unspoiled
-unspoilt
-unspoken
-unsporting
-unstable
-unstack
-unstacked
-unstacking
-unstained
-unstamped
-unstated
-unsteadily
-unsteadiness
-unsteady
-unsterilised
-unsticking
-unstimulated
-unstinting
-unstintingly
-unstirred
-unstoppable
-unstoppably
-unstopped
-unstrapped
-unstressed
-unstretchable
-unstructured
-unstuck
-unsubdued
-unsubsidised
-unsubstantial
-unsubstantiated
-unsubstituted
-unsubtle
-unsubtly
-unsuccessful
-unsuccessfully
-unsuitability
-unsuitable
-unsuitableness
-unsuitably
-unsuited
-unsullied
-unsung
-unsupervised
-unsupportable
-unsupported
-unsuppressed
-unsure
-unsureness
-unsurfaced
-unsurpassable
-unsurpassed
-unsurprised
-unsurprising
-unsurprisingly
-unsurvivable
-unsuspected
-unsuspecting
-unsustainable
-unswappable
-unsweetened
-unswerving
-unswervingly
-unsympathetic
-unsympathetically
-unsystematic
-untactful
-untagged
-untainted
-untalented
-untamed
-untangle
-untangled
-untangling
-untapped
-untarnished
-untasted
-untaught
-untaxed
-untaxing
-untempered
-untenability
-untenable
-untended
-unterminated
-untestable
-untested
-untethered
-untextured
-unthinkable
-unthinkably
-unthinking
-unthinkingly
-unthoughtful
-untidier
-untidiest
-untidily
-untidiness
-untidy
-untie
-untied
-unties
-until
-untimely
-untiring
-untitled
-unto
-untold
-untouchable
-untouchables
-untouched
-untoward
-untraceable
-untraced
-untrained
-untrammelled
-untransformed
-untranslatable
-untranslated
-untransportable
-untrappable
-untreatable
-untreated
-untried
-untrodden
-untroubled
-untrue
-untrusted
-untrustworthy
-untrusty
-untruth
-untruthful
-untruthfully
-untruths
-unturned
-untutored
-untwist
-untwisted
-untying
-untyped
-untypical
-untypically
-unusable
-unusably
-unused
-unusual
-unusually
-unutterable
-unutterably
-unvalidated
-unvalued
-unvanquished
-unvarnished
-unvarying
-unvaryingly
-unveil
-unveiled
-unveiling
-unveils
-unventilated
-unverifiable
-unverified
-unversed
-unvisitable
-unvisited
-unvoiced
-unwanted
-unwarily
-unwarmed
-unwarned
-unwarrantable
-unwarrantably
-unwarranted
-unwary
-unwashed
-unwatchable
-unwatched
-unwavering
-unwaveringly
-unweaned
-unwearied
-unweary
-unwed
-unwedded
-unwedge
-unweighted
-unwelcome
-unwelcoming
-unwell
-unwholesome
-unwieldy
-unwilling
-unwillingly
-unwillingness
-unwind
-unwindable
-unwinding
-unwinds
-unwisdom
-unwise
-unwisely
-unwisest
-unwitting
-unwittingly
-unwontedly
-unworkability
-unworkable
-unworldly
-unworn
-unworried
-unworthily
-unworthiness
-unworthy
-unwound
-unwounded
-unwrap
-unwrapped
-unwrapping
-unwraps
-unwritten
-unyielding
-unzip
-unzipped
-unzipping
-unzips
-up
-upbeat
-upbraid
-upbraided
-upbraiding
-upbraids
-upbringing
-upbringings
-upcast
-upcoming
-updatability
-update
-updated
-updater
-updates
-updating
-upended
-upfield
-upfront
-upgradable
-upgrade
-upgradeable
-upgraded
-upgrades
-upgrading
-upgradings
-upheaval
-upheavals
-upheld
-uphill
-uphold
-upholder
-upholders
-upholding
-upholds
-upholster
-upholstered
-upholsterer
-upholsterers
-upholstery
-upkeep
-upland
-uplands
-uplift
-uplifted
-uplifting
-uplifts
-uplink
-uplinks
-upload
-uploaded
-uploads
-upmarket
-upmost
-upon
-upped
-upper
-uppercase
-upperclass
-uppercut
-uppermost
-uppers
-upraised
-uprate
-uprated
-uprating
-upright
-uprightly
-uprightness
-uprights
-uprise
-uprising
-uprisings
-upriver
-uproar
-uproarious
-uproariously
-uproars
-uproo
-uproot
-uprooted
-uprooting
-uproots
-ups
-upset
-upsets
-upsetting
-upshot
-upside
-upsidedown
-upsilon
-upstage
-upstaged
-upstages
-upstaging
-upstairs
-upstanding
-upstart
-upstarts
-upstream
-upsurge
-upsurges
-upswing
-uptake
-upthrust
-uptotheminute
-uptown
-upturn
-upturned
-upward
-upwardly
-upwards
-upwind
-uranium
-uranus
-urban
-urbane
-urbanely
-urbanisation
-urbanise
-urbanised
-urbanising
-urbanites
-urbanity
-urchin
-urchins
-urea
-ureter
-ureters
-urethane
-urethra
-urethrae
-urethral
-urethras
-urethritis
-urge
-urged
-urgency
-urgent
-urgently
-urges
-urging
-urgings
-urinary
-urine
-urn
-urns
-urologist
-ursine
-urticaria
-uruguay
-us
-usability
-usable
-usage
-usages
-usances
-use
-useable
-used
-useful
-usefully
-usefulness
-useless
-uselessly
-uselessness
-user
-userfriendliness
-userfriendly
-users
-uses
-usher
-ushered
-usherette
-ushering
-ushers
-using
-usual
-usually
-usurer
-usurers
-usurious
-usurp
-usurpation
-usurped
-usurper
-usurping
-usury
-utah
-utensil
-utensils
-uteri
-uterine
-uterus
-utilisation
-utilise
-utilised
-utilises
-utilising
-utilitarian
-utilitarianism
-utilitarians
-utilities
-utility
-utmost
-utopia
-utopian
-utopians
-utopias
-utter
-utterance
-utterances
-uttered
-utterer
-uttering
-utterly
-uttermost
-utters
-uturns
-uvula
-uvular
-vacancies
-vacancy
-vacant
-vacantly
-vacate
-vacated
-vacates
-vacating
-vacation
-vacations
-vaccinate
-vaccinated
-vaccinating
-vaccination
-vaccinations
-vaccine
-vaccines
-vacillate
-vacillating
-vacillation
-vacillations
-vacua
-vacuity
-vacuole
-vacuoles
-vacuous
-vacuously
-vacuum
-vacuums
-vaduz
-vagabond
-vagabonds
-vagrancy
-vagrant
-vagrants
-vague
-vaguely
-vagueness
-vaguer
-vaguest
-vain
-vainer
-vainest
-vainglorious
-vainglory
-vainly
-valance
-vale
-valediction
-valedictory
-valence
-valencies
-valency
-valentine
-vales
-valet
-valets
-valhalla
-valiant
-valiantly
-valid
-validate
-validated
-validates
-validating
-validation
-validity
-validly
-valise
-valley
-valleys
-valour
-valuable
-valuables
-valuation
-valuations
-value
-valueadded
-valued
-valueformoney
-valueless
-valuer
-valuers
-values
-valuing
-valuta
-valve
-valves
-vamp
-vamped
-vamper
-vamping
-vampire
-vampires
-vamps
-van
-vanadium
-vandal
-vandalise
-vandalised
-vandalising
-vandalism
-vandals
-vane
-vaned
-vanes
-vangogh
-vanguard
-vanilla
-vanish
-vanished
-vanishes
-vanishing
-vanishingly
-vanities
-vanity
-vanquish
-vanquished
-vanquishing
-vans
-vantage
-vapid
-vaporisation
-vaporise
-vaporised
-vaporising
-vaporous
-vapour
-vapours
-variability
-variable
-variables
-variably
-variance
-variances
-variant
-variants
-variate
-variates
-variation
-variational
-variations
-varicose
-varied
-variegated
-varies
-varietal
-varieties
-variety
-various
-variously
-varnish
-varnished
-varnishes
-varnishing
-varsity
-vary
-varying
-vascular
-vase
-vasectomies
-vasectomy
-vaseline
-vases
-vassal
-vassalage
-vassals
-vast
-vaster
-vastly
-vastness
-vat
-vatican
-vats
-vault
-vaulted
-vaulting
-vaults
-vaunted
-vaunting
-veal
-vector
-vectored
-vectoring
-vectorisation
-vectorised
-vectors
-veer
-veered
-veering
-veers
-veg
-vegan
-vegans
-vegetable
-vegetables
-vegetarian
-vegetarianism
-vegetarians
-vegetate
-vegetated
-vegetating
-vegetation
-vegetational
-vegetative
-vegetive
-veggies
-vehemence
-vehement
-vehemently
-vehicle
-vehicles
-vehicular
-veil
-veiled
-veiling
-veils
-vein
-veined
-veins
-velar
-veld
-veldt
-vellum
-velocipede
-velocities
-velocity
-velodrome
-velour
-velum
-velvet
-velveteen
-velveteens
-velvets
-velvety
-venal
-venality
-vend
-venders
-vendetta
-vendettas
-vending
-vendor
-vendors
-vends
-veneer
-veneered
-veneers
-venerable
-venerate
-venerated
-venerates
-venerating
-veneration
-venereal
-venetian
-vengeance
-vengeful
-vengefully
-venial
-venice
-venison
-venom
-venomous
-venomously
-venoms
-venose
-venous
-vent
-vented
-ventilate
-ventilated
-ventilating
-ventilation
-ventilator
-ventilators
-venting
-ventings
-ventral
-ventrally
-ventricle
-ventricles
-ventricular
-ventriloquism
-ventriloquist
-ventriloquists
-ventriloquy
-vents
-venture
-ventured
-venturer
-ventures
-venturesome
-venturing
-venue
-venues
-venus
-veracity
-veranda
-verandah
-verandahs
-verandas
-verb
-verbal
-verbalise
-verbally
-verbals
-verbatim
-verbiage
-verbose
-verbosely
-verboseness
-verbosity
-verbs
-verdant
-verdict
-verdicts
-verdigris
-verdure
-verge
-verged
-verger
-verges
-verging
-verifiability
-verifiable
-verification
-verifications
-verified
-verifier
-verifiers
-verifies
-verify
-verifying
-verily
-verisimilitude
-veritable
-veritably
-verities
-verity
-vermilion
-vermin
-verminous
-vernacular
-vernal
-vernier
-verona
-versatile
-versatility
-verse
-versed
-verses
-versicle
-versification
-versifier
-version
-versions
-versus
-vertebra
-vertebrae
-vertebral
-vertebrate
-vertebrates
-vertex
-vertical
-verticality
-vertically
-verticals
-vertices
-vertiginous
-vertigo
-verve
-very
-vesicle
-vesicles
-vesicular
-vespers
-vessel
-vessels
-vest
-vestal
-vested
-vestibular
-vestibule
-vestibules
-vestige
-vestiges
-vestigial
-vesting
-vestment
-vestments
-vestry
-vests
-vesuvius
-vet
-veteran
-veterans
-veterinary
-veto
-vetoed
-vetoing
-vets
-vetted
-vetting
-vex
-vexation
-vexations
-vexatious
-vexed
-vexes
-vexing
-via
-viability
-viable
-viably
-viaduct
-viaducts
-vial
-vials
-vibes
-vibrancy
-vibrant
-vibrantly
-vibrate
-vibrated
-vibrates
-vibrating
-vibration
-vibrational
-vibrationally
-vibrations
-vibrato
-vibrator
-vibrators
-vibratory
-vicar
-vicarage
-vicarages
-vicarious
-vicariously
-vicars
-vice
-vicechancellor
-vicechancellors
-vicepresidency
-vicepresident
-vicepresidential
-vicepresidents
-viceroy
-viceroys
-vices
-vicinities
-vicinity
-vicious
-viciously
-viciousness
-vicissitude
-vicissitudes
-victim
-victimisation
-victimise
-victimised
-victimises
-victimising
-victimless
-victims
-victor
-victoria
-victories
-victorious
-victoriously
-victors
-victory
-victualling
-victuals
-video
-videoconferencing
-videodisc
-videoed
-videoing
-videophone
-videos
-videotape
-videotaped
-videotapes
-videotaping
-vie
-vied
-vienna
-vier
-vies
-view
-viewable
-viewed
-viewer
-viewers
-viewfinder
-viewfinders
-viewing
-viewings
-viewpoint
-viewpoints
-views
-vigil
-vigilance
-vigilant
-vigilante
-vigilantes
-vigilantly
-vigils
-vignette
-vignettes
-vigorous
-vigorously
-vigour
-viking
-vikings
-vile
-vilely
-vileness
-viler
-vilest
-vilification
-vilified
-vilify
-vilifying
-villa
-village
-villager
-villagers
-villages
-villain
-villainous
-villains
-villainy
-villas
-vim
-vims
-vindicate
-vindicated
-vindicates
-vindicating
-vindication
-vindictive
-vindictively
-vindictiveness
-vine
-vinegar
-vinegars
-vines
-vineyard
-vineyards
-vino
-vintage
-vintages
-vintner
-vinyl
-vinyls
-viol
-viola
-violas
-violate
-violated
-violates
-violating
-violation
-violations
-violator
-violators
-violence
-violent
-violently
-violet
-violets
-violin
-violinist
-violinists
-violins
-violist
-viper
-vipers
-virago
-viral
-virgil
-virgin
-virginal
-virginia
-virginity
-virgins
-virile
-virility
-virology
-virtual
-virtually
-virtue
-virtues
-virtuosi
-virtuosic
-virtuosity
-virtuoso
-virtuous
-virtuously
-virulence
-virulent
-virulently
-virus
-viruses
-visa
-visage
-visas
-viscose
-viscosity
-viscount
-viscounts
-viscous
-vise
-visibilities
-visibility
-visible
-visibly
-vision
-visionaries
-visionary
-visions
-visit
-visitable
-visitant
-visitation
-visitations
-visited
-visiting
-visitor
-visitors
-visits
-visor
-visors
-vista
-vistas
-visual
-visualisation
-visualise
-visualised
-visualising
-visually
-visuals
-vital
-vitalise
-vitality
-vitally
-vitals
-vitamin
-vitamins
-vitiate
-vitiated
-vitiates
-vitiating
-vitreous
-vitrified
-vitriol
-vitriolic
-vituperate
-vituperation
-vituperative
-viva
-vivacious
-vivaciously
-vivacity
-vivid
-vividly
-vividness
-vivified
-vivisected
-vivisection
-vivisectionist
-vivisectionists
-vixen
-vixens
-vizier
-vocabularies
-vocabulary
-vocal
-vocalisation
-vocalisations
-vocalise
-vocalised
-vocalising
-vocalist
-vocalists
-vocally
-vocals
-vocation
-vocational
-vocationally
-vocations
-vocative
-vociferous
-vociferously
-vodka
-vogue
-voice
-voiced
-voiceless
-voices
-voicing
-voicings
-void
-voidable
-voided
-voiding
-voids
-voile
-volatile
-volatiles
-volatility
-volcanic
-volcanically
-volcanism
-volcano
-vole
-voles
-volga
-volition
-volley
-volleyball
-volleyed
-volleying
-volleys
-volt
-voltage
-voltages
-voltmeter
-volts
-volubility
-voluble
-volubly
-volume
-volumes
-volumetric
-voluminous
-voluntarily
-voluntary
-volunteer
-volunteered
-volunteering
-volunteers
-voluptuous
-voluptuously
-voluptuousness
-volute
-vomit
-vomited
-vomiting
-vomits
-voodoo
-voracious
-voraciously
-voracity
-vortex
-vortexes
-vortices
-vorticity
-vote
-voted
-voteless
-voter
-voters
-votes
-voting
-votive
-vouch
-vouched
-voucher
-vouchers
-vouches
-vouchsafe
-vouchsafed
-vouchsafing
-vow
-vowed
-vowel
-vowels
-vowing
-vows
-voyage
-voyaged
-voyager
-voyagers
-voyages
-voyaging
-voyeur
-voyeurism
-voyeuristic
-voyeurs
-vulcan
-vulcanise
-vulcanised
-vulcanism
-vulcanologist
-vulgar
-vulgarities
-vulgarity
-vulgarly
-vulgate
-vulnerabilities
-vulnerability
-vulnerable
-vulpine
-vulture
-vultures
-vulva
-vying
-wackier
-wacky
-wad
-wadding
-waddle
-waddled
-waddles
-waddling
-wade
-waded
-wader
-waders
-wades
-wadi
-wading
-wadings
-wadis
-wads
-wafer
-wafers
-waffle
-waffled
-waffles
-waft
-wafted
-wafting
-wafts
-wafture
-wag
-wage
-waged
-wager
-wagered
-wagerer
-wagers
-wages
-wagged
-waggery
-wagging
-waggish
-waggishly
-waggle
-waggled
-waggles
-waggling
-waggly
-waggoners
-waggons
-waging
-wagon
-wagons
-wags
-wagtail
-wagtails
-waif
-waifs
-wail
-wailed
-wailer
-wailing
-wails
-wainscot
-wainscoting
-waist
-waistband
-waistcoat
-waistcoats
-waistline
-waists
-wait
-waited
-waiter
-waiters
-waiting
-waitress
-waitresses
-waits
-waive
-waived
-waiver
-waivers
-waives
-waiving
-wake
-waked
-wakeful
-wakefulness
-waken
-wakened
-wakening
-wakens
-wakes
-waking
-wales
-walk
-walkable
-walkabout
-walkabouts
-walked
-walker
-walkers
-walkietalkie
-walkietalkies
-walking
-walkout
-walkover
-walks
-walkway
-walkways
-wall
-wallabies
-wallaby
-wallchart
-walled
-wallet
-wallets
-wallflower
-wallflowers
-walling
-wallop
-wallow
-wallowed
-wallowing
-wallows
-wallpaper
-wallpapering
-wallpapers
-walls
-walltowall
-walnut
-walnuts
-walrus
-walruses
-waltz
-waltzed
-waltzes
-waltzing
-wan
-wand
-wander
-wandered
-wanderer
-wanderers
-wandering
-wanderings
-wanderlust
-wanders
-wands
-wane
-waned
-wanes
-waning
-wanly
-want
-wanted
-wanting
-wanton
-wantonly
-wantonness
-wants
-wapiti
-wapitis
-war
-warble
-warbled
-warbler
-warblers
-warbles
-warbling
-ward
-warded
-warden
-wardens
-warder
-warders
-warding
-wardrobe
-wardrobes
-wards
-wardship
-ware
-warehouse
-warehoused
-warehouseman
-warehousemen
-warehouses
-warehousing
-wares
-warfare
-warhead
-warheads
-warhorse
-warhorses
-wariest
-warily
-wariness
-waring
-warlike
-warlock
-warlocks
-warlord
-warlords
-warm
-warmblooded
-warmed
-warmer
-warmers
-warmest
-warmhearted
-warmheartedness
-warming
-warmish
-warmly
-warmness
-warmonger
-warms
-warmth
-warmup
-warn
-warned
-warners
-warning
-warningly
-warnings
-warns
-warp
-warpaint
-warpath
-warped
-warping
-warplanes
-warps
-warrant
-warranted
-warranties
-warranting
-warrants
-warranty
-warred
-warren
-warrens
-warring
-warrior
-warriors
-wars
-warsaw
-warship
-warships
-wart
-warthog
-warthogs
-wartime
-warts
-warty
-wary
-was
-wash
-washable
-washbasin
-washbasins
-washboard
-washday
-washed
-washer
-washers
-washerwoman
-washerwomen
-washes
-washing
-washings
-washington
-washout
-washstand
-washy
-wasp
-waspish
-waspishly
-wasps
-waspwaisted
-wast
-wastage
-wastages
-waste
-wasted
-wasteful
-wastefully
-wastefulness
-wasteland
-wastelands
-wastepaper
-waster
-wasters
-wastes
-wasting
-wastings
-wastrel
-watch
-watchable
-watchdog
-watchdogs
-watched
-watcher
-watchers
-watches
-watchful
-watchfully
-watchfulness
-watching
-watchmaker
-watchmakers
-watchman
-watchmen
-watchtower
-watchtowers
-watchword
-watchwords
-water
-waterbed
-waterbeds
-watercolour
-watercolourists
-watercolours
-watercooled
-watercourse
-watercourses
-watercress
-watered
-waterfall
-waterfalls
-waterfowl
-waterfront
-waterglass
-waterhole
-waterholes
-watering
-waterless
-waterline
-waterlogged
-waterloo
-waterman
-watermark
-watermarks
-watermelon
-watermelons
-watermen
-watermill
-watermills
-waterproof
-waterproofed
-waterproofing
-waterproofs
-waterresistant
-waters
-watershed
-watersheds
-waterside
-waterskiing
-watersoluble
-waterspouts
-watertable
-watertight
-waterway
-waterways
-waterwheel
-waterwheels
-waterworks
-watery
-watt
-wattage
-wattle
-watts
-wave
-waveband
-wavebands
-waved
-waveform
-waveforms
-wavefront
-waveguide
-waveguides
-wavelength
-wavelengths
-wavelet
-wavelets
-wavelike
-waver
-wavered
-waverers
-wavering
-wavers
-waves
-wavier
-waviest
-wavily
-waving
-wavings
-wavy
-wax
-waxed
-waxen
-waxes
-waxing
-waxpaper
-waxwork
-waxworks
-waxy
-way
-wayout
-ways
-wayside
-wayward
-waywardly
-waywardness
-we
-weak
-weaken
-weakened
-weakening
-weakens
-weaker
-weakest
-weakish
-weakkneed
-weakling
-weaklings
-weakly
-weakminded
-weakness
-weaknesses
-weal
-wealth
-wealthier
-wealthiest
-wealthy
-wean
-weaned
-weaning
-weanling
-weans
-weapon
-weaponry
-weapons
-wear
-wearable
-wearer
-wearers
-wearied
-wearier
-wearies
-weariest
-wearily
-weariness
-wearing
-wearisome
-wears
-weary
-wearying
-wearyingly
-weasel
-weaselling
-weaselly
-weasels
-weather
-weatherbeaten
-weatherbound
-weathercock
-weathercocks
-weathered
-weathering
-weatherman
-weathermen
-weatherproof
-weathers
-weathervane
-weatherworn
-weave
-weaved
-weaver
-weavers
-weaves
-weaving
-weavings
-web
-webbed
-webbing
-webby
-webfoot
-webs
-website
-wed
-wedded
-wedding
-weddings
-wedge
-wedged
-wedges
-wedging
-wedlock
-weds
-wee
-weed
-weeded
-weedier
-weediest
-weeding
-weedkiller
-weedkillers
-weeds
-weedy
-week
-weekday
-weekdays
-weekend
-weekenders
-weekends
-weeklies
-weekly
-weeks
-ween
-weeny
-weep
-weeper
-weeping
-weepings
-weeps
-weepy
-weevil
-weevils
-weigh
-weighbridge
-weighed
-weighing
-weighs
-weight
-weighted
-weightier
-weightiest
-weightily
-weighting
-weightings
-weightless
-weightlessly
-weightlessness
-weightlifter
-weightlifters
-weightlifting
-weights
-weighty
-weir
-weird
-weirder
-weirdest
-weirdly
-weirdness
-weirdo
-weirs
-welcome
-welcomed
-welcomer
-welcomes
-welcoming
-weld
-welded
-welder
-welders
-welding
-welds
-welfare
-well
-welladjusted
-wellbalanced
-wellbehaved
-wellbeing
-wellbeloved
-wellborn
-wellbred
-wellbuilt
-wellchosen
-wellconnected
-welldefined
-welldeserved
-welldesigned
-welldeveloped
-welldisposed
-welldressed
-wellearned
-welled
-welleducated
-wellendowed
-wellequipped
-wellestablished
-wellfed
-wellformed
-wellfounded
-wellgrounded
-wellhead
-wellinformed
-welling
-wellington
-wellingtons
-wellintentioned
-wellkept
-wellknown
-wellliked
-wellloved
-wellmade
-wellmannered
-wellmarked
-wellmatched
-wellmeaning
-wellmeant
-welloff
-wellordered
-wellorganised
-wellpaid
-wellplaced
-wellprepared
-wellpreserved
-wellread
-wellreceived
-wellrounded
-wells
-wellspoken
-wellstructured
-wellsupported
-welltaken
-wellthoughtout
-welltimed
-welltodo
-welltried
-wellused
-wellwisher
-wellwishers
-wellworn
-welly
-welsh
-welshman
-welt
-welter
-weltering
-welters
-welterweight
-welts
-wench
-wenches
-wend
-wended
-wending
-wends
-went
-wept
-were
-werewolf
-werewolves
-west
-westbound
-westerly
-western
-westerner
-westerners
-westernisation
-westernised
-westernmost
-westerns
-westward
-westwards
-wet
-wether
-wetland
-wetlands
-wetly
-wetness
-wets
-wetsuit
-wetsuits
-wettable
-wetted
-wetter
-wettest
-wetting
-whack
-whacked
-whacker
-whacko
-whacks
-whale
-whalebone
-whaler
-whalers
-whales
-whaling
-wham
-whap
-wharf
-wharfs
-wharves
-what
-whatever
-whatnot
-whatsoever
-wheals
-wheat
-wheatears
-wheaten
-wheatgerm
-wheats
-whee
-wheedle
-wheedled
-wheedling
-wheel
-wheelbarrow
-wheelbarrows
-wheelbase
-wheelchair
-wheelchairs
-wheeled
-wheeler
-wheelers
-wheelhouse
-wheelie
-wheeling
-wheels
-wheelwright
-wheelwrights
-wheeze
-wheezed
-wheezes
-wheezing
-wheezy
-whelk
-whelked
-whelks
-whelp
-when
-whence
-whenever
-where
-whereabouts
-whereas
-whereby
-wherefore
-wherefores
-wherein
-whereof
-whereon
-wheresoever
-whereto
-whereupon
-wherever
-wherewith
-wherewithal
-wherry
-whet
-whether
-whetstone
-whetstones
-whetted
-whetting
-whey
-which
-whichever
-whiff
-whiffs
-while
-whiled
-whiles
-whiling
-whilst
-whim
-whimper
-whimpered
-whimpering
-whimpers
-whims
-whimsical
-whimsically
-whimsy
-whine
-whined
-whines
-whining
-whinnied
-whinny
-whinnying
-whip
-whipcord
-whiplash
-whipped
-whipper
-whippet
-whippets
-whipping
-whippy
-whips
-whir
-whirl
-whirled
-whirligig
-whirling
-whirlpool
-whirlpools
-whirls
-whirlwind
-whirlwinds
-whirr
-whirred
-whirring
-whisk
-whisked
-whisker
-whiskers
-whiskery
-whiskey
-whiskeys
-whiskies
-whisking
-whisks
-whisky
-whisper
-whispered
-whisperers
-whispering
-whisperings
-whispers
-whist
-whistle
-whistled
-whistler
-whistles
-whistling
-whists
-white
-whitebait
-whiteboards
-whitecollar
-whitely
-whiten
-whitened
-whitener
-whiteness
-whitening
-whitens
-whiter
-whites
-whitest
-whitewash
-whitewashed
-whitewashing
-whither
-whiting
-whitish
-whittle
-whittled
-whittling
-whizkids
-whizz
-whizzkid
-who
-whoa
-whodunit
-whodunnit
-whoever
-whole
-wholefood
-wholegrain
-wholehearted
-wholeheartedly
-wholemeal
-wholeness
-wholes
-wholesale
-wholesaler
-wholesalers
-wholesaling
-wholesome
-wholesomely
-wholesomeness
-wholewheat
-wholly
-whom
-whomever
-whomsoever
-whoop
-whooped
-whooping
-whoops
-whoosh
-whop
-whore
-whorehouse
-whores
-whoring
-whorled
-whorls
-whose
-whosoever
-why
-whys
-wick
-wicked
-wickedest
-wickedly
-wickedness
-wicker
-wickerwork
-wicket
-wicketkeeper
-wicketkeepers
-wicketkeeping
-wickets
-wicks
-wide
-wideeyed
-widely
-widen
-widened
-wideness
-widening
-widens
-wideopen
-wider
-wideranging
-wides
-widescreen
-widespread
-widest
-widgeon
-widget
-widow
-widowed
-widower
-widowers
-widowhood
-widows
-width
-widths
-wield
-wielded
-wielder
-wielding
-wields
-wife
-wifeless
-wifely
-wig
-wigeon
-wigeons
-wigging
-wiggle
-wiggled
-wiggler
-wiggles
-wiggling
-wigs
-wigwam
-wigwams
-wild
-wildcat
-wildcats
-wildebeest
-wilder
-wilderness
-wildernesses
-wildest
-wildeyed
-wildfire
-wildfires
-wildfowl
-wildlife
-wildly
-wildness
-wildoats
-wilds
-wile
-wiles
-wilful
-wilfully
-wilfulness
-wilier
-wiliest
-wiling
-will
-willed
-willing
-willingly
-willingness
-willow
-willows
-willowy
-willpower
-wills
-willynilly
-wilt
-wilted
-wilting
-wilts
-wily
-wimp
-wimple
-wimpy
-win
-wince
-winced
-winces
-winch
-winched
-winches
-winching
-wincing
-wind
-windbag
-windbags
-windbreak
-windcheater
-windcheaters
-winded
-winder
-winders
-windfall
-windfalls
-windier
-windiest
-windily
-winding
-windings
-windlass
-windless
-windmill
-windmills
-window
-windowed
-windowing
-windowless
-windows
-windowshop
-windowshopping
-windpipe
-winds
-windscreen
-windscreens
-windsock
-windsor
-windsurf
-windsurfer
-windsurfers
-windsurfing
-windswept
-windward
-windy
-wine
-wined
-wineglass
-wineglasses
-winemakers
-winery
-wines
-wineskin
-wing
-winged
-winger
-wingers
-winging
-wingless
-wings
-wingspan
-wining
-wink
-winked
-winker
-winkers
-winking
-winkle
-winkled
-winkles
-winks
-winnable
-winner
-winners
-winning
-winningly
-winnings
-winnow
-winnowing
-wins
-winsome
-winter
-wintered
-wintering
-winters
-wintertime
-wintery
-wintrier
-wintriest
-wintry
-wipe
-wiped
-wiper
-wipers
-wipes
-wiping
-wire
-wired
-wireless
-wirer
-wires
-wirier
-wiriest
-wiring
-wirings
-wiry
-wisdom
-wisdoms
-wise
-wisecracks
-wiseguys
-wisely
-wiser
-wisest
-wish
-wishbone
-wished
-wishes
-wishful
-wishfully
-wishing
-wishywashy
-wisp
-wisps
-wispy
-wistful
-wistfully
-wistfulness
-wit
-witch
-witchcraft
-witchdoctor
-witchdoctors
-witchery
-witches
-witchhunt
-witchhunts
-witchlike
-with
-withdraw
-withdrawal
-withdrawals
-withdrawing
-withdrawn
-withdraws
-withdrew
-wither
-withered
-withering
-witheringly
-withers
-withheld
-withhold
-withholding
-withholds
-within
-without
-withstand
-withstanding
-withstands
-withstood
-witless
-witness
-witnessed
-witnesses
-witnessing
-wits
-witter
-wittering
-witticism
-witticisms
-wittier
-wittiest
-wittily
-wittiness
-witting
-wittingly
-witty
-wives
-wizard
-wizardry
-wizards
-wizened
-woad
-wobble
-wobbled
-wobbler
-wobbles
-wobblier
-wobbliest
-wobbling
-wobbly
-wodan
-wodge
-woe
-woebegone
-woeful
-woefully
-woes
-wok
-woke
-woken
-woks
-wold
-wolds
-wolf
-wolfcubs
-wolfed
-wolfhound
-wolfhounds
-wolfish
-wolfishly
-wolfwhistles
-wolves
-woman
-womanhood
-womanise
-womaniser
-womanish
-womanising
-womankind
-womanliness
-womanly
-womans
-womb
-wombat
-wombats
-wombs
-women
-womenfolk
-won
-wonder
-wondered
-wonderful
-wonderfully
-wonderfulness
-wondering
-wonderingly
-wonderland
-wonderment
-wonders
-wondrous
-wondrously
-wont
-woo
-wood
-woodbine
-woodcock
-woodcocks
-woodcut
-woodcuts
-woodcutter
-woodcutters
-wooded
-wooden
-woodenly
-woodenness
-woodland
-woodlands
-woodlice
-woodlouse
-woodman
-woodmen
-woodpecker
-woodpeckers
-woodpile
-woods
-woodshed
-woodsman
-woodsmoke
-woodwind
-woodwork
-woodworker
-woodworkers
-woodworking
-woodworm
-woody
-wooed
-wooer
-woof
-woofer
-woofers
-wooing
-wool
-woollen
-woollens
-woollier
-woollies
-woollike
-woolliness
-woolly
-wools
-wooly
-woos
-word
-wordage
-worded
-wordgame
-wordier
-wordiest
-wordiness
-wording
-wordings
-wordless
-wordlessly
-wordplay
-wordprocessing
-words
-wordsmith
-wordy
-wore
-work
-workability
-workable
-workaday
-workbench
-workbook
-workbooks
-workday
-workdays
-worked
-worker
-workers
-workfare
-workforce
-workforces
-workhorse
-workhorses
-workhouse
-workhouses
-working
-workings
-workless
-workload
-workloads
-workman
-workmanlike
-workmanship
-workmate
-workmates
-workmen
-workout
-workouts
-workpeople
-workpiece
-workpieces
-workplace
-workplaces
-workroom
-workrooms
-works
-worksheet
-worksheets
-workshop
-workshops
-workshy
-workspace
-workstation
-workstations
-worktop
-worktops
-workweek
-world
-worldclass
-worldfamous
-worldliness
-worldly
-worlds
-worldwar
-worldwide
-worm
-wormhole
-wormholes
-worming
-wormlike
-worms
-wormy
-worn
-worried
-worriedly
-worrier
-worriers
-worries
-worrisome
-worry
-worrying
-worryingly
-worse
-worsen
-worsened
-worsening
-worsens
-worser
-worship
-worshipful
-worshipped
-worshipper
-worshippers
-worshipping
-worships
-worst
-worsted
-worth
-worthier
-worthies
-worthiest
-worthily
-worthiness
-worthless
-worthlessness
-worthwhile
-worthy
-would
-wound
-wounded
-wounding
-wounds
-wove
-woven
-wow
-wowed
-wows
-wrack
-wracked
-wraith
-wraiths
-wrangle
-wrangled
-wrangler
-wrangles
-wrangling
-wrap
-wraparound
-wrapped
-wrapper
-wrappers
-wrapping
-wrappings
-wraps
-wrasse
-wrath
-wrathful
-wrathfully
-wraths
-wreak
-wreaked
-wreaking
-wreaks
-wreath
-wreathe
-wreathed
-wreathes
-wreathing
-wreaths
-wreck
-wreckage
-wrecked
-wrecker
-wreckers
-wrecking
-wrecks
-wren
-wrench
-wrenched
-wrenches
-wrenching
-wrens
-wrest
-wrested
-wresting
-wrestle
-wrestled
-wrestler
-wrestlers
-wrestles
-wrestling
-wretch
-wretched
-wretchedly
-wretchedness
-wretches
-wriggle
-wriggled
-wriggles
-wriggling
-wriggly
-wright
-wring
-wringer
-wringing
-wrings
-wrinkle
-wrinkled
-wrinkles
-wrinkling
-wrinkly
-wrist
-wristband
-wristbands
-wrists
-wristwatch
-writ
-writable
-write
-writer
-writers
-writes
-writhe
-writhed
-writhes
-writhing
-writing
-writings
-writs
-written
-wrong
-wrongdoer
-wrongdoers
-wrongdoing
-wrongdoings
-wronged
-wronger
-wrongest
-wrongful
-wrongfully
-wronging
-wrongly
-wrongness
-wrongs
-wrote
-wrought
-wroughtiron
-wrung
-wry
-wryly
-wryness
-wunderkind
-xenon
-xenophobe
-xenophobia
-xenophobic
-xerography
-xhosa
-xhosas
-xmas
-xray
-xrayed
-xraying
-xrays
-xylophone
-xylophonist
-yacht
-yachting
-yachts
-yachtsman
-yachtsmen
-yak
-yaks
-yale
-yalelock
-yam
-yams
-yank
-yankee
-yankees
-yanks
-yap
-yapping
-yaps
-yard
-yardage
-yards
-yardstick
-yardsticks
-yarn
-yarns
-yaw
-yawed
-yawl
-yawls
-yawn
-yawned
-yawning
-yawningly
-yawns
-yaws
-ye
-yea
-yeah
-yeaned
-year
-yearbook
-yearbooks
-yearling
-yearlings
-yearlong
-yearly
-yearn
-yearned
-yearning
-yearningly
-yearnings
-yearns
-years
-yeas
-yeast
-yeasts
-yeasty
-yell
-yelled
-yelling
-yellings
-yellow
-yellowed
-yellower
-yellowing
-yellowish
-yellows
-yellowy
-yells
-yelp
-yelped
-yelping
-yelpings
-yelps
-yemen
-yen
-yens
-yeoman
-yeomanry
-yeomen
-yep
-yes
-yesterday
-yesterdays
-yesteryear
-yet
-yeti
-yetis
-yew
-yews
-yiddish
-yield
-yielded
-yielding
-yields
-yip
-yippee
-yodel
-yodelled
-yodeller
-yodelling
-yodels
-yoga
-yogi
-yoke
-yoked
-yokel
-yokels
-yokes
-yolk
-yolks
-yon
-yonder
-yore
-york
-yorker
-yorkers
-you
-young
-younger
-youngest
-youngish
-youngster
-youngsters
-your
-yours
-yourself
-yourselves
-youth
-youthful
-youthfulness
-youths
-yowl
-yoyo
-yrs
-yttrium
-yuck
-yukon
-yule
-yuletide
-yummiest
-yummy
-yuppie
-yuppies
-zag
-zaire
-zambezi
-zambia
-zambian
-zambians
-zaniest
-zany
-zanzibar
-zap
-zapping
-zappy
-zaps
-zeal
-zealot
-zealotry
-zealots
-zealous
-zealously
-zealousness
-zeals
-zebra
-zebras
-zebu
-zebus
-zees
-zenith
-zeniths
-zeolite
-zeolites
-zephyr
-zephyrs
-zeppelin
-zero
-zeroed
-zeroing
-zest
-zestfully
-zesty
-zeta
-zeus
-zig
-zigzag
-zigzagged
-zigzagging
-zigzags
-zillion
-zillions
-zimbabwe
-zinc
-zion
-zionism
-zionist
-zionists
-zip
-zipped
-zipper
-zippers
-zipping
-zippy
-zips
-zither
-zithers
-zombi
-zombie
-zombies
-zonal
-zonation
-zone
-zoned
-zones
-zoning
-zoo
-zookeepers
-zoological
-zoologist
-zoologists
-zoology
-zoom
-zoomed
-zooming
-zooms
-zooplankton
-zoos
-zulu
-zulus
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala
deleted file mode 100644
index 2eaddd7572..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/AggregateLight.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-import scala.collection.parallel.mutable.ParArray
-import extra166y.{ParallelArray => JSR166Array}
-
-
-object AggregateLight extends Companion {
- def benchName = "aggregate-light";
- def apply(sz: Int, parallelism: Int, what: String) = new AggregateLight(sz, parallelism, what)
- override def comparisons = List()
- override def defaultSize = 200000
-
- val seqop = (a: Cont, b: Cont) => b
- val combop = (a: Cont, b: Cont) => a
-}
-
-
-class AggregateLight(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = AggregateLight
- override def repetitionsPerRun = 350
- override val runs = 20
-
- def runpar = pa.aggregate(new Cont(0))(companion.seqop, companion.combop)
- def runseq = sequentialReduce(companion.seqop, sz, new Cont(0))
- override def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala
deleted file mode 100644
index f5d6c75abb..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Companion.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-trait Companion extends BenchCompanion {
- def collectionName = "ParArray"
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala
deleted file mode 100644
index 033921d451..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CopyToArray.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object CopyToArray extends Companion {
- def benchName = "copytoarray";
- def apply(sz: Int, parallelism: Int, what: String) = new CopyToArray(sz, parallelism, what)
- override def comparisons = List()
- override def defaultSize = 200000
-}
-
-class CopyToArray(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = CopyToArray
- val destarr = new Array[Any](sz)
-
- def runpar = pa.copyToArray(destarr, 0, sz)
- def runseq = sequentialCopyToArray(destarr, 0, sz)
- def comparisonMap = collection.Map()
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala
deleted file mode 100644
index c9b3f07ff3..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Corresponds.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class Corresponds(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Boolean] {
- def companion = Corresponds
- override def repetitionsPerRun = 400
-
- val same = {
- val p = new collection.parallel.mutable.ParArray[Cont](sz)
- for (i <- 0 until sz) p(i) = what match {
- case "seq" => arr(i).asInstanceOf[Cont]
- case "par" => pa(i)
- }
- p
- }
-
- def runpar = runresult = pa.corresponds(same)(corr)
- def runseq = runresult = sequentialCorresponds(same, corr, sz)
- override def comparisonMap = collection.Map()
-
- val corr = (a: Cont, b: Cont) => a.in == b.in
-}
-
-object Corresponds extends Companion {
- def benchName = "corresponds";
- def apply(sz: Int, p: Int, what: String) = new Corresponds(sz, p, what)
- override def comparisons = List()
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala
deleted file mode 100644
index 7438be8447..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountHeavy.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object CountHeavy extends Companion {
- def benchName = "count-heavy";
- def apply(sz: Int, parallelism: Int, what: String) = new CountHeavy(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 16
-
- val pred = (a: Cont) => heavyCheck(a)
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = heavyCheck(a)
- }
-
- def heavyCheck(a: Cont) = {
- val n = a.in
- (n until (n + 200)).map(checkPrime(_)).reduceLeft(_ && _)
- }
- def checkPrime(n: Int) = {
- var isPrime = true
- for (i <- 2 until (scala.math.sqrt(n).toInt + 1)) if (n % i == 0) isPrime = false
- isPrime
- }
-}
-
-class CountHeavy(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = CountHeavy
-
- def runpar = pa.count(CountHeavy.pred)
- def runseq = sequentialCount(CountHeavy.pred, sz)
- def runjsr = jsrarr.withFilter(CountHeavy.predjsr).size
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala
deleted file mode 100644
index 21c64358b4..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountLight.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object CountLight extends Companion {
- def benchName = "count-light";
- def apply(sz: Int, parallelism: Int, what: String) = new CountLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 200000
-}
-
-class CountLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = CountLight
-
- def runpar = pa.count(Cont.pred)
- def runseq = sequentialCount(Cont.pred, sz)
- def runjsr = jsrarr.withFilter(Cont.predjsr).size
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala
deleted file mode 100644
index 9c6ac19229..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/CountList.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object CountList extends Companion {
- def benchName = "count-list";
- def apply(sz: Int, parallelism: Int, what: String) = new CountList(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 1000
-
- val listCreator = (i: Int) => (0 until (i % 50 + 50)).toList
- val pred = (lst: List[Int]) => check(lst)
- val predjsr = new extra166y.Ops.Predicate[List[Int]] {
- def op(lst: List[Int]) = check(lst)
- }
-
- def check(lst: List[Int]) = lst.foldLeft(0)((sum, n) => sum + n * n) % 2 == 0
-}
-
-class CountList(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, CountList.listCreator, new Array[Any](_), classOf[List[Int]]) {
- def companion = CountList
- override def repetitionsPerRun = 250
-
- def runpar = pa.count(CountList.pred)
- def runseq = sequentialCount(CountList.pred, sz)
- def runjsr = jsrarr.withFilter(CountList.predjsr).size
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala
deleted file mode 100644
index 4b27569239..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DiffHalf.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class DiffHalf(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = DiffHalf
- override def repetitionsPerRun = 400
-
- val similar = {
- val p = new collection.parallel.mutable.ParArray[Cont](sz)
- for (i <- 0 until sz) p(i) = what match {
- case "seq" => arr(i).asInstanceOf[Cont]
- case "par" => pa(i)
- }
- p.drop(p.size / 2)
- }
-
- def runpar = runresult = pa.diff(similar).size
- def runseq = runresult = sequentialDiff(similar, sz).size
- override def comparisonMap = collection.Map()
-
- val corr = (a: Cont, b: Cont) => a.in == b.in
-}
-
-object DiffHalf extends Companion {
- def benchName = "diff-half";
- def apply(sz: Int, p: Int, what: String) = new DiffHalf(sz, p, what)
- override def comparisons = List()
- override def defaultSize = 10000
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala
deleted file mode 100644
index 443ef2b500..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object DropMany extends Companion {
- def benchName = "drop-many";
- def apply(sz: Int, parallelism: Int, what: String) = new DropMany(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 50000
-}
-
-class DropMany(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = DropMany
- override def repetitionsPerRun = 400
- runresult = -1
-
- def runpar = runresult = pa.drop(pa.size / 2).size
- def runseq = runresult = sequentialDrop(sz / 2, sz).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala
deleted file mode 100644
index 2749216735..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ExistsLight.scala
+++ /dev/null
@@ -1,49 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object ExistsLight extends Companion {
- def benchName = "exists-light";
- def apply(sz: Int, parallelism: Int, what: String) = new ExistsLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 200000
-
- val pred = (a: Cont) => a.in < 0
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = a.in < 0
- }
-}
-
-class ExistsLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Boolean] {
- def companion = ExistsLight
- runresult = false
-
- def runpar = runresult = pa.exists(ExistsLight.pred)
- def runseq = runresult = sequentialExists(ExistsLight.pred, sz)
- def runjsr = runresult = jsrarr.withFilter(ExistsLight.predjsr).size > 0
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala
deleted file mode 100644
index d4c8395951..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FilterLight.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object FilterLight extends Companion {
- def benchName = "filter-light";
- def apply(sz: Int, parallelism: Int, what: String) = new FilterLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 10000
-
- val pred = (a: Cont) => check(a.in)
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = check(a.in)
- }
-
- def check(n: Int) = {
- var res = n
-// var i = 1
-// while (i < 10) {
-// res += n % i
-// i += 1
-// }
- res % 2 == 0
- }
-}
-
-class FilterLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = FilterLight
- override def repetitionsPerRun = 250
- override val runs = 30
- runresult = -1
-
- def runpar = runresult = pa.filter(FilterLight.pred).size
- def runseq = runresult = sequentialFilter(FilterLight.pred, sz).size
- def runjsr = runresult = { jsrarr.withFilter(FilterLight.predjsr).all.size }
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala
deleted file mode 100644
index f08ddf29e3..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FindLight.scala
+++ /dev/null
@@ -1,52 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object FindLight extends Companion {
- def benchName = "find-light";
- def apply(sz: Int, parallelism: Int, what: String) = new FindLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 200000
-
- val pred = (a: Cont) => a.in < -10
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = a.in < -10
- }
-}
-
-class FindLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Option[Cont]] {
- def companion = FindLight
- runresult = None
-
- def runpar = runresult = pa.find(FindLight.pred)
- def runseq = runresult = sequentialFind(FindLight.pred, sz)
- def runjsr = runresult = { jsrarr.withFilter(FindLight.predjsr).size > 0; None }
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala
deleted file mode 100644
index 01ecbbf016..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/FlatMapLight.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-
-
-object FlatMapLight extends Companion {
- def benchName = "flatmap-light";
- def apply(sz: Int, parallelism: Int, what: String) = new FlatMapLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 10000
-
- def fun = (a: Cont) => { List(1, 2, 3, 4, a.in) }
-}
-
-class FlatMapLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = FlatMapLight
-
- def runpar = pa.flatMap(FlatMapLight.fun)
- def runseq = sequentialFlatMap(FlatMapLight.fun, sz)
- def comparisonMap = collection.Map()
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala
deleted file mode 100644
index 0d61e5aeb5..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallHeavy.scala
+++ /dev/null
@@ -1,59 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object ForallHeavy extends Companion {
- def benchName = "forall-heavy";
- def apply(sz: Int, parallelism: Int, what: String) = new ForallHeavy(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 16
-
- val pred = (a: Cont) => heavyCheck(a)
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = heavyCheck(a)
- }
-
- def heavyCheck(a: Cont) = {
- val init = a.in + 1
- var cnt = init
- var i = 0
- while (i < 10000) {
- cnt = -2 * cnt
- cnt /= 2
- i += 1
- }
- cnt += init * 5 + 10
- cnt >= 0
- }
-}
-
-class ForallHeavy(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ForallHeavy
-
- def runpar = pa.forall(ForallHeavy.pred)
- def runseq = sequentialForall(ForallHeavy.pred, sz)
- def runjsr = jsrarr.withFilter(ForallHeavy.predjsr).size == sz
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala
deleted file mode 100644
index 19671d2bc4..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallLight.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object ForallLight extends Companion {
- def benchName = "forall-light";
- def apply(sz: Int, parallelism: Int, what: String) = new ForallLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 200000
-
- val pred = (a: Cont) => a.in >= 0
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = a.in >= 0
- }
-}
-
-class ForallLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ForallLight
-
- def runpar = pa.forall(ForallLight.pred)
- def runseq = sequentialForall(ForallLight.pred, sz)
- def runjsr = jsrarr.withFilter(ForallLight.predjsr).size == sz
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala
deleted file mode 100644
index 624266e49d..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallQuickStop.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object ForallQuickStop extends Companion {
- def benchName = "forall-quickstop";
- def apply(sz: Int, parallelism: Int, what: String) = new ForallQuickStop(sz, parallelism, what)
- override def defaultSize = 200000
-
- val pred = (a: Cont) => a.in != 50
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = a.in != 50
- }
-}
-
-class ForallQuickStop(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Boolean] {
- def companion = ForallQuickStop
-
- def runpar = runresult = pa.forall(ForallQuickStop.pred)
- def runseq = runresult = sequentialForall(ForallQuickStop.pred, sz)
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala
deleted file mode 100644
index c7462ed04b..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForallStop80k.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object ForallStop80k extends Companion {
- def benchName = "forall-stop80k";
- def apply(sz: Int, parallelism: Int, what: String) = new ForallStop80k(sz, parallelism, what)
- override def defaultSize = 100000
-
- val pred = (a: Cont) => a.in != 80000
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = a.in != 80000
- }
-}
-
-class ForallStop80k(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Boolean] {
- def companion = ForallStop80k
-
- def runpar = runresult = pa.forall(ForallStop80k.pred)
- def runseq = runresult = sequentialForall(ForallStop80k.pred, sz)
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
deleted file mode 100644
index d1a3f8085c..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object ForeachHeavy extends Companion {
- def benchName = "foreach-heavy";
- def apply(sz: Int, parallelism: Int, what: String) = new ForeachHeavy(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 2048
-
- @volatile var z = 0
-
- val fun = (a: Cont) => heavyOperation(a)
- val funjsr = new extra166y.Ops.Procedure[Cont] {
- def op(a: Cont) = heavyOperation(a)
- }
-
- def heavyOperation(a: Cont) {
- checkPrime(a.in + 1000000000)
- }
-
- def checkPrime(n: Int) = {
- var isPrime = true
- var i = 2
- val until = 550
- while (i < until) {
- if (n % i == 0) isPrime = false
- i += 1
- }
- if (isPrime && (n.toString == z)) z += 1
- isPrime
- }
-}
-
-class ForeachHeavy(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ForeachHeavy
- override def repetitionsPerRun = 250
-
- def runpar = pa.pforeach(ForeachHeavy.fun)
- def runseq = sequentialForeach(ForeachHeavy.fun, sz)
- def runjsr = jsrarr.apply(ForeachHeavy.funjsr)
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala
deleted file mode 100644
index 3d0c5c45c4..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object ForeachLight extends Companion {
- def benchName = "foreach-light";
- def apply(sz: Int, parallelism: Int, what: String) = new ForeachLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 200000
-
- val fun = (a: Cont) => a.num = a.in
- val funjsr = new extra166y.Ops.Procedure[Cont] {
- def op(a: Cont) = a.num = a.in
- }
-}
-
-class ForeachLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ForeachLight
-
- def runpar = pa.pforeach(ForeachLight.fun)
- def runseq = sequentialForeach(ForeachLight.fun, sz)
- def runjsr = jsrarr.apply(ForeachLight.funjsr)
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala
deleted file mode 100644
index a90227a6e4..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/GroupBy.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-object GroupByLight extends Companion {
- def benchName = "groupby-light";
- def apply(sz: Int, parallelism: Int, what: String) = new GroupByLight(sz, parallelism, what)
- override def comparisons = List()
- override def defaultSize = 10000
-
- val fun = (a: Cont) => a.in % 32
-}
-
-
-class GroupByLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = GroupByLight
- runresult = -1
-
- val array = new Array[Cont](sz)
- for (i <- 0 until sz) array(i) = new Cont(i)
-
- def runpar = runresult = pa.groupBy(GroupByLight.fun).size
- def runseq = runresult = array.asInstanceOf[Array[Cont]].groupBy(GroupByLight.fun).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala
deleted file mode 100644
index 3a22bdd1db..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IndexWhere.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class IndexWhere(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = IndexWhere
- override def repetitionsPerRun = 400
-
- def runpar = runresult = pa.indexWhere(IndexWhere.pred2, 0)
- def runseq = runresult = sequentialIndexWhere(IndexWhere.pred2, 0, sz)
- override def comparisonMap = collection.Map()
-}
-
-object IndexWhere extends Companion {
- def benchName = "index-where";
- def apply(sz: Int, p: Int, what: String) = new IndexWhere(sz, p, what)
- override def comparisons = List()
-
- val pred = (c: Cont) => {
- var in = c.in
- var i = 2
- while (i < 5) {
- if (in % i == 0) in = 0
- i += 1
- }
- c.in >= 0 && in == -1
- }
- val pred2 = (c: Cont) => c.in == 280000
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala
deleted file mode 100644
index e429fb288e..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/IntersectHalf.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class IntersectHalf(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = IntersectHalf
- override def repetitionsPerRun = 400
-
- val similar = {
- val p = new collection.parallel.mutable.ParArray[Cont](sz)
- for (i <- 0 until sz) p(i) = what match {
- case "seq" => arr(i).asInstanceOf[Cont]
- case "par" => pa(i)
- }
- p.drop(p.size / 2)
- }
-
- def runpar = runresult = pa.intersect(similar).size
- def runseq = runresult = sequentialIntersect(similar, sz).size
- override def comparisonMap = collection.Map()
-
- val corr = (a: Cont, b: Cont) => a.in == b.in
-}
-
-object IntersectHalf extends Companion {
- def benchName = "intersect-half";
- def apply(sz: Int, p: Int, what: String) = new IntersectHalf(sz, p, what)
- override def comparisons = List()
- override def defaultSize = 10000
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala
deleted file mode 100644
index 427afa5571..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/LastIndexWhere.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class LastIndexWhere(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = LastIndexWhere
- override def repetitionsPerRun = 400
-
- def runpar = runresult = pa.lastIndexWhere(LastIndexWhere.pred2, pa.size - 1)
- def runseq = runresult = sequentialLastIndexWhere(LastIndexWhere.pred2, sz - 1, sz)
- override def comparisonMap = collection.Map()
-}
-
-object LastIndexWhere extends Companion {
- def benchName = "last-index-where";
- def apply(sz: Int, p: Int, what: String) = new LastIndexWhere(sz, p, what)
- override def comparisons = List()
-
- val pred = (c: Cont) => {
- var in = c.in
- var i = 2
- while (i < 5) {
- if (in % i == 0) in = 0
- i += 1
- }
- c.in >= 0 || in == 0
- }
- val pred2 = (c: Cont) => c.in == 500
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala
deleted file mode 100644
index 1451f6a57a..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MapLight.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object MapLight extends Companion {
- def benchName = "map-light";
- def apply(sz: Int, parallelism: Int, what: String) = new MapLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 100000
-
- def fun = (a: Cont) => { a }
- def funjsr = new extra166y.Ops.Op[Cont, Cont] {
- def op(a: Cont) = { a }
- }
-}
-
-class MapLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = MapLight
-
- def runpar = pa.map(MapLight.fun)
- def runseq = sequentialMap(MapLight.fun, sz)
-// def runseq = sequentialMapOpt(MapLight.fun, sz)
- def runjsr = jsrarr.replaceWithMapping(MapLight.funjsr).all
- def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala
deleted file mode 100644
index 6d5b189c3a..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala
+++ /dev/null
@@ -1,84 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-import collection.parallel.immutable.ParRange
-
-
-object MatrixMultiplication extends Companion {
- def benchName = "matrix-mult";
- def apply(sz: Int, parallelism: Int, what: String) = new MatrixMultiplication(sz, parallelism, what)
- override def comparisons = List()
- override def defaultSize = 100
-}
-
-class MatrixMultiplication(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = MatrixMultiplication
- collection.parallel.tasksupport.environment = forkjoinpool
-
- val a = Matrix.unit[Int](sz)
- val b = Matrix.unit[Int](sz)
- var c = new Matrix[Int](sz)
-
- def runpar = c = a * b //{ c.assignProduct(a, b) } //; println("--------"); c.output }
- def runseq = throw new UnsupportedOperationException
- def comparisonMap = collection.Map()
-
- class Matrix[T](n: Int)(implicit num: Numeric[T], tag: ClassTag[T]) {
- val array = new Array[T](n * n)
-
- def apply(y: Int, x: Int) = array(y * n + x)
-
- def update(y: Int, x: Int, elem: T) = array(y * n + x) = elem
-
- def *(b: Matrix[T]) = {
- val m = new Matrix[T](n)
- m.assignProduct(this, b)
- m
- }
-
- def assignProduct(a: Matrix[T], b: Matrix[T]) = {
- val range = ParRange(0, n * n, 1, false)
- for (i <- range) this(i / n, i % n) = calcProduct(a, b, i / n, i % n);
- }
-
- private def calcProduct(a: Matrix[T], b: Matrix[T], y: Int, x: Int): T = {
- import num._
- var sum = zero
- for (i <- 0 until n) sum += a(y, i) * b(i, x)
- sum
- }
-
- def output = for (y <- 0 until n) {
- for (x <- 0 until n) print(this(y, x))
- println
- }
- }
-
- object Matrix {
- def unit[T](n: Int)(implicit num: Numeric[T], tag: ClassTag[T]) = {
- val m = new Matrix[T](n)
- for (i <- 0 until n) m(i, i) = num.one
- m
- }
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala
deleted file mode 100644
index a51b5d6176..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/MinLight.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-
-/** Tests reduce method using an operator creating an object as a result. */
-class MinLight(sz: Int, p: Int, what: String)
-extends Resettable[Int](sz, p, what, (i: Int) => i, new Array[Any](_), classOf[Int]) {
- def companion = MinLight
- override def repetitionsPerRun = 400
-
- def runpar = pa.min(Ordering[Int])
- def runseq = sequentialMin(sz)
- override def comparisonMap = collection.Map()
-}
-
-object MinLight extends Companion {
- def benchName = "min-light";
- def apply(sz: Int, p: Int, what: String) = new MinLight(sz, p, what)
- override def comparisons = List()
-}
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala
deleted file mode 100644
index f8a985c349..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PadToDouble.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class PadToDouble(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = PadToDouble
- override def repetitionsPerRun = 400
-
- val similar = {
- val p = new collection.parallel.mutable.ParArray[Cont](sz)
- for (i <- 0 until sz) p(i) = what match {
- case "seq" => arr(i).asInstanceOf[Cont]
- case "par" => pa(i)
- }
- p.drop(p.size / 2)
- }
-
- def runpar = runresult = pa.padTo(size * 2, padder).size
- def runseq = runresult = sequentialPadTo(size * 2, padder, size).size
- override def comparisonMap = collection.Map()
-
- val padder = new Cont(0)
-}
-
-
-object PadToDouble extends Companion {
- def benchName = "padto-double";
- def apply(sz: Int, p: Int, what: String) = new PadToDouble(sz, p, what)
- override def comparisons = List()
- override def defaultSize = 25000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala
deleted file mode 100644
index 57f8536b9e..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartialMapLight.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object PartialMapLight extends Companion {
- def benchName = "partmap-light";
- def apply(sz: Int, parallelism: Int, what: String) = new PartialMapLight(sz, parallelism, what)
- override def comparisons = List()
- override def defaultSize = 100000
-
- def fun: PartialFunction[Cont, Cont] = {
- case c: Cont if c.in >= 0 => c
- }
-}
-
-class PartialMapLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = PartialMapLight
-
- def runpar = pa.collect(PartialMapLight.fun)
- def runseq = sequentialPartialMap(PartialMapLight.fun, sz)
- def comparisonMap = collection.Map()
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala
deleted file mode 100644
index b99a25b285..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PartitionLight.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object PartitionLight extends Companion {
- def benchName = "partition-light";
- def apply(sz: Int, parallelism: Int, what: String) = new PartitionLight(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 20000
-
- val pred = (a: Cont) => check(a.in)
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = check(a.in)
- }
-
- def check(n: Int) = {
- var res = n
- var i = 1
- while (i < 5) {
- res += n % i
- i += 1
- }
- (res % 2 == 0) && (res % 312 == 0)
- }
-}
-
-class PartitionLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = PartitionLight
- runresult = -1
-
- def runpar = runresult = pa.partition(PartitionLight.pred)._1.size
- def runseq = runresult = sequentialPartition(PartitionLight.pred, sz)._1.size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala
deleted file mode 100644
index 55cc71f129..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PatchHalf.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class PatchHalf(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = PatchHalf
- override def repetitionsPerRun = 400
-
- val similar = {
- val p = new collection.parallel.mutable.ParArray[Cont](sz)
- for (i <- 0 until sz) p(i) = what match {
- case "seq" => arr(i).asInstanceOf[Cont]
- case "par" => pa(i)
- }
- p.drop(p.size / 2)
- }
-
- def runpar = runresult = pa.patch(size / 2, similar, 0).size
- def runseq = runresult = sequentialPatch(size / 2, similar, 0, size).size
- override def comparisonMap = collection.Map()
-}
-
-object PatchHalf extends Companion {
- def benchName = "patch-half";
- def apply(sz: Int, p: Int, what: String) = new PatchHalf(sz, p, what)
- override def comparisons = List()
- override def defaultSize = 25000
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala
deleted file mode 100644
index 2574621212..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/PlusPlus.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.mutable.ParArray
-
-
-object PlusPlus extends Companion {
- def benchName = "plusplus";
- def apply(sz: Int, parallelism: Int, what: String) = new PlusPlus(sz, parallelism, what)
- override def comparisons = List()
- override def defaultSize = 50000
-}
-
-class PlusPlus(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = PlusPlus
-
- val thatarr = new Array[Cont](sz)
- val thatpa = new ParArray[Cont](sz)
-
- def runpar = pa ++ thatpa
- def runseq = arr ++ thatarr
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala
deleted file mode 100644
index dd660ba8e0..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceHeavy.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-class ReduceHeavy(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ReduceHeavy
- override def repetitionsPerRun = 100
-
- def runseq = sequentialReduce(Cont.opheavy, sz, new Cont(0))
- def runpar = pa.reduce(Cont.opheavy)
- def runjsr = jsrarr.reduce(Cont.reducerheavy, new Cont(0))
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-object ReduceHeavy extends Companion {
- def benchName = "reduce-heavy";
- def apply(sz: Int, p: Int, what: String) = new ReduceHeavy(sz, p, what)
- override def comparisons = List("jsr")
- override def defaultSize = 16
-}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala
deleted file mode 100644
index f1f2a32403..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceLight.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-import scala.collection.parallel.mutable.ParArray
-import extra166y.{ParallelArray => JSR166Array}
-
-
-object ReduceLight extends Companion {
- def benchName = "reduce-light";
- def apply(sz: Int, parallelism: Int, what: String) = new ReduceLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 200000
-}
-
-
-class ReduceLight(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ReduceLight
- override def repetitionsPerRun = 350
- override val runs = 20
-
- def runpar = {
- pa.reduce(Cont.op)
-// updatePar
- }
-
- def runjsr = {
- jsrarr.reduce(Cont.reducer, new Cont(0))
-// updateJsr
- }
-
- def runseq = {
- sequentialReduce(Cont.op, sz, new Cont(0))
-// updateSeq
- }
-
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala
deleted file mode 100644
index f095797d1c..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-object ReduceList extends Companion {
- def benchName = "reduce-list";
- def apply(sz: Int, p: Int, what: String) = new ReduceList(sz, p, what)
- override def comparisons = List("jsr")
- override def defaultSize = 20000
-}
-
-object ListCreator extends (Int => List[Int]) {
- def apply(idx: Int) = {
- val len = 50 + idx % 100
- (for (i <- 0 until len) yield i).toList
- }
-}
-
-object ListOps {
- val redop = (a: List[Int], b: List[Int]) => combineLists(a, b)
- val reducer = new extra166y.Ops.Reducer[List[Int]] {
- def op(a: List[Int], b: List[Int]) = combineLists(a, b)
- }
- def combineLists(a: List[Int], b: List[Int]) = {
- if (a.foldLeft(0)(_ + _) > b.foldLeft(0)(_ + _)) a else b
- }
-}
-
-class ReduceList(sz: Int, p: Int, what: String)
-extends Resettable[List[Int]](sz, p, what, ListCreator, new Array[Any](_), classOf[List[Int]]) {
- def companion = ReduceList
- override def repetitionsPerRun = 10
- override val runs = 15
-
- def runpar = pa.reduce(ListOps.redop)
- def runseq = sequentialReduce(ListOps.redop, sz, List[Int]())
- def runjsr = jsrarr.reduce(ListOps.reducer, List[Int]())
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala
deleted file mode 100644
index 1cf4f4169a..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReduceNew.scala
+++ /dev/null
@@ -1,30 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-
-/** Tests reduce method using an operator creating an object as a result. */
-class ReduceNew(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i),
- new Array[Any](_), classOf[Cont]) {
- def companion = ReduceNew
- override def repetitionsPerRun = 200
-
- def runpar = pa.reduce(Cont.opnew)
- def runseq = sequentialReduce(Cont.opnew, sz, new Cont(0))
- def runjsr = jsrarr.reduce(Cont.reducernew, new Cont(0))
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-object ReduceNew extends Companion {
- def benchName = "reduce-new";
- def apply(sz: Int, p: Int, what: String) = new ReduceNew(sz, p, what)
- override def comparisons = List("jsr")
-}
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala
deleted file mode 100644
index 8fb90981ac..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala
+++ /dev/null
@@ -1,65 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object IntWrapCreator extends (Int => IntWrap) {
- def apply(idx: Int) = new IntWrap(shiftaround(idx))
- def shiftaround(idx: Int) = idx * 40192 + 717
-}
-
-case class IntWrap(val num: Int)
-
-object IntOps {
- val op = (a: IntWrap, b: IntWrap) => primereduce(a, b)
- val reducer = new extra166y.Ops.Reducer[IntWrap] {
- def op(a: IntWrap, b: IntWrap) = primereduce(a, b)
- }
-
- def primereduce(a: IntWrap, b: IntWrap) = {
- val check = (checkPrime(a.num), checkPrime(b.num))
- if (a.num > b.num) a else b
- }
-
- def checkPrime(n: Int) = {
- var isPrime = true
- var i = 2
- val until = scala.math.sqrt(n).toInt + 1
- while (i < until) {
- if (n % i == 0) isPrime = false
- i += 1
- }
- isPrime
- }
-}
-
-class ReducePrime(sz: Int, p: Int, what: String)
-extends Resettable[IntWrap](sz, p, what, IntWrapCreator, new Array[Any](_), classOf[IntWrap])
-with HavingResult[IntWrap] {
- def companion = ReducePrime
-
- def runseq = runresult = sequentialReduce(IntOps.op, sz, new IntWrap(0))
- def runpar = runresult = pa.reduce(IntOps.op)
- def runjsr = runresult = jsrarr.reduce(IntOps.reducer, new IntWrap(0))
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-object ReducePrime extends Companion {
- def benchName = "reduce-prime";
- def apply(sz: Int, p: Int, what: String) = new ReducePrime(sz, p, what)
- override def comparisons = List("jsr")
- override def defaultSize = 100
-}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala
deleted file mode 100644
index feb1bd9466..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/RemoveDuplicates.scala
+++ /dev/null
@@ -1,44 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class RemoveDuplicates(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = RemoveDuplicates
- override def repetitionsPerRun = 400
-
- def runpar = runresult = pa.distinct.size
- def runseq = runresult = sequentialRemoveDuplicates(size).size
- override def comparisonMap = collection.Map()
-}
-
-object RemoveDuplicates extends Companion {
- def benchName = "remove-duplicates";
- def apply(sz: Int, p: Int, what: String) = new RemoveDuplicates(sz, p, what)
- override def comparisons = List()
- override def defaultSize = 10000
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala
deleted file mode 100644
index b4403fcb9c..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Resettable.scala
+++ /dev/null
@@ -1,127 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-import scala.collection.parallel.mutable.ParArray
-import extra166y.{ParallelArray => JSR166Array}
-
-
-class Cont(val in: Int) {
- var num = in
- override def toString = in.toString
-}
-
-object Cont {
- val pred = (a: Cont) => a.in > 100
-
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = a.in > 100
- }
-
- val op = (a: Cont, b: Cont) => {
- b.num = a.in + b.in
- b
- }
-
- val opnew = (a: Cont, b: Cont) => new Cont(a.in + b.in)
-
- val opheavy = (a: Cont, b: Cont) => {
- heavyComputation(a, b)
- }
-
- val reducer = new extra166y.Ops.Reducer[Cont] {
- def op(a: Cont, b: Cont) = {
- b.num = a.in + b.in
- b
- }
- }
-
- val reducernew = new extra166y.Ops.Reducer[Cont] {
- def op(a: Cont, b: Cont) = new Cont(a.in + b.in)
- }
-
- val reducerheavy = new extra166y.Ops.Reducer[Cont] {
- def op(a: Cont, b: Cont) = heavyComputation(a, b)
- }
-
- def heavyComputation(a: Cont, b: Cont) = {
- val f = a.in
- val s = b.in
- var i = 0
- var res = f * s
- while (i < 50000) {
- if ((i + f) % 3 == 0) res += s
- else res -= f
- i += 1
- }
- b.num = res
- b
- }
-}
-
-abstract class Resettable[T](val size: Int, val parallelism: Int, val runWhat: String,
- elemcreator: Int => T, arrcreator: Int => Array[Any], cls: Class[T])
-extends Bench with SequentialOps[T] {
- val forkjoinpool = new scala.concurrent.forkjoin.ForkJoinPool(parallelism)
- forkjoinpool.setMaximumPoolSize(parallelism)
- val papool = new jsr166y.ForkJoinPool(parallelism)
- papool.setMaximumPoolSize(parallelism)
-
- var pa: ParArray[T] = null
- var jsrarr: JSR166Array[T] = null
- reset
-
- def reset = runWhat match {
- case "seq" =>
- arr = arrcreator(size)
- for (i <- 0 until size) arr(i) = elemcreator(i)
- case "par" =>
- pa = new ParArray[T](size)
- collection.parallel.tasksupport.environment = forkjoinpool
- for (i <- 0 until size) pa(i) = elemcreator(i)
- case "jsr" =>
- jsrarr = JSR166Array.create(size, cls, papool)
- for (i <- 0 until size) jsrarr.set(i, elemcreator(i))
- case _ => throw new IllegalArgumentException("Unknown type: " + runWhat)
- }
-
- var updateCounter = 0
- def incUpdateCounter {
- updateCounter += 1
- if (updateCounter > size) updateCounter = 0
- }
-
- def updateSeq {
- val tmp = arr(updateCounter)
- arr(updateCounter) = arr(size - updateCounter - 1)
- arr(size - updateCounter - 1) = tmp
- incUpdateCounter
- }
-
- def updatePar {
- val tmp = pa(updateCounter)
- pa(updateCounter) = pa(size - updateCounter - 1)
- pa(size - updateCounter - 1) = tmp
- incUpdateCounter
- }
-
- def updateJsr {
- val tmp = jsrarr.get(updateCounter)
- jsrarr.set(updateCounter, jsrarr.get(size - updateCounter - 1))
- jsrarr.set(size - updateCounter - 1, tmp)
- incUpdateCounter
- }
-
- override def printResults {
- println(" --- Fork join pool state --- ")
- println("Parallelism: " + forkjoinpool.getParallelism)
- println("Active threads: " + forkjoinpool.getActiveThreadCount)
- println("Work stealings: " + forkjoinpool.getStealCount)
- }
-}
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala
deleted file mode 100644
index ec690d4b2d..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/Reverse.scala
+++ /dev/null
@@ -1,35 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class Reverse(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) {
- def companion = Reverse
- override def repetitionsPerRun = 400
-
- def runpar = pa.reverse
- def runseq = sequentialReverse(sz)
- override def comparisonMap = collection.Map()
-}
-
-object Reverse extends Companion {
- def benchName = "reverse";
- def apply(sz: Int, p: Int, what: String) = new Reverse(sz, p, what)
- override def comparisons = List()
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala
deleted file mode 100644
index 47ae108c45..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class ReverseMap(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont]) {
- def companion = ReverseMap
- override def repetitionsPerRun = 100
-
- def runpar = pa.reverseMap(compl)
- def runseq = sequentialReverseMap(compl, sz)
- override def comparisonMap = collection.Map()
-
- val id = (c: Cont) => c
- val compl = (c: Cont) => {
- var in = c.in
- var i = 2
- while (i < 6) {
- if (in % i == 0) in = 0
- i += 1
- }
- if (in < 0) null
- else c
- }
-}
-
-object ReverseMap extends Companion {
- def benchName = "reverse-map";
- def apply(sz: Int, p: Int, what: String) = new ReverseMap(sz, p, what)
- override def comparisons = List()
- override def defaultSize = 100000
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala
deleted file mode 100644
index d22c4df661..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SameElementsLong.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class SameElementsLong(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Boolean] {
- def companion = SameElementsLong
- override def repetitionsPerRun = 400
-
- val same = {
- val p = new collection.parallel.mutable.ParArray[Cont](sz)
- for (i <- 0 until sz) p(i) = what match {
- case "seq" => arr(i).asInstanceOf[Cont]
- case "par" => pa(i)
- }
- p
- }
-
- def runpar = runresult = pa.sameElements(same)
- def runseq = runresult = sequentialSameElements(same, sz)
- override def comparisonMap = collection.Map()
-}
-
-object SameElementsLong extends Companion {
- def benchName = "same-elements-long";
- def apply(sz: Int, p: Int, what: String) = new SameElementsLong(sz, p, what)
- override def comparisons = List()
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala
deleted file mode 100644
index d0ddf9f70e..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanLight.scala
+++ /dev/null
@@ -1,46 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-import scala.collection.parallel.mutable.ParArray
-
-
-object ScanLight extends Companion {
- def benchName = "scan-light";
- def apply(sz: Int, parallelism: Int, what: String) = new ScanLight(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 40000
-
- val op = (a: Cont, b: Cont) => {
- operation(a, b)
- }
- def operation(a: Cont, b: Cont) = {
- val m = if (a.in < 0) 1 else 0
- new Cont(a.in + b.in + m * (0 until 2).reduceLeft(_ + _))
- }
-}
-
-
-class ScanLight(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ScanLight
- override def repetitionsPerRun = 50
- override val runs = 12
-
- def runpar = pa.scan(new Cont(0))(ScanLight.op)
- def runseq = sequentialScan(new Cont(0), ScanLight.op, sz)
- def runjsr = jsrarr.cumulate(new extra166y.Ops.Reducer[Cont] {
- def op(a: Cont, b: Cont) = ScanLight.operation(a, b)
- }, new Cont(0))
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala
deleted file mode 100644
index a60ba7aa33..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala
+++ /dev/null
@@ -1,55 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-import scala.collection.parallel.mutable.ParArray
-
-
-object ScanMedium extends Companion {
- def benchName = "scan-medium";
- def apply(sz: Int, parallelism: Int, what: String) = new ScanMedium(sz, parallelism, what)
- override def comparisons = List("jsr")
- override def defaultSize = 5000
-
- val op = (a: Cont, b: Cont) => {
- operation(a, b)
- }
- def operation(a: Cont, b: Cont) = {
- val m = if (a.in < 0) 1 else 0
- val k = calc(a.in, b.in, m)
- new Cont(a.in + b.in + k * m * (0 until 2).reduceLeft(_ + _))
- }
- private def calc(x: Int, y: Int, n: Int) = {
- var sum = x
- for (i <- 0 until 500) {
- sum += y + (if (sum % 2 == 0) n * x else y)
- if (sum % 5 == 0) sum -= x * y - n * (x + y)
- }
- sum
- }
-}
-
-
-class ScanMedium(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
- def companion = ScanMedium
- override def repetitionsPerRun = 50
- override val runs = 12
-
- def runpar = pa.scan(new Cont(0))(ScanMedium.op)
- def runseq = sequentialScan(new Cont(0), ScanMedium.op, sz)
- def runjsr = jsrarr.cumulate(new extra166y.Ops.Reducer[Cont] {
- def op(a: Cont, b: Cont) = ScanMedium.operation(a, b)
- }, new Cont(0))
- override def comparisonMap = collection.Map("jsr" -> runjsr _)
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala
deleted file mode 100644
index 8fae899b45..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SegmentLength.scala
+++ /dev/null
@@ -1,42 +0,0 @@
-package scala.collection.parallel.benchmarks
-package parallel_array
-
-
-
-
-
-
-
-class SegmentLength(sz: Int, p: Int, what: String)
-extends Resettable[Cont](sz, p, what, (i: Int) => new Cont(i), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = SegmentLength
- override def repetitionsPerRun = 400
-
- def runpar = runresult = pa.segmentLength(SegmentLength.pred2, 0)
- def runseq = runresult = sequentialSegmentLength(SegmentLength.pred2, 0, sz)
- override def comparisonMap = collection.Map()
-}
-
-object SegmentLength extends Companion {
- def benchName = "segment-length";
- def apply(sz: Int, p: Int, what: String) = new SegmentLength(sz, p, what)
- override def comparisons = List()
-
- val pred = (c: Cont) => {
- var in = c.in
- var i = 2
- while (i < 5) {
- if (in % i == 0) in = 0
- i += 1
- }
- c.in >= 0 || in == 0
- }
- val pred2 = (c: Cont) => c.in >= 0
-}
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala
deleted file mode 100644
index 9300851b5f..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SequentialOps.scala
+++ /dev/null
@@ -1,562 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-trait SequentialOps[T] {
-
- var arr: Array[Any] = null
-
- def sequentialReduce(op: (T, T) => T, sz: Int, init: T) = {
- var i = 0
- val until = sz
- var sum = init
- while (i < until) {
- sum = op(sum, arr(i).asInstanceOf[T])
- i += 1
- }
- sum
- }
-
- def sequentialScan(z: T, op: (T, T) => T, sz: Int) = {
- var outarr = new Array[Any](sz + 1)
- outarr(0) = z
- var last = z
- var i = 0
- var j = 1
- val until = sz
- while (i < until) {
- last = op(last, arr(i).asInstanceOf[T])
- outarr(j) = last
- i += 1
- j += 1
- }
- }
-
- def sequentialCount(pred: T => Boolean, sz: Int) = {
- var i = 0
- val until = sz
- var sum = 0
- while (i < until) {
- if (pred(arr(i).asInstanceOf[T])) sum += 1
- i += 1
- }
- sum
- }
-
- def sequentialForeach[U](f: T => U, sz: Int) = {
- var i = 0
- val until = sz
- var sum = 0
- while (i < until) {
- f(arr(i).asInstanceOf[T])
- i += 1
- }
- }
-
- def sequentialSum[U >: T](sz: Int)(implicit num: Numeric[U]) = {
- var i = 0
- val until = sz
- var sum = num.zero
- while (i < until) {
- sum = num.plus(sum, arr(i).asInstanceOf[T])
- i += 1
- }
- sum
- }
-
- def sequentialMin[U >: T](sz: Int)(implicit ord: Ordering[U]) = {
- var i = 1
- val until = sz
- var min = arr(0).asInstanceOf[U]
- while (i < until) {
- val elem = arr(i).asInstanceOf[U]
- if (ord.lt(elem, min)) min = elem
- i += 1
- }
- min
- }
-
- def sequentialForall(pred: T => Boolean, sz: Int) = {
- var i = 0
- val until = sz
- var all = true
- while (i < until) {
- if (pred(arr(i).asInstanceOf[T])) i += 1
- else {
- all = false
- i = until
- }
- }
- all
- }
-
- def sequentialExists(pred: T => Boolean, sz: Int) = {
- var i = 0
- val until = sz
- var some = false
- while (i < until) {
- if (pred(arr(i).asInstanceOf[T])) {
- some = true
- i = until
- } else i += 1
- }
- some
- }
-
- def sequentialFind(pred: T => Boolean, sz: Int) = {
- var i = 0
- val until = sz
- var opt: Option[T] = None
- while (i < until) {
- if (pred(arr(i).asInstanceOf[T])) {
- opt = Some(arr(i).asInstanceOf[T])
- i = until
- } else i += 1
- }
- opt
- }
-
- def sequentialFilter(pred: T => Boolean, sz: Int) = {
- var i = 0
- val buff = new collection.mutable.ArrayBuffer[T]
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (pred(elem)) buff += elem
- i += 1
- }
- val resarr = new Array[Any](buff.size)
- buff.copyToArray(resarr, 0)
- resarr
- }
-
- def sequentialPartition(pred: T => Boolean, sz: Int) = {
- var i = 0
- val btrue = new collection.mutable.ArrayBuffer[T]
- val bfalse = new collection.mutable.ArrayBuffer[T]
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (pred(elem)) btrue += elem
- else bfalse += elem
- i += 1
- }
- val restrue = new Array[Any](btrue.size)
- val resfalse = new Array[Any](bfalse.size)
- btrue.copyToArray(restrue, 0)
- bfalse.copyToArray(resfalse, 0)
- (restrue, resfalse)
- }
-
- def sequentialTakeOpt(n: Int, sz: Int) = {
- var i = 0
- val until = if (n < sz) n else sz
- val res = new Array[Any](until)
- Array.copy(arr, 0, res, 0, until)
-// while (i < until) {
-// res(i) = arr(i)
-// i += 1
-// }
- res
- }
-
- def sequentialTake(n: Int, sz: Int) = {
- var i = 0
- val b = new collection.mutable.ArrayBuffer[T]
- val until = if (n < sz) n else sz
- b.sizeHint(until)
- while (i < until) {
- val elem = arr(i).asInstanceOf[T]
- b += elem
- i += 1
- }
- val res = new Array[Any](n)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialDrop(n: Int, sz: Int) = {
- var i = n
- val b = new collection.mutable.ArrayBuffer[T]
- b.sizeHint(sz - n)
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- b += elem
- i += 1
- }
- val res = new Array[Any](n)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialSlice(from: Int, until: Int, sz: Int) = {
- var i = from
- val b = new collection.mutable.ArrayBuffer[T]
- b.sizeHint(until - from)
- while (i < until) {
- val elem = arr(i).asInstanceOf[T]
- b += elem
- i += 1
- }
- val res = new Array[Any](until - from)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialSplitAtOpt(n: Int, sz: Int) = {
- var i = 0
- val before = new Array[Any](n)
- val after = new Array[Any](sz - n)
- Array.copy(arr, 0, before, 0, n)
- Array.copy(arr, n, after, 0, sz - n)
- (before, after)
- }
-
- def sequentialSplitAt(n: Int, sz: Int) = {
- var i = 0
- val before = new collection.mutable.ArrayBuffer[T]
- before.sizeHint(n)
- val after = new collection.mutable.ArrayBuffer[T]
- after.sizeHint(sz - n)
- while (i < sz) {
- if (i < n) before += arr(i).asInstanceOf[T]
- else after += arr(i).asInstanceOf[T]
- i += 1
- }
- val resbef = new Array[Any](n)
- val resaft = new Array[Any](sz - n)
- before.copyToArray(resbef, 0)
- after.copyToArray(resaft, 0)
- (resbef, resaft)
- }
-
- def sequentialTakeWhile(p: T => Boolean, sz: Int) = {
- var i = 0
- val b = new collection.mutable.ArrayBuffer[T]
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (p(elem)) {
- b += elem
- i += 1
- } else i = sz
- }
- val res = new Array[Any](sz)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialSpan(p: T => Boolean, sz: Int) = {
- val bpref = new collection.mutable.ArrayBuffer[T]
- val brest = new collection.mutable.ArrayBuffer[T]
- var i = 0
- var prefix = true
- var pos = sz
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (prefix) {
- if (p(elem)) bpref += elem
- else {
- pos = i
- prefix = false
- brest += elem
- }
- } else brest += elem
- i += 1
- }
- val respref = new Array[Any](pos)
- val resrest = new Array[Any](sz - pos)
- bpref.copyToArray(respref, 0)
- brest.copyToArray(resrest, 0)
- (respref, resrest)
- }
-
- def sequentialMap(f: T => T, sz: Int) = {
- val b = new collection.mutable.ArrayBuffer[T](sz)
-
- var i = 0
- while (i < sz) {
- b += f(arr(i).asInstanceOf[T])
- i += 1
- }
-
- val res = new Array[Any](sz)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialMapOpt(f: T => T, sz: Int) = {
- val res = new Array[Any](sz)
-
- var i = 0
- while (i < sz) {
- res(i) = f(arr(i).asInstanceOf[T])
- i += 1
- }
-
- res
- }
-
- def sequentialPartialMap(f: PartialFunction[T, T], sz: Int) = {
- val b = new collection.mutable.ArrayBuffer[T](sz)
-
- var i = 0
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (f.isDefinedAt(elem)) b += f(elem)
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialFlatMap(f: T => Traversable[Int], sz: Int) = {
- val b = new collection.mutable.ArrayBuffer[Int](sz)
-
- var i = 0
- while (i < sz) {
- val ts = f(arr(i).asInstanceOf[T])
- for (elem <- ts) b += elem
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialCopyToArray(destarr: Array[Any], pos: Int, sz: Int) = {
- Array.copy(arr, 0, destarr, pos, sz)
- }
-
- def sequentialSegmentLength(pred: T => Boolean, from: Int, sz: Int) = {
- var i = from
- var cnt = 0
-
- while (i < sz) {
- if (pred(arr(i).asInstanceOf[T])) {
- cnt += 1
- i += 1
- } else i = sz
- }
-
- cnt
- }
-
- def sequentialIndexWhere(pred: T => Boolean, from: Int, sz: Int) = {
- var i = from
- var pos = -1
-
- while (i < sz) {
- if (pred(arr(i).asInstanceOf[T])) {
- pos = i
- i = sz
- } else i += 1
- }
-
- pos
- }
-
- def sequentialLastIndexWhere(pred: T => Boolean, end: Int, sz: Int) = {
- var i = end
- var pos = -1
-
- while (i >= 0) {
- if (pred(arr(i).asInstanceOf[T])) {
- pos = i
- i = -1
- } else i -= 1
- }
-
- pos
- }
-
- def sequentialReverse(sz: Int) = {
- val res = new Array[Any](sz)
-
- var i = sz - 1
- var j = 0
- while (i >= 0) {
- res(j) = arr(i)
- i -= 1
- j += 1
- }
- res
- }
-
- def sequentialReverseMap(f: T => T, sz: Int) = {
- val res = new Array[Any](sz)
-
- var i = sz - 1
- var j = 0
- while (i >= 0) {
- res(j) = f(arr(i).asInstanceOf[T])
- i -= 1
- j += 1
- }
- res
- }
-
- def sequentialSameElements(sq: Seq[T], sz: Int): Boolean = {
- if (sz != sq.length) false
- else {
- var i = 0
- val jt = sq.iterator
- while (i < sz) {
- if (arr(i) == jt.next) i += 1
- else i = sz + 1
- }
- if (i == sz) true
- else false
- }
- }
-
- def sequentialCorresponds(sq: Seq[T], f: (T, T) => Boolean, sz: Int): Boolean = {
- if (sz != sq.length) false
- else {
- var i = 0
- val jt = sq.iterator
- while (i < sz) {
- if (f(arr(i).asInstanceOf[T], jt.next)) i += 1
- else i = sz + 1
- }
- if (i == sz) true
- else false
- }
- }
-
- def sequentialDiff(sq: Seq[T], sz: Int) = {
- val occmap = occurrences(sq)
- val b = new collection.mutable.ArrayBuffer[T]
-
- var i = 0
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (occmap(elem) == 0) b += elem
- else occmap(elem) -= 1
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialIntersect(sq: Seq[T], sz: Int) = {
- val occmap = occurrences(sq)
- val b = new collection.mutable.ArrayBuffer[T]
-
- var i = 0
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- val num = occmap(elem)
- if (num > 0) {
- b += elem
- occmap(elem) = num - 1
- }
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
- private def occurrences(sq: Seq[T]) = {
- val occmap = new collection.mutable.HashMap[T, Int] { override def default(k: T) = 0 }
- for (elem <- sq.iterator) occmap(elem) += 1
- occmap
- }
-
- def sequentialRemoveDuplicates(sz: Int) = {
- val occ = new collection.mutable.HashSet[T]
- val b = new collection.mutable.ArrayBuffer[T]
-
- var i = 0
- while (i < sz) {
- val elem = arr(i).asInstanceOf[T]
- if (!occ.contains(elem)) {
- b += elem
- occ.add(elem)
- }
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialPatch(from: Int, p: Seq[T], replaced: Int, sz: Int) = {
- val b = new collection.mutable.ArrayBuffer[T]
- b.sizeHint(from + (sz - from - replaced) + p.size)
-
- var i = 0
- while (i < from) {
- b += arr(i).asInstanceOf[T]
- i += 1
- }
-
- val jt = p.iterator
- while (jt.hasNext) b += jt.next
-
- val skipto = from + replaced
- while (i < from + replaced) i += 1
-
- while (i < sz) {
- b += arr(i).asInstanceOf[T]
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
- def sequentialPadTo(tosize: Int, elem: T, sz: Int) = {
- val b = new collection.mutable.ArrayBuffer[T]
- b.sizeHint(tosize)
-
- var i = 0
- while (i < sz) {
- b += arr(i).asInstanceOf[T]
- i += 1
- }
-
- while (i < tosize) {
- b += elem
- i += 1
- }
-
- val res = new Array[Any](b.size)
- b.copyToArray(res, 0)
- res
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala
deleted file mode 100644
index 450d640b8d..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceFew.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object SliceFew extends Companion {
- def benchName = "slice-few";
- def apply(sz: Int, parallelism: Int, what: String) = new SliceFew(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 50000
-}
-
-class SliceFew(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = SliceFew
- override def repetitionsPerRun = 200
- runresult = -1
-
- def runpar = runresult = pa.slice(5, 25).size
- def runseq = runresult = sequentialSlice(5, 25, sz).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala
deleted file mode 100644
index 4a30b60e1f..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMany.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object SliceMany extends Companion {
- def benchName = "slice-many";
- def apply(sz: Int, parallelism: Int, what: String) = new SliceMany(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 50000
-}
-
-class SliceMany(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = SliceMany
- override def repetitionsPerRun = 200
- runresult = -1
-
- def runpar = runresult = pa.slice(pa.size / 4, pa.size * 3 / 4).size
- def runseq = runresult = sequentialSlice(sz / 4, sz * 3 / 4, sz).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala
deleted file mode 100644
index e16002f15d..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object SliceMedium extends Companion {
- def benchName = "slice-medium";
- def apply(sz: Int, parallelism: Int, what: String) = new SliceMedium(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 50000
-}
-
-class SliceMedium(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = SliceMedium
- override def repetitionsPerRun = 200
- runresult = -1
-
- def runpar = runresult = pa.slice(pa.size / 7, pa.size * 4 / 7).size
- def runseq = runresult = sequentialSlice(sz / 7, sz * 4 / 7, sz).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala
deleted file mode 100644
index 5f1e631bce..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SpanLight.scala
+++ /dev/null
@@ -1,62 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object SpanLight extends Companion {
- def benchName = "span-light";
- def apply(sz: Int, parallelism: Int, what: String) = new SpanLight(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 20000
-
- val pred = (a: Cont) => check(a.in)
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = check(a.in)
- }
-
- def check(n: Int) = {
- var res = n
- var i = 1
- while (i < 10) {
- res += n % i
- i += 1
- }
- if (n != 10000) res % 2 == 0 || n != 10000
- else false
- }
-}
-
-class SpanLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = SpanLight
- runresult = -1
-
- def runpar = runresult = pa.span(SpanLight.pred)._1.size
- def runseq = runresult = sequentialSpan(SpanLight.pred, sz)._1.size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala
deleted file mode 100644
index ff1e009481..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SplitHalf.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object SplitHalf extends Companion {
- def benchName = "split-half";
- def apply(sz: Int, parallelism: Int, what: String) = new SplitHalf(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 50000
-}
-
-class SplitHalf(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = SplitHalf
- override def repetitionsPerRun = 300
- runresult = -1
-
- def runpar = runresult = pa.splitAt(pa.size / 2)._1.size
- def runseq = runresult = sequentialSplitAtOpt(sz / 2, sz)._1.size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala
deleted file mode 100644
index 6ed6d14370..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/SumLight.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-
-
-
-/** Tests reduce method using an operator creating an object as a result. */
-class SumLight(sz: Int, p: Int, what: String)
-extends Resettable[Int](sz, p, what, (i: Int) => i, new Array[Any](_), classOf[Int]) {
- def companion = SumLight
- override def repetitionsPerRun = 500
-
- def runpar = pa.sum
- def runseq = sequentialSum(sz)
- override def comparisonMap = collection.Map()
-}
-
-object SumLight extends Companion {
- def benchName = "sum-light";
- def apply(sz: Int, p: Int, what: String) = new SumLight(sz, p, what)
- override def comparisons = List()
-}
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala
deleted file mode 100644
index 9ddfb77a9d..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeMany.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object TakeMany extends Companion {
- def benchName = "take-many";
- def apply(sz: Int, parallelism: Int, what: String) = new TakeMany(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 250000
-}
-
-class TakeMany(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = TakeMany
- override def repetitionsPerRun = 400
- runresult = -1
-
- def runpar = runresult = pa.take(pa.size / 2).size
- def runseq = runresult = sequentialTake(sz / 2, sz).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala
deleted file mode 100644
index a86c67d0d8..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/TakeWhileLight.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_array
-
-
-import scala.collection.parallel.benchmarks._
-
-
-object TakeWhileLight extends Companion {
- def benchName = "takewhile-light";
- def apply(sz: Int, parallelism: Int, what: String) = new TakeWhileLight(sz, parallelism, what)
- override def comparisons = Nil
- override def defaultSize = 10000
-
- val pred = (a: Cont) => check(a.in)
- val predjsr = new extra166y.Ops.Predicate[Cont] {
- def op(a: Cont) = check(a.in)
- }
-
- def check(n: Int) = {
- var res = n
- var i = 1
- while (i < 10) {
- res += n % i
- i += 1
- }
- res % 2 == 0 || n > 0
- }
-}
-
-class TakeWhileLight(sz: Int, p: Int, what: String)
-extends Resettable(sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont])
-with HavingResult[Int] {
- def companion = TakeWhileLight
- runresult = -1
-
- def runpar = runresult = pa.takeWhile(TakeWhileLight.pred).size
- def runseq = runresult = sequentialTakeWhile(TakeWhileLight.pred, sz).size
- def comparisonMap = collection.Map()
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala
deleted file mode 100644
index af852ce992..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_range/RangeBenches.scala
+++ /dev/null
@@ -1,211 +0,0 @@
-package scala.collection.parallel.benchmarks.parallel_range
-
-
-
-
-
-import scala.collection.parallel.benchmarks.generic._
-import scala.collection.parallel.immutable.ParRange
-import scala.collection.parallel.benchmarks.generic.StandardParIterableBenches
-
-
-
-
-
-object RangeBenches extends StandardParIterableBenches[Int, ParRange] {
-
- def nameOfCollection = "ParRange"
- def operators = new IntOperators {}
- def comparisonMap = collection.Map()
- val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool
- def createSequential(sz: Int, p: Int) = new collection.immutable.Range(0, sz, 1)
- def createParallel(sz: Int, p: Int) = {
- val pr = collection.parallel.immutable.ParRange(0, sz, 1, false)
- forkJoinPool.setParallelism(p)
- collection.parallel.tasksupport.environment = forkJoinPool
- pr
- }
-
- object MapLight extends IterableBenchCompanion {
- override def defaultSize = 20000
- def benchName = "map-light";
- def apply(sz: Int, p: Int, w: String) = new MapLight(sz, p, w)
- }
-
- class MapLight(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def calc(n: Int) = n % 2 + 1
-
- def comparisonMap = collection.Map()
- def runseq = for (n <- this.seqcoll) yield calc(n)
- def runpar = for (n <- this.parcoll) yield calc(n)
- def companion = MapLight
- }
-
- object MapMedium extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "map-medium";
- def apply(sz: Int, p: Int, w: String) = new MapMedium(sz, p, w)
- }
-
- class MapMedium(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- def calc(n: Int) = {
- var i = 0
- var sum = n
- while (i < 40) {
- i += 1
- sum += n % i
- }
- sum
- }
-
- def comparisonMap = collection.Map()
- def runseq = for (n <- this.seqcoll) yield calc(n)
- def runpar = for (n <- this.parcoll) yield calc(n)
- def companion = MapMedium
- }
-
- object ForeachModify extends IterableBenchCompanion {
- override def defaultSize = 150000
- def benchName = "foreach-modify";
- def apply(sz: Int, p: Int, w: String) = new ForeachModify(sz, p, w)
- }
-
- class ForeachModify(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val array = new Array[Int](size)
- def modify(n: Int) = array(n) += 1
-
- def comparisonMap = collection.Map()
- def runseq = for (n <- this.seqcoll) modify(n)
- def runpar = for (n <- this.parcoll.asInstanceOf[ParRange]) {
- modify(n)
- ()
- }
- def companion = ForeachModify
- }
-
- object ForeachModifyMedium extends IterableBenchCompanion {
- override def defaultSize = 20000
- def benchName = "foreach-modify-medium";
- def apply(sz: Int, p: Int, w: String) = new ForeachModifyMedium(sz, p, w)
- }
-
- class ForeachModifyMedium(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val array = new Array[Int](size)
- def modify(n: Int) = array(n) = {
- var i = 0
- var sum = 0
- while (i < 15) {
- sum += i % 3
- i += i + 1
- }
- sum
- }
-
- def comparisonMap = collection.Map()
- def runseq = for (n <- this.seqcoll) modify(n)
- def runpar = for (n <- this.parcoll) modify(n)
- def companion = ForeachModifyMedium
- }
-
- object ForeachModifyHeavy extends IterableBenchCompanion {
- override def defaultSize = 1000
- def benchName = "foreach-modify-heavy";
- def apply(sz: Int, p: Int, w: String) = new ForeachModifyHeavy(sz, p, w)
- }
-
- class ForeachModifyHeavy(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val array = new Array[Int](size)
- def modify(n: Int) = array(n) = collatz(10000 + array(n))
-
- def comparisonMap = collection.Map()
- def runseq = for (n <- this.seqcoll) modify(n)
- def runpar = for (n <- this.parcoll) modify(n)
- def companion = ForeachModifyHeavy
- }
-
- object ForeachAdd extends IterableBenchCompanion {
- override def defaultSize = 10000
- def benchName = "foreach-add";
- def apply(sz: Int, p: Int, w: String) = new ForeachAdd(sz, p, w)
- override def comparisons = List("seq-hashmap")
- }
-
- class ForeachAdd(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val cmap = new java.util.concurrent.ConcurrentHashMap[Int, Int]
- val hmap = new java.util.HashMap[Int, Int]
-
- override def reset = runWhat match {
- case "seq-hashmap" => seqcoll = createSequential(size, parallelism)
- case _ => super.reset
- }
-
- def comparisonMap = collection.Map("seq-hashmap" -> runseqhashmap _)
- def runseqhashmap = for (i <- seqcoll) hmap put (i, onesum(i))
- def runseq = for (i <- seqcoll) cmap put (i, onesum(i))
- def runpar = for (i <- parcoll) cmap put (i, onesum(i))
- def companion = ForeachAdd
- }
-
- object ForeachAddCollatz extends IterableBenchCompanion {
- override def defaultSize = 5000
- def benchName = "foreach-add-collatz";
- def apply(sz: Int, p: Int, w: String) = new ForeachAddCollatz(sz, p, w)
- override def comparisons = List("seq-hashmap")
- }
-
- class ForeachAddCollatz(val size: Int, val parallelism: Int, val runWhat: String)
- extends IterableBench {
- val cmap = new java.util.concurrent.ConcurrentHashMap[Int, Int]
- val hmap = new java.util.HashMap[Int, Int]
-
- override def reset = runWhat match {
- case "seq-hashmap" => seqcoll = createSequential(size, parallelism)
- case _ => super.reset
- }
-
- def comparisonMap = collection.Map("seq-hashmap" -> runseqhashmap _)
- def runseqhashmap = for (i <- seqcoll) hmap put (i, collatz(i))
- def runseq = for (i <- seqcoll) cmap put (i, collatz(i))
- def runpar = for (i <- parcoll) cmap put (i, collatz(i))
- def companion = ForeachAddCollatz
- }
-
- def collatz(n: Int) = {
- var curr = n
- var sum = 0
- while (curr > 1) {
- sum += curr
- if (curr % 2 == 0) curr = curr / 2
- else curr = curr * 3 + 1
- }
- sum
- }
-
- def onesum(n: Int) = {
- var left = n
- var sum = 0
- while (left > 0) {
- sum += left % 2
- left /= 2
- }
- sum
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala
deleted file mode 100644
index 1c1cd52120..0000000000
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_view/SeqViewBenches.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-package scala.collection.parallel
-package benchmarks.parallel_view
-
-
-
-import scala.collection.parallel.benchmarks.generic._
-import scala.collection.SeqView
-
-
-
-
-
-
-
-
-
-
-trait DummyViewBenches
-extends ParSeqViewBenches[Dummy, ParSeqView[Dummy, ParSeq[Dummy], Seq[Dummy]], Seq[Dummy]] {
- def nameOfCollection = "ParView"
- def operators = DummyOperators
- def comparisonMap = collection.Map()
- val forkJoinPool = new scala.concurrent.forkjoin.ForkJoinPool
- def createSequential(sz: Int, p: Int) = {
- val s = new Array[Dummy](sz)
- for (i <- 0 until sz) s(i) = new Dummy(i)
- s
- }
- def createParallel(sz: Int, p: Int) = {
- val pa = new collection.parallel.mutable.ParArray[Dummy](sz)
- forkJoinPool.setParallelism(p)
- for (i <- 0 until sz) pa(i) = new Dummy(i)
- val v = pa.view
- collection.parallel.tasksupport.environment = forkJoinPool
- v
- }
- def createSeqView(sz: Int, p: Int) = createSequential(sz, p).view
-}
-
-
-object DummyViewBenchList extends DummyViewBenches
-
-
-
-
-
-
-
-
-
-
diff --git a/test/benchmarks/src/scala/util/HashSpeedTest.scala b/test/benchmarks/src/scala/util/HashSpeedTest.scala
deleted file mode 100644
index a4d310e6d1..0000000000
--- a/test/benchmarks/src/scala/util/HashSpeedTest.scala
+++ /dev/null
@@ -1,253 +0,0 @@
-object HashSpeedTest {
-
- import System.{ nanoTime => now }
-
- def time[A](f: => A) = {
- val t0 = now
- val ans = f
- (ans, now - t0)
- }
-
- def ptime[A](f: => A) = {
- val (ans, dt) = time(f)
- printf("Elapsed: %.3f\n", dt * 1e-9)
- ans
- }
-
- object HashHist {
- var enabled = true
- val counts = new collection.mutable.HashMap[Int, Int]
- def add(i: Int) { if (enabled) counts(i) = counts.get(i).getOrElse(0) + 1 }
- def resultAndReset = {
- var s = 0L
- var o = 0L
- var m = 0
- counts.valuesIterator.foreach(i => {
- s += i
- if (i > 0) o += 1
- if (i > m) m = i
- })
- counts.clear
- (s, o, m)
- }
- }
-
- def report(s: String, res: (Long, Long, Int)) {
- println("Hash quality of " + s)
- printf(" %5.2f%% of entries are collisions\n", 100 * (res._1 - res._2).toDouble / res._1)
- printf(" Max of %d entries mapped to the same value\n", res._3)
- }
-
- // If you have MurmurHash3 installed, uncomment below (and in main)
- import scala.util.{ MurmurHash3 => MH3 }
-
- val justCountString: String => Unit = str => {
- var s, i = 0
- while (i < str.length) { s += str.charAt(i); i += 1 }
- HashHist.add(s)
- }
-
- val defaultHashString: String => Unit = str => HashHist.add(str.hashCode)
-
- val murmurHashString: String => Unit = str => HashHist.add(MH3.stringHash(str))
-
- def makeCharStrings = {
- val a = new Array[Byte](4)
- val buffer = new collection.mutable.ArrayBuffer[String]
- var i: Int = 'A'
- while (i <= 'Z') {
- a(0) = (i & 0xFF).toByte
- var j: Int = 'a'
- while (j <= 'z') {
- a(1) = (j & 0xFF).toByte
- var k: Int = 'A'
- while (k <= 'z') {
- a(2) = (k & 0xFF).toByte
- var l: Int = 'A'
- while (l <= 'z') {
- a(3) = (l & 0xFF).toByte
- buffer += new String(a)
- l += 1
- }
- k += 1
- }
- j += 1
- }
- i += 1
- }
- buffer.toArray
- }
-
- def hashCharStrings(ss: Array[String], hash: String => Unit) {
- var i = 0
- while (i < ss.length) {
- hash(ss(i))
- i += 1
- }
- }
-
- def justCountList: List[List[Int]] => Unit = lli => {
- var s = 0
- lli.foreach(_.foreach(s += _))
- HashHist.add(s)
- }
-
- def defaultHashList: List[List[Int]] => Unit = lli => HashHist.add(lli.hashCode)
-
- def makeBinaryLists = {
- def singleLists(depth: Int): List[List[Int]] = {
- if (depth <= 0) List(Nil)
- else {
- val set = singleLists(depth - 1)
- val longest = set filter (_.length == depth - 1)
- set ::: (longest.map(0 :: _)) ::: (longest.map(1 :: _))
- }
- }
- val buffer = new collection.mutable.ArrayBuffer[List[List[Int]]]
- val blocks = singleLists(4).toArray
- buffer += List(Nil)
- var i = 0
- while (i < blocks.length) {
- val li = blocks(i) :: Nil
- buffer += li
- var j = 0
- while (j < blocks.length) {
- val lj = blocks(j) :: li
- buffer += lj
- var k = 0
- while (k < blocks.length) {
- val lk = blocks(k) :: lj
- buffer += lk
- var l = 0
- while (l < blocks.length) {
- val ll = blocks(l) :: lk
- buffer += ll
- l += 1
- }
- k += 1
- }
- j += 1
- }
- i += 1
- }
- buffer.toArray
- }
-
- def hashBinaryLists(ls: Array[List[List[Int]]], hash: List[List[Int]] => Unit) {
- var i = 0
- while (i < ls.length) {
- hash(ls(i))
- i += 1
- }
- }
-
- def justCountSets: Set[Int] => Unit = si => {
- var s = 0
- si.foreach(s += _)
- HashHist.add(s)
- }
-
- def defaultHashSets: Set[Int] => Unit = si => HashHist.add(si.hashCode)
-
- def makeIntSets = {
- def sets(depth: Int): List[Set[Int]] = {
- if (depth <= 0) List(Set.empty[Int])
- else {
- val set = sets(depth - 1)
- set ::: set.map(_ + depth)
- }
- }
- sets(20).toArray
- }
-
- def hashIntSets(ss: Array[Set[Int]], hash: Set[Int] => Unit) {
- var i = 0
- while (i < ss.length) {
- hash(ss(i))
- i += 1
- }
- }
-
- def defaultHashTuples: (Product with Serializable) => Unit = p => HashHist.add(p.hashCode)
-
- def makeNestedTuples = {
- val basic = Array(
- (0, 0),
- (0, 1),
- (1, 0),
- (1, 1),
- (0, 0, 0),
- (0, 0, 1),
- (0, 1, 0),
- (1, 0, 0),
- (0, 0, 0, 0),
- (0, 0, 0, 0, 0),
- (false, false),
- (true, false),
- (false, true),
- (true, true),
- (0.7, true, "fish"),
- ((), true, 'c', 400, 9.2, "galactic"))
- basic ++
- (for (i <- basic; j <- basic) yield (i, j)) ++
- (for (i <- basic; j <- basic; k <- basic) yield (i, j, k)) ++
- (for (i <- basic; j <- basic; k <- basic) yield ((i, j), k)) ++
- (for (i <- basic; j <- basic; k <- basic) yield (i, (j, k))) ++
- (for (i <- basic; j <- basic; k <- basic; l <- basic) yield (i, j, k, l)) ++
- (for (i <- basic; j <- basic; k <- basic; l <- basic) yield ((i, j), (k, l))) ++
- (for (i <- basic; j <- basic; k <- basic; l <- basic) yield (i, (j, k, l))) ++
- (for (i <- basic; j <- basic; k <- basic; l <- basic; m <- basic) yield (i, j, k, l, m)) ++
- (for (i <- basic; j <- basic; k <- basic; l <- basic; m <- basic) yield (i, (j, (k, (l, m)))))
- }
-
- def hashNestedTuples(ts: Array[Product with Serializable], hash: (Product with Serializable) => Unit) {
- var i = 0
- while (i < ts.length) {
- hash(ts(i))
- i += 1
- }
- }
-
- def findSpeed[A](n: Int, h: (Array[A], A => Unit) => Unit, aa: Array[A], f: A => Unit) = {
- (time { for (i <- 1 to n) { h(aa, f) } }._2, aa.length.toLong * n)
- }
-
- def reportSpeed[A](repeats: Int, xs: List[(String, () => (Long, Long))]) {
- val tn = Array.fill(xs.length)((0L, 0L))
- for (j <- 1 to repeats) {
- for ((l, i) <- xs zipWithIndex) {
- val x = l._2()
- tn(i) = (tn(i)._1 + x._1, tn(i)._2 + x._2)
- }
- }
- for (((t, n), (title, _)) <- (tn zip xs)) {
- val rate = (n * 1e-6) / (t * 1e-9)
- printf("Hash rate for %s: %4.2f million/second\n", title, rate)
- }
- }
-
- def main(args: Array[String]) {
- val bl = makeBinaryLists
- val is = makeIntSets
- val nt = makeNestedTuples
- // Uncomment the following for string stats if MurmurHash3 available
- val cs = makeCharStrings
- report("Java String hash for strings", { hashCharStrings(cs, defaultHashString); HashHist.resultAndReset })
- report("MurmurHash3 for strings", { hashCharStrings(cs, murmurHashString); HashHist.resultAndReset })
- HashHist.enabled = false
- reportSpeed(3, List(
- ("Java string hash", () => findSpeed[String](30, (x, y) => hashCharStrings(x, y), cs, defaultHashString)),
- ("MurmurHash3 string hash", () => findSpeed[String](30, (x, y) => hashCharStrings(x, y), cs, murmurHashString))))
- // reportSpeed("Java string hash",30,hashCharStrings.tupled,cs,defaultHashString)
- // reportSpeed("MurmurHash3 string hash",30,hashCharStrings.tupled,cs,murmurHashString)
- HashHist.enabled = true
- report("lists of binary int lists", { hashBinaryLists(bl, defaultHashList); HashHist.resultAndReset })
- report("small integer sets", { hashIntSets(is, defaultHashSets); HashHist.resultAndReset })
- report("small nested tuples", { hashNestedTuples(nt, defaultHashTuples); HashHist.resultAndReset })
- HashHist.enabled = false
- reportSpeed(3, List(
- ("lists of lists of binary ints", () => findSpeed(20, hashBinaryLists, bl, defaultHashList)),
- ("small integer sets", () => findSpeed(10, hashIntSets, is, defaultHashSets)),
- ("small nested tuples", () => findSpeed(5, hashNestedTuples, nt, defaultHashTuples))))
- }
-}
diff --git a/test/disabled/coder/Coder.scala b/test/disabled/coder/Coder.scala
index 62b99e0cf0..b116a41a5d 100644
--- a/test/disabled/coder/Coder.scala
+++ b/test/disabled/coder/Coder.scala
@@ -168,7 +168,7 @@ object Test {
/* */
def main(args : Array[String]) {
- // import scala.concurrent.forkjoin.ForkJoinPool
+ // import java.util.concurrent.ForkJoinPool
// collection.parallel.tasksupport.environment match {
// case fj: ForkJoinPool => fj.setParallelism(1)
// }
diff --git a/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala b/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala
index 5d649fcd36..224775129b 100644
--- a/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala
+++ b/test/disabled/presentation/akka/src/akka/actor/ActorRegistry.scala
@@ -342,7 +342,7 @@ class Index[K <: AnyRef, V <: AnyRef: ArrayTag] {
* if no matches it returns None
*/
def findValue(key: K)(f: (V) => Boolean): Option[V] = {
- import scala.collection.JavaConversions._
+ import scala.collection.convert.wrapAsScala._
val set = container get key
if (set ne null) set.iterator.find(f)
else None
@@ -352,7 +352,7 @@ class Index[K <: AnyRef, V <: AnyRef: ArrayTag] {
* Applies the supplied function to all keys and their values
*/
def foreach(fun: (K, V) => Unit) {
- import scala.collection.JavaConversions._
+ import scala.collection.convert.wrapAsScala._
container.entrySet foreach { (e) =>
e.getValue.foreach(fun(e.getKey, _))
}
diff --git a/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala b/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala
index 128584f3c5..ef540f2df3 100644
--- a/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala
+++ b/test/disabled/presentation/akka/src/akka/actor/Scheduler.scala
@@ -15,8 +15,6 @@
*/
package akka.actor
-import scala.collection.JavaConversions
-
import java.util.concurrent._
import akka.event.EventHandler
diff --git a/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala b/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala
index f5c4ccdcaa..17ef3f7bb8 100644
--- a/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala
+++ b/test/disabled/presentation/akka/src/akka/japi/JavaAPI.scala
@@ -58,7 +58,7 @@ trait Creator[T] {
* Java API
*/
sealed abstract class Option[A] extends java.lang.Iterable[A] {
- import scala.collection.JavaConversions._
+ import scala.collection.convert.wrapAsScala._
def get: A
def isEmpty: Boolean
diff --git a/test/disabled/presentation/akka/src/akka/routing/Iterators.scala b/test/disabled/presentation/akka/src/akka/routing/Iterators.scala
index 315e7bea51..d110f2c269 100644
--- a/test/disabled/presentation/akka/src/akka/routing/Iterators.scala
+++ b/test/disabled/presentation/akka/src/akka/routing/Iterators.scala
@@ -5,7 +5,7 @@
package akka.routing
import akka.actor.ActorRef
-import scala.collection.JavaConversions._
+import scala.collection.convert.wrapAsScala._
import scala.collection.immutable.Seq
/**
diff --git a/test/disabled/presentation/akka/src/akka/routing/Listeners.scala b/test/disabled/presentation/akka/src/akka/routing/Listeners.scala
index 04f6c1259f..d8a537731d 100644
--- a/test/disabled/presentation/akka/src/akka/routing/Listeners.scala
+++ b/test/disabled/presentation/akka/src/akka/routing/Listeners.scala
@@ -6,7 +6,7 @@ package akka.routing
import akka.actor.{ Actor, ActorRef }
import java.util.concurrent.ConcurrentSkipListSet
-import scala.collection.JavaConversions._
+import scala.collection.convert.wrapAsScala._
sealed trait ListenerMessage
case class Listen(listener: ActorRef) extends ListenerMessage
diff --git a/test/disabled/run/applet-prop.scala b/test/disabled/run/applet-prop.scala
index 9c29dfd979..7a98c25cab 100644
--- a/test/disabled/run/applet-prop.scala
+++ b/test/disabled/run/applet-prop.scala
@@ -8,7 +8,7 @@ class S extends javax.swing.JApplet {
object Test extends SecurityTest {
val s = new S
- // lazy val TestKey = sys.SystemProperties.noTraceSupression.key
+ // lazy val TestKey = sys.SystemProperties.noTraceSuppression.key
// def hitPerm() = new Throwable with scala.util.control.ControlThrowable { }
//
// var throwing = false
diff --git a/test/disabled/run/indylambda-specialization.scala b/test/disabled/run/indylambda-specialization.scala
new file mode 100644
index 0000000000..2c66073e90
--- /dev/null
+++ b/test/disabled/run/indylambda-specialization.scala
@@ -0,0 +1,15 @@
+object Test {
+ def assertApply(expected: Boolean) = {
+ val frames = Thread.currentThread.getStackTrace.takeWhile(_.getMethodName != "main")
+ val usesObjectApply = frames.exists(_.getMethodName == "apply")
+ assert(expected == usesObjectApply, frames.mkString("\n"))
+ }
+ def assertSpecialized() = assertApply(false)
+ def assertUnspecialized() = assertApply(true)
+ def main(args: Array[String]): Unit = {
+ ((i: String) => {assertUnspecialized(); i}).apply("")
+ (() => {assertSpecialized(); 0}).apply()
+ ((i: Int) => {assertSpecialized(); i}).apply(0)
+ ((i: Int, j: Int) => {assertSpecialized(); i + j}).apply(0, 0)
+ }
+}
diff --git a/test/disabled/run/t7843-jsr223-service.check b/test/disabled/run/t7843-jsr223-service.check
deleted file mode 100644
index a668df3567..0000000000
--- a/test/disabled/run/t7843-jsr223-service.check
+++ /dev/null
@@ -1,2 +0,0 @@
-n: Object = 10
-12345678910
diff --git a/test/disabled/run/t7843-jsr223-service.scala b/test/disabled/run/t7843-jsr223-service.scala
deleted file mode 100644
index 3c853878ba..0000000000
--- a/test/disabled/run/t7843-jsr223-service.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test extends App {
- val m = new javax.script.ScriptEngineManager()
- val engine = m.getEngineByName("scala")
- engine put ("n", 10)
- engine eval "1 to n.asInstanceOf[Int] foreach print"
-}
diff --git a/test/disabled/run/t7933.check b/test/disabled/run/t7933.check
deleted file mode 100644
index 317e9677c3..0000000000
--- a/test/disabled/run/t7933.check
+++ /dev/null
@@ -1,2 +0,0 @@
-hello
-hello
diff --git a/test/disabled/run/t7933.scala b/test/disabled/run/t7933.scala
deleted file mode 100644
index 58e39dd384..0000000000
--- a/test/disabled/run/t7933.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object Test extends App {
- val m = new javax.script.ScriptEngineManager()
- val engine = m.getEngineByName("scala")
- val res2 = engine.asInstanceOf[javax.script.Compilable]
- res2 compile "8" eval()
- val res5 = res2 compile """println("hello") ; 8"""
- res5 eval()
- res5 eval()
-}
diff --git a/test/files/instrumented/InstrumentationTest.check b/test/files/instrumented/InstrumentationTest.check
index c82d16bd34..d317fc4207 100644
--- a/test/files/instrumented/InstrumentationTest.check
+++ b/test/files/instrumented/InstrumentationTest.check
@@ -1,4 +1,3 @@
-#partest !avian
true
Method call statistics:
1 Foo1.<init>()V
@@ -7,8 +6,5 @@ Method call statistics:
1 instrumented/Foo2.someMethod()I
1 scala/DeprecatedConsole.<init>()V
1 scala/Predef$.println(Ljava/lang/Object;)V
- 1 scala/io/AnsiColor$class.$init$(Lscala/io/AnsiColor;)V
+ 1 scala/io/AnsiColor.$init$(Lscala/io/AnsiColor;)V
1 scala/runtime/BoxesRunTime.boxToBoolean(Z)Ljava/lang/Boolean;
-#partest avian
-!!!TEST SKIPPED!!!
-Instrumentation is not supported on Avian.
diff --git a/test/files/instrumented/indy-symbol-literal.scala b/test/files/instrumented/indy-symbol-literal.scala
new file mode 100644
index 0000000000..a1c333cf95
--- /dev/null
+++ b/test/files/instrumented/indy-symbol-literal.scala
@@ -0,0 +1,19 @@
+import scala.tools.partest.instrumented._
+import scala.tools.partest.instrumented.Instrumentation._
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ 'warmup
+ startProfiling()
+ var i = 0;
+ while (i < 2) {
+ 'foo.name
+ i += 1
+ }
+ stopProfiling()
+ // Only expect a single call to lookup the interned Symbol at each call site the defines
+ // a single literal.
+ val Symbol_apply = MethodCallTrace("scala/Symbol$", "apply", "(Ljava/lang/String;)Lscala/Symbol;")
+ assert(getStatistics.get(Symbol_apply) == Some(1), getStatistics);
+ }
+}
diff --git a/test/files/instrumented/inline-in-constructors.flags b/test/files/instrumented/inline-in-constructors.flags
index d1ebc4c940..63535a7f4f 100644
--- a/test/files/instrumented/inline-in-constructors.flags
+++ b/test/files/instrumented/inline-in-constructors.flags
@@ -1 +1 @@
--optimise -Ydelambdafy:inline -Ybackend:GenASM
+-opt:l:classpath
diff --git a/test/files/jvm/actor-exceptions.check b/test/files/jvm/actor-exceptions.check
deleted file mode 100644
index d86bac9de5..0000000000
--- a/test/files/jvm/actor-exceptions.check
+++ /dev/null
@@ -1 +0,0 @@
-OK
diff --git a/test/files/jvm/actor-exceptions.scala b/test/files/jvm/actor-exceptions.scala
deleted file mode 100644
index bdd983a0e8..0000000000
--- a/test/files/jvm/actor-exceptions.scala
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, Exit}
-import Actor._
-
-case class MyException(text: String) extends Exception {
- override def fillInStackTrace() = this
-}
-
-case class MyOtherException(text: String) extends Exception {
- override def fillInStackTrace() = this
-}
-
-object Master extends Actor {
- trapExit = true
- def act() {
- try {
- link(Slave)
- Slave.start()
- for (i <- 0 until 10) Slave ! A
- react {
- case Exit(from, reason) =>
- println("OK")
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-object Slave extends Actor {
- override def toString = "Slave"
- override def exceptionHandler: PartialFunction[Exception, Unit] = {
- case MyException(text) =>
- case other if !other.isInstanceOf[scala.util.control.ControlThrowable] => super.exceptionHandler(other)
- }
- def act() {
- try {
- var cnt = 0
- loop {
- react {
- case A =>
- cnt += 1
- if (cnt % 2 != 0) throw MyException("problem")
- if (cnt == 10) {
- throw MyOtherException("unhandled")
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] &&
- !e.isInstanceOf[MyException] &&
- !e.isInstanceOf[MyOtherException] =>
- e.printStackTrace()
- }
- }
-}
-
-case object A
-
- def main(args: Array[String]) {
- Master.start()
- }
-}
diff --git a/test/files/jvm/actor-executor.check b/test/files/jvm/actor-executor.check
deleted file mode 100644
index bdbdb5c6a2..0000000000
--- a/test/files/jvm/actor-executor.check
+++ /dev/null
@@ -1,20 +0,0 @@
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
diff --git a/test/files/jvm/actor-executor.scala b/test/files/jvm/actor-executor.scala
deleted file mode 100644
index 0fc28b4d85..0000000000
--- a/test/files/jvm/actor-executor.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import java.util.concurrent.Executors
-import scala.actors.{Actor, SchedulerAdapter}
-import Actor._
-
-trait AdaptedActor extends Actor {
- override def scheduler =
- Test.scheduler
-}
-
-object One extends AdaptedActor {
- def act() {
- try {
- Two.start()
- var i = 0
- loopWhile (i < 10000) {
- i += 1
- Two ! 'MsgForTwo
- react {
- case 'MsgForOne =>
- if (i % 1000 == 0)
- println("One: OK")
- if (i == 10000)
- Test.executor.shutdown()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-object Two extends AdaptedActor {
- def act() {
- try {
- var i = 0
- loopWhile (i < 10000) {
- i += 1
- react {
- case 'MsgForTwo =>
- if (i % 1000 == 0)
- println("Two: OK")
- One ! 'MsgForOne
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- val executor =
- Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
-
- val scheduler =
- new SchedulerAdapter {
- def execute(block: => Unit) {
- val task = new Runnable {
- def run() { block }
- }
- try {
- executor.execute(task)
- } catch {
- case ree: java.util.concurrent.RejectedExecutionException =>
- task.run()
- }
- }
- }
-
- def main(args: Array[String]) {
- One.start()
- }
-}
diff --git a/test/files/jvm/actor-executor2.check b/test/files/jvm/actor-executor2.check
deleted file mode 100644
index da78f45836..0000000000
--- a/test/files/jvm/actor-executor2.check
+++ /dev/null
@@ -1,21 +0,0 @@
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-One exited
diff --git a/test/files/jvm/actor-executor2.scala b/test/files/jvm/actor-executor2.scala
deleted file mode 100644
index 5badf2ae7e..0000000000
--- a/test/files/jvm/actor-executor2.scala
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, SchedulerAdapter, Exit}
-import Actor._
-import java.util.concurrent.{Executors, RejectedExecutionException}
-
-object One extends AdaptedActor {
- def act() {
- try {
- Two.start()
- var i = 0
- loopWhile (i < Test.NUM_MSG) {
- i += 1
- Two ! 'MsgForTwo
- react {
- case 'MsgForOne =>
- if (i % (Test.NUM_MSG/10) == 0)
- println("One: OK")
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-object Two extends AdaptedActor {
- def act() {
- try {
- var i = 0
- loopWhile (i < Test.NUM_MSG) {
- i += 1
- react {
- case 'MsgForTwo =>
- if (i % (Test.NUM_MSG/10) == 0)
- println("Two: OK")
- One ! 'MsgForOne
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-trait AdaptedActor extends Actor {
- override def scheduler =
- Test.scheduler
-}
-
- val NUM_MSG = 100000
-
- val executor =
- Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
-
- val scheduler =
- new SchedulerAdapter {
- def execute(block: => Unit) {
- val task = new Runnable {
- def run() { block }
- }
- try {
- executor.execute(task)
- } catch {
- case ree: RejectedExecutionException =>
- task.run() // run task on current thread
- }
- }
- }
-
- def main(args: Array[String]) {
- try {
- self.trapExit = true
- link(One)
- One.start()
-
- receive {
- case Exit(from, reason) =>
- println("One exited")
- Test.executor.shutdown()
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
diff --git a/test/files/jvm/actor-executor3.check b/test/files/jvm/actor-executor3.check
deleted file mode 100644
index bdbdb5c6a2..0000000000
--- a/test/files/jvm/actor-executor3.check
+++ /dev/null
@@ -1,20 +0,0 @@
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
diff --git a/test/files/jvm/actor-executor3.scala b/test/files/jvm/actor-executor3.scala
deleted file mode 100644
index f8b57d84b3..0000000000
--- a/test/files/jvm/actor-executor3.scala
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.Actor
-import scala.actors.scheduler.ExecutorScheduler
-import java.util.concurrent.Executors
-
-object One extends AdaptedActor {
- def act() {
- try {
- Two.start()
- var i = 0
- loopWhile (i < Test.NUM_MSG) {
- i += 1
- Two ! 'MsgForTwo
- react {
- case 'MsgForOne =>
- if (i % (Test.NUM_MSG/10) == 0)
- println("One: OK")
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-object Two extends AdaptedActor {
- def act() {
- try {
- var i = 0
- loopWhile (i < Test.NUM_MSG) {
- i += 1
- react {
- case 'MsgForTwo =>
- if (i % (Test.NUM_MSG/10) == 0)
- println("Two: OK")
- One ! 'MsgForOne
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-trait AdaptedActor extends Actor {
- override def scheduler =
- Test.scheduler
-}
-
- val NUM_MSG = 100000
-
- val executor =
- Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
-
- val scheduler = ExecutorScheduler(executor)
-
- def main(args: Array[String]) {
- One.start()
- }
-}
diff --git a/test/files/jvm/actor-getstate.check b/test/files/jvm/actor-getstate.check
deleted file mode 100644
index 2c94e48371..0000000000
--- a/test/files/jvm/actor-getstate.check
+++ /dev/null
@@ -1,2 +0,0 @@
-OK
-OK
diff --git a/test/files/jvm/actor-getstate.scala b/test/files/jvm/actor-getstate.scala
deleted file mode 100644
index 425efbe5e6..0000000000
--- a/test/files/jvm/actor-getstate.scala
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.{Reactor, Actor, TIMEOUT}
- import Actor._
-
- def assert(cond: => Boolean, hint: String) {
- if (!cond)
- println("FAIL ["+hint+"]")
- }
-
- def expectActorState(a: Reactor[T] forSome { type T }, s: Actor.State.Value) {
- var done = false
- var i = 0
- while (!done) {
- i = i + 1
- if (i == 10) { // only wait for 2 seconds total
- println("FAIL ["+a+": expected "+s+"]")
- done = true
- }
-
- Thread.sleep(200)
- if (a.getState == s) // success
- done = true
- }
- }
-
- def main(args: Array[String]) {
- actor {
- val a = new Reactor[Any] {
- def act() {
- assert(getState == Actor.State.Runnable, "runnable1")
- react {
- case 'go =>
- println("OK")
- }
- }
- }
- expectActorState(a, Actor.State.New)
-
- a.start()
- expectActorState(a, Actor.State.Suspended)
-
- a ! 'go
- expectActorState(a, Actor.State.Terminated)
-
- val b = new Actor {
- def act() {
- assert(getState == Actor.State.Runnable, "runnable2: "+getState)
- react {
- case 'go =>
- reactWithin(100000) {
- case TIMEOUT =>
- case 'go =>
- receive {
- case 'go =>
- }
- receiveWithin(100000) {
- case TIMEOUT =>
- case 'go =>
- println("OK")
- }
- }
- }
- }
- }
- expectActorState(b, Actor.State.New)
-
- b.start()
- expectActorState(b, Actor.State.Suspended)
-
- b ! 'go
- expectActorState(b, Actor.State.TimedSuspended)
-
- b ! 'go
- expectActorState(b, Actor.State.Blocked)
-
- b ! 'go
- expectActorState(b, Actor.State.TimedBlocked)
-
- b ! 'go
- expectActorState(b, Actor.State.Terminated)
- }
- }
-
-}
diff --git a/test/files/jvm/actor-link-getstate.check b/test/files/jvm/actor-link-getstate.check
deleted file mode 100644
index 9755447320..0000000000
--- a/test/files/jvm/actor-link-getstate.check
+++ /dev/null
@@ -1,2 +0,0 @@
-Done
-Terminated
diff --git a/test/files/jvm/actor-link-getstate.scala b/test/files/jvm/actor-link-getstate.scala
deleted file mode 100644
index d8b8ada1e6..0000000000
--- a/test/files/jvm/actor-link-getstate.scala
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.{Actor, Exit}
- import scala.actors.Actor._
-
-case class MyException(text: String) extends Exception(text) {
- override def fillInStackTrace() = this
-}
-
-object Slave extends Actor {
- def act() {
- try {
- loop {
- react {
- case 'doWork =>
- Console.out.println("Done")
- reply('done)
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-object Master extends Actor {
- override def toString = "Master"
- def act() {
- try {
- link(Slave)
- Slave ! 'doWork
- react {
- case 'done =>
- throw new MyException("Master crashed")
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-
- def main(args: Array[String]) {
- actor {
- try {
- self.trapExit = true
- link(Slave)
- Slave.start()
- Master.start()
- react {
- case Exit(from, reason) if (from == Slave) =>
- Console.out.println(Slave.getState)
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
-}
diff --git a/test/files/jvm/actor-looping.check b/test/files/jvm/actor-looping.check
deleted file mode 100644
index a6f5c2e73a..0000000000
--- a/test/files/jvm/actor-looping.check
+++ /dev/null
@@ -1,5 +0,0 @@
-received A
-received A
-received A
-received A
-received last A
diff --git a/test/files/jvm/actor-looping.scala b/test/files/jvm/actor-looping.scala
deleted file mode 100644
index 7bc6f1e5c5..0000000000
--- a/test/files/jvm/actor-looping.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Actor._
- case object A
-
- def main(args: Array[String]) {
- val a = actor {
- try {
- var cnt = 0
- loop {
- react {
- case A =>
- cnt += 1
- if (cnt % 2 != 0) continue
- if (cnt < 10)
- println("received A")
- else {
- println("received last A")
- exit()
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-
- for (i <- 0 until 10) a ! A
- }
-}
diff --git a/test/files/jvm/actor-normal-exit.check b/test/files/jvm/actor-normal-exit.check
deleted file mode 100644
index 6865f83b90..0000000000
--- a/test/files/jvm/actor-normal-exit.check
+++ /dev/null
@@ -1,2 +0,0 @@
-Done
-slave exited for reason 'normal
diff --git a/test/files/jvm/actor-normal-exit.scala b/test/files/jvm/actor-normal-exit.scala
deleted file mode 100644
index 90495866e2..0000000000
--- a/test/files/jvm/actor-normal-exit.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.{Actor, Exit}
- object Master extends Actor {
- trapExit = true
- def act() {
- try {
- Slave.start()
- react {
- case Exit(from, reason) =>
- println("slave exited for reason " + reason)
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- object Slave extends Actor {
- def act() {
- try {
- link(Master)
- println("Done")
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- def main(args: Array[String]) {
- Master.start()
- }
-}
diff --git a/test/files/jvm/actor-receivewithin.check b/test/files/jvm/actor-receivewithin.check
deleted file mode 100644
index a6a3e88c61..0000000000
--- a/test/files/jvm/actor-receivewithin.check
+++ /dev/null
@@ -1,16 +0,0 @@
-'msg
-'msg
-'msg
-'msg
-'msg
-TIMEOUT
-TIMEOUT
-TIMEOUT
-TIMEOUT
-TIMEOUT
-'msg2
-'msg2
-'msg2
-'msg2
-'msg2
-TIMEOUT
diff --git a/test/files/jvm/actor-receivewithin.scala b/test/files/jvm/actor-receivewithin.scala
deleted file mode 100644
index 5982462502..0000000000
--- a/test/files/jvm/actor-receivewithin.scala
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, TIMEOUT}
-
-object A extends Actor {
- def act() {
- receive {
- case 'done =>
- var cnt = 0
- while (cnt < 500) {
- cnt += 1
- receiveWithin (0) {
- case 'msg =>
- if (cnt % 100 == 0)
- println("'msg")
- case TIMEOUT =>
- // should not happen
- println("FAIL1")
- }
- }
- cnt = 0
- while (cnt < 500) {
- cnt += 1
- receiveWithin (0) {
- case 'msg =>
- // should not happen
- println("FAIL2")
- case TIMEOUT =>
- if (cnt % 100 == 0)
- println("TIMEOUT")
- }
- }
- B ! 'next
- receive { case 'done => }
- cnt = 0
- while (cnt < 501) {
- cnt += 1
- receiveWithin (500) {
- case 'msg2 =>
- if (cnt % 100 == 0)
- println("'msg2")
- case TIMEOUT =>
- println("TIMEOUT")
- }
- }
- }
- }
-}
-
-object B extends Actor {
- def act() {
- A.start()
- for (_ <- 1 to 500) {
- A ! 'msg
- }
- A ! 'done
- receive {
- case 'next =>
- for (_ <- 1 to 500) {
- A ! 'msg2
- }
- A ! 'done
- }
- }
-}
-
- def main(args:Array[String]) {
- B.start()
- }
-}
diff --git a/test/files/jvm/actor-sync-send-timeout.scala b/test/files/jvm/actor-sync-send-timeout.scala
deleted file mode 100644
index 66a0b0a6ff..0000000000
--- a/test/files/jvm/actor-sync-send-timeout.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.Actor
-
-/* This test is a regression test for SI-4759.
- */
- val Runs = 5
-
- def main(args: Array[String]) = {
- var i = 0
- while (i < Runs) {
- i += 1
- A1 ! 1
- Thread.sleep(500)
- }
- //println("done sending to A1")
- }
-
-object A2 extends Actor {
- this.start()
- def act() {
- loop {
- react {
- case 'stop =>
- //println("A2 exiting")
- exit()
- case _ =>
- }
- }
- }
-}
-
-object A1 extends Actor {
- this.start()
- def act() {
- var i = 0
- loopWhile(i < Test.Runs) {
- i += 1
- react {
- case any =>
- A2 !? (500, any)
- if (i == Test.Runs)
- A2 ! 'stop
- }
- }
- }
-}
-}
diff --git a/test/files/jvm/actor-termination.check b/test/files/jvm/actor-termination.check
deleted file mode 100644
index e3f44d8b18..0000000000
--- a/test/files/jvm/actor-termination.check
+++ /dev/null
@@ -1,2 +0,0 @@
-I'm going to make you wait.
-Ok, I'm done.
diff --git a/test/files/jvm/actor-termination.scala b/test/files/jvm/actor-termination.scala
deleted file mode 100644
index 4a6bf92d48..0000000000
--- a/test/files/jvm/actor-termination.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/* Test that an actor that hasn't finished prevents termination */
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Actor
- def main(args: Array[String]) {
- Actor.actor {
- try {
- println("I'm going to make you wait.")
- Thread.sleep(5000)
- println("Ok, I'm done.")
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-}
diff --git a/test/files/jvm/actor-uncaught-exception.check b/test/files/jvm/actor-uncaught-exception.check
deleted file mode 100644
index 2c94e48371..0000000000
--- a/test/files/jvm/actor-uncaught-exception.check
+++ /dev/null
@@ -1,2 +0,0 @@
-OK
-OK
diff --git a/test/files/jvm/actor-uncaught-exception.scala b/test/files/jvm/actor-uncaught-exception.scala
deleted file mode 100644
index c28ad2fa3c..0000000000
--- a/test/files/jvm/actor-uncaught-exception.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, Exit}
-
-class MyException(msg: String) extends Exception(msg) {
- override def fillInStackTrace() = this
-}
-
-
- case object StartError extends Actor {
- def act() {
- try {
- throw new MyException("I don't want to run!")
- } catch {
- case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] &&
- !e.isInstanceOf[MyException]) =>
- e.printStackTrace()
- }
- }
- }
-
- case object MessageError extends Actor {
- def act() {
- try {
- react {
- case _ => throw new MyException("No message for me!")
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- case object Supervisor extends Actor {
- def act() {
- try {
- trapExit = true
- link(StartError)
- link(MessageError)
- StartError.start()
- MessageError.start()
-
- Actor.loop {
- react {
- case Exit(actor, reason) =>
- println("OK")
- if (actor == StartError)
- MessageError ! 'ping
- else
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- def main(args: Array[String]) {
- Supervisor.start()
- }
-}
diff --git a/test/files/jvm/actor-uncaught-exception2.check b/test/files/jvm/actor-uncaught-exception2.check
deleted file mode 100644
index a54f374aed..0000000000
--- a/test/files/jvm/actor-uncaught-exception2.check
+++ /dev/null
@@ -1,2 +0,0 @@
-UncaughtException(StartError,None,None,Test$MyException: I don't want to run!)
-UncaughtException(MessageError,Some('ping),Some(Supervisor),Test$MyException: No message for me!)
diff --git a/test/files/jvm/actor-uncaught-exception2.scala b/test/files/jvm/actor-uncaught-exception2.scala
deleted file mode 100644
index 8327b4e19d..0000000000
--- a/test/files/jvm/actor-uncaught-exception2.scala
+++ /dev/null
@@ -1,63 +0,0 @@
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, Exit, Debug}
-
-class MyException(msg: String) extends Exception(msg) {
- override def fillInStackTrace() = this
-}
-
- case object StartError extends Actor {
- def act() {
- try {
- throw new MyException("I don't want to run!")
- } catch {
- case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] &&
- !e.isInstanceOf[MyException]) =>
- e.printStackTrace()
- }
- }
- }
-
- case object MessageError extends Actor {
- def act() {
- try {
- react {
- case _ => throw new MyException("No message for me!")
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- case object Supervisor extends Actor {
- def act() {
- try {
- trapExit = true
- link(StartError)
- link(MessageError)
- StartError.start()
- MessageError.start()
-
- Actor.loop {
- react {
- case Exit(actor, reason) =>
- println(reason)
- if (actor == StartError)
- MessageError ! 'ping
- else
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- def main(args: Array[String]) {
- Supervisor.start()
- }
-}
diff --git a/test/files/jvm/annotations.check b/test/files/jvm/annotations.check
index a8dc5ecdd1..43f85ca199 100644
--- a/test/files/jvm/annotations.check
+++ b/test/files/jvm/annotations.check
@@ -1,3 +1,6 @@
+annotations.scala:7: warning: class remote in package scala is deprecated (since 2.12.0): extend java.rmi.Remote instead and add @throws[java.rmi.RemoteException] to public methods
+ def foo: Unit = ()
+ ^
class java.rmi.RemoteException
class java.io.IOException
@java.lang.Deprecated()
diff --git a/test/files/jvm/annotations.flags b/test/files/jvm/annotations.flags
new file mode 100644
index 0000000000..c36e713ab8
--- /dev/null
+++ b/test/files/jvm/annotations.flags
@@ -0,0 +1 @@
+-deprecation \ No newline at end of file
diff --git a/test/files/jvm/bytecode-test-example.flags b/test/files/jvm/bytecode-test-example.flags
new file mode 100644
index 0000000000..213d7425d1
--- /dev/null
+++ b/test/files/jvm/bytecode-test-example.flags
@@ -0,0 +1 @@
+-opt:l:none
diff --git a/test/files/jvm/bytecode-test-example/Foo_1.flags b/test/files/jvm/bytecode-test-example/Foo_1.flags
deleted file mode 100644
index 49f2d2c4c8..0000000000
--- a/test/files/jvm/bytecode-test-example/Foo_1.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenASM
diff --git a/test/files/jvm/constant-optimization/Foo_1.flags b/test/files/jvm/constant-optimization/Foo_1.flags
deleted file mode 100644
index 67a1dbe8da..0000000000
--- a/test/files/jvm/constant-optimization/Foo_1.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ynooptimise -Yconst-opt -Ybackend:GenASM \ No newline at end of file
diff --git a/test/files/jvm/daemon-actor-termination.check b/test/files/jvm/daemon-actor-termination.check
deleted file mode 100644
index b2ff72fd0b..0000000000
--- a/test/files/jvm/daemon-actor-termination.check
+++ /dev/null
@@ -1,2 +0,0 @@
-MSG1
-MSG2
diff --git a/test/files/jvm/daemon-actor-termination.scala b/test/files/jvm/daemon-actor-termination.scala
deleted file mode 100644
index 9bac6340ba..0000000000
--- a/test/files/jvm/daemon-actor-termination.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/* Test that a daemon Actor that hasn't finished does not prevent termination */
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-
- import scala.actors.{Actor, DaemonActor}
- class MyDaemon extends DaemonActor {
- def act() {
- try {
- react {
- case 'hello =>
- println("MSG1")
- reply(())
- react {
- case 'bye =>
- println("done")
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- def main(args: Array[String]) {
- val daemon = new MyDaemon
- daemon.start()
- Actor.actor {
- try {
- daemon !? 'hello
- println("MSG2")
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-}
diff --git a/test/files/jvm/future-alarm.check b/test/files/jvm/future-alarm.check
deleted file mode 100644
index 01a87d1c4c..0000000000
--- a/test/files/jvm/future-alarm.check
+++ /dev/null
@@ -1,20 +0,0 @@
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
diff --git a/test/files/jvm/future-alarm.scala b/test/files/jvm/future-alarm.scala
deleted file mode 100644
index 3e71fa681c..0000000000
--- a/test/files/jvm/future-alarm.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Futures
- def main(args: Array[String]) {
- try {
- for (i <- 1 to 100000) {
- Futures.alarm(0)
- if (i % 10000 == 0)
- println("OK")
- }
- for (_ <- 1 to 10) {
- val ft = Futures.alarm(100)
- ft()
- println("OK")
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
diff --git a/test/files/jvm/future-awaitall-zero.check b/test/files/jvm/future-awaitall-zero.check
deleted file mode 100644
index d86bac9de5..0000000000
--- a/test/files/jvm/future-awaitall-zero.check
+++ /dev/null
@@ -1 +0,0 @@
-OK
diff --git a/test/files/jvm/future-awaitall-zero.scala b/test/files/jvm/future-awaitall-zero.scala
deleted file mode 100644
index 56f4bab16f..0000000000
--- a/test/files/jvm/future-awaitall-zero.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Futures._
- import scala.actors.Actor._
- def main(args: Array[String]) {
- try {
- val ft1 = future { reactWithin(10000) {
- case _ => println("FAIL")
- } }
-
- val ft2 = future { reactWithin(20000) {
- case _ => println("FAIL")
- } }
-
- val res = awaitAll(0, ft1, ft2)
- println("OK")
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
diff --git a/test/files/jvm/future-spec.check b/test/files/jvm/future-spec.check
index df1629dd7e..562d699bde 100644
--- a/test/files/jvm/future-spec.check
+++ b/test/files/jvm/future-spec.check
@@ -1 +1,3 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0)
+warning: there were 19 deprecation warnings (since 2.12.0)
+warning: there were 20 deprecation warnings in total; re-run with -deprecation for details
diff --git a/test/files/jvm/future-spec/FutureTests.scala b/test/files/jvm/future-spec/FutureTests.scala
index efe9c59d7a..d0de2f5542 100644
--- a/test/files/jvm/future-spec/FutureTests.scala
+++ b/test/files/jvm/future-spec/FutureTests.scala
@@ -17,6 +17,19 @@ class FutureTests extends MinimalScalaTest {
case "NoReply" => Promise[String]().future
}
+ def fail(msg: String): Nothing = throw new AssertionError(msg)
+
+ def ECNotUsed[T](f: ExecutionContext => T): T = {
+ val p = Promise[Runnable]()
+ val unusedEC: ExecutionContext = new ExecutionContext {
+ def execute(r: Runnable) = p.success(r)
+ def reportFailure(t: Throwable): Unit = p.failure(t)
+ }
+ val t = f(unusedEC)
+ assert(p.future.value == None, "Future executed logic!")
+ t
+ }
+
val defaultTimeout = 5 seconds
/* future specification */
@@ -24,7 +37,7 @@ class FutureTests extends MinimalScalaTest {
"A future with custom ExecutionContext" should {
"shouldHandleThrowables" in {
val ms = new mutable.HashSet[Throwable] with mutable.SynchronizedSet[Throwable]
- implicit val ec = scala.concurrent.ExecutionContext.fromExecutorService(new scala.concurrent.forkjoin.ForkJoinPool(), {
+ implicit val ec = scala.concurrent.ExecutionContext.fromExecutor(new java.util.concurrent.ForkJoinPool(), {
t =>
ms += t
})
@@ -64,7 +77,61 @@ class FutureTests extends MinimalScalaTest {
Await.ready(waiting, 2000 millis)
ms.size mustBe (4)
- ec.shutdownNow()
+ //FIXME should check
+ }
+ }
+
+ "Futures" should {
+ "have proper toString representations" in {
+ import ExecutionContext.Implicits.global
+ val s = 5
+ val f = new Exception("foo")
+ val t = Try(throw f)
+
+ val expectFailureString = "Future(Failure("+f+"))"
+ val expectSuccessString = "Future(Success(5))"
+ val expectNotCompleteString = "Future(<not completed>)"
+
+ Future.successful(s).toString mustBe expectSuccessString
+ Future.failed(f).toString mustBe expectFailureString
+ Future.fromTry(t).toString mustBe expectFailureString
+ val p = Promise[Int]()
+ p.toString mustBe expectNotCompleteString
+ Promise[Int]().success(s).toString mustBe expectSuccessString
+ Promise[Int]().failure(f).toString mustBe expectFailureString
+ Await.ready(Future { throw f }, 2000 millis).toString mustBe expectFailureString
+ Await.ready(Future { s }, 2000 millis).toString mustBe expectSuccessString
+
+ Future.never.toString mustBe "Future(<never>)"
+ Future.unit.toString mustBe "Future(Success(()))"
+ }
+
+ "have proper const representation for success" in {
+ val s = "foo"
+ val f = Future.successful(s)
+
+ ECNotUsed(ec => f.onFailure({ case _ => fail("onFailure should not have been called") })(ec))
+ assert( ECNotUsed(ec => f.recover({ case _ => fail("recover should not have been called")})(ec)) eq f)
+ assert( ECNotUsed(ec => f.recoverWith({ case _ => fail("flatMap should not have been called")})(ec)) eq f)
+ assert(f.fallbackTo(f) eq f, "Future.fallbackTo must be the same instance as Future.fallbackTo")
+ }
+
+ "have proper const representation for failure" in {
+ val e = new Exception("foo")
+ val f = Future.failed[Future[String]](e)
+
+ assert(f.mapTo[String] eq f, "Future.mapTo must be the same instance as Future.mapTo")
+ assert(f.zip(f) eq f, "Future.zip must be the same instance as Future.zip")
+ assert(f.flatten eq f, "Future.flatten must be the same instance as Future.flatten")
+ assert(f.failed eq f, "Future.failed must be the same instance as Future.failed")
+
+ ECNotUsed(ec => f.foreach(_ => fail("foreach should not have been called"))(ec))
+ ECNotUsed(ec => f.onSuccess({ case _ => fail("onSuccess should not have been called") })(ec))
+ assert( ECNotUsed(ec => f.map(_ => fail("map should not have been called"))(ec)) eq f)
+ assert( ECNotUsed(ec => f.flatMap(_ => fail("flatMap should not have been called"))(ec)) eq f)
+ assert( ECNotUsed(ec => f.filter(_ => fail("filter should not have been called"))(ec)) eq f)
+ assert( ECNotUsed(ec => f.collect({ case _ => fail("collect should not have been called")})(ec)) eq f)
+ assert( ECNotUsed(ec => f.zipWith(f)({ (_,_) => fail("zipWith should not have been called")})(ec)) eq f)
}
}
@@ -85,6 +152,49 @@ class FutureTests extends MinimalScalaTest {
Await.result(f, defaultTimeout) mustBe ("foo")
Await.result(p.future, defaultTimeout) mustBe (true)
}
+
+ "have a unit member representing an already completed Future containing Unit" in {
+ assert(Future.unit ne null, "Future.unit must not be null")
+ assert(Future.unit eq Future.unit, "Future.unit must be the same instance as Future.unit")
+ assert(Future.unit.isCompleted, "Future.unit must already be completed")
+ assert(Future.unit.value.get == Success(()), "Future.unit must contain a Success(())")
+ }
+
+ "have a never member representing a never completed Future of Nothing" in {
+
+ val test: Future[Nothing] = Future.never
+
+ //Verify stable identifier
+ test match {
+ case Future.`never` =>
+ case _ => fail("Future.never did not match Future.`never`")
+ }
+
+ assert(test eq Future.never, "Future.never must be the same instance as Future.never")
+ assert(test ne null, "Future.never must not be null")
+ assert(!test.isCompleted && test.value.isEmpty, "Future.never must never be completed")
+ assert(test.failed eq test)
+ assert(test.asInstanceOf[Future[Future[Nothing]]].flatten eq test)
+ assert(test.zip(test) eq test)
+ assert(test.fallbackTo(test) eq test)
+ assert(test.mapTo[String] eq test)
+
+ ECNotUsed(ec => test.foreach(_ => fail("foreach should not have been called"))(ec))
+ ECNotUsed(ec => test.onSuccess({ case _ => fail("onSuccess should not have been called") })(ec))
+ ECNotUsed(ec => test.onFailure({ case _ => fail("onFailure should not have been called") })(ec))
+ ECNotUsed(ec => test.onComplete({ case _ => fail("onComplete should not have been called") })(ec))
+ ECNotUsed(ec => test.transform(identity, identity)(ec) eq test)
+ ECNotUsed(ec => test.transform(identity)(ec) eq test)
+ ECNotUsed(ec => test.transformWith(_ => fail("transformWith should not have been called"))(ec) eq test)
+ ECNotUsed(ec => test.map(identity)(ec) eq test)
+ ECNotUsed(ec => test.flatMap(_ => fail("flatMap should not have been called"))(ec) eq test)
+ ECNotUsed(ec => test.filter(_ => fail("filter should not have been called"))(ec) eq test)
+ ECNotUsed(ec => test.collect({ case _ => fail("collect should not have been called")})(ec) eq test)
+ ECNotUsed(ec => test.recover({ case _ => fail("recover should not have been called")})(ec) eq test)
+ ECNotUsed(ec => test.recoverWith({ case _ => fail("recoverWith should not have been called")})(ec) eq test)
+ ECNotUsed(ec => test.andThen({ case _ => fail("andThen should not have been called")})(ec) eq test)
+ ECNotUsed(ec => test.zipWith(test)({ (_,_) => fail("zipWith should not have been called")})(ec) eq test)
+ }
}
"The default ExecutionContext" should {
@@ -128,7 +238,7 @@ class FutureTests extends MinimalScalaTest {
"support pattern matching within a for-comprehension" in {
case class Req[T](req: T)
case class Res[T](res: T)
- def async[T](req: Req[T]) = req match {
+ def async[T](req: Req[T]) = (req: @unchecked) match {
case Req(s: String) => Future { Res(s.length) }
case Req(i: Int) => Future { Res((i * 2).toString) }
}
@@ -218,6 +328,142 @@ class FutureTests extends MinimalScalaTest {
} mustBe (r)
}
+ "transform results to results" in {
+ val f1 = Future.successful("foo").transform(_.map(_.toUpperCase))
+ val f2 = Future("bar").transform(_.map(_.toUpperCase))
+ Await.result(f1, defaultTimeout) mustBe "FOO"
+ Await.result(f2, defaultTimeout) mustBe "BAR"
+ }
+
+ "transform failures to failures" in {
+ val initial = new Exception("Initial")
+ val expected1 = new Exception("Expected1")
+ val expected2 = new Exception("Expected2")
+ val f1 = Future(throw initial) transform {
+ case Failure(`initial`) => Failure(expected1)
+ case x => x
+ }
+ val f2 = Future.failed(initial) transform {
+ case Failure(`initial`) => Failure(expected2)
+ case x => x
+ }
+
+ intercept[Exception] { Await.result(f1, defaultTimeout) } mustBe expected1
+ intercept[Exception] { Await.result(f2, defaultTimeout) } mustBe expected2
+ }
+
+ "transform failures to results" in {
+ val initial1 = new Exception("Initial1")
+ val initial2 = new Exception("Initial2")
+ val f1 = Future.failed[String](initial1) transform {
+ case Failure(`initial1`) => Success("foo")
+ case x => x
+ }
+ val f2 = Future[String](throw initial2) transform {
+ case Failure(`initial2`) => Success("bar")
+ case x => x
+ }
+ Await.result(f1, defaultTimeout) mustBe "foo"
+ Await.result(f2, defaultTimeout) mustBe "bar"
+ }
+
+ "transform results to failures" in {
+ val expected1 = new Exception("Expected1")
+ val expected2 = new Exception("Expected2")
+ val expected3 = new Exception("Expected3")
+ val f1 = Future.successful("foo") transform {
+ case Success("foo") => Failure(expected1)
+ case x => x
+ }
+ val f2 = Future("bar") transform {
+ case Success("bar") => Failure(expected2)
+ case x => x
+ }
+ val f3 = Future("bar") transform {
+ case Success("bar") => throw expected3
+ case x => x
+ }
+ intercept[Exception] { Await.result(f1, defaultTimeout) } mustBe expected1
+ intercept[Exception] { Await.result(f2, defaultTimeout) } mustBe expected2
+ intercept[Exception] { Await.result(f3, defaultTimeout) } mustBe expected3
+ }
+
+ "transformWith results" in {
+ val f1 = Future.successful("foo").transformWith {
+ case Success(r) => Future(r.toUpperCase)
+ case f @ Failure(_) => Future.fromTry(f)
+ }
+ val f2 = Future("bar").transformWith {
+ case Success(r) => Future(r.toUpperCase)
+ case f @ Failure(_) => Future.fromTry(f)
+ }
+ Await.result(f1, defaultTimeout) mustBe "FOO"
+ Await.result(f2, defaultTimeout) mustBe "BAR"
+ }
+
+ "transformWith failures" in {
+ val initial = new Exception("Initial")
+ val expected1 = new Exception("Expected1")
+ val expected2 = new Exception("Expected2")
+ val expected3 = new Exception("Expected3")
+
+ val f1 = Future[Int](throw initial).transformWith {
+ case Failure(`initial`) => Future failed expected1
+ case x => Future fromTry x
+ }
+ val f2 = Future.failed[Int](initial).transformWith {
+ case Failure(`initial`) => Future failed expected2
+ case x => Future fromTry x
+ }
+ val f3 = Future[Int](throw initial).transformWith {
+ case Failure(`initial`) => throw expected3
+ case x => Future fromTry x
+ }
+
+ intercept[Exception] { Await.result(f1, defaultTimeout) } mustBe expected1
+ intercept[Exception] { Await.result(f2, defaultTimeout) } mustBe expected2
+ intercept[Exception] { Await.result(f3, defaultTimeout) } mustBe expected3
+ }
+
+ "transformWith failures to future success" in {
+ val initial = new Exception("Initial")
+ val f1 = Future.failed[String](initial).transformWith {
+ case Failure(`initial`) => Future("FOO")
+ case _ => Future failed initial
+ }
+ val f2 = Future[String](throw initial).transformWith {
+ case Failure(`initial`) => Future("BAR")
+ case _ => Future failed initial
+ }
+ Await.result(f1, defaultTimeout) mustBe "FOO"
+ Await.result(f2, defaultTimeout) mustBe "BAR"
+ }
+
+ "transformWith results to future failures" in {
+ val initial = new Exception("Initial")
+ val expected1 = new Exception("Expected1")
+ val expected2 = new Exception("Expected2")
+ val expected3 = new Exception("Expected3")
+
+ val f1 = Future[String]("FOO") transformWith {
+ case Success("FOO") => Future failed expected1
+ case _ => Future successful "FOO"
+ }
+ val f2 = Future.successful("FOO") transformWith {
+ case Success("FOO") => Future failed expected2
+ case _ => Future successful "FOO"
+ }
+ val f3 = Future.successful("FOO") transformWith {
+ case Success("FOO") => throw expected3
+ case _ => Future successful "FOO"
+ }
+
+
+ intercept[Exception] { Await.result(f1, defaultTimeout) } mustBe expected1
+ intercept[Exception] { Await.result(f2, defaultTimeout) } mustBe expected2
+ intercept[Exception] { Await.result(f3, defaultTimeout) } mustBe expected3
+ }
+
"andThen like a boss" in {
val q = new java.util.concurrent.LinkedBlockingQueue[Int]
for (i <- 1 to 1000) {
@@ -281,6 +527,33 @@ class FutureTests extends MinimalScalaTest {
Await.result(successful, timeout) mustBe (("foo", "foo"))
}
+ "zipWith" in {
+ val timeout = 10000 millis
+ val f = new IllegalStateException("test")
+ intercept[IllegalStateException] {
+ val failed = Future.failed[String](f).zipWith(Future.successful("foo")) { _ -> _ }
+ Await.result(failed, timeout)
+ } mustBe (f)
+
+ intercept[IllegalStateException] {
+ val failed = Future.successful("foo").zipWith(Future.failed[String](f)) { _ -> _ }
+ Await.result(failed, timeout)
+ } mustBe (f)
+
+ intercept[IllegalStateException] {
+ val failed = Future.failed[String](f).zipWith(Future.failed[String](f)) { _ -> _ }
+ Await.result(failed, timeout)
+ } mustBe (f)
+
+ val successful = Future.successful("foo").zipWith(Future.successful("foo")) { _ -> _ }
+ Await.result(successful, timeout) mustBe (("foo", "foo"))
+
+ val failure = Future.successful("foo").zipWith(Future.successful("foo")) { (_,_) => throw f }
+ intercept[IllegalStateException] {
+ Await.result(failure, timeout)
+ } mustBe (f)
+ }
+
"fold" in {
val timeout = 10000 millis
def async(add: Int, wait: Int) = Future {
@@ -543,22 +816,6 @@ class FutureTests extends MinimalScalaTest {
Await.ready(f, defaultTimeout).value.get.toString mustBe expected.toString
}
- "should have a decent toString representation" in {
- val i = scala.concurrent.forkjoin.ThreadLocalRandom.current.nextInt()
- val e = new Exception(i.toString)
- val successString = "Future(Success("+i+"))"
- val failureString = "Future(Failure("+e+"))"
- val notCompletedString = "Future(<not completed>)"
-
- Future.successful(i).toString mustBe successString
- Future.failed[Int](e).toString mustBe failureString
- Promise[Int]().toString mustBe notCompletedString
- Promise[Int]().success(i).toString mustBe successString
- Promise[Int]().failure(e).toString mustBe failureString
- Await.ready(Future(i)(ExecutionContext.global), defaultTimeout).toString mustBe successString
- Await.ready(Future(throw e)(ExecutionContext.global), defaultTimeout).toString mustBe failureString
- }
-
}
}
diff --git a/test/files/jvm/future-termination.check b/test/files/jvm/future-termination.check
deleted file mode 100644
index dc335465d4..0000000000
--- a/test/files/jvm/future-termination.check
+++ /dev/null
@@ -1 +0,0 @@
-I can't wait that long, bye.
diff --git a/test/files/jvm/future-termination.scala b/test/files/jvm/future-termination.scala
deleted file mode 100644
index 90ea336ce8..0000000000
--- a/test/files/jvm/future-termination.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/* Test that unevaluated futures do not prevent program termination */
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Futures
- def main(args: Array[String]) {
- try {
- val meaningOfLife = Futures.future {
- Thread.sleep(5000) // pretend this is a harder problem than it is
- println("I have the answer!")
- 42
- }
- println("I can't wait that long, bye.")
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
diff --git a/test/files/jvm/innerClassAttribute.check b/test/files/jvm/innerClassAttribute.check
deleted file mode 100644
index 41448f359b..0000000000
--- a/test/files/jvm/innerClassAttribute.check
+++ /dev/null
@@ -1,54 +0,0 @@
-#partest !-Ydelambdafy:method
--- A4 --
-A4$$anonfun$f$1 / null / null / 17
-A4$$anonfun$f$1 / null / null / 17
-A4 / f / (Lscala/collection/immutable/List;)Lscala/collection/immutable/List;
--- A19 --
-A19$$anonfun$1 / null / null / 17
-A19$$anonfun$2 / null / null / 17
-A19$$anonfun$3 / null / null / 17
-A19$$anonfun$1 / null / null / 17
-A19$$anonfun$2 / null / null / 17
-A19$$anonfun$3 / null / null / 17
-A19 / null / null
-A19 / null / null
-A19 / null / null
--- A20 --
-A20$$anonfun$4 / null / null / 17
-fun1: attribute for itself and the two child closures `() => ()` and `() => () => 1`
-A20$$anonfun$4 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$1 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$2 / null / null / 17
-fun2 () => (): itself and the outer closure
-A20$$anonfun$4 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$1 / null / null / 17
-fun3 () => () => (): itself, the outer closure and its child closure
-A20$$anonfun$4 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$2 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$2$$anonfun$apply$3 / null / null / 17
-fun4: () => 1: itself and the two outer closures
-A20$$anonfun$4 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$2 / null / null / 17
-A20$$anonfun$4$$anonfun$apply$2$$anonfun$apply$3 / null / null / 17
-enclosing: nested closures have outer class defined, but no outer method
-A20 / null / null
-A20$$anonfun$4 / null / null
-A20$$anonfun$4 / null / null
-A20$$anonfun$4$$anonfun$apply$2 / null / null
-#partest -Ydelambdafy:method
--- A4 --
-null / null / null
--- A19 --
-null / null / null
-null / null / null
-null / null / null
--- A20 --
-fun1: attribute for itself and the two child closures `() => ()` and `() => () => 1`
-fun2 () => (): itself and the outer closure
-fun3 () => () => (): itself, the outer closure and its child closure
-fun4: () => 1: itself and the two outer closures
-enclosing: nested closures have outer class defined, but no outer method
-null / null / null
-null / null / null
-null / null / null
-null / null / null
diff --git a/test/files/jvm/innerClassAttribute/Classes_1.scala b/test/files/jvm/innerClassAttribute/Classes_1.scala
index 62c7d94d90..27f01a880a 100644
--- a/test/files/jvm/innerClassAttribute/Classes_1.scala
+++ b/test/files/jvm/innerClassAttribute/Classes_1.scala
@@ -13,7 +13,7 @@ object A3 {
class A4 {
def f(l: List[String]): List[String] = {
- l map (_ + "1")
+ l map (_ + "1") : @noinline // inlining adds a reference to the nested class scala/collection/generic/GenTraversableFactory$GenericCanBuildFrom
}
}
@@ -186,42 +186,31 @@ trait A24 extends A24Base {
}
}
-class SI_9105 {
- // the EnclosingMethod attributes depend on the delambdafy strategy (inline vs method)
-
- // outerClass-inline enclMeth-inline outerClass-method enclMeth-method
+class SI_9105 {
+ // outerClass enclMeth
val fun = (s: String) => {
- class A // closure null (*) SI_9105 null
- def m: Object = { class B; new B } // closure m$1 SI_9105 m$1
- val f: Object = { class C; new C } // closure null (*) SI_9105 null
+ class A // SI_9105 null
+ def m: Object = { class B; new B } // SI_9105 m$1
+ val f: Object = { class C; new C } // SI_9105 null
}
def met = (s: String) => {
- class D // closure null (*) SI_9105 met
- def m: Object = { class E; new E } // closure m$1 SI_9105 m$1
- val f: Object = { class F; new F } // closure null (*) SI_9105 met
+ class D // SI_9105 met
+ def m: Object = { class E; new E } // SI_9105 m$1
+ val f: Object = { class F; new F } // SI_9105 met
}
- // (*) the originalOwner chain of A (similar for D) is: SI_9105.fun.$anonfun-value.A
- // we can get to the anonfun-class (created by uncurry), but not to the apply method.
- //
- // for C and F, the originalOwner chain is fun.$anonfun-value.f.C. at later phases, the rawowner of f is
- // an apply$sp method of the closure class. we could use that as enclosing method, but it would be unsystematic
- // (A / D don't have an encl meth either), and also strange to use the $sp, which is a compilation artifact.
- // So using `null` looks more like the situation in the source code: C / F are nested classes of the anon-fun, and
- // there's no method in between.
-
def byName(op: => Any) = 0
val bnV = byName {
- class G // closure null (*) SI_9105 null
- def m: Object = { class H; new H } // closure m$1 SI_9105 m$1
- val f: Object = { class I; new I } // closure null (*) SI_9105 null
+ class G // SI_9105 null
+ def m: Object = { class H; new H } // SI_9105 m$1
+ val f: Object = { class I; new I } // SI_9105 null
""
}
def bnM = byName {
- class J // closure null (*) SI_9105 bnM
- def m: Object = { class K; new K } // closure m$1 SI_9105 m$1
- val f: Object = { class L; new L } // closure null (*) SI_9105 bnM
+ class J // SI_9105 bnM
+ def m: Object = { class K; new K } // SI_9105 m$1
+ val f: Object = { class L; new L } // SI_9105 bnM
""
}
}
@@ -233,7 +222,7 @@ trait SI_9124 {
def f = new A { def f2 = 0 } // enclosing method is f in the interface SI_9124
- private def g = new A { def f3 = 0 } // only encl class (SI_9124), encl meth is null because the interface SI_9124 doesn't have a method g
+ private def g: Object = new A { def f3 = 0 } // only encl class (SI_9124), encl meth can be g in 2.12 because the interface SI_9124 now has the method g
object O { // member, no encl meth attribute
new A { def f4 = 0 } // enclosing class is O$, no enclosing method
@@ -280,13 +269,30 @@ class SpecializedClassesAreTopLevel {
// }
}
+object AnonymousClassesMayBeNestedInSpecialized {
+ abstract class A
+ class C[@specialized(Int) T] {
+ def foo(t: T): A = new A { }
+ }
+
+ // specialization duplicates the anonymous class, one copy is nested in the specialized subclass of C
+
+ // class C$mcI$sp extends C[Int] {
+ // override def foo(t: Int): A = C$mcI$sp.this.foo$mcI$sp(t);
+ // override def foo$mcI$sp(t: Int): A = {
+ // final class $anon extends A { }
+ // new <$anon: A>()
+ // }
+ // }
+}
+
object NestedInValueClass {
// note that we can only test anonymous functions, nested classes are not allowed inside value classes
class A(val arg: String) extends AnyVal {
// A has InnerClass entries for the two closures (and for A and A$). not for B / C
def f = {
- def g = List().map(x => ((s: String) => x)) // outer class A, no outer method (g is moved to the companion, doesn't exist in A)
- g.map(x => ((s: String) => x)) // outer class A, outer method f
+ def g = List().map(x => ((s: String) => x)): @noinline // outer class A, no outer method (g is moved to the companion, doesn't exist in A)
+ g.map(x => ((s: String) => x)): @noinline // outer class A, outer method f
}
// statements and field declarations are not allowed in value classes
}
@@ -297,3 +303,40 @@ object NestedInValueClass {
def f = { class C; new C } // outer class A$, outer method f
}
}
+
+object LocalAndAnonymousInLazyInitializer {
+ abstract class A
+ class C {
+ lazy val a: A = new A { }
+ lazy val b: A = {
+ class AA extends A
+ new AA
+ }
+ lazy val c: A = {
+ object AA extends A
+ AA
+ }
+ }
+ object O {
+ lazy val a: A = new A { }
+ lazy val b: A = {
+ class AA extends A
+ new AA
+ }
+ lazy val c: A = {
+ object AA extends A
+ AA
+ }
+ }
+ trait T {
+ lazy val a: A = new A { }
+ lazy val b: A = {
+ class AA extends A
+ new AA
+ }
+ lazy val c: A = {
+ object AA extends A
+ AA
+ }
+ }
+} \ No newline at end of file
diff --git a/test/files/jvm/innerClassAttribute/Test.scala b/test/files/jvm/innerClassAttribute/Test.scala
index 3a6737ca46..288c6ee30f 100644
--- a/test/files/jvm/innerClassAttribute/Test.scala
+++ b/test/files/jvm/innerClassAttribute/Test.scala
@@ -23,7 +23,7 @@ object Test extends BytecodeTest {
def testInner(cls: String, fs: (InnerClassNode => Unit)*) = {
val ns = innerClassNodes(cls)
- assert(ns.length == fs.length, ns)
+ assert(ns.length == fs.length, ns.map(_.name))
(ns zip fs.toList) foreach { case (n, f) => f(n) }
}
@@ -78,9 +78,9 @@ object Test extends BytecodeTest {
println(s"${e.outerClass} / ${e.name} / ${e.descriptor}")
}
- def lambdaClass(anonfunName: String, lambdaName: String): String = {
- if (classpath.findClass(anonfunName).isDefined) anonfunName else lambdaName
- }
+
+ val methodHandlesLookup = assertMember(_: InnerClassNode, "java/lang/invoke/MethodHandles", "Lookup", flags = publicStatic | Flags.ACC_FINAL)
+
def testA1() = {
val List(b1) = innerClassNodes("A1")
@@ -109,11 +109,7 @@ object Test extends BytecodeTest {
}
def testA4() = {
- println("-- A4 --")
- printInnerClassNodes("A4")
- val fun = lambdaClass("A4$$anonfun$f$1", "A4$lambda$$f$1")
- printInnerClassNodes(fun)
- printEnclosingMethod(fun)
+ testInner("A4", methodHandlesLookup)
}
def testA5() = {
@@ -129,7 +125,6 @@ object Test extends BytecodeTest {
def testA6() = {
val List(tt1) = innerClassNodes("A6")
assertMember(tt1, "A6", "TT", flags = publicAbstractInterface)
- val List() = innerClassNodes("A6$class")
val List(tt2) = innerClassNodes("A6$TT")
assertMember(tt2, "A6", "TT", flags = publicAbstractInterface)
}
@@ -245,47 +240,11 @@ object Test extends BytecodeTest {
}
def testA19() = {
- println("-- A19 --")
-
- printInnerClassNodes("A19")
-
- val fun1 = lambdaClass("A19$$anonfun$1", "A19$lambda$1")
- val fun2 = lambdaClass("A19$$anonfun$2", "A19$lambda$2")
- val fun3 = lambdaClass("A19$$anonfun$3", "A19$lambda$3")
-
- printInnerClassNodes(fun1)
- printInnerClassNodes(fun2)
- printInnerClassNodes(fun3)
-
- printEnclosingMethod(fun1)
- printEnclosingMethod(fun2)
- printEnclosingMethod(fun3)
+ testInner("A19", methodHandlesLookup)
}
def testA20() = {
- println("-- A20 --")
-
- printInnerClassNodes("A20")
-
- val fun1 = lambdaClass("A20$$anonfun$4", "A20$lambda$1")
- val fun2 = lambdaClass("A20$$anonfun$4$$anonfun$apply$1", "A20$lambda$$$nestedInAnonfun$5$1")
- val fun3 = lambdaClass("A20$$anonfun$4$$anonfun$apply$2", "A20$lambda$$$nestedInAnonfun$5$2")
- val fun4 = lambdaClass("A20$$anonfun$4$$anonfun$apply$2$$anonfun$apply$3", "A20$lambda$$$nestedInAnonfun$7$1")
-
- println("fun1: attribute for itself and the two child closures `() => ()` and `() => () => 1`")
- printInnerClassNodes(fun1)
- println("fun2 () => (): itself and the outer closure")
- printInnerClassNodes(fun2)
- println("fun3 () => () => (): itself, the outer closure and its child closure")
- printInnerClassNodes(fun3)
- println("fun4: () => 1: itself and the two outer closures")
- printInnerClassNodes(fun4)
-
- println("enclosing: nested closures have outer class defined, but no outer method")
- printEnclosingMethod(fun1)
- printEnclosingMethod(fun2)
- printEnclosingMethod(fun3)
- printEnclosingMethod(fun4)
+ testInner("A20", methodHandlesLookup)
}
def testA21() = {
@@ -335,80 +294,40 @@ object Test extends BytecodeTest {
}
def testSI_9105() {
- val isDelambdafyMethod = classpath.findClass("SI_9105$lambda$1").isDefined
- if (isDelambdafyMethod) {
- assertEnclosingMethod ("SI_9105$A$3" , "SI_9105", null , null)
- assertEnclosingMethod ("SI_9105$B$5" , "SI_9105", "m$1", "()Ljava/lang/Object;")
- assertEnclosingMethod ("SI_9105$C$1" , "SI_9105", null , null)
- assertEnclosingMethod ("SI_9105$D$1" , "SI_9105", "met", "()Lscala/Function1;")
- assertEnclosingMethod ("SI_9105$E$1" , "SI_9105", "m$3", "()Ljava/lang/Object;")
- assertEnclosingMethod ("SI_9105$F$1" , "SI_9105", "met", "()Lscala/Function1;")
- assertNoEnclosingMethod("SI_9105$lambda$$met$1")
- assertNoEnclosingMethod("SI_9105$lambda$1")
- assertNoEnclosingMethod("SI_9105")
-
- assertLocal(innerClassNodes("SI_9105$A$3").head, "SI_9105$A$3", "A$3")
- assertLocal(innerClassNodes("SI_9105$B$5").head, "SI_9105$B$5", "B$5")
- assertLocal(innerClassNodes("SI_9105$C$1").head, "SI_9105$C$1", "C$1")
- assertLocal(innerClassNodes("SI_9105$D$1").head, "SI_9105$D$1", "D$1")
- assertLocal(innerClassNodes("SI_9105$E$1").head, "SI_9105$E$1", "E$1")
- assertLocal(innerClassNodes("SI_9105$F$1").head, "SI_9105$F$1", "F$1")
-
- // by-name
- assertEnclosingMethod("SI_9105$G$1", "SI_9105", null , null)
- assertEnclosingMethod("SI_9105$H$1", "SI_9105", "m$2", "()Ljava/lang/Object;")
- assertEnclosingMethod("SI_9105$I$1", "SI_9105", null , null)
- assertEnclosingMethod("SI_9105$J$1", "SI_9105", "bnM", "()I")
- assertEnclosingMethod("SI_9105$K$2", "SI_9105", "m$4", "()Ljava/lang/Object;")
- assertEnclosingMethod("SI_9105$L$1", "SI_9105", "bnM", "()I")
-
- assert(innerClassNodes("SI_9105$lambda$$met$1").isEmpty)
- assert(innerClassNodes("SI_9105$lambda$1").isEmpty)
- assert(innerClassNodes("SI_9105").length == 12) // the 12 local classes
- } else {
- // comment in innerClassAttribute/Classes_1.scala explains the difference between A / C and D / F.
- assertEnclosingMethod ("SI_9105$$anonfun$5$A$3" , "SI_9105$$anonfun$5" , null , null)
- assertEnclosingMethod ("SI_9105$$anonfun$5$B$5" , "SI_9105$$anonfun$5" , "m$1" , "()Ljava/lang/Object;")
- assertEnclosingMethod ("SI_9105$$anonfun$5$C$1" , "SI_9105$$anonfun$5" , null , null)
- assertEnclosingMethod ("SI_9105$$anonfun$met$1$D$1", "SI_9105$$anonfun$met$1", null , null)
- assertEnclosingMethod ("SI_9105$$anonfun$met$1$E$1", "SI_9105$$anonfun$met$1", "m$3" , "()Ljava/lang/Object;")
- assertEnclosingMethod ("SI_9105$$anonfun$met$1$F$1", "SI_9105$$anonfun$met$1", null , null)
- assertEnclosingMethod ("SI_9105$$anonfun$5" , "SI_9105" , null , null)
- assertEnclosingMethod ("SI_9105$$anonfun$met$1" , "SI_9105" , "met" , "()Lscala/Function1;")
- assertNoEnclosingMethod("SI_9105")
-
- assertLocal(ownInnerClassNode("SI_9105$$anonfun$5$A$3"), "SI_9105$$anonfun$5$A$3" , "A$3")
- assertLocal(ownInnerClassNode("SI_9105$$anonfun$5$B$5"), "SI_9105$$anonfun$5$B$5" , "B$5")
- assertLocal(ownInnerClassNode("SI_9105$$anonfun$5$C$1"), "SI_9105$$anonfun$5$C$1" , "C$1")
- assertLocal(ownInnerClassNode("SI_9105$$anonfun$met$1$D$1"), "SI_9105$$anonfun$met$1$D$1", "D$1")
- assertLocal(ownInnerClassNode("SI_9105$$anonfun$met$1$E$1"), "SI_9105$$anonfun$met$1$E$1", "E$1")
- assertLocal(ownInnerClassNode("SI_9105$$anonfun$met$1$F$1"), "SI_9105$$anonfun$met$1$F$1", "F$1")
-
- // by-name
- assertEnclosingMethod("SI_9105$$anonfun$6$G$1", "SI_9105$$anonfun$6", null, null)
- assertEnclosingMethod("SI_9105$$anonfun$6$H$1", "SI_9105$$anonfun$6", "m$2", "()Ljava/lang/Object;")
- assertEnclosingMethod("SI_9105$$anonfun$6$I$1", "SI_9105$$anonfun$6", null, null)
- assertEnclosingMethod("SI_9105$$anonfun$bnM$1$J$1", "SI_9105$$anonfun$bnM$1", null, null)
- assertEnclosingMethod("SI_9105$$anonfun$bnM$1$K$2", "SI_9105$$anonfun$bnM$1", "m$4", "()Ljava/lang/Object;")
- assertEnclosingMethod("SI_9105$$anonfun$bnM$1$L$1", "SI_9105$$anonfun$bnM$1", null, null)
-
- assertAnonymous(ownInnerClassNode("SI_9105$$anonfun$5"), "SI_9105$$anonfun$5")
- assertAnonymous(ownInnerClassNode("SI_9105$$anonfun$met$1"), "SI_9105$$anonfun$met$1")
-
- assert(innerClassNodes("SI_9105$$anonfun$5").length == 4) // itself and three of the local classes
- assert(innerClassNodes("SI_9105$$anonfun$met$1").length == 4) // itself and three of the local classes
- assert(innerClassNodes("SI_9105").length == 4) // the four anon funs
- }
+ assertEnclosingMethod ("SI_9105$A$3" , "SI_9105", null , null)
+ assertEnclosingMethod ("SI_9105$B$5" , "SI_9105", "m$1", "()Ljava/lang/Object;")
+ assertEnclosingMethod ("SI_9105$C$1" , "SI_9105", null , null)
+ assertEnclosingMethod ("SI_9105$D$1" , "SI_9105", "met", "()Lscala/Function1;")
+ assertEnclosingMethod ("SI_9105$E$1" , "SI_9105", "m$2", "()Ljava/lang/Object;")
+ assertEnclosingMethod ("SI_9105$F$1" , "SI_9105", "met", "()Lscala/Function1;")
+ assertNoEnclosingMethod("SI_9105")
+
+ assertLocal(innerClassNodes("SI_9105$A$3").head, "SI_9105$A$3", "A$3")
+ assertLocal(innerClassNodes("SI_9105$B$5").head, "SI_9105$B$5", "B$5")
+ assertLocal(innerClassNodes("SI_9105$C$1").head, "SI_9105$C$1", "C$1")
+ assertLocal(innerClassNodes("SI_9105$D$1").head, "SI_9105$D$1", "D$1")
+ assertLocal(innerClassNodes("SI_9105$E$1").head, "SI_9105$E$1", "E$1")
+ assertLocal(innerClassNodes("SI_9105$F$1").head, "SI_9105$F$1", "F$1")
+
+ // by-name
+ assertEnclosingMethod("SI_9105$G$1", "SI_9105", null , null)
+ assertEnclosingMethod("SI_9105$H$1", "SI_9105", "m$3", "()Ljava/lang/Object;")
+ assertEnclosingMethod("SI_9105$I$1", "SI_9105", null , null)
+ assertEnclosingMethod("SI_9105$J$1", "SI_9105", "bnM", "()I")
+ assertEnclosingMethod("SI_9105$K$2", "SI_9105", "m$4", "()Ljava/lang/Object;")
+ assertEnclosingMethod("SI_9105$L$1", "SI_9105", "bnM", "()I")
+
+ assert(innerClassNodes("SI_9105").length == 13) // the 12 local classes, plus MethodHandles$Lookup
}
def testSI_9124() {
val classes: Map[String, String] = {
List("SI_9124$$anon$10",
- "SI_9124$$anon$11",
"SI_9124$$anon$12",
+ "SI_9124$$anon$13",
"SI_9124$$anon$8",
"SI_9124$$anon$9",
- "SI_9124$O$$anon$13").map({ name =>
+ "SI_9124$O$$anon$11").map({ name =>
val node = loadClassNode(name)
val fMethod = node.methods.asScala.find(_.name.startsWith("f")).get.name
(fMethod, node.name)
@@ -420,7 +339,7 @@ object Test extends BytecodeTest {
assertNoEnclosingMethod("SI_9124$A")
assertEnclosingMethod(classes("f1"), "SI_9124", null, null)
assertEnclosingMethod(classes("f2"), "SI_9124", "f", "()LSI_9124$A;")
- assertEnclosingMethod(classes("f3"), "SI_9124", null, null)
+ assertEnclosingMethod(classes("f3"), "SI_9124", "g", "()Ljava/lang/Object;")
assertEnclosingMethod(classes("f4"), "SI_9124$O$", null, null)
assertEnclosingMethod(classes("f5"), "SI_9124", null, null)
assertEnclosingMethod(classes("f6"), "SI_9124", null, null)
@@ -431,25 +350,19 @@ object Test extends BytecodeTest {
assertMember(ownInnerClassNode("SI_9124$O$"), "SI_9124", "O$")
}
+ // Note: the new trait encoding removed impl classes, so this test name doesn't make sense.
+ // But I've left it here as there were some tests remaining that are still relevant.
def testImplClassesTopLevel() {
val classes = List(
"ImplClassesAreTopLevel$$anon$14",
"ImplClassesAreTopLevel$$anon$15",
"ImplClassesAreTopLevel$$anon$16",
- "ImplClassesAreTopLevel$B1$class",
"ImplClassesAreTopLevel$B1",
- "ImplClassesAreTopLevel$B2$1$class",
"ImplClassesAreTopLevel$B2$1",
- "ImplClassesAreTopLevel$B3$1$class",
"ImplClassesAreTopLevel$B3$1",
- "ImplClassesAreTopLevel$B4$class",
"ImplClassesAreTopLevel$B4$1",
- "ImplClassesAreTopLevel$class",
"ImplClassesAreTopLevel")
- classes.filter(_.endsWith("$class")).foreach(assertNoEnclosingMethod)
- classes.flatMap(innerClassNodes).foreach(icn => assert(!icn.name.endsWith("$class"), icn))
-
assertNoEnclosingMethod("ImplClassesAreTopLevel$B1") // member, no encl meth attr
// no encl meth, but encl class
@@ -467,21 +380,15 @@ object Test extends BytecodeTest {
val b3 = assertLocal(_ : InnerClassNode, "ImplClassesAreTopLevel$B3$1", "B3$1", flags = publicAbstractInterface)
val b4 = assertLocal(_ : InnerClassNode, "ImplClassesAreTopLevel$B4$1", "B4$1", flags = publicAbstractInterface)
- testInner("ImplClassesAreTopLevel$$anon$14", an14, b3)
- testInner("ImplClassesAreTopLevel$$anon$15", an15, b2)
+ testInner("ImplClassesAreTopLevel$$anon$14", an14, b2)
+ testInner("ImplClassesAreTopLevel$$anon$15", an15, b3)
testInner("ImplClassesAreTopLevel$$anon$16", an16, b4)
- testInner("ImplClassesAreTopLevel$B1$class", b1)
- testInner("ImplClassesAreTopLevel$B2$1$class", b2)
- testInner("ImplClassesAreTopLevel$B3$1$class", b3)
- testInner("ImplClassesAreTopLevel$B4$class", b4)
-
testInner("ImplClassesAreTopLevel$B1", b1)
testInner("ImplClassesAreTopLevel$B2$1", b2)
testInner("ImplClassesAreTopLevel$B3$1", b3)
testInner("ImplClassesAreTopLevel$B4$1", b4)
- testInner("ImplClassesAreTopLevel$class", an14, an15, an16)
testInner("ImplClassesAreTopLevel", an14, an15, an16, b1, b2, b3, b4)
}
@@ -507,6 +414,11 @@ object Test extends BytecodeTest {
List("SpecializedClassesAreTopLevel$T$", "SpecializedClassesAreTopLevel$T$B$mcI$sp", "SpecializedClassesAreTopLevel$T$B").foreach(testInner(_, t, b))
}
+ def testAnonymousClassesMayBeNestedInSpecialized() {
+ assertEnclosingMethod("AnonymousClassesMayBeNestedInSpecialized$C$$anon$17", "AnonymousClassesMayBeNestedInSpecialized$C", "foo", "(Ljava/lang/Object;)LAnonymousClassesMayBeNestedInSpecialized$A;")
+ assertEnclosingMethod("AnonymousClassesMayBeNestedInSpecialized$C$mcI$sp$$anon$21", "AnonymousClassesMayBeNestedInSpecialized$C$mcI$sp", "foo$mcI$sp", "(I)LAnonymousClassesMayBeNestedInSpecialized$A;")
+ }
+
def testNestedInValueClass() {
List(
"NestedInValueClass",
@@ -528,37 +440,22 @@ object Test extends BytecodeTest {
testInner("NestedInValueClass$A$B", am, b)
testInner("NestedInValueClass$A$C$2", am, c)
- val isDelambdafyMethod = classpath.findClass("NestedInValueClass$A$lambda$$f$extension$1").isDefined
- if (isDelambdafyMethod) {
- List(
- "NestedInValueClass$A$lambda$$g$2$1",
- "NestedInValueClass$A$lambda$$f$extension$1",
- "NestedInValueClass$A$lambda$$$nestedInAnonfun$13$1",
- "NestedInValueClass$A$lambda$$NestedInValueClass$A$$$nestedInAnonfun$15$1").foreach(assertNoEnclosingMethod)
- testInner("NestedInValueClass$A", a, am)
- testInner("NestedInValueClass$A$", a, am, b, c)
- testInner("NestedInValueClass$A$lambda$$g$2$1", am)
- testInner("NestedInValueClass$A$lambda$$f$extension$1", am)
- testInner("NestedInValueClass$A$lambda$$$nestedInAnonfun$13$1", am)
- testInner("NestedInValueClass$A$lambda$$NestedInValueClass$A$$$nestedInAnonfun$15$1", am)
- } else {
- assertEnclosingMethod("NestedInValueClass$A$$anonfun$g$2$1" , "NestedInValueClass$A" , null, null)
- assertEnclosingMethod("NestedInValueClass$A$$anonfun$g$2$1$$anonfun$apply$4" , "NestedInValueClass$A$$anonfun$g$2$1" , null, null)
- assertEnclosingMethod("NestedInValueClass$A$$anonfun$f$extension$1" , "NestedInValueClass$A" , "f", "()Lscala/collection/immutable/List;")
- assertEnclosingMethod("NestedInValueClass$A$$anonfun$f$extension$1$$anonfun$apply$5", "NestedInValueClass$A$$anonfun$f$extension$1", null, null)
-
- val gfun = assertAnonymous(_: I, "NestedInValueClass$A$$anonfun$g$2$1")
- val ffun = assertAnonymous(_: I, "NestedInValueClass$A$$anonfun$f$extension$1")
- val gfunfun = assertAnonymous(_: I, "NestedInValueClass$A$$anonfun$g$2$1$$anonfun$apply$4")
- val ffunfun = assertAnonymous(_: I, "NestedInValueClass$A$$anonfun$f$extension$1$$anonfun$apply$5")
-
- testInner("NestedInValueClass$A", a, am, ffun, gfun)
- testInner("NestedInValueClass$A$", a, am, ffun, gfun, b, c)
- testInner("NestedInValueClass$A$$anonfun$g$2$1", a, am, gfun, gfunfun)
- testInner("NestedInValueClass$A$$anonfun$g$2$1$$anonfun$apply$4", am, gfun, gfunfun)
- testInner("NestedInValueClass$A$$anonfun$f$extension$1", a, am, ffun, ffunfun)
- testInner("NestedInValueClass$A$$anonfun$f$extension$1$$anonfun$apply$5", am, ffun, ffunfun)
- }
+ testInner("NestedInValueClass$A", a, am)
+ testInner("NestedInValueClass$A$", a, am, b, c, methodHandlesLookup)
+ }
+
+ def testLocalAndAnonymousInLazyInitializer(): Unit = {
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$C$$anon$18", "LocalAndAnonymousInLazyInitializer$C", null, null)
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$C$AA$4", "LocalAndAnonymousInLazyInitializer$C", null, null)
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$C$AA$5$", "LocalAndAnonymousInLazyInitializer$C", null, null)
+
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$O$$anon$19", "LocalAndAnonymousInLazyInitializer$O$", null, null)
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$O$AA$6", "LocalAndAnonymousInLazyInitializer$O$", null, null)
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$O$AA$7$", "LocalAndAnonymousInLazyInitializer$O$", null, null)
+
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$T$$anon$20", "LocalAndAnonymousInLazyInitializer$T", null, null)
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$T$AA$8", "LocalAndAnonymousInLazyInitializer$T", null, null)
+ assertEnclosingMethod("LocalAndAnonymousInLazyInitializer$T$AA$9$", "LocalAndAnonymousInLazyInitializer$T", null, null)
}
def show(): Unit = {
@@ -588,6 +485,8 @@ object Test extends BytecodeTest {
testSI_9124()
testImplClassesTopLevel()
testSpecializedClassesTopLevel()
+ testAnonymousClassesMayBeNestedInSpecialized()
testNestedInValueClass()
+ testLocalAndAnonymousInLazyInitializer()
}
}
diff --git a/test/files/jvm/interpreter.check b/test/files/jvm/interpreter.check
index 9a2162a906..72d8d39fd0 100644
--- a/test/files/jvm/interpreter.check
+++ b/test/files/jvm/interpreter.check
@@ -93,7 +93,7 @@ scala> case class Bar(n: Int)
defined class Bar
scala> implicit def foo2bar(foo: Foo) = Bar(foo.n)
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
foo2bar: (foo: Foo)Bar
scala> val bar: Bar = Foo(3)
@@ -267,7 +267,7 @@ scala> xs map (x => x)
res6: Array[_] = Array(1, 2)
scala> xs map (x => (x, x))
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
res7: Array[(_$1, _$1)] forSome { type _$1 } = Array((1,1), (2,2))
scala>
diff --git a/test/files/jvm/javaReflection.check b/test/files/jvm/javaReflection.check
index 8180ecff8a..f3924940e9 100644
--- a/test/files/jvm/javaReflection.check
+++ b/test/files/jvm/javaReflection.check
@@ -1,97 +1,14 @@
-#partest !-Ydelambdafy:method
-A$$anonfun$$lessinit$greater$1 / null (canon) / $anonfun$$lessinit$greater$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / public A(int) (constr) / null (meth)
-- properties : true (local) / false (member)
-A$$anonfun$$lessinit$greater$1$$anonfun$apply$1 / null (canon) / $anonfun$apply$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A$$anonfun$$lessinit$greater$1 (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-A$$anonfun$2 / null (canon) / $anonfun$2 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-A$$anonfun$3 / null (canon) / $anonfun$3 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-A$$anonfun$4 / null (canon) / $anonfun$4 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-A$$anonfun$f$1 / null (canon) / $anonfun$f$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / public java.lang.Object A.f() (meth)
-- properties : true (local) / false (member)
-A$$anonfun$f$2 / null (canon) / $anonfun$f$2 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / public java.lang.Object A.f() (meth)
-- properties : true (local) / false (member)
-A$D$$anonfun$1 / null (canon) / anonfun$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class A$D$ (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-AO$$anonfun$5 / null (canon) / anonfun$5 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / class AO$ (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-AT$$anonfun$6 / null (canon) / $anonfun$6 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / interface AT (cls) / null (constr) / null (meth)
-- properties : true (local) / false (member)
-#partest -Ydelambdafy:method
-A$D$lambda$1 / A$D$lambda$1 (canon) / A$D$lambda$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$$$lessinit$greater$1 / A$lambda$$$lessinit$greater$1 (canon) / A$lambda$$$lessinit$greater$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$$$nestedInAnonfun$7$1 / A$lambda$$$nestedInAnonfun$7$1 (canon) / A$lambda$$$nestedInAnonfun$7$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$$f$1 / A$lambda$$f$1 (canon) / A$lambda$$f$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$$f$2 / A$lambda$$f$2 (canon) / A$lambda$$f$2 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$1 / A$lambda$1 (canon) / A$lambda$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$2 / A$lambda$2 (canon) / A$lambda$2 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-A$lambda$3 / A$lambda$3 (canon) / A$lambda$3 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-AO$lambda$1 / AO$lambda$1 (canon) / AO$lambda$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-AT$class$lambda$1 / AT$class$lambda$1 (canon) / AT$class$lambda$1 (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
-#partest
A / A (canon) / A (simple)
- declared cls: List(class A$B, interface A$C, class A$D$)
- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
- properties : false (local) / false (member)
-A$$anon$1 / null (canon) / $anon$1 (simple)
+A$$anon$2 / null (canon) / $anon$2 (simple)
- declared cls: List()
- enclosing : null (declaring cls) / class A (cls) / null (constr) / null (meth)
- properties : true (local) / false (member)
A$$anon$3 / null (canon) / $anon$3 (simple)
- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / null (meth)
+- enclosing : null (declaring cls) / class A (cls) / null (constr) / public java.lang.Object A.f() (meth)
- properties : true (local) / false (member)
A$$anon$4 / null (canon) / $anon$4 (simple)
- declared cls: List()
@@ -99,7 +16,7 @@ A$$anon$4 / null (canon) / $anon$4 (simple)
- properties : true (local) / false (member)
A$$anon$5 / null (canon) / $anon$5 (simple)
- declared cls: List()
-- enclosing : null (declaring cls) / class A (cls) / null (constr) / public java.lang.Object A.f() (meth)
+- enclosing : null (declaring cls) / class A (cls) / null (constr) / null (meth)
- properties : true (local) / false (member)
A$$anon$6 / null (canon) / $anon$6 (simple)
- declared cls: List()
@@ -121,7 +38,7 @@ A$D$ / A.D$ (canon) / D$ (simple)
- declared cls: List(class A$D$B, interface A$D$C, class A$D$D$)
- enclosing : class A (declaring cls) / class A (cls) / null (constr) / null (meth)
- properties : false (local) / true (member)
-A$D$$anon$2 / null (canon) / anon$2 (simple)
+A$D$$anon$1 / null (canon) / anon$1 (simple)
- declared cls: List()
- enclosing : null (declaring cls) / class A$D$ (cls) / null (constr) / null (meth)
- properties : true (local) / false (member)
@@ -245,15 +162,7 @@ AT$D$ / AT.D$ (canon) / D$ (simple)
- declared cls: List()
- enclosing : interface AT (declaring cls) / interface AT (cls) / null (constr) / null (meth)
- properties : false (local) / true (member)
-AT$class / AT$class (canon) / AT$class (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
T / T (canon) / T (simple)
- declared cls: List()
- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
- properties : false (local) / false (member)
-T$class / T$class (canon) / T$class (simple)
-- declared cls: List()
-- enclosing : null (declaring cls) / null (cls) / null (constr) / null (meth)
-- properties : false (local) / false (member)
diff --git a/test/files/jvm/nooptimise/Foo_1.flags b/test/files/jvm/nooptimise/Foo_1.flags
deleted file mode 100644
index f493cf9f3f..0000000000
--- a/test/files/jvm/nooptimise/Foo_1.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenASM -optimise -Ynooptimise \ No newline at end of file
diff --git a/test/files/jvm/nooptimise/Foo_1.scala b/test/files/jvm/nooptimise/Foo_1.scala
deleted file mode 100644
index 896d5695de..0000000000
--- a/test/files/jvm/nooptimise/Foo_1.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-class Foo_1 {
- def foo() {
- // optimization will remove this magic 3 from appearing in the source
- // so -Ynooptimize should prevent that
- val x = 3
-
- }
-}
diff --git a/test/files/jvm/nooptimise/Test.scala b/test/files/jvm/nooptimise/Test.scala
deleted file mode 100644
index 7b7ecd6dbd..0000000000
--- a/test/files/jvm/nooptimise/Test.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-import scala.tools.partest.BytecodeTest
-import scala.tools.asm
-import asm.tree.InsnList
-import scala.collection.JavaConverters._
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val classNode = loadClassNode("Foo_1")
- val methodNode = getMethod(classNode, "foo")
- // if optimization didn't run then
- // there should be some useless instructions
- // with the magic constant 3
- val expected = 1
- val got = countMagicThrees(methodNode.instructions)
- assert(got == expected, s"expected $expected but got $got magic threes")
- }
-
- def countMagicThrees(insnList: InsnList): Int = {
- def isMagicThree(node: asm.tree.AbstractInsnNode): Boolean =
- (node.getOpcode == asm.Opcodes.ICONST_3)
- insnList.iterator.asScala.count(isMagicThree)
- }
-}
diff --git a/test/files/jvm/patmat_opt_ignore_underscore.check b/test/files/jvm/patmat_opt_ignore_underscore.check
deleted file mode 100644
index 43f53aba12..0000000000
--- a/test/files/jvm/patmat_opt_ignore_underscore.check
+++ /dev/null
@@ -1 +0,0 @@
-bytecode identical
diff --git a/test/files/jvm/patmat_opt_ignore_underscore.flags b/test/files/jvm/patmat_opt_ignore_underscore.flags
deleted file mode 100644
index 2cd4b38726..0000000000
--- a/test/files/jvm/patmat_opt_ignore_underscore.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize -Ybackend:GenASM \ No newline at end of file
diff --git a/test/files/jvm/patmat_opt_ignore_underscore/Analyzed_1.scala b/test/files/jvm/patmat_opt_ignore_underscore/Analyzed_1.scala
deleted file mode 100644
index b0506018f6..0000000000
--- a/test/files/jvm/patmat_opt_ignore_underscore/Analyzed_1.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-// this class's bytecode, compiled under -optimize is analyzed by the test
-// method a's bytecode should be identical to method b's bytecode
-// this is not the best test for shielding against regressing on this particular issue,
-// but it sets the stage for checking the bytecode emitted by the pattern matcher and
-// comparing it to manually tuned code using if/then/else etc.
-class SameBytecode {
- case class Foo(x: Any, y: String)
-
- def a =
- Foo(1, "a") match {
- case Foo(_: String, y) => y
- }
-
- // this method's body holds the tree that should be generated by the pattern matcher for method a (-Xprint:patmat)
- // the test checks that bytecode for a and b is identical (modulo line numbers)
- // we can't diff trees as they are quite different (patmat uses jumps to labels that cannot be expressed in source, for example)
- // note that the actual tree is quite bad: we do an unnecessary null check, isInstanceOf and local val (x3)
- // some of these will be fixed soon (the initial null check is for the scrutinee, which is harder to fix in patmat)
- def b: String = {
- val x1 = Foo(1, "a")
- if (x1.ne(null)) {
- if (x1.x.isInstanceOf[String]) {
- return x1.y
- }
- }
-
- throw new MatchError(x1)
- }
-} \ No newline at end of file
diff --git a/test/files/jvm/patmat_opt_ignore_underscore/test.scala b/test/files/jvm/patmat_opt_ignore_underscore/test.scala
deleted file mode 100644
index 6179101a7e..0000000000
--- a/test/files/jvm/patmat_opt_ignore_underscore/test.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.tools.partest.BytecodeTest
-
-import scala.tools.nsc.util.JavaClassPath
-import java.io.InputStream
-import scala.tools.asm
-import asm.ClassReader
-import asm.tree.{ClassNode, InsnList}
-import scala.collection.JavaConverters._
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val classNode = loadClassNode("SameBytecode")
- sameBytecode(getMethod(classNode, "a"), getMethod(classNode, "b"))
- }
-}
diff --git a/test/files/jvm/patmat_opt_no_nullcheck.check b/test/files/jvm/patmat_opt_no_nullcheck.check
deleted file mode 100644
index 43f53aba12..0000000000
--- a/test/files/jvm/patmat_opt_no_nullcheck.check
+++ /dev/null
@@ -1 +0,0 @@
-bytecode identical
diff --git a/test/files/jvm/patmat_opt_no_nullcheck.flags b/test/files/jvm/patmat_opt_no_nullcheck.flags
deleted file mode 100644
index 2cd4b38726..0000000000
--- a/test/files/jvm/patmat_opt_no_nullcheck.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize -Ybackend:GenASM \ No newline at end of file
diff --git a/test/files/jvm/patmat_opt_no_nullcheck/Analyzed_1.scala b/test/files/jvm/patmat_opt_no_nullcheck/Analyzed_1.scala
deleted file mode 100644
index 1e4d564cdf..0000000000
--- a/test/files/jvm/patmat_opt_no_nullcheck/Analyzed_1.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-// this class's bytecode, compiled under -optimize is analyzed by the test
-// method a's bytecode should be identical to method b's bytecode
-case class Foo(x: Any)
-
-class SameBytecode {
- def a =
- (Foo(1): Any) match {
- case Foo(_: String) =>
- }
-
- // there's no null check
- def b: Unit = {
- val x1: Any = Foo(1)
- if (x1.isInstanceOf[Foo]) {
- val x3 = x1.asInstanceOf[Foo]
- if (x3.x.isInstanceOf[String]) {
- val x = ()
- return
- }
- }
-
- throw new MatchError(x1)
- }
-} \ No newline at end of file
diff --git a/test/files/jvm/patmat_opt_no_nullcheck/test.scala b/test/files/jvm/patmat_opt_no_nullcheck/test.scala
deleted file mode 100644
index 2927e763d5..0000000000
--- a/test/files/jvm/patmat_opt_no_nullcheck/test.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-import scala.tools.partest.BytecodeTest
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val classNode = loadClassNode("SameBytecode")
- sameBytecode(getMethod(classNode, "a"), getMethod(classNode, "b"))
- }
-}
diff --git a/test/files/jvm/patmat_opt_primitive_typetest.check b/test/files/jvm/patmat_opt_primitive_typetest.check
deleted file mode 100644
index 43f53aba12..0000000000
--- a/test/files/jvm/patmat_opt_primitive_typetest.check
+++ /dev/null
@@ -1 +0,0 @@
-bytecode identical
diff --git a/test/files/jvm/patmat_opt_primitive_typetest.flags b/test/files/jvm/patmat_opt_primitive_typetest.flags
deleted file mode 100644
index b9bb09167e..0000000000
--- a/test/files/jvm/patmat_opt_primitive_typetest.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize -Ybackend:GenASM
diff --git a/test/files/jvm/patmat_opt_primitive_typetest/Analyzed_1.scala b/test/files/jvm/patmat_opt_primitive_typetest/Analyzed_1.scala
deleted file mode 100644
index c961082fa7..0000000000
--- a/test/files/jvm/patmat_opt_primitive_typetest/Analyzed_1.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-// this class's bytecode, compiled under -optimize is analyzed by the test
-// method a's bytecode should be identical to method b's bytecode
-class SameBytecode {
- case class Foo(x: Int, y: String)
-
- def a =
- Foo(1, "a") match {
- case Foo(_: Int, y) => y
- }
-
- // this method's body holds the tree that should be generated by the pattern matcher for method a (-Xprint:patmat)
- // the test checks that bytecode for a and b is identical (modulo line numbers)
- // we can't diff trees as they are quite different (patmat uses jumps to labels that cannot be expressed in source, for example)
- // note that the actual tree is quite bad: we do an unnecessary null check, and local val (x3)
- // some of these will be fixed soon (the initial null check is for the scrutinee, which is harder to fix in patmat)
- def b: String = {
- val x1 = Foo(1, "a")
- if (x1.ne(null)) {
- return x1.y
- }
-
- throw new MatchError(x1)
- }
-} \ No newline at end of file
diff --git a/test/files/jvm/patmat_opt_primitive_typetest/test.scala b/test/files/jvm/patmat_opt_primitive_typetest/test.scala
deleted file mode 100644
index 2927e763d5..0000000000
--- a/test/files/jvm/patmat_opt_primitive_typetest/test.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-import scala.tools.partest.BytecodeTest
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val classNode = loadClassNode("SameBytecode")
- sameBytecode(getMethod(classNode, "a"), getMethod(classNode, "b"))
- }
-}
diff --git a/test/files/jvm/reactor-exceptionOnSend.check b/test/files/jvm/reactor-exceptionOnSend.check
deleted file mode 100644
index 45d62e26a7..0000000000
--- a/test/files/jvm/reactor-exceptionOnSend.check
+++ /dev/null
@@ -1,2 +0,0 @@
-receiver handles exception
-process
diff --git a/test/files/jvm/reactor-exceptionOnSend.scala b/test/files/jvm/reactor-exceptionOnSend.scala
deleted file mode 100644
index 6d79fc9d13..0000000000
--- a/test/files/jvm/reactor-exceptionOnSend.scala
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.Reactor
-import scala.actors.Actor._
-
-case class MyException(text: String) extends Exception(text)
-
-object A extends Reactor[Any] {
- override def exceptionHandler = {
- case MyException(text) =>
- println("receiver handles exception")
- }
-
- def guard(): Boolean =
- if (state == 0) {
- state = 1
- throw MyException("illegal state")
- } else
- true
-
- var state = 0
-
- def act() {
- try {
- loop {
- react {
- case 'hello if guard() =>
- println("process")
- exit()
- }
- }
- } catch {
- case e: Throwable if (!e.isInstanceOf[scala.util.control.ControlThrowable] &&
- !e.isInstanceOf[MyException]) =>
- e.printStackTrace()
- }
- }
-}
-
-object B extends Reactor[Any] {
- def act() {
- try {
- A.start()
- A ! 'hello
- A ! 'hello
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- def main(args: Array[String]) {
- B.start()
- }
-}
diff --git a/test/files/jvm/reactor-producer-consumer.check b/test/files/jvm/reactor-producer-consumer.check
deleted file mode 100644
index d971cea19e..0000000000
--- a/test/files/jvm/reactor-producer-consumer.check
+++ /dev/null
@@ -1,10 +0,0 @@
-42
-42
-42
-42
-42
-42
-42
-42
-42
-42
diff --git a/test/files/jvm/reactor-producer-consumer.scala b/test/files/jvm/reactor-producer-consumer.scala
deleted file mode 100644
index ec34febe01..0000000000
--- a/test/files/jvm/reactor-producer-consumer.scala
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Reactor
- case class Stop()
- case class Get(from: Reactor[Any])
- case class Put(x: Int)
-
- class UnboundedBuffer extends Reactor[Any] {
- def act() {
- try {
- react {
- case Stop() =>
- case Get(from) =>
- val consumer = from
- react {
- case msg @ Put(x) =>
- consumer ! x
- act()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- class Producer(buf: UnboundedBuffer, n: Int, delay: Long, parent: Reactor[Any]) extends Reactor[Any] {
- def act() {
- try {
- var i = 0
- while (i < n) {
- i += 1
- if (delay > 0) Thread.sleep(delay)
- buf ! Put(42)
- }
- parent ! Stop()
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- class Consumer(buf: UnboundedBuffer, n: Int, delay: Long, parent: Reactor[Any]) extends Reactor[Any] {
- val step = n / 10
- var i = 0
- def act() {
- try {
- if (i < n) {
- i += 1
- if (delay > 0) Thread.sleep(delay)
- buf ! Get(this)
- react {
- case res =>
- if (i % step == 0)
- println(res)
- act()
- }
- } else {
- parent ! Stop()
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- def main(args: Array[String]) {
- val parent = new Reactor[Any] {
- def act() {
- try {
- val buffer = new UnboundedBuffer
- buffer.start()
- val producer = new Producer(buffer, 10000, 0, this)
- producer.start()
- val consumer = new Consumer(buffer, 10000, 0, this)
- consumer.start()
- react {
- case Stop() =>
- react {
- case Stop() =>
- buffer ! Stop()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- parent.start()
- }
-}
diff --git a/test/files/jvm/reactor.check b/test/files/jvm/reactor.check
deleted file mode 100644
index 7b16085797..0000000000
--- a/test/files/jvm/reactor.check
+++ /dev/null
@@ -1,22 +0,0 @@
-Pong: ping 0
-Ping: pong
-Pong: ping 10000
-Ping: pong
-Pong: ping 20000
-Ping: pong
-Pong: ping 30000
-Ping: pong
-Pong: ping 40000
-Ping: pong
-Pong: ping 50000
-Ping: pong
-Pong: ping 60000
-Ping: pong
-Pong: ping 70000
-Ping: pong
-Pong: ping 80000
-Ping: pong
-Pong: ping 90000
-Ping: pong
-Ping: stop
-Pong: stop
diff --git a/test/files/jvm/reactor.scala b/test/files/jvm/reactor.scala
deleted file mode 100644
index 91ded27f07..0000000000
--- a/test/files/jvm/reactor.scala
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Ping pong example for Reactor.
- *
- * @author Philipp Haller
- */
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-
-import scala.actors.Reactor
-
-case class Ping(from: Reactor[Any])
-case object Pong
-case object Stop
-
- def main(args: Array[String]) {
- val pong = new PongActor
- val ping = new PingActor(100000, pong)
- ping.start
- pong.start
- }
-
-class PingActor(count: Int, pong: Reactor[Any]) extends Reactor[Any] {
- def act() {
- try {
- var pingsLeft = count - 1
- pong ! Ping(this)
- loop {
- react {
- case Pong =>
- if (pingsLeft % 10000 == 0)
- println("Ping: pong")
- if (pingsLeft > 0) {
- pong ! Ping(this)
- pingsLeft -= 1
- } else {
- println("Ping: stop")
- pong ! Stop
- exit()
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-class PongActor extends Reactor[Any] {
- def act() {
- try {
- var pongCount = 0
- loop {
- react {
- case Ping(from) =>
- if (pongCount % 10000 == 0)
- println("Pong: ping "+pongCount)
- from ! Pong
- pongCount += 1
- case Stop =>
- println("Pong: stop")
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-}
diff --git a/test/files/jvm/replyablereactor.check b/test/files/jvm/replyablereactor.check
deleted file mode 100644
index 0944b17279..0000000000
--- a/test/files/jvm/replyablereactor.check
+++ /dev/null
@@ -1,5 +0,0 @@
-'hello
-'hello
-'hello
-'hello
-'hello
diff --git a/test/files/jvm/replyablereactor.scala b/test/files/jvm/replyablereactor.scala
deleted file mode 100644
index 4c4e13d9ab..0000000000
--- a/test/files/jvm/replyablereactor.scala
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.ReplyReactor
-
-class MyActor extends ReplyReactor {
- def act() {
- try {
- loop {
- react {
- case 'hello =>
- sender ! 'hello
- case 'stop =>
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- def main(args: Array[String]) {
- val a = new MyActor
- a.start()
-
- val b = new ReplyReactor {
- def act() {
- try {
- react {
- case r: MyActor =>
- var i = 0
- loop {
- i += 1
- val ft = r !! 'hello
- ft.inputChannel.react {
- case msg =>
- if (i % 10000 == 0)
- println(msg)
- if (i >= 50000) {
- r ! 'stop
- exit()
- }
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
-
- b ! a
- }
-}
diff --git a/test/files/jvm/replyablereactor2.check b/test/files/jvm/replyablereactor2.check
deleted file mode 100644
index 0944b17279..0000000000
--- a/test/files/jvm/replyablereactor2.check
+++ /dev/null
@@ -1,5 +0,0 @@
-'hello
-'hello
-'hello
-'hello
-'hello
diff --git a/test/files/jvm/replyablereactor2.scala b/test/files/jvm/replyablereactor2.scala
deleted file mode 100644
index 21f33cce56..0000000000
--- a/test/files/jvm/replyablereactor2.scala
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors._
-import scala.actors.Actor._
-
-class MyActor extends ReplyReactor {
- def act() {
- try {
- loop {
- react {
- case 'hello =>
- sender ! 'hello
- case 'stop =>
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- def main(args: Array[String]) {
- val a = new MyActor
- a.start()
-
- val b = new Reactor[Any] {
- def act() {
- try {
- react {
- case r: MyActor =>
- var i = 0
- loop {
- i += 1
- val ft = r !! 'hello
- val msg = ft()
- if (i % 10000 == 0)
- println(msg)
- if (i >= 50000) {
- r ! 'stop
- exit()
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
-
- b ! a
- }
-}
diff --git a/test/files/jvm/replyablereactor3.check b/test/files/jvm/replyablereactor3.check
deleted file mode 100644
index 0944b17279..0000000000
--- a/test/files/jvm/replyablereactor3.check
+++ /dev/null
@@ -1,5 +0,0 @@
-'hello
-'hello
-'hello
-'hello
-'hello
diff --git a/test/files/jvm/replyablereactor3.scala b/test/files/jvm/replyablereactor3.scala
deleted file mode 100644
index 5810ed053f..0000000000
--- a/test/files/jvm/replyablereactor3.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors._
-import scala.actors.Actor._
-
-class MyActor extends ReplyReactor {
- def act() {
- try {
- loop {
- react {
- case 'hello =>
- sender ! 'hello
- case 'stop =>
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- def main(args: Array[String]) {
- val a = new MyActor
- a.start()
-
- val b = new Reactor[Any] {
- def act() {
- try {
- react {
- case r: MyActor =>
- var i = 0
- loop {
- i += 1
- val msg = r !? 'hello
- if (i % 10000 == 0)
- println(msg)
- if (i >= 50000) {
- r ! 'stop
- exit()
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
-
- b ! a
- }
-}
diff --git a/test/files/jvm/replyablereactor4.check b/test/files/jvm/replyablereactor4.check
deleted file mode 100644
index cac0fffe3b..0000000000
--- a/test/files/jvm/replyablereactor4.check
+++ /dev/null
@@ -1,5 +0,0 @@
-Some('hello)
-Some('hello)
-Some('hello)
-Some('hello)
-Some('hello)
diff --git a/test/files/jvm/replyablereactor4.scala b/test/files/jvm/replyablereactor4.scala
deleted file mode 100644
index 95d63684dd..0000000000
--- a/test/files/jvm/replyablereactor4.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors._
-import scala.actors.Actor._
-
-class MyActor extends ReplyReactor {
- def act() {
- try {
- loop {
- react {
- case 'hello =>
- sender ! 'hello
- case 'stop =>
- exit()
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- def main(args: Array[String]) {
- val a = new MyActor
- a.start()
-
- val b = new Reactor[Any] {
- def act() {
- try {
- react {
- case r: MyActor =>
- var i = 0
- loop {
- i += 1
- val msg = r !? (500, 'hello)
- if (i % 200000 == 0)
- println(msg)
- if (i >= 1000000) {
- r ! 'stop
- exit()
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
-
- b ! a
- }
-}
diff --git a/test/files/jvm/replyreactor-react-sender.check b/test/files/jvm/replyreactor-react-sender.check
deleted file mode 100644
index d86bac9de5..0000000000
--- a/test/files/jvm/replyreactor-react-sender.check
+++ /dev/null
@@ -1 +0,0 @@
-OK
diff --git a/test/files/jvm/replyreactor-react-sender.scala b/test/files/jvm/replyreactor-react-sender.scala
deleted file mode 100644
index fdcea09035..0000000000
--- a/test/files/jvm/replyreactor-react-sender.scala
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.ReplyReactor
- import scala.actors.Actor._
-
- val NUM = 2000
-
- def main(args: Array[String]) {
- var b: ReplyReactor = null
-
- val a = new ReplyReactor {
- def act() {
- try {
- var i = 0
- loopWhile (i < NUM) {
- i += 1
- react {
- case 'hello if sender == this => b ! 'fail
- case 'hello if sender == b => // do nothing
- }
- } andThen {
- b ! 'ok
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- a.start()
-
- b = new ReplyReactor {
- def act() {
- try {
- for (_ <- 0 until NUM)
- a ! 'hello
- react {
- case 'fail => println("FAIL")
- case 'ok => println("OK")
- case other => println(other)
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
- }
-
-}
diff --git a/test/files/jvm/replyreactor.check b/test/files/jvm/replyreactor.check
deleted file mode 100644
index 4b2fea867a..0000000000
--- a/test/files/jvm/replyreactor.check
+++ /dev/null
@@ -1 +0,0 @@
-'hello
diff --git a/test/files/jvm/replyreactor.scala b/test/files/jvm/replyreactor.scala
deleted file mode 100644
index 7512fb0eb2..0000000000
--- a/test/files/jvm/replyreactor.scala
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.ReplyReactor
- def main(args: Array[String]) {
- val a = new ReplyReactor {
- def act() {
- try {
- react {
- case 'hello =>
- sender ! 'hello
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- a.start()
-
- val b = new ReplyReactor {
- def act() {
- try {
- react {
- case r: ReplyReactor =>
- r ! 'hello
- react {
- case any =>
- println(any)
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
-
- b ! a
- }
-}
diff --git a/test/files/jvm/scala-concurrent-tck.check b/test/files/jvm/scala-concurrent-tck.check
new file mode 100644
index 0000000000..88cff75abb
--- /dev/null
+++ b/test/files/jvm/scala-concurrent-tck.check
@@ -0,0 +1 @@
+warning: there were 75 deprecation warnings (since 2.12.0); re-run with -deprecation for details
diff --git a/test/files/jvm/scala-concurrent-tck.scala b/test/files/jvm/scala-concurrent-tck.scala
index ce86d4aef0..7197c1d853 100644
--- a/test/files/jvm/scala-concurrent-tck.scala
+++ b/test/files/jvm/scala-concurrent-tck.scala
@@ -90,6 +90,25 @@ trait FutureCallbacks extends TestBase {
promise.success(-1)
}
+ def stressTestNumberofCallbacks(): Unit = once {
+ done =>
+ val promise = Promise[Unit]
+ val otherPromise = Promise[Unit]
+ def attachMeaninglessCallbacksTo(f: Future[Any]): Unit = (1 to 1000).foreach(_ => f.onComplete(_ => ()))
+ attachMeaninglessCallbacksTo(promise.future)
+ val future = promise.future.flatMap { _ =>
+ attachMeaninglessCallbacksTo(otherPromise.future)
+ otherPromise.future
+ }
+ val numbers = new java.util.concurrent.ConcurrentHashMap[Int, Unit]()
+ (0 to 10000) foreach { x => numbers.put(x, ()) }
+ Future.sequence((0 to 10000) map { x => future.andThen({ case _ => numbers.remove(x) }) }) onComplete {
+ _ => done(numbers.isEmpty)
+ }
+ promise.success(())
+ otherPromise.success(())
+ }
+
testOnSuccess()
testOnSuccessWhenCompleted()
testOnSuccessWhenFailed()
@@ -100,6 +119,7 @@ trait FutureCallbacks extends TestBase {
//testOnFailureWhenSpecialThrowable(7, new InterruptedException)
testThatNestedCallbacksDoNotYieldStackOverflow()
testOnFailureWhenTimeoutException()
+ stressTestNumberofCallbacks()
}
@@ -165,6 +185,100 @@ def testTransformFailure(): Unit = once {
g onFailure { case e => done(e eq transformed) }
}
+ def testTransformResultToResult(): Unit = once {
+ done =>
+ Future("foo").transform {
+ case Success(s) => Success(s.toUpperCase)
+ case Failure(f) => throw new Exception("test failed")
+ } onComplete {
+ case Success("FOO") => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformResultToFailure(): Unit = once {
+ done =>
+ val e = new Exception("expected")
+ Future("foo").transform {
+ case Success(s) => Failure(e)
+ case Failure(f) => throw new Exception("test failed")
+ } onComplete {
+ case Failure(`e`) => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformFailureToResult(): Unit = once {
+ done =>
+ val e = "foo"
+ Future(throw new Exception("initial")).transform {
+ case Success(s) => throw new Exception("test failed")
+ case Failure(f) => Success(e)
+ } onComplete {
+ case Success(`e`) => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformFailureToFailure(): Unit = once {
+ done =>
+ val e = new Exception("expected")
+ Future(throw new Exception("initial")).transform {
+ case Success(s) => throw new Exception("test failed")
+ case Failure(f) => Failure(e)
+ } onComplete {
+ case Failure(`e`) => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformWithResultToResult(): Unit = once {
+ done =>
+ Future("foo").transformWith {
+ case Success(s) => Future(s.toUpperCase)
+ case Failure(f) => throw new Exception("test failed")
+ } onComplete {
+ case Success("FOO") => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformWithResultToFailure(): Unit = once {
+ done =>
+ val e = new Exception("expected")
+ Future("foo").transformWith {
+ case Success(s) => Future(throw e)
+ case Failure(f) => throw new Exception("test failed")
+ } onComplete {
+ case Failure(`e`) => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformWithFailureToResult(): Unit = once {
+ done =>
+ val e = "foo"
+ Future(throw new Exception("initial")).transformWith {
+ case Success(s) => throw new Exception("test failed")
+ case Failure(f) => Future(e)
+ } onComplete {
+ case Success(`e`) => done(true)
+ case _ => done(false)
+ }
+ }
+
+ def testTransformWithFailureToFailure(): Unit = once {
+ done =>
+ val e = new Exception("expected")
+ Future(throw new Exception("initial")).transformWith {
+ case Success(s) => throw new Exception("test failed")
+ case Failure(f) => Future(throw e)
+ } onComplete {
+ case Failure(`e`) => done(true)
+ case _ => done(false)
+ }
+ }
+
def testFoldFailure(): Unit = once {
done =>
val f = Future[Unit] { throw new Exception("expected") }
@@ -189,6 +303,16 @@ def testTransformFailure(): Unit = once {
g onFailure { case t => done(t.getMessage() == "expected") }
}
+ def testFlatMapDelayed(): Unit = once {
+ done =>
+ val f = Future { 5 }
+ val p = Promise[Int]
+ val g = f flatMap { _ => p.future }
+ g onSuccess { case x => done(x == 10) }
+ g onFailure { case _ => done(false) }
+ p.success(10)
+ }
+
def testFilterSuccess(): Unit = once {
done =>
val f = Future { 4 }
@@ -352,10 +476,19 @@ def testTransformFailure(): Unit = once {
h onFailure { case e => done(e eq cause) }
}
+ def testFallbackToThis(): Unit = {
+ def check(f: Future[Int]) = assert((f fallbackTo f) eq f)
+
+ check(Future { 1 })
+ check(Future.successful(1))
+ check(Future.failed[Int](new Exception))
+ }
+
testMapSuccess()
testMapFailure()
testFlatMapSuccess()
testFlatMapFailure()
+ testFlatMapDelayed()
testFilterSuccess()
testFilterFailure()
testCollectSuccess()
@@ -373,6 +506,16 @@ def testTransformFailure(): Unit = once {
testFallbackToFailure()
testTransformSuccess()
testTransformSuccessPF()
+ testTransformFailure()
+ testTransformFailurePF()
+ testTransformResultToResult()
+ testTransformResultToFailure()
+ testTransformFailureToResult()
+ testTransformFailureToFailure()
+ testTransformWithResultToResult()
+ testTransformWithResultToFailure()
+ testTransformWithFailureToResult()
+ testTransformWithFailureToFailure()
}
@@ -517,7 +660,7 @@ trait BlockContexts extends TestBase {
// test BlockContext in our default ExecutionContext
def testDefaultFJP(): Unit = {
val bc = getBlockContext(BlockContext.current)
- assert(bc.isInstanceOf[scala.concurrent.forkjoin.ForkJoinWorkerThread])
+ assert(bc.isInstanceOf[java.util.concurrent.ForkJoinWorkerThread])
}
// test BlockContext inside BlockContext.withBlockContext
@@ -593,6 +736,17 @@ trait Exceptions extends TestBase {
}
+trait GlobalExecutionContext extends TestBase {
+ def testNameOfGlobalECThreads(): Unit = once {
+ done => Future({
+ val expectedName = "scala-execution-context-global-"+ Thread.currentThread.getId
+ done(expectedName == Thread.currentThread.getName)
+ })(ExecutionContext.global)
+ }
+
+ testNameOfGlobalECThreads()
+}
+
trait CustomExecutionContext extends TestBase {
import scala.concurrent.{ ExecutionContext, Awaitable }
@@ -772,6 +926,7 @@ with FutureProjections
with Promises
with BlockContexts
with Exceptions
+with GlobalExecutionContext
with CustomExecutionContext
with ExecutionContextPrepare
{
diff --git a/test/files/jvm/scheduler-adapter.check b/test/files/jvm/scheduler-adapter.check
deleted file mode 100644
index b278674cf0..0000000000
--- a/test/files/jvm/scheduler-adapter.check
+++ /dev/null
@@ -1,6 +0,0 @@
-before
-before
-before
-Two: received msg
-before
-One: received msg
diff --git a/test/files/jvm/scheduler-adapter.scala b/test/files/jvm/scheduler-adapter.scala
deleted file mode 100644
index 1c9cfe7019..0000000000
--- a/test/files/jvm/scheduler-adapter.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, SchedulerAdapter}
-
-trait AdaptedActor extends Actor {
- override def scheduler =
- Test.adapted
-}
-
-object One extends AdaptedActor {
- def act() {
- try {
- Two.start()
- Two ! 'MsgForTwo
- react {
- case 'MsgForOne =>
- println("One: received msg")
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
-object Two extends AdaptedActor {
- def act() {
- try {
- react {
- case 'MsgForTwo =>
- println("Two: received msg")
- One ! 'MsgForOne
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- val adapted =
- new SchedulerAdapter {
- def execute(block: => Unit) {
- println("before")
- block
- }
- }
-
- def main(args: Array[String]) {
- One.start()
- }
-}
diff --git a/test/files/jvm/serialization-new.check b/test/files/jvm/serialization-new.check
index cb26446f40..90da8a085d 100644
--- a/test/files/jvm/serialization-new.check
+++ b/test/files/jvm/serialization-new.check
@@ -1,4 +1,6 @@
-warning: there were three deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0)
+warning: there were three deprecation warnings (since 2.12.0)
+warning: there were 5 deprecation warnings in total; re-run with -deprecation for details
a1 = Array[1,2,3]
_a1 = Array[1,2,3]
arrayEquals(a1, _a1): true
@@ -85,24 +87,24 @@ x = List((buffers,20), (layers,2), (title,3))
y = List((buffers,20), (layers,2), (title,3))
x equals y: true, y equals x: true
-x = Map(buffers -> 20, layers -> 2, title -> 3)
-y = Map(buffers -> 20, layers -> 2, title -> 3)
+x = ListMap(buffers -> 20, layers -> 2, title -> 3)
+y = ListMap(buffers -> 20, layers -> 2, title -> 3)
x equals y: true, y equals x: true
-x = ListSet(5, 3)
-y = ListSet(5, 3)
+x = ListSet(3, 5)
+y = ListSet(3, 5)
x equals y: true, y equals x: true
x = Queue(a, b, c)
y = Queue(a, b, c)
x equals y: true, y equals x: true
-x = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
-y = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+x = Range 0 until 10
+y = Range 0 until 10
x equals y: true, y equals x: true
-x = NumericRange(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
-y = NumericRange(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+x = NumericRange 0 until 10
+y = NumericRange 0 until 10
x equals y: true, y equals x: true
x = Map(1 -> A, 2 -> B, 3 -> C)
diff --git a/test/files/jvm/serialization.check b/test/files/jvm/serialization.check
index cb26446f40..964c68e528 100644
--- a/test/files/jvm/serialization.check
+++ b/test/files/jvm/serialization.check
@@ -1,4 +1,6 @@
-warning: there were three deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0)
+warning: there was one deprecation warning (since 2.12.0)
+warning: there were three deprecation warnings in total; re-run with -deprecation for details
a1 = Array[1,2,3]
_a1 = Array[1,2,3]
arrayEquals(a1, _a1): true
@@ -85,24 +87,24 @@ x = List((buffers,20), (layers,2), (title,3))
y = List((buffers,20), (layers,2), (title,3))
x equals y: true, y equals x: true
-x = Map(buffers -> 20, layers -> 2, title -> 3)
-y = Map(buffers -> 20, layers -> 2, title -> 3)
+x = ListMap(buffers -> 20, layers -> 2, title -> 3)
+y = ListMap(buffers -> 20, layers -> 2, title -> 3)
x equals y: true, y equals x: true
-x = ListSet(5, 3)
-y = ListSet(5, 3)
+x = ListSet(3, 5)
+y = ListSet(3, 5)
x equals y: true, y equals x: true
x = Queue(a, b, c)
y = Queue(a, b, c)
x equals y: true, y equals x: true
-x = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
-y = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+x = Range 0 until 10
+y = Range 0 until 10
x equals y: true, y equals x: true
-x = NumericRange(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
-y = NumericRange(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+x = NumericRange 0 until 10
+y = NumericRange 0 until 10
x equals y: true, y equals x: true
x = Map(1 -> A, 2 -> B, 3 -> C)
diff --git a/test/files/jvm/t1449.scala b/test/files/jvm/t1449.scala
deleted file mode 100644
index 7917d6f6d5..0000000000
--- a/test/files/jvm/t1449.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Actor._
- import scala.actors.Future
- import scala.actors.Futures._
- def main(args: Array[String]) {
- val a = actor {
- try {
- react {
- case ft: Future[a] =>
- println(ft())
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- try {
- val ft = future { 42 }
- a ! ft
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
diff --git a/test/files/jvm/t1948.scala b/test/files/jvm/t1948.scala
deleted file mode 100644
index 95777b8037..0000000000
--- a/test/files/jvm/t1948.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors._
- import scala.actors.Actor._
-
- def main (args: Array[String]) {
- val actors = (1 to 1000).toList map { x => actor {
- try {
- loop { react {
- case x: Array[Int] => reply ("OK"); exit }}
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- } }
- try {
- actors foreach { x => x !? new Array[Int] (1000000) }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-
-}
diff --git a/test/files/jvm/t2359.check b/test/files/jvm/t2359.check
deleted file mode 100644
index 8a1218a102..0000000000
--- a/test/files/jvm/t2359.check
+++ /dev/null
@@ -1,5 +0,0 @@
-1
-2
-3
-4
-5
diff --git a/test/files/jvm/t2359.scala b/test/files/jvm/t2359.scala
deleted file mode 100644
index 76b78d44f7..0000000000
--- a/test/files/jvm/t2359.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Futures._
- def main(args: Array[String]) {
- val x = future {
- try {
- System.out.println(1)
- future {
- try {
- System.out.println(2)
- future {
- try {
- System.out.println(3)
- future {
- try {
- System.out.println(4)
- future {
- try {
- System.out.println(5)
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }()
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }()
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }()
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }()
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }()
- }
-}
diff --git a/test/files/jvm/t2530.check b/test/files/jvm/t2530.check
deleted file mode 100644
index 0f1c02158d..0000000000
--- a/test/files/jvm/t2530.check
+++ /dev/null
@@ -1,21 +0,0 @@
- Iteration 1 succeeded
- Iteration 2 succeeded
- Iteration 3 succeeded
- Iteration 4 succeeded
- Iteration 5 succeeded
- Iteration 6 succeeded
- Iteration 7 succeeded
- Iteration 8 succeeded
- Iteration 9 succeeded
- Iteration 10 succeeded
- Iteration 11 succeeded
- Iteration 12 succeeded
- Iteration 13 succeeded
- Iteration 14 succeeded
- Iteration 15 succeeded
- Iteration 16 succeeded
- Iteration 17 succeeded
- Iteration 18 succeeded
- Iteration 19 succeeded
- Iteration 20 succeeded
-Test done with no deadlock. Try again, it will not occur...
diff --git a/test/files/jvm/t2530.scala b/test/files/jvm/t2530.scala
deleted file mode 100644
index b41661e623..0000000000
--- a/test/files/jvm/t2530.scala
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.{Future, Futures}
-
- def main(args:Array[String]) : Unit = {
- //scala.actors.Debug.level = 3
- val size = /*if (args.length > 0) Integer.parseInt(args(0)) else*/ 8
- val (m,n) = (size, size)
- def random = (for (i <- 0 until m*n) yield java.lang.Math.random).toArray
- val A = Matrix(m, n, random)
- val B = Matrix(m, n, random)
- val format = new java.text.DecimalFormat("000.00'ms'");
- var iter = 1
- val done = 21
- while (iter < done) {
- val start = System.nanoTime()
- val result = A * B
- val time = System.nanoTime() - start
- result match {
- case Some(result) => {
- printf(" Iteration %2d succeeded %n", iter/*, format.format(time / 1e6)*/)
- iter += 1
- }
- case None => {
- printf(">>>> Iteration %2d failed after %s <<<<< %n", iter, format.format(time / 1e6))
- iter = done
- }
- }
- }
- println("Test done with no deadlock. Try again, it will not occur...")
- }
-
-case class Matrix(numRows: Int, numCols: Int, values: Array[Double]) {
-
- def this(m:Int, n:Int) = this(m, n, new Array[Double](m*n))
-
- def offset(i:Int, j:Int) = i * numCols + j
- def apply(i:Int, j:Int) = values( offset(i,j) )
- def update(i:Int, j:Int, value:Double) = values(offset(i, j)) = value;
-
- def *(by:Matrix) = {
- val aM = numRows
- val aN = numCols
- assert(aM == by.numCols)
- assert(aN == by.numRows)
- val resultMatrix = new Matrix(aM, aM)
- val m = aM.asInstanceOf[Int]
- val n = aN.asInstanceOf[Int]
-
- val rows = for (j <- 0 until m) yield {
- Futures.future {
- try {
- val b_j = new Array[Double](n)
- var k = 0
- while (k < n) { // sadly, while loops are still faster than for loops
- b_j(k) = by(k,j)
- k += 1
- }
- var i = 0
- while (i < m) {
- var s = 0.0d;
- k = 0
- while (k < n) {
- s += Matrix.this(i,k) * b_j(k)
- k += 1
- }
- resultMatrix(i,j) = s
- i += 1
- }
- //printf("future %d of %d completed.%n", j, m)
- j
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-
- // rows.foreach { x=> x() } // This appears to force sequential execution, so use:
- // timeout is 10 years; see http://lampsvn.epfl.ch/trac/scala/ticket/2515
- val done: List[Option[Any]] = try {
- Futures.awaitAll(10*365*24*60*60*1000, rows.toArray : _*) // list to array, as varargs.
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- List()
- }
-
- if (done.contains(None))
- None
- else
- Some(resultMatrix)
- }
-
-}
-}
diff --git a/test/files/jvm/t3102.check b/test/files/jvm/t3102.check
deleted file mode 100644
index d705e0b20e..0000000000
--- a/test/files/jvm/t3102.check
+++ /dev/null
@@ -1,2 +0,0 @@
-42
-OK
diff --git a/test/files/jvm/t3102.scala b/test/files/jvm/t3102.scala
deleted file mode 100644
index d0e0704859..0000000000
--- a/test/files/jvm/t3102.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.{Actor, TIMEOUT}
- import Actor._
-
- def main(args: Array[String]) {
- val a = actor {
- try {
- react {
- case 'hello =>
- reply(42)
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-
- val b = actor {
- try {
- self.trapExit = true
- val ft = a !! 'hello
- println(ft())
- // no message should be left over in mailbox
- reactWithin(0) {
- case TIMEOUT =>
- println("OK")
- case any =>
- println(any)
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
-}
diff --git a/test/files/jvm/t3356.check b/test/files/jvm/t3356.check
deleted file mode 100644
index 25f47b70c9..0000000000
--- a/test/files/jvm/t3356.check
+++ /dev/null
@@ -1,3 +0,0 @@
-sending download requests
-Couldn't download image because of java.lang.Exception: no connection
-Couldn't download image because of java.lang.Exception: no connection
diff --git a/test/files/jvm/t3356.scala b/test/files/jvm/t3356.scala
deleted file mode 100644
index 53bfd737cd..0000000000
--- a/test/files/jvm/t3356.scala
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{Actor, Exit, !, UncaughtException}
-import Actor._
-
-case class ImageInfo(text: String) {
- def downloadImage(): ImageData = {
- ImageData(text)
- }
-}
-
-case class ImageData(text: String)
-case class Download(info: ImageInfo)
-
-
- def scanForImageInfo(url: String): List[ImageInfo] =
- List(ImageInfo("A"), ImageInfo("B"))
-
- def renderImage(data: ImageData) {
- println("rendering image "+data.text)
- }
-
- def renderImages(url: String) {
- val imageInfos = scanForImageInfo(url)
- println("sending download requests")
- val dataFutures = for (info <- imageInfos) yield {
- val loader = link {
- react { case Download(info) =>
- throw new Exception("no connection")
- reply(info.downloadImage())
- }; {}
- }
- loader !! Download(info)
- }
- var i = 0
- loopWhile (i < imageInfos.size) {
- i += 1
- val FutureInput = dataFutures(i-1).inputChannel
- react {
- case FutureInput ! (data @ ImageData(_)) =>
- renderImage(data)
- case Exit(from, UncaughtException(_, Some(Download(info)), _, _, cause)) =>
- println("Couldn't download image because of "+cause)
- }
- }
- println("OK, all images rendered.")
- }
-
- def main(args: Array[String]) {
- actor {
- self.trapExit = true
- renderImages("panorama.epfl.ch")
- }
- }
-
-}
diff --git a/test/files/jvm/t3365.check b/test/files/jvm/t3365.check
deleted file mode 100644
index 0944b17279..0000000000
--- a/test/files/jvm/t3365.check
+++ /dev/null
@@ -1,5 +0,0 @@
-'hello
-'hello
-'hello
-'hello
-'hello
diff --git a/test/files/jvm/t3365.scala b/test/files/jvm/t3365.scala
deleted file mode 100644
index 8321428093..0000000000
--- a/test/files/jvm/t3365.scala
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-import scala.actors.{ReplyReactor, Channel, Actor, Future}
-
-case class ChannelMsg(chan: Channel[Any])
-
-class MyActor extends Actor {
- def act() {
- try {
- val chan = new Channel[Any](this)
- loop {
- react {
- case other: ReplyReactor =>
- other ! ChannelMsg(chan)
- loop {
- chan.react {
- case 'hello =>
- reply('hello)
- case 'stop =>
- exit()
- }
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
-}
-
- def main(args: Array[String]) {
- val a = new MyActor
- a.start()
-
- val b = new Actor {
- def act() {
- try {
- react {
- case ChannelMsg(c) =>
- var i = 0
- loop {
- i += 1
- val ft: Future[Any] = c !! 'hello
- ft.inputChannel.react {
- case msg =>
- if (i % 10000 == 0)
- println(msg)
- if (i >= 50000) {
- c ! 'stop
- exit()
- }
- }
- }
- }
- } catch {
- case e: Throwable if !e.isInstanceOf[scala.util.control.ControlThrowable] =>
- e.printStackTrace()
- }
- }
- }
- b.start()
-
- a ! b
- }
-}
diff --git a/test/files/jvm/t3407.check b/test/files/jvm/t3407.check
deleted file mode 100644
index a133c88bbe..0000000000
--- a/test/files/jvm/t3407.check
+++ /dev/null
@@ -1,10 +0,0 @@
-result: 42
-result: 42
-result: 42
-result: 42
-result: 42
-result: 42
-result: 42
-result: 42
-result: 42
-result: 42
diff --git a/test/files/jvm/t3407.scala b/test/files/jvm/t3407.scala
deleted file mode 100644
index 757fa3a438..0000000000
--- a/test/files/jvm/t3407.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors._, scala.actors.Actor._
-
- def main(args: Array[String]) {
- for (i <- 1 to 10) {
- val ft = Futures.future { 42 }
- println("result: " + ft())
- }
-
- for (i <- 1 to 10) {
- receiveWithin(0) {
- case TIMEOUT =>
- case msg => println("unexpected: " + msg)
- }
- }
- }
-
-}
diff --git a/test/files/jvm/t3412-channel.check b/test/files/jvm/t3412-channel.check
deleted file mode 100644
index 954c6e835d..0000000000
--- a/test/files/jvm/t3412-channel.check
+++ /dev/null
@@ -1,10 +0,0 @@
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
diff --git a/test/files/jvm/t3412-channel.scala b/test/files/jvm/t3412-channel.scala
deleted file mode 100644
index af319d2303..0000000000
--- a/test/files/jvm/t3412-channel.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors._, scala.actors.Actor._, scala.actors.Futures._
-
- def main(args: Array[String]) {
-
- actor {
- val C: Channel[Int] = new Channel[Int](self)
-
- def respondAll(fts: List[Future[Int]], cnt: Int): Unit =
- fts match {
- case List() => C ! 0
- case ft :: rest =>
- if (cnt % 100 == 0)
- println(ft())
- respondAll(rest, cnt + 1)
- }
-
- actor {
- val fts = for (_ <- 1 to 1000)
- yield C !! (3, {case x: Int => x})
-
- actor {
- respondAll(fts.toList, 0)
- }
- }
-
- loop {
- C.react {
- case 0 => exit()
- case i => reply(i * 2)
- }
- }
- }
-
- }
-
-}
diff --git a/test/files/jvm/t3412.check b/test/files/jvm/t3412.check
deleted file mode 100644
index 954c6e835d..0000000000
--- a/test/files/jvm/t3412.check
+++ /dev/null
@@ -1,10 +0,0 @@
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
diff --git a/test/files/jvm/t3412.scala b/test/files/jvm/t3412.scala
deleted file mode 100644
index fde6c04cb7..0000000000
--- a/test/files/jvm/t3412.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors._, scala.actors.Actor._, scala.actors.Futures._
-
- def main(args: Array[String]) {
-
- val a = actor {
- loop { react {
- case i: Int => reply(i * 2)
- case 'stop => exit()
- } }
- }
-
- val fts = for (_ <- 1 to 1000)
- yield a !! (3, {case x: Int => x})
-
- def respondAll(fts: List[Future[Int]], cnt: Int): Unit =
- fts match {
- case List() => a ! 'stop
- case ft :: rest =>
- if (cnt % 100 == 0)
- println(ft())
- respondAll(rest, cnt + 1)
- }
-
- actor {
- respondAll(fts.toList, 0)
- }
-
- }
-
-}
diff --git a/test/files/jvm/t3470.check b/test/files/jvm/t3470.check
deleted file mode 100644
index 94cb526756..0000000000
--- a/test/files/jvm/t3470.check
+++ /dev/null
@@ -1,3 +0,0 @@
-A: started: 1
-A: started: 2
-A: started: 3
diff --git a/test/files/jvm/t3470.scala b/test/files/jvm/t3470.scala
deleted file mode 100644
index bcb1d4f8de..0000000000
--- a/test/files/jvm/t3470.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors._
-
- def expectActorState(a: Reactor[T] forSome { type T }, s: Actor.State.Value) {
- var done = false
- var i = 0
- while (!done) {
- i = i + 1
- if (i == 10) { // only wait for 2 seconds total
- println("FAIL ["+a+": expected "+s+"]")
- done = true
- }
-
- Thread.sleep(200)
- if (a.getState == s) // success
- done = true
- }
- }
-
- def main(args: Array[String]) {
- val a = new Actor { var c = 0; def act() = { c += 1; println("A: started: " + c) } }
- a.start()
- expectActorState(a, Actor.State.Terminated)
- a.restart()
- expectActorState(a, Actor.State.Terminated)
- a.restart()
- }
-
-}
diff --git a/test/files/jvm/t3838.check b/test/files/jvm/t3838.check
deleted file mode 100644
index 154227a350..0000000000
--- a/test/files/jvm/t3838.check
+++ /dev/null
@@ -1 +0,0 @@
-caught java.lang.RuntimeException: unhandled timeout
diff --git a/test/files/jvm/t3838.scala b/test/files/jvm/t3838.scala
deleted file mode 100644
index a1a71d1049..0000000000
--- a/test/files/jvm/t3838.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-@deprecated("Suppress warnings", since="2.11")
-object Test {
- import scala.actors.Actor._
- def main(args: Array[String]) {
- actor {
- try {
- receiveWithin(1) {
- case str: String => println(str)
- }
- } catch {
- case e: Exception => println("caught "+e)
- }
- }
- }
-}
diff --git a/test/files/jvm/t6941.check b/test/files/jvm/t6941.check
deleted file mode 100644
index 43f53aba12..0000000000
--- a/test/files/jvm/t6941.check
+++ /dev/null
@@ -1 +0,0 @@
-bytecode identical
diff --git a/test/files/jvm/t6941.flags b/test/files/jvm/t6941.flags
deleted file mode 100644
index 49d036a887..0000000000
--- a/test/files/jvm/t6941.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize
diff --git a/test/files/jvm/t6941/Analyzed_1.flags b/test/files/jvm/t6941/Analyzed_1.flags
deleted file mode 100644
index ad51758c39..0000000000
--- a/test/files/jvm/t6941/Analyzed_1.flags
+++ /dev/null
@@ -1 +0,0 @@
--nowarn
diff --git a/test/files/jvm/t6941/Analyzed_1.scala b/test/files/jvm/t6941/Analyzed_1.scala
deleted file mode 100644
index b6951f71ee..0000000000
--- a/test/files/jvm/t6941/Analyzed_1.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-// this class's bytecode, compiled under -optimize is analyzed by the test
-// method a's bytecode should be identical to method b's bytecode
-class SameBytecode {
- def a(xs: List[Int]) = xs match {
- case x :: _ => x
- }
-
- def b(xs: List[Int]) = xs match {
- case xs: ::[Int] => xs.head
- }
-} \ No newline at end of file
diff --git a/test/files/jvm/t6941/test.scala b/test/files/jvm/t6941/test.scala
deleted file mode 100644
index fceb54487f..0000000000
--- a/test/files/jvm/t6941/test.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.tools.partest.{BytecodeTest, ASMConverters}
-
-import scala.tools.nsc.util.JavaClassPath
-import java.io.InputStream
-import scala.tools.asm
-import asm.ClassReader
-import asm.tree.{ClassNode, InsnList}
-import scala.collection.JavaConverters._
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val classNode = loadClassNode("SameBytecode")
- similarBytecode(getMethod(classNode, "a"), getMethod(classNode, "b"), ASMConverters.equivalentBytecode(_, _))
- }
-}
diff --git a/test/files/jvm/t7006.check b/test/files/jvm/t7006.check
deleted file mode 100644
index 6294b14d62..0000000000
--- a/test/files/jvm/t7006.check
+++ /dev/null
@@ -1,29 +0,0 @@
-[running phase parser on Foo_1.scala]
-[running phase namer on Foo_1.scala]
-[running phase packageobjects on Foo_1.scala]
-[running phase typer on Foo_1.scala]
-[running phase patmat on Foo_1.scala]
-[running phase superaccessors on Foo_1.scala]
-[running phase extmethods on Foo_1.scala]
-[running phase pickler on Foo_1.scala]
-[running phase refchecks on Foo_1.scala]
-[running phase uncurry on Foo_1.scala]
-[running phase tailcalls on Foo_1.scala]
-[running phase specialize on Foo_1.scala]
-[running phase explicitouter on Foo_1.scala]
-[running phase erasure on Foo_1.scala]
-[running phase posterasure on Foo_1.scala]
-[running phase lazyvals on Foo_1.scala]
-[running phase lambdalift on Foo_1.scala]
-[running phase constructors on Foo_1.scala]
-[running phase flatten on Foo_1.scala]
-[running phase mixin on Foo_1.scala]
-[running phase cleanup on Foo_1.scala]
-[running phase delambdafy on Foo_1.scala]
-[running phase icode on Foo_1.scala]
-[running phase inliner on Foo_1.scala]
-[running phase inlinehandlers on Foo_1.scala]
-[running phase closelim on Foo_1.scala]
-[running phase constopt on Foo_1.scala]
-[running phase dce on Foo_1.scala]
-[running phase jvm on icode]
diff --git a/test/files/jvm/t7006/Foo_1.flags b/test/files/jvm/t7006/Foo_1.flags
deleted file mode 100644
index 29a9d424f0..0000000000
--- a/test/files/jvm/t7006/Foo_1.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise -Ydebug -Xfatal-warnings -Ybackend:GenASM
diff --git a/test/files/jvm/t7006/Foo_1.scala b/test/files/jvm/t7006/Foo_1.scala
deleted file mode 100644
index 3985557d9f..0000000000
--- a/test/files/jvm/t7006/Foo_1.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-class Foo_1 {
- def foo {
- try {
- val x = 3 // this will be optimized away, leaving a useless jump only block
- } finally {
- print("hello")
- }
- while(true){} // ensure infinite loop doesn't break the algorithm
- }
-}
diff --git a/test/files/jvm/t7006/Test.scala b/test/files/jvm/t7006/Test.scala
deleted file mode 100644
index 065a23510e..0000000000
--- a/test/files/jvm/t7006/Test.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-import scala.tools.partest.BytecodeTest
-import scala.tools.asm
-import asm.tree.InsnList
-import scala.collection.JavaConverters._
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val classNode = loadClassNode("Foo_1")
- val methodNode = getMethod(classNode, "foo")
- assert(count(methodNode.instructions, asm.Opcodes.NOP) == 0)
- assert(count(methodNode.instructions, asm.Opcodes.GOTO) == 1)
- }
-
- def count(insnList: InsnList, opcode: Int): Int = {
- def isNop(node: asm.tree.AbstractInsnNode): Boolean =
- (node.getOpcode == opcode)
- insnList.iterator.asScala.count(isNop)
- }
-}
diff --git a/test/files/jvm/t7146.check b/test/files/jvm/t7146.check
index 7c76040205..b2c6e444f7 100644
--- a/test/files/jvm/t7146.check
+++ b/test/files/jvm/t7146.check
@@ -1,5 +1,4 @@
-should be scala.concurrent.impl.ExecutionContextImpl == true
-should be scala.concurrent.forkjoin.ForkJoinPool == true
+ExecutionContext.global is a scala.concurrent.impl.ExecutionContextImpl.
should have non-null UncaughtExceptionHandler == true
-should be a scala.concurrent.impl.ExecutionContextImpl UncaughtExceptionHandler == true
-should just print out on uncaught == true
+ExecutionContext.global.executor.getUncaughtExceptionHandler is a scala.concurrent.impl.ExecutionContextImpl.
+should just print out on uncaught: true
diff --git a/test/files/jvm/t7146.scala b/test/files/jvm/t7146.scala
index aaa3dc7ca4..89030730a9 100644
--- a/test/files/jvm/t7146.scala
+++ b/test/files/jvm/t7146.scala
@@ -5,21 +5,21 @@ import scala.concurrent._
import scala.util.control.NoStackTrace
object Test {
- def main(args: Array[String]) {
- println("should be scala.concurrent.impl.ExecutionContextImpl == " +
- ExecutionContext.global.toString.startsWith("scala.concurrent.impl.ExecutionContextImpl"))
- val i = ExecutionContext.global.asInstanceOf[{ def executor: Executor }]
- println("should be scala.concurrent.forkjoin.ForkJoinPool == " +
- i.executor.toString.startsWith("scala.concurrent.forkjoin.ForkJoinPool"))
- val u = i.executor.
+ def main(args: Array[String]): Unit = {
+ val ec = ExecutionContext.global.toString
+ if (ec startsWith "scala.concurrent.impl.ExecutionContextImpl")
+ println("ExecutionContext.global is a scala.concurrent.impl.ExecutionContextImpl.")
+ else println(s"!! ExecutionContext.global == $ec")
+
+ val u = ExecutionContext.global.asInstanceOf[{ def executor: Executor }].executor.
asInstanceOf[{ def getUncaughtExceptionHandler: Thread.UncaughtExceptionHandler }].
getUncaughtExceptionHandler
- println("should have non-null UncaughtExceptionHandler == " + (u ne null))
- println("should be a scala.concurrent.impl.ExecutionContextImpl UncaughtExceptionHandler == " +
- u.toString.startsWith("scala.concurrent.impl.ExecutionContextImpl"))
- print("should just print out on uncaught == ")
- u.uncaughtException(Thread.currentThread, new Throwable {
- override def printStackTrace() { println("true") }
- })
+ println(s"should have non-null UncaughtExceptionHandler == ${u ne null}")
+ if (u.toString startsWith "scala.concurrent.impl.ExecutionContextImpl")
+ println("ExecutionContext.global.executor.getUncaughtExceptionHandler is a scala.concurrent.impl.ExecutionContextImpl.")
+ else println(s"!! ExecutionContext.global.executor.getUncaughtExceptionHandler == $u")
+
+ print("should just print out on uncaught: ")
+ u.uncaughtException(Thread.currentThread, new Throwable { override def printStackTrace() { println("true") } })
}
}
diff --git a/test/files/jvm/t8582.check b/test/files/jvm/t8582.check
index e388366270..0a23cb0c93 100644
--- a/test/files/jvm/t8582.check
+++ b/test/files/jvm/t8582.check
@@ -1,3 +1,6 @@
+t8582.scala:17: warning: class BeanInfo in package beans is deprecated (since 2.12.0): the generation of BeanInfo classes is no longer supported
+ class C1
+ ^
getClass on module gives module class
class p1.p2.Singleton$Singleton$
diff --git a/test/files/jvm/t8582.flags b/test/files/jvm/t8582.flags
new file mode 100644
index 0000000000..dcc59ebe32
--- /dev/null
+++ b/test/files/jvm/t8582.flags
@@ -0,0 +1 @@
+-deprecation
diff --git a/test/files/jvm/t8786-sig.scala b/test/files/jvm/t8786-sig.scala
new file mode 100644
index 0000000000..0745b650e6
--- /dev/null
+++ b/test/files/jvm/t8786-sig.scala
@@ -0,0 +1,116 @@
+class A[U] {
+ @annotation.varargs def m1[T] (a: T*): T = a.head
+ @annotation.varargs def m2[T <: AnyRef](a: T*): T = a.head
+ @annotation.varargs def m3[T <: AnyVal](a: T*): T = a.head
+ @annotation.varargs def m4[T <: Int] (a: T*): T = a.head
+ @annotation.varargs def m5[T <: String](a: T*): T = a.head
+ @annotation.varargs def m6 (a: String*): String = a.head
+ @annotation.varargs def m7 (a: Int*): Int = a.head
+ @annotation.varargs def m8 (a: U*): U = a.head
+
+ def n1[T] (a: Array[T]): T = a(0)
+ def n2[T <: AnyRef](a: Array[T]): T = a(0)
+ def n3[T <: AnyVal](a: Array[T]): T = a(0)
+ def n4[T <: Int] (a: Array[T]): T = a(0)
+ def n5[T <: String](a: Array[T]): T = a(0)
+ def n6 (a: Array[String]): String = a(0)
+ def n7 (a: Array[Int]): Int = a(0)
+ def n8 (a: Array[U]): U = a(0)
+}
+
+object Test extends App {
+ val a = classOf[A[_]]
+
+ def sig (method: String, tp: Class[_]) = a.getDeclaredMethod(method, tp).toString
+ def genSig(method: String, tp: Class[_]) = a.getDeclaredMethod(method, tp).toGenericString
+ def bound (method: String, tp: Class[_]) = {
+ val m = a.getDeclaredMethod(method, tp)
+ m.getGenericParameterTypes.apply(0) match {
+ case _: Class[_] => ""
+ case gat: java.lang.reflect.GenericArrayType =>
+ val compTp = gat.getGenericComponentType.asInstanceOf[java.lang.reflect.TypeVariable[_]]
+ compTp.getBounds.apply(0).toString
+ }
+ }
+
+ def check(a: String, b: String) = {
+ assert(a == b, s"found: $a\nexpected: $b")
+ }
+
+ val sq = classOf[Seq[_]]
+ val ob = classOf[Object]
+ val ao = classOf[Array[Object]]
+ val as = classOf[Array[String]]
+ val ai = classOf[Array[Int]]
+
+ check(sig("m1", sq) , "public java.lang.Object A.m1(scala.collection.Seq)")
+ check(sig("m2", sq) , "public java.lang.Object A.m2(scala.collection.Seq)")
+ check(sig("m3", sq) , "public java.lang.Object A.m3(scala.collection.Seq)")
+ check(sig("m4", sq) , "public int A.m4(scala.collection.Seq)")
+ check(sig("m5", sq) , "public java.lang.String A.m5(scala.collection.Seq)")
+ check(sig("m6", sq) , "public java.lang.String A.m6(scala.collection.Seq)")
+ check(sig("m7", sq) , "public int A.m7(scala.collection.Seq)")
+ check(sig("m8", sq) , "public java.lang.Object A.m8(scala.collection.Seq)")
+
+ check(genSig("m1", sq), "public <T> T A.m1(scala.collection.Seq<T>)")
+ check(genSig("m2", sq), "public <T> T A.m2(scala.collection.Seq<T>)")
+ check(genSig("m3", sq), "public <T> T A.m3(scala.collection.Seq<T>)")
+ // TODO: the signature for is wrong for T <: Int, SI-9846. The signature should be
+ // `public int A.m4(scala.collection.Seq<java.lang.Object>)`. This is testing the status quo.
+ check(genSig("m4", sq), "public <T> T A.m4(scala.collection.Seq<T>)")
+ check(genSig("m5", sq), "public <T> T A.m5(scala.collection.Seq<T>)")
+ check(genSig("m6", sq), "public java.lang.String A.m6(scala.collection.Seq<java.lang.String>)")
+ check(genSig("m7", sq), "public int A.m7(scala.collection.Seq<java.lang.Object>)")
+ check(genSig("m8", sq), "public U A.m8(scala.collection.Seq<U>)")
+
+
+ // varargs forwarder
+
+ check(sig("m1", ao) , "public java.lang.Object A.m1(java.lang.Object[])")
+ check(sig("m2", ao) , "public java.lang.Object A.m2(java.lang.Object[])")
+ check(sig("m3", ao) , "public java.lang.Object A.m3(java.lang.Object[])")
+ check(sig("m4", ao) , "public int A.m4(java.lang.Object[])")
+ check(sig("m5", as) , "public java.lang.String A.m5(java.lang.String[])")
+ check(sig("m6", as) , "public java.lang.String A.m6(java.lang.String[])")
+ check(sig("m7", ai) , "public int A.m7(int[])")
+ check(sig("m8", ao) , "public java.lang.Object A.m8(java.lang.Object[])")
+
+ check(genSig("m1", ao), "public <T> T A.m1(T...)")
+ check(genSig("m2", ao), "public <T> T A.m2(T...)")
+ check(genSig("m3", ao), "public <T> T A.m3(T...)")
+ // testing status quo: signature is wrong for T <: Int, SI-9846
+ check(genSig("m4", ao), "public <T> T A.m4(T...)")
+ check(genSig("m5", as), "public <T> T A.m5(T...)")
+ check(genSig("m6", as), "public java.lang.String A.m6(java.lang.String...)")
+ check(genSig("m7", ai), "public int A.m7(int...)")
+ check(genSig("m8", ao), "public U A.m8(U...)")
+
+ check(bound("m1", ao) , "class java.lang.Object")
+ check(bound("m2", ao) , "class java.lang.Object")
+ check(bound("m3", ao) , "class java.lang.Object")
+ check(bound("m4", ao) , "class java.lang.Object")
+ check(bound("m5", as) , "class java.lang.String")
+ check(bound("m6", as) , "")
+ check(bound("m7", ai) , "")
+ check(bound("m8", ao) , "class java.lang.Object")
+
+
+ check(sig("n1", ob) , "public java.lang.Object A.n1(java.lang.Object)")
+ check(sig("n2", ao) , "public java.lang.Object A.n2(java.lang.Object[])")
+ check(sig("n3", ob) , "public java.lang.Object A.n3(java.lang.Object)")
+ check(sig("n4", ob) , "public int A.n4(java.lang.Object)")
+ check(sig("n5", as) , "public java.lang.String A.n5(java.lang.String[])")
+ check(sig("n6", as) , "public java.lang.String A.n6(java.lang.String[])")
+ check(sig("n7", ai) , "public int A.n7(int[])")
+ check(sig("n8", ob) , "public java.lang.Object A.n8(java.lang.Object)")
+
+ check(genSig("n1", ob), "public <T> T A.n1(java.lang.Object)")
+ check(genSig("n2", ao), "public <T> T A.n2(T[])")
+ check(genSig("n3", ob), "public <T> T A.n3(java.lang.Object)")
+ // testing status quo: signature is wrong for T <: Int, SI-9846
+ check(genSig("n4", ob), "public <T> T A.n4(java.lang.Object)")
+ check(genSig("n5", as), "public <T> T A.n5(T[])")
+ check(genSig("n6", as), "public java.lang.String A.n6(java.lang.String[])")
+ check(genSig("n7", ai), "public int A.n7(int[])")
+ check(genSig("n8", ob), "public U A.n8(java.lang.Object)")
+}
diff --git a/test/files/jvm/t8786/A_1.scala b/test/files/jvm/t8786/A_1.scala
new file mode 100644
index 0000000000..13c0ad191d
--- /dev/null
+++ b/test/files/jvm/t8786/A_1.scala
@@ -0,0 +1,3 @@
+class A {
+ @annotation.varargs def foo[T](a: Int, b: T*): T = b.head
+}
diff --git a/test/files/jvm/t8786/B_2.java b/test/files/jvm/t8786/B_2.java
new file mode 100644
index 0000000000..dc155a290f
--- /dev/null
+++ b/test/files/jvm/t8786/B_2.java
@@ -0,0 +1,22 @@
+public class B_2 {
+ private static int res = 0;
+
+ public static void m(char a[]) { res += 10; }
+ public static void m(String a) { res += 100; }
+ public static void m(Object a) { res += 1000; }
+
+ public static <T> T foo(int a, T... b) { return b[0]; }
+
+ public static <T> T bar(T b[]) { return b[0]; }
+
+ public static void main(String[] args) {
+ m(foo(15, "a", "b", "c"));
+ if (res != 100)
+ throw new Error("bad: "+ res);
+
+ A a = new A();
+ m(a.foo(16, "a", "b", "c"));
+ if (res != 200)
+ throw new Error("bad: " + res);
+ }
+}
diff --git a/test/files/jvm/t8786/Test_2.scala b/test/files/jvm/t8786/Test_2.scala
new file mode 100644
index 0000000000..76ccb4c3ed
--- /dev/null
+++ b/test/files/jvm/t8786/Test_2.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ B_2.main(null)
+}
diff --git a/test/files/jvm/t9105.check b/test/files/jvm/t9105.check
index 34750833f1..9447e0cf29 100644
--- a/test/files/jvm/t9105.check
+++ b/test/files/jvm/t9105.check
@@ -1,18 +1,8 @@
-#partest !-Ydelambdafy:method
-(class C$$anonfun$1$A$1,class C$$anonfun$1,null)
-(class C$$anonfun$1$B$1,class C$$anonfun$1,private final java.lang.Object C$$anonfun$1.m$1())
-(class C$$anonfun$1$C$1,class C$$anonfun$1,null)
-(class C$$anonfun$1$$anonfun$2$D$1,class C$$anonfun$1$$anonfun$2,null)
-(class C$$anonfun$met$1$E$1,class C$$anonfun$met$1,null)
-(class C$$anonfun$met$1$F$1,class C$$anonfun$met$1,private final java.lang.Object C$$anonfun$met$1.m$2())
-(class C$$anonfun$met$1$G$1,class C$$anonfun$met$1,null)
-(class C$$anonfun$met$1$$anonfun$3$H$1,class C$$anonfun$met$1$$anonfun$3,null)
-#partest -Ydelambdafy:method
(class C$A$1,class C,null)
-(class C$B$1,class C,private final java.lang.Object C.m$1())
+(class C$B$1,class C,private static final java.lang.Object C.m$1())
(class C$C$1,class C,null)
(class C$D$1,class C,null)
(class C$E$1,class C,public scala.Function0 C.met())
-(class C$F$1,class C,private final java.lang.Object C.m$2())
+(class C$F$1,class C,private static final java.lang.Object C.m$2())
(class C$G$1,class C,public scala.Function0 C.met())
(class C$H$1,class C,public scala.Function0 C.met())
diff --git a/test/files/jvm/try-type-tests.scala b/test/files/jvm/try-type-tests.scala
index 962afbd30f..b3926020f0 100644
--- a/test/files/jvm/try-type-tests.scala
+++ b/test/files/jvm/try-type-tests.scala
@@ -118,6 +118,44 @@ trait TryStandard {
assert(f.transform(succ, fail).get == 0)
}
+ def testSuccessEither(): Unit = {
+ val t = Success(1)
+ assert(t.toEither.isRight)
+ }
+
+ def testFailureEither(): Unit = {
+ val t = Failure(new Exception("foo"))
+ assert(t.toEither.isLeft)
+ }
+
+ def testFoldSuccess(): Unit = {
+ val t = Success(1)
+ val res = t.fold("Throws " + _, "Returns " + _)
+ assert(res == "Returns 1")
+ }
+
+ def testFoldFailure(): Unit = {
+ val t = Failure(new Exception("foo"))
+ val res = t.fold("Throws " + _, "Returns " + _)
+ assert(res == "Throws java.lang.Exception: foo")
+ }
+
+ def testFoldSuccessFailure(): Unit = {
+ val t = Success(1)
+ val res = t.fold("Throws " + _, _ => throw new Exception("foo"))
+ assert(res == "Throws java.lang.Exception: foo")
+ }
+
+ def testFoldFailureFailure(): Unit = {
+ val t = Failure(new Exception("foo"))
+ val res = try {
+ t.fold(_ => throw new Exception("bar"), "Returns " + _)
+ } catch {
+ case e: Throwable => "Throws " + e
+ }
+ assert(res == "Throws java.lang.Exception: bar")
+ }
+
testForeachSuccess()
testForeachFailure()
testFlatMapSuccess()
@@ -136,6 +174,11 @@ trait TryStandard {
testFailedFailure()
testSuccessTransform()
testFailureTransform()
+ testSuccessEither()
+ testFailureEither()
+ testFoldSuccess()
+ testFoldFailure()
+ testFoldSuccessFailure()
}
object Test
diff --git a/test/files/run/repl-javap-app.check b/test/files/jvm/unreachable.check
index e69de29bb2..e69de29bb2 100644
--- a/test/files/run/repl-javap-app.check
+++ b/test/files/jvm/unreachable.check
diff --git a/test/files/jvm/unreachable/Foo_1.flags b/test/files/jvm/unreachable/Foo_1.flags
index ce6e93b3da..d0a417b3c8 100644
--- a/test/files/jvm/unreachable/Foo_1.flags
+++ b/test/files/jvm/unreachable/Foo_1.flags
@@ -1 +1 @@
--Ynooptimise \ No newline at end of file
+-opt:l:default \ No newline at end of file
diff --git a/test/files/jvm/varargs/JavaClass.java b/test/files/jvm/varargs/JavaClass.java
index 6928ee5adc..0cc3587c5e 100644
--- a/test/files/jvm/varargs/JavaClass.java
+++ b/test/files/jvm/varargs/JavaClass.java
@@ -1,16 +1,12 @@
-
-
-
public class JavaClass {
- public static <T> void varargz(int i, T... v) {
- }
-
- public static void callSomeAnnotations() {
- VaClass va = new VaClass();
- va.vs(4, "", "", "");
- va.vi(1, 2, 3, 4);
- varargz(5, 1.0, 2.0, 3.0);
- va.vt(16, "", "", "");
- System.out.println(va.vt1(16, "a", "b", "c"));
- }
-} \ No newline at end of file
+ public static <T> void varargz(int i, T... v) { }
+
+ public static void callSomeAnnotations() {
+ VaClass va = new VaClass();
+ va.vs(4, "", "", "");
+ va.vi(1, 2, 3, 4);
+ varargz(5, 1.0, 2.0, 3.0);
+ va.vt(16, "", "", "");
+ System.out.println(va.vt1(16, "a", "b", "c"));
+ }
+}
diff --git a/test/files/jvm/varargs/VaClass.scala b/test/files/jvm/varargs/VaClass.scala
index d83e63ace1..ee8c288a16 100644
--- a/test/files/jvm/varargs/VaClass.scala
+++ b/test/files/jvm/varargs/VaClass.scala
@@ -1,15 +1,8 @@
-
-
import annotation.varargs
-
-
class VaClass {
-
@varargs def vs(a: Int, b: String*) = println(a + b.length)
@varargs def vi(a: Int, b: Int*) = println(a + b.sum)
@varargs def vt[T](a: Int, b: T*) = println(a + b.length)
-
- // TODO remove type bound after fixing SI-8786, see also https://github.com/scala/scala/pull/3961
- @varargs def vt1[T <: String](a: Int, b: T*): T = b.head
+ @varargs def vt1[T](a: Int, b: T*): T = b.head
}
diff --git a/test/files/jvm/varargs/varargs.scala b/test/files/jvm/varargs/varargs.scala
index 6d2e707bdf..b09818f46f 100644
--- a/test/files/jvm/varargs/varargs.scala
+++ b/test/files/jvm/varargs/varargs.scala
@@ -1,21 +1,5 @@
-
-
-
-
-
-
object Test {
def main(args: Array[String]) {
JavaClass.callSomeAnnotations
}
}
-
-
-
-
-
-
-
-
-
-
diff --git a/test/files/neg/anytrait.check b/test/files/neg/anytrait.check
index fabe74d379..6d9d681d60 100644
--- a/test/files/neg/anytrait.check
+++ b/test/files/neg/anytrait.check
@@ -4,4 +4,7 @@ anytrait.scala:3: error: field definition is not allowed in universal trait exte
anytrait.scala:5: error: this statement is not allowed in universal trait extending from class Any
{ x += 1 }
^
-two errors found
+anytrait.scala:9: error: field definition is not allowed in universal trait extending from class Any
+ val y: T
+ ^
+three errors found
diff --git a/test/files/neg/beanInfoDeprecation.check b/test/files/neg/beanInfoDeprecation.check
new file mode 100644
index 0000000000..a91cdabae2
--- /dev/null
+++ b/test/files/neg/beanInfoDeprecation.check
@@ -0,0 +1,6 @@
+beanInfoDeprecation.scala:2: warning: class BeanInfo in package beans is deprecated (since 2.12.0): the generation of BeanInfo classes is no longer supported
+class C
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/beanInfoDeprecation.flags b/test/files/neg/beanInfoDeprecation.flags
new file mode 100644
index 0000000000..c6bfaf1f64
--- /dev/null
+++ b/test/files/neg/beanInfoDeprecation.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings
diff --git a/test/files/neg/beanInfoDeprecation.scala b/test/files/neg/beanInfoDeprecation.scala
new file mode 100644
index 0000000000..c7e3a86202
--- /dev/null
+++ b/test/files/neg/beanInfoDeprecation.scala
@@ -0,0 +1,2 @@
+@scala.beans.BeanInfo
+class C
diff --git a/test/files/neg/case-collision.check b/test/files/neg/case-collision.check
index 22cf105a4f..7360833a7d 100644
--- a/test/files/neg/case-collision.check
+++ b/test/files/neg/case-collision.check
@@ -1,12 +1,12 @@
case-collision.scala:5: warning: Class foo.BIPPY differs only in case from foo.Bippy. Such classes will overwrite one another on case-insensitive filesystems.
class BIPPY
^
-case-collision.scala:11: warning: Class foo.HyRaX$ differs only in case from foo.Hyrax$. Such classes will overwrite one another on case-insensitive filesystems.
-object HyRaX
- ^
case-collision.scala:8: warning: Class foo.DINGO$ differs only in case from foo.Dingo$. Such classes will overwrite one another on case-insensitive filesystems.
object DINGO
^
+case-collision.scala:11: warning: Class foo.HyRaX$ differs only in case from foo.Hyrax$. Such classes will overwrite one another on case-insensitive filesystems.
+object HyRaX
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
three warnings found
one error found
diff --git a/test/files/neg/case-collision.flags b/test/files/neg/case-collision.flags
index 14c1069dee..85d8eb2ba2 100644
--- a/test/files/neg/case-collision.flags
+++ b/test/files/neg/case-collision.flags
@@ -1 +1 @@
--Ybackend:GenASM -Xfatal-warnings
+-Xfatal-warnings
diff --git a/test/files/neg/case-collision2.flags b/test/files/neg/case-collision2.flags
index bea46902c9..85d8eb2ba2 100644
--- a/test/files/neg/case-collision2.flags
+++ b/test/files/neg/case-collision2.flags
@@ -1 +1 @@
--Ybackend:GenBCode -Xfatal-warnings
+-Xfatal-warnings
diff --git a/test/files/neg/checksensible.check b/test/files/neg/checksensible.check
index 7de22fef54..a6e9176c69 100644
--- a/test/files/neg/checksensible.check
+++ b/test/files/neg/checksensible.check
@@ -97,7 +97,7 @@ checksensible.scala:84: warning: comparing values of types EqEqRefTest.this.C3 a
checksensible.scala:95: warning: comparing values of types Unit and Int using `!=' will always yield true
while ((c = in.read) != -1)
^
-warning: there were three deprecation warnings; re-run with -deprecation for details
+warning: there were three deprecation warnings (since 2.11.0); re-run with -deprecation for details
error: No warnings can be incurred under -Xfatal-warnings.
34 warnings found
one error found
diff --git a/test/files/neg/choices.check b/test/files/neg/choices.check
index df4f23461f..2449cadcd6 100644
--- a/test/files/neg/choices.check
+++ b/test/files/neg/choices.check
@@ -1,5 +1,4 @@
-error: Usage: -Yresolve-term-conflict:<strategy>
- where <strategy> choices are package, object, error (default: error)
+error: Usage: -Yresolve-term-conflict:<strategy> where <strategy> choices are package, object, error (default: error).
error: bad option: '-Yresolve-term-conflict'
error: bad options: -Yresolve-term-conflict
error: flags file may only contain compiler options, found: -Yresolve-term-conflict
diff --git a/test/files/neg/classmanifests_new_deprecations.check b/test/files/neg/classmanifests_new_deprecations.check
index fd1e2728c3..ed6f42d00c 100644
--- a/test/files/neg/classmanifests_new_deprecations.check
+++ b/test/files/neg/classmanifests_new_deprecations.check
@@ -1,25 +1,25 @@
-classmanifests_new_deprecations.scala:2: warning: type ClassManifest in object Predef is deprecated: Use `scala.reflect.ClassTag` instead
+classmanifests_new_deprecations.scala:2: warning: type ClassManifest in object Predef is deprecated (since 2.10.0): use `scala.reflect.ClassTag` instead
def cm1[T: ClassManifest] = ???
^
-classmanifests_new_deprecations.scala:3: warning: type ClassManifest in object Predef is deprecated: Use `scala.reflect.ClassTag` instead
+classmanifests_new_deprecations.scala:3: warning: type ClassManifest in object Predef is deprecated (since 2.10.0): use `scala.reflect.ClassTag` instead
def cm2[T](implicit evidence$1: ClassManifest[T]) = ???
^
-classmanifests_new_deprecations.scala:4: warning: type ClassManifest in object Predef is deprecated: Use `scala.reflect.ClassTag` instead
+classmanifests_new_deprecations.scala:4: warning: type ClassManifest in object Predef is deprecated (since 2.10.0): use `scala.reflect.ClassTag` instead
val cm3: ClassManifest[Int] = null
^
-classmanifests_new_deprecations.scala:6: warning: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead
+classmanifests_new_deprecations.scala:6: warning: type ClassManifest in package reflect is deprecated (since 2.10.0): use scala.reflect.ClassTag instead
def rcm1[T: scala.reflect.ClassManifest] = ???
^
-classmanifests_new_deprecations.scala:7: warning: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead
+classmanifests_new_deprecations.scala:7: warning: type ClassManifest in package reflect is deprecated (since 2.10.0): use scala.reflect.ClassTag instead
def rcm2[T](implicit evidence$1: scala.reflect.ClassManifest[T]) = ???
^
-classmanifests_new_deprecations.scala:8: warning: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead
+classmanifests_new_deprecations.scala:8: warning: type ClassManifest in package reflect is deprecated (since 2.10.0): use scala.reflect.ClassTag instead
val rcm3: scala.reflect.ClassManifest[Int] = null
^
-classmanifests_new_deprecations.scala:10: warning: type ClassManifest in object Predef is deprecated: Use `scala.reflect.ClassTag` instead
+classmanifests_new_deprecations.scala:10: warning: type ClassManifest in object Predef is deprecated (since 2.10.0): use `scala.reflect.ClassTag` instead
type CM[T] = ClassManifest[T]
^
-classmanifests_new_deprecations.scala:15: warning: type ClassManifest in package reflect is deprecated: Use scala.reflect.ClassTag instead
+classmanifests_new_deprecations.scala:15: warning: type ClassManifest in package reflect is deprecated (since 2.10.0): use scala.reflect.ClassTag instead
type RCM[T] = scala.reflect.ClassManifest[T]
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/compile-time-only-a.check b/test/files/neg/compile-time-only-a.check
index b1ed1d24c2..a10f8b6489 100644
--- a/test/files/neg/compile-time-only-a.check
+++ b/test/files/neg/compile-time-only-a.check
@@ -13,9 +13,15 @@ compile-time-only-a.scala:36: error: C2
compile-time-only-a.scala:38: error: C3
new C3(2)
^
+compile-time-only-a.scala:39: error: C3
+ C3(2)
+ ^
compile-time-only-a.scala:41: error: C4
new C4(2)
^
+compile-time-only-a.scala:42: error: C4
+ C4(2)
+ ^
compile-time-only-a.scala:45: error: C5
2.ext
^
@@ -73,4 +79,4 @@ compile-time-only-a.scala:75: error: placebo
compile-time-only-a.scala:75: error: placebo
@placebo def x = (2: @placebo)
^
-25 errors found
+27 errors found
diff --git a/test/files/neg/constrs.check b/test/files/neg/constrs.check
index 4f4a12bc13..8a5bd97ae3 100644
--- a/test/files/neg/constrs.check
+++ b/test/files/neg/constrs.check
@@ -7,7 +7,7 @@ constrs.scala:6: error: value u is not a member of object test
constrs.scala:10: error: called constructor's definition must precede calling constructor's definition
def this() = this("abc")
^
-constrs.scala:12: error: called constructor's definition must precede calling constructor's definition
+constrs.scala:12: error: constructor invokes itself
def this(x: Boolean) = this(x)
^
constrs.scala:16: error: type mismatch;
diff --git a/test/files/neg/delayed-init-ref.check b/test/files/neg/delayed-init-ref.check
index 90bc027969..2913b1858f 100644
--- a/test/files/neg/delayed-init-ref.check
+++ b/test/files/neg/delayed-init-ref.check
@@ -4,8 +4,7 @@ delayed-init-ref.scala:17: warning: Selecting value vall from object O, which ex
delayed-init-ref.scala:19: warning: Selecting value vall from object O, which extends scala.DelayedInit, is likely to yield an uninitialized value
println(vall) // warn
^
-delayed-init-ref.scala:28: warning: trait DelayedInit in package scala is deprecated: DelayedInit semantics can be surprising. Support for `App` will continue.
-See the release notes for more details: https://github.com/scala/scala/releases/tag/v2.11.0-RC1
+delayed-init-ref.scala:28: warning: trait DelayedInit in package scala is deprecated (since 2.11.0): DelayedInit semantics can be surprising. Support for `App` will continue. See the release notes for more details: https://github.com/scala/scala/releases/tag/v2.11.0-RC1
trait Before extends DelayedInit {
^
delayed-init-ref.scala:40: warning: Selecting value foo from trait UserContext, which extends scala.DelayedInit, is likely to yield an uninitialized value
diff --git a/test/files/neg/deprecated-target.check b/test/files/neg/deprecated-target.check
new file mode 100644
index 0000000000..307d3d25ab
--- /dev/null
+++ b/test/files/neg/deprecated-target.check
@@ -0,0 +1,4 @@
+warning: -target is deprecated: -target:jvm-1.7 is deprecated, forcing use of jvm-1.8
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/deprecated-target.flags b/test/files/neg/deprecated-target.flags
new file mode 100644
index 0000000000..458ded8123
--- /dev/null
+++ b/test/files/neg/deprecated-target.flags
@@ -0,0 +1 @@
+-target:jvm-1.7 -deprecation -Xfatal-warnings
diff --git a/test/files/neg/deprecated-target.scala b/test/files/neg/deprecated-target.scala
new file mode 100644
index 0000000000..9dccdd5e59
--- /dev/null
+++ b/test/files/neg/deprecated-target.scala
@@ -0,0 +1 @@
+class C \ No newline at end of file
diff --git a/test/files/neg/eta-expand-star.check b/test/files/neg/eta-expand-star.check
index 6765d504fc..eba1721014 100644
--- a/test/files/neg/eta-expand-star.check
+++ b/test/files/neg/eta-expand-star.check
@@ -1,4 +1,4 @@
-eta-expand-star.scala:6: error: too many arguments for method apply: (v1: Seq[T])Unit in trait Function1
+eta-expand-star.scala:6: error: too many arguments (2) for method apply: (v1: Seq[T])Unit in trait Function1
g(1, 2)
- ^
+ ^
one error found
diff --git a/test/files/neg/hkgadt.check b/test/files/neg/hkgadt.check
new file mode 100644
index 0000000000..ef302a9abf
--- /dev/null
+++ b/test/files/neg/hkgadt.check
@@ -0,0 +1,31 @@
+hkgadt.scala:7: error: type mismatch;
+ found : scala.collection.immutable.Set[Int]
+ required: F[Int]
+ case Bar() => Set(1)
+ ^
+hkgadt.scala:13: error: type mismatch;
+ found : Boolean(true)
+ required: A
+ case Bar1() => true
+ ^
+hkgadt.scala:24: error: type mismatch;
+ found : scala.collection.immutable.Set[Int]
+ required: F[Int]
+ case Bar() => Set(1)
+ ^
+hkgadt.scala:25: error: type mismatch;
+ found : List[Int]
+ required: F[Int]
+ case Baz() => List(1)
+ ^
+hkgadt.scala:32: error: type mismatch;
+ found : Boolean(true)
+ required: A
+ case Bar1() => true
+ ^
+hkgadt.scala:33: error: type mismatch;
+ found : Int(1)
+ required: A
+ case Baz1() => 1
+ ^
+6 errors found
diff --git a/test/files/neg/hkgadt.scala b/test/files/neg/hkgadt.scala
new file mode 100644
index 0000000000..0107d2bdde
--- /dev/null
+++ b/test/files/neg/hkgadt.scala
@@ -0,0 +1,35 @@
+object HKGADT {
+ sealed trait Foo[F[_]]
+ final case class Bar() extends Foo[List]
+
+ def frob[F[_]](foo: Foo[F]): F[Int] =
+ foo match {
+ case Bar() => Set(1)
+ }
+
+ sealed trait Foo1[F]
+ final case class Bar1() extends Foo1[Int]
+ def frob1[A](foo: Foo1[A]): A = foo match {
+ case Bar1() => true
+ }
+}
+
+object HKGADT2 {
+ sealed trait Foo[F[_]]
+ final case class Bar() extends Foo[List]
+ final case class Baz() extends Foo[Set]
+
+ def frob[F[_]](foo: Foo[F]): F[Int] =
+ foo match {
+ case Bar() => Set(1)
+ case Baz() => List(1)
+ }
+
+ sealed trait Foo1[F]
+ final case class Bar1() extends Foo1[Int]
+ final case class Baz1() extends Foo1[Boolean]
+ def frob1[A](foo: Foo1[A]): A = foo match {
+ case Bar1() => true
+ case Baz1() => 1
+ }
+}
diff --git a/test/files/neg/implicit-ambiguous-2.check b/test/files/neg/implicit-ambiguous-2.check
new file mode 100644
index 0000000000..4a10b0dd65
--- /dev/null
+++ b/test/files/neg/implicit-ambiguous-2.check
@@ -0,0 +1,4 @@
+implicit-ambiguous-2.scala:10: error: Could not prove Int =!= Int
+ implicitly[Int =!= Int]
+ ^
+one error found
diff --git a/test/files/neg/implicit-ambiguous-2.scala b/test/files/neg/implicit-ambiguous-2.scala
new file mode 100644
index 0000000000..563c8c583f
--- /dev/null
+++ b/test/files/neg/implicit-ambiguous-2.scala
@@ -0,0 +1,11 @@
+object Test {
+ trait =!=[C, D]
+
+ implicit def neq[E, F] : E =!= F = null
+
+ implicit def neqAmbig1[G, H, J] : J =!= J = null
+ @annotation.implicitAmbiguous("Could not prove ${I} =!= ${I}")
+ implicit def neqAmbig2[I] : I =!= I = null
+
+ implicitly[Int =!= Int]
+}
diff --git a/test/files/neg/implicit-ambiguous-invalid.check b/test/files/neg/implicit-ambiguous-invalid.check
new file mode 100644
index 0000000000..68b607c4c2
--- /dev/null
+++ b/test/files/neg/implicit-ambiguous-invalid.check
@@ -0,0 +1,7 @@
+implicit-ambiguous-invalid.scala:5: warning: Invalid implicitAmbiguous message for method neqAmbig1 in object Test:
+The type parameter B referenced in the message of the @implicitAmbiguous annotation is not defined by method neqAmbig1.
+ implicit def neqAmbig1[A] : A =!= A = null
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/t6375.flags b/test/files/neg/implicit-ambiguous-invalid.flags
index 85d8eb2ba2..85d8eb2ba2 100644
--- a/test/files/neg/t6375.flags
+++ b/test/files/neg/implicit-ambiguous-invalid.flags
diff --git a/test/files/neg/implicit-ambiguous-invalid.scala b/test/files/neg/implicit-ambiguous-invalid.scala
new file mode 100644
index 0000000000..f8f9da655f
--- /dev/null
+++ b/test/files/neg/implicit-ambiguous-invalid.scala
@@ -0,0 +1,6 @@
+object Test {
+ trait =!=[C, D]
+
+ @annotation.implicitAmbiguous("Could not prove ${A} =!= ${B}")
+ implicit def neqAmbig1[A] : A =!= A = null
+}
diff --git a/test/files/neg/implicit-ambiguous.check b/test/files/neg/implicit-ambiguous.check
new file mode 100644
index 0000000000..0b3cebcb6f
--- /dev/null
+++ b/test/files/neg/implicit-ambiguous.check
@@ -0,0 +1,4 @@
+implicit-ambiguous.scala:10: error: Could not prove Int =!= Int
+ implicitly[Int =!= Int]
+ ^
+one error found
diff --git a/test/files/neg/implicit-ambiguous.scala b/test/files/neg/implicit-ambiguous.scala
new file mode 100644
index 0000000000..79b1297915
--- /dev/null
+++ b/test/files/neg/implicit-ambiguous.scala
@@ -0,0 +1,11 @@
+object Test {
+ trait =!=[C, D]
+
+ implicit def neq[E, F] : E =!= F = null
+
+ @annotation.implicitAmbiguous("Could not prove ${J} =!= ${J}")
+ implicit def neqAmbig1[G, H, J] : J =!= J = null
+ implicit def neqAmbig2[I] : I =!= I = null
+
+ implicitly[Int =!= Int]
+}
diff --git a/test/files/neg/inlineIndyLambdaPrivate.check b/test/files/neg/inlineIndyLambdaPrivate.check
new file mode 100644
index 0000000000..dbd142f59e
--- /dev/null
+++ b/test/files/neg/inlineIndyLambdaPrivate.check
@@ -0,0 +1,16 @@
+Test_2.scala:2: warning: A_1::test()Ljava/lang/String; could not be inlined:
+The callee A_1::test()Ljava/lang/String; contains the instruction INVOKEDYNAMIC m()LA_1$Fun; [
+ // handle kind 0x6 : INVOKESTATIC
+ java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+ // arguments:
+ (Ljava/lang/String;)Ljava/lang/String;,
+ // handle kind 0x6 : INVOKESTATIC
+ A_1.lambda$test$0(Ljava/lang/String;)Ljava/lang/String;,
+ (Ljava/lang/String;)Ljava/lang/String;
+ ]
+that would cause an IllegalAccessError when inlined into class Test.
+ def foo = A_1.test
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/inlineIndyLambdaPrivate.flags b/test/files/neg/inlineIndyLambdaPrivate.flags
new file mode 100644
index 0000000000..b38f5b8411
--- /dev/null
+++ b/test/files/neg/inlineIndyLambdaPrivate.flags
@@ -0,0 +1 @@
+-opt:l:classpath -Yopt-inline-heuristics:everything -opt-warnings:_ -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/inlineIndyLambdaPrivate/A_1.java b/test/files/neg/inlineIndyLambdaPrivate/A_1.java
new file mode 100644
index 0000000000..a9144a9fa6
--- /dev/null
+++ b/test/files/neg/inlineIndyLambdaPrivate/A_1.java
@@ -0,0 +1,9 @@
+public class A_1 {
+ interface Fun {
+ String m(String s);
+ }
+ public static final String test() {
+ Fun f = s -> s.trim();
+ return f.m(" eh ");
+ }
+}
diff --git a/test/files/neg/inlineIndyLambdaPrivate/Test_2.scala b/test/files/neg/inlineIndyLambdaPrivate/Test_2.scala
new file mode 100644
index 0000000000..dd59c05176
--- /dev/null
+++ b/test/files/neg/inlineIndyLambdaPrivate/Test_2.scala
@@ -0,0 +1,3 @@
+class Test {
+ def foo = A_1.test
+}
diff --git a/test/files/neg/inlineMaxSize.flags b/test/files/neg/inlineMaxSize.flags
index 9c6b811622..e765b66af2 100644
--- a/test/files/neg/inlineMaxSize.flags
+++ b/test/files/neg/inlineMaxSize.flags
@@ -1 +1 @@
--Ybackend:GenBCode -Ydelambdafy:method -Yopt:l:classpath -Yopt-warnings -Xfatal-warnings \ No newline at end of file
+-Ydelambdafy:method -opt:l:classpath -opt-warnings -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/logImplicits.check b/test/files/neg/logImplicits.check
index 270882b71a..913b116ac3 100644
--- a/test/files/neg/logImplicits.check
+++ b/test/files/neg/logImplicits.check
@@ -1,10 +1,10 @@
-logImplicits.scala:2: applied implicit conversion from xs.type to ?{def size: ?} = implicit def byteArrayOps(xs: Array[Byte]): scala.collection.mutable.ArrayOps[Byte]
+logImplicits.scala:2: applied implicit conversion from xs.type to ?{def size: ?} = implicit def byteArrayOps(xs: Array[Byte]): scala.collection.mutable.ArrayOps.ofByte
def f(xs: Array[Byte]) = xs.size
^
logImplicits.scala:7: applied implicit conversion from String("abc") to ?{def map: ?} = implicit def augmentString(x: String): scala.collection.immutable.StringOps
def f = "abc" map (_ + 1)
^
-logImplicits.scala:15: inferred view from String("abc") to Int = C.this.convert:(p: String("abc"))Int
+logImplicits.scala:15: inferred view from String("abc") to Int via C.this.convert: (p: String)Int
math.max(122, x: Int)
^
logImplicits.scala:19: applied implicit conversion from Int(1) to ?{def ->: ?} = implicit def ArrowAssoc[A](self: A): ArrowAssoc[A]
diff --git a/test/files/neg/lub-from-hell-2.check b/test/files/neg/lub-from-hell-2.check
new file mode 100644
index 0000000000..3ef935f93b
--- /dev/null
+++ b/test/files/neg/lub-from-hell-2.check
@@ -0,0 +1,7 @@
+lub-from-hell-2.scala:3: error: type arguments [Any,Iterable[Any] with Int => Any with scala.collection.generic.Subtractable[Any,Iterable[Any] with Int => Any with scala.collection.generic.Subtractable[Any,Iterable[Any] with Int => Any]{def seq: Iterable[Any] with Int => Any}]{def seq: Iterable[Any] with Int => Any{def seq: Iterable[Any] with Int => Any}}] do not conform to trait Subtractable's type parameter bounds [A,+Repr <: scala.collection.generic.Subtractable[A,Repr]]
+ def foo(a: Boolean, b: collection.mutable.Set[Any], c: collection.mutable.ListBuffer[Any]) = if (a) b else c
+ ^
+lub-from-hell-2.scala:4: error: type arguments [Any,scala.collection.mutable.Iterable[Any] with scala.collection.mutable.Cloneable[scala.collection.mutable.Iterable[Any] with scala.collection.mutable.Cloneable[scala.collection.mutable.Iterable[Any] with Cloneable with Int => Any] with Int => Any{def seq: scala.collection.mutable.Iterable[Any] with Cloneable with Int => Any}] with scala.collection.generic.Growable[Any] with Int => Any with scala.collection.generic.Shrinkable[Any] with scala.collection.generic.Subtractable[Any,Iterable[Any] with Int => Any with scala.collection.generic.Subtractable[Any,Iterable[Any] with Int => Any]{def seq: Iterable[Any] with Int => Any}] with scala.collection.script.Scriptable[Any]] do not conform to trait Subtractable's type parameter bounds [A,+Repr <: scala.collection.generic.Subtractable[A,Repr]]
+ def bar(a: Boolean, b: scala.collection.mutable.SetLike[Any,scala.collection.mutable.Set[Any]], c: scala.collection.mutable.Buffer[Any]) = if (a) b else c
+ ^
+two errors found
diff --git a/test/files/neg/lub-from-hell-2.scala b/test/files/neg/lub-from-hell-2.scala
new file mode 100644
index 0000000000..18c99dfada
--- /dev/null
+++ b/test/files/neg/lub-from-hell-2.scala
@@ -0,0 +1,13 @@
+class Test {
+ trait Tree
+ def foo(a: Boolean, b: collection.mutable.Set[Any], c: collection.mutable.ListBuffer[Any]) = if (a) b else c
+ def bar(a: Boolean, b: scala.collection.mutable.SetLike[Any,scala.collection.mutable.Set[Any]], c: scala.collection.mutable.Buffer[Any]) = if (a) b else c
+ // bar produces an ill-bounded LUB in 2.11.8. After this commit, which fixes a bug in existential+refinement lubs, foo also fails.
+}
+// This test case minimizes a case that stated to fail compile after my fixes in SI-5294.
+// `foo` used to compile for the wrong reason, `mergePrefixAndArgs` failed to transpose a
+// ragged matrix and skipped to the next level of the base type sequences to find a common type symbol.
+//
+// My changes fixed the root cause of the ragged matrix, which uncovered the latent bug.
+// For comparison, `bar` failed to compile before _and_ after my changes for the same reason:
+// f-bounded types involved in LUBs can sometimes produce an ill-bounded LUB.
diff --git a/test/files/neg/macro-invalidret.check b/test/files/neg/macro-invalidret.check
index ebdc8ec7da..a4d4fc6f34 100644
--- a/test/files/neg/macro-invalidret.check
+++ b/test/files/neg/macro-invalidret.check
@@ -27,7 +27,7 @@ java.lang.NullPointerException
Macros_Test_2.scala:15: error: macro implementation is missing
foo4
^
-Macros_Test_2.scala:17: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+Macros_Test_2.scala:17: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
foo6
^
two warnings found
diff --git a/test/files/neg/macro-invalidusage-badargs.check b/test/files/neg/macro-invalidusage-badargs.check
index 19ac6528d3..ee549c45cb 100644
--- a/test/files/neg/macro-invalidusage-badargs.check
+++ b/test/files/neg/macro-invalidusage-badargs.check
@@ -13,7 +13,7 @@ Macros_Test_2.scala:8: error: not enough arguments for macro method foo: (x: Int
Unspecified value parameter x.
foo()
^
-Macros_Test_2.scala:9: error: too many arguments for macro method foo: (x: Int)Int
+Macros_Test_2.scala:9: error: too many arguments (2) for macro method foo: (x: Int)Int
foo(4, 2)
- ^
+ ^
5 errors found
diff --git a/test/files/neg/missing-arg-list.check b/test/files/neg/missing-arg-list.check
index 5a011c36f2..229baac177 100644
--- a/test/files/neg/missing-arg-list.check
+++ b/test/files/neg/missing-arg-list.check
@@ -18,4 +18,9 @@ Unapplied methods are only converted to functions when a function type is expect
You can make this conversion explicit by writing `h _` or `h(_,_,_)(_)` instead of `h`.
val z = h
^
-four errors found
+missing-arg-list.scala:15: error: missing argument list for method + in trait T
+Unapplied methods are only converted to functions when a function type is expected.
+You can make this conversion explicit by writing `+ _` or `+(_)` instead of `+`.
+ val p = +
+ ^
+5 errors found
diff --git a/test/files/neg/missing-arg-list.scala b/test/files/neg/missing-arg-list.scala
index c422dd32fe..44b83e429d 100644
--- a/test/files/neg/missing-arg-list.scala
+++ b/test/files/neg/missing-arg-list.scala
@@ -10,4 +10,7 @@ trait T {
val x = f
val y = g
val z = h
+
+ def +(i: Int) = i + 42
+ val p = +
}
diff --git a/test/files/neg/multi-array.check b/test/files/neg/multi-array.check
index 511caa126f..06ffdc9fbc 100644
--- a/test/files/neg/multi-array.check
+++ b/test/files/neg/multi-array.check
@@ -1,4 +1,4 @@
-multi-array.scala:7: error: too many arguments for constructor Array: (_length: Int)Array[T]
+multi-array.scala:7: error: too many arguments (2) for constructor Array: (_length: Int)Array[T]
val a: Array[Int] = new Array(10, 10)
- ^
+ ^
one error found
diff --git a/test/files/neg/names-defaults-neg-warn.check b/test/files/neg/names-defaults-neg-warn.check
index 0f4edef84e..3ff7d67cc3 100644
--- a/test/files/neg/names-defaults-neg-warn.check
+++ b/test/files/neg/names-defaults-neg-warn.check
@@ -1,7 +1,7 @@
-names-defaults-neg-warn.scala:11: warning: the parameter name s has been deprecated. Use x instead.
+names-defaults-neg-warn.scala:11: warning: the parameter name s is deprecated: use x instead
deprNam2.f(s = "dlfkj")
^
-names-defaults-neg-warn.scala:12: warning: the parameter name x has been deprecated. Use s instead.
+names-defaults-neg-warn.scala:12: warning: the parameter name x is deprecated: use s instead
deprNam2.g(x = "dlkjf")
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/names-defaults-neg.check b/test/files/neg/names-defaults-neg.check
index a43bf66811..af164d90ea 100644
--- a/test/files/neg/names-defaults-neg.check
+++ b/test/files/neg/names-defaults-neg.check
@@ -1,7 +1,3 @@
-names-defaults-neg.scala:65: error: not enough arguments for method apply: (a: Int, b: String)(c: Int*)Fact in object Fact.
-Unspecified value parameter b.
- val fac = Fact(1)(2, 3)
- ^
names-defaults-neg.scala:5: error: type mismatch;
found : String("#")
required: Int
@@ -81,6 +77,10 @@ and method f in object t8 of type (a: Int, b: Object)String
match argument types (a: Int,b: String) and expected result type Any
println(t8.f(a = 0, b = "1")) // ambiguous reference
^
+names-defaults-neg.scala:65: error: not enough arguments for method apply: (a: Int, b: String)(c: Int*)Fact in object Fact.
+Unspecified value parameter b.
+ val fac = Fact(1)(2, 3)
+ ^
names-defaults-neg.scala:69: error: wrong number of arguments for pattern A1(x: Int,y: String)
A1() match { case A1(_) => () }
^
@@ -112,74 +112,80 @@ names-defaults-neg.scala:90: error: deprecated parameter name x has to be distin
names-defaults-neg.scala:91: error: deprecated parameter name a has to be distinct from any other parameter name (deprecated or not).
def deprNam2(a: String)(@deprecatedName('a) b: Int) = 1
^
-names-defaults-neg.scala:93: warning: the parameter name y has been deprecated. Use b instead.
+names-defaults-neg.scala:93: warning: the parameter name y is deprecated: use b instead
deprNam3(y = 10, b = 2)
^
names-defaults-neg.scala:93: error: parameter 'b' is already specified at parameter position 1
deprNam3(y = 10, b = 2)
^
-names-defaults-neg.scala:98: error: unknown parameter name: m
+names-defaults-neg.scala:96: warning: naming parameter deprNam4Arg is deprecated.
+ deprNam4(deprNam4Arg = null)
+ ^
+names-defaults-neg.scala:98: warning: naming parameter deprNam5Arg is deprecated.
+ deprNam5(deprNam5Arg = null)
+ ^
+names-defaults-neg.scala:102: error: unknown parameter name: m
f3818(y = 1, m = 1)
^
-names-defaults-neg.scala:131: error: reference to var2 is ambiguous; it is both a method parameter and a variable in scope.
+names-defaults-neg.scala:135: error: reference to var2 is ambiguous; it is both a method parameter and a variable in scope.
delay(var2 = 40)
^
-names-defaults-neg.scala:134: error: missing parameter type for expanded function ((x$1) => a = x$1)
+names-defaults-neg.scala:138: error: missing parameter type for expanded function ((x$1: <error>) => a = x$1)
val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
^
-names-defaults-neg.scala:134: error: not found: value a
+names-defaults-neg.scala:138: error: not found: value a
val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
^
-names-defaults-neg.scala:134: error: not found: value get
+names-defaults-neg.scala:138: error: not found: value get
val taf2: Int => Unit = testAnnFun(a = _, b = get("+"))
^
-names-defaults-neg.scala:135: error: parameter 'a' is already specified at parameter position 1
+names-defaults-neg.scala:139: error: parameter 'a' is already specified at parameter position 1
val taf3 = testAnnFun(b = _: String, a = get(8))
^
-names-defaults-neg.scala:136: error: missing parameter type for expanded function ((x$3) => testAnnFun(x$3, ((x$4) => b = x$4)))
+names-defaults-neg.scala:140: error: missing parameter type for expanded function ((x$3: <error>) => testAnnFun(x$3, ((x$4) => b = x$4)))
val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
^
-names-defaults-neg.scala:136: error: missing parameter type for expanded function ((x$4) => b = x$4)
+names-defaults-neg.scala:140: error: missing parameter type for expanded function ((x$4: <error>) => b = x$4)
val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
^
-names-defaults-neg.scala:136: error: not found: value b
+names-defaults-neg.scala:140: error: not found: value b
val taf4: (Int, String) => Unit = testAnnFun(_, b = _)
^
-names-defaults-neg.scala:144: error: variable definition needs type because 'x' is used as a named argument in its body.
+names-defaults-neg.scala:148: error: variable definition needs type because 'x' is used as a named argument in its body.
def t3 { var x = t.f(x = 1) }
^
-names-defaults-neg.scala:147: error: variable definition needs type because 'x' is used as a named argument in its body.
+names-defaults-neg.scala:151: error: variable definition needs type because 'x' is used as a named argument in its body.
object t6 { var x = t.f(x = 1) }
^
-names-defaults-neg.scala:147: warning: failed to determine if 'x = ...' is a named argument or an assignment expression.
+names-defaults-neg.scala:151: warning: failed to determine if 'x = ...' is a named argument or an assignment expression.
an explicit type is required for the definition mentioned in the error message above.
object t6 { var x = t.f(x = 1) }
^
-names-defaults-neg.scala:150: error: variable definition needs type because 'x' is used as a named argument in its body.
+names-defaults-neg.scala:154: error: variable definition needs type because 'x' is used as a named argument in its body.
class t9 { var x = t.f(x = 1) }
^
-names-defaults-neg.scala:150: warning: failed to determine if 'x = ...' is a named argument or an assignment expression.
+names-defaults-neg.scala:154: warning: failed to determine if 'x = ...' is a named argument or an assignment expression.
an explicit type is required for the definition mentioned in the error message above.
class t9 { var x = t.f(x = 1) }
^
-names-defaults-neg.scala:164: error: variable definition needs type because 'x' is used as a named argument in its body.
+names-defaults-neg.scala:168: error: variable definition needs type because 'x' is used as a named argument in its body.
def u3 { var x = u.f(x = 1) }
^
-names-defaults-neg.scala:167: error: variable definition needs type because 'x' is used as a named argument in its body.
+names-defaults-neg.scala:171: error: variable definition needs type because 'x' is used as a named argument in its body.
def u6 { var x = u.f(x = "32") }
^
-names-defaults-neg.scala:170: error: reference to x is ambiguous; it is both a method parameter and a variable in scope.
+names-defaults-neg.scala:174: error: reference to x is ambiguous; it is both a method parameter and a variable in scope.
def u9 { var x: Int = u.f(x = 1) }
^
-names-defaults-neg.scala:177: error: variable definition needs type because 'x' is used as a named argument in its body.
+names-defaults-neg.scala:181: error: variable definition needs type because 'x' is used as a named argument in its body.
class u15 { var x = u.f(x = 1) }
^
-names-defaults-neg.scala:177: warning: failed to determine if 'x = ...' is a named argument or an assignment expression.
+names-defaults-neg.scala:181: warning: failed to determine if 'x = ...' is a named argument or an assignment expression.
an explicit type is required for the definition mentioned in the error message above.
class u15 { var x = u.f(x = 1) }
^
-names-defaults-neg.scala:180: error: reference to x is ambiguous; it is both a method parameter and a variable in scope.
+names-defaults-neg.scala:184: error: reference to x is ambiguous; it is both a method parameter and a variable in scope.
class u18 { var x: Int = u.f(x = 1) }
^
-four warnings found
+6 warnings found
46 errors found
diff --git a/test/files/neg/names-defaults-neg.scala b/test/files/neg/names-defaults-neg.scala
index a97b590bf2..b326d3b5bd 100644
--- a/test/files/neg/names-defaults-neg.scala
+++ b/test/files/neg/names-defaults-neg.scala
@@ -92,6 +92,10 @@ object Test extends App {
def deprNam3(@deprecatedName('x) a: Int, @deprecatedName('y) b: Int) = a + b
deprNam3(y = 10, b = 2)
+ def deprNam4(@deprecatedName('deprNam4Arg) deprNam4Arg: String) = 0
+ deprNam4(deprNam4Arg = null)
+ def deprNam5(@deprecatedName deprNam5Arg: String) = 0
+ deprNam5(deprNam5Arg = null)
// t3818
def f3818(x: Int = 1, y: Int, z: Int = 1) = 0
diff --git a/test/files/neg/optimiseDeprecated.check b/test/files/neg/optimiseDeprecated.check
new file mode 100644
index 0000000000..16ab3bbf1a
--- /dev/null
+++ b/test/files/neg/optimiseDeprecated.check
@@ -0,0 +1,4 @@
+warning: -optimise is deprecated: In 2.12, -optimise enables -opt:l:classpath. Check -opt:help for using the Scala 2.12 optimizer.
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/optimiseDeprecated.flags b/test/files/neg/optimiseDeprecated.flags
new file mode 100644
index 0000000000..42fca6d836
--- /dev/null
+++ b/test/files/neg/optimiseDeprecated.flags
@@ -0,0 +1 @@
+-optimise -deprecation -Xfatal-warnings
diff --git a/test/files/neg/optimiseDeprecated.scala b/test/files/neg/optimiseDeprecated.scala
new file mode 100644
index 0000000000..826a1a5bc2
--- /dev/null
+++ b/test/files/neg/optimiseDeprecated.scala
@@ -0,0 +1 @@
+class C
diff --git a/test/files/neg/outer-ref-checks.check b/test/files/neg/outer-ref-checks.check
new file mode 100644
index 0000000000..bba7118d79
--- /dev/null
+++ b/test/files/neg/outer-ref-checks.check
@@ -0,0 +1,24 @@
+outer-ref-checks.scala:5: warning: The outer reference in this type test cannot be checked at run time.
+ final case class Inner(val s: String) // unchecked warning
+ ^
+outer-ref-checks.scala:8: warning: The outer reference in this type test cannot be checked at run time.
+ case Inner(s) => // unchecked warning
+ ^
+outer-ref-checks.scala:18: warning: The outer reference in this type test cannot be checked at run time.
+ case Inner(s) => // unchecked warning
+ ^
+outer-ref-checks.scala:19: warning: The outer reference in this type test cannot be checked at run time.
+ case O.Inner(s) => // unchecked warning
+ ^
+outer-ref-checks.scala:41: warning: The outer reference in this type test cannot be checked at run time.
+ case Inner(s) => // unchecked warning
+ ^
+outer-ref-checks.scala:46: warning: The outer reference in this type test cannot be checked at run time.
+ case _: Inner => // unchecked warning
+ ^
+outer-ref-checks.scala:56: warning: The outer reference in this type test cannot be checked at run time.
+ case _: (Inner @uncheckedVariance) => // unchecked warning
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+7 warnings found
+one error found
diff --git a/test/files/neg/outer-ref-checks.flags b/test/files/neg/outer-ref-checks.flags
new file mode 100644
index 0000000000..464cc20ea6
--- /dev/null
+++ b/test/files/neg/outer-ref-checks.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -unchecked \ No newline at end of file
diff --git a/test/files/neg/outer-ref-checks.scala b/test/files/neg/outer-ref-checks.scala
new file mode 100644
index 0000000000..35983fe92b
--- /dev/null
+++ b/test/files/neg/outer-ref-checks.scala
@@ -0,0 +1,106 @@
+import scala.annotation.unchecked.uncheckedVariance
+
+class Outer {
+ // A final class gets no outer ref, so we expect to see warnings where an outer ref check should be performed
+ final case class Inner(val s: String) // unchecked warning
+
+ def belongs(a: Any): Unit = a match {
+ case Inner(s) => // unchecked warning
+ case _ =>
+ }
+
+ def belongsStaticSameOuter(a: Inner): Unit = a match {
+ case Inner(s) => // no need for outer check
+ // match is exhaustive, no default case needed
+ }
+
+ def belongsOtherOuter(a: Outer#Inner): Unit = a match {
+ case Inner(s) => // unchecked warning
+ case O.Inner(s) => // unchecked warning
+ case _ =>
+ }
+}
+
+object O extends Outer {
+ def belongsStaticSameOuter2(a: Inner): Unit = a match {
+ case Inner(s) => // no need for outer check
+ // match is exhaustive, no default case needed
+ }
+
+ def belongsStaticSameOuter3(a: Inner): Unit = a match {
+ case _: Inner => // no need for outer check
+ // match is exhaustive, no default case needed
+ }
+
+ def belongsStaticSameOuter4(a: Inner): Unit = a match {
+ case _: (Inner @uncheckedVariance) => // no need for outer check
+ // match is exhaustive, no default case needed
+ }
+
+ def belongsOtherOuter2(a: Outer#Inner): Unit = a match {
+ case Inner(s) => // unchecked warning
+ case _ =>
+ }
+
+ def belongsOtherOuter3(a: Outer#Inner): Unit = a match {
+ case _: Inner => // unchecked warning
+ case _ =>
+ }
+
+ def belongsOtherOuter4(a: Outer#Inner): Unit = a match {
+ case _: (Inner @unchecked) => // warning supressed
+ case _ =>
+ }
+
+ def belongsOtherOuter5(a: Outer#Inner): Unit = a match {
+ case _: (Inner @uncheckedVariance) => // unchecked warning
+ case _ =>
+ }
+
+ def nested: Unit = {
+ final case class I(s: String)
+
+ def check1(a: Any): Unit = a match {
+ case I(s) => // no need for outer check
+ case _ =>
+ }
+
+ def check2(a: I): Unit = a match {
+ case I(s) => // no need for outer check
+ // match is exhaustive, no default case needed
+ }
+ }
+}
+
+class O2 {
+ def nested: Unit = {
+ final case class I(s: String)
+
+ def check1(a: Any): Unit = a match {
+ case I(s) => // no need for outer check (is this correct?)
+ case _ =>
+ }
+
+ def check2(a: I): Unit = a match {
+ case I(s) => // no need for outer check (is this correct?)
+ // match is exhaustive, no default case needed
+ }
+ }
+}
+
+package p {
+ object T {
+ case class C(x: Int)
+ }
+}
+
+object U {
+ val T = p.T
+}
+
+class Test {
+ def m(a: Any) = a match {
+ case U.T.C(1) => 1 // used to warn
+ case _ => 1
+ }
+}
diff --git a/test/files/neg/overloaded-unapply.check b/test/files/neg/overloaded-unapply.check
index 68a826bac2..3951166de5 100644
--- a/test/files/neg/overloaded-unapply.check
+++ b/test/files/neg/overloaded-unapply.check
@@ -7,8 +7,8 @@ match argument types (List[a])
overloaded-unapply.scala:22: error: cannot resolve overloaded unapply
case List(x, xs) => 7
^
-overloaded-unapply.scala:12: error: method unapply is defined twice
- conflicting symbols both originated in file 'overloaded-unapply.scala'
+overloaded-unapply.scala:12: error: method unapply is defined twice;
+ the conflicting method unapply was defined at line 7:7
def unapply[a](xs: List[a]): Option[Null] = xs match {
^
three errors found
diff --git a/test/files/neg/override-object-no.check b/test/files/neg/override-object-no.check
index 9cfda80fc3..972a719b3b 100644
--- a/test/files/neg/override-object-no.check
+++ b/test/files/neg/override-object-no.check
@@ -20,4 +20,12 @@ an overriding object must conform to the overridden object's class bound;
required: case2.Bar[Traversable[String]]
override object A extends Bar[List[String]] // err
^
-four errors found
+override-object-no.scala:52: error: overriding method x in trait A of type => SI9574.Foo.type;
+ method x has incompatible type
+ trait B extends A { def x: Bar.type } // should not compile (SI-9574)
+ ^
+override-object-no.scala:53: error: overriding method x in trait A of type => SI9574.Foo.type;
+ object x has incompatible type
+ trait C extends A { override object x }
+ ^
+6 errors found
diff --git a/test/files/neg/override-object-no.scala b/test/files/neg/override-object-no.scala
index 745cdb2332..517408886d 100644
--- a/test/files/neg/override-object-no.scala
+++ b/test/files/neg/override-object-no.scala
@@ -43,3 +43,14 @@ package case2 {
override object A extends Bar[List[String]] // err
}
}
+
+// Both overridden and overriding members must be objects, not vals with a module type
+object SI9574 {
+ object Foo
+ object Bar
+ trait A { def x: Foo.type }
+ trait B extends A { def x: Bar.type } // should not compile (SI-9574)
+ trait C extends A { override object x }
+ trait D { object x; def y = x }
+ trait E extends D { override val x: super.x.type = y } // OK but doesn't need object subtyping exception
+}
diff --git a/test/files/neg/partestInvalidFlag.check b/test/files/neg/partestInvalidFlag.check
index 812191dc22..7a54e3aa43 100644
--- a/test/files/neg/partestInvalidFlag.check
+++ b/test/files/neg/partestInvalidFlag.check
@@ -1,4 +1,4 @@
error: bad option: '-badCompilerFlag'
-error: bad options: -badCompilerFlag notAFlag -Yopt:badChoice
-error: flags file may only contain compiler options, found: -badCompilerFlag notAFlag -Yopt:badChoice
+error: bad options: -badCompilerFlag notAFlag -opt:badChoice
+error: flags file may only contain compiler options, found: -badCompilerFlag notAFlag -opt:badChoice
three errors found
diff --git a/test/files/neg/partestInvalidFlag.flags b/test/files/neg/partestInvalidFlag.flags
index 68884532b9..d45fd31809 100644
--- a/test/files/neg/partestInvalidFlag.flags
+++ b/test/files/neg/partestInvalidFlag.flags
@@ -1 +1 @@
--badCompilerFlag notAFlag -Yopt:badChoice
+-badCompilerFlag notAFlag -opt:badChoice
diff --git a/test/files/neg/protected-constructors.check b/test/files/neg/protected-constructors.check
index f44d7db9b9..4f076ec993 100644
--- a/test/files/neg/protected-constructors.check
+++ b/test/files/neg/protected-constructors.check
@@ -1,6 +1,15 @@
-protected-constructors.scala:17: error: too many arguments for constructor Foo1: ()dingus.Foo1
+protected-constructors.scala:15: error: class Foo3 in object Ding cannot be accessed in object dingus.Ding
+ Access to protected class Foo3 not permitted because
+ enclosing object P in package hungus is not a subclass of
+ object Ding in package dingus where target is defined
+ class Bar3 extends Ding.Foo3("abc")
+ ^
+protected-constructors.scala:15: error: no arguments allowed for nullary constructor Object: ()Object
+ class Bar3 extends Ding.Foo3("abc")
+ ^
+protected-constructors.scala:17: error: no arguments allowed for nullary constructor Foo1: ()dingus.Foo1
val foo1 = new Foo1("abc")
- ^
+ ^
protected-constructors.scala:18: error: constructor Foo2 in class Foo2 cannot be accessed in object P
Access to protected constructor Foo2 not permitted because
enclosing object P in package hungus is not a subclass of
@@ -13,10 +22,4 @@ protected-constructors.scala:19: error: class Foo3 in object Ding cannot be acce
object Ding in package dingus where target is defined
val foo3 = new Ding.Foo3("abc")
^
-protected-constructors.scala:15: error: class Foo3 in object Ding cannot be accessed in object dingus.Ding
- Access to protected class Foo3 not permitted because
- enclosing object P in package hungus is not a subclass of
- object Ding in package dingus where target is defined
- class Bar3 extends Ding.Foo3("abc")
- ^
-four errors found
+5 errors found
diff --git a/test/files/neg/sabin2.check b/test/files/neg/sabin2.check
index 8a09361069..aa0e8f734c 100644
--- a/test/files/neg/sabin2.check
+++ b/test/files/neg/sabin2.check
@@ -1,6 +1,6 @@
sabin2.scala:22: error: type mismatch;
found : Test.Base#T
- required: _7.T where val _7: Test.Base
+ required: _5.T where val _5: Test.Base
a.set(b.get()) // Error
^
one error found
diff --git a/test/files/neg/saferJavaConversions.scala b/test/files/neg/saferJavaConversions.scala
index f0611204e6..b70a918404 100644
--- a/test/files/neg/saferJavaConversions.scala
+++ b/test/files/neg/saferJavaConversions.scala
@@ -3,17 +3,17 @@ case class Foo(s: String)
object Test {
def f1 = {
- import scala.collection.JavaConversions._
+ import scala.collection.convert.ImplicitConversions._
val map: Map[Foo, String] = Map(Foo("a") -> "a", Foo("b") -> "b")
val v = map.get("a") // should be a type error, actually returns null
}
def f2 = {
- import scala.collection.convert.wrapAsScala._
+ import scala.collection.convert.ImplicitConversionsToScala._
val map: Map[Foo, String] = Map(Foo("a") -> "a", Foo("b") -> "b")
val v = map.get("a") // now this is a type error
}
def f3 = {
- import scala.collection.convert.wrapAsJava._
+ import scala.collection.convert.ImplicitConversionsToJava._
val map: Map[Foo, String] = Map(Foo("a") -> "a", Foo("b") -> "b")
val v = map.get("a")
}
diff --git a/test/files/neg/sammy_disabled.check b/test/files/neg/sammy_disabled.check
new file mode 100644
index 0000000000..66db9dd5f2
--- /dev/null
+++ b/test/files/neg/sammy_disabled.check
@@ -0,0 +1,4 @@
+sammy_disabled.scala:3: error: missing parameter type
+class C { val f: F = x => "a" }
+ ^
+one error found
diff --git a/test/files/neg/sammy_disabled.flags b/test/files/neg/sammy_disabled.flags
new file mode 100644
index 0000000000..cf42e9f940
--- /dev/null
+++ b/test/files/neg/sammy_disabled.flags
@@ -0,0 +1 @@
+-Xsource:2.11
diff --git a/test/files/neg/sammy_disabled.scala b/test/files/neg/sammy_disabled.scala
new file mode 100644
index 0000000000..12000a3e12
--- /dev/null
+++ b/test/files/neg/sammy_disabled.scala
@@ -0,0 +1,3 @@
+trait F { def apply(x: Int): String }
+
+class C { val f: F = x => "a" }
diff --git a/test/files/neg/sammy_error.check b/test/files/neg/sammy_error.check
new file mode 100644
index 0000000000..f14ac7e3a2
--- /dev/null
+++ b/test/files/neg/sammy_error.check
@@ -0,0 +1,4 @@
+sammy_error.scala:6: error: missing parameter type
+ foo(x => x) // should result in only one error (the second one stemmed from adapting to SAM when the tree was erroneous)
+ ^
+one error found
diff --git a/test/files/neg/sammy_error.scala b/test/files/neg/sammy_error.scala
new file mode 100644
index 0000000000..dbddebf325
--- /dev/null
+++ b/test/files/neg/sammy_error.scala
@@ -0,0 +1,7 @@
+trait F1[A, B] { def apply(a: A): B }
+
+class Test {
+ def foo[A](f1: F1[A, A]) = f1
+
+ foo(x => x) // should result in only one error (the second one stemmed from adapting to SAM when the tree was erroneous)
+}
diff --git a/test/files/neg/sammy_error_exist_no_crash.check b/test/files/neg/sammy_error_exist_no_crash.check
index a0d2237ce0..944b6471fd 100644
--- a/test/files/neg/sammy_error_exist_no_crash.check
+++ b/test/files/neg/sammy_error_exist_no_crash.check
@@ -1,6 +1,4 @@
-sammy_error_exist_no_crash.scala:5: error: Could not derive subclass of F[? >: String]
- (with SAM `def method apply(s: String)Int`)
- based on: ((x$1: String) => x$1.<parseInt: error>).
+sammy_error_exist_no_crash.scala:5: error: value parseInt is not a member of String
bar(_.parseInt)
^
one error found
diff --git a/test/files/neg/sammy_error_exist_no_crash.flags b/test/files/neg/sammy_error_exist_no_crash.flags
deleted file mode 100644
index e1b37447c9..0000000000
--- a/test/files/neg/sammy_error_exist_no_crash.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental \ No newline at end of file
diff --git a/test/files/neg/sammy_error_exist_no_crash.scala b/test/files/neg/sammy_error_exist_no_crash.scala
index da7e47206f..667b4db763 100644
--- a/test/files/neg/sammy_error_exist_no_crash.scala
+++ b/test/files/neg/sammy_error_exist_no_crash.scala
@@ -1,6 +1,6 @@
-abstract class F[T] { def apply(s: T): Int }
+trait F[T] { def apply(s: T): Int }
object NeedsNiceError {
def bar(x: F[_ >: String]) = ???
bar(_.parseInt)
-} \ No newline at end of file
+}
diff --git a/test/files/neg/sammy_expected.check b/test/files/neg/sammy_expected.check
new file mode 100644
index 0000000000..3b76aabdd2
--- /dev/null
+++ b/test/files/neg/sammy_expected.check
@@ -0,0 +1,6 @@
+sammy_expected.scala:4: error: type mismatch;
+ found : String => Int
+ required: F[Object,Int]
+ def wrong: F[Object, Int] = (x: String) => 1
+ ^
+one error found
diff --git a/test/files/neg/sammy_expected.scala b/test/files/neg/sammy_expected.scala
new file mode 100644
index 0000000000..8fc1f66ff7
--- /dev/null
+++ b/test/files/neg/sammy_expected.scala
@@ -0,0 +1,5 @@
+trait F[A, B] { def apply(x: A): B }
+
+class MustMeetExpected {
+ def wrong: F[Object, Int] = (x: String) => 1
+} \ No newline at end of file
diff --git a/test/files/neg/sammy_overload.check b/test/files/neg/sammy_overload.check
new file mode 100644
index 0000000000..87b198f4f0
--- /dev/null
+++ b/test/files/neg/sammy_overload.check
@@ -0,0 +1,7 @@
+sammy_overload.scala:14: error: overloaded method value m with alternatives:
+ (x: ToString)Int <and>
+ (x: Int => String)Int
+ cannot be applied to (Int => Int)
+ O.m(x => x) // error expected: m cannot be applied to Int => Int
+ ^
+one error found
diff --git a/test/files/neg/sammy_overload.scala b/test/files/neg/sammy_overload.scala
new file mode 100644
index 0000000000..548e9d2d2e
--- /dev/null
+++ b/test/files/neg/sammy_overload.scala
@@ -0,0 +1,15 @@
+trait ToString { def convert(x: Int): String }
+
+class ExplicitSamType {
+ object O {
+ def m(x: Int => String): Int = 0 // (1)
+ def m(x: ToString): Int = 1 // (2)
+ }
+
+ O.m((x: Int) => x.toString) // ok, function type takes precedence, because (1) is more specific than (2),
+ // because (1) is as specific as (2): (2) can be applied to a value of type Int => String (well, assuming it's a function literal)
+ // but (2) is not as specific as (1): (1) cannot be applied to a value of type ToString
+
+ O.m(_.toString) // ok: overloading resolution pushes through `Int` as the argument type, so this type checks
+ O.m(x => x) // error expected: m cannot be applied to Int => Int
+}
diff --git a/test/files/neg/sammy_restrictions.check b/test/files/neg/sammy_restrictions.check
index 8cc49f9aa9..0225c61ac1 100644
--- a/test/files/neg/sammy_restrictions.check
+++ b/test/files/neg/sammy_restrictions.check
@@ -1,49 +1,62 @@
-sammy_restrictions.scala:31: error: type mismatch;
+sammy_restrictions.scala:38: error: type mismatch;
found : () => Int
required: NoAbstract
(() => 0) : NoAbstract
^
-sammy_restrictions.scala:32: error: type mismatch;
+sammy_restrictions.scala:39: error: type mismatch;
found : Int => Int
required: TwoAbstract
((x: Int) => 0): TwoAbstract
^
-sammy_restrictions.scala:34: error: class type required but DerivedOneAbstract with OneAbstract found
- ((x: Int) => 0): NonClassType // "class type required". I think we should avoid SAM translation here.
- ^
-sammy_restrictions.scala:35: error: type mismatch;
+sammy_restrictions.scala:40: error: type mismatch;
found : Int => Int
required: NoEmptyConstructor
((x: Int) => 0): NoEmptyConstructor
^
-sammy_restrictions.scala:37: error: type mismatch;
- found : Int => Int
- required: OneEmptySecondaryConstructor
- ((x: Int) => 0): OneEmptySecondaryConstructor // derived class must have an empty *primary* to call.
- ^
-sammy_restrictions.scala:38: error: type mismatch;
+sammy_restrictions.scala:41: error: type mismatch;
found : Int => Int
required: MultipleConstructorLists
((x: Int) => 0): MultipleConstructorLists
^
-sammy_restrictions.scala:39: error: type mismatch;
+sammy_restrictions.scala:42: error: type mismatch;
+ found : Int => Int
+ required: OneEmptySecondaryConstructor
+ ((x: Int) => 0): OneEmptySecondaryConstructor // derived class must have an empty *primary* to call.
+ ^
+sammy_restrictions.scala:43: error: type mismatch;
found : Int => Int
required: MultipleMethodLists
((x: Int) => 0): MultipleMethodLists
^
-sammy_restrictions.scala:40: error: type mismatch;
+sammy_restrictions.scala:44: error: type mismatch;
found : Int => Int
required: ImplicitConstructorParam
((x: Int) => 0): ImplicitConstructorParam
^
-sammy_restrictions.scala:41: error: type mismatch;
+sammy_restrictions.scala:45: error: type mismatch;
found : Int => Int
required: ImplicitMethodParam
((x: Int) => 0): ImplicitMethodParam
^
-sammy_restrictions.scala:44: error: type mismatch;
+sammy_restrictions.scala:46: error: type mismatch;
found : Int => Int
required: PolyMethod
((x: Int) => 0): PolyMethod
^
-10 errors found
+sammy_restrictions.scala:47: error: type mismatch;
+ found : Int => Int
+ required: SelfTp
+ ((x: Int) => 0): SelfTp
+ ^
+sammy_restrictions.scala:48: error: type mismatch;
+ found : Int => Int
+ required: T1 with U1
+ ((x: Int) => 0): T1 with U1
+ ^
+sammy_restrictions.scala:49: error: type mismatch;
+ found : Int => Int
+ required: Test.NonClassTypeRefinement
+ (which expands to) DerivedOneAbstract with OneAbstract
+ ((x: Int) => 0): NonClassTypeRefinement
+ ^
+12 errors found
diff --git a/test/files/neg/sammy_restrictions.scala b/test/files/neg/sammy_restrictions.scala
index d003cfaf36..dee4f1f247 100644
--- a/test/files/neg/sammy_restrictions.scala
+++ b/test/files/neg/sammy_restrictions.scala
@@ -24,22 +24,34 @@ abstract class PolyMethod { def ap[T](a: T): T }
abstract class OneAbstract { def ap(a: Int): Any }
abstract class DerivedOneAbstract extends OneAbstract
+abstract class SelfTp { self: NoAbstract => def ap(a: Int): Any }
+abstract class SelfVar { self => def ap(a: Int): Any }
+
+trait T1 { def t(a: Int): Int }; trait U1
+
object Test {
implicit val s: String = ""
- type NonClassType = DerivedOneAbstract with OneAbstract
+ type NonClassTypeRefinement = DerivedOneAbstract with OneAbstract
+ type NonClassType = DerivedOneAbstract
+ // errors:
(() => 0) : NoAbstract
((x: Int) => 0): TwoAbstract
- ((x: Int) => 0): DerivedOneAbstract // okay
- ((x: Int) => 0): NonClassType // "class type required". I think we should avoid SAM translation here.
((x: Int) => 0): NoEmptyConstructor
- ((x: Int) => 0): OneEmptyConstructor // okay
- ((x: Int) => 0): OneEmptySecondaryConstructor // derived class must have an empty *primary* to call.
((x: Int) => 0): MultipleConstructorLists
+ ((x: Int) => 0): OneEmptySecondaryConstructor // derived class must have an empty *primary* to call.
((x: Int) => 0): MultipleMethodLists
((x: Int) => 0): ImplicitConstructorParam
((x: Int) => 0): ImplicitMethodParam
-
- ((x: Int) => 0): PolyClass[Int] // okay
((x: Int) => 0): PolyMethod
+ ((x: Int) => 0): SelfTp
+ ((x: Int) => 0): T1 with U1
+ ((x: Int) => 0): NonClassTypeRefinement
+
+ // allowed:
+ ((x: Int) => 0): OneEmptyConstructor
+ ((x: Int) => 0): DerivedOneAbstract
+ ((x: Int) => 0): NonClassType // we also allow type aliases in instantiation expressions, if they resolve to a class type
+ ((x: Int) => 0): PolyClass[Int]
+ ((x: Int) => 0): SelfVar
}
diff --git a/test/files/neg/scopes.check b/test/files/neg/scopes.check
index f8e8c3758a..2db9678185 100644
--- a/test/files/neg/scopes.check
+++ b/test/files/neg/scopes.check
@@ -7,7 +7,7 @@ scopes.scala:5: error: x is already defined as value x
scopes.scala:8: error: y is already defined as value y
val y: Float = .0f
^
-scopes.scala:6: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+scopes.scala:6: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
{
^
scopes.scala:11: error: x is already defined as value x
diff --git a/test/files/neg/sd128.check b/test/files/neg/sd128.check
new file mode 100644
index 0000000000..8f6fcb1213
--- /dev/null
+++ b/test/files/neg/sd128.check
@@ -0,0 +1,17 @@
+Test.scala:4: error: class C1 inherits conflicting members:
+ method f in trait A of type ()Int and
+ method f in trait T of type => Int
+(Note: this can be resolved by declaring an override in class C1.)
+class C1 extends A with T // error
+ ^
+Test.scala:5: error: class C2 inherits conflicting members:
+ method f in trait T of type => Int and
+ method f in trait A of type ()Int
+(Note: this can be resolved by declaring an override in class C2.)
+class C2 extends T with A // error
+ ^
+Test.scala:14: error: overriding method f in trait A of type ()Int;
+ method f needs `override' modifier
+ def f() = 9999 // need override modifier
+ ^
+three errors found
diff --git a/test/files/neg/sd128/A.java b/test/files/neg/sd128/A.java
new file mode 100644
index 0000000000..6774deba2e
--- /dev/null
+++ b/test/files/neg/sd128/A.java
@@ -0,0 +1,3 @@
+interface A {
+ default int f() { return -10; }
+}
diff --git a/test/files/neg/sd128/Test.scala b/test/files/neg/sd128/Test.scala
new file mode 100644
index 0000000000..66ca3d0940
--- /dev/null
+++ b/test/files/neg/sd128/Test.scala
@@ -0,0 +1,19 @@
+trait T {
+ def f = 99
+}
+class C1 extends A with T // error
+class C2 extends T with A // error
+
+trait U extends A {
+ override def f = 999
+}
+class D1 extends A with U // OK
+class D2 extends U with A // OK
+
+class E1 extends A {
+ def f() = 9999 // need override modifier
+}
+
+class E2 extends A {
+ override def f() = 9999 // OK
+}
diff --git a/test/files/neg/sealed-final-neg.check b/test/files/neg/sealed-final-neg.check
index 500d23f49a..e135f38f8b 100644
--- a/test/files/neg/sealed-final-neg.check
+++ b/test/files/neg/sealed-final-neg.check
@@ -1,4 +1,9 @@
-sealed-final-neg.scala:41: error: expected class or object definition
-"Due to SI-6142 this emits no warnings, so we'll just break it until that's fixed."
-^
+sealed-final-neg.scala:17: warning: neg1/Foo::bar(I)I is annotated @inline but cannot be inlined: the method is not final and may be overridden.
+ def f = Foo.mkFoo() bar 10
+ ^
+sealed-final-neg.scala:37: warning: neg2/Foo::bar(I)I is annotated @inline but cannot be inlined: the method is not final and may be overridden.
+ def f = Foo.mkFoo() bar 10
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+two warnings found
one error found
diff --git a/test/files/neg/sealed-final-neg.flags b/test/files/neg/sealed-final-neg.flags
index cfabf7a5b4..f2f36c1771 100644
--- a/test/files/neg/sealed-final-neg.flags
+++ b/test/files/neg/sealed-final-neg.flags
@@ -1 +1 @@
--Xfatal-warnings -Yinline-warnings -optimise \ No newline at end of file
+-Xfatal-warnings -opt:l:project -opt-warnings \ No newline at end of file
diff --git a/test/files/neg/sealed-final-neg.scala b/test/files/neg/sealed-final-neg.scala
index bc25330e13..ec3b199819 100644
--- a/test/files/neg/sealed-final-neg.scala
+++ b/test/files/neg/sealed-final-neg.scala
@@ -37,5 +37,3 @@ package neg2 {
def f = Foo.mkFoo() bar 10
}
}
-
-"Due to SI-6142 this emits no warnings, so we'll just break it until that's fixed."
diff --git a/test/files/neg/stmt-expr-discard.check b/test/files/neg/stmt-expr-discard.check
index 1207e6da50..4a80765365 100644
--- a/test/files/neg/stmt-expr-discard.check
+++ b/test/files/neg/stmt-expr-discard.check
@@ -1,7 +1,7 @@
-stmt-expr-discard.scala:3: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+stmt-expr-discard.scala:3: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 2
^
-stmt-expr-discard.scala:4: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+stmt-expr-discard.scala:4: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
- 4
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/t0764.check b/test/files/neg/t0764.check
index 0c7cff1e1e..830278e715 100644
--- a/test/files/neg/t0764.check
+++ b/test/files/neg/t0764.check
@@ -1,5 +1,5 @@
t0764.scala:13: error: type mismatch;
- found : Node{type T = _1.type} where val _1: Node{type T = NextType}
+ found : Node{type T = _2.type} where val _2: Node{type T = NextType}
required: Node{type T = Main.this.AType}
(which expands to) Node{type T = Node{type T = NextType}}
new Main[AType]( (value: AType).prepend )
diff --git a/test/files/neg/t1112.check b/test/files/neg/t1112.check
index 5e3821b153..e6058bf176 100644
--- a/test/files/neg/t1112.check
+++ b/test/files/neg/t1112.check
@@ -1,4 +1,4 @@
-t1112.scala:12: error: too many arguments for method call: (p: Int)(f: => Test.this.Type1)Unit
+t1112.scala:12: error: too many arguments (2) for method call: (p: Int)(f: => Test.this.Type1)Unit
call(0,() => System.out.println("here we are"))
- ^
+ ^
one error found
diff --git a/test/files/neg/t1181.check b/test/files/neg/t1181.check
index 13b73d5381..a9c102853d 100644
--- a/test/files/neg/t1181.check
+++ b/test/files/neg/t1181.check
@@ -1,10 +1,10 @@
-t1181.scala:8: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
- case (Nil, Nil) => map
- ^
t1181.scala:9: error: type mismatch;
found : scala.collection.immutable.Map[Symbol,Symbol]
required: Symbol
_ => buildMap(map.updated(keyList.head, valueList.head), keyList.tail, valueList.tail)
^
+t1181.scala:8: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
+ case (Nil, Nil) => map
+ ^
one warning found
one error found
diff --git a/test/files/neg/t1523.check b/test/files/neg/t1523.check
index d2489f2602..273d0f8cf7 100644
--- a/test/files/neg/t1523.check
+++ b/test/files/neg/t1523.check
@@ -1,4 +1,4 @@
-t1523.scala:4: error: too many arguments for method bug: (x: Any)Any
+t1523.scala:4: error: 25 more arguments than can be applied to method bug: (x: Any)Any
def go() = bug("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a")
- ^
+ ^
one error found
diff --git a/test/files/neg/t1838.check b/test/files/neg/t1838.check
index a476158c7b..af811a3810 100644
--- a/test/files/neg/t1838.check
+++ b/test/files/neg/t1838.check
@@ -1,7 +1,7 @@
-t1838.scala:6: error: `sealed' modifier can be used only for classes
- sealed val v = 0
- ^
t1838.scala:5: error: `sealed' modifier can be used only for classes
sealed def f = 0
^
+t1838.scala:6: error: `sealed' modifier can be used only for classes
+ sealed val v = 0
+ ^
two errors found
diff --git a/test/files/neg/t1960.check b/test/files/neg/t1960.check
index 5238141c4e..bb6d3d3548 100644
--- a/test/files/neg/t1960.check
+++ b/test/files/neg/t1960.check
@@ -1,4 +1,7 @@
-t1960.scala:5: error: parameter 'p' requires field but conflicts with method p in trait TBase
-class Aclass (p: Int) extends TBase { def g() { f(p) } }
- ^
-one error found
+t1960.scala:2: error: parameter 'vr' requires field but conflicts with variable vr in trait T
+class C(vr: Int, vl: Int) extends T { def ref = vr + vl }
+ ^
+t1960.scala:2: error: parameter 'vl' requires field but conflicts with value vl in trait T
+class C(vr: Int, vl: Int) extends T { def ref = vr + vl }
+ ^
+two errors found
diff --git a/test/files/neg/t1960.scala b/test/files/neg/t1960.scala
index 5311940b5a..f4fdb341c6 100644
--- a/test/files/neg/t1960.scala
+++ b/test/files/neg/t1960.scala
@@ -1,5 +1,2 @@
-object ClassFormatErrorExample extends App { new Aclass(1) }
-
-trait TBase { var p:Int = 0; def f(p1: Int) {} }
-
-class Aclass (p: Int) extends TBase { def g() { f(p) } }
+trait T { var vr: Int = 0 ; val vl: Int = 0 }
+class C(vr: Int, vl: Int) extends T { def ref = vr + vl }
diff --git a/test/files/neg/t200.check b/test/files/neg/t200.check
index b6b1a32267..f0c5e77772 100644
--- a/test/files/neg/t200.check
+++ b/test/files/neg/t200.check
@@ -1,5 +1,5 @@
-t200.scala:7: error: method foo is defined twice
- conflicting symbols both originated in file 't200.scala'
+t200.scala:7: error: method foo is defined twice;
+ the conflicting method foo was defined at line 6:7
def foo: Int;
^
one error found
diff --git a/test/files/neg/t2712-1.check b/test/files/neg/t2712-1.check
new file mode 100644
index 0000000000..61e4b6b149
--- /dev/null
+++ b/test/files/neg/t2712-1.check
@@ -0,0 +1,13 @@
+t2712-1.scala:7: error: no type parameters for method foo: (m: M[A])Unit exist so that it can be applied to arguments (test.Two[Int,String])
+ --- because ---
+argument expression's type is not compatible with formal parameter type;
+ found : test.Two[Int,String]
+ required: ?M[?A]
+ def test(ma: Two[Int, String]) = foo(ma) // should fail with -Ypartial-unification *disabled*
+ ^
+t2712-1.scala:7: error: type mismatch;
+ found : test.Two[Int,String]
+ required: M[A]
+ def test(ma: Two[Int, String]) = foo(ma) // should fail with -Ypartial-unification *disabled*
+ ^
+two errors found
diff --git a/test/files/neg/t2712-1.scala b/test/files/neg/t2712-1.scala
new file mode 100644
index 0000000000..f7967d71b6
--- /dev/null
+++ b/test/files/neg/t2712-1.scala
@@ -0,0 +1,8 @@
+package test
+
+trait Two[A, B]
+
+object Test {
+ def foo[M[_], A](m: M[A]) = ()
+ def test(ma: Two[Int, String]) = foo(ma) // should fail with -Ypartial-unification *disabled*
+}
diff --git a/test/files/neg/t2712-2.check b/test/files/neg/t2712-2.check
new file mode 100644
index 0000000000..ea19e33e2c
--- /dev/null
+++ b/test/files/neg/t2712-2.check
@@ -0,0 +1,13 @@
+t2712-2.scala:16: error: type mismatch;
+ found : test.Foo
+ required: test.Two[test.X1,Object]
+Note: test.X2 <: Object (and test.Foo <: test.Two[test.X1,test.X2]), but trait Two is invariant in type B.
+You may wish to define B as +B instead. (SLS 4.5)
+ test1(foo): One[X3] // fails with -Ypartial-unification enabled
+ ^
+t2712-2.scala:16: error: type mismatch;
+ found : test.Two[test.X1,Object]
+ required: test.One[test.X3]
+ test1(foo): One[X3] // fails with -Ypartial-unification enabled
+ ^
+two errors found
diff --git a/test/files/neg/t2712-2.flags b/test/files/neg/t2712-2.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/neg/t2712-2.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/neg/t2712-2.scala b/test/files/neg/t2712-2.scala
new file mode 100644
index 0000000000..85ed523489
--- /dev/null
+++ b/test/files/neg/t2712-2.scala
@@ -0,0 +1,18 @@
+package test
+
+class X1
+class X2
+class X3
+
+trait One[A]
+trait Two[A, B]
+
+class Foo extends Two[X1, X2] with One[X3]
+object Test {
+ def test1[M[_], A](x: M[A]): M[A] = x
+
+ val foo = new Foo
+
+ test1(foo): One[X3] // fails with -Ypartial-unification enabled
+ test1(foo): Two[X1, X2] // fails without -Ypartial-unification
+}
diff --git a/test/files/neg/t2712-3.check b/test/files/neg/t2712-3.check
new file mode 100644
index 0000000000..a84d96bf09
--- /dev/null
+++ b/test/files/neg/t2712-3.check
@@ -0,0 +1,6 @@
+t2712-3.scala:17: error: type mismatch;
+ found : test.One[test.X3]
+ required: test.Two[test.X1,test.X2]
+ test1(foo): Two[X1, X2] // fails without -Ypartial-unification
+ ^
+one error found
diff --git a/test/files/neg/t2712-3.scala b/test/files/neg/t2712-3.scala
new file mode 100644
index 0000000000..85ed523489
--- /dev/null
+++ b/test/files/neg/t2712-3.scala
@@ -0,0 +1,18 @@
+package test
+
+class X1
+class X2
+class X3
+
+trait One[A]
+trait Two[A, B]
+
+class Foo extends Two[X1, X2] with One[X3]
+object Test {
+ def test1[M[_], A](x: M[A]): M[A] = x
+
+ val foo = new Foo
+
+ test1(foo): One[X3] // fails with -Ypartial-unification enabled
+ test1(foo): Two[X1, X2] // fails without -Ypartial-unification
+}
diff --git a/test/files/neg/t2712.flags b/test/files/neg/t2712.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/neg/t2712.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/neg/t2779.check b/test/files/neg/t2779.check
index 0ab4c50d0f..9881d5182c 100644
--- a/test/files/neg/t2779.check
+++ b/test/files/neg/t2779.check
@@ -1,5 +1,5 @@
-t2779.scala:16: error: method f is defined twice
- conflicting symbols both originated in file 't2779.scala'
+t2779.scala:16: error: method f is defined twice;
+ the conflicting method f was defined at line 15:18
override def f = List(M1)
^
one error found
diff --git a/test/files/neg/t278.check b/test/files/neg/t278.check
index 405f7d225c..940b8edcef 100644
--- a/test/files/neg/t278.check
+++ b/test/files/neg/t278.check
@@ -4,8 +4,8 @@ t278.scala:5: error: overloaded method value a with alternatives:
does not take type parameters
println(a[A])
^
-t278.scala:4: error: method a is defined twice
- conflicting symbols both originated in file 't278.scala'
+t278.scala:4: error: method a is defined twice;
+ the conflicting method a was defined at line 3:7
def a = (p:A) => ()
^
two errors found
diff --git a/test/files/neg/t3234.check b/test/files/neg/t3234.check
deleted file mode 100644
index 8f0d624ed9..0000000000
--- a/test/files/neg/t3234.check
+++ /dev/null
@@ -1,6 +0,0 @@
-t3234.scala:17: warning: At the end of the day, could not inline @inline-marked method foo3
- println(foo(42) + foo2(11) + foo3(2))
- ^
-error: No warnings can be incurred under -Xfatal-warnings.
-one warning found
-one error found
diff --git a/test/files/neg/t3234.flags b/test/files/neg/t3234.flags
deleted file mode 100644
index 406231bd96..0000000000
--- a/test/files/neg/t3234.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yinline -Yinline-warnings -Xfatal-warnings -Ybackend:GenASM
diff --git a/test/files/neg/t3871.check b/test/files/neg/t3871.check
index b920357ee6..c9667abfb6 100644
--- a/test/files/neg/t3871.check
+++ b/test/files/neg/t3871.check
@@ -1,5 +1,5 @@
t3871.scala:4: error: variable foo in class Sub2 cannot be accessed in Sub2
- Access to protected method foo not permitted because
+ Access to protected variable foo not permitted because
enclosing class Base is not a subclass of
class Sub2 where target is defined
s.foo = true
diff --git a/test/files/neg/t4158.check b/test/files/neg/t4158.check
index af281c52cd..7bac6558f7 100644
--- a/test/files/neg/t4158.check
+++ b/test/files/neg/t4158.check
@@ -1,7 +1,7 @@
-t4158.scala:3: error: an expression of type Null is ineligible for implicit conversion
- var y = null: Int
- ^
t4158.scala:2: error: an expression of type Null is ineligible for implicit conversion
var x: Int = null
^
+t4158.scala:3: error: an expression of type Null is ineligible for implicit conversion
+ var y = null: Int
+ ^
two errors found
diff --git a/test/files/neg/t4425.flags b/test/files/neg/t4425.flags
deleted file mode 100644
index 1182725e86..0000000000
--- a/test/files/neg/t4425.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize \ No newline at end of file
diff --git a/test/files/neg/t4460a.check b/test/files/neg/t4460a.check
index b711e7acb1..7a7618a114 100644
--- a/test/files/neg/t4460a.check
+++ b/test/files/neg/t4460a.check
@@ -1,4 +1,4 @@
-t4460a.scala:6: error: called constructor's definition must precede calling constructor's definition
+t4460a.scala:6: error: constructor invokes itself
def this() = this() // was binding to Predef.<init> !!
^
one error found
diff --git a/test/files/neg/t4460b.check b/test/files/neg/t4460b.check
index f0e703fd10..9a621dbd5c 100644
--- a/test/files/neg/t4460b.check
+++ b/test/files/neg/t4460b.check
@@ -1,4 +1,4 @@
-t4460b.scala:7: error: called constructor's definition must precede calling constructor's definition
+t4460b.scala:7: error: constructor invokes itself
def this() = this() // was binding to Predef.<init> !!
^
one error found
diff --git a/test/files/neg/t4541.check b/test/files/neg/t4541.check
index 7bd8ff78f9..7ee0cc6414 100644
--- a/test/files/neg/t4541.check
+++ b/test/files/neg/t4541.check
@@ -1,5 +1,5 @@
t4541.scala:11: error: variable data in class Sparse cannot be accessed in Sparse[Int]
- Access to protected method data not permitted because
+ Access to protected variable data not permitted because
prefix type Sparse[Int] does not conform to
class Sparse$mcI$sp where the access take place
that.data
diff --git a/test/files/neg/t4541b.check b/test/files/neg/t4541b.check
index 8a52fd97f4..2aae95f6b9 100644
--- a/test/files/neg/t4541b.check
+++ b/test/files/neg/t4541b.check
@@ -1,5 +1,5 @@
t4541b.scala:13: error: variable data in class SparseArray cannot be accessed in SparseArray[Int]
- Access to protected method data not permitted because
+ Access to protected variable data not permitted because
prefix type SparseArray[Int] does not conform to
class SparseArray$mcI$sp where the access take place
use(that.data.clone)
diff --git a/test/files/neg/t4851.check b/test/files/neg/t4851.check
index d5711a889b..721923e0ba 100644
--- a/test/files/neg/t4851.check
+++ b/test/files/neg/t4851.check
@@ -1,10 +1,10 @@
-S.scala:2: warning: Adaptation of argument list by inserting () has been deprecated: leaky (Object-receiving) target makes this especially dangerous.
+S.scala:2: warning: Adaptation of argument list by inserting () is deprecated: leaky (Object-receiving) target makes this especially dangerous.
signature: J(x: Any): J
given arguments: <none>
after adaptation: new J((): Unit)
val x1 = new J
^
-S.scala:3: warning: Adaptation of argument list by inserting () has been deprecated: leaky (Object-receiving) target makes this especially dangerous.
+S.scala:3: warning: Adaptation of argument list by inserting () is deprecated: leaky (Object-receiving) target makes this especially dangerous.
signature: J(x: Any): J
given arguments: <none>
after adaptation: new J((): Unit)
@@ -17,24 +17,24 @@ S.scala:4: warning: Adapting argument list by creating a 5-tuple: this may not b
val x3 = new J(1, 2, 3, 4, 5)
^
S.scala:6: warning: Adapting argument list by creating a 3-tuple: this may not be what you want.
- signature: Some.apply[A](x: A): Some[A]
+ signature: Some.apply[A](value: A): Some[A]
given arguments: 1, 2, 3
after adaptation: Some((1, 2, 3): (Int, Int, Int))
val y1 = Some(1, 2, 3)
^
S.scala:7: warning: Adapting argument list by creating a 3-tuple: this may not be what you want.
- signature: Some(x: A): Some[A]
+ signature: Some(value: A): Some[A]
given arguments: 1, 2, 3
after adaptation: new Some((1, 2, 3): (Int, Int, Int))
val y2 = new Some(1, 2, 3)
^
-S.scala:9: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
+S.scala:9: warning: Adaptation of argument list by inserting () is deprecated: this is unlikely to be what you want.
signature: J2(x: T): J2[T]
given arguments: <none>
after adaptation: new J2((): Unit)
val z1 = new J2
^
-S.scala:10: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
+S.scala:10: warning: Adaptation of argument list by inserting () is deprecated: this is unlikely to be what you want.
signature: J2(x: T): J2[T]
given arguments: <none>
after adaptation: new J2((): Unit)
diff --git a/test/files/neg/t5148.check b/test/files/neg/t5148.check
index 286ed9e04a..1f58c235ce 100644
--- a/test/files/neg/t5148.check
+++ b/test/files/neg/t5148.check
@@ -1,4 +1,9 @@
error: missing or invalid dependency detected while loading class file 'Imports.class'.
+Could not access term memberHandlers in class scala.tools.nsc.interpreter.IMain,
+because it (or its dependencies) are missing. Check your build definition for
+missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
+A full rebuild may help if 'Imports.class' was compiled against an incompatible version of scala.tools.nsc.interpreter.IMain.
+error: missing or invalid dependency detected while loading class file 'Imports.class'.
Could not access type Wrapper in class scala.tools.nsc.interpreter.IMain.Request,
because it (or its dependencies) are missing. Check your build definition for
missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
@@ -8,4 +13,4 @@ Could not access type Request in class scala.tools.nsc.interpreter.IMain,
because it (or its dependencies) are missing. Check your build definition for
missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
A full rebuild may help if 'Imports.class' was compiled against an incompatible version of scala.tools.nsc.interpreter.IMain.
-two errors found
+three errors found
diff --git a/test/files/neg/t5429.check b/test/files/neg/t5429.check
index 4350696bc8..fb2d9c2e47 100644
--- a/test/files/neg/t5429.check
+++ b/test/files/neg/t5429.check
@@ -134,7 +134,7 @@ t5429.scala:87: error: overriding value value in class A0 of type Any;
lazy value value cannot override a concrete non-lazy value
override lazy val value = 0 // fail (strict over lazy)
^
-t5429.scala:91: error: value oneArg overrides nothing.
+t5429.scala:91: error: lazy value oneArg overrides nothing.
Note: the super classes of class F0 contain the following, non final members named oneArg:
def oneArg(x: String): Any
override lazy val oneArg = 15 // fail
diff --git a/test/files/neg/t5580b.scala b/test/files/neg/t5580b.scala
index 2161da4584..98b493e803 100644
--- a/test/files/neg/t5580b.scala
+++ b/test/files/neg/t5580b.scala
@@ -1,5 +1,5 @@
import scala.collection.mutable.WeakHashMap
-import scala.collection.JavaConversions._
+import scala.collection.JavaConverters._
class bar { }
diff --git a/test/files/neg/t5639b.flags b/test/files/neg/t5639b.flags
new file mode 100644
index 0000000000..90b87663af
--- /dev/null
+++ b/test/files/neg/t5639b.flags
@@ -0,0 +1 @@
+-Xsource:2.11 \ No newline at end of file
diff --git a/test/files/neg/t5761.check b/test/files/neg/t5761.check
index 2d66af26f6..15c0bc7634 100644
--- a/test/files/neg/t5761.check
+++ b/test/files/neg/t5761.check
@@ -13,7 +13,7 @@ Unspecified value parameter x.
t5761.scala:13: error: not found: type Tread
new Tread("sth") { }.run()
^
-t5761.scala:13: error: value run is not a member of AnyRef
+t5761.scala:13: error: value run is not a member of <error>
new Tread("sth") { }.run()
^
5 errors found
diff --git a/test/files/neg/t591.check b/test/files/neg/t591.check
index d33f6d7a2f..c0bade0814 100644
--- a/test/files/neg/t591.check
+++ b/test/files/neg/t591.check
@@ -1,5 +1,5 @@
-t591.scala:38: error: method input_= is defined twice
- conflicting symbols both originated in file 't591.scala'
+t591.scala:40: error: method input_= is defined twice;
+ the conflicting variable input was defined at line 35:18
def input_=(in : Input) = {}
^
one error found
diff --git a/test/files/neg/t591.scala b/test/files/neg/t591.scala
index 0f0b02395c..14fb256a69 100644
--- a/test/files/neg/t591.scala
+++ b/test/files/neg/t591.scala
@@ -35,7 +35,8 @@ trait BaseFlow extends BaseList {
private var input : Input = _;
private var output : Output = _;
+ // the error message is a bit confusing, as it points here,
+ // but the symbol it reports is `input`'s actual setter (the one we synthesized)
def input_=(in : Input) = {}
-
}
}
diff --git a/test/files/neg/t6120.check b/test/files/neg/t6120.check
index f432fde32f..b7a5d8bf17 100644
--- a/test/files/neg/t6120.check
+++ b/test/files/neg/t6120.check
@@ -6,13 +6,13 @@ See the Scaladoc for value scala.language.postfixOps for a discussion
why the feature should be explicitly enabled.
def f = null == null bippy
^
-t6120.scala:5: warning: method bippy in class BooleanOps is deprecated: bobo
+t6120.scala:5: warning: method bippy in class BooleanOps is deprecated (since 2.11.0): bobo
def f = null == null bippy
^
t6120.scala:5: warning: comparing values of types Null and Null using `==' will always yield true
def f = null == null bippy
^
-t6120.scala:6: warning: method bippy in class BooleanOps is deprecated: bobo
+t6120.scala:6: warning: method bippy in class BooleanOps is deprecated (since 2.11.0): bobo
def g = true.bippy
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/t6162-inheritance.check b/test/files/neg/t6162-inheritance.check
index c9f4ddaec1..9b0a8990da 100644
--- a/test/files/neg/t6162-inheritance.check
+++ b/test/files/neg/t6162-inheritance.check
@@ -1,4 +1,4 @@
-usage.scala:3: warning: inheritance from class Foo in package t6126 is deprecated: `Foo` will be made final in a future version.
+usage.scala:3: warning: inheritance from class Foo in package t6126 is deprecated (since 2.10.0): `Foo` will be made final in a future version.
class SubFoo extends Foo
^
usage.scala:5: warning: inheritance from trait T in package t6126 is deprecated
diff --git a/test/files/neg/t6162-overriding.check b/test/files/neg/t6162-overriding.check
index 6bff75d88d..586bfb4b35 100644
--- a/test/files/neg/t6162-overriding.check
+++ b/test/files/neg/t6162-overriding.check
@@ -1,4 +1,4 @@
-t6162-overriding.scala:14: warning: overriding method bar in class Bar is deprecated: `bar` will be made private in a future version.
+t6162-overriding.scala:14: warning: overriding method bar in class Bar is deprecated (since 2.10.0): `bar` will be made private in a future version.
override def bar = 43
^
t6162-overriding.scala:15: warning: overriding method baz in class Bar is deprecated
diff --git a/test/files/neg/t6214.check b/test/files/neg/t6214.check
index 6349a3e71c..9d746351d1 100644
--- a/test/files/neg/t6214.check
+++ b/test/files/neg/t6214.check
@@ -1,4 +1,7 @@
-t6214.scala:5: error: missing parameter type
+t6214.scala:5: error: ambiguous reference to overloaded definition,
+both method m in object Test of type (f: Int => Unit)Int
+and method m in object Test of type (f: String => Unit)Int
+match argument types (Any => Unit)
m { s => case class Foo() }
- ^
+ ^
one error found
diff --git a/test/files/neg/t6289.check b/test/files/neg/t6289.check
index 989932750f..7b2b4b2d32 100644
--- a/test/files/neg/t6289.check
+++ b/test/files/neg/t6289.check
@@ -1,9 +1,3 @@
-#partest java6
-t6289/J.java:2: method does not override or implement a method from a supertype
- @Override public void foo() { }
- ^
-1 error
-#partest !java6
t6289/J.java:2: error: method does not override or implement a method from a supertype
@Override public void foo() { }
^
diff --git a/test/files/neg/t6323a.check b/test/files/neg/t6323a.check
index 261a60ef3c..c4e92d93f0 100644
--- a/test/files/neg/t6323a.check
+++ b/test/files/neg/t6323a.check
@@ -1,10 +1,10 @@
-t6323a.scala:10: materializing requested scala.reflect.type.ClassTag[Test] using `package`.this.materializeClassTag[Test]()
+t6323a.scala:10: materializing requested scala.reflect.type.ClassTag[Test] using scala.reflect.`package`.materializeClassTag[Test]()
val lookAtMe = m.reflect(Test("a",List(5)))
^
-t6323a.scala:11: materializing requested reflect.runtime.universe.type.TypeTag[Test] using `package`.this.materializeTypeTag[Test](scala.reflect.runtime.`package`.universe)
+t6323a.scala:11: materializing requested reflect.runtime.universe.type.TypeTag[Test] using scala.reflect.api.`package`.materializeTypeTag[Test](scala.reflect.runtime.`package`.universe)
val value = u.typeOf[Test]
^
-t6323a.scala:11: `package`.this.materializeTypeTag[Test](scala.reflect.runtime.`package`.universe) is not a valid implicit value for reflect.runtime.universe.TypeTag[Test] because:
+t6323a.scala:11: scala.reflect.api.`package`.materializeTypeTag[Test](scala.reflect.runtime.`package`.universe) is not a valid implicit value for reflect.runtime.universe.TypeTag[Test] because:
failed to typecheck the materialized tag:
cannot create a TypeTag referring to class Test.Test local to the reifee: use WeakTypeTag instead
val value = u.typeOf[Test]
diff --git a/test/files/neg/t6335.check b/test/files/neg/t6335.check
index 1727a05eb2..d118440f75 100644
--- a/test/files/neg/t6335.check
+++ b/test/files/neg/t6335.check
@@ -1,9 +1,9 @@
-t6335.scala:6: error: method Z is defined twice
- conflicting symbols both originated in file 't6335.scala'
+t6335.scala:6: error: method Z is defined twice;
+ the conflicting method Z was defined at line 5:7
implicit class Z[A](val i: A) { def zz = i }
^
-t6335.scala:3: error: method X is defined twice
- conflicting symbols both originated in file 't6335.scala'
+t6335.scala:3: error: method X is defined twice;
+ the conflicting method X was defined at line 2:7
implicit class X(val x: Int) { def xx = x }
^
two errors found
diff --git a/test/files/neg/t6406-regextract.check b/test/files/neg/t6406-regextract.check
index 19425a68b0..41b362f455 100644
--- a/test/files/neg/t6406-regextract.check
+++ b/test/files/neg/t6406-regextract.check
@@ -1,4 +1,4 @@
-t6406-regextract.scala:4: warning: method unapplySeq in class Regex is deprecated: Extracting a match result from anything but a CharSequence or Match is deprecated
+t6406-regextract.scala:4: warning: method unapplySeq in class Regex is deprecated (since 2.11.0): extracting a match result from anything but a CharSequence or Match is deprecated
List(1) collect { case r(i) => i }
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/t6446-additional.check b/test/files/neg/t6446-additional.check
index a87af2f1e5..23df978cd9 100644
--- a/test/files/neg/t6446-additional.check
+++ b/test/files/neg/t6446-additional.check
@@ -10,30 +10,18 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- tailcalls 11 replace tail calls by jumps
- specialize 12 @specialized-driven class and method specialization
- explicitouter 13 this refs to outer pointers
- erasure 14 erase types, add interfaces for traits
- posterasure 15 clean up erased inline classes
- lazyvals 16 allocate bitmaps, translate lazy vals into lazified defs
+ fields 11 synthesize accessors and fields, including bitmaps for la...
+ tailcalls 12 replace tail calls by jumps
+ specialize 13 @specialized-driven class and method specialization
+ explicitouter 14 this refs to outer pointers
+ erasure 15 erase types, add interfaces for traits
+ posterasure 16 clean up erased inline classes
lambdalift 17 move nested functions to top level
constructors 18 move field definitions into constructors
flatten 19 eliminate inner classes
mixin 20 mixin composition
cleanup 21 platform-specific cleanups, generate reflective calls
delambdafy 22 remove lambdas
- icode 23 generate portable intermediate code
-#partest -optimise
- inliner 24 optimization: do inlining
-inlinehandlers 25 optimization: inline exception handlers
- closelim 26 optimization: eliminate uncalled closures
- constopt 27 optimization: optimize null and other constants
- dce 28 optimization: eliminate dead code
- jvm 29 generate JVM bytecode
- ploogin 30 A sample phase that does so many things it's kind of hard...
- terminal 31 the last phase during a compilation run
-#partest !-optimise
- jvm 24 generate JVM bytecode
- ploogin 25 A sample phase that does so many things it's kind of hard...
- terminal 26 the last phase during a compilation run
-#partest
+ jvm 23 generate JVM bytecode
+ ploogin 24 A sample phase that does so many things it's kind of hard...
+ terminal 25 the last phase during a compilation run
diff --git a/test/files/neg/t6446-missing.check b/test/files/neg/t6446-missing.check
index 029c8057c3..c0a8fea140 100644
--- a/test/files/neg/t6446-missing.check
+++ b/test/files/neg/t6446-missing.check
@@ -11,28 +11,17 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- tailcalls 11 replace tail calls by jumps
- specialize 12 @specialized-driven class and method specialization
- explicitouter 13 this refs to outer pointers
- erasure 14 erase types, add interfaces for traits
- posterasure 15 clean up erased inline classes
- lazyvals 16 allocate bitmaps, translate lazy vals into lazified defs
+ fields 11 synthesize accessors and fields, including bitmaps for la...
+ tailcalls 12 replace tail calls by jumps
+ specialize 13 @specialized-driven class and method specialization
+ explicitouter 14 this refs to outer pointers
+ erasure 15 erase types, add interfaces for traits
+ posterasure 16 clean up erased inline classes
lambdalift 17 move nested functions to top level
constructors 18 move field definitions into constructors
flatten 19 eliminate inner classes
mixin 20 mixin composition
cleanup 21 platform-specific cleanups, generate reflective calls
delambdafy 22 remove lambdas
- icode 23 generate portable intermediate code
-#partest !-optimise
- jvm 24 generate JVM bytecode
- terminal 25 the last phase during a compilation run
-#partest -optimise
- inliner 24 optimization: do inlining
-inlinehandlers 25 optimization: inline exception handlers
- closelim 26 optimization: eliminate uncalled closures
- constopt 27 optimization: optimize null and other constants
- dce 28 optimization: eliminate dead code
- jvm 29 generate JVM bytecode
- terminal 30 the last phase during a compilation run
-#partest
+ jvm 23 generate JVM bytecode
+ terminal 24 the last phase during a compilation run
diff --git a/test/files/neg/t6446-show-phases.check b/test/files/neg/t6446-show-phases.check
index 3ae3f96ef2..cf8595db5d 100644
--- a/test/files/neg/t6446-show-phases.check
+++ b/test/files/neg/t6446-show-phases.check
@@ -10,28 +10,17 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- tailcalls 11 replace tail calls by jumps
- specialize 12 @specialized-driven class and method specialization
- explicitouter 13 this refs to outer pointers
- erasure 14 erase types, add interfaces for traits
- posterasure 15 clean up erased inline classes
- lazyvals 16 allocate bitmaps, translate lazy vals into lazified defs
+ fields 11 synthesize accessors and fields, including bitmaps for la...
+ tailcalls 12 replace tail calls by jumps
+ specialize 13 @specialized-driven class and method specialization
+ explicitouter 14 this refs to outer pointers
+ erasure 15 erase types, add interfaces for traits
+ posterasure 16 clean up erased inline classes
lambdalift 17 move nested functions to top level
constructors 18 move field definitions into constructors
flatten 19 eliminate inner classes
mixin 20 mixin composition
cleanup 21 platform-specific cleanups, generate reflective calls
delambdafy 22 remove lambdas
- icode 23 generate portable intermediate code
-#partest !-optimise
- jvm 24 generate JVM bytecode
- terminal 25 the last phase during a compilation run
-#partest -optimise
- inliner 24 optimization: do inlining
-inlinehandlers 25 optimization: inline exception handlers
- closelim 26 optimization: eliminate uncalled closures
- constopt 27 optimization: optimize null and other constants
- dce 28 optimization: eliminate dead code
- jvm 29 generate JVM bytecode
- terminal 30 the last phase during a compilation run
-#partest
+ jvm 23 generate JVM bytecode
+ terminal 24 the last phase during a compilation run
diff --git a/test/files/neg/t6455.flags b/test/files/neg/t6455.flags
deleted file mode 100644
index 112fc720a0..0000000000
--- a/test/files/neg/t6455.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xfuture \ No newline at end of file
diff --git a/test/files/neg/t6455.scala b/test/files/neg/t6455.scala
index ebbb37f1cd..22e4c30fdd 100644
--- a/test/files/neg/t6455.scala
+++ b/test/files/neg/t6455.scala
@@ -1,6 +1,6 @@
object O { def filter(p: Int => Boolean): O.type = this }
class Test {
- // should not compile because we no longer rewrite withFilter => filter under -Xfuture
+ // should not compile because we no longer rewrite withFilter => filter
O.withFilter(f => true)
-} \ No newline at end of file
+}
diff --git a/test/files/neg/t6666.check b/test/files/neg/t6666.check
index 43c8252753..bae948fe56 100644
--- a/test/files/neg/t6666.check
+++ b/test/files/neg/t6666.check
@@ -1,7 +1,7 @@
t6666.scala:23: error: Implementation restriction: access of method x$2 in object O1 from <$anon: Function0>, would require illegal premature access to object O1
F.byname(x)
^
-t6666.scala:30: error: Implementation restriction: access of value x$3 in object O2 from <$anon: Function0>, would require illegal premature access to object O2
+t6666.scala:30: error: Implementation restriction: access of lazy value x$3 in object O2 from <$anon: Function0>, would require illegal premature access to object O2
F.byname(x)
^
t6666.scala:37: error: Implementation restriction: access of method x$4 in object O3 from <$anon: Function0>, would require illegal premature access to object O3
@@ -10,7 +10,7 @@ t6666.scala:37: error: Implementation restriction: access of method x$4 in objec
t6666.scala:50: error: Implementation restriction: access of method x$6 in class C1 from <$anon: Function0>, would require illegal premature access to the unconstructed `this` of class C1
F.byname(x)
^
-t6666.scala:54: error: Implementation restriction: access of value x$7 in class C2 from <$anon: Function0>, would require illegal premature access to the unconstructed `this` of class C2
+t6666.scala:54: error: Implementation restriction: access of lazy value x$7 in class C2 from <$anon: Function0>, would require illegal premature access to the unconstructed `this` of class C2
F.byname(x)
^
t6666.scala:58: error: Implementation restriction: access of method x$8 in class C3 from <$anon: Function0>, would require illegal premature access to the unconstructed `this` of class C3
diff --git a/test/files/neg/t6810.check b/test/files/neg/t6810.check
new file mode 100644
index 0000000000..497ef35070
--- /dev/null
+++ b/test/files/neg/t6810.check
@@ -0,0 +1,28 @@
+t6810.scala:4: error: unclosed character literal
+ val y = '
+ ^
+t6810.scala:5: error: unclosed character literal
+' // but not embedded EOL sequences not represented as escapes
+^
+t6810.scala:9: error: unclosed string literal
+ val Y = "
+ ^
+t6810.scala:10: error: unclosed string literal
+" // obviously not
+^
+t6810.scala:20: error: unclosed quoted identifier
+ val `
+ ^
+t6810.scala:21: error: unclosed quoted identifier
+` = EOL // not raw string literals aka triple-quoted, multiline strings
+^
+t6810.scala:24: error: unclosed character literal
+ val b = '
+ ^
+t6810.scala:25: error: unclosed character literal
+' // CR seen as EOL by scanner
+^
+t6810.scala:24: error: '=' expected but ';' found.
+ val b = '
+^
+9 errors found
diff --git a/test/files/neg/t6810.scala b/test/files/neg/t6810.scala
new file mode 100644
index 0000000000..50c305d70c
--- /dev/null
+++ b/test/files/neg/t6810.scala
@@ -0,0 +1,26 @@
+
+trait t6810 {
+ val x = '\u000A' // char literals accept arbitrary unicode escapes
+ val y = '
+' // but not embedded EOL sequences not represented as escapes
+ val z = '\n' // normally, expect this escape
+
+ val X = "\u000A" // it's the same as ordinary string literals
+ val Y = "
+" // obviously not
+ val Z = "\n" // normally, expect this escape
+
+ val A = """
+""" // which is what these are for
+ val B = s"""
+""" // or the same for interpolated strings
+
+ import scala.compat.Platform.EOL
+ val `\u000A` = EOL // backquoted identifiers are arbitrary string literals
+ val `
+` = EOL // not raw string literals aka triple-quoted, multiline strings
+
+ val a = '\u000D' // similar treatment of CR
+ val b = ' ' // CR seen as EOL by scanner
+ val c = '\r' // traditionally
+}
diff --git a/test/files/neg/t6829.check b/test/files/neg/t6829.check
index 914a1c9260..274094f791 100644
--- a/test/files/neg/t6829.check
+++ b/test/files/neg/t6829.check
@@ -17,32 +17,32 @@ t6829.scala:49: error: not found: value nextState
^
t6829.scala:50: error: type mismatch;
found : s.type (with underlying type Any)
- required: _53.State where val _53: G
+ required: _30.State where val _30: G
val r = rewards(agent).r(s,a,s2)
^
t6829.scala:50: error: type mismatch;
found : a.type (with underlying type Any)
- required: _53.Action where val _53: G
+ required: _30.Action where val _30: G
val r = rewards(agent).r(s,a,s2)
^
t6829.scala:50: error: type mismatch;
found : s2.type (with underlying type Any)
- required: _53.State where val _53: G
+ required: _30.State where val _30: G
val r = rewards(agent).r(s,a,s2)
^
t6829.scala:51: error: type mismatch;
found : s.type (with underlying type Any)
- required: _50.State
+ required: _25.State
agent.learn(s,a,s2,r): G#Agent
^
t6829.scala:51: error: type mismatch;
found : a.type (with underlying type Any)
- required: _50.Action
+ required: _25.Action
agent.learn(s,a,s2,r): G#Agent
^
t6829.scala:51: error: type mismatch;
found : s2.type (with underlying type Any)
- required: _50.State
+ required: _25.State
agent.learn(s,a,s2,r): G#Agent
^
t6829.scala:53: error: not found: value nextState
diff --git a/test/files/neg/t6920.check b/test/files/neg/t6920.check
index ee4eafb83e..d10abff03c 100644
--- a/test/files/neg/t6920.check
+++ b/test/files/neg/t6920.check
@@ -1,6 +1,6 @@
-t6920.scala:9: error: too many arguments for method applyDynamicNamed: (values: Seq[(String, Any)])String
+t6920.scala:9: error: too many arguments (2) for method applyDynamicNamed: (values: Seq[(String, Any)])String
error after rewriting to CompilerError.this.test.applyDynamicNamed("crushTheCompiler")(scala.Tuple2("a", 1), scala.Tuple2("b", 2))
possible cause: maybe a wrong Dynamic method signature?
test.crushTheCompiler(a = 1, b = 2)
- ^
+ ^
one error found
diff --git a/test/files/neg/t7046-2.check b/test/files/neg/t7046-2.check
deleted file mode 100644
index b4efd8b5e9..0000000000
--- a/test/files/neg/t7046-2.check
+++ /dev/null
@@ -1,3 +0,0 @@
-error: knownDirectSubclasses of Foo observed before subclass Bar registered
-error: knownDirectSubclasses of Foo observed before subclass Baz registered
-two errors found
diff --git a/test/files/neg/t7046-2/Macros_1.scala b/test/files/neg/t7046-2/Macros_1.scala
deleted file mode 100644
index 2a5bf82f62..0000000000
--- a/test/files/neg/t7046-2/Macros_1.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox.Context
-
-object Macros {
- def impl[T](c: Context)(implicit ttag: c.WeakTypeTag[T]): c.Expr[List[String]] = {
- import c.universe._;
- val ttpe = ttag.tpe
- val tsym = ttpe.typeSymbol.asClass
- val subclasses = tsym.knownDirectSubclasses.toList.map(_.name.toString)
-
- c.Expr[List[String]](q"$subclasses")
- }
-
- def knownDirectSubclasses[T]: List[String] = macro impl[T]
-}
diff --git a/test/files/neg/t7046-2/Test_2.scala b/test/files/neg/t7046-2/Test_2.scala
deleted file mode 100644
index 18a2ebcbc2..0000000000
--- a/test/files/neg/t7046-2/Test_2.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-object Test extends App {
- def nested: Unit = {
- val subs = Macros.knownDirectSubclasses[Foo]
- assert(subs == List("Bar", "Baz"))
-
- sealed trait Foo
- object Foo {
- trait Bar extends Foo
- trait Baz extends Foo
- }
- }
-
- nested
-}
diff --git a/test/files/neg/t7046.check b/test/files/neg/t7046.check
deleted file mode 100644
index 689520a0aa..0000000000
--- a/test/files/neg/t7046.check
+++ /dev/null
@@ -1,3 +0,0 @@
-error: knownDirectSubclasses of Foo observed before subclass Local registered
-error: knownDirectSubclasses of Foo observed before subclass Riddle registered
-two errors found
diff --git a/test/files/neg/t7046/Macros_1.scala b/test/files/neg/t7046/Macros_1.scala
deleted file mode 100644
index 2a5bf82f62..0000000000
--- a/test/files/neg/t7046/Macros_1.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox.Context
-
-object Macros {
- def impl[T](c: Context)(implicit ttag: c.WeakTypeTag[T]): c.Expr[List[String]] = {
- import c.universe._;
- val ttpe = ttag.tpe
- val tsym = ttpe.typeSymbol.asClass
- val subclasses = tsym.knownDirectSubclasses.toList.map(_.name.toString)
-
- c.Expr[List[String]](q"$subclasses")
- }
-
- def knownDirectSubclasses[T]: List[String] = macro impl[T]
-}
diff --git a/test/files/neg/t7046/Test_2.scala b/test/files/neg/t7046/Test_2.scala
deleted file mode 100644
index fcb3e46a0f..0000000000
--- a/test/files/neg/t7046/Test_2.scala
+++ /dev/null
@@ -1,35 +0,0 @@
-object Test extends App {
- val subs = Macros.knownDirectSubclasses[Foo]
- assert(subs == List("Wibble", "Wobble", "Bar", "Baz"))
-}
-
-sealed trait Foo
-object Foo {
- trait Wibble extends Foo
- case object Wobble extends Foo
-}
-
-trait Bar extends Foo
-
-object Blah {
- type Quux = Foo
-}
-
-import Blah._
-
-trait Baz extends Quux
-
-class Boz[T](t: T)
-class Unrelated extends Boz(Test.subs)
-
-object Enigma {
- locally {
- // local class not seen
- class Local extends Foo
- }
-
- def foo: Unit = {
- // local class not seen
- class Riddle extends Foo
- }
-}
diff --git a/test/files/neg/t712.check b/test/files/neg/t712.check
index 831e943063..3f02b4b294 100644
--- a/test/files/neg/t712.check
+++ b/test/files/neg/t712.check
@@ -1,5 +1,4 @@
-t712.scala:10: error: value self is not a member of B.this.ParentImpl
- Note: implicit method coerce is not applicable here because it comes after the application point and it lacks an explicit result type
+t712.scala:10: error: overloaded method coerce needs result type
implicit def coerce(p : ParentImpl) = p.self;
^
one error found
diff --git a/test/files/neg/t7157.check b/test/files/neg/t7157.check
index 3988460d4b..0b81394946 100644
--- a/test/files/neg/t7157.check
+++ b/test/files/neg/t7157.check
@@ -1,22 +1,22 @@
-Test_2.scala:5: error: too many arguments for macro method m1_0_0: ()Unit
+Test_2.scala:5: error: no arguments allowed for nullary macro method m1_0_0: ()Unit
m1_0_0(1)
- ^
-Test_2.scala:6: error: too many arguments for macro method m1_0_0: ()Unit
+ ^
+Test_2.scala:6: error: no arguments allowed for nullary macro method m1_0_0: ()Unit
m1_0_0(1, 2)
- ^
-Test_2.scala:7: error: too many arguments for macro method m1_0_0: ()Unit
+ ^
+Test_2.scala:7: error: no arguments allowed for nullary macro method m1_0_0: ()Unit
m1_0_0(1, 2, 3)
- ^
+ ^
Test_2.scala:9: error: not enough arguments for macro method m1_1_1: (x: Int)Unit.
Unspecified value parameter x.
m1_1_1()
^
-Test_2.scala:11: error: too many arguments for macro method m1_1_1: (x: Int)Unit
+Test_2.scala:11: error: too many arguments (2) for macro method m1_1_1: (x: Int)Unit
m1_1_1(1, 2)
- ^
-Test_2.scala:12: error: too many arguments for macro method m1_1_1: (x: Int)Unit
+ ^
+Test_2.scala:12: error: too many arguments (3) for macro method m1_1_1: (x: Int)Unit
m1_1_1(1, 2, 3)
- ^
+ ^
Test_2.scala:14: error: not enough arguments for macro method m1_2_2: (x: Int, y: Int)Unit.
Unspecified value parameters x, y.
m1_2_2()
@@ -25,9 +25,9 @@ Test_2.scala:15: error: not enough arguments for macro method m1_2_2: (x: Int, y
Unspecified value parameter y.
m1_2_2(1)
^
-Test_2.scala:17: error: too many arguments for macro method m1_2_2: (x: Int, y: Int)Unit
+Test_2.scala:17: error: too many arguments (3) for macro method m1_2_2: (x: Int, y: Int)Unit
m1_2_2(1, 2, 3)
- ^
+ ^
Test_2.scala:24: error: not enough arguments for macro method m1_1_inf: (x: Int, y: Int*)Unit.
Unspecified value parameters x, y.
m1_1_inf()
@@ -40,25 +40,25 @@ Test_2.scala:30: error: not enough arguments for macro method m1_2_inf: (x: Int,
Unspecified value parameters y, z.
m1_2_inf(1)
^
-Test_2.scala:35: error: too many arguments for macro method m2_0_0: ()Unit
+Test_2.scala:35: error: no arguments allowed for nullary macro method m2_0_0: ()Unit
m2_0_0()(1)
- ^
-Test_2.scala:36: error: too many arguments for macro method m2_0_0: ()Unit
+ ^
+Test_2.scala:36: error: no arguments allowed for nullary macro method m2_0_0: ()Unit
m2_0_0()(1, 2)
- ^
-Test_2.scala:37: error: too many arguments for macro method m2_0_0: ()Unit
+ ^
+Test_2.scala:37: error: no arguments allowed for nullary macro method m2_0_0: ()Unit
m2_0_0()(1, 2, 3)
- ^
+ ^
Test_2.scala:39: error: not enough arguments for macro method m2_1_1: (x: Int)Unit.
Unspecified value parameter x.
m2_1_1()()
^
-Test_2.scala:41: error: too many arguments for macro method m2_1_1: (x: Int)Unit
+Test_2.scala:41: error: too many arguments (2) for macro method m2_1_1: (x: Int)Unit
m2_1_1()(1, 2)
- ^
-Test_2.scala:42: error: too many arguments for macro method m2_1_1: (x: Int)Unit
+ ^
+Test_2.scala:42: error: too many arguments (3) for macro method m2_1_1: (x: Int)Unit
m2_1_1()(1, 2, 3)
- ^
+ ^
Test_2.scala:44: error: not enough arguments for macro method m2_2_2: (x: Int, y: Int)Unit.
Unspecified value parameters x, y.
m2_2_2()()
@@ -67,9 +67,9 @@ Test_2.scala:45: error: not enough arguments for macro method m2_2_2: (x: Int, y
Unspecified value parameter y.
m2_2_2()(1)
^
-Test_2.scala:47: error: too many arguments for macro method m2_2_2: (x: Int, y: Int)Unit
+Test_2.scala:47: error: too many arguments (3) for macro method m2_2_2: (x: Int, y: Int)Unit
m2_2_2()(1, 2, 3)
- ^
+ ^
Test_2.scala:54: error: not enough arguments for macro method m2_1_inf: (x: Int, y: Int*)Unit.
Unspecified value parameters x, y.
m2_1_inf()()
diff --git a/test/files/neg/t7171.check b/test/files/neg/t7171.check
index ecd768afda..2de9151483 100644
--- a/test/files/neg/t7171.check
+++ b/test/files/neg/t7171.check
@@ -1,6 +1,9 @@
t7171.scala:2: warning: The outer reference in this type test cannot be checked at run time.
final case class A()
^
+t7171.scala:9: warning: The outer reference in this type test cannot be checked at run time.
+ case _: A => true; case _ => false
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-one warning found
+two warnings found
one error found
diff --git a/test/files/neg/t7171b.check b/test/files/neg/t7171b.check
index bf695afea7..6b05b6fa63 100644
--- a/test/files/neg/t7171b.check
+++ b/test/files/neg/t7171b.check
@@ -1,6 +1,12 @@
t7171b.scala:2: warning: The outer reference in this type test cannot be checked at run time.
final case class A()
^
+t7171b.scala:8: warning: The outer reference in this type test cannot be checked at run time.
+ case _: A => true; case _ => false
+ ^
+t7171b.scala:13: warning: The outer reference in this type test cannot be checked at run time.
+ case _: A => true; case _ => false
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-one warning found
+three warnings found
one error found
diff --git a/test/files/neg/t7187.check b/test/files/neg/t7187.check
new file mode 100644
index 0000000000..a30803c746
--- /dev/null
+++ b/test/files/neg/t7187.check
@@ -0,0 +1,6 @@
+t7187.scala:3: warning: Eta-expansion of zero-argument method values is deprecated. Did you intend to write EtaExpandZeroArg.this.foo()?
+ val f: () => Any = foo
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/t7187.flags b/test/files/neg/t7187.flags
new file mode 100644
index 0000000000..c6bfaf1f64
--- /dev/null
+++ b/test/files/neg/t7187.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings
diff --git a/test/files/neg/t7187.scala b/test/files/neg/t7187.scala
new file mode 100644
index 0000000000..45d33f06af
--- /dev/null
+++ b/test/files/neg/t7187.scala
@@ -0,0 +1,6 @@
+class EtaExpandZeroArg {
+ def foo(): () => String = () => ""
+ val f: () => Any = foo
+
+ // f() would evaluate to <function0> instead of ""
+}
diff --git a/test/files/neg/t7294.check b/test/files/neg/t7294.check
index f15289c1c0..a308f2457d 100644
--- a/test/files/neg/t7294.check
+++ b/test/files/neg/t7294.check
@@ -1,6 +1,10 @@
t7294.scala:4: warning: fruitless type test: a value of type (Int, Int) cannot also be a Seq[A]
(1, 2) match { case Seq() => 0; case _ => 1 }
^
-error: No warnings can be incurred under -Xfatal-warnings.
+t7294.scala:4: error: pattern type is incompatible with expected type;
+ found : Seq[A]
+ required: (Int, Int)
+ (1, 2) match { case Seq() => 0; case _ => 1 }
+ ^
one warning found
one error found
diff --git a/test/files/neg/t7294.flags b/test/files/neg/t7294.flags
deleted file mode 100644
index 3f3381a45b..0000000000
--- a/test/files/neg/t7294.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xfuture -Xfatal-warnings
diff --git a/test/files/neg/t7294b.check b/test/files/neg/t7294b.check
index 0033b72125..3390cb7278 100644
--- a/test/files/neg/t7294b.check
+++ b/test/files/neg/t7294b.check
@@ -1,6 +1,4 @@
-t7294b.scala:1: warning: inheritance from class Tuple2 in package scala is deprecated: Tuples will be made final in a future version.
+t7294b.scala:1: error: illegal inheritance from final class Tuple2
class C extends Tuple2[Int, Int](0, 0)
^
-error: No warnings can be incurred under -Xfatal-warnings.
-one warning found
one error found
diff --git a/test/files/neg/t7294b.flags b/test/files/neg/t7294b.flags
deleted file mode 100644
index d1b831ea87..0000000000
--- a/test/files/neg/t7294b.flags
+++ /dev/null
@@ -1 +0,0 @@
--deprecation -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/t7494-no-options.check b/test/files/neg/t7494-no-options.check
index e3316f590a..138d2fe9a3 100644
--- a/test/files/neg/t7494-no-options.check
+++ b/test/files/neg/t7494-no-options.check
@@ -11,30 +11,18 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- tailcalls 11 replace tail calls by jumps
- specialize 12 @specialized-driven class and method specialization
- explicitouter 13 this refs to outer pointers
- erasure 14 erase types, add interfaces for traits
- posterasure 15 clean up erased inline classes
- lazyvals 16 allocate bitmaps, translate lazy vals into lazified defs
+ fields 11 synthesize accessors and fields, including bitmaps for la...
+ tailcalls 12 replace tail calls by jumps
+ specialize 13 @specialized-driven class and method specialization
+ explicitouter 14 this refs to outer pointers
+ erasure 15 erase types, add interfaces for traits
+ posterasure 16 clean up erased inline classes
lambdalift 17 move nested functions to top level
constructors 18 move field definitions into constructors
flatten 19 eliminate inner classes
mixin 20 mixin composition
cleanup 21 platform-specific cleanups, generate reflective calls
delambdafy 22 remove lambdas
- icode 23 generate portable intermediate code
-#partest !-optimise
- jvm 24 generate JVM bytecode
- ploogin 25 A sample phase that does so many things it's kind of hard...
- terminal 26 the last phase during a compilation run
-#partest -optimise
- inliner 24 optimization: do inlining
-inlinehandlers 25 optimization: inline exception handlers
- closelim 26 optimization: eliminate uncalled closures
- constopt 27 optimization: optimize null and other constants
- dce 28 optimization: eliminate dead code
- jvm 29 generate JVM bytecode
- ploogin 30 A sample phase that does so many things it's kind of hard...
- terminal 31 the last phase during a compilation run
-#partest
+ jvm 23 generate JVM bytecode
+ ploogin 24 A sample phase that does so many things it's kind of hard...
+ terminal 25 the last phase during a compilation run
diff --git a/test/files/neg/t7602.check b/test/files/neg/t7602.check
index 5bb1450d7d..5ce3776790 100644
--- a/test/files/neg/t7602.check
+++ b/test/files/neg/t7602.check
@@ -1,5 +1,5 @@
-t7602.scala:16: error: method foo is defined twice
- conflicting symbols both originated in file 't7602.scala'
+t7602.scala:16: error: method foo is defined twice;
+ the conflicting method foo was defined at line 15:7
def foo : Device
^
one error found
diff --git a/test/files/neg/t7622-cyclic-dependency.check b/test/files/neg/t7622-cyclic-dependency.check
index 3546964f5f..81e3ecc6a4 100644
--- a/test/files/neg/t7622-cyclic-dependency.check
+++ b/test/files/neg/t7622-cyclic-dependency.check
@@ -1 +1 @@
-error: Cycle in phase dependencies detected at cyclicdependency1, created phase-cycle.dot
+error: Cycle in phase dependencies detected at cyclicdependency2, created phase-cycle.dot
diff --git a/test/files/neg/t7622-cyclic-dependency/ThePlugin.scala b/test/files/neg/t7622-cyclic-dependency/ThePlugin.scala
index 35c0ff8f53..0734863e64 100644
--- a/test/files/neg/t7622-cyclic-dependency/ThePlugin.scala
+++ b/test/files/neg/t7622-cyclic-dependency/ThePlugin.scala
@@ -26,7 +26,7 @@ class ThePlugin(val global: Global) extends Plugin {
private object thePhase2 extends PluginComponent {
val global = ThePlugin.this.global
- val runsAfter = List[String]("dce","cyclicdependency1")
+ val runsAfter = List[String]("jvm","cyclicdependency1")
val phaseName = ThePlugin.this.name + "2"
diff --git a/test/files/neg/t7848-interp-warn.check b/test/files/neg/t7848-interp-warn.check
index 637fc8941a..cc94cc81de 100644
--- a/test/files/neg/t7848-interp-warn.check
+++ b/test/files/neg/t7848-interp-warn.check
@@ -1,15 +1,27 @@
-t7848-interp-warn.scala:8: warning: possible missing interpolator: detected interpolated identifier `$foo`
- "An important $foo message!"
+t7848-interp-warn.scala:18: warning: possible missing interpolator: detected interpolated identifier `$foo`
+ "An important $foo message!" // warn on ident in scope
^
-t7848-interp-warn.scala:12: warning: possible missing interpolator: detected an interpolated expression
- "A doubly important ${foo * 2} message!"
+t7848-interp-warn.scala:22: warning: possible missing interpolator: detected an interpolated expression
+ "A doubly important ${foo * 2} message!" // warn on some expr, see below
^
-t7848-interp-warn.scala:15: warning: possible missing interpolator: detected interpolated identifier `$bar`
- def i = s"Try using '${ "$bar" }' instead." // was: no warn on space test
+t7848-interp-warn.scala:25: warning: possible missing interpolator: detected interpolated identifier `$bar`
+ def i = s"Try using '${ "$bar" }' instead." // was: no warn on space test
^
-t7848-interp-warn.scala:16: warning: possible missing interpolator: detected interpolated identifier `$bar`
+t7848-interp-warn.scala:26: warning: possible missing interpolator: detected interpolated identifier `$bar`
def j = s"Try using '${ "something like $bar" }' instead." // warn
^
+t7848-interp-warn.scala:32: warning: possible missing interpolator: detected an interpolated expression
+ def v = "${baz}${bar}" // warn on second expr
+ ^
+t7848-interp-warn.scala:33: warning: possible missing interpolator: detected an interpolated expression
+ def w = "${ op_* }" // warn, only cheap ident parsing
+ ^
+t7848-interp-warn.scala:34: warning: possible missing interpolator: detected an interpolated expression
+ def x = "${ bar }" // warn, a cheap ident in scope
+ ^
+t7848-interp-warn.scala:36: warning: possible missing interpolator: detected an interpolated expression
+ def z = "${ baz * 3}" // warn, no expr parsing
+ ^
error: No warnings can be incurred under -Xfatal-warnings.
-four warnings found
+8 warnings found
one error found
diff --git a/test/files/neg/t7848-interp-warn.scala b/test/files/neg/t7848-interp-warn.scala
index a76141041d..ceaf6c7d67 100644
--- a/test/files/neg/t7848-interp-warn.scala
+++ b/test/files/neg/t7848-interp-warn.scala
@@ -1,18 +1,37 @@
package test
+package pancake { }
+
object Test {
+ type NonVal = Int
+
+ def ok = "Don't warn on $nosymbol interpolated."
+
+ def pass = "Don't warn on $pancake package names."
+
+ def types = "Or $NonVal type symbols either."
+
def bar = "bar"
def f = {
val foo = "bar"
- "An important $foo message!"
+ "An important $foo message!" // warn on ident in scope
}
def g = {
val foo = "bar"
- "A doubly important ${foo * 2} message!"
+ "A doubly important ${foo * 2} message!" // warn on some expr, see below
}
- def h = s"Try using '$$bar' instead." // no warn
- def i = s"Try using '${ "$bar" }' instead." // was: no warn on space test
+ def h = s"Try using '$$bar' instead." // no warn
+ def i = s"Try using '${ "$bar" }' instead." // was: no warn on space test
def j = s"Try using '${ "something like $bar" }' instead." // warn
- def k = f"Try using '$bar' instead." // no warn on other std interps
+ def k = f"Try using '$bar' instead." // no warn on other std interps
+ def p = "Template ${} {}" // no warn on unlikely or empty expressions
+ def q = "${}$bar" // disables subsequent checks! (a feature)
+ def r = "${}${bar}" // disables subsequent checks! (a feature)
+
+ def v = "${baz}${bar}" // warn on second expr
+ def w = "${ op_* }" // warn, only cheap ident parsing
+ def x = "${ bar }" // warn, a cheap ident in scope
+ def y = "${ baz }" // no warn, cheap ident not in scope
+ def z = "${ baz * 3}" // warn, no expr parsing
}
diff --git a/test/files/neg/t800.check b/test/files/neg/t800.check
index 8ba95fddde..238b8dd27d 100644
--- a/test/files/neg/t800.check
+++ b/test/files/neg/t800.check
@@ -1,16 +1,16 @@
t800.scala:4: error: qualification is already defined as value qualification
val qualification = false;
^
-t800.scala:8: error: method qualification is defined twice
- conflicting symbols both originated in file 't800.scala'
+t800.scala:8: error: value qualification is defined twice;
+ the conflicting variable qualification was defined at line 7:7
val qualification = false;
^
-t800.scala:12: error: value qualification is defined twice
- conflicting symbols both originated in file 't800.scala'
+t800.scala:12: error: variable qualification is defined twice;
+ the conflicting value qualification was defined at line 11:7
var qualification = false;
^
-t800.scala:16: error: method qualification is defined twice
- conflicting symbols both originated in file 't800.scala'
+t800.scala:16: error: variable qualification is defined twice;
+ the conflicting variable qualification was defined at line 15:7
var qualification = false;
^
four errors found
diff --git a/test/files/neg/t8006.check b/test/files/neg/t8006.check
index fbac26e3ad..6152d0fba3 100644
--- a/test/files/neg/t8006.check
+++ b/test/files/neg/t8006.check
@@ -1,6 +1,6 @@
-t8006.scala:3: error: too many arguments for method applyDynamicNamed: (value: (String, Any))String
+t8006.scala:3: error: too many arguments (2) for method applyDynamicNamed: (value: (String, Any))String
error after rewriting to X.this.d.applyDynamicNamed("meth")(scala.Tuple2("value1", 10), scala.Tuple2("value2", 100))
possible cause: maybe a wrong Dynamic method signature?
d.meth(value1 = 10, value2 = 100) // two arguments here, but only one is allowed
- ^
+ ^
one error found
diff --git a/test/files/neg/t8035-deprecated.check b/test/files/neg/t8035-deprecated.check
index 01f27e5310..35aba5551d 100644
--- a/test/files/neg/t8035-deprecated.check
+++ b/test/files/neg/t8035-deprecated.check
@@ -1,16 +1,16 @@
-t8035-deprecated.scala:2: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
+t8035-deprecated.scala:2: warning: Adaptation of argument list by inserting () is deprecated: this is unlikely to be what you want.
signature: GenSetLike.apply(elem: A): Boolean
given arguments: <none>
after adaptation: GenSetLike((): Unit)
List(1,2,3).toSet()
^
-t8035-deprecated.scala:5: warning: Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want.
+t8035-deprecated.scala:5: warning: Adaptation of argument list by inserting () is deprecated: this is unlikely to be what you want.
signature: A(x: T): Foo.A[T]
given arguments: <none>
after adaptation: new A((): Unit)
new A
^
-t8035-deprecated.scala:9: warning: Adaptation of argument list by inserting () has been deprecated: leaky (Object-receiving) target makes this especially dangerous.
+t8035-deprecated.scala:9: warning: Adaptation of argument list by inserting () is deprecated: leaky (Object-receiving) target makes this especially dangerous.
signature: Format.format(x$1: Any): String
given arguments: <none>
after adaptation: Format.format((): Unit)
diff --git a/test/files/neg/t8035-no-adapted-args.check b/test/files/neg/t8035-no-adapted-args.check
index 43637b2c1f..0115dddc91 100644
--- a/test/files/neg/t8035-no-adapted-args.check
+++ b/test/files/neg/t8035-no-adapted-args.check
@@ -4,9 +4,9 @@ t8035-no-adapted-args.scala:4: warning: No automatic adaptation here: use explic
after adaptation: Test.f((1, 2, 3): (Int, Int, Int))
f(1, 2, 3)
^
-t8035-no-adapted-args.scala:4: error: too many arguments for method f: (x: (Int, Int, Int))Int
+t8035-no-adapted-args.scala:4: error: too many arguments (3) for method f: (x: (Int, Int, Int))Int
f(1, 2, 3)
- ^
+ ^
t8035-no-adapted-args.scala:5: warning: No automatic adaptation here: use explicit parentheses.
signature: Test.f[T](x: T): Int
given arguments: <none>
diff --git a/test/files/neg/t8044-b.check b/test/files/neg/t8044-b.check
new file mode 100644
index 0000000000..4a93e9a772
--- /dev/null
+++ b/test/files/neg/t8044-b.check
@@ -0,0 +1,4 @@
+t8044-b.scala:3: error: Pattern variables must start with a lower-case letter. (SLS 8.1.1.)
+ def g = 42 match { case `Oops` : Int => } // must be varish
+ ^
+one error found
diff --git a/test/files/neg/t8044-b.scala b/test/files/neg/t8044-b.scala
new file mode 100644
index 0000000000..fb2e921ac9
--- /dev/null
+++ b/test/files/neg/t8044-b.scala
@@ -0,0 +1,4 @@
+
+trait T {
+ def g = 42 match { case `Oops` : Int => } // must be varish
+}
diff --git a/test/files/neg/t8044.check b/test/files/neg/t8044.check
new file mode 100644
index 0000000000..678bf8c700
--- /dev/null
+++ b/test/files/neg/t8044.check
@@ -0,0 +1,4 @@
+t8044.scala:3: error: not found: value _
+ def f = 42 match { case `_` : Int => `_` } // doesn't leak quoted underscore
+ ^
+one error found
diff --git a/test/files/neg/t8044.scala b/test/files/neg/t8044.scala
new file mode 100644
index 0000000000..930c30c5a5
--- /dev/null
+++ b/test/files/neg/t8044.scala
@@ -0,0 +1,4 @@
+
+trait T {
+ def f = 42 match { case `_` : Int => `_` } // doesn't leak quoted underscore
+}
diff --git a/test/files/neg/t8079a.check b/test/files/neg/t8079a.check
new file mode 100644
index 0000000000..6bbe78afa6
--- /dev/null
+++ b/test/files/neg/t8079a.check
@@ -0,0 +1,4 @@
+t8079a.scala:3: error: contravariant type I occurs in covariant position in type C.this.X of value b
+ def f2(b: X): Unit
+ ^
+one error found
diff --git a/test/files/neg/t8079a.scala b/test/files/neg/t8079a.scala
new file mode 100644
index 0000000000..4997ea282e
--- /dev/null
+++ b/test/files/neg/t8079a.scala
@@ -0,0 +1,4 @@
+trait C[-I] {
+ private[this] type X = C[I]
+ def f2(b: X): Unit
+}
diff --git a/test/files/neg/t8217-local-alias-requires-rhs.check b/test/files/neg/t8217-local-alias-requires-rhs.check
index 0d4f0864ba..d970400ff6 100644
--- a/test/files/neg/t8217-local-alias-requires-rhs.check
+++ b/test/files/neg/t8217-local-alias-requires-rhs.check
@@ -1,9 +1,9 @@
-t8217-local-alias-requires-rhs.scala:6: error: only classes can have declared but undefined members
- type B
- ^
t8217-local-alias-requires-rhs.scala:3: error: only classes can have declared but undefined members
type A
^
+t8217-local-alias-requires-rhs.scala:6: error: only classes can have declared but undefined members
+ type B
+ ^
t8217-local-alias-requires-rhs.scala:14: error: only classes can have declared but undefined members
def this(a: Any) = { this(); type C }
^
diff --git a/test/files/neg/t8667.check b/test/files/neg/t8667.check
new file mode 100644
index 0000000000..82451ee5d6
--- /dev/null
+++ b/test/files/neg/t8667.check
@@ -0,0 +1,91 @@
+t8667.scala:6: error: too many arguments (3) for constructor C: (a: Int, b: Int)C
+Note that 'c' is not a parameter name of the invoked method.
+ def c2 = new C(a = 42, b = 17, c = 5)
+ ^
+t8667.scala:7: error: unknown parameter name: c
+ def c3 = new C(b = 42, a = 17, c = 5)
+ ^
+t8667.scala:7: error: too many arguments (3) for constructor C: (a: Int, b: Int)C
+ def c3 = new C(b = 42, a = 17, c = 5)
+ ^
+t8667.scala:8: error: positional after named argument.
+ def c4 = new C(b = 42, a = 17, 5)
+ ^
+t8667.scala:8: error: too many arguments (3) for constructor C: (a: Int, b: Int)C
+ def c4 = new C(b = 42, a = 17, 5)
+ ^
+t8667.scala:9: error: not found: value c
+ def c5 = new C(a = 42, c = 17)
+ ^
+t8667.scala:10: error: parameter 'b' is already specified at parameter position 2
+Note that 'c' is not a parameter name of the invoked method.
+ def c6 = new C(a = 42, c = 17, b = 5)
+ ^
+t8667.scala:10: error: too many arguments (3) for constructor C: (a: Int, b: Int)C
+Note that 'c' is not a parameter name of the invoked method.
+ def c6 = new C(a = 42, c = 17, b = 5)
+ ^
+t8667.scala:11: error: parameter 'a' is already specified at parameter position 1
+Note that 'c' is not a parameter name of the invoked method.
+ def c7 = new C(c = 42, a = 17, b = 5)
+ ^
+t8667.scala:11: error: too many arguments (3) for constructor C: (a: Int, b: Int)C
+Note that 'c' is not a parameter name of the invoked method.
+ def c7 = new C(c = 42, a = 17, b = 5)
+ ^
+t8667.scala:12: error: parameter 'b' is already specified at parameter position 2
+ def c8 = new C(42, 17, b = 5)
+ ^
+t8667.scala:12: error: too many arguments (3) for constructor C: (a: Int, b: Int)C
+ def c8 = new C(42, 17, b = 5)
+ ^
+t8667.scala:13: error: parameter 'b' is already specified at parameter position 2
+Note that 'c' is not a parameter name of the invoked method.
+ def c9 = new C(a = 42, c = 17, d = 3, b = 5)
+ ^
+t8667.scala:13: error: too many arguments (4) for constructor C: (a: Int, b: Int)C
+Note that 'c', 'd' are not parameter names of the invoked method.
+ def c9 = new C(a = 42, c = 17, d = 3, b = 5)
+ ^
+t8667.scala:14: error: too many arguments (4) for constructor C: (a: Int, b: Int)C
+Note that 'd', 'c' are not parameter names of the invoked method.
+ def c0 = new C(42, 17, d = 3, c = 5)
+ ^
+t8667.scala:25: error: no arguments allowed for nullary method f0: ()Int
+ f0(1)
+ ^
+t8667.scala:26: error: too many arguments (2) for method f1: (i: Int)Int
+ f1(1, 2)
+ ^
+t8667.scala:27: error: too many arguments (3) for method f1: (i: Int)Int
+ f1(1, 2, 3)
+ ^
+t8667.scala:28: error: 3 more arguments than can be applied to method f1: (i: Int)Int
+ f1(1, 2, 3, 4)
+ ^
+t8667.scala:29: error: 3 more arguments than can be applied to method f1: (i: Int)Int
+Note that 'j' is not a parameter name of the invoked method.
+ f1(1, j = 2, 3, 4)
+ ^
+t8667.scala:30: error: 3 more arguments than can be applied to method f1: (i: Int)Int
+Note that 'j', 'k' are not parameter names of the invoked method.
+ f1(1, j = 2, k = 3, 4)
+ ^
+t8667.scala:31: error: parameter 'i' is already specified at parameter position 1
+Note that 'k' is not a parameter name of the invoked method.
+ f2(k = 1, i = 2, j = 3)
+ ^
+t8667.scala:31: error: too many arguments (3) for method f2: (i: Int, j: Int)Int
+Note that 'k' is not a parameter name of the invoked method.
+ f2(k = 1, i = 2, j = 3)
+ ^
+t8667.scala:32: error: one more argument than can be applied to method f6: (i: Int, j: Int, k: Int, l: Int, m: Int, n: Int)Int
+ f6(1, 2, 3, 4, 5, 6, 7)
+ ^
+t8667.scala:33: error: 2 more arguments than can be applied to method f6: (i: Int, j: Int, k: Int, l: Int, m: Int, n: Int)Int
+ f6(1, 2, 3, 4, 5, 6, 7, 8)
+ ^
+t8667.scala:34: error: 15 arguments but expected 12 for method f12: (i: Int, j: Int, k: Int, l: Int, m: Int, n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int)Int
+ f12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
+ ^
+26 errors found
diff --git a/test/files/neg/t8667.scala b/test/files/neg/t8667.scala
new file mode 100644
index 0000000000..d55582ca6b
--- /dev/null
+++ b/test/files/neg/t8667.scala
@@ -0,0 +1,37 @@
+
+class C(a: Int, b: Int)
+
+trait T {
+ def c1 = new C(a = 42, b = 17)
+ def c2 = new C(a = 42, b = 17, c = 5)
+ def c3 = new C(b = 42, a = 17, c = 5)
+ def c4 = new C(b = 42, a = 17, 5)
+ def c5 = new C(a = 42, c = 17)
+ def c6 = new C(a = 42, c = 17, b = 5)
+ def c7 = new C(c = 42, a = 17, b = 5)
+ def c8 = new C(42, 17, b = 5)
+ def c9 = new C(a = 42, c = 17, d = 3, b = 5)
+ def c0 = new C(42, 17, d = 3, c = 5)
+}
+
+trait X {
+ def f0() = 42
+ def f1(i: Int) = 42
+ def f2(i: Int, j: Int) = 42
+ def f6(i: Int, j: Int, k: Int, l: Int, m: Int, n: Int) = 42
+ def f12(i: Int, j: Int, k: Int, l: Int, m: Int, n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int) = 42
+
+ def g() = {
+ f0(1)
+ f1(1, 2)
+ f1(1, 2, 3)
+ f1(1, 2, 3, 4)
+ f1(1, j = 2, 3, 4)
+ f1(1, j = 2, k = 3, 4)
+ f2(k = 1, i = 2, j = 3)
+ f6(1, 2, 3, 4, 5, 6, 7)
+ f6(1, 2, 3, 4, 5, 6, 7, 8)
+ f12(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
+ ()
+ }
+}
diff --git a/test/files/neg/t8685.check b/test/files/neg/t8685.check
new file mode 100644
index 0000000000..685fd2e951
--- /dev/null
+++ b/test/files/neg/t8685.check
@@ -0,0 +1,45 @@
+t8685.scala:6: warning: constructor D in class D is deprecated (since now): ctor D is depr
+case class D @deprecated("ctor D is depr", since="now") (i: Int)
+ ^
+t8685.scala:35: warning: class C is deprecated (since now): class C is depr
+ def f = C(42)
+ ^
+t8685.scala:37: warning: object E is deprecated (since now): module E is depr
+ def h = E(42)
+ ^
+t8685.scala:37: warning: class E is deprecated (since now): class E is depr
+ def h = E(42)
+ ^
+t8685.scala:38: warning: object F is deprecated (since now): module F is depr
+ def i = F.G(42)
+ ^
+t8685.scala:39: warning: object F in object Extra is deprecated (since now): Extra module F is depr
+ def j = Extra.F.G(42)
+ ^
+t8685.scala:43: warning: value gg in trait Applies is deprecated (since now): member gg
+ def k = this.gg.H(0)
+ ^
+t8685.scala:45: warning: class K in object J is deprecated (since now): Inner K is depr
+ def l = J.K(42)
+ ^
+t8685.scala:48: warning: class C is deprecated (since now): class C is depr
+ def f = new C(42)
+ ^
+t8685.scala:49: warning: constructor D in class D is deprecated (since now): ctor D is depr
+ def g = new D(42)
+ ^
+t8685.scala:50: warning: class E is deprecated (since now): class E is depr
+ def h = new E(42)
+ ^
+t8685.scala:51: warning: object F is deprecated (since now): module F is depr
+ def i = new F.G(42)
+ ^
+t8685.scala:52: warning: object F in object Extra is deprecated (since now): Extra module F is depr
+ def j = new Extra.F.G(42)
+ ^
+t8685.scala:53: warning: class K in object J is deprecated (since now): Inner K is depr
+ def l = new J.K(42)
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+14 warnings found
+one error found
diff --git a/test/files/neg/t8685.flags b/test/files/neg/t8685.flags
new file mode 100644
index 0000000000..c6bfaf1f64
--- /dev/null
+++ b/test/files/neg/t8685.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings
diff --git a/test/files/neg/t8685.scala b/test/files/neg/t8685.scala
new file mode 100644
index 0000000000..711680ecbd
--- /dev/null
+++ b/test/files/neg/t8685.scala
@@ -0,0 +1,54 @@
+
+
+@deprecated("class C is depr", since="now")
+case class C(i: Int)
+
+case class D @deprecated("ctor D is depr", since="now") (i: Int)
+
+@deprecated("class E is depr", since="now")
+case class E(i: Int)
+@deprecated("module E is depr", since="now")
+object E
+
+@deprecated("module F is depr", since="now")
+object F {
+ case class G(i: Int)
+}
+
+object G {
+ case class H(i: Int)
+}
+
+object Extra {
+ @deprecated("Extra module F is depr", since="now")
+ object F {
+ case class G(i: Int)
+ }
+}
+
+object J {
+ @deprecated("Inner K is depr", since="now")
+ case class K(i: Int)
+}
+
+trait Applies {
+ def f = C(42)
+ def g = D(42)
+ def h = E(42)
+ def i = F.G(42)
+ def j = Extra.F.G(42)
+
+ @deprecated("member gg", since="now")
+ val gg = G
+ def k = this.gg.H(0)
+
+ def l = J.K(42)
+}
+trait News {
+ def f = new C(42)
+ def g = new D(42)
+ def h = new E(42)
+ def i = new F.G(42)
+ def j = new Extra.F.G(42)
+ def l = new J.K(42)
+}
diff --git a/test/files/neg/t8700a.check b/test/files/neg/t8700a.check
new file mode 100644
index 0000000000..ce7945a3fc
--- /dev/null
+++ b/test/files/neg/t8700a.check
@@ -0,0 +1,11 @@
+Bar.scala:2: warning: match may not be exhaustive.
+It would fail on the following input: B
+ def bar1(foo: Foo) = foo match {
+ ^
+Bar.scala:6: warning: match may not be exhaustive.
+It would fail on the following input: B
+ def bar2(foo: Baz) = foo match {
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+two warnings found
+one error found
diff --git a/test/files/neg/t8700a.flags b/test/files/neg/t8700a.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/t8700a.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t8700a/Bar.scala b/test/files/neg/t8700a/Bar.scala
new file mode 100644
index 0000000000..33ad8e9877
--- /dev/null
+++ b/test/files/neg/t8700a/Bar.scala
@@ -0,0 +1,9 @@
+object Bar {
+ def bar1(foo: Foo) = foo match {
+ case Foo.A => 1
+ }
+
+ def bar2(foo: Baz) = foo match {
+ case Baz.A => 1
+ }
+}
diff --git a/test/files/neg/t8700a/Baz.java b/test/files/neg/t8700a/Baz.java
new file mode 100644
index 0000000000..f85ad40802
--- /dev/null
+++ b/test/files/neg/t8700a/Baz.java
@@ -0,0 +1,11 @@
+public enum Baz {
+ A {
+ public void baz1() {}
+ },
+ B {
+ public void baz1() {}
+ };
+
+ public abstract void baz1();
+ public void baz2() {}
+}
diff --git a/test/files/neg/t8700a/Foo.java b/test/files/neg/t8700a/Foo.java
new file mode 100644
index 0000000000..cc8e9daf1f
--- /dev/null
+++ b/test/files/neg/t8700a/Foo.java
@@ -0,0 +1,4 @@
+public enum Foo {
+ A,
+ B
+}
diff --git a/test/files/neg/t8700b.check b/test/files/neg/t8700b.check
new file mode 100644
index 0000000000..3bff78dd29
--- /dev/null
+++ b/test/files/neg/t8700b.check
@@ -0,0 +1,11 @@
+Bar_2.scala:2: warning: match may not be exhaustive.
+It would fail on the following input: B
+ def bar1(foo: Foo_1) = foo match {
+ ^
+Bar_2.scala:6: warning: match may not be exhaustive.
+It would fail on the following input: B
+ def bar2(foo: Baz_1) = foo match {
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+two warnings found
+one error found
diff --git a/test/files/neg/t8700b.flags b/test/files/neg/t8700b.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/t8700b.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t8700b/Bar_2.scala b/test/files/neg/t8700b/Bar_2.scala
new file mode 100644
index 0000000000..97ba16df27
--- /dev/null
+++ b/test/files/neg/t8700b/Bar_2.scala
@@ -0,0 +1,9 @@
+object Bar {
+ def bar1(foo: Foo_1) = foo match {
+ case Foo_1.A => 1
+ }
+
+ def bar2(foo: Baz_1) = foo match {
+ case Baz_1.A => 1
+ }
+}
diff --git a/test/files/neg/t8700b/Baz_1.java b/test/files/neg/t8700b/Baz_1.java
new file mode 100644
index 0000000000..6a057c2c9c
--- /dev/null
+++ b/test/files/neg/t8700b/Baz_1.java
@@ -0,0 +1,11 @@
+public enum Baz_1 {
+ A {
+ public void baz1() {}
+ },
+ B {
+ public void baz1() {}
+ };
+
+ public abstract void baz1();
+ public void baz2() {}
+}
diff --git a/test/files/neg/t8700b/Foo_1.java b/test/files/neg/t8700b/Foo_1.java
new file mode 100644
index 0000000000..22656bdedd
--- /dev/null
+++ b/test/files/neg/t8700b/Foo_1.java
@@ -0,0 +1,4 @@
+public enum Foo_1 {
+ A,
+ B
+}
diff --git a/test/files/neg/t876.check b/test/files/neg/t876.check
index 04c5c8f22e..7df2e126a6 100644
--- a/test/files/neg/t876.check
+++ b/test/files/neg/t876.check
@@ -1,4 +1,4 @@
-t876.scala:25: error: too many arguments for method apply: (key: AssertionError.A)manager.B in class HashMap
+t876.scala:25: error: too many arguments (2) for method apply: (key: AssertionError.A)manager.B in class HashMap
assert(manager.map(A2) == List(manager.map(A2, A1)))
- ^
+ ^
one error found
diff --git a/test/files/neg/t8764.check b/test/files/neg/t8764.check
deleted file mode 100644
index 6d89ebe106..0000000000
--- a/test/files/neg/t8764.check
+++ /dev/null
@@ -1,6 +0,0 @@
-t8764.scala:8: error: type mismatch;
- found : AnyVal
- required: Double
- val d: Double = a.productElement(0)
- ^
-one error found
diff --git a/test/files/neg/t8764.scala b/test/files/neg/t8764.scala
deleted file mode 100644
index dc5bfb0160..0000000000
--- a/test/files/neg/t8764.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-object Main {
-
- case class IntAndDouble(i: Int, d: Double)
-
- // a.productElement used to be Int => Double
- // now: Int => AnyVal
- val a = IntAndDouble(1, 5.0)
- val d: Double = a.productElement(0)
-}
diff --git a/test/files/neg/t8849.check b/test/files/neg/t8849.check
new file mode 100644
index 0000000000..1d5b4164b2
--- /dev/null
+++ b/test/files/neg/t8849.check
@@ -0,0 +1,7 @@
+t8849.scala:8: error: ambiguous implicit values:
+ both lazy value global in object Implicits of type => scala.concurrent.ExecutionContext
+ and value dummy of type scala.concurrent.ExecutionContext
+ match expected type scala.concurrent.ExecutionContext
+ require(implicitly[ExecutionContext] eq dummy)
+ ^
+one error found
diff --git a/test/files/neg/t8849.scala b/test/files/neg/t8849.scala
new file mode 100644
index 0000000000..336f16b40f
--- /dev/null
+++ b/test/files/neg/t8849.scala
@@ -0,0 +1,10 @@
+import scala.concurrent.ExecutionContext
+import ExecutionContext.Implicits.global
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ implicit val dummy: ExecutionContext = null
+ require(scala.concurrent.ExecutionContext.Implicits.global ne null)
+ require(implicitly[ExecutionContext] eq dummy)
+ }
+} \ No newline at end of file
diff --git a/test/files/neg/t9045.check b/test/files/neg/t9045.check
new file mode 100644
index 0000000000..07d0e2dd74
--- /dev/null
+++ b/test/files/neg/t9045.check
@@ -0,0 +1,7 @@
+t9045.scala:3: error: constructor invokes itself
+ def this(axes: Array[Int]) = this(axes)
+ ^
+t9045.scala:6: error: called constructor's definition must precede calling constructor's definition
+ def this(d: Double) = this(d.toLong)
+ ^
+two errors found
diff --git a/test/files/neg/t9045.scala b/test/files/neg/t9045.scala
new file mode 100644
index 0000000000..e6710ab324
--- /dev/null
+++ b/test/files/neg/t9045.scala
@@ -0,0 +1,8 @@
+
+case class AffineImageShape(axes: Seq[Int]) {
+ def this(axes: Array[Int]) = this(axes)
+}
+class X(i: Int) {
+ def this(d: Double) = this(d.toLong)
+ def this(n: Long) = this(n.toInt)
+}
diff --git a/test/files/neg/t9361.check b/test/files/neg/t9361.check
new file mode 100644
index 0000000000..847d137f7d
--- /dev/null
+++ b/test/files/neg/t9361.check
@@ -0,0 +1,11 @@
+t9361.scala:4: error: type mismatch;
+ found : Tc[_$2] where type _$2
+ required: Nothing[]
+ new Foo { def tc = null.asInstanceOf[Tc[_]] }
+ ^
+t9361.scala:4: error: type mismatch;
+ found : Foo[Nothing]
+ required: Foo[Tc]{type T = Nothing}
+ new Foo { def tc = null.asInstanceOf[Tc[_]] }
+ ^
+two errors found
diff --git a/test/files/neg/t9361.scala b/test/files/neg/t9361.scala
new file mode 100644
index 0000000000..b689461e4d
--- /dev/null
+++ b/test/files/neg/t9361.scala
@@ -0,0 +1,5 @@
+abstract class Foo[Tc[_]] { def tc: Tc[_] }
+object Foo {
+ def foo[Tc[_]](): Foo[Tc] { type T = Nothing } =
+ new Foo { def tc = null.asInstanceOf[Tc[_]] }
+}
diff --git a/test/files/neg/t9382.check b/test/files/neg/t9382.check
new file mode 100644
index 0000000000..93bf48926a
--- /dev/null
+++ b/test/files/neg/t9382.check
@@ -0,0 +1,10 @@
+t9382.scala:3: error: value x is not a member of (List[Int], List[Int])
+ def f = (List(1,2,3), List(4,5,6)).x
+ ^
+t9382.scala:4: error: value x is not a member of (List[Int], List[Int], List[Int])
+ def g = (List(1,2,3), List(4,5,6), List(7,8,9)).x
+ ^
+t9382.scala:5: error: value x is not a member of (Int, Int)
+ def huh = (1,2).x
+ ^
+three errors found
diff --git a/test/files/neg/t9382.scala b/test/files/neg/t9382.scala
new file mode 100644
index 0000000000..19703525e4
--- /dev/null
+++ b/test/files/neg/t9382.scala
@@ -0,0 +1,6 @@
+
+trait T {
+ def f = (List(1,2,3), List(4,5,6)).x
+ def g = (List(1,2,3), List(4,5,6), List(7,8,9)).x
+ def huh = (1,2).x
+}
diff --git a/test/files/neg/t9398.check b/test/files/neg/t9398.check
new file mode 100644
index 0000000000..f0c464daa1
--- /dev/null
+++ b/test/files/neg/t9398.check
@@ -0,0 +1,7 @@
+match.scala:3: warning: match may not be exhaustive.
+It would fail on the following input: CC(B2)
+ def test(c: CC): Unit = c match {
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/t9398.flags b/test/files/neg/t9398.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/neg/t9398.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t9398/data.scala b/test/files/neg/t9398/data.scala
new file mode 100644
index 0000000000..7a98c0e8e8
--- /dev/null
+++ b/test/files/neg/t9398/data.scala
@@ -0,0 +1,5 @@
+sealed abstract class TB
+case object B extends TB
+case object B2 extends TB
+
+case class CC(tb: TB)
diff --git a/test/files/neg/t9398/match.scala b/test/files/neg/t9398/match.scala
new file mode 100644
index 0000000000..e110c6a96a
--- /dev/null
+++ b/test/files/neg/t9398/match.scala
@@ -0,0 +1,6 @@
+class Test {
+ // Should warn that CC(B2) isn't matched
+ def test(c: CC): Unit = c match {
+ case CC(B) => ()
+ }
+}
diff --git a/test/files/neg/t9527a.check b/test/files/neg/t9527a.check
new file mode 100644
index 0000000000..e756518bed
--- /dev/null
+++ b/test/files/neg/t9527a.check
@@ -0,0 +1,7 @@
+t9527a.scala:5: error: ambiguous implicit values:
+ both method f in class C of type (x: Int)String
+ and method g in class C of type (x: Int)String
+ match expected type Int => String
+ implicitly[Int => String]
+ ^
+one error found
diff --git a/test/files/neg/t9527a.scala b/test/files/neg/t9527a.scala
new file mode 100644
index 0000000000..35c58fc9a6
--- /dev/null
+++ b/test/files/neg/t9527a.scala
@@ -0,0 +1,8 @@
+class C {
+ implicit def f(x: Int): String = "f was here"
+ implicit def g(x: Int): String = "f was here"
+ def test: Unit = {
+ implicitly[Int => String]
+ }
+}
+
diff --git a/test/files/neg/t9527b.check b/test/files/neg/t9527b.check
new file mode 100644
index 0000000000..4529ec83ea
--- /dev/null
+++ b/test/files/neg/t9527b.check
@@ -0,0 +1,4 @@
+t9527b.scala:6: error: msg A=Nothing
+ implicitly[Int => String]
+ ^
+one error found
diff --git a/test/files/neg/t9527b.scala b/test/files/neg/t9527b.scala
new file mode 100644
index 0000000000..b40a4dca9e
--- /dev/null
+++ b/test/files/neg/t9527b.scala
@@ -0,0 +1,9 @@
+class C {
+ @annotation.implicitAmbiguous("msg A=${A}")
+ implicit def f[A](x: Int): String = "f was here"
+ implicit def g(x: Int): String = "f was here"
+ def test: Unit = {
+ implicitly[Int => String]
+ }
+}
+
diff --git a/test/files/neg/t9535.check b/test/files/neg/t9535.check
new file mode 100644
index 0000000000..5c3e3ea8e6
--- /dev/null
+++ b/test/files/neg/t9535.check
@@ -0,0 +1,7 @@
+t9535.scala:4: error: not found: type E1
+ @throws[E1] def f[E1 <: Exception] = 1
+ ^
+t9535.scala:6: error: class type required but E found
+ @throws(classOf[E]) def g: E = ??? // neg test: classOf requires class type
+ ^
+two errors found
diff --git a/test/files/neg/t9535.scala b/test/files/neg/t9535.scala
new file mode 100644
index 0000000000..37253804ce
--- /dev/null
+++ b/test/files/neg/t9535.scala
@@ -0,0 +1,7 @@
+class C[E <: Exception] {
+ // cannot be expressed in Scala (it's allowed in Java)
+ // https://issues.scala-lang.org/browse/SI-7066
+ @throws[E1] def f[E1 <: Exception] = 1
+
+ @throws(classOf[E]) def g: E = ??? // neg test: classOf requires class type
+}
diff --git a/test/files/neg/t9629.check b/test/files/neg/t9629.check
new file mode 100644
index 0000000000..4eafa84236
--- /dev/null
+++ b/test/files/neg/t9629.check
@@ -0,0 +1,17 @@
+t9629.scala:4: error: pattern must be a value: Option[Int]
+Note: if you intended to match against the class, try `case _: Option[_]`
+ case Option[Int] => // error was issued before
+ ^
+t9629.scala:5: error: pattern must be a value: Option[Int]
+Note: if you intended to match against the class, try `case _: Option[_]`
+ case Some(Option[Int]) => // error was skipped, patmat issued an internal error
+ ^
+t9629.scala:8: error: pattern must be a value: Option[Int]
+Note: if you intended to match against the class, try `case _: Option[_]`
+ case (_, Option[Int]) =>
+ ^
+t9629.scala:9: error: pattern must be a value: Option[Int]
+Note: if you intended to match against the class, try `case _: Option[_]`
+ case x @ (y @ Option[Int]) =>
+ ^
+four errors found
diff --git a/test/files/neg/t9629.scala b/test/files/neg/t9629.scala
new file mode 100644
index 0000000000..2be2b039f2
--- /dev/null
+++ b/test/files/neg/t9629.scala
@@ -0,0 +1,12 @@
+class Test {
+ def foo(a: Any) {
+ a match {
+ case Option[Int] => // error was issued before
+ case Some(Option[Int]) => // error was skipped, patmat issued an internal error
+
+ // variations
+ case (_, Option[Int]) =>
+ case x @ (y @ Option[Int]) =>
+ }
+ }
+}
diff --git a/test/files/neg/t963.check b/test/files/neg/t963.check
index 483e53c77d..85b64b0bb5 100644
--- a/test/files/neg/t963.check
+++ b/test/files/neg/t963.check
@@ -1,12 +1,12 @@
+t963.scala:10: error: type mismatch;
+ found : AnyRef{def x: Integer}
+ required: AnyRef{val x: Integer}
+ val y2 : { val x : java.lang.Integer } = new { def x = new java.lang.Integer(r.nextInt) }
+ ^
t963.scala:14: error: stable identifier required, but y3.x.type found.
val w3 : y3.x.type = y3.x
^
t963.scala:17: error: stable identifier required, but y4.x.type found.
val w4 : y4.x.type = y4.x
^
-t963.scala:10: error: type mismatch;
- found : AnyRef{def x: Integer}
- required: AnyRef{val x: Integer}
- val y2 : { val x : java.lang.Integer } = new { def x = new java.lang.Integer(r.nextInt) }
- ^
three errors found
diff --git a/test/files/neg/t9684.check b/test/files/neg/t9684.check
new file mode 100644
index 0000000000..bb5669733d
--- /dev/null
+++ b/test/files/neg/t9684.check
@@ -0,0 +1,9 @@
+t9684.scala:6: warning: object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters
+ null.asInstanceOf[java.util.List[Int]] : Buffer[Int]
+ ^
+t9684.scala:8: warning: object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters
+ null.asInstanceOf[Iterable[Int]] : java.util.Collection[Int]
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+two warnings found
+one error found
diff --git a/test/files/neg/t9684.flags b/test/files/neg/t9684.flags
new file mode 100644
index 0000000000..c6bfaf1f64
--- /dev/null
+++ b/test/files/neg/t9684.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings
diff --git a/test/files/neg/t9684.scala b/test/files/neg/t9684.scala
new file mode 100644
index 0000000000..f7ece269e6
--- /dev/null
+++ b/test/files/neg/t9684.scala
@@ -0,0 +1,9 @@
+
+import scala.collection.JavaConversions._
+import scala.collection.mutable.Buffer
+
+trait Test {
+ null.asInstanceOf[java.util.List[Int]] : Buffer[Int]
+
+ null.asInstanceOf[Iterable[Int]] : java.util.Collection[Int]
+}
diff --git a/test/files/neg/t9684b.check b/test/files/neg/t9684b.check
new file mode 100644
index 0000000000..5f328abd43
--- /dev/null
+++ b/test/files/neg/t9684b.check
@@ -0,0 +1,7 @@
+t9684b.scala:6: error: reference to asScalaIterator is ambiguous;
+it is imported twice in the same scope by
+import scala.collection.JavaConversions._
+and import scala.collection.JavaConverters._
+ asScalaIterator(null) // fails: asScalaIterator is imported twice.
+ ^
+one error found
diff --git a/test/files/neg/t9684b.scala b/test/files/neg/t9684b.scala
new file mode 100644
index 0000000000..010e9d1b5d
--- /dev/null
+++ b/test/files/neg/t9684b.scala
@@ -0,0 +1,14 @@
+trait T1 {
+ import scala.collection.JavaConverters._
+ import scala.collection.JavaConversions._
+
+ null.asInstanceOf[java.util.Iterator[String]]: Iterator[String] // works
+ asScalaIterator(null) // fails: asScalaIterator is imported twice.
+}
+
+trait T2 {
+ import scala.collection.JavaConversions.asScalaIterator
+
+ null.asInstanceOf[java.util.Iterator[String]]: Iterator[String] // works
+ asScalaIterator(null) // works
+}
diff --git a/test/files/neg/t9781.check b/test/files/neg/t9781.check
new file mode 100644
index 0000000000..422c51013a
--- /dev/null
+++ b/test/files/neg/t9781.check
@@ -0,0 +1,4 @@
+t9781.scala:3: error: not found: value undefinedSymbol
+ c(undefinedSymbol) += 1
+ ^
+one error found
diff --git a/test/files/neg/t9781.scala b/test/files/neg/t9781.scala
new file mode 100644
index 0000000000..70234dcca5
--- /dev/null
+++ b/test/files/neg/t9781.scala
@@ -0,0 +1,4 @@
+object T9781 {
+ val c: collection.mutable.Map[Int, Int] = ???
+ c(undefinedSymbol) += 1
+}
diff --git a/test/files/neg/t9847.check b/test/files/neg/t9847.check
new file mode 100644
index 0000000000..e55109b3ef
--- /dev/null
+++ b/test/files/neg/t9847.check
@@ -0,0 +1,45 @@
+t9847.scala:4: warning: discarded non-Unit value
+ def f(): Unit = 42
+ ^
+t9847.scala:4: warning: a pure expression does nothing in statement position
+ def f(): Unit = 42
+ ^
+t9847.scala:5: warning: discarded non-Unit value
+ def g = (42: Unit)
+ ^
+t9847.scala:5: warning: a pure expression does nothing in statement position
+ def g = (42: Unit)
+ ^
+t9847.scala:7: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
+ 1
+ ^
+t9847.scala:12: warning: discarded non-Unit value
+ + 1
+ ^
+t9847.scala:12: warning: a pure expression does nothing in statement position
+ + 1
+ ^
+t9847.scala:11: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
+ 1
+ ^
+t9847.scala:12: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
+ + 1
+ ^
+t9847.scala:16: warning: discarded non-Unit value
+ x + 1
+ ^
+t9847.scala:19: warning: discarded non-Unit value
+ def j(): Unit = x + 1
+ ^
+t9847.scala:21: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ class C { 42 }
+ ^
+t9847.scala:22: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ class D { 42 ; 17 }
+ ^
+t9847.scala:22: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ class D { 42 ; 17 }
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+14 warnings found
+one error found
diff --git a/test/files/neg/t9847.flags b/test/files/neg/t9847.flags
new file mode 100644
index 0000000000..065e3ca61e
--- /dev/null
+++ b/test/files/neg/t9847.flags
@@ -0,0 +1 @@
+-Xfatal-warnings -Ywarn-value-discard
diff --git a/test/files/neg/t9847.scala b/test/files/neg/t9847.scala
new file mode 100644
index 0000000000..51c16d815f
--- /dev/null
+++ b/test/files/neg/t9847.scala
@@ -0,0 +1,23 @@
+
+trait T {
+
+ def f(): Unit = 42
+ def g = (42: Unit)
+ def h = {
+ 1
+ + 1
+ }
+ def hh(): Unit = {
+ 1
+ + 1
+ }
+ def i(): Unit = {
+ val x = 1
+ x + 1
+ }
+ def x = 42
+ def j(): Unit = x + 1
+
+ class C { 42 }
+ class D { 42 ; 17 }
+}
diff --git a/test/files/neg/t9849.check b/test/files/neg/t9849.check
new file mode 100644
index 0000000000..7b47150846
--- /dev/null
+++ b/test/files/neg/t9849.check
@@ -0,0 +1,7 @@
+t9849.scala:14: error: method h in object O cannot be accessed in object p.O
+ O.h()
+ ^
+t9849.scala:15: error: method h$default$1 in object O cannot be accessed in object p.O
+ O.h$default$1
+ ^
+two errors found
diff --git a/test/files/neg/t9849.scala b/test/files/neg/t9849.scala
new file mode 100644
index 0000000000..bcd18b6916
--- /dev/null
+++ b/test/files/neg/t9849.scala
@@ -0,0 +1,16 @@
+package p
+
+object O {
+ protected[p] def f(x: Int = 1) = x
+ private[p] def g(x: Int = 1) = x
+ private def h(x: Int = 1) = x
+}
+
+object Test {
+ O.f()
+ O.f$default$1
+ O.g()
+ O.g$default$1
+ O.h()
+ O.h$default$1
+}
diff --git a/test/files/neg/trait-defaults-super.check b/test/files/neg/trait-defaults-super.check
new file mode 100644
index 0000000000..2b19402828
--- /dev/null
+++ b/test/files/neg/trait-defaults-super.check
@@ -0,0 +1,4 @@
+trait-defaults-super.scala:14: error: Unable to implement a super accessor required by trait T unless Iterable[String] is directly extended by class C.
+class C extends T
+ ^
+one error found
diff --git a/test/files/neg/trait-defaults-super.scala b/test/files/neg/trait-defaults-super.scala
new file mode 100644
index 0000000000..def271e8e7
--- /dev/null
+++ b/test/files/neg/trait-defaults-super.scala
@@ -0,0 +1,21 @@
+trait T extends java.lang.Iterable[String] {
+
+ override def spliterator(): java.util.Spliterator[String] = {
+ super[Iterable].spliterator
+ super.spliterator
+ null
+ }
+ def foo = {
+ super[Iterable].spliterator
+ super.spliterator
+ }
+ def iterator(): java.util.Iterator[String] = java.util.Collections.emptyList().iterator()
+}
+class C extends T
+object Test {
+ def main(args: Array[String]): Unit = {
+ val t: T = new C
+ t.spliterator
+ t.foo
+ }
+}
diff --git a/test/files/neg/trait-no-native.check b/test/files/neg/trait-no-native.check
new file mode 100644
index 0000000000..12bce4042d
--- /dev/null
+++ b/test/files/neg/trait-no-native.check
@@ -0,0 +1,4 @@
+trait-no-native.scala:3: error: A trait cannot define a native method.
+ @native def foo = ???
+ ^
+one error found
diff --git a/test/files/neg/trait-no-native.scala b/test/files/neg/trait-no-native.scala
new file mode 100644
index 0000000000..463e604a48
--- /dev/null
+++ b/test/files/neg/trait-no-native.scala
@@ -0,0 +1,4 @@
+trait T {
+ // should not compile, because it would result in a VerifyError
+ @native def foo = ???
+}
diff --git a/test/files/neg/trait_fields_conflicts.check b/test/files/neg/trait_fields_conflicts.check
new file mode 100644
index 0000000000..696d0284c1
--- /dev/null
+++ b/test/files/neg/trait_fields_conflicts.check
@@ -0,0 +1,273 @@
+trait_fields_conflicts.scala:5: error: overriding value x in trait Val of type Int;
+ value x needs `override' modifier
+trait ValForVal extends Val { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:6: error: overriding value x in trait Val of type Int;
+ variable x needs `override' modifier
+trait VarForVal extends Val { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:7: error: overriding value x in trait Val of type Int;
+ method x needs `override' modifier
+trait DefForVal extends Val { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:8: error: overriding variable x in trait Var of type Int;
+ value x needs `override' modifier
+trait ValForVar extends Var { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:9: error: overriding variable x in trait Var of type Int;
+ variable x needs `override' modifier
+trait VarForVar extends Var { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:10: error: overriding variable x in trait Var of type Int;
+ method x needs `override' modifier
+trait DefForVar extends Var { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:11: error: overriding lazy value x in trait Lazy of type Int;
+ value x needs `override' modifier
+trait ValForLazy extends Lazy { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:12: error: overriding lazy value x in trait Lazy of type Int;
+ variable x needs `override' modifier
+trait VarForLazy extends Lazy { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:13: error: overriding lazy value x in trait Lazy of type Int;
+ method x needs `override' modifier
+trait DefForLazy extends Lazy { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:16: error: overriding value x in trait Val of type Int;
+ variable x needs to be a stable, immutable value
+trait VarForValOvr extends Val { override var x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:17: error: overriding value x in trait Val of type Int;
+ method x needs to be a stable, immutable value
+trait DefForValOvr extends Val { override def x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:18: error: overriding variable x in trait Var of type Int;
+ value x cannot override a mutable variable
+trait ValForVarOvr extends Var { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+ ^
+trait_fields_conflicts.scala:19: error: overriding variable x in trait Var of type Int;
+ variable x cannot override a mutable variable
+trait VarForVarOvr extends Var { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:20: error: overriding variable x in trait Var of type Int;
+ method x cannot override a mutable variable
+trait DefForVarOvr extends Var { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:21: error: overriding lazy value x in trait Lazy of type Int;
+ value x must be declared lazy to override a concrete lazy value
+trait ValForLazyOvr extends Lazy { override val x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:22: error: overriding lazy value x in trait Lazy of type Int;
+ variable x needs to be a stable, immutable value
+trait VarForLazyOvr extends Lazy { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:23: error: overriding lazy value x in trait Lazy of type Int;
+ method x needs to be a stable, immutable value
+trait DefForLazyOvr extends Lazy { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:25: error: overriding value x in trait Val of type Int;
+ value x needs `override' modifier
+class CValForVal extends Val { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:26: error: overriding value x in trait Val of type Int;
+ variable x needs `override' modifier
+class CVarForVal extends Val { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:27: error: overriding value x in trait Val of type Int;
+ method x needs `override' modifier
+class CDefForVal extends Val { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:28: error: overriding variable x in trait Var of type Int;
+ value x needs `override' modifier
+class CValForVar extends Var { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:29: error: overriding variable x in trait Var of type Int;
+ variable x needs `override' modifier
+class CVarForVar extends Var { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:30: error: overriding variable x in trait Var of type Int;
+ method x needs `override' modifier
+class CDefForVar extends Var { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:31: error: overriding lazy value x in trait Lazy of type Int;
+ value x needs `override' modifier
+class CValForLazy extends Lazy { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:32: error: overriding lazy value x in trait Lazy of type Int;
+ variable x needs `override' modifier
+class CVarForLazy extends Lazy { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:33: error: overriding lazy value x in trait Lazy of type Int;
+ method x needs `override' modifier
+class CDefForLazy extends Lazy { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:36: error: overriding value x in trait Val of type Int;
+ variable x needs to be a stable, immutable value
+class CVarForValOvr extends Val { override var x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:37: error: overriding value x in trait Val of type Int;
+ method x needs to be a stable, immutable value
+class CDefForValOvr extends Val { override def x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:38: error: overriding variable x in trait Var of type Int;
+ value x cannot override a mutable variable
+class CValForVarOvr extends Var { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+ ^
+trait_fields_conflicts.scala:39: error: overriding variable x in trait Var of type Int;
+ variable x cannot override a mutable variable
+class CVarForVarOvr extends Var { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:40: error: overriding variable x in trait Var of type Int;
+ method x cannot override a mutable variable
+class CDefForVarOvr extends Var { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:41: error: overriding lazy value x in trait Lazy of type Int;
+ value x must be declared lazy to override a concrete lazy value
+class CValForLazyOvr extends Lazy { override val x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:42: error: overriding lazy value x in trait Lazy of type Int;
+ variable x needs to be a stable, immutable value
+class CVarForLazyOvr extends Lazy { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:43: error: overriding lazy value x in trait Lazy of type Int;
+ method x needs to be a stable, immutable value
+class CDefForLazyOvr extends Lazy { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:49: error: overriding value x in class CVal of type Int;
+ value x needs `override' modifier
+trait ValForCVal extends CVal { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:50: error: overriding value x in class CVal of type Int;
+ variable x needs `override' modifier
+trait VarForCVal extends CVal { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:51: error: overriding value x in class CVal of type Int;
+ method x needs `override' modifier
+trait DefForCVal extends CVal { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:52: error: overriding variable x in class CVar of type Int;
+ value x needs `override' modifier
+trait ValForCVar extends CVar { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:53: error: overriding variable x in class CVar of type Int;
+ variable x needs `override' modifier
+trait VarForCVar extends CVar { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:54: error: overriding variable x in class CVar of type Int;
+ method x needs `override' modifier
+trait DefForCVar extends CVar { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:55: error: overriding lazy value x in class CLazy of type Int;
+ value x needs `override' modifier
+trait ValForCLazy extends CLazy { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:56: error: overriding lazy value x in class CLazy of type Int;
+ variable x needs `override' modifier
+trait VarForCLazy extends CLazy { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:57: error: overriding lazy value x in class CLazy of type Int;
+ method x needs `override' modifier
+trait DefForCLazy extends CLazy { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:60: error: overriding value x in class CVal of type Int;
+ variable x needs to be a stable, immutable value
+trait VarForCValOvr extends CVal { override var x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:61: error: overriding value x in class CVal of type Int;
+ method x needs to be a stable, immutable value
+trait DefForCValOvr extends CVal { override def x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:62: error: overriding variable x in class CVar of type Int;
+ value x cannot override a mutable variable
+trait ValForCVarOvr extends CVar { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+ ^
+trait_fields_conflicts.scala:63: error: overriding variable x in class CVar of type Int;
+ variable x cannot override a mutable variable
+trait VarForCVarOvr extends CVar { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:64: error: overriding variable x in class CVar of type Int;
+ method x cannot override a mutable variable
+trait DefForCVarOvr extends CVar { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:65: error: overriding lazy value x in class CLazy of type Int;
+ value x must be declared lazy to override a concrete lazy value
+trait ValForCLazyOvr extends CLazy { override val x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:66: error: overriding lazy value x in class CLazy of type Int;
+ variable x needs to be a stable, immutable value
+trait VarForCLazyOvr extends CLazy { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:67: error: overriding lazy value x in class CLazy of type Int;
+ method x needs to be a stable, immutable value
+trait DefForCLazyOvr extends CLazy { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:69: error: overriding value x in class CVal of type Int;
+ value x needs `override' modifier
+class CValForCVal extends CVal { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:70: error: overriding value x in class CVal of type Int;
+ variable x needs `override' modifier
+class CVarForCVal extends CVal { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:71: error: overriding value x in class CVal of type Int;
+ method x needs `override' modifier
+class CDefForCVal extends CVal { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:72: error: overriding variable x in class CVar of type Int;
+ value x needs `override' modifier
+class CValForCVar extends CVar { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:73: error: overriding variable x in class CVar of type Int;
+ variable x needs `override' modifier
+class CVarForCVar extends CVar { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:74: error: overriding variable x in class CVar of type Int;
+ method x needs `override' modifier
+class CDefForCVar extends CVar { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:75: error: overriding lazy value x in class CLazy of type Int;
+ value x needs `override' modifier
+class CValForCLazy extends CLazy { val x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:76: error: overriding lazy value x in class CLazy of type Int;
+ variable x needs `override' modifier
+class CVarForCLazy extends CLazy { var x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:77: error: overriding lazy value x in class CLazy of type Int;
+ method x needs `override' modifier
+class CDefForCLazy extends CLazy { def x: Int = 1 } // needs override
+ ^
+trait_fields_conflicts.scala:80: error: overriding value x in class CVal of type Int;
+ variable x needs to be a stable, immutable value
+class CVarForCValOvr extends CVal { override var x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:81: error: overriding value x in class CVal of type Int;
+ method x needs to be a stable, immutable value
+class CDefForCValOvr extends CVal { override def x: Int = 1 } // bad override
+ ^
+trait_fields_conflicts.scala:82: error: overriding variable x in class CVar of type Int;
+ value x cannot override a mutable variable
+class CValForCVarOvr extends CVar { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+ ^
+trait_fields_conflicts.scala:83: error: overriding variable x in class CVar of type Int;
+ variable x cannot override a mutable variable
+class CVarForCVarOvr extends CVar { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:84: error: overriding variable x in class CVar of type Int;
+ method x cannot override a mutable variable
+class CDefForCVarOvr extends CVar { override def x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:85: error: overriding lazy value x in class CLazy of type Int;
+ value x must be declared lazy to override a concrete lazy value
+class CValForCLazyOvr extends CLazy { override val x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:86: error: overriding lazy value x in class CLazy of type Int;
+ variable x needs to be a stable, immutable value
+class CVarForCLazyOvr extends CLazy { override var x: Int = 1 } // bad override -- why?
+ ^
+trait_fields_conflicts.scala:87: error: overriding lazy value x in class CLazy of type Int;
+ method x needs to be a stable, immutable value
+class CDefForCLazyOvr extends CLazy { override def x: Int = 1 } // bad override -- why?
+ ^
+68 errors found
diff --git a/test/files/neg/trait_fields_conflicts.scala b/test/files/neg/trait_fields_conflicts.scala
new file mode 100644
index 0000000000..92fc106e44
--- /dev/null
+++ b/test/files/neg/trait_fields_conflicts.scala
@@ -0,0 +1,87 @@
+trait Val { val x: Int = 123 }
+trait Var { var x: Int = 123 }
+trait Lazy { lazy val x: Int = 123 }
+
+trait ValForVal extends Val { val x: Int = 1 } // needs override
+trait VarForVal extends Val { var x: Int = 1 } // needs override
+trait DefForVal extends Val { def x: Int = 1 } // needs override
+trait ValForVar extends Var { val x: Int = 1 } // needs override
+trait VarForVar extends Var { var x: Int = 1 } // needs override
+trait DefForVar extends Var { def x: Int = 1 } // needs override
+trait ValForLazy extends Lazy { val x: Int = 1 } // needs override
+trait VarForLazy extends Lazy { var x: Int = 1 } // needs override
+trait DefForLazy extends Lazy { def x: Int = 1 } // needs override
+
+trait ValForValOvr extends Val { override val x: Int = 1 } // override ok
+trait VarForValOvr extends Val { override var x: Int = 1 } // bad override
+trait DefForValOvr extends Val { override def x: Int = 1 } // bad override
+trait ValForVarOvr extends Var { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+trait VarForVarOvr extends Var { override var x: Int = 1 } // bad override -- why?
+trait DefForVarOvr extends Var { override def x: Int = 1 } // bad override -- why?
+trait ValForLazyOvr extends Lazy { override val x: Int = 1 } // bad override -- why?
+trait VarForLazyOvr extends Lazy { override var x: Int = 1 } // bad override -- why?
+trait DefForLazyOvr extends Lazy { override def x: Int = 1 } // bad override -- why?
+
+class CValForVal extends Val { val x: Int = 1 } // needs override
+class CVarForVal extends Val { var x: Int = 1 } // needs override
+class CDefForVal extends Val { def x: Int = 1 } // needs override
+class CValForVar extends Var { val x: Int = 1 } // needs override
+class CVarForVar extends Var { var x: Int = 1 } // needs override
+class CDefForVar extends Var { def x: Int = 1 } // needs override
+class CValForLazy extends Lazy { val x: Int = 1 } // needs override
+class CVarForLazy extends Lazy { var x: Int = 1 } // needs override
+class CDefForLazy extends Lazy { def x: Int = 1 } // needs override
+
+class CValForValOvr extends Val { override val x: Int = 1 } // override ok
+class CVarForValOvr extends Val { override var x: Int = 1 } // bad override
+class CDefForValOvr extends Val { override def x: Int = 1 } // bad override
+class CValForVarOvr extends Var { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+class CVarForVarOvr extends Var { override var x: Int = 1 } // bad override -- why?
+class CDefForVarOvr extends Var { override def x: Int = 1 } // bad override -- why?
+class CValForLazyOvr extends Lazy { override val x: Int = 1 } // bad override -- why?
+class CVarForLazyOvr extends Lazy { override var x: Int = 1 } // bad override -- why?
+class CDefForLazyOvr extends Lazy { override def x: Int = 1 } // bad override -- why?
+
+class CVal { val x: Int = 123 }
+class CVar { var x: Int = 123 }
+class CLazy { lazy val x: Int = 123 }
+
+trait ValForCVal extends CVal { val x: Int = 1 } // needs override
+trait VarForCVal extends CVal { var x: Int = 1 } // needs override
+trait DefForCVal extends CVal { def x: Int = 1 } // needs override
+trait ValForCVar extends CVar { val x: Int = 1 } // needs override
+trait VarForCVar extends CVar { var x: Int = 1 } // needs override
+trait DefForCVar extends CVar { def x: Int = 1 } // needs override
+trait ValForCLazy extends CLazy { val x: Int = 1 } // needs override
+trait VarForCLazy extends CLazy { var x: Int = 1 } // needs override
+trait DefForCLazy extends CLazy { def x: Int = 1 } // needs override
+
+trait ValForCValOvr extends CVal { override val x: Int = 1 } // override ok
+trait VarForCValOvr extends CVal { override var x: Int = 1 } // bad override
+trait DefForCValOvr extends CVal { override def x: Int = 1 } // bad override
+trait ValForCVarOvr extends CVar { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+trait VarForCVarOvr extends CVar { override var x: Int = 1 } // bad override -- why?
+trait DefForCVarOvr extends CVar { override def x: Int = 1 } // bad override -- why?
+trait ValForCLazyOvr extends CLazy { override val x: Int = 1 } // bad override -- why?
+trait VarForCLazyOvr extends CLazy { override var x: Int = 1 } // bad override -- why?
+trait DefForCLazyOvr extends CLazy { override def x: Int = 1 } // bad override -- why?
+
+class CValForCVal extends CVal { val x: Int = 1 } // needs override
+class CVarForCVal extends CVal { var x: Int = 1 } // needs override
+class CDefForCVal extends CVal { def x: Int = 1 } // needs override
+class CValForCVar extends CVar { val x: Int = 1 } // needs override
+class CVarForCVar extends CVar { var x: Int = 1 } // needs override
+class CDefForCVar extends CVar { def x: Int = 1 } // needs override
+class CValForCLazy extends CLazy { val x: Int = 1 } // needs override
+class CVarForCLazy extends CLazy { var x: Int = 1 } // needs override
+class CDefForCLazy extends CLazy { def x: Int = 1 } // needs override
+
+class CValForCValOvr extends CVal { override val x: Int = 1 } // override ok
+class CVarForCValOvr extends CVal { override var x: Int = 1 } // bad override
+class CDefForCValOvr extends CVal { override def x: Int = 1 } // bad override
+class CValForCVarOvr extends CVar { override val x: Int = 1 } // bad override -- unsound if used in path and var changes
+class CVarForCVarOvr extends CVar { override var x: Int = 1 } // bad override -- why?
+class CDefForCVarOvr extends CVar { override def x: Int = 1 } // bad override -- why?
+class CValForCLazyOvr extends CLazy { override val x: Int = 1 } // bad override -- why?
+class CVarForCLazyOvr extends CLazy { override var x: Int = 1 } // bad override -- why?
+class CDefForCLazyOvr extends CLazy { override def x: Int = 1 } // bad override -- why?
diff --git a/test/files/neg/trait_fields_deprecated_overriding.check b/test/files/neg/trait_fields_deprecated_overriding.check
new file mode 100644
index 0000000000..89dfa5c295
--- /dev/null
+++ b/test/files/neg/trait_fields_deprecated_overriding.check
@@ -0,0 +1,6 @@
+trait_fields_deprecated_overriding.scala:8: warning: overriding value x in trait DeprecatedOverriding is deprecated
+ override val x = 2
+ ^
+error: No warnings can be incurred under -Xfatal-warnings.
+one warning found
+one error found
diff --git a/test/files/neg/trait_fields_deprecated_overriding.flags b/test/files/neg/trait_fields_deprecated_overriding.flags
new file mode 100644
index 0000000000..c6bfaf1f64
--- /dev/null
+++ b/test/files/neg/trait_fields_deprecated_overriding.flags
@@ -0,0 +1 @@
+-deprecation -Xfatal-warnings
diff --git a/test/files/neg/trait_fields_deprecated_overriding.scala b/test/files/neg/trait_fields_deprecated_overriding.scala
new file mode 100644
index 0000000000..e7d722c92f
--- /dev/null
+++ b/test/files/neg/trait_fields_deprecated_overriding.scala
@@ -0,0 +1,11 @@
+package scala
+
+trait DeprecatedOverriding {
+ @deprecatedOverriding val x = 1
+}
+
+class COverride extends DeprecatedOverriding {
+ override val x = 2
+}
+
+class CSynthImpl extends DeprecatedOverriding \ No newline at end of file
diff --git a/test/files/neg/trait_fields_var_override.check b/test/files/neg/trait_fields_var_override.check
new file mode 100644
index 0000000000..7245c78b09
--- /dev/null
+++ b/test/files/neg/trait_fields_var_override.check
@@ -0,0 +1,5 @@
+trait_fields_var_override.scala:2: error: overriding variable end in trait SizeChangeEvent of type Int;
+ variable end cannot override a mutable variable
+class BackedUpListIterator[E](override protected var end: Int) extends SizeChangeEvent
+ ^
+one error found
diff --git a/test/files/neg/trait_fields_var_override.scala b/test/files/neg/trait_fields_var_override.scala
new file mode 100644
index 0000000000..f61ba09eec
--- /dev/null
+++ b/test/files/neg/trait_fields_var_override.scala
@@ -0,0 +1,2 @@
+trait SizeChangeEvent { protected var end: Int = 1 }
+class BackedUpListIterator[E](override protected var end: Int) extends SizeChangeEvent
diff --git a/test/files/neg/unit-returns-value.check b/test/files/neg/unit-returns-value.check
index f30a506ebe..7ebfbfde29 100644
--- a/test/files/neg/unit-returns-value.check
+++ b/test/files/neg/unit-returns-value.check
@@ -1,13 +1,13 @@
-unit-returns-value.scala:4: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+unit-returns-value.scala:4: warning: a pure expression does nothing in statement position
if (b) return 5
^
unit-returns-value.scala:4: warning: enclosing method f has result type Unit: return value discarded
if (b) return 5
^
-unit-returns-value.scala:22: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+unit-returns-value.scala:22: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
i1 // warn
^
-unit-returns-value.scala:23: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+unit-returns-value.scala:23: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
i2 // warn
^
error: No warnings can be incurred under -Xfatal-warnings.
diff --git a/test/files/neg/val_infer.check b/test/files/neg/val_infer.check
new file mode 100644
index 0000000000..711450add9
--- /dev/null
+++ b/test/files/neg/val_infer.check
@@ -0,0 +1,6 @@
+val_infer.scala:3: error: type mismatch;
+ found : String("")
+ required: Int
+ trait Sub extends Base { def foo = "" }
+ ^
+one error found
diff --git a/test/files/neg/val_infer.scala b/test/files/neg/val_infer.scala
new file mode 100644
index 0000000000..7fe8393749
--- /dev/null
+++ b/test/files/neg/val_infer.scala
@@ -0,0 +1,4 @@
+class Test {
+ trait Base { def foo: Int }
+ trait Sub extends Base { def foo = "" }
+} \ No newline at end of file
diff --git a/test/files/neg/val_sig_infer_match.check b/test/files/neg/val_sig_infer_match.check
new file mode 100644
index 0000000000..704c99cf84
--- /dev/null
+++ b/test/files/neg/val_sig_infer_match.check
@@ -0,0 +1,4 @@
+val_sig_infer_match.scala:21: error: value y is not a member of A
+ def m = f.y // doesn't compile anymore
+ ^
+one error found
diff --git a/test/files/neg/val_sig_infer_match.scala b/test/files/neg/val_sig_infer_match.scala
new file mode 100644
index 0000000000..fb8aa66d56
--- /dev/null
+++ b/test/files/neg/val_sig_infer_match.scala
@@ -0,0 +1,22 @@
+class A
+
+class B extends A {
+ def y: Int = 0
+}
+
+class B1 extends B
+class B2 extends B
+
+class C {
+ def f: A = null
+}
+
+class D extends C {
+ def s = ""
+ override final val f = s match {
+ case "" => new B1
+ case _ => new B2
+ }
+
+ def m = f.y // doesn't compile anymore
+} \ No newline at end of file
diff --git a/test/files/neg/val_sig_infer_struct.check b/test/files/neg/val_sig_infer_struct.check
new file mode 100644
index 0000000000..26efbbc3f4
--- /dev/null
+++ b/test/files/neg/val_sig_infer_struct.check
@@ -0,0 +1,4 @@
+val_sig_infer_struct.scala:7: error: value foo is not a member of Object
+ def bar = f.foo
+ ^
+one error found
diff --git a/test/files/neg/val_sig_infer_struct.scala b/test/files/neg/val_sig_infer_struct.scala
new file mode 100644
index 0000000000..e88340337c
--- /dev/null
+++ b/test/files/neg/val_sig_infer_struct.scala
@@ -0,0 +1,8 @@
+class C {
+ def f: Object = this
+}
+
+class D extends C {
+ override val f = new Object { def foo = 1 }
+ def bar = f.foo
+} \ No newline at end of file
diff --git a/test/files/neg/variances.check b/test/files/neg/variances.check
index cb1a60a632..3c1545a375 100644
--- a/test/files/neg/variances.check
+++ b/test/files/neg/variances.check
@@ -19,7 +19,7 @@ variances.scala:74: error: covariant type A occurs in contravariant position in
variances.scala:89: error: covariant type T occurs in invariant position in type T of type A
type A = T
^
-variances.scala:90: error: covariant type T occurs in contravariant position in type => test.TestAlias.B[C.this.A] of method foo
+variances.scala:90: error: covariant type A occurs in contravariant position in type => test.TestAlias.B[C.this.A] of method foo
def foo: B[A]
^
8 errors found
diff --git a/test/files/neg/warn-unused-privates.check b/test/files/neg/warn-unused-privates.check
index 4876ed8fc2..2e93f338bb 100644
--- a/test/files/neg/warn-unused-privates.check
+++ b/test/files/neg/warn-unused-privates.check
@@ -19,10 +19,7 @@ warn-unused-privates.scala:36: warning: private val in class Boppy is never used
warn-unused-privates.scala:43: warning: private var in trait Accessors is never used
private var v1: Int = 0 // warn
^
-warn-unused-privates.scala:43: warning: private setter in trait Accessors is never used
- private var v1: Int = 0 // warn
- ^
-warn-unused-privates.scala:44: warning: private setter in trait Accessors is never used
+warn-unused-privates.scala:44: warning: private var in trait Accessors is never used
private var v2: Int = 0 // warn, never set
^
warn-unused-privates.scala:45: warning: private var in trait Accessors is never used
@@ -65,5 +62,5 @@ warn-unused-privates.scala:103: warning: local type OtherThing is never used
type OtherThing = String // warn
^
error: No warnings can be incurred under -Xfatal-warnings.
-22 warnings found
+21 warnings found
one error found
diff --git a/test/files/pos/MailBox.scala b/test/files/pos/MailBox.scala
index 8e27bd362d..6bb25adb19 100644
--- a/test/files/pos/MailBox.scala
+++ b/test/files/pos/MailBox.scala
@@ -1,6 +1,6 @@
package test;
-import scala.actors.TIMEOUT;
+object TIMEOUT
class MailBox {
diff --git a/test/files/pos/SI-7060.flags b/test/files/pos/SI-7060.flags
deleted file mode 100644
index c926ad6493..0000000000
--- a/test/files/pos/SI-7060.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yinline -Ydead-code
diff --git a/test/files/pos/SI-7060.scala b/test/files/pos/SI-7060.scala
deleted file mode 100644
index c87620e020..0000000000
--- a/test/files/pos/SI-7060.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object Test {
-
- @inline final def mbarray_apply_minibox(array: Any, tag: Byte): Long =
- if (tag == 0) {
- array.asInstanceOf[Array[Long]](0)
- } else
- array.asInstanceOf[Array[Byte]](0).toLong
-
- def crash_method(): Unit =
- mbarray_apply_minibox(null, 0)
-}
diff --git a/test/files/pos/alladin763.scala b/test/files/pos/alladin763.scala
new file mode 100644
index 0000000000..29c9b25318
--- /dev/null
+++ b/test/files/pos/alladin763.scala
@@ -0,0 +1,37 @@
+// Test from http://lrytz.github.io/scala-aladdin-bugtracker/displayItem.do%3Fid=763.html
+// and expanded with package object variants
+
+
+trait Foo { type T; def apply() : T }
+object e extends Foo { type T = Int; def apply() = 42 }
+
+package p {
+ trait T[X] { def O : { def apply(): X } }
+ object `package` extends T[Int] {
+ def O: { def apply(): Int } = new { def apply(): Int = 42 }
+ }
+
+ object Test {
+ val x: Int = O()
+ }
+}
+
+object Test {
+
+ val f = new Foo { type T = Int; def apply() = 42 }
+
+ def main(args: Array[String]): Unit = {
+ val g = new Foo { type T = Int; def apply() = 42 }
+
+ (e: Foo)()
+ val ee: Int = e()
+
+ (f: Foo)()
+ val ff: Int = f()
+
+ (g: Foo)()
+ val gg: Int = g()
+
+ val pp: Int = p.O()
+ }
+}
diff --git a/test/files/pos/arrays2.scala b/test/files/pos/arrays2.scala
index 795c486e37..b770d21b8a 100644
--- a/test/files/pos/arrays2.scala
+++ b/test/files/pos/arrays2.scala
@@ -17,7 +17,7 @@ object arrays4 {
// #2461
object arrays3 {
- import scala.collection.JavaConversions._
+ import collection.convert.ImplicitConversions._
def apply[X](xs : X*) : java.util.List[X] = java.util.Arrays.asList(xs: _*)
}
diff --git a/test/files/pos/constant-warning.check b/test/files/pos/constant-warning.check
new file mode 100644
index 0000000000..f7df2165d1
--- /dev/null
+++ b/test/files/pos/constant-warning.check
@@ -0,0 +1,4 @@
+constant-warning.scala:2: warning: Evaluation of a constant expression results in an arithmetic error: / by zero
+ val fails = 1 + 2 / (3 - 2 - 1)
+ ^
+one warning found
diff --git a/test/files/pos/constant-warning.flags b/test/files/pos/constant-warning.flags
new file mode 100644
index 0000000000..d00cbbe77b
--- /dev/null
+++ b/test/files/pos/constant-warning.flags
@@ -0,0 +1 @@
+-Xlint:constant
diff --git a/test/files/pos/constant-warning.scala b/test/files/pos/constant-warning.scala
new file mode 100644
index 0000000000..c8ca8823e7
--- /dev/null
+++ b/test/files/pos/constant-warning.scala
@@ -0,0 +1,3 @@
+object Test {
+ val fails = 1 + 2 / (3 - 2 - 1)
+}
diff --git a/test/files/pos/fields_widen_trait_var.scala b/test/files/pos/fields_widen_trait_var.scala
new file mode 100644
index 0000000000..0ea9d9629a
--- /dev/null
+++ b/test/files/pos/fields_widen_trait_var.scala
@@ -0,0 +1,4 @@
+// check that the `var x` below is assigned the type `Int`, and not `Constant(0)`,
+// and that we can assign to it (if it gets a constant type, the `x` in `x = 42`
+// is constant-folded to `0` and we can't find a setter..
+trait C { protected final var x = 0; x = 42 }
diff --git a/test/files/pos/fun_undo_eta.scala b/test/files/pos/fun_undo_eta.scala
new file mode 100644
index 0000000000..466b0e2629
--- /dev/null
+++ b/test/files/pos/fun_undo_eta.scala
@@ -0,0 +1,10 @@
+class Test {
+ def m(i: Int) = i
+
+ def expectWild[A](f: A) = ???
+ def expectFun[A](f: A => Int) = ???
+
+ expectWild((i => m(i))) // manual eta expansion
+ expectWild(m(_)) // have to undo eta expansion with wildcard expected type
+ expectFun(m(_)) // have to undo eta expansion with function expected type
+}
diff --git a/test/files/pos/functions.scala b/test/files/pos/functions.scala
index 0207523dde..25d1c46eac 100644
--- a/test/files/pos/functions.scala
+++ b/test/files/pos/functions.scala
@@ -1,4 +1,6 @@
-import scala.actors.Actor
+object Actor {
+ def receive[A](f: PartialFunction[Any, A]): A = ???
+}
object Test {
diff --git a/test/files/pos/hkgadt.scala b/test/files/pos/hkgadt.scala
index efd7d3df21..5719c752cd 100644
--- a/test/files/pos/hkgadt.scala
+++ b/test/files/pos/hkgadt.scala
@@ -1,18 +1,35 @@
-package test
-
object HKGADT {
sealed trait Foo[F[_]]
final case class Bar() extends Foo[List]
def frob[F[_]](foo: Foo[F]): F[Int] =
foo match {
- case Bar() =>
- List(1)
+ case Bar() => List(1)
+ }
+
+ sealed trait Foo1[F]
+ final case class Bar1() extends Foo1[Int]
+ def frob1[A](foo: Foo1[A]): A = foo match {
+ case Bar1() => 1
+ }
+}
+
+object HKGADT2 {
+ sealed trait Foo[F[_]]
+ final case class Bar() extends Foo[List]
+ final case class Baz() extends Foo[Set]
+
+ def frob[F[_]](foo: Foo[F]): F[Int] =
+ foo match {
+ case Bar() => List(1)
+ case Baz() => Set(1)
}
sealed trait Foo1[F]
final case class Bar1() extends Foo1[Int]
- def frob1[A](foo: Foo1[A]) = foo match {
+ final case class Baz1() extends Foo1[Boolean]
+ def frob1[A](foo: Foo1[A]): A = foo match {
case Bar1() => 1
+ case Baz1() => true
}
}
diff --git a/test/files/presentation/t4287c.flags b/test/files/pos/infer_override_def_args.flags
index d1a8244169..d1a8244169 100644
--- a/test/files/presentation/t4287c.flags
+++ b/test/files/pos/infer_override_def_args.flags
diff --git a/test/files/pos/infer_override_def_args.scala b/test/files/pos/infer_override_def_args.scala
new file mode 100644
index 0000000000..ac10720c81
--- /dev/null
+++ b/test/files/pos/infer_override_def_args.scala
@@ -0,0 +1,5 @@
+abstract class A { def foo(a: Int): A }
+class B extends A {
+ implicit def spackle(x: Int): A = new B
+ def foo(a) = a
+} \ No newline at end of file
diff --git a/test/files/pos/inline-access-levels.flags b/test/files/pos/inline-access-levels.flags
index 882f40f050..faa7d2b186 100644
--- a/test/files/pos/inline-access-levels.flags
+++ b/test/files/pos/inline-access-levels.flags
@@ -1 +1 @@
--optimise -Xfatal-warnings -Yinline-warnings
+-opt:l:classpath -Xfatal-warnings -opt-warnings
diff --git a/test/files/pos/inliner2.flags b/test/files/pos/inliner2.flags
deleted file mode 100644
index ea03113c66..0000000000
--- a/test/files/pos/inliner2.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/inliner2.scala b/test/files/pos/inliner2.scala
deleted file mode 100644
index bc83e04312..0000000000
--- a/test/files/pos/inliner2.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-// This isn't actually testing much, because no warning is emitted in versions
-// before the fix which comes with this because the method isn't even considered
-// for inlining due to the bug.
-class A {
- private var debug = false
- @inline private def ifelse[T](cond: => Boolean, ifPart: => T, elsePart: => T): T =
- if (cond) ifPart else elsePart
-
- final def bob1() = ifelse(debug, 1, 2)
- final def bob2() = if (debug) 1 else 2
-}
-// Cool:
-//
-// % ls -1 /tmp/2901/
-// A$$anonfun$bob1$1.class
-// A$$anonfun$bob1$2.class
-// A$$anonfun$bob1$3.class
-// A.class
-// % ls -1 /tmp/trunk
-// A.class
-//
-// Observations:
-//
-// (1) The inlined version accesses the field: the explicit one calls the accessor.
-// (2) The inlined version fails to eliminate boxing. With reference types it emits
-// an unneeded checkcast.
-// (3) The private var debug is mangled to A$$debug, but after inlining it is never accessed
-// from outside of the class and doesn't need mangling.
-// (4) We could forego emitting bytecode for ifelse entirely if it has been
-// inlined at all sites.
-//
-// Generated bytecode for the above:
-//
-// public final int bob1();
-// Code:
-// Stack=1, Locals=1, Args_size=1
-// 0: aload_0
-// 1: getfield #11; //Field A$$debug:Z
-// 4: ifeq 14
-// 7: iconst_1
-// 8: invokestatic #41; //Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
-// 11: goto 18
-// 14: iconst_2
-// 15: invokestatic #41; //Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
-// 18: invokestatic #45; //Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
-// 21: ireturn
-//
-// public final int bob2();
-// Code:
-// Stack=1, Locals=1, Args_size=1
-// 0: aload_0
-// 1: invokevirtual #48; //Method A$$debug:()Z
-// 4: ifeq 11
-// 7: iconst_1
-// 8: goto 12
-// 11: iconst_2
-// 12: ireturn
diff --git a/test/files/pos/issue244.scala b/test/files/pos/issue244.scala
new file mode 100644
index 0000000000..f9189c9313
--- /dev/null
+++ b/test/files/pos/issue244.scala
@@ -0,0 +1,2 @@
+trait T { lazy val overloaded: String = "a" }
+class C extends T { def overloaded(a: String): String = "b" }
diff --git a/test/files/pos/java-type-annotations/NotNull.java b/test/files/pos/java-type-annotations/NotNull.java
new file mode 100644
index 0000000000..2716fe1a99
--- /dev/null
+++ b/test/files/pos/java-type-annotations/NotNull.java
@@ -0,0 +1,6 @@
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+public @interface NotNull {
+}
diff --git a/test/files/pos/java-type-annotations/Test.java b/test/files/pos/java-type-annotations/Test.java
new file mode 100644
index 0000000000..d6bda1dedb
--- /dev/null
+++ b/test/files/pos/java-type-annotations/Test.java
@@ -0,0 +1,4 @@
+public class Test {
+ static class C<@NotNull T> {};
+ @NotNull String foo() { return ""; }
+}
diff --git a/test/files/pos/javaConversions-2.10-ambiguity.scala b/test/files/pos/javaConversions-2.10-ambiguity.scala
index c4aad6cbfc..b08568f475 100644
--- a/test/files/pos/javaConversions-2.10-ambiguity.scala
+++ b/test/files/pos/javaConversions-2.10-ambiguity.scala
@@ -1,5 +1,5 @@
-import collection.{JavaConversions, mutable, concurrent}
-import JavaConversions._
+import collection.{mutable, concurrent}
+import collection.convert.ImplicitConversionsToScala._
import java.util.concurrent.{ConcurrentHashMap => CHM}
object Bar {
diff --git a/test/files/pos/javaConversions-2.10-regression.scala b/test/files/pos/javaConversions-2.10-regression.scala
index 7c7ff03b55..8d84c92b61 100644
--- a/test/files/pos/javaConversions-2.10-regression.scala
+++ b/test/files/pos/javaConversions-2.10-regression.scala
@@ -1,10 +1,10 @@
-import collection.{JavaConversions, mutable, concurrent}
-import JavaConversions._
+import collection.{convert, mutable, concurrent, JavaConverters}
+import convert.ImplicitConversionsToScala._
import java.util.concurrent.{ConcurrentHashMap => CHM}
object Foo {
def buildCache2_9_simple[K <: AnyRef, V <: AnyRef]: concurrent.Map[K, V] =
- mapAsScalaConcurrentMap(new CHM())
+ JavaConverters.mapAsScalaConcurrentMap(new CHM())
def buildCache2_9_implicit[K <: AnyRef, V <: AnyRef]: concurrent.Map[K, V] =
new CHM[K, V]()
diff --git a/test/files/pos/list-optim-check.flags b/test/files/pos/list-optim-check.flags
deleted file mode 100644
index 49d036a887..0000000000
--- a/test/files/pos/list-optim-check.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize
diff --git a/test/files/pos/list-optim-check.scala b/test/files/pos/list-optim-check.scala
deleted file mode 100644
index f6e6ddec77..0000000000
--- a/test/files/pos/list-optim-check.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-// Tests a map known to crash in optimizer with faster List map in SI-8240.
-// Equivalent tests for collect and flatmap do not crash, but are provided
-// anyway.
-// See ticket SI-8334 for optimizer bug.
-// TODO - Remove this test once SI-8334 is fixed and has its own test.
-class A {
- def f: Boolean = {
- val xs = Nil map (_ => return false)
- true
- }
-
- def g: Boolean = {
- val xs = Nil collect { case _ => return false }
- true
- }
-
- def h: Boolean = {
- val xs = Nil flatMap { _ => return false }
- true
- }
-}
diff --git a/test/files/pos/lub-from-hell.scala b/test/files/pos/lub-from-hell.scala
new file mode 100644
index 0000000000..cb4b1733c7
--- /dev/null
+++ b/test/files/pos/lub-from-hell.scala
@@ -0,0 +1,6 @@
+class Test {
+ trait Tree
+ def foo(b: Boolean, buf: collection.mutable.ArrayBuffer[Any], acc: StringBuilder) = if (b) buf else acc
+}
+// This test case minimizes a case that failed to compile due to a bug in my work on
+// SI-5294. After refining my patches, it compiles again, as expected. \ No newline at end of file
diff --git a/test/files/pos/native-warning.scala b/test/files/pos/native-warning.scala
index f721a57e8f..a2918c11b5 100644
--- a/test/files/pos/native-warning.scala
+++ b/test/files/pos/native-warning.scala
@@ -1,3 +1,7 @@
class A {
@native def setup(): Unit
+
+ // also kosher
+ @native private def f(): Unit
+ @native final def g(): Unit
}
diff --git a/test/files/pos/overloaded_ho_fun.scala b/test/files/pos/overloaded_ho_fun.scala
new file mode 100644
index 0000000000..2699ad35f8
--- /dev/null
+++ b/test/files/pos/overloaded_ho_fun.scala
@@ -0,0 +1,51 @@
+import scala.math.Ordering
+import scala.reflect.ClassTag
+
+trait Sam { def apply(x: Int): String }
+trait SamP[U] { def apply(x: Int): U }
+
+class OverloadedFun[T](x: T) {
+ def foo(f: T => String): String = f(x)
+ def foo(f: Any => T): T = f("a")
+
+ def poly[U](f: Int => String): String = f(1)
+ def poly[U](f: Int => U): U = f(1)
+
+ def polySam[U](f: Sam): String = f(1)
+ def polySam[U](f: SamP[U]): U = f(1)
+
+ // check that we properly instantiate java.util.function.Function's type param to String
+ def polyJavaSam(f: String => String) = 1
+ def polyJavaSam(f: java.util.function.Function[String, String]) = 2
+}
+
+class StringLike(xs: String) {
+ def map[A](f: Char => A): Array[A] = ???
+ def map(f: Char => Char): String = ???
+}
+
+object Test {
+ val of = new OverloadedFun[Int](1)
+
+ of.foo(_.toString)
+
+ of.poly(x => x / 2 )
+ of.polySam(x => x / 2 )
+ of.polyJavaSam(x => x)
+
+ val sl = new StringLike("a")
+ sl.map(_ == 'a') // : Array[Boolean]
+ sl.map(x => 'a') // : String
+}
+
+object sorting {
+ def stableSort[K: ClassTag](a: Seq[K], f: (K, K) => Boolean): Array[K] = ???
+ def stableSort[L: ClassTag](a: Array[L], f: (L, L) => Boolean): Unit = ???
+
+ stableSort(??? : Seq[Boolean], (x: Boolean, y: Boolean) => x && !y)
+}
+
+// trait Bijection[A, B] extends (A => B) {
+// def andThen[C](g: Bijection[B, C]): Bijection[A, C] = ???
+// def compose[T](g: Bijection[T, A]) = g andThen this
+// }
diff --git a/test/files/pos/sammy_ctor_arg.scala b/test/files/pos/sammy_ctor_arg.scala
new file mode 100644
index 0000000000..3c556d59f0
--- /dev/null
+++ b/test/files/pos/sammy_ctor_arg.scala
@@ -0,0 +1,4 @@
+trait Fun[A, B] { def apply(a: A): B }
+// can't do sam expansion until the sam body def is a static method in the sam class, and not a local method in a block'
+class C(f: Fun[Int, String])
+class Test extends C(s => "a") \ No newline at end of file
diff --git a/test/files/pos/sammy_exist.flags b/test/files/pos/sammy_exist.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_exist.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sammy_extends_function.scala b/test/files/pos/sammy_extends_function.scala
new file mode 100644
index 0000000000..e8cf5d8749
--- /dev/null
+++ b/test/files/pos/sammy_extends_function.scala
@@ -0,0 +1,4 @@
+// https://github.com/scala/scala-dev/issues/206
+
+trait T extends Function1[String, String]
+object O { (x => x): T }
diff --git a/test/files/pos/sammy_implicit.scala b/test/files/pos/sammy_implicit.scala
new file mode 100644
index 0000000000..ab63fc729e
--- /dev/null
+++ b/test/files/pos/sammy_implicit.scala
@@ -0,0 +1,11 @@
+trait Fun[A, B] { def apply(a: A): B }
+
+abstract class SamImplicitConvert {
+ class Lst[T]
+ abstract class Str { def getBytes: Array[Int] }
+ def flatMap[B](f: Fun[Str, Lst[B]]): List[B] = ???
+
+ implicit def conv(xs: Array[Int]): Lst[Int]
+
+ def encoded = flatMap (_.getBytes)
+}
diff --git a/test/files/pos/sammy_infer_argtype_subtypes.scala b/test/files/pos/sammy_infer_argtype_subtypes.scala
new file mode 100644
index 0000000000..63966f879e
--- /dev/null
+++ b/test/files/pos/sammy_infer_argtype_subtypes.scala
@@ -0,0 +1,6 @@
+trait Fun[A, B] { def apply(a: A): B }
+
+class SamInferResult {
+ def foreach[U](f: Fun[String, U]): U = ???
+ def foo = foreach(println)
+} \ No newline at end of file
diff --git a/test/files/pos/sammy_inferargs.scala b/test/files/pos/sammy_inferargs.scala
new file mode 100644
index 0000000000..10d9b4f0dd
--- /dev/null
+++ b/test/files/pos/sammy_inferargs.scala
@@ -0,0 +1,6 @@
+trait Proc { def apply(): Unit }
+class Test {
+ val initCode = List[Proc]()
+ initCode foreach { proc => proc() }
+
+}
diff --git a/test/files/pos/sammy_overload.flags b/test/files/pos/sammy_overload.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_overload.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sammy_overload.scala b/test/files/pos/sammy_overload.scala
index 5472248f4d..6a3c88ec55 100644
--- a/test/files/pos/sammy_overload.scala
+++ b/test/files/pos/sammy_overload.scala
@@ -6,4 +6,29 @@ object Test {
def foo(x: String): Unit = ???
def foo(): Unit = ???
val f: Consumer[_ >: String] = foo
-} \ No newline at end of file
+}
+
+trait A[A, B] { def apply(a: A): B }
+
+class ArityDisambiguate {
+ object O {
+ def m(a: A[Int, Int]) = 0
+ def m(f: (Int, Int) => Int) = 1
+ }
+
+ O.m(x => x) // ok
+ O.m((x, y) => x) // ok
+}
+
+class InteractionWithImplicits {
+ object O {
+ class Ev
+ implicit object E1 extends Ev
+ implicit object E2 extends Ev
+ def m(a: A[Int, Int])(implicit ol: E1.type) = 0
+ def m(a: A[String, Int])(implicit ol: E2.type) = 1
+ }
+
+ O.m((x: Int) => 1) // ok
+ O.m((x: String) => 1) // ok
+}
diff --git a/test/files/pos/sammy_override.flags b/test/files/pos/sammy_override.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_override.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sammy_poly.flags b/test/files/pos/sammy_poly.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_poly.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sammy_poly.scala b/test/files/pos/sammy_poly.scala
index c629be7166..ba10baea49 100644
--- a/test/files/pos/sammy_poly.scala
+++ b/test/files/pos/sammy_poly.scala
@@ -1,7 +1,12 @@
// test synthesizeSAMFunction where the sam type is not fully defined
-class T {
- trait F[T, U] { def apply(x: T): U }
- // NOTE: the f(x) desugaring for now assumes the single abstract method is called 'apply'
+trait F[T, R]{ def apply(x: T): R }
+
+class PolySammy {
+ (x => x + 1): F[Int, Int]
+ ((x: Int) => x + 1): F[Int, Int]
+ ((x: String) => 1): F[String, Int]
+ ((x: Object) => 1): F[String, Int]
+
def app[T, U](x: T)(f: F[T, U]): U = f(x)
app(1)(x => List(x))
-} \ No newline at end of file
+}
diff --git a/test/files/pos/sammy_scope.flags b/test/files/pos/sammy_scope.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_scope.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sammy_scope.scala b/test/files/pos/sammy_scope.scala
index 8f1fe7058e..9d35501a47 100644
--- a/test/files/pos/sammy_scope.scala
+++ b/test/files/pos/sammy_scope.scala
@@ -1,8 +1,8 @@
// test synthesizeSAMFunction: scope hygiene
-abstract class SamFun[T1, R] { self =>
+trait SamFun[T1, R] { self =>
def apply(v1: T1): R
// this should type check, as the apply ref is equivalent to self.apply
// it shouldn't resolve to the sam's apply that's synthesized (that wouldn't type check, hence the pos test)
def compose[A](g: SamFun[A, T1]): SamFun[A, R] = { x => apply(g(x)) }
-} \ No newline at end of file
+}
diff --git a/test/files/pos/sammy_single.flags b/test/files/pos/sammy_single.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_single.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sammy_twice.flags b/test/files/pos/sammy_twice.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/sammy_twice.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/sd219.scala b/test/files/pos/sd219.scala
new file mode 100644
index 0000000000..3c3f4962f0
--- /dev/null
+++ b/test/files/pos/sd219.scala
@@ -0,0 +1,11 @@
+class Global { class Name }
+
+trait CommonPrintUtils {
+ val global: Global
+
+ lazy val precedence: global.Name => Int = ???
+}
+
+trait CompilerProvider { val global: Global = ??? }
+
+class AbstractPrinter extends CommonPrintUtils with CompilerProvider \ No newline at end of file
diff --git a/test/files/pos/sealed-final.flags b/test/files/pos/sealed-final.flags
deleted file mode 100644
index cfabf7a5b4..0000000000
--- a/test/files/pos/sealed-final.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xfatal-warnings -Yinline-warnings -optimise \ No newline at end of file
diff --git a/test/files/pos/sealed-final.scala b/test/files/pos/sealed-final.scala
deleted file mode 100644
index bdedb5c1f6..0000000000
--- a/test/files/pos/sealed-final.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-sealed abstract class Foo {
- @inline def bar(x: Int) = x + 1
-}
-object Foo {
- def mkFoo(): Foo = new Baz2
-}
-
-object Baz1 extends Foo
-final class Baz2 extends Foo
-
-object Test {
- // bar should be inlined now
- def f = Foo.mkFoo() bar 10
-}
diff --git a/test/files/pos/shapeless-regression.scala b/test/files/pos/shapeless-regression.scala
new file mode 100644
index 0000000000..f3a1ed1ba0
--- /dev/null
+++ b/test/files/pos/shapeless-regression.scala
@@ -0,0 +1,16 @@
+class W[T <: AnyRef](val t: T) {
+ val v: T {} = t
+}
+
+object W {
+ def apply[T <: AnyRef](t: T) = new W[t.type](t)
+}
+
+object RightAssoc {
+ def ra_:[T](t: T): Unit = ()
+}
+
+object Boom {
+ W("fooo").v ra_: RightAssoc
+}
+
diff --git a/test/files/pos/t2171.flags b/test/files/pos/t2171.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/pos/t2171.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/pos/t2171.scala b/test/files/pos/t2171.scala
deleted file mode 100644
index 6c754c76a6..0000000000
--- a/test/files/pos/t2171.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-final object test {
- def logIgnoredException(msg: => String) =
- try 0 catch { case ex => println(msg) }
-
- def main (args: Array[String]): Unit =
- while (true) logIgnoredException ("...")
-}
diff --git a/test/files/pos/t2293.scala b/test/files/pos/t2293.scala
index 65f717f851..baa44552c9 100644
--- a/test/files/pos/t2293.scala
+++ b/test/files/pos/t2293.scala
@@ -1,5 +1,5 @@
-import scala.collection.JavaConversions._
+import scala.collection.convert.ImplicitConversionsToJava._
object Test {
val m: java.util.Map[String,String] = collection.mutable.Map("1"->"2")
-} \ No newline at end of file
+}
diff --git a/test/files/pos/t2377b/Q.java b/test/files/pos/t2377b/Q.java
new file mode 100644
index 0000000000..fbf9c776e9
--- /dev/null
+++ b/test/files/pos/t2377b/Q.java
@@ -0,0 +1,13 @@
+public class Q {
+
+ public static class Builder {}
+
+ public static class Inner {
+ public static class Builder { public void innerMethod() {} }
+ public Builder foo() { return new Builder(); } // this line gives an error, that Builder is ambiguous
+
+ public Inner.Builder viaSelect() { return new Builder(); } // this line gives an error, that Builder is ambiguous
+ }
+
+}
+
diff --git a/test/files/pos/t2377b/a.scala b/test/files/pos/t2377b/a.scala
new file mode 100644
index 0000000000..3053841589
--- /dev/null
+++ b/test/files/pos/t2377b/a.scala
@@ -0,0 +1,5 @@
+object Test {
+ (new Q.Inner).foo.innerMethod
+ (new Q.Inner).viaSelect.innerMethod
+
+}
diff --git a/test/files/pos/t2712-1.flags b/test/files/pos/t2712-1.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/pos/t2712-1.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/pos/t2712-1.scala b/test/files/pos/t2712-1.scala
new file mode 100644
index 0000000000..4f84c9df5e
--- /dev/null
+++ b/test/files/pos/t2712-1.scala
@@ -0,0 +1,9 @@
+package test
+
+// Original test case from,
+//
+// https://issues.scala-lang.org/browse/SI-2712
+object Test {
+ def meh[M[_], A](x: M[A]): M[A] = x
+ meh{(x: Int) => x} // solves ?M = [X] Int => X and ?A = Int ...
+}
diff --git a/test/files/pos/t2712-2.flags b/test/files/pos/t2712-2.flags
new file mode 100644
index 0000000000..7d49efbb8e
--- /dev/null
+++ b/test/files/pos/t2712-2.flags
@@ -0,0 +1,2 @@
+-Ypartial-unification
+
diff --git a/test/files/pos/t2712-2.scala b/test/files/pos/t2712-2.scala
new file mode 100644
index 0000000000..39f22dd92a
--- /dev/null
+++ b/test/files/pos/t2712-2.scala
@@ -0,0 +1,25 @@
+package test
+
+// See: https://github.com/milessabin/si2712fix-demo/issues/3
+object Test {
+ trait A[T1, T2] { }
+ trait B[T1, T2] { }
+ class C[T] extends A[T, Long] with B[T, Double]
+ class CB extends A[Boolean, Long] with B[Boolean, Double]
+
+ trait A2[T]
+ trait B2[T]
+ class C2[T] extends A2[T] with B2[T]
+ class CB2 extends A2[Boolean] with B2[Boolean]
+
+ def meh[M[_], A](x: M[A]): M[A] = x
+
+ val m0 = meh(new C[Boolean])
+ m0: C[Boolean]
+ val m1 = meh(new CB)
+ m1: A[Boolean, Long]
+ val m2 = meh(new C2[Boolean])
+ m2: C2[Boolean]
+ val m3 = meh(new CB2)
+ m3: A2[Boolean]
+}
diff --git a/test/files/pos/t2712-3.flags b/test/files/pos/t2712-3.flags
new file mode 100644
index 0000000000..7d49efbb8e
--- /dev/null
+++ b/test/files/pos/t2712-3.flags
@@ -0,0 +1,2 @@
+-Ypartial-unification
+
diff --git a/test/files/pos/t2712-3.scala b/test/files/pos/t2712-3.scala
new file mode 100644
index 0000000000..46445f9289
--- /dev/null
+++ b/test/files/pos/t2712-3.scala
@@ -0,0 +1,24 @@
+package test
+
+object Test1 {
+ class Foo[T, F[_]]
+ def meh[M[_[_]], F[_]](x: M[F]): M[F] = x
+ meh(new Foo[Int, List]) // solves ?M = [X[_]]Foo[Int, X[_]] ?A = List ...
+}
+
+object Test2 {
+ trait TC[T]
+ class Foo[F[_], G[_]]
+ def meh[G[_[_]]](g: G[TC]) = ???
+ meh(new Foo[TC, TC]) // solves ?G = [X[_]]Foo[TC, X]
+}
+
+object Test3 {
+ trait TC[F[_]]
+ trait TC2[F[_]]
+ class Foo[F[_[_]], G[_[_]]]
+ new Foo[TC, TC2]
+
+ def meh[G[_[_[_]]]](g: G[TC2]) = ???
+ meh(new Foo[TC, TC2]) // solves ?G = [X[_[_]]]Foo[TC, X]
+}
diff --git a/test/files/pos/t2712-4.flags b/test/files/pos/t2712-4.flags
new file mode 100644
index 0000000000..7d49efbb8e
--- /dev/null
+++ b/test/files/pos/t2712-4.flags
@@ -0,0 +1,2 @@
+-Ypartial-unification
+
diff --git a/test/files/pos/t2712-4.scala b/test/files/pos/t2712-4.scala
new file mode 100644
index 0000000000..3e2e5cddae
--- /dev/null
+++ b/test/files/pos/t2712-4.scala
@@ -0,0 +1,17 @@
+package test
+
+object Test1 {
+ trait X
+ trait Y extends X
+ class Foo[T, U <: X]
+ def meh[M[_ <: A], A](x: M[A]): M[A] = x
+ meh(new Foo[Int, Y])
+}
+
+object Test2 {
+ trait X
+ trait Y extends X
+ class Foo[T, U >: Y]
+ def meh[M[_ >: A], A](x: M[A]): M[A] = x
+ meh(new Foo[Int, X])
+}
diff --git a/test/files/pos/t2712-5.flags b/test/files/pos/t2712-5.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/pos/t2712-5.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/pos/t2712-5.scala b/test/files/pos/t2712-5.scala
new file mode 100644
index 0000000000..ed96d4c06f
--- /dev/null
+++ b/test/files/pos/t2712-5.scala
@@ -0,0 +1,29 @@
+package test
+
+import scala.language.higherKinds
+
+trait Functor[F[_]] {
+ def map[A, B](f: A => B, fa: F[A]): F[B]
+}
+
+object Functor {
+ implicit def function[A]: Functor[({ type l[B] = A => B })#l] =
+ new Functor[({ type l[B] = A => B })#l] {
+ def map[C, B](cb: C => B, ac: A => C): A => B = cb compose ac
+ }
+}
+
+object FunctorSyntax {
+ implicit class FunctorOps[F[_], A](fa: F[A])(implicit F: Functor[F]) {
+ def map[B](f: A => B): F[B] = F.map(f, fa)
+ }
+}
+
+object Test {
+
+ val f: Int => String = _.toString
+
+ import FunctorSyntax._
+
+ f.map((s: String) => s.reverse)
+}
diff --git a/test/files/pos/t2712-6.flags b/test/files/pos/t2712-6.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/pos/t2712-6.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/pos/t2712-6.scala b/test/files/pos/t2712-6.scala
new file mode 100644
index 0000000000..eefe769ad6
--- /dev/null
+++ b/test/files/pos/t2712-6.scala
@@ -0,0 +1,12 @@
+package test
+
+object Tags {
+ type Tagged[A, T] = {type Tag = T; type Self = A}
+
+ type @@[T, Tag] = Tagged[T, Tag]
+
+ trait Disjunction
+
+ def meh[M[_], A](ma: M[A]): M[A] = ma
+ meh(null.asInstanceOf[Int @@ Disjunction])
+}
diff --git a/test/files/pos/t2712-7.flags b/test/files/pos/t2712-7.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/pos/t2712-7.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/pos/t2712-7.scala b/test/files/pos/t2712-7.scala
new file mode 100644
index 0000000000..d9c5243f13
--- /dev/null
+++ b/test/files/pos/t2712-7.scala
@@ -0,0 +1,15 @@
+package test
+
+// Cats Xor, Scalaz \/, scala.util.Either
+sealed abstract class Xor[+A, +B] extends Product with Serializable
+object Xor {
+ final case class Left[+A](a: A) extends (A Xor Nothing)
+ final case class Right[+B](b: B) extends (Nothing Xor B)
+}
+
+object TestXor {
+ import Xor._
+ def meh[F[_], A, B](fa: F[A])(f: A => B): F[B] = ???
+ meh(new Right(23): Xor[Boolean, Int])(_ < 13)
+ meh(new Left(true): Xor[Boolean, Int])(_ < 13)
+}
diff --git a/test/files/pos/t2956/t2956.scala b/test/files/pos/t2956/t2956.scala
index eb6e817465..9b6ae8098f 100644
--- a/test/files/pos/t2956/t2956.scala
+++ b/test/files/pos/t2956/t2956.scala
@@ -1,7 +1,7 @@
-import scala.collection.JavaConversions._
+import scala.collection.convert.ImplicitConversionsToScala._
class Outer {
protected class Inner extends BeanDefinitionVisitor {
protected def visitMap(mapVal: Map[_, _]): Unit = ()
}
-} \ No newline at end of file
+}
diff --git a/test/files/pos/t3234.flags b/test/files/pos/t3234.flags
new file mode 100644
index 0000000000..b88ec8709d
--- /dev/null
+++ b/test/files/pos/t3234.flags
@@ -0,0 +1 @@
+-opt:l:project -opt-warnings -Xfatal-warnings
diff --git a/test/files/neg/t3234.scala b/test/files/pos/t3234.scala
index 1553f1fa05..8c588e5aa9 100644
--- a/test/files/neg/t3234.scala
+++ b/test/files/pos/t3234.scala
@@ -1,19 +1,17 @@
trait Trait1 {
- // need more work before this one works
- // @inline
- def foo2(n: Int) = n*n
+ @inline final def foo2(n: Int) = n*n
}
trait Trait2 {
- @inline def foo3(n: Int) = 1
+ @inline final def foo3(n: Int) = 1
}
class Base extends Trait1 {
- @inline def foo(n: Int) = n
+ @inline final def foo(n: Int) = n
}
object Test extends Base with Trait2 {
def main(args: Array[String]) = {
println(foo(42) + foo2(11) + foo3(2))
}
-} \ No newline at end of file
+}
diff --git a/test/files/pos/t3252.flags b/test/files/pos/t3252.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/pos/t3252.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/pos/t3252.scala b/test/files/pos/t3252.scala
deleted file mode 100644
index 3ecc1e7cef..0000000000
--- a/test/files/pos/t3252.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-class A {
- def f(x : Boolean) : Thread = {
- g {
- x match {
- case false =>
- B.h { }
- }
- }
- }
-
- private def g[T](block : => T) = sys.error("")
-}
-object B {
- def h(block : => Unit) : Nothing = sys.error("")
-}
diff --git a/test/files/pos/t3420.flags b/test/files/pos/t3420.flags
index d37e817882..5eea92d94a 100644
--- a/test/files/pos/t3420.flags
+++ b/test/files/pos/t3420.flags
@@ -1 +1 @@
--optimise -Xfatal-warnings
+-opt-warnings -opt:l:classpath -Xfatal-warnings \ No newline at end of file
diff --git a/test/files/pos/t3430.flags b/test/files/pos/t3430.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/pos/t3430.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/pos/t3430.scala b/test/files/pos/t3430.scala
deleted file mode 100644
index 3129c6276a..0000000000
--- a/test/files/pos/t3430.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-// package com.example
-
-object A {
- def f1(f: String => Boolean) = f("a")
-
- def f2(): Boolean =
- f1 { s1 =>
- f1 { s2 =>
- while (true) { }
- true
- }
- }
-} \ No newline at end of file
diff --git a/test/files/pos/t3688.scala b/test/files/pos/t3688.scala
index d15e9d1a84..58464332d1 100644
--- a/test/files/pos/t3688.scala
+++ b/test/files/pos/t3688.scala
@@ -1,5 +1,5 @@
import collection.mutable
-import collection.JavaConversions._
+import collection.convert.ImplicitConversionsToJava._
import java.{util => ju}
object Test {
@@ -11,4 +11,4 @@ object Test {
object Test2 {
def m[P <% ju.List[Int]](l: P) = 1
m(List(1)) // bug: should compile
-} \ No newline at end of file
+}
diff --git a/test/files/pos/t4365/a_1.scala b/test/files/pos/t4365/a_1.scala
index a24b57772d..e7466e0d48 100644
--- a/test/files/pos/t4365/a_1.scala
+++ b/test/files/pos/t4365/a_1.scala
@@ -9,7 +9,7 @@ trait SeqViewLike[+A,
trait Transformed[+B] extends super[GenSeqViewLike].Transformed[B]
abstract class AbstractTransformed[+B] extends Seq[B] with Transformed[B] {
- def underlying: Coll = error("")
+ def underlying: Coll = sys.error("")
}
trait Reversed extends Transformed[A] with super[GenSeqViewLike].Reversed
diff --git a/test/files/pos/t4365/b_1.scala b/test/files/pos/t4365/b_1.scala
index e1423813f1..1158db6c32 100644
--- a/test/files/pos/t4365/b_1.scala
+++ b/test/files/pos/t4365/b_1.scala
@@ -10,7 +10,7 @@ self =>
trait Transformed[+B] {
def length: Int = 0
- def apply(idx: Int): B = error("")
+ def apply(idx: Int): B = sys.error("")
}
trait Reversed extends Transformed[A] {
diff --git a/test/files/pos/t4579.flags b/test/files/pos/t4579.flags
deleted file mode 100644
index 1182725e86..0000000000
--- a/test/files/pos/t4579.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize \ No newline at end of file
diff --git a/test/files/pos/t482.scala b/test/files/pos/t482.scala
new file mode 100644
index 0000000000..b121c93337
--- /dev/null
+++ b/test/files/pos/t482.scala
@@ -0,0 +1,7 @@
+object Test {
+ class Foo { val z = "foo"; val y : z.type = z }
+
+ val x : ({ val y : z.type } forSome { val z : String }) = new Foo
+
+ val x2 : ({ val y : T } forSome { type T <: String with Singleton }) = new Foo
+}
diff --git a/test/files/pos/t4840.flags b/test/files/pos/t4840.flags
index eb4d19bcb9..768ca4f13b 100644
--- a/test/files/pos/t4840.flags
+++ b/test/files/pos/t4840.flags
@@ -1 +1 @@
--optimise \ No newline at end of file
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/pos/t4914.scala b/test/files/pos/t4914.scala
new file mode 100644
index 0000000000..a6c8ef5a4e
--- /dev/null
+++ b/test/files/pos/t4914.scala
@@ -0,0 +1,20 @@
+trait Type {
+ type S
+}
+
+class ConcreteType extends Type {
+ type S = Double
+}
+
+trait Base {
+ type T <: Type
+ val m: Map[t#S, t#S] forSome { type t <: T with Singleton }
+ val n: Map[x.type#S, x.type#S] forSome { val x: T }
+}
+
+abstract class Derived extends Base {
+ override type T = ConcreteType
+ override val m = Map[Double, Double]()
+ /** This does not work. §3.2.10 indicates that types n is shorthand for type of m. */
+ override val n = Map[Double, Double]()
+}
diff --git a/test/files/pos/t5183.scala b/test/files/pos/t5183.scala
new file mode 100644
index 0000000000..783b8c28dc
--- /dev/null
+++ b/test/files/pos/t5183.scala
@@ -0,0 +1,34 @@
+trait Day
+
+object Test {
+ def foo(t: Int with Day) = t == t
+}
+
+class DayOps(val i: Int with Day) extends AnyVal
+
+case class Test1(d: Int with Day)
+case class Test2(d1: Int with Day, d2: Int with Day)
+
+class User
+class Checkin
+object Example {
+
+ type Tagged[U] = { type Tag = U }
+ type @@[T, U] = T with Tagged[U] // Thanks to @retronym for suggesting this type alias
+
+ class Tagger[U] {
+ def apply[T](t : T) : T @@ U = t.asInstanceOf[T @@ U]
+ }
+ def tag[U] = new Tagger[U]
+
+ // Manual specialization needed here ... specializing apply above doesn't help
+ def tag[U](i : Int) : Int @@ U = i.asInstanceOf[Int @@ U]
+ def tag[U](l : Long) : Long @@ U = l.asInstanceOf[Long @@ U]
+ def tag[U](d : Double) : Double @@ U = d.asInstanceOf[Double @@ U]
+
+ def fetch[A](id: Int @@ A): A = null.asInstanceOf[A]
+
+ def tag[U](arr: Array[Int]):Array[Int @@ U] = arr.asInstanceOf[Array[Int @@ U]]
+
+ tag[User](Array(3, 4, 5)).map(_.toString)
+} \ No newline at end of file
diff --git a/test/files/pos/t5240.scala b/test/files/pos/t5240.scala
index 065d175f2f..ae52c6d69a 100644
--- a/test/files/pos/t5240.scala
+++ b/test/files/pos/t5240.scala
@@ -1,11 +1,3 @@
-
-
-
-
-
-
package object foo {
-
var labels: Array[_ <: String] = null
-
}
diff --git a/test/files/pos/t5294b.scala b/test/files/pos/t5294b.scala
new file mode 100644
index 0000000000..038d2ff806
--- /dev/null
+++ b/test/files/pos/t5294b.scala
@@ -0,0 +1,36 @@
+class Test {
+ def test = {
+
+ val l1 = null: Int #: String #: Boolean #: String #: HNil.type
+
+ type _2 = Succ[Succ[Zero.type]]
+
+ val t1: Boolean = null.asInstanceOf[ l1.type#Drop[_2]#Head ]
+
+ val t2: Boolean = null.asInstanceOf[ l1.type#Apply[_2] ]
+ }
+}
+
+
+sealed trait Nat {
+ type Fold[U, F[_ <: U] <: U, Z <: U] <: U
+}
+
+final object Zero extends Nat {
+ type Fold[U, F[_ <: U] <: U, Z <: U] = Z
+}
+
+final class Succ[N <: Nat] extends Nat {
+ type Fold[U, F[_ <: U] <: U, Z <: U] = F[N#Fold[U, F, Z]]
+}
+
+trait HList {
+ type Head
+ type Tail <: HList
+ type Drop[N <: Nat] = N#Fold[HList, ({ type L[X <: HList] = X#Tail })#L, this.type]
+ type Apply[N <: Nat] = Drop[N]#Head
+}
+
+class #: [H, T <: HList] extends HList { type Head = H; type Tail = T }
+
+object HNil extends HList { type Head = Nothing; type Tail = Nothing }
diff --git a/test/files/pos/t5294c.scala b/test/files/pos/t5294c.scala
new file mode 100644
index 0000000000..2709098988
--- /dev/null
+++ b/test/files/pos/t5294c.scala
@@ -0,0 +1,30 @@
+sealed trait Nat {
+ type IsZero[U, A <: U, B <: U] <: U
+}
+
+final object Zero extends Nat {
+ type IsZero[U, T <: U, F <: U] = T
+}
+
+final class Succ[N <: Nat] extends Nat {
+ type IsZero[U, T <: U, F <: U] = F
+}
+
+trait HList {
+ type Head
+ type Tail <: HList
+ type Drop[N <: Nat] = N#IsZero[HList, this.type, Tail]
+ type Apply[N <: Nat] = Drop[N]#Head // typechecks as HList.this.Head
+}
+
+object Test {
+ type ::[H, T <: HList] = HList { type Head = H; type Tail = T}
+ type HNil <: HList
+ type T = Int :: String :: HNil
+
+ type U = T#Drop[Succ[Zero.type]]#Head
+ type V = T#Apply[Succ[Zero.type]]
+ var u: U = ???
+ var v: V = ???
+ u = v
+}
diff --git a/test/files/pos/t533.scala b/test/files/pos/t533.scala
deleted file mode 100644
index 0a6515fed3..0000000000
--- a/test/files/pos/t533.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-import scala.actors._
-
-object test extends Actor {
- def act() {
- receive {
- case TIMEOUT => Console.println("TIMEOUT")
- //case _ => Console.println("_")
- }
- }
-}
-
diff --git a/test/files/pos/t5644/BoxesRunTime.java b/test/files/pos/t5644/BoxesRunTime.java
index 74c4c6b4b9..2b931519aa 100644
--- a/test/files/pos/t5644/BoxesRunTime.java
+++ b/test/files/pos/t5644/BoxesRunTime.java
@@ -267,10 +267,6 @@ public final class BoxesRunTime
else if (n instanceof java.lang.Float) return hashFromFloat((java.lang.Float)n);
else return n.hashCode();
}
- public static int hashFromObject(Object a) {
- if (a instanceof Number) return hashFromNumber((Number)a);
- else return a.hashCode();
- }
private static int unboxCharOrInt(Object arg1, int code) {
if (code == CHAR)
diff --git a/test/files/pos/t5683.flags b/test/files/pos/t5683.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/pos/t5683.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/pos/t5683.scala b/test/files/pos/t5683.scala
new file mode 100644
index 0000000000..05ab035792
--- /dev/null
+++ b/test/files/pos/t5683.scala
@@ -0,0 +1,23 @@
+object Test {
+ trait NT[X]
+ trait W[W, A] extends NT[Int]
+ type StringW[T] = W[String, T]
+ trait K[M[_], A, B]
+
+ def k[M[_], B](f: Int => M[B]): K[M, Int, B] = null
+
+ val okay1: K[StringW,Int,Int] = k{ (y: Int) => null: StringW[Int] }
+ val okay2 = k[StringW,Int]{ (y: Int) => null: W[String, Int] }
+
+ val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] }
+
+ // remove `extends NT[Int]`, and the last line gives an inference error
+ // rather than a crash.
+ // test/files/pos/t5683.scala:12: error: no type parameters for method k: (f: Int => M[B])Test.K[M,Int,B] exist so that it can be applied to arguments (Int => Test.W[String,Int])
+ // --- because ---
+ // argument expression's type is not compatible with formal parameter type;
+ // found : Int => Test.W[String,Int]
+ // required: Int => ?M[?B]
+ // val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] }
+ // ^
+}
diff --git a/test/files/pos/t5899.scala b/test/files/pos/t5899.scala
index b16f1f84fe..885baca790 100644
--- a/test/files/pos/t5899.scala
+++ b/test/files/pos/t5899.scala
@@ -14,6 +14,7 @@ trait Foo {
Bippy(Stable) match {
case Bippy(nme.WILDCARD) => 1
case Bippy(Stable) => 2 // should not be considered unreachable
+ case Bippy(_) => 3
}
}
} \ No newline at end of file
diff --git a/test/files/pos/t6157.flags b/test/files/pos/t6157.flags
deleted file mode 100644
index 0ebca3e7af..0000000000
--- a/test/files/pos/t6157.flags
+++ /dev/null
@@ -1 +0,0 @@
- -optimize
diff --git a/test/files/pos/t6157.scala b/test/files/pos/t6157.scala
deleted file mode 100644
index 7463989b14..0000000000
--- a/test/files/pos/t6157.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-// SI-6157 - Compiler crash on inlined function and -optimize option
-
-object Test {
- def main(args: Array[String]) {
- Console.println(
- ErrorHandler.defaultIfIOException("String")("String")
- )
- }
-}
-
-import java.io.IOException
-
-object ErrorHandler {
-
- @inline
- def defaultIfIOException[T](default: => T)(closure: => T): T = {
- try {
- closure
- } catch {
- case e: IOException =>
- default
- }
- }
-}
-
diff --git a/test/pending/pos/t6161.scala b/test/files/pos/t6161b.scala
index 5783cc85f2..5783cc85f2 100644
--- a/test/pending/pos/t6161.scala
+++ b/test/files/pos/t6161b.scala
diff --git a/test/files/pos/t6547.flags b/test/files/pos/t6547.flags
deleted file mode 100644
index c9b68d70dc..0000000000
--- a/test/files/pos/t6547.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise
diff --git a/test/files/pos/t6547.scala b/test/files/pos/t6547.scala
deleted file mode 100644
index 53bd798219..0000000000
--- a/test/files/pos/t6547.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-trait ConfigurableDefault[@specialized V] {
- def fillArray(arr: Array[V], v: V) = (arr: Any) match {
- case x: Array[Int] => null
- case x: Array[Long] => v.asInstanceOf[Long]
- }
-}
diff --git a/test/files/pos/t6778.scala b/test/files/pos/t6778.scala
new file mode 100644
index 0000000000..b7483c8fce
--- /dev/null
+++ b/test/files/pos/t6778.scala
@@ -0,0 +1,5 @@
+object test extends AnyRef with App {
+ // Check that random can be called with parenthesis.
+ scala.math.random()
+}
+
diff --git a/test/files/pos/t6895b.flags b/test/files/pos/t6895b.flags
new file mode 100644
index 0000000000..7d49efbb8e
--- /dev/null
+++ b/test/files/pos/t6895b.flags
@@ -0,0 +1,2 @@
+-Ypartial-unification
+
diff --git a/test/files/pos/t6895b.scala b/test/files/pos/t6895b.scala
new file mode 100644
index 0000000000..c465065011
--- /dev/null
+++ b/test/files/pos/t6895b.scala
@@ -0,0 +1,39 @@
+trait Foo[F[_]]
+trait Bar[F[_], A]
+
+trait Or[A, B]
+
+class Test {
+ implicit def orFoo[A]: Foo[({type L[X] = Or[A, X]})#L] = ???
+ implicit def barFoo[F[_]](implicit f: Foo[F]): Foo[({type L[X] = Bar[F, X]})#L] = ???
+
+ // Now we can define a couple of type aliases:
+ type StringOr[X] = Or[String, X]
+ type BarStringOr[X] = Bar[StringOr, X]
+
+ // ok
+ implicitly[Foo[BarStringOr]]
+ barFoo[StringOr](null) : Foo[BarStringOr]
+ barFoo(null) : Foo[BarStringOr]
+
+ // nok
+ implicitly[Foo[({type L[X] = Bar[StringOr, X]})#L]]
+ // Let's write the application explicitly, and then
+ // compile with just this line enabled and -explaintypes.
+ barFoo(null) : Foo[({type L[X] = Bar[StringOr, X]})#L]
+
+ // Foo[[X]Bar[F,X]] <: Foo[[X]Bar[[X]Or[String,X],X]]?
+ // Bar[[X]Or[String,X],X] <: Bar[F,X]?
+ // F[_] <: Or[String,_]?
+ // false
+ // false
+ // false
+
+ // Note that the type annotation above is typechecked as
+ // Foo[[X]Bar[[X]Or[String,X],X]], ie the type alias `L`
+ // is eta expanded.
+ //
+ // This is done so that it does not escape its defining scope.
+ // However, one this is done, higher kinded inference
+ // no longer is able to unify F with `StringOr` (SI-2712)
+}
diff --git a/test/files/pos/t7046-2/Macros_1.scala b/test/files/pos/t7046-2/Macros_1.scala
deleted file mode 100644
index 07c0c61281..0000000000
--- a/test/files/pos/t7046-2/Macros_1.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package p1
-
-import scala.reflect.macros.blackbox._
-import language.experimental._
-
-object Macro {
- def impl(c: Context): c.Tree = {
- import c.universe._
- val tsym = rootMirror.staticClass("p1.Base")
- val subclasses = tsym.knownDirectSubclasses.toList.map(_.name.toString)
- q"$subclasses"
- }
- def p1_Base_knownDirectSubclasses: List[String] = macro impl
-}
diff --git a/test/files/pos/t7046-2/Test_2.scala b/test/files/pos/t7046-2/Test_2.scala
deleted file mode 100644
index 74e30a863d..0000000000
--- a/test/files/pos/t7046-2/Test_2.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-package p1
-
-sealed trait Base
-
-object Test {
- val x = Macro.p1_Base_knownDirectSubclasses
-}
-
-case class B(val b: Test.x.type)
diff --git a/test/files/pos/t7088.scala b/test/files/pos/t7088.scala
new file mode 100644
index 0000000000..de9d1b7040
--- /dev/null
+++ b/test/files/pos/t7088.scala
@@ -0,0 +1,8 @@
+object Example extends App {
+ type Tag[X] = {type Tag = X}
+ type TaggedArray[T] = Array[T] with Tag[Any]
+
+ def method[T: reflect.ClassTag](a: TaggedArray[T], value: T) {a.update(0, value)}
+
+ method(Array(1, 2).asInstanceOf[TaggedArray[Int]], 1)
+}
diff --git a/test/files/pos/t7239.scala b/test/files/pos/t7239.scala
deleted file mode 100644
index 16e9d00f17..0000000000
--- a/test/files/pos/t7239.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-object Test {
- def BrokenMethod(): HasFilter[(Int, String)] = ???
-
- trait HasFilter[B] {
- def filter(p: B => Boolean) = ???
- }
-
- trait HasWithFilter {
- def withFilter = ???
- }
-
- object addWithFilter {
- trait NoImplicit
- implicit def enrich(v: Any)
- (implicit F0: NoImplicit): HasWithFilter = ???
- }
-
- BrokenMethod().withFilter(_ => true) // okay
- BrokenMethod().filter(_ => true) // okay
-
- locally {
- import addWithFilter._
- BrokenMethod().withFilter((_: (Int, String)) => true) // okay
- }
-
- locally {
- import addWithFilter._
- // adaptToMemberWithArgs sets the type of the tree `x`
- // to ErrorType (while in silent mode, so the error is not
- // reported. Later, when the fallback from `withFilter`
- // to `filter` is attempted, the closure is taken to have
- // have the type `<error> => Boolean`, which conforms to
- // `(B => Boolean)`. Only later during pickling does the
- // defensive check for erroneous types in the tree pick up
- // the problem.
- BrokenMethod().withFilter(x => true) // erroneous or inaccessible type.
- }
-}
diff --git a/test/files/pos/t7294.scala b/test/files/pos/t7294.scala
deleted file mode 100644
index ccac2b1400..0000000000
--- a/test/files/pos/t7294.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test {
- // no fruitless warning as Tuple2 isn't (yet) final.
- // The corresponding `neg` test will treat it as final
- // for the purposes of these tests under -Xfuture.
- (1, 2) match { case Seq() => 0; case _ => 1 }
-}
diff --git a/test/files/pos/t7784.scala b/test/files/pos/t7784.scala
new file mode 100644
index 0000000000..e6824a4203
--- /dev/null
+++ b/test/files/pos/t7784.scala
@@ -0,0 +1,13 @@
+object Test {
+ final val a = ""
+ var b: a.type = a
+ b = a
+
+ final val x = classOf[Object]
+ var y: x.type = x
+ y = x
+
+ final val e = Thread.State.NEW
+ var e1: e.type = e
+ e1 = e
+}
diff --git a/test/files/pos/t8044.scala b/test/files/pos/t8044.scala
new file mode 100644
index 0000000000..2519a8306b
--- /dev/null
+++ b/test/files/pos/t8044.scala
@@ -0,0 +1,15 @@
+
+trait T {
+ def f = 42 match { case `x` @ _ => x }
+ def g = 42 match { case `type` @ _ => `type` }
+ def h = 42 match { case `type` : Int => `type` }
+ def i = (null: Any) match { case _: Int | _: String => 17 }
+
+ // arbitrary idents allowed in @ syntax
+ def j = "Fred" match { case Name @ (_: String) => Name }
+ def k = "Fred" match { case * @ (_: String) => * }
+
+ // also in sequence pattern
+ def m = List(1,2,3,4,5) match { case List(1, `Rest of them` @ _*) => `Rest of them` }
+
+}
diff --git a/test/files/pos/t8062.flags b/test/files/pos/t8062.flags
deleted file mode 100644
index 49d036a887..0000000000
--- a/test/files/pos/t8062.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize
diff --git a/test/files/pos/t8062/A_1.scala b/test/files/pos/t8062/A_1.scala
deleted file mode 100644
index ca0411dae8..0000000000
--- a/test/files/pos/t8062/A_1.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package warmup
-
-object Warmup {
- def filter[A](p: Any => Boolean): Any = filter[Any](p)
-}
diff --git a/test/files/pos/t8062/B_2.scala b/test/files/pos/t8062/B_2.scala
deleted file mode 100644
index f0a6761488..0000000000
--- a/test/files/pos/t8062/B_2.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-object Test {
- warmup.Warmup.filter[Any](x => false)
-}
diff --git a/test/files/pos/t8079b.scala b/test/files/pos/t8079b.scala
new file mode 100644
index 0000000000..f3b7b78077
--- /dev/null
+++ b/test/files/pos/t8079b.scala
@@ -0,0 +1,7 @@
+trait F1[/* - */T, /* + */ R]
+
+object Test {
+ import scala.annotation.unchecked._
+ type VariantF1[-T, +R] = F1[T @uncheckedVariance, R @uncheckedVariance]
+ trait C[+T] { def foo: VariantF1[Any, T] }
+}
diff --git a/test/files/pos/t8306.flags b/test/files/pos/t8306.flags
deleted file mode 100644
index 49d036a887..0000000000
--- a/test/files/pos/t8306.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize
diff --git a/test/files/pos/t8306.scala b/test/files/pos/t8306.scala
deleted file mode 100644
index e04b054eb9..0000000000
--- a/test/files/pos/t8306.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-class Si8306 {
- def foo: Int = 123
- lazy val extension: Int =
- foo match {
- case idx if idx != -1 => 15
- case _ => 17
- }
-}
diff --git a/test/files/pos/t8310.flags b/test/files/pos/t8310.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/pos/t8310.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/pos/t8315.flags b/test/files/pos/t8315.flags
deleted file mode 100644
index c926ad6493..0000000000
--- a/test/files/pos/t8315.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yinline -Ydead-code
diff --git a/test/files/pos/t8315.scala b/test/files/pos/t8315.scala
deleted file mode 100644
index 2f7742ed67..0000000000
--- a/test/files/pos/t8315.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-object Test {
- def crash(as: Listt): Unit = {
- map(as, (_: Any) => return)
- }
-
- final def map(x: Listt, f: Any => Any): Any = {
- if (x eq Nill) "" else f("")
- }
-}
-
-object Nill extends Listt
-class Listt
diff --git a/test/files/pos/t8315b.flags b/test/files/pos/t8315b.flags
deleted file mode 100644
index c926ad6493..0000000000
--- a/test/files/pos/t8315b.flags
+++ /dev/null
@@ -1 +0,0 @@
--Yinline -Ydead-code
diff --git a/test/files/pos/t8315b.scala b/test/files/pos/t8315b.scala
deleted file mode 100644
index d7a2bf565f..0000000000
--- a/test/files/pos/t8315b.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-object Test extends Object {
- def crash: Unit = {
- val key = ""
- try map(new F(key))
- catch { case _: Throwable => }
- };
- final def map(f: F): Any = f.apply("");
-};
-final class F(key: String) {
- final def apply(a: Any): Any = throw new RuntimeException(key);
-}
diff --git a/test/files/pos/t8359-closelim-crash.flags b/test/files/pos/t8359-closelim-crash.flags
deleted file mode 100644
index 49d036a887..0000000000
--- a/test/files/pos/t8359-closelim-crash.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize
diff --git a/test/files/pos/t8359-closelim-crash.scala b/test/files/pos/t8359-closelim-crash.scala
deleted file mode 100644
index 1413694d10..0000000000
--- a/test/files/pos/t8359-closelim-crash.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package test
-
-// This is a minimization of code that crashed the compiler during bootstrapping
-// in the first iteration of https://github.com/scala/scala/pull/4373, the PR
-// that adjusted the order of free and declared params in LambdaLift.
-
-// Was:
-// java.lang.AssertionError: assertion failed:
-// Record Record(<$anon: Function1>,Map(value a$1 -> Deref(LocalVar(value b)))) does not contain a field value b$1
-// at scala.tools.nsc.Global.assert(Global.scala:262)
-// at scala.tools.nsc.backend.icode.analysis.CopyPropagation$copyLattice$State.getFieldNonRecordValue(CopyPropagation.scala:113)
-// at scala.tools.nsc.backend.icode.analysis.CopyPropagation$copyLattice$State.getFieldNonRecordValue(CopyPropagation.scala:122)
-// at scala.tools.nsc.backend.opt.ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2.replaceFieldAccess$1(ClosureElimination.scala:124)
-class Typer {
- def bar(a: Boolean, b: Boolean): Unit = {
- @inline
- def baz(): Unit = {
- ((_: Any) => (Typer.this, a, b)).apply("")
- }
- ((_: Any) => baz()).apply("")
- }
-}
-
diff --git a/test/files/pos/t8410.flags b/test/files/pos/t8410.flags
index dcd5943c2f..85e4257541 100644
--- a/test/files/pos/t8410.flags
+++ b/test/files/pos/t8410.flags
@@ -1 +1 @@
--optimise -Xfatal-warnings -deprecation:false -Yinline-warnings:false
+-opt:l:project -Xfatal-warnings -deprecation:false -opt-warnings:none
diff --git a/test/files/pos/t8429.scala b/test/files/pos/t8429.scala
new file mode 100644
index 0000000000..a2d32637e1
--- /dev/null
+++ b/test/files/pos/t8429.scala
@@ -0,0 +1,7 @@
+trait Must { def musta(str: String, i: Int): Unit }
+
+object Mustare {
+ def takesM(m: Must) = ???
+ takesM{ (a, b) => println } // ok
+ takesM{ case (a: String, b: Int) => println("") } // should also be accepted
+}
diff --git a/test/files/pos/t8462.scala b/test/files/pos/t8462.scala
new file mode 100644
index 0000000000..6946cf8e5e
--- /dev/null
+++ b/test/files/pos/t8462.scala
@@ -0,0 +1,11 @@
+
+trait ConstantOps {
+ def exprs = (
+ 1 << 2L : Int, // was: error: type mismatch; found : Long(4L)
+ 64 >> 2L : Int, // was: error: type mismatch; found : Long(4L)
+ 64 >>> 2L : Int, // was: error: type mismatch; found : Long(4L)
+ 'a' << 2L : Int,
+ 'a' >> 2L : Int,
+ 'a'>>> 2L : Int
+ )
+}
diff --git a/test/files/pos/t8862a.scala b/test/files/pos/t8862a.scala
new file mode 100644
index 0000000000..f9576707ba
--- /dev/null
+++ b/test/files/pos/t8862a.scala
@@ -0,0 +1,47 @@
+package p {
+
+ abstract class C[A] {
+ def x: A
+ implicit def oops: A = x
+ implicit def oopso: Option[A] = None
+ }
+
+ package q {
+
+ class Oops
+
+ object `package` extends C[Oops] {
+ override def x = new Oops
+ }
+
+ object Blah {
+ oops
+ oopso
+
+ // implicits found in enclosing context
+ implicitly[Oops]
+ implicitly[Option[Oops]]
+ }
+ }
+}
+
+package other {
+
+ object Blah {
+ // implicits found through this import
+ import p.q._
+
+ oops
+ oopso
+
+ implicitly[Oops]
+ implicitly[Option[Oops]]
+ }
+
+
+ object Blee {
+ // implicits found through the companion implicits
+ implicitly[p.q.Oops]
+ implicitly[Option[p.q.Oops]]
+ }
+}
diff --git a/test/files/pos/t8862b.scala b/test/files/pos/t8862b.scala
new file mode 100644
index 0000000000..8be7fb5fab
--- /dev/null
+++ b/test/files/pos/t8862b.scala
@@ -0,0 +1,12 @@
+package p {
+ trait T[X] { def O : { def apply(): X } }
+ object `package` extends T[Int] {
+ def O: { def apply(): Int } = new { def apply(): Int = 42 }
+ }
+
+ object Test {
+ def main(args: Array[String]): Unit = {
+ val x: Int = O()
+ }
+ }
+}
diff --git a/test/files/pos/t8873.scala b/test/files/pos/t8873.scala
new file mode 100644
index 0000000000..e2f0a5fad2
--- /dev/null
+++ b/test/files/pos/t8873.scala
@@ -0,0 +1 @@
+case class X(@volatile var x:Int)
diff --git a/test/files/pos/t9074.scala b/test/files/pos/t9074.scala
new file mode 100644
index 0000000000..67db281f54
--- /dev/null
+++ b/test/files/pos/t9074.scala
@@ -0,0 +1,24 @@
+package blam {
+
+ package foo {
+
+ trait F[T] {
+ def f(d: Double, t: T): T = ???
+ def f(d: Int, t: T): T = ???
+ def f(d: String, t: T): T = ???
+
+ def g[A](a: T): T = ???
+ def g(a: Int) = ???
+ }
+ }
+
+ package object foo extends foo.F[Double] {
+ override def f(d: Double, t: Double): Double = ???
+ }
+}
+
+object Test {
+ import blam._
+ foo.f("3", 4.0)
+ foo.g[Any](1d) : Double
+}
diff --git a/test/files/pos/t9074b.scala b/test/files/pos/t9074b.scala
new file mode 100644
index 0000000000..dadcebf399
--- /dev/null
+++ b/test/files/pos/t9074b.scala
@@ -0,0 +1,15 @@
+trait Echo [T] {
+ def echo(t: T): Unit
+}
+
+trait IntEcho extends Echo[Int] {
+ def echo(t: Int) = println(t)
+}
+
+object echo extends IntEcho
+package object echo1 extends IntEcho
+
+object App extends App {
+ echo.echo(1)
+ echo1.echo(1)
+}
diff --git a/test/files/pos/t9111-inliner-workaround.flags b/test/files/pos/t9111-inliner-workaround.flags
index 63b5558cfd..768ca4f13b 100644
--- a/test/files/pos/t9111-inliner-workaround.flags
+++ b/test/files/pos/t9111-inliner-workaround.flags
@@ -1 +1 @@
--Ybackend:GenBCode -Yopt:l:classpath \ No newline at end of file
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/pos/t9123.flags b/test/files/pos/t9123.flags
deleted file mode 100644
index c16e2f71dc..0000000000
--- a/test/files/pos/t9123.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize -Ydelambdafy:method
diff --git a/test/files/pos/t9123.scala b/test/files/pos/t9123.scala
deleted file mode 100644
index 22d55b4351..0000000000
--- a/test/files/pos/t9123.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-trait Setting {
- type T
- def value: T
-}
-
-object Test {
- def test(x: Some[Setting]) = x match {
- case Some(dep) => Some(dep.value) map (_ => true)
- }
-}
diff --git a/test/files/pos/t9131.scala b/test/files/pos/t9131.scala
new file mode 100644
index 0000000000..1a186a0a24
--- /dev/null
+++ b/test/files/pos/t9131.scala
@@ -0,0 +1,12 @@
+class Test {
+
+ def byNameFunc(f: (=> (() => Any)) => Any): Unit = ()
+
+ def test = {
+ // "value apply is not a member of => () => Any"
+ byNameFunc(z => z())
+ // okay
+ byNameFunc(z => z.apply())
+ byNameFunc(z => {val f = z; f()})
+ }
+}
diff --git a/test/files/neg/sammy_restrictions.flags b/test/files/pos/t9178b.flags
index 48fd867160..48fd867160 100644
--- a/test/files/neg/sammy_restrictions.flags
+++ b/test/files/pos/t9178b.flags
diff --git a/test/files/pos/t9178b.scala b/test/files/pos/t9178b.scala
new file mode 100644
index 0000000000..cbeaed4f17
--- /dev/null
+++ b/test/files/pos/t9178b.scala
@@ -0,0 +1,7 @@
+abstract class Test{
+ val writeInput: java.io.OutputStream => Unit
+ def getOutputStream(): java.io.OutputStream
+
+ writeInput(getOutputStream)
+}
+
diff --git a/test/files/pos/t9326a.scala b/test/files/pos/t9326a.scala
new file mode 100644
index 0000000000..aefc735585
--- /dev/null
+++ b/test/files/pos/t9326a.scala
@@ -0,0 +1,6 @@
+package p
+
+trait M[A]
+
+class C extends M[Tuple1[X] forSome { type X }]
+
diff --git a/test/files/pos/t9397.scala b/test/files/pos/t9397.scala
new file mode 100644
index 0000000000..3dbc6591d3
--- /dev/null
+++ b/test/files/pos/t9397.scala
@@ -0,0 +1,12 @@
+package foo.scala
+
+import scala.reflect.runtime.universe._
+
+object Foo {
+
+ def bar[T: TypeTag]() {
+ }
+
+ import foo._
+ bar[String]()
+}
diff --git a/test/files/pos/t9399.flags b/test/files/pos/t9399.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/pos/t9399.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/pos/t9399.scala b/test/files/pos/t9399.scala
new file mode 100644
index 0000000000..e8a8720f94
--- /dev/null
+++ b/test/files/pos/t9399.scala
@@ -0,0 +1,17 @@
+sealed abstract class TA
+sealed abstract class TB extends TA
+case object A extends TA
+case object B extends TB
+
+sealed trait C
+case class CTA(id: Int, da: TA) extends C
+case class CTB(id: Int, da: TB) extends C
+
+class Test {
+ def test(c: C): Unit = c match {
+ case CTA(_, A) =>
+ case CTA(_, B) =>
+ case CTB(_, B) =>
+ }
+}
+
diff --git a/test/files/pos/t9411a.flags b/test/files/pos/t9411a.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/pos/t9411a.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/pos/t9411a.scala b/test/files/pos/t9411a.scala
new file mode 100644
index 0000000000..d5264663ec
--- /dev/null
+++ b/test/files/pos/t9411a.scala
@@ -0,0 +1,27 @@
+object OhNoes {
+
+ sealed trait F
+ sealed abstract class FA extends F
+ sealed abstract class FB extends F
+
+ case object FA1 extends FA
+ case object FB1 extends FB
+ case object FB2 extends FB
+
+ sealed trait G
+ case object G1 extends G
+ case object G2 extends G
+
+ sealed trait H
+ case class H1(a: FB, b: G) extends H
+ case class H2(a: F) extends H
+
+ val demo: H => Unit = {
+ case H1(FB1, G1) =>
+ case H1(FB2, G2) =>
+ case H2(_: FB) =>
+ case H2(_: FA) =>
+ case H1(FB1, G2) =>
+ case H1(FB2, G1) =>
+ }
+}
diff --git a/test/files/pos/t9411b.flags b/test/files/pos/t9411b.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/pos/t9411b.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/pos/t9411b.scala b/test/files/pos/t9411b.scala
new file mode 100644
index 0000000000..6888ba9382
--- /dev/null
+++ b/test/files/pos/t9411b.scala
@@ -0,0 +1,36 @@
+object OhNoes {
+
+ sealed trait F
+ sealed abstract class FA extends F
+ sealed abstract class FB extends F
+
+ case object FA1 extends FA
+ case object FB1 extends FB
+ case object FB2 extends FB
+
+ sealed trait G
+ case object G1 extends G
+ case object G2 extends G
+
+ sealed trait H
+ case class H1(a: FB, b: G) extends H
+ case class H2(b: F) extends H
+
+ val demo: H => Unit = {
+ case H1(FB1, G1) =>
+ case H1(FB2, G2) =>
+ case H2(_: FB) =>
+ case H2(_: FA) =>
+ case H1(FB1, G2) =>
+ case H1(FB2, G1) =>
+ }
+
+ val demo2: H => Unit = {
+ case H2(_: FA) =>
+ case H2(_: FB) =>
+ case H1(FB1, G1) =>
+ case H1(FB2, G1) =>
+ case H1(FB1, G2) =>
+ case H1(FB2, G2) =>
+ }
+}
diff --git a/test/files/pos/t9449.scala b/test/files/pos/t9449.scala
new file mode 100644
index 0000000000..3b86dc80a0
--- /dev/null
+++ b/test/files/pos/t9449.scala
@@ -0,0 +1,19 @@
+trait II {
+ def apply(x: Int): Int
+}
+
+object Test {
+ def ii(x: Int): Int = x
+ def test = {
+ val ii1: II = x => ii(x) // works
+ val ii2: II = ii // works (adapting `ii` to `II`)
+ val ii3: II = ii _ // works (failed before the fix)
+ // typedTyped({ii : (() => <empty>)})
+ // typedEta(ii, pt = II)
+ // adapt(ii, pt = (? => ?))
+ // instantiatedToMethodType(ii, pt = (? => ?))
+ // val ii3: II = ii _ // error:
+ // found : Int => Int
+ // required: II
+ }
+} \ No newline at end of file
diff --git a/test/files/pos/t9479.scala b/test/files/pos/t9479.scala
new file mode 100644
index 0000000000..38eabf4338
--- /dev/null
+++ b/test/files/pos/t9479.scala
@@ -0,0 +1,15 @@
+trait Predefs {
+ def bridge(p: String): Unit = ???
+ def bridge(p: Any): Unit = ???
+}
+
+package object molecule extends Predefs
+
+package molecule {
+ package process {
+ class Test {
+ def main(): Unit = bridge(null, null)
+ }
+ }
+}
+
diff --git a/test/files/pos/t9479b.scala b/test/files/pos/t9479b.scala
new file mode 100644
index 0000000000..5fc795a1fd
--- /dev/null
+++ b/test/files/pos/t9479b.scala
@@ -0,0 +1,15 @@
+trait Predefs {
+ def bridge(p: String): Unit = ???
+ def bridge(p: Any): Unit = ???
+}
+
+package object molecule extends Predefs
+
+package molecule {
+ package process {
+ class Test {
+ def main(): Unit = molecule.bridge(null, null)
+ }
+ }
+}
+
diff --git a/test/files/pos/t9498.scala b/test/files/pos/t9498.scala
new file mode 100644
index 0000000000..32fc01a806
--- /dev/null
+++ b/test/files/pos/t9498.scala
@@ -0,0 +1,25 @@
+trait Inv[A] { def head: A }
+trait Cov[+A] { def head: A }
+
+class Test {
+ def inv(i: Inv[Inv[String]]) = i match {
+ case l: Inv[a] =>
+ val x: a = l.head
+ x.head: String // okay
+ }
+
+ def cov(c: Cov[Cov[String]]) = c match {
+ case l: Cov[a] =>
+ val x: a = l.head
+ x.head: String // was: found A, required String
+ }
+
+ def cov1(c: Cov[Cov[String]]) = c match {
+ case l: Cov[a] => l.head.head
+ }
+ cov1(null): String // was: found A, required String
+
+ def cov3(c: Cov[Cov[String]]): String = c match {
+ case l: Cov[a] => val l1: l.type = l; l1.head.head
+ }
+}
diff --git a/test/files/pos/t9542.scala b/test/files/pos/t9542.scala
new file mode 100644
index 0000000000..d65f7ac4c6
--- /dev/null
+++ b/test/files/pos/t9542.scala
@@ -0,0 +1,8 @@
+object O {
+ trait T
+
+ class VC(val self: Any) extends AnyVal {
+ def extMethod(f: F1[T, Any]) = ()
+ }
+}
+trait F1[A, B]
diff --git a/test/files/pos/t9630.flags b/test/files/pos/t9630.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/files/pos/t9630.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/pos/t9630/t9630a.scala b/test/files/pos/t9630/t9630a.scala
new file mode 100644
index 0000000000..c76ecd2ff2
--- /dev/null
+++ b/test/files/pos/t9630/t9630a.scala
@@ -0,0 +1,9 @@
+
+sealed trait Base
+final case class Base_1(sameName: Some[Any]) extends Base
+final case class Base_2(sameName: Nested) extends Base
+
+sealed trait Nested
+final case class Nested_1(x: Any) extends Nested
+final case class Nested_2(y: Any) extends Nested
+
diff --git a/test/files/pos/t9630/t9630b.scala b/test/files/pos/t9630/t9630b.scala
new file mode 100644
index 0000000000..3e1787ec52
--- /dev/null
+++ b/test/files/pos/t9630/t9630b.scala
@@ -0,0 +1,8 @@
+
+class Test {
+ def test(b: Base): Unit = b match {
+ case Base_1(Some(_)) =>
+ case Base_2(Nested_1(_)) =>
+ case Base_2(Nested_2(_)) =>
+ }
+}
diff --git a/test/files/pos/t9658.scala b/test/files/pos/t9658.scala
new file mode 100644
index 0000000000..a2c695a8ae
--- /dev/null
+++ b/test/files/pos/t9658.scala
@@ -0,0 +1,10 @@
+sealed trait G[T]
+case object GI extends G[Int]
+
+class C {
+ def typerFail[T](rt: G[T]): T = rt match {
+ case GI =>
+ { case x => x } : PartialFunction[Any, Any] // comment this line, compiles.
+ 0 // found Int, required T
+ }
+}
diff --git a/test/files/pos/t9665.scala b/test/files/pos/t9665.scala
new file mode 100644
index 0000000000..1aa7a5d459
--- /dev/null
+++ b/test/files/pos/t9665.scala
@@ -0,0 +1,7 @@
+
+object | { def unapply(x: (Any, Any)) = Some(x) }
+
+trait Test {
+ def f() = (1,2) match { case 1 `|` 2 => }
+ def g() = 2 match { case 1 | 2 => }
+}
diff --git a/test/files/pos/t9855.scala b/test/files/pos/t9855.scala
new file mode 100644
index 0000000000..b6ac3e2432
--- /dev/null
+++ b/test/files/pos/t9855.scala
@@ -0,0 +1,10 @@
+class C {
+ def xx(verb: String, a: Array[Int]) {
+ val reYYYY = """(\d\d\d\d)""".r
+ verb match {
+ case "time" if a.isEmpty =>
+ case "time" =>
+ case reYYYY(y) =>
+ }
+ }
+}
diff --git a/test/files/pos/t9855b.scala b/test/files/pos/t9855b.scala
new file mode 100644
index 0000000000..30c58be3dc
--- /dev/null
+++ b/test/files/pos/t9855b.scala
@@ -0,0 +1,16 @@
+object Test {
+ var FALSE = false
+ def main(args: Array[String]): Unit = {
+ val SomeB = new B
+ new B() match {
+ case SomeB if FALSE =>
+ case SomeB =>
+ case Ext(_) =>
+ }
+ }
+}
+object Ext {
+ def unapply(s: A) = Some(())
+}
+class A
+class B extends A
diff --git a/test/files/pos/t9918/package.scala b/test/files/pos/t9918/package.scala
new file mode 100644
index 0000000000..9bd8ac9a69
--- /dev/null
+++ b/test/files/pos/t9918/package.scala
@@ -0,0 +1 @@
+package object pkg extends T
diff --git a/test/files/pos/t9918/t9918.scala b/test/files/pos/t9918/t9918.scala
new file mode 100644
index 0000000000..ec9a146579
--- /dev/null
+++ b/test/files/pos/t9918/t9918.scala
@@ -0,0 +1,3 @@
+package pkg
+
+trait T { object O }
diff --git a/test/files/pos/t9920.scala b/test/files/pos/t9920.scala
new file mode 100644
index 0000000000..8612618cc4
--- /dev/null
+++ b/test/files/pos/t9920.scala
@@ -0,0 +1,6 @@
+object Test {
+ def o = {
+ def i: Int = { i; 0 }
+ i
+ }
+}
diff --git a/test/files/pos/t9943.scala b/test/files/pos/t9943.scala
new file mode 100644
index 0000000000..0d4717ccbb
--- /dev/null
+++ b/test/files/pos/t9943.scala
@@ -0,0 +1,9 @@
+class Foo[T] {
+ def toMap[K, V](implicit ev: Foo[T] <:< Foo[(K, V)]): Foo[Map[K, V]] = null
+ def toMap[K](keySelector: T => K): Foo[Map[K, T]] = null
+}
+
+object Foo {
+ (??? : Foo[Int]) toMap (_ % 2)
+ (??? : Foo[(Int, String)]).toMap
+}
diff --git a/test/files/pos/tcpoly_bounds1.scala b/test/files/pos/tcpoly_bounds1.scala
index 63263cb152..4f52f55cb6 100644
--- a/test/files/pos/tcpoly_bounds1.scala
+++ b/test/files/pos/tcpoly_bounds1.scala
@@ -1,7 +1,9 @@
-class Foo[t[x]<: Tuple2[Int, x]]
+case class T2[+T1, +T2](_1: T1, _2: T2) extends Product2[T1, T2]
+
+class Foo[t[x]<: T2[Int, x]]
//
-class MyPair[z](a: Int, b: z) extends Tuple2[Int, z](a,b)
+class MyPair[z](a: Int, b: z) extends T2[Int, z](a,b)
object foo extends Foo[MyPair]
diff --git a/test/files/pos/trait-defaults-super.scala b/test/files/pos/trait-defaults-super.scala
new file mode 100644
index 0000000000..8f867ab563
--- /dev/null
+++ b/test/files/pos/trait-defaults-super.scala
@@ -0,0 +1,21 @@
+trait T extends java.lang.Iterable[String] {
+
+ override def spliterator(): java.util.Spliterator[String] = {
+ super[Iterable].spliterator
+ super.spliterator
+ null
+ }
+ def foo = {
+ super[Iterable].spliterator
+ super.spliterator
+ }
+ def iterator(): java.util.Iterator[String] = java.util.Collections.emptyList().iterator()
+}
+class C extends T with java.lang.Iterable[String] // super accessor is okay with Iterable as a direct parent
+object Test {
+ def main(args: Array[String]): Unit = {
+ val t: T = new C
+ t.spliterator
+ t.foo
+ }
+}
diff --git a/test/files/pos/trait-force-info.flags b/test/files/pos/trait-force-info.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/pos/trait-force-info.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/pos/trait-force-info.scala b/test/files/pos/trait-force-info.scala
deleted file mode 100644
index c2b33869c3..0000000000
--- a/test/files/pos/trait-force-info.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-/** This does NOT crash unless it's in the interactive package.
- */
-
-package scala.tools.nsc
-package interactive
-
-trait MyContextTrees {
- val self: Global
- val NoContext = self.analyzer.NoContext
-}
-//
-// error: java.lang.AssertionError: assertion failed: trait Contexts.NoContext$ linkedModule: <none>List()
-// at scala.Predef$.assert(Predef.scala:160)
-// at scala.tools.nsc.symtab.classfile.ClassfileParser$innerClasses$.innerSymbol$1(ClassfileParser.scala:1211)
-// at scala.tools.nsc.symtab.classfile.ClassfileParser$innerClasses$.classSymbol(ClassfileParser.scala:1223)
-// at scala.tools.nsc.symtab.classfile.ClassfileParser.classNameToSymbol(ClassfileParser.scala:489)
-// at scala.tools.nsc.symtab.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:757)
-// at scala.tools.nsc.symtab.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:789)
diff --git a/test/files/pos/trait_fields_dependent_conflict.scala b/test/files/pos/trait_fields_dependent_conflict.scala
new file mode 100644
index 0000000000..afb6f4b0c5
--- /dev/null
+++ b/test/files/pos/trait_fields_dependent_conflict.scala
@@ -0,0 +1,20 @@
+// derived from test/files/pos/S5.scala
+
+// compile with -uniqid to see a hint of the trouble
+trait N {
+ // the symbol for self does not get rebound when synthesizing members in C
+ val self: N = ???
+ val n: self.type = self
+}
+
+abstract class M {
+ val self: N
+ val n: self.type
+}
+
+abstract class MConflict extends N {
+ val self: N
+ val n: self.type
+}
+
+class C extends M with N
diff --git a/test/files/pos/trait_fields_dependent_rebind.scala b/test/files/pos/trait_fields_dependent_rebind.scala
new file mode 100644
index 0000000000..e2cf4c43c3
--- /dev/null
+++ b/test/files/pos/trait_fields_dependent_rebind.scala
@@ -0,0 +1,15 @@
+// derived from test/files/pos/S5.scala
+
+// compile with -uniqid to see a hint of the trouble
+trait N {
+ // the symbol for self does not get rebound when synthesizing members in C
+ val self: N = ???
+ val n: self.type = self
+}
+
+abstract class M {
+ val self: N
+ val n: self.type
+}
+
+class C extends M with N
diff --git a/test/files/pos/trait_fields_inherit_double_def.scala b/test/files/pos/trait_fields_inherit_double_def.scala
new file mode 100644
index 0000000000..8703d6312c
--- /dev/null
+++ b/test/files/pos/trait_fields_inherit_double_def.scala
@@ -0,0 +1,20 @@
+// done
+// test/files/trait-defaults/fields.scala:24: error: double definition:
+// def signalDelegate_=(x$1: Signalling): Unit at line 24 and
+// def signalDelegate_=(x$1: Signalling): Unit at line 24
+// have same type
+// class SUB extends IterableSplitter
+// ^
+// one error found
+
+trait Signalling
+
+trait DelegatedSignalling extends Signalling {
+ var signalDelegate: Signalling
+}
+
+trait IterableSplitter extends DelegatedSignalling {
+ var signalDelegate: Signalling = ???
+}
+
+class SUB extends IterableSplitter \ No newline at end of file
diff --git a/test/files/pos/trait_fields_lambdalift.scala b/test/files/pos/trait_fields_lambdalift.scala
new file mode 100644
index 0000000000..62304a5268
--- /dev/null
+++ b/test/files/pos/trait_fields_lambdalift.scala
@@ -0,0 +1,22 @@
+class Lift {
+ def foo = {
+ // this will be captured by the MouseHandler trait,
+ // which gives rise to a new trait field during LambdaLift
+ var Clicked = "Clicked"
+
+ def bar = Clicked
+
+ trait MouseHandler {
+ def mouseClicked = Clicked + bar
+ }
+
+ class CC extends MouseHandler
+
+ // new C {}
+ (new CC).mouseClicked
+ }
+}
+
+object O extends Lift with App {
+ println(foo)
+}
diff --git a/test/files/pos/trait_fields_nested_private_object.scala b/test/files/pos/trait_fields_nested_private_object.scala
new file mode 100644
index 0000000000..8efc1cb3fa
--- /dev/null
+++ b/test/files/pos/trait_fields_nested_private_object.scala
@@ -0,0 +1,8 @@
+trait NestedObj {
+ private object O { println("NO") }
+}
+
+
+class C extends NestedObj {
+ def O = ???
+} \ No newline at end of file
diff --git a/test/files/pos/trait_fields_nested_public_object.scala b/test/files/pos/trait_fields_nested_public_object.scala
new file mode 100644
index 0000000000..016487fb8a
--- /dev/null
+++ b/test/files/pos/trait_fields_nested_public_object.scala
@@ -0,0 +1,5 @@
+trait NestedObj {
+ object O { println("NO") }
+}
+
+class C extends NestedObj \ No newline at end of file
diff --git a/test/files/pos/trait_fields_owners.scala b/test/files/pos/trait_fields_owners.scala
new file mode 100644
index 0000000000..6aa5572171
--- /dev/null
+++ b/test/files/pos/trait_fields_owners.scala
@@ -0,0 +1,19 @@
+trait V {
+ // ok
+ // error: java.lang.IllegalArgumentException: Could not find proxy for val f: Function1 in List(value f, value v, trait V, package <empty>, package <root>) (currentOwner= value <local V$class> )
+ val v = { val f = (x: Int) => x + 1; f(2) }
+
+ // ok
+ // assertion failed:
+ // Trying to access the this of another class: tree.symbol = trait V, class symbol = object V$class compilation unit: fields.scala
+ val developmentVersion =
+ for {
+ v <- scalaPropOrNone("maven.version.number")
+ if v endsWith "-SNAPSHOT"
+ ov <- scalaPropOrNone("version.number")
+ } yield ov
+
+ def scalaPropOrNone(name: String): Option[String] = ???
+}
+
+object O extends V \ No newline at end of file
diff --git a/test/files/pos/trait_fields_private_this.scala b/test/files/pos/trait_fields_private_this.scala
new file mode 100644
index 0000000000..8065cc89e6
--- /dev/null
+++ b/test/files/pos/trait_fields_private_this.scala
@@ -0,0 +1,5 @@
+trait Chars {
+ private[this] val char2uescapeArray: String = ???
+}
+
+object Chars extends Chars \ No newline at end of file
diff --git a/test/files/pos/trait_fields_static_fwd.scala b/test/files/pos/trait_fields_static_fwd.scala
new file mode 100644
index 0000000000..af2cdad9ff
--- /dev/null
+++ b/test/files/pos/trait_fields_static_fwd.scala
@@ -0,0 +1,10 @@
+trait T {
+ // Need to mark the synthesized member in the object's module class as notPROTECTED,
+ // since the trait member will receive this flag later.
+ // If we don't add notPROTECTED to the synthesized one, the member will not be seen as overriding the trait member.
+ // Therefore, addForwarders's call to membersBasedOnFlags would see the deferred member in the trait,
+ // instead of the concrete (desired) one in the class, and thus not create the static forwarder.
+ protected val propFilename: String = "/"
+}
+
+object P extends T
diff --git a/test/files/pos/trait_fields_var_override_deferred.scala b/test/files/pos/trait_fields_var_override_deferred.scala
new file mode 100644
index 0000000000..0205326506
--- /dev/null
+++ b/test/files/pos/trait_fields_var_override_deferred.scala
@@ -0,0 +1,2 @@
+trait SizeChangeEvent { protected var end: Int }
+class BackedUpListIterator[E](override protected var end: Int) extends SizeChangeEvent
diff --git a/test/files/pos/trait_fields_volatile.scala b/test/files/pos/trait_fields_volatile.scala
new file mode 100644
index 0000000000..030b24f187
--- /dev/null
+++ b/test/files/pos/trait_fields_volatile.scala
@@ -0,0 +1,13 @@
+// This test illustrates the intent of what should work (but didn't for a while during the fields refactoring),
+// but it does not actually defend against the regression seen in twitter-util's Scheduler, which I cannot reproduce
+// outside the project. The whole project consistently fails to build before, and compiles after the commit
+// that includes this test, but this single test file (as well as Scheduler.scala with external dependencies removed)
+// compiles both before and after....
+// (https://github.com/twitter/util/blob/6398a56923/util-core/src/main/scala/com/twitter/concurrent/Scheduler.scala#L260-L265)
+// There's also a run test that checks that the field in C is actually volatile.
+trait Vola {
+ @volatile private[this] var _vola = "tile"
+ @volatile var vola = "tile"
+}
+
+class C extends Vola
diff --git a/test/files/pos/trait_lazy_accessboundary.scala b/test/files/pos/trait_lazy_accessboundary.scala
new file mode 100644
index 0000000000..6529816ffb
--- /dev/null
+++ b/test/files/pos/trait_lazy_accessboundary.scala
@@ -0,0 +1,2 @@
+package foo { trait HasLazy { private[foo] lazy val myLazy = "my lady" } }
+package bar { class MixInSuperLazy extends foo.HasLazy }
diff --git a/test/files/pos/typevar-in-prefix.scala b/test/files/pos/typevar-in-prefix.scala
new file mode 100644
index 0000000000..929648b789
--- /dev/null
+++ b/test/files/pos/typevar-in-prefix.scala
@@ -0,0 +1,9 @@
+trait Test1 {
+ abstract class Setting
+ def Bool: Setting
+
+ class C[T <: Setting](val s: T)
+ val setting1 = null.asInstanceOf[_1.s.type forSome { val _1: C[Setting] }]
+ // the derived accessor for this val was not using an inferred type, as was
+ // the intention of the implementation in MethodSynthesis.
+}
diff --git a/test/files/pos/val_infer.scala b/test/files/pos/val_infer.scala
new file mode 100644
index 0000000000..5f82da8393
--- /dev/null
+++ b/test/files/pos/val_infer.scala
@@ -0,0 +1,5 @@
+class Test {
+ implicit def s2i(s: String): Int = s.length
+ trait Base { def foo: Int }
+ trait Sub extends Base { val foo = "" }
+}
diff --git a/test/files/pos/virtpatmat_exist1.scala b/test/files/pos/virtpatmat_exist1.scala
index 6cad017b0b..1f24892489 100644
--- a/test/files/pos/virtpatmat_exist1.scala
+++ b/test/files/pos/virtpatmat_exist1.scala
@@ -1,5 +1,6 @@
import annotation.unchecked.{ uncheckedVariance=> uV }
-import scala.collection.immutable.{ListMap, HashMap, ListSet, HashSet}
+import scala.collection.immutable.{ListMap, ListSet}
+import scala.collection.mutable.{HashMap, HashSet}
object Test {
class HashMapCollision1[A, +B](var hash: Int, var kvs: ListMap[A, B @uV]) extends HashMap[A, B @uV]
diff --git a/test/files/presentation/callcc-interpreter/Runner.scala b/test/files/presentation/callcc-interpreter/Runner.scala
index 1ef3cf9025..1c03e3d5ba 100644
--- a/test/files/presentation/callcc-interpreter/Runner.scala
+++ b/test/files/presentation/callcc-interpreter/Runner.scala
@@ -1,3 +1,3 @@
import scala.tools.nsc.interactive.tests._
-object Test extends InteractiveTest \ No newline at end of file
+object Test extends InteractiveTest
diff --git a/test/files/presentation/doc/doc.scala b/test/files/presentation/doc/doc.scala
index ce431910ee..08c6ebf059 100644
--- a/test/files/presentation/doc/doc.scala
+++ b/test/files/presentation/doc/doc.scala
@@ -37,7 +37,7 @@ object Test extends InteractiveTest {
prepre + docComment(nTags) + prepost + post
}
- override lazy val compiler = {
+ override lazy val compiler: Global { def getComment(sym: Symbol, source: SourceFile, fragments: List[(Symbol,SourceFile)]): Option[Comment] } = {
prepareSettings(settings)
new Global(settings, compilerReporter) with MemberLookupBase with CommentFactoryBase with doc.ScaladocGlobalTrait {
outer =>
@@ -62,7 +62,7 @@ object Test extends InteractiveTest {
def getComment(sym: Symbol, source: SourceFile, fragments: List[(Symbol,SourceFile)]): Option[Comment] = {
val docResponse = new Response[(String, String, Position)]
askDocComment(sym, source, sym.owner, fragments, docResponse)
- docResponse.get.left.toOption flatMap {
+ docResponse.get.swap.toOption flatMap {
case (expanded, raw, pos) =>
if (expanded.isEmpty)
None
@@ -85,13 +85,13 @@ object Test extends InteractiveTest {
val batch = new BatchSourceFile(source.file, newText.toCharArray)
val reloadResponse = new Response[Unit]
compiler.askReload(List(batch), reloadResponse)
- reloadResponse.get.left.toOption match {
+ reloadResponse.get.swap.toOption match {
case None =>
println("Couldn't reload")
case Some(_) =>
val parseResponse = new Response[Tree]
askParsedEntered(batch, true, parseResponse)
- parseResponse.get.left.toOption match {
+ parseResponse.get.swap.toOption match {
case None =>
println("Couldn't parse")
case Some(_) =>
diff --git a/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala b/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala
index 3f59282083..25e0a9580f 100644
--- a/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala
+++ b/test/files/presentation/ide-bug-1000531/src/CrashOnLoad.scala
@@ -1,6 +1,6 @@
/** When this files is opened within the IDE, a typing error is reported. */
class A[B] extends TestIterable[B] {
- import scala.collection.JavaConversions._
+ import collection.convert.ImplicitConversionsToScala._
def iterator: other.TestIterator[Nothing] = ???
iterator./*!*/
diff --git a/test/files/presentation/random.check b/test/files/presentation/random.check
index fb3500aeea..1e40e178be 100644
--- a/test/files/presentation/random.check
+++ b/test/files/presentation/random.check
@@ -4,7 +4,7 @@ askType at Random.scala(18,14)
================================================================================
[response] askTypeAt (18,14)
val filter: Int => Boolean = try {
- java.this.lang.Integer.parseInt(args.apply(0)) match {
+ java.lang.Integer.parseInt(args.apply(0)) match {
case 1 => ((x: Int) => x.%(2).!=(0))
case 2 => ((x: Int) => x.%(2).==(0))
case _ => ((x: Int) => x.!=(0))
diff --git a/test/files/presentation/scope-completion-3.check b/test/files/presentation/scope-completion-3.check
index b70a7d5c6b..f2510127fb 100644
--- a/test/files/presentation/scope-completion-3.check
+++ b/test/files/presentation/scope-completion-3.check
@@ -3,7 +3,7 @@ reload: Completions.scala
askScopeCompletion at Completions.scala(75,2)
================================================================================
[response] askScopeCompletion at (75,2)
-retrieved 37 members
+retrieved 38 members
abstract class Base1 extends AnyRef
abstract trait Trait1 extends AnyRef
class Cb1 extends AnyRef
@@ -14,6 +14,8 @@ def <init>(): test.Completion1
def fb1: Int
def fc1: Int
def ft1: Int
+def rt1: Int
+def rt1_=(x$1: Int): Unit
object Completion2
object Ob1
object Oc1
@@ -30,23 +32,22 @@ private[this] val vb1: Int
private[this] val vb3: Int
private[this] val vc1: Int
private[this] val vc2: Int
-private[this] val vt1: Int
private[this] val vt3: Int
private[this] var rb1: Int
private[this] var rb3: Int
private[this] var rc1: Int
private[this] var rc2: Int
-private[this] var rt1: Int
private[this] var rt3: Int
type tb1 = Completion1.this.tb1
type tc1 = Completion1.this.tc1
type tt1 = Completion1.this.tt1
+val vt1: Int
================================================================================
askScopeCompletion at Completions.scala(104,2)
================================================================================
[response] askScopeCompletion at (104,2)
-retrieved 37 members
+retrieved 38 members
abstract class Base1 extends AnyRef
abstract trait Trait1 extends AnyRef
class Cb1 extends AnyRef
@@ -57,6 +58,8 @@ def <init>(): test.Completion2.type
def fb1: Int
def fo1: Int
def ft1: Int
+def rt1: Int
+def rt1_=(x$1: Int): Unit
object Completion2
object Ob1
object Oo1
@@ -73,15 +76,14 @@ private[this] val vb1: Int
private[this] val vb3: Int
private[this] val vo1: Int
private[this] val vo2: Int
-private[this] val vt1: Int
private[this] val vt3: Int
private[this] var rb1: Int
private[this] var rb3: Int
private[this] var ro1: Int
private[this] var ro2: Int
-private[this] var rt1: Int
private[this] var rt3: Int
type tb1 = test.Completion2.tb1
type to1 = test.Completion2.to1
type tt1 = test.Completion2.tt1
+val vt1: Int
================================================================================
diff --git a/test/files/presentation/scope-completion-3/src/Completions.scala b/test/files/presentation/scope-completion-3/src/Completions.scala
index 18cef1cefa..8d79adc669 100644
--- a/test/files/presentation/scope-completion-3/src/Completions.scala
+++ b/test/files/presentation/scope-completion-3/src/Completions.scala
@@ -1,6 +1,6 @@
package test
-/* check availability of members defined locally and in hierachy */
+/* check availability of members defined locally and in hierarchy */
abstract class Base1 {
diff --git a/test/files/presentation/t4287c.check b/test/files/presentation/t4287c.check
deleted file mode 100644
index 42fc30997d..0000000000
--- a/test/files/presentation/t4287c.check
+++ /dev/null
@@ -1,11 +0,0 @@
-reload: Foo.scala
-
-askHyperlinkPos for `A` at (1,18) Foo.scala
-================================================================================
-[response] found askHyperlinkPos for `A` at (3,8) Foo.scala
-================================================================================
-
-askHyperlinkPos for `a` at (1,25) Foo.scala
-================================================================================
-[response] found askHyperlinkPos for `a` at (4,7) Foo.scala
-================================================================================
diff --git a/test/files/presentation/t4287c/Test.scala b/test/files/presentation/t4287c/Test.scala
deleted file mode 100644
index bec1131c4c..0000000000
--- a/test/files/presentation/t4287c/Test.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-import scala.tools.nsc.interactive.tests.InteractiveTest
-
-object Test extends InteractiveTest \ No newline at end of file
diff --git a/test/files/presentation/t4287c/src/Foo.scala b/test/files/presentation/t4287c/src/Foo.scala
deleted file mode 100644
index 26870b5021..0000000000
--- a/test/files/presentation/t4287c/src/Foo.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-class A(a: Int = A/*#*/.a/*#*/)
-
-object A {
- val a = 2
-}
-
-class B extends A {
- def this(a) = this()
-} \ No newline at end of file
diff --git a/test/files/presentation/t5708.check b/test/files/presentation/t5708.check
index 4b33893e98..0f24d9626b 100644
--- a/test/files/presentation/t5708.check
+++ b/test/files/presentation/t5708.check
@@ -35,7 +35,7 @@ final def wait(): Unit
final def wait(x$1: Long): Unit
final def wait(x$1: Long,x$2: Int): Unit
final private[this] val CONST_STRING: String("constant")
-lazy private[this] var foo: Int
+lazy val foo: Int
private[package test] def pkgPrivateM: String
private[this] val pkgPrivateV: String
================================================================================
diff --git a/test/files/presentation/t7678/Runner.scala b/test/files/presentation/t7678/Runner.scala
index 14d6dc2a70..c6736a65b0 100644
--- a/test/files/presentation/t7678/Runner.scala
+++ b/test/files/presentation/t7678/Runner.scala
@@ -7,7 +7,7 @@ object Test extends InteractiveTest {
override def runDefaultTests() {
def resolveTypeTagHyperlink() {
- val sym = compiler.askForResponse(() => compiler.currentRun.runDefinitions.TypeTagClass).get.left.get
+ val sym = compiler.askForResponse(() => compiler.currentRun.runDefinitions.TypeTagClass).get.swap.getOrElse(???)
val r = new Response[Position]
compiler.askLinkPos(sym, new BatchSourceFile("", source), r)
r.get
diff --git a/test/files/presentation/t8459.check b/test/files/presentation/t8459.check
index 336c147141..4c105d2a00 100644
--- a/test/files/presentation/t8459.check
+++ b/test/files/presentation/t8459.check
@@ -9,6 +9,7 @@ scala.AnyRef {
()
};
private[this] val bar: F = new F();
+ <stable> <accessor> def bar: F = Foo.this.bar;
Foo.this.bar.<selectDynamic: error>("<error>")
}
================================================================================
diff --git a/test/files/presentation/t8941.check b/test/files/presentation/t8941.check
index 341804903a..4285eebd8f 100644
--- a/test/files/presentation/t8941.check
+++ b/test/files/presentation/t8941.check
@@ -3,5 +3,5 @@ reload: Source.scala
askType at Source.scala(6,7)
================================================================================
[response] askTypeAt (6,7)
-scala.this.Predef.???
+scala.Predef.???
================================================================================
diff --git a/test/files/run/Course-2002-07.scala b/test/files/run/Course-2002-07.scala
index 2d9457653f..db6e1d8e04 100644
--- a/test/files/run/Course-2002-07.scala
+++ b/test/files/run/Course-2002-07.scala
@@ -485,7 +485,7 @@ object MB {
import Utils._;
- trait Expr {
+ sealed trait Expr {
private def count: Int = this match {
case Lit(n) => n
diff --git a/test/files/run/Course-2002-08.scala b/test/files/run/Course-2002-08.scala
index 5e21edaba3..1d0e02262d 100644
--- a/test/files/run/Course-2002-08.scala
+++ b/test/files/run/Course-2002-08.scala
@@ -205,7 +205,7 @@ object M5 {
val inputSig = input.getSignal;
afterDelay(InverterDelay) {() => output.setSignal(!inputSig) };
}
- input addAction invertAction
+ input addAction invertAction _
}
def andGate(a1: Wire, a2: Wire, output: Wire): Unit = {
@@ -214,8 +214,8 @@ object M5 {
val a2Sig = a2.getSignal;
afterDelay(AndGateDelay) {() => output.setSignal(a1Sig & a2Sig) };
}
- a1 addAction andAction;
- a2 addAction andAction;
+ a1 addAction andAction _
+ a2 addAction andAction _
}
def orGate(o1: Wire, o2: Wire, output: Wire): Unit = {
@@ -224,8 +224,8 @@ object M5 {
val o2Sig = o2.getSignal;
afterDelay(OrGateDelay) {() => output.setSignal(o1Sig | o2Sig) };
}
- o1 addAction orAction;
- o2 addAction orAction;
+ o1 addAction orAction _
+ o2 addAction orAction _
}
def probe(name: String, wire: Wire): Unit = {
@@ -479,7 +479,7 @@ abstract class BasicCircuitSimulator() extends Simulator() {
val inputSig = input.getSignal;
afterDelay(InverterDelay) {() => output.setSignal(!inputSig) };
}
- input addAction invertAction
+ input addAction invertAction _
}
def andGate(a1: Wire, a2: Wire, output: Wire) = {
@@ -488,8 +488,8 @@ abstract class BasicCircuitSimulator() extends Simulator() {
val a2Sig = a2.getSignal;
afterDelay(AndGateDelay) {() => output.setSignal(a1Sig & a2Sig) };
}
- a1 addAction andAction;
- a2 addAction andAction
+ a1 addAction andAction _
+ a2 addAction andAction _
}
def orGate(a1: Wire, a2: Wire, output: Wire) = {
@@ -498,8 +498,8 @@ abstract class BasicCircuitSimulator() extends Simulator() {
val a2Sig = a2.getSignal;
afterDelay(OrGateDelay) {() => output.setSignal(a1Sig | a2Sig) };
}
- a1 addAction orAction;
- a2 addAction orAction
+ a1 addAction orAction _
+ a2 addAction orAction _
}
def orGate2(a1: Wire, a2: Wire, output: Wire) = {
diff --git a/test/files/run/SD-235.scala b/test/files/run/SD-235.scala
new file mode 100644
index 0000000000..eb79c6fe71
--- /dev/null
+++ b/test/files/run/SD-235.scala
@@ -0,0 +1,39 @@
+class C {
+ var ORef: Object = null
+ def test = {
+ object O {
+ assert(!Thread.holdsLock(C.this))
+ assert(Thread.holdsLock(ORef))
+ }
+ val captor = new { def oh = O }
+ val refField = captor.getClass.getDeclaredFields.last
+ refField.setAccessible(true)
+ assert(refField.getType.toString.contains("LazyRef"), refField)
+ ORef = refField.get(captor)
+ O
+ }
+}
+
+class D {
+ var ORef: Object = null
+ def test = {
+ lazy val O = {
+ assert(!Thread.holdsLock(D.this))
+ assert(Thread.holdsLock(ORef))
+ "O"
+ }
+ val captor = new { def oh = O }
+ val refField = captor.getClass.getDeclaredFields.last
+ refField.setAccessible(true)
+ assert(refField.getType.toString.contains("LazyRef"), refField)
+ ORef = refField.get(captor)
+ O
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new C().test
+ new D().test
+ }
+}
diff --git a/test/files/run/SymbolsTest.scala b/test/files/run/SymbolsTest.scala
index d5948ea168..7c185b0e09 100644
--- a/test/files/run/SymbolsTest.scala
+++ b/test/files/run/SymbolsTest.scala
@@ -137,16 +137,16 @@ object Test {
// }
// val an2 = () => {
// object nested {
- // val m = 'mfsa
+ // val m = 'mfsa
// }
// nested.m
// }
// val an3 = () => {
// object nested {
- // val f = () => {
- // 'layered
- // }
- // def gets = f()
+ // val f = () => {
+ // 'layered
+ // }
+ // def gets = f()
// }
// nested.gets
// }
@@ -204,8 +204,8 @@ object Test {
val s1 = 's1
def s2 = 's2
object inner {
- val s3 = 's3
- val s4 = 's4
+ val s3 = 's3
+ val s4 = 's4
}
}
@@ -223,8 +223,8 @@ object Test {
val s5 = 's5
def s6 = 's6
object inner2 {
- val s7 = 's7
- def s8 = 's8
+ val s7 = 's7
+ def s8 = 's8
}
}
assert(Local.s5 == 's5)
diff --git a/test/files/run/analyzerPlugins.check b/test/files/run/analyzerPlugins.check
index 9803465ddc..64b68db242 100644
--- a/test/files/run/analyzerPlugins.check
+++ b/test/files/run/analyzerPlugins.check
@@ -1,4 +1,5 @@
adaptBoundsToAnnots(List( <: Int), List(type T), List(Int @testAnn)) [2]
+annotationsConform(Boolean @testAnn, Boolean @testAnn) [2]
annotationsConform(Boolean @testAnn, Boolean) [1]
annotationsConform(Boolean(false), Boolean @testAnn) [1]
annotationsConform(Int @testAnn, ?A) [1]
@@ -13,33 +14,32 @@ canAdaptAnnotations(Trees$Select, ?) [1]
canAdaptAnnotations(Trees$Select, Boolean @testAnn) [1]
canAdaptAnnotations(Trees$Select, Boolean) [1]
canAdaptAnnotations(Trees$Select, String @testAnn) [1]
-canAdaptAnnotations(Trees$TypeTree, ?) [10]
+canAdaptAnnotations(Trees$TypeTree, ?) [8]
canAdaptAnnotations(Trees$Typed, ?) [3]
canAdaptAnnotations(Trees$Typed, Any) [1]
canAdaptAnnotations(Trees$Typed, Int) [1]
lub(List(Int @testAnn, Int)) [1]
pluginsPt(?, Trees$Annotated) [7]
-pluginsPt(?, Trees$Apply) [8]
+pluginsPt(?, Trees$Apply) [11]
pluginsPt(?, Trees$ApplyImplicitView) [2]
-pluginsPt(?, Trees$Assign) [7]
pluginsPt(?, Trees$Block) [4]
pluginsPt(?, Trees$ClassDef) [2]
pluginsPt(?, Trees$DefDef) [14]
-pluginsPt(?, Trees$Ident) [50]
+pluginsPt(?, Trees$Ident) [51]
pluginsPt(?, Trees$If) [2]
pluginsPt(?, Trees$Literal) [16]
-pluginsPt(?, Trees$New) [5]
+pluginsPt(?, Trees$New) [6]
pluginsPt(?, Trees$PackageDef) [1]
pluginsPt(?, Trees$Return) [1]
-pluginsPt(?, Trees$Select) [47]
+pluginsPt(?, Trees$Select) [45]
pluginsPt(?, Trees$Super) [2]
-pluginsPt(?, Trees$This) [20]
+pluginsPt(?, Trees$This) [13]
pluginsPt(?, Trees$TypeApply) [3]
pluginsPt(?, Trees$TypeBoundsTree) [2]
pluginsPt(?, Trees$TypeDef) [1]
-pluginsPt(?, Trees$TypeTree) [38]
+pluginsPt(?, Trees$TypeTree) [32]
pluginsPt(?, Trees$Typed) [1]
-pluginsPt(?, Trees$ValDef) [21]
+pluginsPt(?, Trees$ValDef) [13]
pluginsPt(Any, Trees$Literal) [2]
pluginsPt(Any, Trees$Typed) [1]
pluginsPt(Array[Any], Trees$ArrayValue) [1]
@@ -47,25 +47,21 @@ pluginsPt(Boolean @testAnn, Trees$Literal) [1]
pluginsPt(Boolean @testAnn, Trees$Select) [1]
pluginsPt(Boolean, Trees$Apply) [1]
pluginsPt(Boolean, Trees$Ident) [1]
-pluginsPt(Boolean, Trees$Literal) [1]
pluginsPt(Double, Trees$Select) [1]
pluginsPt(Int @testAnn, Trees$Literal) [1]
pluginsPt(Int, Trees$Apply) [1]
-pluginsPt(Int, Trees$Ident) [2]
-pluginsPt(Int, Trees$If) [1]
-pluginsPt(Int, Trees$Literal) [5]
+pluginsPt(Int, Trees$Ident) [1]
+pluginsPt(Int, Trees$Literal) [4]
pluginsPt(Int, Trees$Select) [3]
-pluginsPt(List, Trees$Apply) [1]
pluginsPt(List[Any], Trees$Select) [1]
pluginsPt(String @testAnn, Trees$Select) [1]
pluginsPt(String, Trees$Apply) [1]
pluginsPt(String, Trees$Block) [2]
-pluginsPt(String, Trees$Ident) [4]
+pluginsPt(String, Trees$Ident) [3]
pluginsPt(String, Trees$Literal) [1]
pluginsPt(String, Trees$Select) [1]
-pluginsPt(String, Trees$Typed) [1]
pluginsPt(Unit, Trees$Assign) [1]
-pluginsPt(testAnn, Trees$Apply) [5]
+pluginsPt(testAnn, Trees$Apply) [6]
pluginsTypeSig(<none>, Trees$Template) [2]
pluginsTypeSig(class A, Trees$ClassDef) [1]
pluginsTypeSig(class testAnn, Trees$ClassDef) [1]
@@ -75,16 +71,18 @@ pluginsTypeSig(method foo, Trees$DefDef) [1]
pluginsTypeSig(method method, Trees$DefDef) [1]
pluginsTypeSig(method nested, Trees$DefDef) [1]
pluginsTypeSig(type T, Trees$TypeDef) [2]
-pluginsTypeSig(value annotField, Trees$ValDef) [2]
+pluginsTypeSig(value annotField, Trees$ValDef) [1]
+pluginsTypeSig(value count_=, Trees$ValDef) [1]
pluginsTypeSig(value f, Trees$ValDef) [1]
-pluginsTypeSig(value inferField, Trees$ValDef) [2]
-pluginsTypeSig(value lub1, Trees$ValDef) [2]
-pluginsTypeSig(value lub2, Trees$ValDef) [2]
+pluginsTypeSig(value inferField, Trees$ValDef) [1]
+pluginsTypeSig(value lub1, Trees$ValDef) [1]
+pluginsTypeSig(value lub2, Trees$ValDef) [1]
pluginsTypeSig(value param, Trees$ValDef) [2]
pluginsTypeSig(value str, Trees$ValDef) [1]
-pluginsTypeSig(value x, Trees$ValDef) [4]
-pluginsTypeSig(value y, Trees$ValDef) [4]
-pluginsTypeSig(variable count, Trees$ValDef) [3]
+pluginsTypeSig(value x, Trees$ValDef) [3]
+pluginsTypeSig(value y, Trees$ValDef) [3]
+pluginsTypeSig(variable count, Trees$DefDef) [1]
+pluginsTypeSig(variable count, Trees$ValDef) [1]
pluginsTypeSigAccessor(value annotField) [1]
pluginsTypeSigAccessor(value inferField) [1]
pluginsTypeSigAccessor(value lub1) [1]
@@ -93,11 +91,12 @@ pluginsTypeSigAccessor(value x) [1]
pluginsTypeSigAccessor(value y) [1]
pluginsTypeSigAccessor(variable count) [2]
pluginsTyped( <: Int, Trees$TypeBoundsTree) [2]
+pluginsTyped(()Double, Trees$Select) [6]
pluginsTyped(()Object, Trees$Select) [1]
pluginsTyped(()String, Trees$Ident) [1]
pluginsTyped(()String, Trees$TypeApply) [1]
pluginsTyped(()scala.annotation.Annotation, Trees$Select) [1]
-pluginsTyped(()testAnn, Trees$Select) [10]
+pluginsTyped(()testAnn, Trees$Select) [12]
pluginsTyped((str: String)A <and> (param: Double)A, Trees$Select) [1]
pluginsTyped((x$1: Any)Boolean <and> (x: Double)Boolean <and> (x: Float)Boolean <and> (x: Long)Boolean <and> (x: Int)Boolean <and> (x: Char)Boolean <and> (x: Short)Boolean <and> (x: Byte)Boolean, Trees$Select) [1]
pluginsTyped((x$1: Int)Unit, Trees$Select) [1]
@@ -110,15 +109,15 @@ pluginsTyped(<notype>, Trees$ClassDef) [2]
pluginsTyped(<notype>, Trees$DefDef) [14]
pluginsTyped(<notype>, Trees$PackageDef) [1]
pluginsTyped(<notype>, Trees$TypeDef) [1]
-pluginsTyped(<notype>, Trees$ValDef) [21]
+pluginsTyped(<notype>, Trees$ValDef) [13]
pluginsTyped(=> Boolean @testAnn, Trees$Select) [1]
-pluginsTyped(=> Double, Trees$Select) [4]
+pluginsTyped(=> Double, Trees$Select) [1]
pluginsTyped(=> Int, Trees$Select) [5]
pluginsTyped(=> Int, Trees$TypeApply) [1]
pluginsTyped(=> String @testAnn, Trees$Select) [1]
pluginsTyped(A, Trees$Apply) [1]
pluginsTyped(A, Trees$Ident) [2]
-pluginsTyped(A, Trees$This) [8]
+pluginsTyped(A, Trees$This) [1]
pluginsTyped(A, Trees$TypeTree) [4]
pluginsTyped(A.super.type, Trees$Super) [1]
pluginsTyped(A.this.type, Trees$This) [11]
@@ -126,50 +125,47 @@ pluginsTyped(Any, Trees$TypeTree) [1]
pluginsTyped(AnyRef, Trees$Select) [4]
pluginsTyped(Array[Any], Trees$ArrayValue) [1]
pluginsTyped(Boolean @testAnn, Trees$Select) [1]
-pluginsTyped(Boolean @testAnn, Trees$TypeTree) [4]
-pluginsTyped(Boolean(false), Trees$Literal) [2]
+pluginsTyped(Boolean @testAnn, Trees$TypeTree) [3]
+pluginsTyped(Boolean(false), Trees$Literal) [1]
pluginsTyped(Boolean, Trees$Apply) [1]
-pluginsTyped(Boolean, Trees$Select) [4]
+pluginsTyped(Boolean, Trees$Select) [3]
pluginsTyped(Char('c'), Trees$Literal) [2]
+pluginsTyped(Double, Trees$Apply) [3]
pluginsTyped(Double, Trees$Select) [6]
pluginsTyped(Int @testAnn, Trees$TypeTree) [2]
pluginsTyped(Int @testAnn, Trees$Typed) [2]
-pluginsTyped(Int(0), Trees$Literal) [3]
+pluginsTyped(Int(0), Trees$Literal) [2]
pluginsTyped(Int(1) @testAnn, Trees$Typed) [1]
pluginsTyped(Int(1), Trees$Literal) [8]
pluginsTyped(Int(2), Trees$Literal) [1]
pluginsTyped(Int, Trees$Apply) [1]
-pluginsTyped(Int, Trees$Ident) [2]
-pluginsTyped(Int, Trees$If) [2]
-pluginsTyped(Int, Trees$Select) [15]
-pluginsTyped(Int, Trees$TypeTree) [13]
-pluginsTyped(List, Trees$Apply) [1]
-pluginsTyped(List, Trees$Select) [1]
+pluginsTyped(Int, Trees$Ident) [1]
+pluginsTyped(Int, Trees$If) [1]
+pluginsTyped(Int, Trees$Select) [12]
+pluginsTyped(Int, Trees$TypeTree) [10]
pluginsTyped(List[Any], Trees$Apply) [1]
pluginsTyped(List[Any], Trees$Select) [1]
-pluginsTyped(List[Any], Trees$TypeTree) [3]
+pluginsTyped(List[Any], Trees$TypeTree) [2]
pluginsTyped(Nothing, Trees$Return) [1]
pluginsTyped(Object, Trees$Apply) [1]
pluginsTyped(String @testAnn, Trees$Ident) [1]
pluginsTyped(String @testAnn, Trees$Select) [1]
-pluginsTyped(String @testAnn, Trees$TypeTree) [4]
+pluginsTyped(String @testAnn, Trees$TypeTree) [3]
pluginsTyped(String(""), Trees$Literal) [2]
pluginsTyped(String("huhu"), Trees$Literal) [1]
pluginsTyped(String("str") @testAnn, Trees$Typed) [1]
pluginsTyped(String("str"), Trees$Literal) [1]
-pluginsTyped(String("str"), Trees$Typed) [1]
pluginsTyped(String("two"), Trees$Literal) [2]
pluginsTyped(String, Trees$Apply) [2]
pluginsTyped(String, Trees$Block) [2]
-pluginsTyped(String, Trees$Ident) [1]
-pluginsTyped(String, Trees$Select) [9]
-pluginsTyped(String, Trees$TypeTree) [7]
+pluginsTyped(String, Trees$Select) [7]
+pluginsTyped(String, Trees$TypeTree) [6]
pluginsTyped(Unit, Trees$Apply) [2]
-pluginsTyped(Unit, Trees$Assign) [8]
+pluginsTyped(Unit, Trees$Assign) [1]
pluginsTyped(Unit, Trees$Block) [4]
pluginsTyped(Unit, Trees$If) [1]
pluginsTyped(Unit, Trees$Literal) [5]
-pluginsTyped(Unit, Trees$TypeTree) [1]
+pluginsTyped(Unit, Trees$TypeTree) [2]
pluginsTyped([A](xs: A*)List[A], Trees$Select) [1]
pluginsTyped([T <: Int]=> Int, Trees$Select) [1]
pluginsTyped([T0]()T0, Trees$Select) [1]
@@ -183,9 +179,9 @@ pluginsTyped(scala.collection.immutable.List.type, Trees$Select) [2]
pluginsTyped(scala.collection.immutable.StringOps, Trees$ApplyImplicitView) [2]
pluginsTyped(scala.collection.mutable.WrappedArray[Any], Trees$Apply) [1]
pluginsTyped(str.type, Trees$Ident) [3]
-pluginsTyped(testAnn, Trees$Apply) [5]
-pluginsTyped(testAnn, Trees$Ident) [5]
-pluginsTyped(testAnn, Trees$New) [5]
+pluginsTyped(testAnn, Trees$Apply) [6]
+pluginsTyped(testAnn, Trees$Ident) [6]
+pluginsTyped(testAnn, Trees$New) [6]
pluginsTyped(testAnn, Trees$This) [1]
pluginsTyped(testAnn, Trees$TypeTree) [2]
pluginsTyped(testAnn.super.type, Trees$Super) [1]
diff --git a/test/files/run/array-charSeq.check b/test/files/run/array-charSeq.check
index f1f374f63e..3ccf493cee 100644
--- a/test/files/run/array-charSeq.check
+++ b/test/files/run/array-charSeq.check
@@ -1,3 +1,4 @@
+warning: there were two deprecation warnings (since 2.12.0); re-run with -deprecation for details
[check 'abcdefghi'] len = 9
sub(0, 9) == 'abcdefghi'
diff --git a/test/files/run/bcodeInlinerMixed.flags b/test/files/run/bcodeInlinerMixed.flags
index 63b5558cfd..768ca4f13b 100644
--- a/test/files/run/bcodeInlinerMixed.flags
+++ b/test/files/run/bcodeInlinerMixed.flags
@@ -1 +1 @@
--Ybackend:GenBCode -Yopt:l:classpath \ No newline at end of file
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/run/bitsets.check b/test/files/run/bitsets.check
index c24fd6238f..89e51f9a78 100644
--- a/test/files/run/bitsets.check
+++ b/test/files/run/bitsets.check
@@ -1,4 +1,4 @@
-warning: there were three deprecation warnings; re-run with -deprecation for details
+warning: there were three deprecation warnings (since 2.12.0); re-run with -deprecation for details
ms0 = BitSet(2)
ms1 = BitSet(2)
ms2 = BitSet(2)
diff --git a/test/files/run/blame_eye_triple_eee-double.flags b/test/files/run/blame_eye_triple_eee-double.flags
deleted file mode 100644
index c9b68d70dc..0000000000
--- a/test/files/run/blame_eye_triple_eee-double.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise
diff --git a/test/files/run/blame_eye_triple_eee-float.flags b/test/files/run/blame_eye_triple_eee-float.flags
deleted file mode 100644
index c9b68d70dc..0000000000
--- a/test/files/run/blame_eye_triple_eee-float.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise
diff --git a/test/files/run/caseclasses.scala b/test/files/run/caseclasses.scala
index 668c984f3d..10c0916dc0 100644
--- a/test/files/run/caseclasses.scala
+++ b/test/files/run/caseclasses.scala
@@ -18,7 +18,7 @@ object M {
object Test extends App {
def Abs(x: Int) = new Abs(x * 2){}
- Abs(2) match {
+ (Abs(2): @unchecked) match {
case Abs(4) => ;
}
diff --git a/test/files/run/classfile-format-51.scala b/test/files/run/classfile-format-51.scala
index 81df2f08d9..40eebee198 100644
--- a/test/files/run/classfile-format-51.scala
+++ b/test/files/run/classfile-format-51.scala
@@ -1,6 +1,5 @@
import java.io.{File, FileOutputStream}
-import scala.tools.nsc.settings.ScalaVersion
import scala.tools.partest._
import scala.tools.asm
import asm.{AnnotationVisitor, ClassWriter, FieldVisitor, Handle, MethodVisitor, Opcodes}
@@ -17,7 +16,7 @@ import Opcodes._
// verify. So the test includes a version check that short-circuits the whole test
// on JDK 6
object Test extends DirectTest {
- override def extraSettings: String = "-optimise -usejavacp -d " + testOutput.path + " -cp " + testOutput.path
+ override def extraSettings: String = "-opt:l:classpath -usejavacp -d " + testOutput.path + " -cp " + testOutput.path
def generateClass() {
val invokerClassName = "DynamicInvoker"
@@ -81,7 +80,7 @@ object Test extends DirectTest {
val test = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "test", s"()Ljava/lang/String;", null, null)
test.visitCode()
- val bootstrapHandle = new Handle(H_INVOKESTATIC, invokerClassName, bootstrapMethodName, bootStrapMethodType)
+ val bootstrapHandle = new Handle(H_INVOKESTATIC, invokerClassName, bootstrapMethodName, bootStrapMethodType, /* itf = */ false)
test.visitInvokeDynamicInsn("invoke", targetMethodType, bootstrapHandle)
test.visitInsn(ARETURN)
test.visitMaxs(1, 1)
diff --git a/test/files/run/classfile-format-52.scala b/test/files/run/classfile-format-52.scala
index 453f61ac84..03ceeb074f 100644
--- a/test/files/run/classfile-format-52.scala
+++ b/test/files/run/classfile-format-52.scala
@@ -1,6 +1,5 @@
import java.io.{File, FileOutputStream}
-import scala.tools.nsc.settings.ScalaVersion
import scala.tools.partest._
import scala.tools.asm
import asm.{AnnotationVisitor, ClassWriter, FieldVisitor, Handle, MethodVisitor, Opcodes}
@@ -14,7 +13,7 @@ import Opcodes._
// By its nature the test can only work on JDK 8+ because under JDK 7- the
// interface won't verify.
object Test extends DirectTest {
- override def extraSettings: String = "-optimise -usejavacp -d " + testOutput.path + " -cp " + testOutput.path
+ override def extraSettings: String = "-opt:l:classpath -usejavacp -d " + testOutput.path + " -cp " + testOutput.path
def generateInterface() {
val interfaceName = "HasDefaultMethod"
diff --git a/test/files/run/collection-stacks.check b/test/files/run/collection-stacks.check
index 3a366bfcdf..cd87cc61e4 100644
--- a/test/files/run/collection-stacks.check
+++ b/test/files/run/collection-stacks.check
@@ -1,4 +1,6 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0)
+warning: there were two deprecation warnings (since 2.12.0)
+warning: there were three deprecation warnings in total; re-run with -deprecation for details
3-2-1: true
3-2-1: true
apply
diff --git a/test/files/run/colltest.check b/test/files/run/colltest.check
index 9579d781aa..f362f23547 100644
--- a/test/files/run/colltest.check
+++ b/test/files/run/colltest.check
@@ -1,4 +1,4 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
true
false
true
diff --git a/test/files/run/compiler-asSeenFrom.check b/test/files/run/compiler-asSeenFrom.check
index 7305504115..46ea4d3685 100644
--- a/test/files/run/compiler-asSeenFrom.check
+++ b/test/files/run/compiler-asSeenFrom.check
@@ -332,11 +332,6 @@ value dZ { // after parser
val cD: ll.C[List[T3]]
}
-value dZ { // after parser
- private[this] val cD: ll.C[List[T3]]
- val cD: ll.C[List[T3]]
-}
-
value dZ { // after uncurry
private[this] val cD: ll.C[List[T3]]
val cD(): ll.C[List[T3]]
@@ -347,11 +342,9 @@ value dZ { // after erasure
val cD(): ll.C
}
-value jZ { // after parser
- def thisI(): I.this.type
- def thisC(): C.this.type
- def t2(): T2
- def t1(): T1
+value dZ { // after parser
+ private[this] val cD: ll.C[List[T3]]
+ val cD: ll.C[List[T3]]
}
value jZ { // after parser
@@ -393,6 +386,13 @@ value jZ { // after flatten
def t1(): Object
}
+value jZ { // after parser
+ def thisI(): I.this.type
+ def thisC(): C.this.type
+ def t2(): T2
+ def t1(): T1
+}
+
method kz { // after parser
def thisI(): I.this.type
def thisC(): C.this.type
diff --git a/test/files/run/concurrent-map-conversions.scala b/test/files/run/concurrent-map-conversions.scala
index d23d5bbbe4..1179764e37 100644
--- a/test/files/run/concurrent-map-conversions.scala
+++ b/test/files/run/concurrent-map-conversions.scala
@@ -1,14 +1,5 @@
-
-
-
-
-object Test {
-
- def main(args: Array[String]) {
- testConversions()
- testConverters()
- }
+object Test extends App {
def needPackageConcurrentMap(map: collection.concurrent.Map[Int, Int]) {
}
@@ -16,7 +7,7 @@ object Test {
}
def testConversions() {
- import collection.JavaConversions._
+ import collection.convert.ImplicitConversions._
val skiplist = new java.util.concurrent.ConcurrentSkipListMap[Int, Int]
val ctrie = new collection.concurrent.TrieMap[Int, Int]
@@ -33,4 +24,6 @@ object Test {
needJavaConcurrent(ctrie.asJava)
}
+ testConversions()
+ testConverters()
}
diff --git a/test/files/run/concurrent-stream.check b/test/files/run/concurrent-stream.check
deleted file mode 100644
index d4adf84490..0000000000
--- a/test/files/run/concurrent-stream.check
+++ /dev/null
@@ -1,3 +0,0 @@
-Testing standard cons.
-Evaluation 0: List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
-Evaluation 1: List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
diff --git a/test/files/run/concurrent-stream.scala b/test/files/run/concurrent-stream.scala
deleted file mode 100644
index 9d5ba0428e..0000000000
--- a/test/files/run/concurrent-stream.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-// test concurrent calls to Stream.tail
-@deprecated("Suppress warnings", since="2.11")
-object Test {
-
- def slowRange(from: Int, until: Int, cons: (Int, => Stream[Int]) => Stream[Int]): Stream[Int] = {
- var current = from
- def next: Stream[Int] = {
- Thread.sleep(100)
- if (current >= until) Stream.empty
- else {
- val stream = cons(current, next)
- current += 1
- stream
- }
- }
- next
- }
-
- def testCons(cons: (Int, => Stream[Int]) => Stream[Int]): Unit = {
- import scala.actors.Actor._
-
- val stream = slowRange(0, 10, cons)
- val main = self
- actor { main ! stream.toList }
- actor { main ! stream.toList }
- val eval0 = receive { case list: List[Int @unchecked] => list }
- val eval1 = receive { case list: List[Int @unchecked] => list }
- println("Evaluation 0: " + eval0)
- println("Evaluation 1: " + eval1)
- }
-
- def main(args: Array[String]) {
- println("Testing standard cons.")
- testCons(Stream.cons.apply(_, _))
- }
-}
-
diff --git a/test/files/run/constant-optimization.flags b/test/files/run/constant-optimization.flags
deleted file mode 100644
index c9b68d70dc..0000000000
--- a/test/files/run/constant-optimization.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise
diff --git a/test/files/run/constrained-types.check b/test/files/run/constrained-types.check
index 5444cf2088..4acd9d16ae 100644
--- a/test/files/run/constrained-types.check
+++ b/test/files/run/constrained-types.check
@@ -69,11 +69,11 @@ scala> var four = "four"
four: String = four
scala> val four2 = m(four) // should have an existential bound
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
four2: String @Annot(x) forSome { val x: String } = four
scala> val four3 = four2 // should have the same type as four2
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
four3: String @Annot(x) forSome { val x: String } = four
scala> val stuff = m("stuff") // should not crash
@@ -96,7 +96,7 @@ scala> def m = {
val y : String @Annot(x) = x
y
} // x should not escape the local scope with a narrow type
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
m: String @Annot(x) forSome { val x: String }
scala>
@@ -110,7 +110,7 @@ scala> def n(y: String) = {
}
m("stuff".stripMargin)
} // x should be existentially bound
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
n: (y: String)String @Annot(x) forSome { val x: String }
scala>
diff --git a/test/files/run/contrib674.check b/test/files/run/contrib674.check
index 78325c1810..98c72f34dd 100644
--- a/test/files/run/contrib674.check
+++ b/test/files/run/contrib674.check
@@ -1,3 +1,6 @@
-contrib674.scala:15: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+contrib674.scala:15: warning: a pure expression does nothing in statement position
+ 1
+ ^
+contrib674.scala:15: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
1
^
diff --git a/test/files/run/contrib674.scala b/test/files/run/contrib674.scala
index 45c9871fc4..bb9dad3686 100644
--- a/test/files/run/contrib674.scala
+++ b/test/files/run/contrib674.scala
@@ -1,7 +1,7 @@
// causes VerifyError with scala-2.5.1
object Test extends App {
- def bad() {
+ def bad(): Unit = {
try {
1
} catch {
diff --git a/test/files/run/dead-code-elimination.flags b/test/files/run/dead-code-elimination.flags
deleted file mode 100644
index 49d036a887..0000000000
--- a/test/files/run/dead-code-elimination.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimize
diff --git a/test/files/run/delambdafy-specialized.check b/test/files/run/delambdafy-specialized.check
deleted file mode 100644
index c6903b9e29..0000000000
--- a/test/files/run/delambdafy-specialized.check
+++ /dev/null
@@ -1 +0,0 @@
-scala.runtime.AbstractFunction1$mcII$sp
diff --git a/test/files/run/delambdafy-specialized.flags b/test/files/run/delambdafy-specialized.flags
deleted file mode 100644
index 48b438ddf8..0000000000
--- a/test/files/run/delambdafy-specialized.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ydelambdafy:method
diff --git a/test/files/run/delambdafy-specialized.scala b/test/files/run/delambdafy-specialized.scala
deleted file mode 100644
index 634d4e490b..0000000000
--- a/test/files/run/delambdafy-specialized.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-object Test {
- def main(args: Array[String]): Unit = {
- val f = (x: Int) => -x
- println(f.getClass.getSuperclass.getName)
- }
-}
diff --git a/test/files/run/delambdafyLambdaClassNames.check b/test/files/run/delambdafyLambdaClassNames.check
deleted file mode 100644
index d425d15dd0..0000000000
--- a/test/files/run/delambdafyLambdaClassNames.check
+++ /dev/null
@@ -1 +0,0 @@
-A$$nestedInAnon$1$lambda$$run$1
diff --git a/test/files/run/delambdafyLambdaClassNames.flags b/test/files/run/delambdafyLambdaClassNames.flags
deleted file mode 100644
index b10233d322..0000000000
--- a/test/files/run/delambdafyLambdaClassNames.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenBCode -Ydelambdafy:method \ No newline at end of file
diff --git a/test/files/run/delambdafyLambdaClassNames/A_1.scala b/test/files/run/delambdafyLambdaClassNames/A_1.scala
deleted file mode 100644
index 10489414b7..0000000000
--- a/test/files/run/delambdafyLambdaClassNames/A_1.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-class A {
- def f = new Runnable {
- def run(): Unit = List(1,2).foreach(println)
- }
-}
diff --git a/test/files/run/delambdafyLambdaClassNames/Test.scala b/test/files/run/delambdafyLambdaClassNames/Test.scala
deleted file mode 100644
index 49a397d1d2..0000000000
--- a/test/files/run/delambdafyLambdaClassNames/Test.scala
+++ /dev/null
@@ -1,4 +0,0 @@
-object Test extends App {
- val c = Class.forName("A$$nestedInAnon$1$lambda$$run$1")
- println(c.getName)
-}
diff --git a/test/files/run/delambdafy_t6028.check b/test/files/run/delambdafy_t6028.check
index 419e7043a3..86cb1d5e97 100644
--- a/test/files/run/delambdafy_t6028.check
+++ b/test/files/run/delambdafy_t6028.check
@@ -11,61 +11,48 @@ package <empty> {
def foo(methodParam: String): Function0 = {
val methodLocal: String = "";
{
- (() => T.this.$anonfun$1(methodParam, methodLocal)).$asInstanceOf[Function0]()
+ (() => T.this.$anonfun$foo$1(methodParam, methodLocal))
}
};
def bar(barParam: String): Object = {
- @volatile var MethodLocalObject$module: runtime.VolatileObjectRef = scala.runtime.VolatileObjectRef.zero();
+ lazy <artifact> val MethodLocalObject$module: scala.runtime.LazyRef = new scala.runtime.LazyRef();
T.this.MethodLocalObject$1(barParam, MethodLocalObject$module)
};
def tryy(tryyParam: String): Function0 = {
var tryyLocal: runtime.ObjectRef = scala.runtime.ObjectRef.create("");
{
- (new <$anon: Function0>(T.this, tryyParam, tryyLocal): Function0)
+ (() => T.this.$anonfun$tryy$1(tryyParam, tryyLocal))
}
};
- final <artifact> private[this] def $anonfun$1(methodParam$1: String, methodLocal$1: String): String = T.this.classParam.+(T.this.field()).+(methodParam$1).+(methodLocal$1);
+ final <artifact> private[this] def $anonfun$foo$1(methodParam$1: String, methodLocal$1: String): String = T.this.classParam.+(T.this.field()).+(methodParam$1).+(methodLocal$1);
abstract trait MethodLocalTrait$1 extends Object {
+ def /*MethodLocalTrait$1*/$init$(barParam$1: String): Unit = {
+ ()
+ };
+ scala.Predef.print(barParam$1);
<synthetic> <stable> <artifact> def $outer(): T
};
object MethodLocalObject$2 extends Object with T#MethodLocalTrait$1 {
def <init>($outer: T, barParam$1: String): T#MethodLocalObject$2.type = {
MethodLocalObject$2.super.<init>();
- MethodLocalObject$2.this.$asInstanceOf[T#MethodLocalTrait$1$class]()./*MethodLocalTrait$1$class*/$init$(barParam$1);
+ MethodLocalObject$2.super./*MethodLocalTrait$1*/$init$(barParam$1);
()
};
<synthetic> <paramaccessor> <artifact> private[this] val $outer: T = _;
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer;
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer
};
- final <stable> private[this] def MethodLocalObject$1(barParam$1: String, MethodLocalObject$module$1: runtime.VolatileObjectRef): T#MethodLocalObject$2.type = {
- MethodLocalObject$module$1.elem = new T#MethodLocalObject$2.type(T.this, barParam$1);
- MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]()
- };
- abstract trait MethodLocalTrait$1$class extends Object with T#MethodLocalTrait$1 {
- def /*MethodLocalTrait$1$class*/$init$(barParam$1: String): Unit = {
- ()
- };
- scala.this.Predef.print(barParam$1)
- };
- @SerialVersionUID(value = 0) final <synthetic> class $anonfun$tryy$1 extends scala.runtime.AbstractFunction0$mcV$sp with Serializable {
- def <init>($outer: T, tryyParam$1: String, tryyLocal$1: runtime.ObjectRef): <$anon: Function0> = {
- $anonfun$tryy$1.super.<init>();
- ()
- };
- final def apply(): Unit = $anonfun$tryy$1.this.apply$mcV$sp();
- <specialized> def apply$mcV$sp(): Unit = try {
- $anonfun$tryy$1.this.tryyLocal$1.elem = $anonfun$tryy$1.this.tryyParam$1
- } finally ();
- <synthetic> <paramaccessor> <artifact> private[this] val $outer: T = _;
- <synthetic> <stable> <artifact> def $outer(): T = $anonfun$tryy$1.this.$outer;
- final <bridge> <artifact> def apply(): Object = {
- $anonfun$tryy$1.this.apply();
- scala.runtime.BoxedUnit.UNIT
- };
- <synthetic> <paramaccessor> private[this] val tryyParam$1: String = _;
- <synthetic> <paramaccessor> private[this] val tryyLocal$1: runtime.ObjectRef = _
- }
+ final <artifact> private[this] def MethodLocalObject$lzycompute$1(barParam$1: String, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = MethodLocalObject$module$1.synchronized[T#MethodLocalObject$2.type](if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ MethodLocalObject$module$1.initialize(new T#MethodLocalObject$2.type(T.this, barParam$1)).$asInstanceOf[T#MethodLocalObject$2.type]());
+ final private[this] def MethodLocalObject$1(barParam$1: String, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ T.this.MethodLocalObject$lzycompute$1(barParam$1, MethodLocalObject$module$1);
+ final <artifact> private[this] def $anonfun$tryy$1(tryyParam$1: String, tryyLocal$1: runtime.ObjectRef): Unit = try {
+ tryyLocal$1.elem = tryyParam$1
+ } finally ()
}
}
diff --git a/test/files/run/delambdafy_t6555.check b/test/files/run/delambdafy_t6555.check
index b6ccebde78..d8b834edc7 100644
--- a/test/files/run/delambdafy_t6555.check
+++ b/test/files/run/delambdafy_t6555.check
@@ -6,8 +6,8 @@ package <empty> {
()
};
private[this] val f: String => String = {
- final <artifact> def $anonfun(param: String): String = param;
- ((param: String) => $anonfun(param))
+ final <artifact> def $anonfun$f(param: String): String = param;
+ ((param: String) => $anonfun$f(param))
};
<stable> <accessor> def f(): String => String = Foo.this.f
}
diff --git a/test/files/run/delambdafy_uncurry_byname_method.check b/test/files/run/delambdafy_uncurry_byname_method.check
index e0f281b1cd..71e404ce64 100644
--- a/test/files/run/delambdafy_uncurry_byname_method.check
+++ b/test/files/run/delambdafy_uncurry_byname_method.check
@@ -7,8 +7,8 @@ package <empty> {
};
def bar(x: () => String): String = x.apply();
def foo(): String = Foo.this.bar({
- final <artifact> def $anonfun(): String = "";
- (() => $anonfun())
+ final <artifact> def $anonfun$foo(): String = "";
+ (() => $anonfun$foo())
})
}
}
diff --git a/test/files/run/delambdafy_uncurry_method.check b/test/files/run/delambdafy_uncurry_method.check
index 5ee3d174b3..8aa0b92054 100644
--- a/test/files/run/delambdafy_uncurry_method.check
+++ b/test/files/run/delambdafy_uncurry_method.check
@@ -7,8 +7,8 @@ package <empty> {
};
def bar(): Unit = {
val f: Int => Int = {
- final <artifact> def $anonfun(x: Int): Int = x.+(1);
- ((x: Int) => $anonfun(x))
+ final <artifact> def $anonfun|(x: Int): Int = x.+(1);
+ ((x: Int) => $anonfun|(x))
};
()
}
diff --git a/test/files/run/delay-bad.check b/test/files/run/delay-bad.check
index cb6e329f7a..bf41c79a3a 100644
--- a/test/files/run/delay-bad.check
+++ b/test/files/run/delay-bad.check
@@ -1,10 +1,10 @@
-delay-bad.scala:53: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+delay-bad.scala:53: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
f(new C { 5 })
^
-delay-bad.scala:73: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+delay-bad.scala:73: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
f(new { val x = 5 } with E() { 5 })
^
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
// new C { }
diff --git a/test/files/run/delay-good.check b/test/files/run/delay-good.check
index b4f6b04af7..ed35b9225f 100644
--- a/test/files/run/delay-good.check
+++ b/test/files/run/delay-good.check
@@ -1,7 +1,7 @@
-delay-good.scala:53: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+delay-good.scala:53: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
f(new C { 5 })
^
-delay-good.scala:73: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+delay-good.scala:73: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
f(new { val x = 5 } with E() { 5 })
^
diff --git a/test/files/run/duration-coarsest.scala b/test/files/run/duration-coarsest.scala
index 51cb79287a..81fbb3cc84 100644
--- a/test/files/run/duration-coarsest.scala
+++ b/test/files/run/duration-coarsest.scala
@@ -25,4 +25,7 @@ object Test extends App {
23 hours,
40 days
) foreach (x => assert(x == x.toCoarsest, x))
-} \ No newline at end of file
+
+ // toCoarsest on a FiniteDuration should return a FiniteDuration
+ val finite: FiniteDuration = 1.second.toCoarsest
+}
diff --git a/test/files/run/elidable-opt.flags b/test/files/run/elidable-opt.flags
index 62897ff218..93fd3d5317 100644
--- a/test/files/run/elidable-opt.flags
+++ b/test/files/run/elidable-opt.flags
@@ -1 +1 @@
--optimise -Xelide-below 900
+-Xelide-below 900
diff --git a/test/files/run/elidable-opt.scala b/test/files/run/elidable-opt.scala
index a2f29d2caf..6a603084b7 100644
--- a/test/files/run/elidable-opt.scala
+++ b/test/files/run/elidable-opt.scala
@@ -80,6 +80,5 @@ object Test {
Class.forName(className).getMethod(methodName)
}
}
- Class.forName("T$class").getMethod("f3", classOf[T])
}
}
diff --git a/test/files/run/elidable.scala b/test/files/run/elidable.scala
index a2f29d2caf..6a603084b7 100644
--- a/test/files/run/elidable.scala
+++ b/test/files/run/elidable.scala
@@ -80,6 +80,5 @@ object Test {
Class.forName(className).getMethod(methodName)
}
}
- Class.forName("T$class").getMethod("f3", classOf[T])
}
}
diff --git a/test/files/run/equality.scala b/test/files/run/equality.scala
index ff59898821..2af73691d8 100644
--- a/test/files/run/equality.scala
+++ b/test/files/run/equality.scala
@@ -1,7 +1,7 @@
// a quickly assembled test of equality. Needs work.
object Test
{
- import scala.runtime.ScalaRunTime.hash
+ def hash(x: Any): Int = x.## // forces upcast to Any
def makeFromInt(x: Int) = List(
x.toByte, x.toShort, x.toInt, x.toLong, x.toFloat, x.toDouble, BigInt(x), BigDecimal(x)
diff --git a/test/files/run/exceptions-2.check b/test/files/run/exceptions-2.check
index 4f8244800a..5cf5e71f41 100644
--- a/test/files/run/exceptions-2.check
+++ b/test/files/run/exceptions-2.check
@@ -1,4 +1,4 @@
-exceptions-2.scala:267: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+exceptions-2.scala:267: warning: a pure expression does nothing in statement position
try { 1 } catch { case e: java.io.IOException => () }
^
nested1:
diff --git a/test/files/run/existential-rangepos.check b/test/files/run/existential-rangepos.check
index 1212b60bae..984baeaaf8 100644
--- a/test/files/run/existential-rangepos.check
+++ b/test/files/run/existential-rangepos.check
@@ -7,7 +7,7 @@
};
[24:51]private[this] val foo: [28]Set[_ <: T] = [47:51]null;
[28]<stable> <accessor> def foo: [28]Set[_ <: T] = [28][28]A.this.foo;
- [54:74]<stable> <accessor> def bar: [58]Set[_ <: T]
+ [54:74]<stable> <accessor> val bar: [58]Set[_ <: T]
}
}
diff --git a/test/files/run/finalvar.flags b/test/files/run/finalvar.flags
index aee3039bec..c74d0cd327 100644
--- a/test/files/run/finalvar.flags
+++ b/test/files/run/finalvar.flags
@@ -1 +1 @@
--Yoverride-vars -Yinline \ No newline at end of file
+-Yoverride-vars -opt:l:project \ No newline at end of file
diff --git a/test/files/run/future-flatmap-exec-count.check b/test/files/run/future-flatmap-exec-count.check
index dd9dce64ed..7c68bd76b5 100644
--- a/test/files/run/future-flatmap-exec-count.check
+++ b/test/files/run/future-flatmap-exec-count.check
@@ -1,3 +1,4 @@
+warning: there was one deprecation warning (since 2.12.0); re-run with -deprecation for details
mapping
execute()
flatmapping
diff --git a/test/files/run/hashCodeBoxesRunTime.scala b/test/files/run/hashCodeStatics.scala
index ba1a30f5fb..bff62cce18 100644
--- a/test/files/run/hashCodeBoxesRunTime.scala
+++ b/test/files/run/hashCodeStatics.scala
@@ -1,23 +1,23 @@
-// This only tests direct access to the methods in BoxesRunTime,
+// This only tests direct access to the methods in Statics,
// not the whole scheme.
object Test
{
import java.{ lang => jl }
- import scala.runtime.BoxesRunTime.{ hashFromNumber, hashFromObject }
+ import scala.runtime.Statics.anyHash
def allSame[T](xs: List[T]) = assert(xs.distinct.size == 1, "failed: " + xs)
def mkNumbers(x: Int): List[Number] =
List(x.toByte, x.toShort, x, x.toLong, x.toFloat, x.toDouble)
- def testLDF(x: Long) = allSame(List[Number](x, x.toDouble, x.toFloat) map hashFromNumber)
+ def testLDF(x: Long) = allSame(List[Number](x, x.toDouble, x.toFloat) map anyHash)
def main(args: Array[String]): Unit = {
List(Byte.MinValue, -1, 0, 1, Byte.MaxValue) foreach { n =>
- val hashes = mkNumbers(n) map hashFromNumber
+ val hashes = mkNumbers(n) map anyHash
allSame(hashes)
if (n >= 0) {
- val charCode = hashFromObject(n.toChar: Character)
+ val charCode = anyHash(n.toChar: Character)
assert(charCode == hashes.head)
}
}
diff --git a/test/files/run/icode-reader-dead-code.scala b/test/files/run/icode-reader-dead-code.scala
index 00ba58829f..f646455c89 100644
--- a/test/files/run/icode-reader-dead-code.scala
+++ b/test/files/run/icode-reader-dead-code.scala
@@ -36,7 +36,7 @@ object Test extends DirectTest {
// If inlining fails, the compiler will issue an inliner warning that is not present in the
// check file
- compileString(newCompiler("-usejavacp", "-optimise"))(bCode)
+ compileString(newCompiler("-usejavacp", "-opt:l:classpath"))(bCode)
}
def readClass(file: String) = {
diff --git a/test/files/run/idempotency-case-classes.check b/test/files/run/idempotency-case-classes.check
index ea698cec59..38c2fb9326 100644
--- a/test/files/run/idempotency-case-classes.check
+++ b/test/files/run/idempotency-case-classes.check
@@ -20,15 +20,15 @@ C(2,3)
case 1 => C.this.y
case _ => throw new IndexOutOfBoundsException(x$1.toString())
};
- override <synthetic> def productIterator: Iterator[Any] = runtime.this.ScalaRunTime.typedProductIterator[Any](C.this);
+ override <synthetic> def productIterator: Iterator[Any] = scala.runtime.ScalaRunTime.typedProductIterator[Any](C.this);
<synthetic> def canEqual(x$1: Any): Boolean = x$1.$isInstanceOf[C]();
override <synthetic> def hashCode(): Int = {
<synthetic> var acc: Int = -889275714;
- acc = Statics.this.mix(acc, x);
- acc = Statics.this.mix(acc, y);
- Statics.this.finalizeHash(acc, 2)
+ acc = scala.runtime.Statics.mix(acc, x);
+ acc = scala.runtime.Statics.mix(acc, y);
+ scala.runtime.Statics.finalizeHash(acc, 2)
};
- override <synthetic> def toString(): String = ScalaRunTime.this._toString(C.this);
+ override <synthetic> def toString(): String = scala.runtime.ScalaRunTime._toString(C.this);
override <synthetic> def equals(x$1: Any): Boolean = C.this.eq(x$1.asInstanceOf[Object]).||(x$1 match {
case (_: C) => true
case _ => false
@@ -45,7 +45,7 @@ C(2,3)
final override <synthetic> def toString(): String = "C";
case <synthetic> def apply(x: Int, y: Int): C = new C(x, y);
case <synthetic> def unapply(x$0: C): Option[(Int, Int)] = if (x$0.==(null))
- scala.this.None
+ scala.None
else
Some.apply[(Int, Int)](scala.Tuple2.apply[Int, Int](x$0.x, x$0.y))
};
diff --git a/test/files/run/idempotency-lazy-vals.check b/test/files/run/idempotency-lazy-vals.check
index 15afa5303c..3a6f1a7ef0 100644
--- a/test/files/run/idempotency-lazy-vals.check
+++ b/test/files/run/idempotency-lazy-vals.check
@@ -5,19 +5,11 @@
C.super.<init>();
()
};
- lazy private[this] val x: Int = _;
- <stable> <accessor> lazy def x: Int = {
- C.this.x = 2;
- C.this.x
- };
- lazy private[this] val y: Int = _;
- implicit <stable> <accessor> lazy def y: Int = {
- C.this.y = 3;
- C.this.y
- }
+ <stable> <accessor> lazy val x: Int = 2;
+ implicit <stable> <accessor> lazy val y: Int = 3
};
val c: C = new C();
import c._;
c.x.*(Predef.implicitly[Int](c.y))
}
-error!
+6
diff --git a/test/files/run/indy-via-macro-with-dynamic-args/Bootstrap.java b/test/files/run/indy-via-macro-with-dynamic-args/Bootstrap.java
new file mode 100644
index 0000000000..5c9ce01cf4
--- /dev/null
+++ b/test/files/run/indy-via-macro-with-dynamic-args/Bootstrap.java
@@ -0,0 +1,17 @@
+package test;
+
+import java.lang.invoke.*;
+import java.util.regex.Pattern;
+
+public final class Bootstrap {
+ private Bootstrap() {
+ }
+
+ /** Pre-compile a regex */
+ public static CallSite bootstrap(MethodHandles.Lookup lookup, String invokedName,
+ MethodType invokedType,
+ String value) throws Throwable {
+ MethodHandle Pattern_matcher = MethodHandles.lookup().findVirtual(java.util.regex.Pattern.class, "matcher", MethodType.fromMethodDescriptorString("(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;", lookup.lookupClass().getClassLoader()));
+ return new ConstantCallSite(Pattern_matcher.bindTo(Pattern.compile(value)));
+ }
+}
diff --git a/test/files/run/indy-via-macro-with-dynamic-args/Test_2.scala b/test/files/run/indy-via-macro-with-dynamic-args/Test_2.scala
new file mode 100644
index 0000000000..77c2b522c7
--- /dev/null
+++ b/test/files/run/indy-via-macro-with-dynamic-args/Test_2.scala
@@ -0,0 +1,6 @@
+object Test {
+ def main(args: Array[String]) {
+ val s = "foo!bar"
+ assert(Macro.matcher("foo.bar", s).matches == true)
+ }
+}
diff --git a/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala b/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala
new file mode 100644
index 0000000000..cb8719a235
--- /dev/null
+++ b/test/files/run/indy-via-macro-with-dynamic-args/macro_1.scala
@@ -0,0 +1,33 @@
+import java.util.regex._
+
+import scala.reflect.internal.SymbolTable
+import scala.reflect.macros.blackbox._
+import language.experimental.macros
+
+object Macro {
+ /**
+ * Equivalent to Pattern.compile(pat).matcher(text), but caches the compiled regex (using invokedynamic) if
+ * `pat` is a literal.
+ */
+ def matcher(pat: String, text: CharSequence): Matcher = macro Macro.impl
+ def impl(c: Context)(pat: c.Tree, text: c.Tree): c.Tree = {
+ def Indy(bootstrapMethod: c.Symbol, bootstrapArgs: List[c.universe.Literal], dynArgs: List[c.Tree]): c.Tree = {
+ val symtab = c.universe.asInstanceOf[SymbolTable]
+ import symtab._
+ val paramSym = NoSymbol.newTermSymbol(TermName("x")).setInfo(typeOf[CharSequence])
+ val dummySymbol = NoSymbol.newTermSymbol(TermName("matcher")).setInfo(internal.methodType(paramSym :: Nil, typeOf[java.util.regex.Matcher]))
+ val bootstrapArgTrees: List[Tree] = Literal(Constant(bootstrapMethod)).setType(NoType) :: bootstrapArgs.asInstanceOf[List[Tree]]
+ val result = ApplyDynamic(Ident(dummySymbol).setType(dummySymbol.info), bootstrapArgTrees ::: dynArgs.asInstanceOf[List[Tree]])
+ result.setType(dummySymbol.info.resultType)
+ result.asInstanceOf[c.Tree]
+ }
+ import c.universe._
+ pat match {
+ case l @ Literal(Constant(pat: String)) =>
+ val boostrapSym = typeOf[test.Bootstrap].companion.member(TermName("bootstrap"))
+ Indy(boostrapSym, l :: Nil, text :: Nil)
+ case _ =>
+ q"_root_.java.util.regex.Pattern.compile($pat).matcher($text)"
+ }
+ }
+}
diff --git a/test/files/run/indy-via-macro/Bootstrap.java b/test/files/run/indy-via-macro/Bootstrap.java
new file mode 100644
index 0000000000..af4f5dfd4f
--- /dev/null
+++ b/test/files/run/indy-via-macro/Bootstrap.java
@@ -0,0 +1,16 @@
+package test;
+
+import java.lang.invoke.*;
+import java.util.regex.Pattern;
+
+public final class Bootstrap {
+ private Bootstrap() {
+ }
+
+ /** Pre-compile a regex */
+ public static CallSite bootstrap(MethodHandles.Lookup lookup, String invokedName,
+ MethodType invokedType,
+ String value) throws Throwable {
+ return new ConstantCallSite(MethodHandles.constant(Pattern.class, Pattern.compile(value)));
+ }
+}
diff --git a/test/files/run/indy-via-macro/Test_2.scala b/test/files/run/indy-via-macro/Test_2.scala
new file mode 100644
index 0000000000..830947a46b
--- /dev/null
+++ b/test/files/run/indy-via-macro/Test_2.scala
@@ -0,0 +1,5 @@
+object Test {
+ def main(args: Array[String]) {
+ assert(Macro.compilePattern("foo.bar").matcher("foo!bar").matches)
+ }
+} \ No newline at end of file
diff --git a/test/files/run/indy-via-macro/macro_1.scala b/test/files/run/indy-via-macro/macro_1.scala
new file mode 100644
index 0000000000..66e319e262
--- /dev/null
+++ b/test/files/run/indy-via-macro/macro_1.scala
@@ -0,0 +1,32 @@
+import java.util.regex.Pattern
+
+import scala.reflect.internal.SymbolTable
+import scala.reflect.macros.blackbox._
+import language.experimental.macros
+
+object Macro {
+ /**
+ * Equivalent to Pattern.compile(s), but caches the compiled regex (using invokedynamic) if
+ * `s` is a literal.
+ */
+ def compilePattern(s: String): Pattern = macro Macro.impl
+ def impl(c: Context)(s: c.Tree): c.Tree = {
+ def Indy(bootstrapMethod: c.Symbol, bootstrapArgs: List[c.universe.Literal]): c.Tree = {
+ val symtab = c.universe.asInstanceOf[SymbolTable]
+ import symtab._
+ val dummySymbol = NoSymbol.newTermSymbol(TermName("compile")).setInfo(NullaryMethodType(typeOf[Pattern]))
+ val args: List[Tree] = Literal(Constant(bootstrapMethod)).setType(NoType) :: bootstrapArgs.asInstanceOf[List[Tree]]
+ val result = ApplyDynamic(Ident(dummySymbol).setType(dummySymbol.info), args)
+ result.setType(dummySymbol.info.resultType)
+ result.asInstanceOf[c.Tree]
+ }
+ import c.universe._
+ s match {
+ case l @ Literal(Constant(s: String)) =>
+ val boostrapSym = typeOf[test.Bootstrap].companion.member(TermName("bootstrap"))
+ Indy(boostrapSym, l :: Nil)
+ case _ =>
+ q"_root_.java.util.regex.Pattern.compile($s)"
+ }
+ }
+}
diff --git a/test/files/run/indylambda-boxing/test.scala b/test/files/run/indylambda-boxing/test.scala
index cc0a460640..82f8d2f497 100644
--- a/test/files/run/indylambda-boxing/test.scala
+++ b/test/files/run/indylambda-boxing/test.scala
@@ -2,15 +2,16 @@ class Capture
class Test {
def test1 = (i: Int) => ""
def test2 = (i: VC) => i
- def test3 = (i: Int) => i
+ def test3 = (i: Int) => i // not adapted, specialized
- def test4 = {val c = new Capture; (i: Int) => {(c, Test.this.toString); 42} }
+ def test4 = {val c = new Capture; (i: Int) => {(c, Test.this.toString); 42} } // not adapted, specialized
def test5 = {val c = new Capture; (i: VC) => (c, Test.this.toString) }
def test6 = {val c = new Capture; (i: Int) => (c, Test.this.toString) }
def test7 = {val vc = new Capture; (i: Int) => vc }
- def test8 = {val c = 42; (s: String) => (s, c)}
+ def test8 = {val c = 42; (s: String) => (s, c)} // not adapted
def test9 = {val c = 42; (s: String) => ()}
+ def test10 = {(s: List[String]) => ()}
}
object Test {
diff --git a/test/files/run/inferred-type-constructors-hou.check b/test/files/run/inferred-type-constructors-hou.check
new file mode 100644
index 0000000000..6b09823341
--- /dev/null
+++ b/test/files/run/inferred-type-constructors-hou.check
@@ -0,0 +1,56 @@
+warning: there were two feature warnings; re-run with -feature for details
+ p.Iterable[Int]
+ p.Set[Int]
+ p.Seq[Int]
+ p.m.Set[Int]
+ p.m.Seq[Int]
+ private[m] p.m.ASet[Int]
+ p.i.Seq[Int]
+ private[i] p.i.ASet[Int]
+ private[i] p.i.ASeq[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Set[Int]
+ p.Iterable[Int]
+ p.Set[Int]
+ p.Iterable[Int]
+ p.Set[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Seq[Int]
+ p.Iterable[Int]
+ p.Seq[Int]
+ p.Iterable[Int]
+ p.Seq[Int]
+ p.Iterable[Int]
+ p.m.Set[Int]
+ p.Iterable[Int]
+ p.Set[Int]
+ p.Iterable[Int]
+ p.Iterable[Int]
+ p.Seq[Int]
+ p.Iterable[Int]
+ p.Seq[Int]
+ p.Iterable[Int]
+ private[p] p.ASet[Int]
+ private[p] p.AIterable[Int]
+ p.Iterable[Int]
+ p.i.Seq[Int]
+ private[p] p.AIterable[Int]
+ List[Nothing]
+ scala.collection.immutable.Vector[Nothing]
+ scala.collection.immutable.Map[Int,Int]
+ scala.collection.immutable.Set[Int]
+ Seq[Int]
+ Array[Int]
+ scala.collection.AbstractSet[Int]
+ Comparable[java.lang.String]
+ scala.collection.immutable.LinearSeq[Int]
+ Iterable[Int]
diff --git a/test/files/run/inferred-type-constructors-hou.flags b/test/files/run/inferred-type-constructors-hou.flags
new file mode 100644
index 0000000000..41565c7e32
--- /dev/null
+++ b/test/files/run/inferred-type-constructors-hou.flags
@@ -0,0 +1 @@
+-Ypartial-unification
diff --git a/test/files/run/inferred-type-constructors-hou.scala b/test/files/run/inferred-type-constructors-hou.scala
new file mode 100644
index 0000000000..79a8653f68
--- /dev/null
+++ b/test/files/run/inferred-type-constructors-hou.scala
@@ -0,0 +1,125 @@
+package p {
+ trait TCon[+CC[X]] {
+ def fPublic: CC[Int] = ???
+ private[p] def fPackagePrivate: CC[Int] = ???
+ protected[p] def fPackageProtected: CC[Int] = ???
+ }
+ trait Iterable[+A] extends TCon[Iterable]
+ trait Set[A] extends Iterable[A] with TCon[Set]
+ trait Seq[+A] extends Iterable[A] with TCon[Seq]
+
+ private[p] abstract class AIterable[+A] extends Iterable[A]
+ private[p] abstract class ASeq[+A] extends AIterable[A] with Seq[A]
+ private[p] abstract class ASet[A] extends AIterable[A] with Set[A]
+
+ package m {
+ private[m] abstract class ASeq[A] extends p.ASeq[A] with Seq[A]
+ private[m] abstract class ASet[A] extends p.ASet[A] with Set[A]
+ trait Set[A] extends p.Set[A] with TCon[Set]
+ trait Seq[A] extends p.Seq[A] with TCon[Seq]
+ trait BitSet extends ASet[Int]
+ trait IntSeq extends ASeq[Int]
+ }
+
+ package i {
+ private[i] abstract class ASeq[+A] extends p.ASeq[A] with Seq[A]
+ private[i] abstract class ASet[A] extends p.ASet[A] with Set[A]
+ trait Set[A] extends p.Set[A] with TCon[Set]
+ trait Seq[+A] extends p.Seq[A] with TCon[Seq]
+ trait BitSet extends ASet[Int]
+ trait IntSeq extends ASeq[Int]
+ }
+}
+
+object Test {
+ import scala.reflect.runtime.universe._
+ // Complicated by the absence of usable type constructor type tags.
+ def extract[A, CC[X]](xs: CC[A]): CC[A] = xs
+ def whatis[T: TypeTag](x: T): Unit = {
+ val tpe = typeOf[T]
+ val access = tpe.typeSymbol.asInstanceOf[scala.reflect.internal.HasFlags].accessString.replaceAllLiterally("package ", "")
+ println(f"$access%15s $tpe")
+ }
+
+ trait IntIterable extends p.Iterable[Int]
+ trait IntSet extends p.Set[Int]
+ trait IntSeq extends p.Seq[Int]
+
+ trait MutableIntSet extends p.m.Set[Int]
+ trait MutableIntSeq extends p.m.Seq[Int]
+
+ trait ImmutableIntSet extends p.i.Set[Int]
+ trait ImmutableIntSeq extends p.i.Seq[Int]
+
+ def f1: IntIterable = null
+ def f2: IntSet = null
+ def f3: IntSeq = null
+
+ def g1: MutableIntSet = null
+ def g2: MutableIntSeq = null
+ def g3: p.m.BitSet = null
+
+ def h1: ImmutableIntSeq = null
+ def h2: p.i.BitSet = null
+ def h3: p.i.IntSeq = null
+
+ def main(args: Array[String]): Unit = {
+ whatis(extract(f1))
+ whatis(extract(f2))
+ whatis(extract(f3))
+ whatis(extract(g1))
+ whatis(extract(g2))
+ whatis(extract(g3))
+ whatis(extract(h1))
+ whatis(extract(h2))
+ whatis(extract(h3))
+
+ whatis(extract(if (true) f1 else f2))
+ whatis(extract(if (true) f1 else f3))
+ whatis(extract(if (true) f1 else g1))
+ whatis(extract(if (true) f1 else g2))
+ whatis(extract(if (true) f1 else g3))
+ whatis(extract(if (true) f1 else h1))
+ whatis(extract(if (true) f1 else h2))
+ whatis(extract(if (true) f1 else h3))
+ whatis(extract(if (true) f2 else f3))
+ whatis(extract(if (true) f2 else g1))
+ whatis(extract(if (true) f2 else g2))
+ whatis(extract(if (true) f2 else g3))
+ whatis(extract(if (true) f2 else h1))
+ whatis(extract(if (true) f2 else h2))
+ whatis(extract(if (true) f2 else h3))
+ whatis(extract(if (true) f3 else g1))
+ whatis(extract(if (true) f3 else g2))
+ whatis(extract(if (true) f3 else g3))
+ whatis(extract(if (true) f3 else h1))
+ whatis(extract(if (true) f3 else h2))
+ whatis(extract(if (true) f3 else h3))
+ whatis(extract(if (true) g1 else g2))
+ whatis(extract(if (true) g1 else g3))
+ whatis(extract(if (true) g1 else h1))
+ whatis(extract(if (true) g1 else h2))
+ whatis(extract(if (true) g1 else h3))
+ whatis(extract(if (true) g2 else g3))
+ whatis(extract(if (true) g2 else h1))
+ whatis(extract(if (true) g2 else h2))
+ whatis(extract(if (true) g2 else h3))
+ whatis(extract(if (true) g3 else h1))
+ whatis(extract(if (true) g3 else h2))
+ whatis(extract(if (true) g3 else h3))
+ whatis(extract(if (true) h1 else h2))
+ whatis(extract(if (true) h1 else h3))
+ whatis(extract(if (true) h2 else h3))
+
+ whatis(extract(Nil))
+ whatis(extract(Vector()))
+ whatis(extract(Map[Int,Int]()))
+ whatis(extract(Set[Int]()))
+ whatis(extract(Seq[Int]()))
+ whatis(extract(Array[Int]()))
+ whatis(extract(scala.collection.immutable.BitSet(1)))
+ whatis(extract("abc"))
+ whatis(extract(if (true) Stream(1) else List(1)))
+ whatis(extract(if (true) Seq(1) else Set(1)))
+ }
+}
diff --git a/test/files/run/infix.scala b/test/files/run/infix.scala
index a867d03ce8..1d39003644 100644
--- a/test/files/run/infix.scala
+++ b/test/files/run/infix.scala
@@ -7,5 +7,6 @@ object Test extends App {
Console.println(xs)
xs match {
case null op (0, 0) op (1, 1) op (2, 2) => Console.println("OK")
+ case _ =>
}
}
diff --git a/test/files/run/inlineAddDeserializeLambda.scala b/test/files/run/inlineAddDeserializeLambda.scala
new file mode 100644
index 0000000000..a6bafd0f49
--- /dev/null
+++ b/test/files/run/inlineAddDeserializeLambda.scala
@@ -0,0 +1,20 @@
+class C { @inline final def f: Int => Int = (x: Int) => x + 1 }
+
+object Test extends App {
+ import java.io._
+
+ def serialize(obj: AnyRef): Array[Byte] = {
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ buffer.toByteArray
+ }
+ def deserialize(a: Array[Byte]): AnyRef = {
+ val in = new ObjectInputStream(new ByteArrayInputStream(a))
+ in.readObject
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T) = deserialize(serialize(obj)).asInstanceOf[T]
+
+ assert(serializeDeserialize((new C).f).isInstanceOf[Function1[_, _]])
+}
diff --git a/test/files/run/inlineHandlers.scala b/test/files/run/inlineHandlers.scala
new file mode 100644
index 0000000000..8c672a07b9
--- /dev/null
+++ b/test/files/run/inlineHandlers.scala
@@ -0,0 +1,7 @@
+object Test {
+ @noinline def ham: String = throw null
+ @inline def inner: String = try { ham } catch { case _: NullPointerException => "npe" }
+ def foo = try inner catch { case e: Throwable => throw e }
+
+ def main(args: Array[String]): Unit = assert(foo == "npe")
+}
diff --git a/test/files/run/iterator-from.scala b/test/files/run/iterator-from.scala
index e7ba1aeb28..01006ffc21 100644
--- a/test/files/run/iterator-from.scala
+++ b/test/files/run/iterator-from.scala
@@ -1,5 +1,5 @@
/* This file tests iteratorFrom, keysIteratorFrom, and valueIteratorFrom on various sorted sets and maps
- * filter: inliner warnings; re-run with
+ * filter: inliner warnings
*/
import scala.util.{Random => R}
diff --git a/test/files/run/junitForwarders/C_1.scala b/test/files/run/junitForwarders/C_1.scala
new file mode 100644
index 0000000000..2af2026a61
--- /dev/null
+++ b/test/files/run/junitForwarders/C_1.scala
@@ -0,0 +1,15 @@
+trait T {
+ @org.junit.Test def foo = 0
+}
+
+class C extends T
+
+object Test extends App {
+ def check(c: Class[_], e: String) = {
+ val s = c.getDeclaredMethods.sortBy(_.getName).map(m => s"${m.getName} - ${m.getDeclaredAnnotations.mkString(", ")}").mkString(";")
+ assert(s == e, s"found: $s\nexpected: $e")
+ }
+ check(classOf[C], "foo - @org.junit.Test()")
+ // TODO scala-dev#213: should `foo$` really carry the @Test annotation?
+ check(classOf[T], "$init$ - ;foo - @org.junit.Test();foo$ - @org.junit.Test()")
+}
diff --git a/test/files/run/junitForwarders/Test.java b/test/files/run/junitForwarders/Test.java
new file mode 100644
index 0000000000..57c4d5b544
--- /dev/null
+++ b/test/files/run/junitForwarders/Test.java
@@ -0,0 +1,10 @@
+package org.junit;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+public @interface Test { }
diff --git a/test/files/run/lambda-serialization-security.scala b/test/files/run/lambda-serialization-security.scala
new file mode 100644
index 0000000000..08e235b1cb
--- /dev/null
+++ b/test/files/run/lambda-serialization-security.scala
@@ -0,0 +1,47 @@
+import java.io.{ByteArrayInputStream, ObjectInputStream, ObjectOutputStream, ByteArrayOutputStream}
+
+trait IntToString extends java.io.Serializable { def apply(i: Int): String }
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ roundTrip()
+ roundTripIndySam()
+ }
+
+ def roundTrip(): Unit = {
+ val c = new Capture("Capture")
+ val lambda = (p: Param) => ("a", p, c)
+ val reconstituted1 = serializeDeserialize(lambda).asInstanceOf[Object => Any]
+ val p = new Param
+ assert(reconstituted1.apply(p) == ("a", p, c))
+ val reconstituted2 = serializeDeserialize(lambda).asInstanceOf[Object => Any]
+ assert(reconstituted1.getClass == reconstituted2.getClass)
+
+ val reconstituted3 = serializeDeserialize(reconstituted1)
+ assert(reconstituted3.apply(p) == ("a", p, c))
+
+ val specializedLambda = (p: Int) => List(p, c).length
+ assert(serializeDeserialize(specializedLambda).apply(42) == 2)
+ assert(serializeDeserialize(serializeDeserialize(specializedLambda)).apply(42) == 2)
+ }
+
+ // lambda targeting a SAM, not a FunctionN (should behave the same way)
+ def roundTripIndySam(): Unit = {
+ val lambda: IntToString = (x: Int) => "yo!" * x
+ val reconstituted1 = serializeDeserialize(lambda).asInstanceOf[IntToString]
+ val reconstituted2 = serializeDeserialize(reconstituted1).asInstanceOf[IntToString]
+ assert(reconstituted1.apply(2) == "yo!yo!")
+ assert(reconstituted1.getClass == reconstituted2.getClass)
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T) = {
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray))
+ in.readObject.asInstanceOf[T]
+ }
+}
+
+case class Capture(s: String) extends Serializable
+class Param
diff --git a/test/files/run/lambda-serialization.scala b/test/files/run/lambda-serialization.scala
index 46b26d7c5e..78b4c5d58b 100644
--- a/test/files/run/lambda-serialization.scala
+++ b/test/files/run/lambda-serialization.scala
@@ -1,25 +1,54 @@
-import java.io.{ByteArrayInputStream, ObjectInputStream, ObjectOutputStream, ByteArrayOutputStream}
+import java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream}
+import java.lang.invoke.{MethodHandleInfo, SerializedLambda}
+
+import scala.tools.nsc.util
+
+class C extends java.io.Serializable {
+ val fs = List(
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => (),
+ () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => (), () => () ,() => (), () => (), () => (), () => (), () => ()
+ )
+ private def foo(): Unit = {
+ assert(false, "should not be called!!!")
+ }
+}
+
+trait FakeSam { def apply(): Unit }
object Test {
def main(args: Array[String]): Unit = {
- roundTrip
+ allRealLambdasRoundTrip()
+ fakeLambdaFailsToDeserialize()
+ }
+
+ def allRealLambdasRoundTrip(): Unit = {
+ new C().fs.map(x => serializeDeserialize(x).apply())
}
- def roundTrip(): Unit = {
- val c = new Capture("Capture")
- val lambda = (p: Param) => ("a", p, c)
- val reconstituted1 = serializeDeserialize(lambda).asInstanceOf[Object => Any]
- val p = new Param
- assert(reconstituted1.apply(p) == ("a", p, c))
- val reconstituted2 = serializeDeserialize(lambda).asInstanceOf[Object => Any]
- assert(reconstituted1.getClass == reconstituted2.getClass)
-
- val reconstituted3 = serializeDeserialize(reconstituted1)
- assert(reconstituted3.apply(p) == ("a", p, c))
-
- val specializedLambda = (p: Int) => List(p, c).length
- assert(serializeDeserialize(specializedLambda).apply(42) == 2)
- assert(serializeDeserialize(serializeDeserialize(specializedLambda)).apply(42) == 2)
+ def fakeLambdaFailsToDeserialize(): Unit = {
+ val fake = new SerializedLambda(classOf[C], classOf[FakeSam].getName, "apply", "()V",
+ MethodHandleInfo.REF_invokeVirtual, classOf[C].getName, "foo", "()V", "()V", Array(new C))
+ try {
+ serializeDeserialize(fake).asInstanceOf[FakeSam].apply()
+ assert(false)
+ } catch {
+ case ex: Exception =>
+ val stackTrace = util.stackTraceString(ex)
+ assert(stackTrace.contains("Illegal lambda deserialization"), stackTrace)
+ }
}
def serializeDeserialize[T <: AnyRef](obj: T) = {
@@ -31,5 +60,3 @@ object Test {
}
}
-case class Capture(s: String) extends Serializable
-class Param
diff --git a/test/files/run/large_class.check b/test/files/run/large_class.check
index 0585c267ac..babe24db94 100644
--- a/test/files/run/large_class.check
+++ b/test/files/run/large_class.check
@@ -1,3 +1 @@
-newSource1.scala:1: error: Could not write class BigEnoughToFail because it exceeds JVM code size limits. Class file too large!
-class BigEnoughToFail {
- ^
+error: Could not write class BigEnoughToFail because it exceeds JVM code size limits. Class file too large!
diff --git a/test/files/run/large_code.check b/test/files/run/large_code.check
index 6ad50967bc..42bf490942 100644
--- a/test/files/run/large_code.check
+++ b/test/files/run/large_code.check
@@ -1,3 +1 @@
-newSource1.scala:1: error: Could not write class BigEnoughToFail because it exceeds JVM code size limits. Method tooLong's code too large!
-class BigEnoughToFail {
- ^
+error: Could not write class BigEnoughToFail because it exceeds JVM code size limits. Method tooLong's code too large!
diff --git a/test/files/run/lazy-locals-2.scala b/test/files/run/lazy-locals-2.scala
new file mode 100644
index 0000000000..d6c33cffcb
--- /dev/null
+++ b/test/files/run/lazy-locals-2.scala
@@ -0,0 +1,322 @@
+object Logs {
+ val logBuf = new collection.mutable.StringBuilder()
+ def log(m: Any): Unit = { if (logBuf.nonEmpty) logBuf.append(":"); logBuf.append(m) }
+ def checkLog(expected: String): Unit = {
+ val res = logBuf.toString
+ assert(res == expected, s"expected:\n$expected\nfound:\n$res")
+ logBuf.clear()
+ }
+}
+
+import Logs._
+
+class C {
+ def getInt : Int = { log("getInt"); 1 }
+ def getString: String = { log("getString"); "s" }
+ def getUnit : Unit = { log("getUnit") }
+
+ lazy val t1 = getInt
+ lazy val t2 = getString
+ lazy val t3 = getUnit
+ checkLog("")
+
+ def m1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ def m2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ def m3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("")
+
+
+ val vl1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ val vl2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ val vl3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("getInt:getString:getUnit:():()")
+
+
+ var vr1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ var vr2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ var vr3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("getInt:getString:getUnit:():()")
+
+
+ lazy val lvl1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ lazy val lvl2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ lazy val lvl3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("")
+
+
+ {
+ lazy val t1 = getInt
+ lazy val t2 = getString
+ lazy val t3 = getUnit
+
+ log(t1 + t1)
+ log(t2 + t2)
+ log(t3); log(t3)
+ }
+ checkLog("getInt:2:getString:ss:getUnit:():()")
+
+
+ def run(): Unit = {
+ log(t1); log(t1);
+ log(t2); log(t2);
+ log(t3); log(t3);
+ checkLog("getInt:1:1:getString:s:s:getUnit:():()")
+
+ log(m1); log(m1)
+ log(m2); log(m2)
+ log(m3); log(m3)
+ checkLog("getInt:2:getInt:2:getString:ss:getString:ss:getUnit:():():():getUnit:():():()")
+
+ log(vl1); log(vl1)
+ log(vl2); log(vl2)
+ log(vl3); log(vl3)
+ checkLog("2:2:ss:ss:():()")
+
+ log(vr1); log(vr1); vr1 = 393; log(vr1)
+ log(vr2); log(vr2); vr2 = "h"; log(vr2)
+ log(vr3); log(vr3); vr3 = () ; log(vr3)
+ checkLog("2:2:393:ss:ss:h:():():()")
+
+ log(lvl1); log(lvl1)
+ log(lvl2); log(lvl2)
+ log(lvl3); log(lvl3)
+ checkLog("getInt:2:2:getString:ss:ss:getUnit:():():():()")
+ }
+}
+
+trait T {
+ def getInt : Int = { log("getInt"); 1 }
+ def getString: String = { log("getString"); "s" }
+ def getUnit : Unit = { log("getUnit") }
+
+ lazy val t1 = getInt
+ lazy val t2 = getString
+ lazy val t3 = getUnit
+ checkLog("")
+
+ def m1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ def m2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ def m3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("")
+
+
+ val vl1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ val vl2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ val vl3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("getInt:getString:getUnit:():()")
+
+
+ var vr1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ var vr2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ var vr3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("getInt:getString:getUnit:():()")
+
+
+ lazy val lvl1 = {
+ lazy val t1 = getInt
+ t1 + t1
+ }
+ lazy val lvl2 = {
+ lazy val t1 = getString
+ t1 + t1
+ }
+ lazy val lvl3 = {
+ lazy val t1 = getUnit
+ log(t1); log(t1)
+ }
+ checkLog("")
+
+
+ {
+ lazy val t1 = getInt
+ lazy val t2 = getString
+ lazy val t3 = getUnit
+
+ log(t1 + t1)
+ log(t2 + t2)
+ log(t3); log(t3)
+ }
+ checkLog("getInt:2:getString:ss:getUnit:():()")
+
+
+ def run(): Unit = {
+ log(t1); log(t1);
+ log(t2); log(t2);
+ log(t3); log(t3);
+ checkLog("getInt:1:1:getString:s:s:getUnit:():()")
+
+ log(m1); log(m1)
+ log(m2); log(m2)
+ log(m3); log(m3)
+ checkLog("getInt:2:getInt:2:getString:ss:getString:ss:getUnit:():():():getUnit:():():()")
+
+ log(vl1); log(vl1)
+ log(vl2); log(vl2)
+ log(vl3); log(vl3)
+ checkLog("2:2:ss:ss:():()")
+
+ log(vr1); log(vr1); vr1 = 393; log(vr1)
+ log(vr2); log(vr2); vr2 = "h"; log(vr2)
+ log(vr3); log(vr3); vr3 = () ; log(vr3)
+ checkLog("2:2:393:ss:ss:h:():():()")
+
+ log(lvl1); log(lvl1)
+ log(lvl2); log(lvl2)
+ log(lvl3); log(lvl3)
+ checkLog("getInt:2:2:getString:ss:ss:getUnit:():():():()")
+ }
+}
+
+class D extends T
+
+class D1 extends T {
+ override lazy val t1 = { log("o-t1"); -1 }
+ checkLog("")
+
+ override def m1 = { log("o-m1"); -2 }
+ override val m2 = { log("o-m2"); "n" }
+ override lazy val m3 = { log("o-m3") }
+ checkLog("o-m2")
+
+ override val vl1 = { log("o-vl1"); -3 }
+ checkLog("o-vl1")
+
+ override lazy val lvl1 = { log("o-lvl1"); -4 }
+ checkLog("")
+
+ override def run(): Unit = {
+ log(t1); log(t1)
+ checkLog("o-t1:-1:-1")
+
+ log(m1); log(m1)
+ log(m2); log(m2)
+ log(m3); log(m3)
+ checkLog("o-m1:-2:o-m1:-2:n:n:o-m3:():()")
+
+ log(vl1); log(vl1)
+ checkLog("-3:-3")
+
+ log(lvl1); log(lvl1)
+ checkLog("o-lvl1:-4:-4")
+ }
+}
+
+class E {
+ object T { log("init T"); override def toString = "T" }
+ def m = { object T { log("init T"); val x = 1 }; T.x }
+ checkLog("")
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new C
+ c.run()
+
+ val lzyComputeMethods = c.getClass.getDeclaredMethods.filter(_.getName contains "lzycompute").map(_.getName).toList.sorted
+ val expComputeMethods = List("lvl1$lzycompute", "lvl2$lzycompute", "lvl3$lzycompute", "t1$lzycompute", "t1$lzycompute$1", "t1$lzycompute$10", "t1$lzycompute$11", "t1$lzycompute$12", "t1$lzycompute$13", "t1$lzycompute$2", "t1$lzycompute$3", "t1$lzycompute$4", "t1$lzycompute$5", "t1$lzycompute$6", "t1$lzycompute$7", "t1$lzycompute$8", "t1$lzycompute$9", "t2$lzycompute", "t2$lzycompute$1", "t3$lzycompute", "t3$lzycompute$1")
+ assert(
+ lzyComputeMethods == expComputeMethods,
+ s"wrong lzycompute methods. expected:\n$expComputeMethods\nfound:\n$lzyComputeMethods")
+
+ val fields = c.getClass.getDeclaredFields.toList.sortBy(_.getName).map(_.toString)
+ val expFields = List(
+ "private volatile byte C.bitmap$0",
+ "private int C.lvl1",
+ "private java.lang.String C.lvl2",
+ "private scala.runtime.BoxedUnit C.lvl3",
+ "private int C.t1",
+ "private java.lang.String C.t2",
+ "private scala.runtime.BoxedUnit C.t3",
+ "private final int C.vl1",
+ "private final java.lang.String C.vl2",
+ "private final scala.runtime.BoxedUnit C.vl3",
+ "private int C.vr1",
+ "private java.lang.String C.vr2",
+ "private scala.runtime.BoxedUnit C.vr3")
+ assert(
+ fields == expFields,
+ s"wrong fields. expected:\n$expFields\nfound:\n$fields")
+
+
+ val d = new D
+ d.run()
+
+ val dFields = d.getClass.getDeclaredFields.toList.sortBy(_.getName).map(_.toString)
+ assert(
+ dFields == expFields.map(_.replaceAll(" C.", " D.")),
+ s"wrong fields. expected:\n$expFields\nfound:\n$fields")
+
+
+ val d1 = new D1
+ d1.run()
+
+ val e = new E
+ log(e.T); log(e.T)
+ checkLog("init T:T:T")
+ log(e.m); log(e.m)
+ checkLog("init T:1:init T:1")
+ }
+}
diff --git a/test/files/run/lazy-locals.check b/test/files/run/lazy-locals.check
index 9e88a55d18..0a3a85ead6 100644
--- a/test/files/run/lazy-locals.check
+++ b/test/files/run/lazy-locals.check
@@ -1,9 +1,6 @@
-lazy-locals.scala:153: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+lazy-locals.scala:153: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
{
^
-lazy-locals.scala:159: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
- {
- ^
forced lazy val q
q = 10
forced lazy val t
diff --git a/test/files/run/lazy_local_labels.check b/test/files/run/lazy_local_labels.check
new file mode 100644
index 0000000000..e42c8fb8ce
--- /dev/null
+++ b/test/files/run/lazy_local_labels.check
@@ -0,0 +1,9 @@
+HI
+HI
+HI
+HI
+HI
+HI
+HI
+HI
+HI
diff --git a/test/files/run/lazy_local_labels.scala b/test/files/run/lazy_local_labels.scala
new file mode 100644
index 0000000000..f4a1cdf689
--- /dev/null
+++ b/test/files/run/lazy_local_labels.scala
@@ -0,0 +1,28 @@
+// should print HI nine times to indicate the lazy val has been re-initialized on every iteration
+object Test extends App {
+ def fooDo: Unit = {
+ var i = 3
+ do {
+ lazy val x = { println("HI"); 1 }
+ i -= x
+ } while(i > 0)
+ }
+
+ def fooWhile: Unit = {
+ var i = 3
+ while(i > 0) {
+ lazy val x = { println("HI"); 1 }
+ i -= x
+ }
+ }
+
+ @annotation.tailrec def fooTail(i: Int): Unit = {
+ lazy val x = { println("HI"); 1 }
+ if (i > 0) fooTail(i - x)
+ }
+
+
+ fooWhile
+ fooDo
+ fooTail(3)
+}
diff --git a/test/files/run/lisp.check b/test/files/run/lisp.check
new file mode 100644
index 0000000000..64053f26d0
--- /dev/null
+++ b/test/files/run/lisp.check
@@ -0,0 +1,26 @@
+(lambda (x) (+ (* x x) 1))
+(lambda (x) (+ (* x x) 1))
+
+( '(1 2 3)) = (1 2 3)
+(car '(1 2 3)) = 1
+(cdr '(1 2 3)) = (2 3)
+(null? '(2 3)) = 0
+(null? '()) = 1
+
+faculty(10) = 3628800
+faculty(10) = 3628800
+foobar = ("a" "bc" "def" "z")
+
+List('lambda, List('x), List('+, List('*, 'x, 'x), 1))
+(lambda (x) (+ (* x x) 1))
+
+( '(1 2 3)) = (1 2 3)
+(car '(1 2 3)) = 1
+(cdr '(1 2 3)) = (2 3)
+(null? '(2 3)) = 0
+(null? '()) = 1
+
+faculty(10) = 3628800
+faculty(10) = 3628800
+foobar = ("a" "bc" "def" "z")
+
diff --git a/test/files/pos/t4579.scala b/test/files/run/lisp.scala
index cd1553f02a..162c7d2599 100644
--- a/test/files/pos/t4579.scala
+++ b/test/files/run/lisp.scala
@@ -1,5 +1,5 @@
//############################################################################
-// Lisp interpreter (revived as an optimizer test.)
+// Lisp interpreter
//############################################################################
//############################################################################
diff --git a/test/files/run/local_obj.scala b/test/files/run/local_obj.scala
new file mode 100644
index 0000000000..25123f7078
--- /dev/null
+++ b/test/files/run/local_obj.scala
@@ -0,0 +1,9 @@
+class C {
+ val z = 2
+ def mod = { object x { val y = z } ; x.y }
+}
+
+object Test extends App {
+ val c = new C
+ assert(c.mod == c.z, s"${c.mod} != ${c.z}")
+}
diff --git a/test/files/run/lub-visibility.check b/test/files/run/lub-visibility.check
index 757f0f5917..61dca979a1 100644
--- a/test/files/run/lub-visibility.check
+++ b/test/files/run/lub-visibility.check
@@ -4,6 +4,6 @@ scala> // should infer List[scala.collection.immutable.Seq[Nothing]]
scala> // but reverted that for SI-5534.
scala> val x = List(List(), Vector())
-x: List[scala.collection.immutable.Seq[Nothing] with scala.collection.AbstractSeq[Nothing] with java.io.Serializable] = List(List(), Vector())
+x: List[scala.collection.immutable.Seq[Nothing] with scala.collection.AbstractSeq[Nothing] with Serializable] = List(List(), Vector())
scala> :quit
diff --git a/test/files/run/macro-duplicate.check b/test/files/run/macro-duplicate.check
index 58781b719a..7006b16611 100644
--- a/test/files/run/macro-duplicate.check
+++ b/test/files/run/macro-duplicate.check
@@ -1,3 +1,3 @@
-Test_2.scala:5: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+Test_2.scala:5: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
Macros.foo
^
diff --git a/test/files/run/macro-typecheck-implicitsdisabled.check b/test/files/run/macro-typecheck-implicitsdisabled.check
index 91d8fabd72..07404cf3fb 100644
--- a/test/files/run/macro-typecheck-implicitsdisabled.check
+++ b/test/files/run/macro-typecheck-implicitsdisabled.check
@@ -1,2 +1,2 @@
-scala.this.Predef.ArrowAssoc[Int](1).->[Int](2)
+scala.Predef.ArrowAssoc[Int](1).->[Int](2)
scala.reflect.macros.TypecheckException: value -> is not a member of Int
diff --git a/test/files/run/macroPlugins-enterStats.check b/test/files/run/macroPlugins-enterStats.check
index 133b1ae1af..182d54ca34 100644
--- a/test/files/run/macroPlugins-enterStats.check
+++ b/test/files/run/macroPlugins-enterStats.check
@@ -6,13 +6,13 @@ package <empty> {
()
};
def x: Int = 2;
- def xmacroPlugin1: Nothing = scala.this.Predef.???;
- def xmacroPlugin2: Nothing = scala.this.Predef.???;
- def xmacroPlugin2macroPlugin1: Nothing = scala.this.Predef.???;
+ def xmacroPlugin1: Nothing = scala.Predef.???;
+ def xmacroPlugin2: Nothing = scala.Predef.???;
+ def xmacroPlugin2macroPlugin1: Nothing = scala.Predef.???;
def y: Int = 3;
- def ymacroPlugin1: Nothing = scala.this.Predef.???;
- def ymacroPlugin2: Nothing = scala.this.Predef.???;
- def ymacroPlugin2macroPlugin1: Nothing = scala.this.Predef.???
+ def ymacroPlugin1: Nothing = scala.Predef.???;
+ def ymacroPlugin2: Nothing = scala.Predef.???;
+ def ymacroPlugin2macroPlugin1: Nothing = scala.Predef.???
}
}
diff --git a/test/files/run/macroPlugins-namerHooks.check b/test/files/run/macroPlugins-namerHooks.check
index c2db5935d4..4409f196f0 100644
--- a/test/files/run/macroPlugins-namerHooks.check
+++ b/test/files/run/macroPlugins-namerHooks.check
@@ -1,7 +1,7 @@
enterSym(package <empty> { case class C extends scala.Product with scala.Serializable { <caseaccessor> <paramaccessor> val x: Int = _; <caseaccessor> <paramaccessor> val y: Int = _; def <init>(x: Int, y: Int) = { super.<init>(); () } } })
enterSym(case class C extends scala.Product with scala.Serializable { <caseaccessor> <paramaccessor> val x: Int = _; <caseaccessor> <paramaccessor> val y: Int = _; def <init>(x: Int, y: Int) = { super.<init>(); () } })
ensureCompanionObject(case class C extends scala.Product with scala.Serializable { <caseaccessor> <paramaccessor> val x: Int = _; <caseaccessor> <paramaccessor> val y: Int = _; def <init>(x: Int, y: Int) = { super.<init>(); () } }, ...)
-enterSym(<synthetic> object C extends runtime.this.AbstractFunction2[Int, Int, C] { def <init>() = { super.<init>(); () }; final override <synthetic> def toString() = "C" })
+enterSym(<synthetic> object C extends scala.runtime.AbstractFunction2[Int, Int, C] { def <init>() = { super.<init>(); () }; final override <synthetic> def toString() = "C" })
enterStat(case class C extends scala.Product with scala.Serializable { <caseaccessor> <paramaccessor> val x: Int = _; <caseaccessor> <paramaccessor> val y: Int = _; def <init>(x: Int, y: Int) = { super.<init>(); () } })
enterSym(<caseaccessor> <paramaccessor> val x: Int = _)
enterSym(<caseaccessor> <paramaccessor> val y: Int = _)
@@ -18,17 +18,17 @@ enterStat(super.<init>())
enterSym(<synthetic> def copy$default$1 = x)
enterSym(<synthetic> def copy$default$2 = y)
enterSym(<synthetic> var acc: Int = -889275714)
-enterSym(acc = Statics.this.mix(acc, x))
-enterSym(acc = Statics.this.mix(acc, y))
+enterSym(acc = scala.runtime.Statics.mix(acc, x))
+enterSym(acc = scala.runtime.Statics.mix(acc, y))
enterStat(<synthetic> var acc: Int = -889275714)
-enterStat(acc = Statics.this.mix(acc, x))
-enterStat(acc = Statics.this.mix(acc, y))
+enterStat(acc = scala.runtime.Statics.mix(acc, x))
+enterStat(acc = scala.runtime.Statics.mix(acc, y))
enterSym(<synthetic> val C$1: C = x$1.asInstanceOf[C])
enterStat(<synthetic> val C$1: C = x$1.asInstanceOf[C])
enterSym(def <init>() = { super.<init>(); () })
enterSym(final override <synthetic> def toString() = "C")
enterSym(case <synthetic> def apply(x: Int, y: Int): C = new C(x, y))
-enterSym(case <synthetic> def unapply(x$0: C) = if (x$0.==(null)) scala.this.None else Some(scala.Tuple2(x$0.x, x$0.y)))
+enterSym(case <synthetic> def unapply(x$0: C): _root_.scala.Option[scala.Tuple2[Int, Int]] = if (x$0.==(null)) scala.None else Some(scala.Tuple2(x$0.x, x$0.y)))
enterStat(def <init>() = { super.<init>(); () })
enterStat(final override <synthetic> def toString() = "C")
enterSym(def <init>() = { super.<init>(); () })
diff --git a/test/files/run/mapConserve.scala b/test/files/run/mapConserve.scala
index c17754283a..95cad69954 100644
--- a/test/files/run/mapConserve.scala
+++ b/test/files/run/mapConserve.scala
@@ -1,5 +1,5 @@
/*
- * filter: inliner warnings; re-run with
+ * filter: inliner warning
*/
import scala.annotation.tailrec
import scala.collection.mutable.ListBuffer
diff --git a/test/files/run/map_java_conversions.scala b/test/files/run/map_java_conversions.scala
index c007b3e0eb..e287b0eb09 100644
--- a/test/files/run/map_java_conversions.scala
+++ b/test/files/run/map_java_conversions.scala
@@ -1,20 +1,16 @@
-
-
-
-
+import collection.convert.ImplicitConversionsToScala._
+import collection.JavaConverters._
object Test {
def main(args: Array[String]) {
- import collection.JavaConversions._
-
test(new java.util.HashMap[String, String])
test(new java.util.Properties)
testConcMap
}
def testConcMap {
- import collection.JavaConversions._
+ import collection.convert.ImplicitConversionsToScala._
val concMap = new java.util.concurrent.ConcurrentHashMap[String, String]
@@ -50,7 +46,6 @@ object Test {
for (i <- 0 until 10) m += (("key" + i, "value" + i))
for ((k, v) <- m) assert(k.startsWith("key"))
}
-
}
diff --git a/test/files/run/misc.check b/test/files/run/misc.check
index 56116f8104..075dfeff2f 100644
--- a/test/files/run/misc.check
+++ b/test/files/run/misc.check
@@ -1,25 +1,25 @@
-misc.scala:46: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:46: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
42;
^
-misc.scala:47: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:47: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
42l;
^
-misc.scala:48: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:48: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
23.5f;
^
-misc.scala:49: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:49: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
23.5;
^
-misc.scala:50: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:50: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
"Hello";
^
-misc.scala:51: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:51: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
32 + 45;
^
-misc.scala:62: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:62: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
x;
^
-misc.scala:74: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+misc.scala:74: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
1 < 2;
^
### Hello
diff --git a/test/files/run/mixin-signatures.check b/test/files/run/mixin-signatures.check
index 3031fe75af..77bff79ac8 100644
--- a/test/files/run/mixin-signatures.check
+++ b/test/files/run/mixin-signatures.check
@@ -48,12 +48,30 @@ class Test$bar5$ {
public java.lang.Object Test$bar5$.h(java.lang.Object)
}
-class Foo1$class {
- public static java.lang.String Foo1$class.f(Foo1,java.lang.Object)
+interface Foo1 {
+ public abstract java.lang.Object Base.f(java.lang.Object)
+ generic: public abstract R Base.f(T)
+ public default java.lang.String Foo1.f(java.lang.Object)
+ generic: public default java.lang.String Foo1.f(T)
+ public abstract java.lang.Object Base.g(java.lang.Object)
+ generic: public abstract R Base.g(T)
+ public abstract java.lang.String Foo1.g(java.lang.Object)
+ generic: public abstract java.lang.String Foo1.g(T)
+ public default java.lang.Object Base.h(java.lang.Object)
+ generic: public default R Base.h(T)
}
-class Foo2$class {
- public static java.lang.Object Foo2$class.f(Foo2,java.lang.String)
+interface Foo2 {
+ public abstract java.lang.Object Base.f(java.lang.Object)
+ generic: public abstract R Base.f(T)
+ public default java.lang.Object Foo2.f(java.lang.String)
+ generic: public default R Foo2.f(java.lang.String)
+ public abstract java.lang.Object Base.g(java.lang.Object)
+ generic: public abstract R Base.g(T)
+ public abstract java.lang.Object Foo2.g(java.lang.String)
+ generic: public abstract R Foo2.g(java.lang.String)
+ public default java.lang.Object Base.h(java.lang.Object)
+ generic: public default R Base.h(T)
}
000000000000000000000000000000000000
diff --git a/test/files/run/mixin-signatures.scala b/test/files/run/mixin-signatures.scala
index afd3fad877..0f6d0844d8 100644
--- a/test/files/run/mixin-signatures.scala
+++ b/test/files/run/mixin-signatures.scala
@@ -99,7 +99,7 @@ object Test {
def main(args: Array[String]): Unit = {
List(bar1, bar2, bar3, bar4, bar5) foreach show
- List("Foo1$class", "Foo2$class") foreach show
+ List("Foo1", "Foo2") foreach show
println(go)
}
-} \ No newline at end of file
+}
diff --git a/test/files/run/names-defaults.check b/test/files/run/names-defaults.check
index c358dc5849..722d28dd11 100644
--- a/test/files/run/names-defaults.check
+++ b/test/files/run/names-defaults.check
@@ -1,4 +1,7 @@
-names-defaults.scala:269: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+names-defaults.scala:269: warning: a pure expression does nothing in statement position
+ spawn(b = { val ttt = 1; ttt }, a = 0)
+ ^
+names-defaults.scala:269: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
spawn(b = { val ttt = 1; ttt }, a = 0)
^
warning: there were four deprecation warnings; re-run with -deprecation for details
diff --git a/test/files/run/noInlineUnknownIndy.check b/test/files/run/noInlineUnknownIndy.check
new file mode 100644
index 0000000000..7cc6d1b675
--- /dev/null
+++ b/test/files/run/noInlineUnknownIndy.check
@@ -0,0 +1,13 @@
+newSource1.scala:1: warning: A_1::test()Ljava/lang/String; could not be inlined:
+Failed to check if A_1::test()Ljava/lang/String; can be safely inlined to T without causing an IllegalAccessError. Checking instruction INVOKEDYNAMIC m()LA_1$Fun; [
+ // handle kind 0x6 : INVOKESTATIC
+ not/java/lang/SomeLambdaMetafactory.notAMetaFactoryMethod(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
+ // arguments:
+ (Ljava/lang/String;)Ljava/lang/String;,
+ // handle kind 0x6 : INVOKESTATIC
+ A_1.lambda$test$0(Ljava/lang/String;)Ljava/lang/String;,
+ (Ljava/lang/String;)Ljava/lang/String;
+ ] failed:
+The callee contains an InvokeDynamic instruction with an unknown bootstrap method (not a LambdaMetaFactory).
+class T { def foo = A_1.test }
+ ^
diff --git a/test/files/run/noInlineUnknownIndy/A_1.java b/test/files/run/noInlineUnknownIndy/A_1.java
new file mode 100644
index 0000000000..a9144a9fa6
--- /dev/null
+++ b/test/files/run/noInlineUnknownIndy/A_1.java
@@ -0,0 +1,9 @@
+public class A_1 {
+ interface Fun {
+ String m(String s);
+ }
+ public static final String test() {
+ Fun f = s -> s.trim();
+ return f.m(" eh ");
+ }
+}
diff --git a/test/files/run/noInlineUnknownIndy/Test.scala b/test/files/run/noInlineUnknownIndy/Test.scala
new file mode 100644
index 0000000000..a666146f15
--- /dev/null
+++ b/test/files/run/noInlineUnknownIndy/Test.scala
@@ -0,0 +1,33 @@
+import java.io.File
+
+import scala.collection.JavaConverters._
+import scala.tools.asm.tree.{ClassNode, InvokeDynamicInsnNode}
+import scala.tools.asm.{Handle, Opcodes}
+import scala.tools.partest.BytecodeTest.modifyClassFile
+import scala.tools.partest._
+
+object Test extends DirectTest {
+ def code = ???
+
+ def compileCode(code: String) = {
+ val classpath = List(sys.props("partest.lib"), testOutput.path) mkString sys.props("path.separator")
+ compileString(newCompiler("-cp", classpath, "-d", testOutput.path, "-opt:l:classpath", "-Yopt-inline-heuristics:everything", "-opt-warnings:_"))(code)
+ }
+
+ def show(): Unit = {
+ val unknownBootstrapMethod = new Handle(
+ Opcodes.H_INVOKESTATIC,
+ "not/java/lang/SomeLambdaMetafactory",
+ "notAMetaFactoryMethod",
+ "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;",
+ /* itf = */ false)
+ modifyClassFile(new File(testOutput.toFile, "A_1.class"))((cn: ClassNode) => {
+ val testMethod = cn.methods.iterator.asScala.find(_.name == "test").head
+ val indy = testMethod.instructions.iterator.asScala.collect({ case i: InvokeDynamicInsnNode => i }).next()
+ indy.bsm = unknownBootstrapMethod
+ cn
+ })
+
+ compileCode("class T { def foo = A_1.test }")
+ }
+}
diff --git a/test/files/run/nothingTypeDce.flags b/test/files/run/nothingTypeDce.flags
index d85321ca0e..475f6db67c 100644
--- a/test/files/run/nothingTypeDce.flags
+++ b/test/files/run/nothingTypeDce.flags
@@ -1 +1 @@
--target:jvm-1.6 -Ybackend:GenBCode -Yopt:unreachable-code
+-opt:unreachable-code
diff --git a/test/files/run/nothingTypeDce.scala b/test/files/run/nothingTypeDce.scala
index 5f3692fd33..cb1e59e45c 100644
--- a/test/files/run/nothingTypeDce.scala
+++ b/test/files/run/nothingTypeDce.scala
@@ -1,7 +1,6 @@
// See comment in BCodeBodyBuilder
-// -target:jvm-1.6 -Ybackend:GenBCode -Yopt:unreachable-code
-// target enables stack map frames generation
+// -opt:unreachable-code
class C {
// can't just emit a call to ???, that returns value of type Nothing$ (not Int).
diff --git a/test/files/run/nothingTypeNoFramesNoDce.check b/test/files/run/nothingTypeNoFramesNoDce.check
deleted file mode 100644
index b1d08b45ff..0000000000
--- a/test/files/run/nothingTypeNoFramesNoDce.check
+++ /dev/null
@@ -1 +0,0 @@
-warning: -target:jvm-1.5 is deprecated: use target for Java 1.6 or above.
diff --git a/test/files/run/nothingTypeNoFramesNoDce.flags b/test/files/run/nothingTypeNoFramesNoDce.flags
deleted file mode 100644
index a035c86179..0000000000
--- a/test/files/run/nothingTypeNoFramesNoDce.flags
+++ /dev/null
@@ -1 +0,0 @@
--target:jvm-1.5 -Ybackend:GenBCode -Yopt:l:none -deprecation
diff --git a/test/files/run/nothingTypeNoFramesNoDce.scala b/test/files/run/nothingTypeNoFramesNoDce.scala
deleted file mode 100644
index 7f63faeaa7..0000000000
--- a/test/files/run/nothingTypeNoFramesNoDce.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-// See comment in BCodeBodyBuilder
-
-// -target:jvm-1.5 -Ybackend:GenBCode -Yopt:l:none
-// target disables stack map frame generation. in this mode, the ClssWriter just emits dead code as is.
-
-class C {
- // can't just emit a call to ???, that returns value of type Nothing$ (not Int).
- def f1: Int = ???
-
- def f2: Int = throw new Error("")
-
- def f3(x: Boolean) = {
- var y = 0
- // cannot assign an object of type Nothing$ to Int
- if (x) y = ???
- else y = 1
- y
- }
-
- def f4(x: Boolean) = {
- var y = 0
- // tests that whatever is emitted after the throw is valid (what? depends on opts, presence of stack map frames)
- if (x) y = throw new Error("")
- else y = 1
- y
- }
-
- def f5(x: Boolean) = {
- // stack heights need to be the same. ??? looks to the jvm like returning a value of
- // type Nothing$, need to drop or throw it.
- println(
- if (x) { ???; 10 }
- else 20
- )
- }
-
- def f6(x: Boolean) = {
- println(
- if (x) { throw new Error(""); 10 }
- else 20
- )
- }
-
- def f7(x: Boolean) = {
- println(
- if (x) throw new Error("")
- else 20
- )
- }
-
- def f8(x: Boolean) = {
- println(
- if (x) throw new Error("")
- else 20
- )
- }
-}
-
-object Test extends App {
- new C()
-}
diff --git a/test/files/run/nothingTypeNoOpt.flags b/test/files/run/nothingTypeNoOpt.flags
index b3b518051b..213d7425d1 100644
--- a/test/files/run/nothingTypeNoOpt.flags
+++ b/test/files/run/nothingTypeNoOpt.flags
@@ -1 +1 @@
--target:jvm-1.6 -Ybackend:GenBCode -Yopt:l:none
+-opt:l:none
diff --git a/test/files/run/nothingTypeNoOpt.scala b/test/files/run/nothingTypeNoOpt.scala
index 454539a4b1..cc68364bf9 100644
--- a/test/files/run/nothingTypeNoOpt.scala
+++ b/test/files/run/nothingTypeNoOpt.scala
@@ -1,6 +1,6 @@
// See comment in BCodeBodyBuilder
-// -target:jvm-1.6 -Ybackend:GenBCode -Yopt:l:none
+// -target:jvm-1.6 -opt:l:none
// target enables stack map frame generation
class C {
diff --git a/test/files/run/numbereq.scala b/test/files/run/numbereq.scala
index 7ce4b23cf8..1f12d0643e 100644
--- a/test/files/run/numbereq.scala
+++ b/test/files/run/numbereq.scala
@@ -1,6 +1,7 @@
object Test {
def mkNumbers(x: Int): List[AnyRef] = {
- val base = List(
+ //Use explicit AnyRef to workaround known limitation of type inference with F-Bounds
+ val base = List[AnyRef](
BigDecimal(x),
BigInt(x),
new java.lang.Double(x.toDouble),
diff --git a/test/files/run/optimizer-array-load.flags b/test/files/run/optimizer-array-load.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/run/optimizer-array-load.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/run/origins.check b/test/files/run/origins.check
deleted file mode 100644
index b12cb6e38f..0000000000
--- a/test/files/run/origins.check
+++ /dev/null
@@ -1,6 +0,0 @@
-
->> Origins tag 'boop' logged 65 calls from 3 distinguished sources.
-
- 50 Test$$anonfun$f3$1.apply(origins.scala:16)
- 10 Test$$anonfun$f2$1.apply(origins.scala:15)
- 5 Test$$anonfun$f1$1.apply(origins.scala:14)
diff --git a/test/files/run/patmatnew.check b/test/files/run/patmatnew.check
index 56b8ac2f4f..117bc28c2d 100644
--- a/test/files/run/patmatnew.check
+++ b/test/files/run/patmatnew.check
@@ -1,10 +1,16 @@
-patmatnew.scala:351: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+patmatnew.scala:351: warning: a pure expression does nothing in statement position
case 1 => "OK"
^
-patmatnew.scala:352: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+patmatnew.scala:352: warning: a pure expression does nothing in statement position
case 2 => assert(false); "KO"
^
-patmatnew.scala:353: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+patmatnew.scala:352: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
+ case 2 => assert(false); "KO"
+ ^
+patmatnew.scala:353: warning: a pure expression does nothing in statement position
+ case 3 => assert(false); "KO"
+ ^
+patmatnew.scala:353: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
case 3 => assert(false); "KO"
^
patmatnew.scala:670: warning: This catches all Throwables. If this is really intended, use `case e : Throwable` to clear this warning.
diff --git a/test/files/run/patmatnew.scala b/test/files/run/patmatnew.scala
index 3c0d00dc6c..2647d97836 100644
--- a/test/files/run/patmatnew.scala
+++ b/test/files/run/patmatnew.scala
@@ -539,7 +539,7 @@ object Test {
case class Operator(x: Int);
val EQ = new Operator(2);
- def analyze(x: Tuple2[Operator, Int]) = x match {
+ def analyze(x: Tuple2[Operator, Int]) = (x: @unchecked) match {
case (EQ, 0) => "0"
case (EQ, 1) => "1"
case (EQ, 2) => "2"
@@ -603,7 +603,7 @@ object Test {
object Bug1093 {
def run() {
- assert(Some(3) match {
+ assert((Some(3): @unchecked) match {
case Some(1 | 2) => false
case Some(3) => true
})
diff --git a/test/files/run/private-inline.check b/test/files/run/private-inline.check
deleted file mode 100644
index e71aec2fcf..0000000000
--- a/test/files/run/private-inline.check
+++ /dev/null
@@ -1,13 +0,0 @@
-private-inline.scala:24: warning: Could not inline required method wrapper1 because callee contains exception handlers / finally clause, and is invoked with non-empty operand stack.
- def f1b() = identity(wrapper1(5))
- ^
-private-inline.scala:24: warning: At the end of the day, could not inline @inline-marked method wrapper1
- def f1b() = identity(wrapper1(5))
- ^
-private-inline.scala:29: warning: Could not inline required method wrapper2 because callee contains exception handlers / finally clause, and is invoked with non-empty operand stack.
- def f2b() = identity(wrapper2(5))
- ^
-private-inline.scala:29: warning: At the end of the day, could not inline @inline-marked method wrapper2
- def f2b() = identity(wrapper2(5))
- ^
-20
diff --git a/test/files/run/private-inline.flags b/test/files/run/private-inline.flags
deleted file mode 100644
index c550fdce16..0000000000
--- a/test/files/run/private-inline.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise -Yinline-warnings -Ybackend:GenASM
diff --git a/test/files/run/private-inline.scala b/test/files/run/private-inline.scala
deleted file mode 100644
index 60fef9efca..0000000000
--- a/test/files/run/private-inline.scala
+++ /dev/null
@@ -1,52 +0,0 @@
-
-final class A {
- private var x1 = false
- var x2 = false
-
- // manipulates private var
- @inline private def wrapper1[T](body: => T): T = {
- val saved = x1
- x1 = true
- try body
- finally x1 = saved
- }
- // manipulates public var
- @inline private def wrapper2[T](body: => T): T = {
- val saved = x2
- x2 = true
- try body
- finally x2 = saved
- }
-
- // not inlined
- def f1a() = wrapper1(5)
- // inlined!
- def f1b() = identity(wrapper1(5))
-
- // not inlined
- def f2a() = wrapper2(5)
- // inlined!
- def f2b() = identity(wrapper2(5))
-}
-
-object Test {
- def methodClasses = List("f1a", "f2a") map ("A$$anonfun$" + _ + "$1")
-
- def main(args: Array[String]): Unit = {
- val a = new A
- import a._
- println(f1a() + f1b() + f2a() + f2b())
-
- // Don't know how else to test this: all these should have been
- // inlined, so all should fail.
- methodClasses foreach { clazz =>
-
- val foundClass = (
- try Class.forName(clazz)
- catch { case _: Throwable => null }
- )
-
- assert(foundClass == null, foundClass)
- }
- }
-}
diff --git a/test/files/run/programmatic-main.check b/test/files/run/programmatic-main.check
index 1cd94ccb45..cf8595db5d 100644
--- a/test/files/run/programmatic-main.check
+++ b/test/files/run/programmatic-main.check
@@ -10,18 +10,17 @@ superaccessors 6 add super accessors in traits and nested classes
pickler 8 serialize symbol tables
refchecks 9 reference/override checking, translate nested objects
uncurry 10 uncurry, translate function values to anonymous classes
- tailcalls 11 replace tail calls by jumps
- specialize 12 @specialized-driven class and method specialization
- explicitouter 13 this refs to outer pointers
- erasure 14 erase types, add interfaces for traits
- posterasure 15 clean up erased inline classes
- lazyvals 16 allocate bitmaps, translate lazy vals into lazified defs
+ fields 11 synthesize accessors and fields, including bitmaps for la...
+ tailcalls 12 replace tail calls by jumps
+ specialize 13 @specialized-driven class and method specialization
+ explicitouter 14 this refs to outer pointers
+ erasure 15 erase types, add interfaces for traits
+ posterasure 16 clean up erased inline classes
lambdalift 17 move nested functions to top level
constructors 18 move field definitions into constructors
flatten 19 eliminate inner classes
mixin 20 mixin composition
cleanup 21 platform-specific cleanups, generate reflective calls
delambdafy 22 remove lambdas
- icode 23 generate portable intermediate code
- jvm 24 generate JVM bytecode
- terminal 25 the last phase during a compilation run
+ jvm 23 generate JVM bytecode
+ terminal 24 the last phase during a compilation run
diff --git a/test/files/run/reflection-fieldsymbol-navigation.check b/test/files/run/reflection-fieldsymbol-navigation.check
index ae0597a045..fd06c78a18 100644
--- a/test/files/run/reflection-fieldsymbol-navigation.check
+++ b/test/files/run/reflection-fieldsymbol-navigation.check
@@ -1,6 +1,6 @@
-method x
+variable x
false
variable x
true
-method x
-method x_=
+variable x
+variable x
diff --git a/test/files/run/reflection-implClass.scala b/test/files/run/reflection-implClass.scala
deleted file mode 100644
index 4242530dd1..0000000000
--- a/test/files/run/reflection-implClass.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Tries to load a symbol for the `Foo$class` using Scala reflection.
- * Since trait implementation classes do not get pickling information
- * symbol for them should be created using fallback mechanism
- * that exposes Java reflection information dressed up in
- * a Scala symbol.
- */
-object Test extends App with Outer {
- import scala.reflect.{ClassTag, classTag}
- import scala.reflect.runtime.universe._
- import scala.reflect.runtime.{currentMirror => cm}
-
- assert(cm.classSymbol(classTag[Foo].runtimeClass).info.decl(TermName("bar")).info ==
- cm.classSymbol(classTag[Bar].runtimeClass).info.decl(TermName("foo")).info)
-
- val s1 = implClass(classTag[Foo].runtimeClass)
- assert(s1 != NoSymbol)
- assert(s1.info != NoType)
- assert(s1.companion.info != NoType)
- assert(s1.companion.info.decl(TermName("bar")) != NoSymbol)
- val s2 = implClass(classTag[Bar].runtimeClass)
- assert(s2 != NoSymbol)
- assert(s2.info != NoType)
- assert(s2.companion.info != NoType)
- assert(s2.companion.info.decl(TermName("foo")) != NoSymbol)
- def implClass(clazz: Class[_]) = {
- val implClass = Class.forName(clazz.getName + "$class")
- cm.classSymbol(implClass)
- }
-}
-
-trait Foo {
- def bar = 1
-}
-
-trait Outer {
- trait Bar {
- def foo = 1
- }
-}
diff --git a/test/files/run/reflection-java-annotations.check b/test/files/run/reflection-java-annotations.check
index 842037254e..4c20727ea8 100644
--- a/test/files/run/reflection-java-annotations.check
+++ b/test/files/run/reflection-java-annotations.check
@@ -1,4 +1,3 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
-List(JavaComplexAnnotation_1(v1 = 1, v10 = "hello", v101 = [101, 101], v102 = [102, 102], v103 = ['g', 'g'], v104 = [104, 104], v105 = [105L, 105L], v106 = [106.0, 106.0], v107 = [107.0, 107.0], v108 = [false, true], v11 = classOf[JavaAnnottee_1], v110 = ["hello", "world"], v111 = [classOf[JavaSimpleAnnotation_1], classOf[JavaComplexAnnotation_1]], v112 = [FOO, BAR], v113 = [JavaSimpleAnnotation_1(v1 = 21, v10 = "world2", v11 = classOf[JavaComplexAnnotation_1], v12 = BAR, v2 = 22, v3 = '\027', v4 = 24, v5 = 25L, v6 = 26.0, v7 = 27.0, v8 = false)], v12 = FOO, v13 = JavaSimpleAnnotation_1(v1 = 11, v10 = "world1", v11 = classOf[JavaSimpleAnnotation_1], v12 = FOO, v2 = 12, v3 = '\r', v4 = 14, v5 = 15L, v6 = 16.0, v7 = 17.0, v8 = false), v2 = 2, v3 = '\03', v4 = 4, v5 = 5L, v6 = 6.0, v7 = 7.0, v8 = false))
+List(JavaComplexAnnotation_1(v1 = 1, v10 = "hello", v101 = [101, 101], v102 = [102, 102], v103 = ['g', 'g'], v104 = [104, 104], v105 = [105L, 105L], v106 = [106.0, 106.0], v107 = [107.0, 107.0], v108 = [false, true], v11 = classOf[JavaAnnottee_1], v110 = ["hello", "world"], v111 = [classOf[JavaSimpleAnnotation_1], classOf[JavaComplexAnnotation_1]], v112 = [FOO, BAR], v113 = [JavaSimpleAnnotation_1(v1 = 21, v10 = "world2", v11 = classOf[JavaComplexAnnotation_1], v12 = BAR, v2 = 22, v3 = '\u0017', v4 = 24, v5 = 25L, v6 = 26.0, v7 = 27.0, v8 = false)], v12 = FOO, v13 = JavaSimpleAnnotation_1(v1 = 11, v10 = "world1", v11 = classOf[JavaSimpleAnnotation_1], v12 = FOO, v2 = 12, v3 = '\r', v4 = 14, v5 = 15L, v6 = 16.0, v7 = 17.0, v8 = false), v2 = 2, v3 = '\u0003', v4 = 4, v5 = 5L, v6 = 6.0, v7 = 7.0, v8 = false))
=======
-new JavaComplexAnnotation_1(v1 = 1, v10 = "hello", v101 = Array(101, 101), v102 = Array(102, 102), v103 = Array('g', 'g'), v104 = Array(104, 104), v105 = Array(105L, 105L), v106 = Array(106.0, 106.0), v107 = Array(107.0, 107.0), v108 = Array(false, true), v11 = classOf[JavaAnnottee_1], v110 = Array("hello", "world"), v111 = Array(classOf[JavaSimpleAnnotation_1], classOf[JavaComplexAnnotation_1]), v112 = Array(FOO, BAR), v113 = Array(new JavaSimpleAnnotation_1(v1 = 21, v10 = "world2", v11 = classOf[JavaComplexAnnotation_1], v12 = BAR, v2 = 22, v3 = '\027', v4 = 24, v5 = 25L, v6 = 26.0, v7 = 27.0, v8 = false)), v12 = FOO, v13 = new JavaSimpleAnnotation_1(v1 = 11, v10 = "world1", v11 = classOf[JavaSimpleAnnotation_1], v12 = FOO, v2 = 12, v3 = '\r', v4 = 14, v5 = 15L, v6 = 16.0, v7 = 17.0, v8 = false), v2 = 2, v3 = '\03', v4 = 4, v5 = 5L, v6 = 6.0, v7 = 7.0, v8 = false)
+new JavaComplexAnnotation_1(v1 = 1, v10 = "hello", v101 = Array(101, 101), v102 = Array(102, 102), v103 = Array('g', 'g'), v104 = Array(104, 104), v105 = Array(105L, 105L), v106 = Array(106.0, 106.0), v107 = Array(107.0, 107.0), v108 = Array(false, true), v11 = classOf[JavaAnnottee_1], v110 = Array("hello", "world"), v111 = Array(classOf[JavaSimpleAnnotation_1], classOf[JavaComplexAnnotation_1]), v112 = Array(FOO, BAR), v113 = Array(new JavaSimpleAnnotation_1(v1 = 21, v10 = "world2", v11 = classOf[JavaComplexAnnotation_1], v12 = BAR, v2 = 22, v3 = '\u0017', v4 = 24, v5 = 25L, v6 = 26.0, v7 = 27.0, v8 = false)), v12 = FOO, v13 = new JavaSimpleAnnotation_1(v1 = 11, v10 = "world1", v11 = classOf[JavaSimpleAnnotation_1], v12 = FOO, v2 = 12, v3 = '\r', v4 = 14, v5 = 15L, v6 = 16.0, v7 = 17.0, v8 = false), v2 = 2, v3 = '\u0003', v4 = 4, v5 = 5L, v6 = 6.0, v7 = 7.0, v8 = false)
diff --git a/test/files/run/reflection-java-annotations/Test_2.scala b/test/files/run/reflection-java-annotations/Test_2.scala
index dec5b45ca7..6d457ebe64 100644
--- a/test/files/run/reflection-java-annotations/Test_2.scala
+++ b/test/files/run/reflection-java-annotations/Test_2.scala
@@ -2,8 +2,8 @@ object Test extends App {
import scala.reflect.runtime.universe._
val sym = typeOf[JavaAnnottee_1].typeSymbol
sym.info
- sym.annotations foreach (_.javaArgs)
+ sym.annotations foreach (_.tree.children.tail)
println(sym.annotations)
println("=======")
sym.annotations.map(_.tree).map(println)
-} \ No newline at end of file
+}
diff --git a/test/files/run/reflection-magicsymbols-repl.check b/test/files/run/reflection-magicsymbols-repl.check
index dd26c08349..a33f41012e 100644
--- a/test/files/run/reflection-magicsymbols-repl.check
+++ b/test/files/run/reflection-magicsymbols-repl.check
@@ -19,7 +19,7 @@ scala> def test(n: Int): Unit = {
val x = sig.asInstanceOf[MethodType].params.head
println(x.info)
}
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
test: (n: Int)Unit
scala> for (i <- 1 to 8) test(i)
diff --git a/test/files/run/reflection-mem-typecheck.scala b/test/files/run/reflection-mem-typecheck.scala
index f1fe983ede..93ec1c937a 100644
--- a/test/files/run/reflection-mem-typecheck.scala
+++ b/test/files/run/reflection-mem-typecheck.scala
@@ -11,6 +11,8 @@ object Test extends MemoryTest {
cm.mkToolBox()
}
+ // I'm not sure this is a great way to test for memory leaks,
+ // since we're also testing how good the JVM's GC is, and this is not easily reproduced between machines/over time
override def maxDelta = 12
override def calcsPerIter = 8
override def calc() {
diff --git a/test/files/run/reflection-scala-annotations.check b/test/files/run/reflection-scala-annotations.check
index 5bc2786161..44062d8c4a 100644
--- a/test/files/run/reflection-scala-annotations.check
+++ b/test/files/run/reflection-scala-annotations.check
@@ -3,5 +3,5 @@ make your annotation visible at runtime. If that is what
you want, you must write the annotation class in Java.
class jann(x: Int, y: Array[Int]) extends ClassfileAnnotation
^
-new sann(1, immutable.this.List.apply[Int](1, 2))
+new sann(1, scala.collection.immutable.List.apply[Int](1, 2))
new jann(y = Array(1, 2), x = 2)
diff --git a/test/files/run/reify-aliases.check b/test/files/run/reify-aliases.check
index da784227af..b6b5fb71b2 100644
--- a/test/files/run/reify-aliases.check
+++ b/test/files/run/reify-aliases.check
@@ -1 +1 @@
-TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List())
+TypeRef(SingleType(TypeRef(ThisType(<root>), scala, List()), scala.Predef), TypeName("String"), List())
diff --git a/test/files/run/reify_lazyunit.check b/test/files/run/reify_lazyunit.check
index 579ecfe8aa..e6acf5d17b 100644
--- a/test/files/run/reify_lazyunit.check
+++ b/test/files/run/reify_lazyunit.check
@@ -1,4 +1,4 @@
-reify_lazyunit.scala:6: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+reify_lazyunit.scala:6: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
lazy val x = { 0; println("12")}
^
12
diff --git a/test/files/run/reify_printf.scala b/test/files/run/reify_printf.scala
index c4ade79837..099a353e89 100644
--- a/test/files/run/reify_printf.scala
+++ b/test/files/run/reify_printf.scala
@@ -6,7 +6,6 @@ import scala.tools.reflect.ToolBox
import scala.reflect.api._
import scala.reflect.api.Trees
import scala.reflect.internal.Types
-import scala.util.matching.Regex
object Test extends App {
//val output = new ByteArrayOutputStream()
diff --git a/test/files/run/repl-bare-expr.check b/test/files/run/repl-bare-expr.check
index e0a1f4ecd6..bdf8842bb0 100644
--- a/test/files/run/repl-bare-expr.check
+++ b/test/files/run/repl-bare-expr.check
@@ -1,12 +1,12 @@
scala> 2 ; 3
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
2 ;;
^
res0: Int = 3
scala> { 2 ; 3 }
-<console>:12: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:12: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
{ 2 ; 3 }
^
res1: Int = 3
@@ -15,16 +15,16 @@ scala> 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Mooo
1 +
2 +
3 } ; bippy+88+11
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
defined object Cow
diff --git a/test/files/run/repl-colon-type.check b/test/files/run/repl-colon-type.check
index 21fbe34d96..1217e8d8c2 100644
--- a/test/files/run/repl-colon-type.check
+++ b/test/files/run/repl-colon-type.check
@@ -35,7 +35,7 @@ Int
scala> :type protected lazy val f = 5
<console>:5: error: lazy value f cannot be accessed in object $iw
- Access to protected value f not permitted because
+ Access to protected lazy value f not permitted because
enclosing object $eval in package $line13 is not a subclass of
object $iw where target is defined
lazy val $result = f
diff --git a/test/files/run/repl-implicits-nopredef.check b/test/files/run/repl-implicits-nopredef.check
new file mode 100644
index 0000000000..a849801bb4
--- /dev/null
+++ b/test/files/run/repl-implicits-nopredef.check
@@ -0,0 +1,5 @@
+
+scala> :implicits
+No implicits have been imported.
+
+scala> :quit \ No newline at end of file
diff --git a/test/files/run/repl-implicits-nopredef.scala b/test/files/run/repl-implicits-nopredef.scala
new file mode 100644
index 0000000000..8a451b0c52
--- /dev/null
+++ b/test/files/run/repl-implicits-nopredef.scala
@@ -0,0 +1,10 @@
+import scala.tools.partest.ReplTest
+import scala.tools.nsc.Settings
+
+object Test extends ReplTest {
+ override def transformSettings(settings: Settings): Settings = {
+ settings.nopredef.value = true
+ settings
+ }
+ def code = ":implicits"
+}
diff --git a/test/files/run/repl-implicits.check b/test/files/run/repl-implicits.check
new file mode 100644
index 0000000000..6e80cc8799
--- /dev/null
+++ b/test/files/run/repl-implicits.check
@@ -0,0 +1,5 @@
+
+scala> :implicits
+No implicits have been imported other than those in Predef.
+
+scala> :quit \ No newline at end of file
diff --git a/test/files/run/repl-implicits.scala b/test/files/run/repl-implicits.scala
new file mode 100644
index 0000000000..ca8e16e683
--- /dev/null
+++ b/test/files/run/repl-implicits.scala
@@ -0,0 +1,5 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = ":implicits"
+}
diff --git a/test/files/run/repl-javap-app.scala b/test/files/run/repl-javap-app.scala
deleted file mode 100644
index f7e3baa2a1..0000000000
--- a/test/files/run/repl-javap-app.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-
-import scala.tools.partest.ReplTest
-
-object MyApp extends App {
- Console println "Hello, delayed world."
-}
-
-object Test extends ReplTest {
- def code = ":javap -app MyApp$"
-
- override def show() = {
- val coded = "Code:"
- val strung = "String Hello, delayed world."
- val lines = eval().toList
- assert (lines.count(s => s.endsWith(coded)) == 1)
- assert (lines.count(s => s.endsWith(strung)) == 1)
- }
-}
diff --git a/test/files/run/repl-javap-def.scala b/test/files/run/repl-javap-def.scala
index dbd769613a..3994f06767 100644
--- a/test/files/run/repl-javap-def.scala
+++ b/test/files/run/repl-javap-def.scala
@@ -3,7 +3,7 @@ import scala.tools.partest.JavapTest
object Test extends JavapTest {
def code = """
|def f = 7
- |:javap -public -raw f
+ |:javap -public f
""".stripMargin
// it should find f wrapped in repl skins. replstiltskin.
diff --git a/test/files/run/repl-javap-fun.scala b/test/files/run/repl-javap-fun.scala
deleted file mode 100644
index 5c9a6b7691..0000000000
--- a/test/files/run/repl-javap-fun.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-import scala.tools.partest.JavapTest
-
-object Test extends JavapTest {
- def code = """
- |object Betty {
- | List(1,2,3) filter (_ % 2 != 0) map (_ * 2)
- |}
- |:javap -fun Betty
- """.stripMargin
-
- // two anonfuns of Betty
- override def yah(res: Seq[String]) = {
- def filtered = res filter (_ contains "public final class Betty")
- 2 == filtered.size
- }
-}
diff --git a/test/files/run/repl-javap-lambdas.scala b/test/files/run/repl-javap-lambdas.scala
deleted file mode 100644
index 76a6ec8450..0000000000
--- a/test/files/run/repl-javap-lambdas.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-import scala.tools.partest.JavapTest
-import scala.tools.nsc.Settings
-
-// see repl-javap-memfun.java for the complementary version
-object Test extends JavapTest {
- override def transformSettings(s: Settings) = { s.Ydelambdafy.value = "method" ; s }
- def code = """
- |object Betty {
- | List(1,2,3) count (_ % 2 != 0)
- | def f = List(1,2,3) filter ((x: Any) => true) map (x => "m1")
- | def g = List(1,2,3) filter ((x: Any) => true) map (x => "m1") map (x => "m2")
- |}
- |:javap -fun Betty#g
- """.stripMargin
-
- // three anonfuns of Betty#g
- override def yah(res: Seq[String]) = {
- import PartialFunction.{ cond => when }
- val r = """.*final .* .*\$anonfun\$\d+\(.*""".r
- def filtered = res filter (when(_) { case r(_*) => true })
- 3 == filtered.size
- }
-}
diff --git a/test/files/run/repl-javap-memfun.scala b/test/files/run/repl-javap-memfun.scala
deleted file mode 100644
index d10ebcb399..0000000000
--- a/test/files/run/repl-javap-memfun.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-import scala.tools.partest.JavapTest
-import scala.tools.nsc.Settings
-
-// see repl-javap-lambdas.scala for the complementary version
-object Test extends JavapTest {
- // asserting the default
- override def transformSettings(s: Settings) = { s.Ydelambdafy.value = "inline" ; s }
- def code = """
- |object Betty {
- | List(1,2,3) count (_ % 2 != 0)
- | def f = List(1,2,3) filter (_ % 2 != 0) map (_ * 2)
- | def g = List(1,2,3) filter (_ % 2 == 0) map (_ * 3) map (_ + 1)
- |}
- |:javap -fun Betty#g
- """.stripMargin
-
- // three anonfuns of Betty#g
- override def yah(res: Seq[String]) = {
- def filtered = res filter (_ contains "public final class Betty")
- 3 == filtered.size
- }
-}
diff --git a/test/files/run/repl-javap-more-fun.scala b/test/files/run/repl-javap-more-fun.scala
deleted file mode 100644
index e603faf75a..0000000000
--- a/test/files/run/repl-javap-more-fun.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-import scala.tools.partest.JavapTest
-
-object Test extends JavapTest {
- def code = """
- |object Betty {
- | val ds = List(1,2,3) filter (_ % 2 == 0) map (_ * 3)
- | def m(vs: List[Int]) = vs filter (_ % 2 != 0) map (_ * 2)
- |}
- |:javap -fun Betty
- """.stripMargin
-
- // two anonfuns of Betty
- override def yah(res: Seq[String]) = {
- def filtered = res filter (_ contains "public final class Betty")
- 4 == filtered.size
- }
-}
diff --git a/test/files/run/repl-javap-outdir-funs.flags b/test/files/run/repl-javap-outdir-funs.flags
deleted file mode 100644
index ac96850b69..0000000000
--- a/test/files/run/repl-javap-outdir-funs.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ydelambdafy:inline \ No newline at end of file
diff --git a/test/files/run/repl-javap-outdir-funs/foo_1.scala b/test/files/run/repl-javap-outdir-funs/foo_1.scala
deleted file mode 100644
index 9b98e94733..0000000000
--- a/test/files/run/repl-javap-outdir-funs/foo_1.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-
-package disktest
-
-class Foo {
- def m(vs: List[Int]) = vs map (_ + 1)
-}
diff --git a/test/files/run/repl-javap-outdir-funs/run-repl_7.scala b/test/files/run/repl-javap-outdir-funs/run-repl_7.scala
deleted file mode 100644
index af9651a8a3..0000000000
--- a/test/files/run/repl-javap-outdir-funs/run-repl_7.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-import scala.tools.partest.JavapTest
-
-object Test extends JavapTest {
- // note the '-fun': it makes :javap search for some anonfun.
- // for that reason, this test has a flags file that forces delambdafy:inline (doesn't allow :method)
- def code = """
- |:javap -fun disktest/Foo.class
- """.stripMargin
-
- override def yah(res: Seq[String]) =
- // It's currently unknown why this test fails on Avian with
- // “Failed: No anonfuns found.”, skip it for now. See SI-7630.
- if (scala.tools.partest.utils.Properties.isAvian)
- true
- else {
- val r = "public final class disktest.Foo.*extends scala.runtime.AbstractFunction1".r
- def filtered = res filter (r.findFirstIn(_).nonEmpty)
- 1 == filtered.size
- }
-}
diff --git a/test/files/run/repl-javap.scala b/test/files/run/repl-javap.scala
index 7a19852d4e..25e72f3b13 100644
--- a/test/files/run/repl-javap.scala
+++ b/test/files/run/repl-javap.scala
@@ -7,7 +7,8 @@ object Test extends JavapTest {
""".stripMargin
override def yah(res: Seq[String]) = {
- def filtered = res filter (_ contains "public class Betty")
+ val r = """public class \S*Betty""".r.unanchored
+ def filtered = res filter { case r(_*) => true ; case _ => false }
1 == filtered.size
}
}
diff --git a/test/files/run/repl-no-imports-no-predef-classbased.check b/test/files/run/repl-no-imports-no-predef-classbased.check
new file mode 100644
index 0000000000..a796600061
--- /dev/null
+++ b/test/files/run/repl-no-imports-no-predef-classbased.check
@@ -0,0 +1,23 @@
+
+scala> case class K(s: java.lang.String)
+defined class K
+
+scala> class C { implicit val k: K = K("OK?"); override def toString = "C(" + k.toString + ")" }
+defined class C
+
+scala> val c = new C
+c: C = C(K(OK?))
+
+scala> import c.k
+import c.k
+
+scala> scala.Predef.implicitly[K]
+res0: K = K(OK?)
+
+scala> val k = 42
+k: Int = 42
+
+scala> k // was K(OK?)
+res1: Int = 42
+
+scala> :quit
diff --git a/test/files/run/repl-no-imports-no-predef-classbased.scala b/test/files/run/repl-no-imports-no-predef-classbased.scala
new file mode 100644
index 0000000000..86bd07b2f2
--- /dev/null
+++ b/test/files/run/repl-no-imports-no-predef-classbased.scala
@@ -0,0 +1,19 @@
+object Test extends scala.tools.partest.ReplTest {
+
+ override def transformSettings(settings: scala.tools.nsc.Settings) = {
+ settings.noimports.value = true
+ settings.nopredef.value = true
+ settings.Yreplclassbased.value = true
+ settings
+ }
+
+ def code = """
+case class K(s: java.lang.String)
+class C { implicit val k: K = K("OK?"); override def toString = "C(" + k.toString + ")" }
+val c = new C
+import c.k
+scala.Predef.implicitly[K]
+val k = 42
+k // was K(OK?)
+"""
+}
diff --git a/test/files/run/repl-no-imports-no-predef-power.check b/test/files/run/repl-no-imports-no-predef-power.check
new file mode 100644
index 0000000000..08f614eb60
--- /dev/null
+++ b/test/files/run/repl-no-imports-no-predef-power.check
@@ -0,0 +1,29 @@
+
+scala> :power
+Power mode enabled. :phase is at typer.
+import scala.tools.nsc._, intp.global._, definitions._
+Try :help or completions for vals._ and power._
+
+scala> // guarding against "error: reference to global is ambiguous"
+
+scala> global.emptyValDef // "it is imported twice in the same scope by ..."
+warning: there was one deprecation warning (since 2.11.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
+res0: $r.global.noSelfType.type = private val _ = _
+
+scala> val tp = ArrayClass[scala.util.Random] // magic with tags
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
+tp: $r.global.Type = Array[scala.util.Random]
+
+scala> tp.memberType(Array_apply) // evidence
+res1: $r.global.Type = (i: Int)scala.util.Random
+
+scala> val m = LIT(10) // treedsl
+m: $r.treedsl.global.Literal = 10
+
+scala> typed(m).tpe // typed is in scope
+res2: $r.treedsl.global.Type = Int(10)
+
+scala> """escaping is hard, m'kah"""
+res3: String = escaping is hard, m'kah
+
+scala> :quit
diff --git a/test/files/run/repl-no-imports-no-predef-power.scala b/test/files/run/repl-no-imports-no-predef-power.scala
new file mode 100644
index 0000000000..24d4dceef2
--- /dev/null
+++ b/test/files/run/repl-no-imports-no-predef-power.scala
@@ -0,0 +1,21 @@
+object Test extends scala.tools.partest.ReplTest {
+
+ override def transformSettings(settings: scala.tools.nsc.Settings) = {
+ settings.noimports.value = true
+ settings.nopredef.value = true
+ settings
+ }
+
+ def tripleQuote(s: String) = "\"\"\"" + s + "\"\"\""
+
+ def code = s"""
+:power
+// guarding against "error: reference to global is ambiguous"
+global.emptyValDef // "it is imported twice in the same scope by ..."
+val tp = ArrayClass[scala.util.Random] // magic with tags
+tp.memberType(Array_apply) // evidence
+val m = LIT(10) // treedsl
+typed(m).tpe // typed is in scope
+${tripleQuote("escaping is hard, m'kah")}
+ """.trim
+}
diff --git a/test/files/run/repl-no-imports-no-predef.check b/test/files/run/repl-no-imports-no-predef.check
new file mode 100644
index 0000000000..7c4ee82c78
--- /dev/null
+++ b/test/files/run/repl-no-imports-no-predef.check
@@ -0,0 +1,360 @@
+
+scala> 1
+res0: Int = 1
+
+scala> 1.0
+res1: Double = 1.0
+
+scala> ()
+
+scala> "abc"
+res3: String = abc
+
+scala> (1, 2)
+res4: (Int, Int) = (1,2)
+
+scala>
+
+scala> { import scala.Predef.ArrowAssoc; 1 -> 2 }
+res5: (Int, Int) = (1,2)
+
+scala> { import scala.Predef.ArrowAssoc; 1 → 2 }
+res6: (Int, Int) = (1,2)
+
+scala> 1 -> 2
+<console>:12: error: value -> is not a member of Int
+ 1 -> 2
+ ^
+
+scala> 1 → 2
+<console>:12: error: value → is not a member of Int
+ 1 → 2
+ ^
+
+scala>
+
+scala> val answer = 42
+answer: Int = 42
+
+scala> { import scala.StringContext; s"answer: $answer" }
+res9: String = answer: 42
+
+scala> s"answer: $answer"
+<console>:13: error: not found: value StringContext
+ s"answer: $answer"
+ ^
+
+scala>
+
+scala> "abc" + true
+res11: String = abctrue
+
+scala>
+
+scala> { import scala.Predef.any2stringadd; true + "abc" }
+res12: String = trueabc
+
+scala> true + "abc"
+<console>:12: error: value + is not a member of Boolean
+ true + "abc"
+ ^
+
+scala>
+
+scala> var x = 10
+x: Int = 10
+
+scala> var y = 11
+y: Int = 11
+
+scala> x = 12
+x: Int = 12
+
+scala> y = 13
+y: Int = 13
+
+scala>
+
+scala> 2 ; 3
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 2 ;;
+ ^
+res14: Int = 3
+
+scala> { 2 ; 3 }
+<console>:12: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
+ { 2 ; 3 }
+ ^
+res15: Int = 3
+
+scala> 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+bippy = {
+ 1 +
+ 2 +
+ 3 } ; bippy+88+11
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+ ^
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+ ^
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+ ^
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+ ^
+defined object Cow
+defined class Moo
+bippy: Int
+res16: Int = 105
+
+scala>
+
+scala> object Bovine { var x: scala.List[_] = null } ; case class Ruminant(x: scala.Int) ; bippy * bippy * bippy
+defined object Bovine
+defined class Ruminant
+res17: Int = 216
+
+scala> Bovine.x = scala.List(Ruminant(5), Cow, new Moo)
+Bovine.x: List[Any] = List(Ruminant(5), Cow, Moooooo)
+
+scala> Bovine.x
+res18: List[Any] = List(Ruminant(5), Cow, Moooooo)
+
+scala>
+
+scala> (2)
+res19: Int = 2
+
+scala> (2 + 2)
+res20: Int = 4
+
+scala> ((2 + 2))
+res21: Int = 4
+
+scala> ((2 + 2))
+res22: Int = 4
+
+scala> ( (2 + 2))
+res23: Int = 4
+
+scala> ( (2 + 2 ) )
+res24: Int = 4
+
+scala> 5 ; ( (2 + 2 ) ) ; ((5))
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 5 ; ( (2 + 2 ) ) ;;
+ ^
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 5 ; ( (2 + 2 ) ) ;;
+ ^
+res25: Int = 5
+
+scala> (((2 + 2)), ((2 + 2)))
+res26: (Int, Int) = (4,4)
+
+scala> (((2 + 2)), ((2 + 2)), 2)
+res27: (Int, Int, Int) = (4,4,2)
+
+scala> (((((2 + 2)), ((2 + 2)), 2).productIterator ++ scala.Iterator(3)).mkString)
+res28: String = 4423
+
+scala>
+
+scala> 55 ; ((2 + 2)) ; (1, 2, 3)
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 55 ; ((2 + 2)) ;;
+ ^
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 55 ; ((2 + 2)) ;;
+ ^
+res29: (Int, Int, Int) = (1,2,3)
+
+scala> 55 ; (x: scala.Int) => x + 1 ; () => ((5))
+<console>:12: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 55 ; (x: scala.Int) => x + 1 ;;
+ ^
+res30: () => Int = <function0>
+
+scala>
+
+scala> () => 5
+res31: () => Int = <function0>
+
+scala> 55 ; () => 5
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
+ 55 ;;
+ ^
+res32: () => Int = <function0>
+
+scala> () => { class X ; new X }
+res33: () => AnyRef = <function0>
+
+scala>
+
+scala> def foo(x: scala.Int)(y: scala.Int)(z: scala.Int) = x+y+z
+foo: (x: Int)(y: Int)(z: Int)Int
+
+scala> foo(5)(10)(15)+foo(5)(10)(15)
+res34: Int = 60
+
+scala>
+
+scala> scala.List(1) ++ scala.List('a')
+res35: List[AnyVal] = List(1, a)
+
+scala>
+
+scala> :paste < EOF
+// Entering paste mode (EOF to finish)
+
+class C { def c = 42 }
+EOF
+
+// Exiting paste mode, now interpreting.
+
+defined class C
+
+scala> new C().c
+res36: Int = 42
+
+scala> :paste <| EOF
+// Entering paste mode (EOF to finish)
+
+class D { def d = 42 }
+EOF
+
+// Exiting paste mode, now interpreting.
+
+defined class D
+
+scala> new D().d
+res37: Int = 42
+
+scala>
+
+scala> :paste < EOF
+// Entering paste mode (EOF to finish)
+
+class Dingus
+{
+ private val x = 5
+ def y = Dingus.x * 2
+}
+object Dingus
+{
+ private val x = 55
+}
+EOF
+
+// Exiting paste mode, now interpreting.
+
+defined class Dingus
+defined object Dingus
+
+scala> val x = (new Dingus).y
+x: Int = 110
+
+scala>
+
+scala> val x1 = 1
+x1: Int = 1
+
+scala> val x2 = 2
+x2: Int = 2
+
+scala> val x3 = 3
+x3: Int = 3
+
+scala> case class BippyBungus()
+defined class BippyBungus
+
+scala> x1 + x2 + x3
+res38: Int = 6
+
+scala> :reset
+Resetting interpreter state.
+Forgetting this session history:
+
+1
+1.0
+()
+"abc"
+(1, 2)
+{ import scala.Predef.ArrowAssoc; 1 -> 2 }
+{ import scala.Predef.ArrowAssoc; 1 → 2 }
+val answer = 42
+{ import scala.StringContext; s"answer: $answer" }
+"abc" + true
+{ import scala.Predef.any2stringadd; true + "abc" }
+var x = 10
+var y = 11
+x = 12
+y = 13
+2 ; 3
+{ 2 ; 3 }
+5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+bippy = {
+ 1 +
+ 2 +
+ 3 } ; bippy+88+11
+object Bovine { var x: scala.List[_] = null } ; case class Ruminant(x: scala.Int) ; bippy * bippy * bippy
+Bovine.x = scala.List(Ruminant(5), Cow, new Moo)
+Bovine.x
+(2)
+(2 + 2)
+((2 + 2))
+ ((2 + 2))
+ ( (2 + 2))
+ ( (2 + 2 ) )
+5 ; ( (2 + 2 ) ) ; ((5))
+(((2 + 2)), ((2 + 2)))
+(((2 + 2)), ((2 + 2)), 2)
+(((((2 + 2)), ((2 + 2)), 2).productIterator ++ scala.Iterator(3)).mkString)
+55 ; ((2 + 2)) ; (1, 2, 3)
+55 ; (x: scala.Int) => x + 1 ; () => ((5))
+() => 5
+55 ; () => 5
+() => { class X ; new X }
+def foo(x: scala.Int)(y: scala.Int)(z: scala.Int) = x+y+z
+foo(5)(10)(15)+foo(5)(10)(15)
+scala.List(1) ++ scala.List('a')
+new C().c
+new D().d
+val x = (new Dingus).y
+val x1 = 1
+val x2 = 2
+val x3 = 3
+case class BippyBungus()
+x1 + x2 + x3
+
+Forgetting all expression results and named terms: $intp, BippyBungus, Bovine, Cow, Dingus, Ruminant, answer, bippy, foo, x, x1, x2, x3, y
+Forgetting defined types: BippyBungus, C, D, Dingus, Moo, Ruminant
+
+scala> x1 + x2 + x3
+<console>:12: error: not found: value x1
+ x1 + x2 + x3
+ ^
+<console>:12: error: not found: value x2
+ x1 + x2 + x3
+ ^
+<console>:12: error: not found: value x3
+ x1 + x2 + x3
+ ^
+
+scala> val x1 = 4
+x1: Int = 4
+
+scala> new BippyBungus
+<console>:12: error: not found: type BippyBungus
+ new BippyBungus
+ ^
+
+scala> class BippyBungus() { def f = 5 }
+defined class BippyBungus
+
+scala> { new BippyBungus ; x1 }
+res2: Int = 4
+
+scala> :quit
diff --git a/test/files/run/repl-no-imports-no-predef.scala b/test/files/run/repl-no-imports-no-predef.scala
new file mode 100644
index 0000000000..39f43c534d
--- /dev/null
+++ b/test/files/run/repl-no-imports-no-predef.scala
@@ -0,0 +1,108 @@
+object Test extends scala.tools.partest.ReplTest {
+
+ override def transformSettings(settings: scala.tools.nsc.Settings) = {
+ settings.noimports.value = true
+ settings.nopredef.value = true
+ settings
+ }
+
+ // replace indylambda function names by <function0>
+ override def normalize(s: String) = """\$\$Lambda.*""".r.replaceAllIn(s, "<function0>")
+
+ def code = """
+1
+1.0
+()
+"abc"
+(1, 2)
+
+{ import scala.Predef.ArrowAssoc; 1 -> 2 }
+{ import scala.Predef.ArrowAssoc; 1 → 2 }
+1 -> 2
+1 → 2
+
+val answer = 42
+{ import scala.StringContext; s"answer: $answer" }
+s"answer: $answer"
+
+"abc" + true
+
+{ import scala.Predef.any2stringadd; true + "abc" }
+true + "abc"
+
+var x = 10
+var y = 11
+x = 12
+y = 13
+
+2 ; 3
+{ 2 ; 3 }
+5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def
+bippy = {
+ 1 +
+ 2 +
+ 3 } ; bippy+88+11
+
+object Bovine { var x: scala.List[_] = null } ; case class Ruminant(x: scala.Int) ; bippy * bippy * bippy
+Bovine.x = scala.List(Ruminant(5), Cow, new Moo)
+Bovine.x
+
+(2)
+(2 + 2)
+((2 + 2))
+ ((2 + 2))
+ ( (2 + 2))
+ ( (2 + 2 ) )
+5 ; ( (2 + 2 ) ) ; ((5))
+(((2 + 2)), ((2 + 2)))
+(((2 + 2)), ((2 + 2)), 2)
+(((((2 + 2)), ((2 + 2)), 2).productIterator ++ scala.Iterator(3)).mkString)
+
+55 ; ((2 + 2)) ; (1, 2, 3)
+55 ; (x: scala.Int) => x + 1 ; () => ((5))
+
+() => 5
+55 ; () => 5
+() => { class X ; new X }
+
+def foo(x: scala.Int)(y: scala.Int)(z: scala.Int) = x+y+z
+foo(5)(10)(15)+foo(5)(10)(15)
+
+scala.List(1) ++ scala.List('a')
+
+:paste < EOF
+class C { def c = 42 }
+EOF
+new C().c
+:paste <| EOF
+class D { def d = 42 }
+EOF
+new D().d
+
+:paste < EOF
+class Dingus
+{
+ private val x = 5
+ def y = Dingus.x * 2
+}
+object Dingus
+{
+ private val x = 55
+}
+EOF
+val x = (new Dingus).y
+
+val x1 = 1
+val x2 = 2
+val x3 = 3
+case class BippyBungus()
+x1 + x2 + x3
+:reset
+x1 + x2 + x3
+val x1 = 4
+new BippyBungus
+class BippyBungus() { def f = 5 }
+{ new BippyBungus ; x1 }
+
+"""
+}
diff --git a/test/files/run/repl-parens.check b/test/files/run/repl-parens.check
index 6516f4ea90..477d4d462f 100644
--- a/test/files/run/repl-parens.check
+++ b/test/files/run/repl-parens.check
@@ -18,10 +18,10 @@ scala> ( (2 + 2 ) )
res5: Int = 4
scala> 5 ; ( (2 + 2 ) ) ; ((5))
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; ( (2 + 2 ) ) ;;
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; ( (2 + 2 ) ) ;;
^
res6: Int = 5
@@ -38,16 +38,16 @@ res9: String = 4423
scala>
scala> 55 ; ((2 + 2)) ; (1, 2, 3)
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ; ((2 + 2)) ;;
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ; ((2 + 2)) ;;
^
res10: (Int, Int, Int) = (1,2,3)
scala> 55 ; (x: Int) => x + 1 ; () => ((5))
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ; (x: Int) => x + 1 ;;
^
res11: () => Int = <function0>
@@ -58,7 +58,7 @@ scala> () => 5
res12: () => Int = <function0>
scala> 55 ; () => 5
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ;;
^
res13: () => Int = <function0>
diff --git a/test/files/run/repl-parens.scala b/test/files/run/repl-parens.scala
index e25933b1a2..613bb6f6af 100644
--- a/test/files/run/repl-parens.scala
+++ b/test/files/run/repl-parens.scala
@@ -1,6 +1,9 @@
import scala.tools.partest.ReplTest
object Test extends ReplTest {
+ // replace indylambda function names by <function0>
+ override def normalize(s: String) = """\$\$Lambda.*""".r.replaceAllIn(s, "<function0>")
+
def code = """
(2)
(2 + 2)
diff --git a/test/files/run/repl-paste-b.check b/test/files/run/repl-paste-b.check
new file mode 100644
index 0000000000..2e205d48d6
--- /dev/null
+++ b/test/files/run/repl-paste-b.check
@@ -0,0 +1,14 @@
+
+scala> :paste < EOF
+// Entering paste mode (EOF to finish)
+
+object X
+EOF
+
+// Exiting paste mode, now interpreting.
+
+defined object X
+
+scala> assert(X.getClass.getName.contains("line"))
+
+scala> :quit
diff --git a/test/files/run/repl-paste-b.scala b/test/files/run/repl-paste-b.scala
new file mode 100644
index 0000000000..718f7d9e17
--- /dev/null
+++ b/test/files/run/repl-paste-b.scala
@@ -0,0 +1,13 @@
+import scala.tools.partest.ReplTest
+
+// confirm X not in empty package
+object Test extends ReplTest {
+ def code =
+ """
+:paste < EOF
+object X
+EOF
+assert(X.getClass.getName.contains("line"))
+"""
+
+}
diff --git a/test/files/run/repl-paste-raw-b.pastie b/test/files/run/repl-paste-raw-b.pastie
new file mode 100644
index 0000000000..f13b4bcf8b
--- /dev/null
+++ b/test/files/run/repl-paste-raw-b.pastie
@@ -0,0 +1,8 @@
+
+// a raw paste is not a script
+// hence it can be packaged
+
+package brown_paper
+
+// these are a few of my favorite things
+case class Gift (hasString: Boolean)
diff --git a/test/files/run/repl-paste-raw-b.scala b/test/files/run/repl-paste-raw-b.scala
new file mode 100644
index 0000000000..d1c7692f2f
--- /dev/null
+++ b/test/files/run/repl-paste-raw-b.scala
@@ -0,0 +1,18 @@
+
+import scala.tools.partest.SessionTest
+
+object Test extends SessionTest {
+ def session =
+s"""|
+ |scala> :paste $pastie
+ |Pasting file $pastie...
+ |
+ |scala> val favoriteThing = brown_paper.Gift(true)
+ |favoriteThing: brown_paper.Gift = Gift(true)
+ |
+ |scala> favoriteThing.hasString
+ |res0: Boolean = true
+ |
+ |scala> :quit"""
+ def pastie = testPath changeExtension "pastie"
+}
diff --git a/test/files/run/repl-paste-raw-c.pastie b/test/files/run/repl-paste-raw-c.pastie
new file mode 100644
index 0000000000..364d8cef4b
--- /dev/null
+++ b/test/files/run/repl-paste-raw-c.pastie
@@ -0,0 +1,5 @@
+
+// not actually a candidate for raw paste
+
+val nope = 42
+
diff --git a/test/files/run/repl-paste-raw-c.scala b/test/files/run/repl-paste-raw-c.scala
new file mode 100644
index 0000000000..600ac4d2f0
--- /dev/null
+++ b/test/files/run/repl-paste-raw-c.scala
@@ -0,0 +1,16 @@
+
+import scala.tools.partest.SessionTest
+
+object Test extends SessionTest {
+ def session =
+s"""|
+ |scala> :paste -raw $pastie
+ |Pasting file $pastie...
+ |$pastie:3: error: expected class or object definition
+ |val nope = 42
+ |^
+ |There were compilation errors!
+ |
+ |scala> :quit"""
+ def pastie = testPath changeExtension "pastie"
+}
diff --git a/test/files/run/repl-paste-raw.pastie b/test/files/run/repl-paste-raw.pastie
index f13b4bcf8b..a4a570aaa2 100644
--- a/test/files/run/repl-paste-raw.pastie
+++ b/test/files/run/repl-paste-raw.pastie
@@ -1,8 +1,8 @@
+package brown_paper
+
// a raw paste is not a script
// hence it can be packaged
-package brown_paper
-
// these are a few of my favorite things
case class Gift (hasString: Boolean)
diff --git a/test/files/run/repl-paste-raw.scala b/test/files/run/repl-paste-raw.scala
index 9bd5e8e63e..d1c7692f2f 100644
--- a/test/files/run/repl-paste-raw.scala
+++ b/test/files/run/repl-paste-raw.scala
@@ -4,7 +4,7 @@ import scala.tools.partest.SessionTest
object Test extends SessionTest {
def session =
s"""|
- |scala> :paste -raw $pastie
+ |scala> :paste $pastie
|Pasting file $pastie...
|
|scala> val favoriteThing = brown_paper.Gift(true)
diff --git a/test/files/run/repl-power.check b/test/files/run/repl-power.check
index 0d4a30b8e3..08f614eb60 100644
--- a/test/files/run/repl-power.check
+++ b/test/files/run/repl-power.check
@@ -7,11 +7,11 @@ Try :help or completions for vals._ and power._
scala> // guarding against "error: reference to global is ambiguous"
scala> global.emptyValDef // "it is imported twice in the same scope by ..."
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
res0: $r.global.noSelfType.type = private val _ = _
scala> val tp = ArrayClass[scala.util.Random] // magic with tags
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
tp: $r.global.Type = Array[scala.util.Random]
scala> tp.memberType(Array_apply) // evidence
diff --git a/test/files/run/repl-serialization.scala b/test/files/run/repl-serialization.scala
index 55b7519631..8bc0dd3a8b 100644
--- a/test/files/run/repl-serialization.scala
+++ b/test/files/run/repl-serialization.scala
@@ -36,7 +36,7 @@ object Test {
|extract(() => new AA(x + getX() + y + z + zz + O.apply + u.x))
""".stripMargin
- imain = new IMain(settings)
+ imain = IMain(settings)
println("== evaluating lines")
imain.directBind("extract", "(AnyRef => Unit)", extract)
code.lines.foreach(imain.interpret)
diff --git a/test/files/run/richs.check b/test/files/run/richs.check
index cf265ae007..97b032393c 100644
--- a/test/files/run/richs.check
+++ b/test/files/run/richs.check
@@ -1,4 +1,4 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
RichCharTest1:
true
diff --git a/test/files/run/run-bug4840.flags b/test/files/run/run-bug4840.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/run/run-bug4840.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/run/runtime.scala b/test/files/run/runtime.scala
index 89348b294d..468a80fc0c 100644
--- a/test/files/run/runtime.scala
+++ b/test/files/run/runtime.scala
@@ -73,7 +73,7 @@ object Test1Test {
// {System.out.print(22); test1.bar}.System.out.println();
{Console.print(23); test1.bar.System}.out.println();
{Console.print(24); test1.bar.System.out}.println();
- {Console.print(25); test1.bar.System.out.println:(() => Unit)} apply ();
+ {Console.print(25); test1.bar.System.out.println _ : (() => Unit)} apply ();
{Console.print(26); test1.bar.System.out.println()};
}
diff --git a/test/files/run/sammy_after_implicit_view.scala b/test/files/run/sammy_after_implicit_view.scala
new file mode 100644
index 0000000000..a13a71e562
--- /dev/null
+++ b/test/files/run/sammy_after_implicit_view.scala
@@ -0,0 +1,28 @@
+trait MySam { def apply(x: Int): String }
+
+// check that SAM conversion happens after implicit view application
+object Test extends App {
+ final val AnonFunClass = "$anon$"
+ final val LMFClass = "$$Lambda$" // LambdaMetaFactory names classes like this
+
+ // if there's an implicit conversion, it does not takes precedence (because that's what dotty does)
+ def implicitSam() = {
+ import language.implicitConversions
+ var ok = true
+ implicit def fun2sam(fun: Int => String): MySam = { ok = false; new MySam { def apply(x: Int) = fun(x) } }
+ val className = (((x: Int) => x.toString): MySam).getClass.toString
+ assert(ok, "implicit conversion not called")
+ assert(!(className contains AnonFunClass), className)
+ assert(className contains LMFClass, className)
+ }
+
+ // indirectly check that this sam type instance was created from a class spun up by LambdaMetaFactory
+ def justSammy() = {
+ val className = (((x: Int) => x.toString): MySam).getClass.toString
+ assert(!(className contains AnonFunClass), className)
+ assert(className contains LMFClass, className)
+ }
+
+ implicitSam()
+ justSammy()
+}
diff --git a/test/files/run/sammy_cbn.scala b/test/files/run/sammy_cbn.scala
new file mode 100644
index 0000000000..b84b2fd8e5
--- /dev/null
+++ b/test/files/run/sammy_cbn.scala
@@ -0,0 +1,9 @@
+trait F0[T] { def apply(): T }
+
+object Test extends App {
+ def delay[T](v: => T) = (v _): F0[T]
+
+ // should not fail with ClassCastException: $$Lambda$6279/897871870 cannot be cast to F0
+ // (also, should not say boe!)
+ delay(println("boe!"))
+}
diff --git a/test/files/run/sammy_erasure_cce.scala b/test/files/run/sammy_erasure_cce.scala
new file mode 100644
index 0000000000..fb973befe4
--- /dev/null
+++ b/test/files/run/sammy_erasure_cce.scala
@@ -0,0 +1,22 @@
+trait F1 {
+ def apply(a: List[String]): String
+ def f1 = "f1"
+}
+
+object Test extends App {
+ // Wrap the sam-targeting function in a context where the expected type is erased (identity's argument type erases to Object),
+ // so that Erasure can't tell that the types actually conform by looking only
+ // at an un-adorned Function tree and the expected type
+ // (because a function type needs no cast it the expected type is a SAM type),
+ //
+ // A correct implementation of Typers/Erasure tracks a Function's SAM target type directly
+ // (currently using an attachment for backwards compat),
+ // and not in the expected type (which was the case in my first attempt),
+ // as the expected type may lose its SAM status due to erasure.
+ // (In a sense, this need not be so, but erasure drops type parameters,
+ // so that identity's F1 type argument cannot be propagated to its argument type.)
+ def foo = identity[F1]((as: List[String]) => as.head)
+
+ // check that this doesn't CCE's
+ foo.f1
+}
diff --git a/test/files/run/sammy_java8.flags b/test/files/run/sammy_java8.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/run/sammy_java8.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/run/sammy_repeated.flags b/test/files/run/sammy_repeated.flags
deleted file mode 100644
index e1b37447c9..0000000000
--- a/test/files/run/sammy_repeated.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental \ No newline at end of file
diff --git a/test/files/run/sammy_repeated.scala b/test/files/run/sammy_repeated.scala
deleted file mode 100644
index c24dc41909..0000000000
--- a/test/files/run/sammy_repeated.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-trait RepeatedSink { def accept(a: Any*): Unit }
-
-object Test {
- def main(args: Array[String]): Unit = {
- val f: RepeatedSink = (a) => println(a)
- f.accept(1)
- }
-} \ No newline at end of file
diff --git a/test/files/run/sammy_restrictions_LMF.check b/test/files/run/sammy_restrictions_LMF.check
new file mode 100644
index 0000000000..6ed281c757
--- /dev/null
+++ b/test/files/run/sammy_restrictions_LMF.check
@@ -0,0 +1,2 @@
+1
+1
diff --git a/test/files/run/sammy_restrictions_LMF.scala b/test/files/run/sammy_restrictions_LMF.scala
new file mode 100644
index 0000000000..aa49e14113
--- /dev/null
+++ b/test/files/run/sammy_restrictions_LMF.scala
@@ -0,0 +1,57 @@
+trait T[@specialized A] { def apply(a: A): A }
+trait TInt extends T[Int]
+
+trait TWithVal { val x: Any = 1; def apply(x: Int): String }
+
+trait TImpure { def apply(x: Int): String ; println(1) }
+
+trait Println { println(1) }
+trait TImpureSuper extends Println { def apply(x: Int): String }
+
+class C
+trait A extends C
+trait B extends A
+trait TClassParent extends B { def apply(x: Int): String }
+
+object Test extends App {
+ final val AnonFunClass = "$anonfun$"
+ final val LMFClass = "$$Lambda$" // LambdaMetaFactory names classes like this
+
+ private def LMF(f: Any): Unit = {
+ val className = f.getClass.toString
+ assert(!(className contains AnonFunClass), className)
+ assert((className contains LMFClass), className)
+ }
+
+ private def notLMF(f: Any): Unit = {
+ val className = f.getClass.toString
+ assert((className contains AnonFunClass), className)
+ assert(!(className contains LMFClass), className)
+ }
+
+ // Check that we expand the SAM of a type that is specialized.
+ // This is an implementation restriction -- the current specialization scheme is not
+ // amenable to using LambdaMetaFactory to spin up subclasses.
+ // Since the generic method is abstract, and the specialized ones are concrete,
+ // specialization is rendered moot because we cannot implement the specialized method
+ // with the lambda using LMF.
+
+ // not LMF if specialized at this type
+ notLMF((x => x): T[Int])
+ // not LMF if specialized at this type (via subclass)
+ notLMF((x => x): TInt)
+ // LMF ok if not specialized at this type
+ LMF((x => x): T[String])
+
+ // traits with a val member also cannot be instantiated by LMF
+ val fVal: TWithVal = (x => "a")
+ notLMF(fVal)
+ assert(fVal.x == 1)
+
+ notLMF((x => "a"): TImpure)
+ notLMF((x => "a"): TImpureSuper)
+
+ val fClassParent: TClassParent = x => "a"
+ notLMF(fClassParent)
+ assert(fClassParent(1) == "a")
+}
diff --git a/test/files/run/sammy_return.scala b/test/files/run/sammy_return.scala
new file mode 100644
index 0000000000..e959619dd1
--- /dev/null
+++ b/test/files/run/sammy_return.scala
@@ -0,0 +1,14 @@
+trait Fun[A, B] { def apply(a: A): B }
+class PF[A, B] { def runWith[U](action: Fun[B, U]): Fun[A, Boolean] = a => {action(a.asInstanceOf[B]); true} }
+
+class TO[A](x: A) {
+ def foreach[U](f: Fun[A, U]): U = f(x)
+ def collectFirst[B](pf: PF[A, B]): Option[B] = {
+ foreach(pf.runWith(b => return Some(b)))
+ None
+ }
+}
+
+object Test extends App {
+ assert(new TO("a").collectFirst(new PF[String, String]).get == "a")
+} \ No newline at end of file
diff --git a/test/files/run/sammy_seriazable.scala b/test/files/run/sammy_seriazable.scala
new file mode 100644
index 0000000000..458b99238a
--- /dev/null
+++ b/test/files/run/sammy_seriazable.scala
@@ -0,0 +1,47 @@
+import java.io._
+
+trait NotSerializableInterface { def apply(a: Any): Any }
+abstract class NotSerializableClass { def apply(a: Any): Any }
+// SAM type that supports lambdas-as-invoke-dynamic
+trait IsSerializableInterface extends java.io.Serializable { def apply(a: Any): Any }
+// SAM type that still requires lambdas-as-anonhmous-classes
+abstract class IsSerializableClass extends java.io.Serializable { def apply(a: Any): Any }
+
+object Test {
+ def main(args: Array[String]) {
+ val nsi: NotSerializableInterface = x => x
+ val nsc: NotSerializableClass = x => x
+
+ import SerDes._
+ assertNotSerializable(nsi)
+ assertNotSerializable(nsc)
+ assert(serializeDeserialize[IsSerializableInterface](x => x).apply("foo") == "foo")
+ assert(serializeDeserialize[IsSerializableClass](x => x).apply("foo") == "foo")
+ assert(ObjectStreamClass.lookup(((x => x): IsSerializableClass).getClass).getSerialVersionUID == 0)
+ }
+}
+
+object SerDes {
+ def assertNotSerializable(a: AnyRef): Unit = {
+ try {
+ serialize(a)
+ assert(false)
+ } catch {
+ case _: NotSerializableException => // okay
+ }
+ }
+
+ def serialize(obj: AnyRef): Array[Byte] = {
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ buffer.toByteArray
+ }
+
+ def deserialize(a: Array[Byte]): AnyRef = {
+ val in = new ObjectInputStream(new ByteArrayInputStream(a))
+ in.readObject
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T) = deserialize(serialize(obj)).asInstanceOf[T]
+}
diff --git a/test/files/run/sammy_repeated.check b/test/files/run/sammy_vararg_cbn.check
index 1cff0f067c..1cff0f067c 100644
--- a/test/files/run/sammy_repeated.check
+++ b/test/files/run/sammy_vararg_cbn.check
diff --git a/test/files/run/sammy_vararg_cbn.scala b/test/files/run/sammy_vararg_cbn.scala
new file mode 100644
index 0000000000..e5b49498ea
--- /dev/null
+++ b/test/files/run/sammy_vararg_cbn.scala
@@ -0,0 +1,12 @@
+trait SamRepeated { def accept(a: Any*): Unit }
+trait SamByName { def accept(a: => Any): (Any, Any) }
+
+object Test extends App {
+ val rep: SamRepeated = (a) => println(a)
+ rep.accept(1)
+
+ val nam: SamByName = (a) => (a, a)
+ var v = 0
+ assert(nam.accept({v += 1; v}) == (1, 2))
+ assert(v == 2, "by name arg should be evaluated twice")
+}
diff --git a/test/files/run/sbt-icode-interface.check b/test/files/run/sbt-icode-interface.check
new file mode 100644
index 0000000000..7421f077f6
--- /dev/null
+++ b/test/files/run/sbt-icode-interface.check
@@ -0,0 +1 @@
+warning: there was one deprecation warning (since 2.12.0); re-run with -deprecation for details
diff --git a/test/files/run/sbt-icode-interface.scala b/test/files/run/sbt-icode-interface.scala
index 84d38cc65a..7cd2de5c00 100644
--- a/test/files/run/sbt-icode-interface.scala
+++ b/test/files/run/sbt-icode-interface.scala
@@ -9,34 +9,32 @@ object Test extends DirectTest {
""".trim
def show() {
- for (b <- List("GenASM", "GenBCode")) {
- val global = newCompiler("-usejavacp", s"-Ybackend:$b")
- import global._
- val r = new Run
- r.compileSources(newSourceFile(code) :: Nil)
-
- val results = collection.mutable.Buffer[(Boolean, String)]()
+ val global = newCompiler("-usejavacp")
+ import global._
+ val r = new Run
+ r.compileSources(newSourceFile(code) :: Nil)
- // Nailing down defacto compiler API from SBT's usage
- // https://github.com/sbt/sbt/blob/adb41611cf73260938274915d8462d924df200c8/compile/interface/src/main/scala/xsbt/Analyzer.scala#L29-L41
- def isTopLevelModule(sym: Symbol) = sym.isTopLevel && sym.isModule
- for (unit <- currentRun.units if !unit.isJava) {
- val sourceFile = unit.source.file.file
- for (iclass <- unit.icode) {
- val sym = iclass.symbol
- def addGenerated(separatorRequired: Boolean) {
- results += (separatorRequired -> sym.fullName)
- }
- if (sym.isModuleClass && !sym.isImplClass) {
- if (isTopLevelModule(sym) && sym.companionClass == NoSymbol)
- addGenerated(false)
- addGenerated(true)
- } else
- addGenerated(false)
+ val results = collection.mutable.Buffer[(Boolean, String)]()
+
+ // Nailing down defacto compiler API from SBT's usage
+ // https://github.com/sbt/sbt/blob/adb41611cf73260938274915d8462d924df200c8/compile/interface/src/main/scala/xsbt/Analyzer.scala#L29-L41
+ def isTopLevelModule(sym: Symbol) = sym.isTopLevel && sym.isModule
+ for (unit <- currentRun.units if !unit.isJava) {
+ val sourceFile = unit.source.file.file
+ for (iclass <- unit.icode) {
+ val sym = iclass.symbol
+ def addGenerated(separatorRequired: Boolean) {
+ results += (separatorRequired -> sym.fullName)
}
+ if (sym.isModuleClass && !sym.isImplClass) {
+ if (isTopLevelModule(sym) && sym.companionClass == NoSymbol)
+ addGenerated(false)
+ addGenerated(true)
+ } else
+ addGenerated(false)
}
- val expected = List((false, "C"), (true, "O"), (false, "C$D"))
- assert(results.toList == expected, b + ": " + results.toList)
}
+ val expected = List((false, "C"), (true, "O"), (false, "C$D"))
+ assert(results.toList == expected, s"expected: $expected, actual: ${results.toList}")
}
}
diff --git a/test/files/run/sd167.check b/test/files/run/sd167.check
new file mode 100644
index 0000000000..587be6b4c3
--- /dev/null
+++ b/test/files/run/sd167.check
@@ -0,0 +1 @@
+x
diff --git a/test/files/run/sd167.scala b/test/files/run/sd167.scala
new file mode 100644
index 0000000000..5095e772ad
--- /dev/null
+++ b/test/files/run/sd167.scala
@@ -0,0 +1,8 @@
+object Test {
+ implicit class ToExtractor(val s: StringContext) {
+ def x = {println("x"); Some }
+ }
+ def main(args: Array[String]) {
+ Some(1) match { case x"${a}" => } // used to convert to `case Some(a) =>` and omit side effects
+ }
+}
diff --git a/test/files/run/sd242.scala b/test/files/run/sd242.scala
new file mode 100644
index 0000000000..acd51ec893
--- /dev/null
+++ b/test/files/run/sd242.scala
@@ -0,0 +1,13 @@
+trait T {
+ def test: Unit = {
+ byName("".toString)
+ ()
+ }
+
+ @inline
+ final def byName(action: => Unit) = action
+}
+
+object Test extends App {
+ (new T {}).test
+}
diff --git a/test/files/run/showdecl.check b/test/files/run/showdecl.check
index b8d7f94c57..d431c36f6d 100644
--- a/test/files/run/showdecl.check
+++ b/test/files/run/showdecl.check
@@ -8,7 +8,7 @@ initialized y: lazy val y: Int
uninitialized z: def z: <?>
initialized z: def z: Int
uninitialized t: def t: <?>
-initialized t: def t[T <: Int](x: D)(y: x.W): Int
+initialized t: def t[T <: <?>](x: D)(y: x.W): Int
uninitialized W: type W = String
initialized W: type W = String
uninitialized C: class C extends
diff --git a/test/files/run/showdecl/Macros_1.scala b/test/files/run/showdecl/Macros_1.scala
index c68dd275de..89b8e8d3c2 100644
--- a/test/files/run/showdecl/Macros_1.scala
+++ b/test/files/run/showdecl/Macros_1.scala
@@ -9,7 +9,7 @@ object Macros {
import c.universe._
def test(sym: Symbol): Unit = {
println(s"uninitialized ${sym.name}: ${showDecl(sym)}")
- sym.info
+ sym.info // NOTE: not fullyInitializeSymbol, so some parts may still be LazyTypes
println(s"initialized ${sym.name}: ${showDecl(sym)}")
}
diff --git a/test/files/run/showraw_mods.check b/test/files/run/showraw_mods.check
index 4d34160422..5afd7a438f 100644
--- a/test/files/run/showraw_mods.check
+++ b/test/files/run/showraw_mods.check
@@ -1 +1 @@
-Block(List(ClassDef(Modifiers(ABSTRACT | DEFAULTPARAM/TRAIT), TypeName("C"), List(), Template(List(Ident(TypeName("AnyRef"))), noSelfType, List(DefDef(Modifiers(), TermName("$init$"), List(), List(List()), TypeTree(), Block(List(), Literal(Constant(())))), ValDef(Modifiers(PRIVATE | LOCAL), TermName("x"), TypeTree(), Literal(Constant(2))), ValDef(Modifiers(MUTABLE), TermName("y"), TypeTree(), Select(This(TypeName("C")), TermName("x"))), ValDef(Modifiers(LAZY), TermName("z"), TypeTree(), Select(This(TypeName("C")), TermName("y"))))))), Literal(Constant(())))
+Block(List(ClassDef(Modifiers(ABSTRACT | DEFAULTPARAM/TRAIT), TypeName("C"), List(), Template(List(Ident(TypeName("AnyRef"))), noSelfType, List(DefDef(Modifiers(), TermName("$init$"), List(), List(List()), TypeTree(), Block(List(), Literal(Constant(())))), ValDef(Modifiers(PRIVATE | LOCAL), TermName("x"), TypeTree(), Literal(Constant(2))), ValDef(Modifiers(MUTABLE), TermName("y"), TypeTree(), Select(This(TypeName("C")), TermName("x"))), DefDef(Modifiers(METHOD | ACCESSOR), TermName("y_$eq"), List(), List(List(ValDef(Modifiers(PARAM | SYNTHETIC), TermName("x$1"), TypeTree(), EmptyTree))), TypeTree(), EmptyTree), ValDef(Modifiers(LAZY), TermName("z"), TypeTree(), Select(This(TypeName("C")), TermName("y"))))))), Literal(Constant(())))
diff --git a/test/files/run/showraw_tree_types_ids.check b/test/files/run/showraw_tree_types_ids.check
index 75347463cb..e122148040 100644
--- a/test/files/run/showraw_tree_types_ids.check
+++ b/test/files/run/showraw_tree_types_ids.check
@@ -4,9 +4,9 @@ Apply[1](Select[2](New[1](TypeTree[1]().setOriginal(AppliedTypeTree(Ident[3](sca
[3] TypeRef(ThisType(scala.collection.immutable#<id>), scala.collection.immutable.HashMap#<id>, List())
[4] TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List())
[5] SingleType(ThisType(scala#<id>), scala.Predef#<id>)
-Apply[6](Select[7](New[6](TypeTree[6]().setOriginal(AppliedTypeTree(Ident[8](scala.collection.mutable.HashMap#<id>), List(TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>), TypeName("String")#<id>)), TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>), TypeName("String")#<id>)))))), termNames.CONSTRUCTOR#<id>), List())
+Apply[1](Select[2](New[1](TypeTree[1]().setOriginal(AppliedTypeTree(Ident[3](scala.collection.mutable.HashMap#<id>), List(TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>), TypeName("String")#<id>)), TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>), TypeName("String")#<id>)))))), termNames.CONSTRUCTOR#<id>), List())
+[1] TypeRef(ThisType(scala.collection.mutable#<id>), scala.collection.mutable.HashMap#<id>, List(TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List()), TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List())))
+[2] MethodType(List(), TypeRef(ThisType(scala.collection.mutable#<id>), scala.collection.mutable.HashMap#<id>, List(TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List()), TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List()))))
+[3] TypeRef(ThisType(scala.collection.mutable#<id>), scala.collection.mutable.HashMap#<id>, List())
[4] TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List())
[5] SingleType(ThisType(scala#<id>), scala.Predef#<id>)
-[6] TypeRef(ThisType(scala.collection.mutable#<id>), scala.collection.mutable.HashMap#<id>, List(TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List()), TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List())))
-[7] MethodType(List(), TypeRef(ThisType(scala.collection.mutable#<id>), scala.collection.mutable.HashMap#<id>, List(TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List()), TypeRef(SingleType(ThisType(scala#<id>), scala.Predef#<id>), TypeName("String")#<id>, List()))))
-[8] TypeRef(ThisType(scala.collection.mutable#<id>), scala.collection.mutable.HashMap#<id>, List())
diff --git a/test/files/run/showraw_tree_types_typed.check b/test/files/run/showraw_tree_types_typed.check
index de691e369e..4934ed41dc 100644
--- a/test/files/run/showraw_tree_types_typed.check
+++ b/test/files/run/showraw_tree_types_typed.check
@@ -4,9 +4,9 @@ Apply[1](Select[2](New[1](TypeTree[1]().setOriginal(AppliedTypeTree(Ident[3](sca
[3] TypeRef(ThisType(scala.collection.immutable), scala.collection.immutable.HashMap, List())
[4] TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List())
[5] SingleType(ThisType(scala), scala.Predef)
-Apply[6](Select[7](New[6](TypeTree[6]().setOriginal(AppliedTypeTree(Ident[8](scala.collection.mutable.HashMap), List(TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef), TypeName("String"))), TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef), TypeName("String"))))))), termNames.CONSTRUCTOR), List())
+Apply[1](Select[2](New[1](TypeTree[1]().setOriginal(AppliedTypeTree(Ident[3](scala.collection.mutable.HashMap), List(TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef), TypeName("String"))), TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef), TypeName("String"))))))), termNames.CONSTRUCTOR), List())
+[1] TypeRef(ThisType(scala.collection.mutable), scala.collection.mutable.HashMap, List(TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List()), TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List())))
+[2] MethodType(List(), TypeRef(ThisType(scala.collection.mutable), scala.collection.mutable.HashMap, List(TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List()), TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List()))))
+[3] TypeRef(ThisType(scala.collection.mutable), scala.collection.mutable.HashMap, List())
[4] TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List())
[5] SingleType(ThisType(scala), scala.Predef)
-[6] TypeRef(ThisType(scala.collection.mutable), scala.collection.mutable.HashMap, List(TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List()), TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List())))
-[7] MethodType(List(), TypeRef(ThisType(scala.collection.mutable), scala.collection.mutable.HashMap, List(TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List()), TypeRef(SingleType(ThisType(scala), scala.Predef), TypeName("String"), List()))))
-[8] TypeRef(ThisType(scala.collection.mutable), scala.collection.mutable.HashMap, List())
diff --git a/test/files/run/showraw_tree_ultimate.check b/test/files/run/showraw_tree_ultimate.check
index 81efcc05ab..b94d568a75 100644
--- a/test/files/run/showraw_tree_ultimate.check
+++ b/test/files/run/showraw_tree_ultimate.check
@@ -4,9 +4,9 @@ Apply[1](Select[2](New[1](TypeTree[1]().setOriginal(AppliedTypeTree(Ident[3](sca
[3] TypeRef(ThisType(scala.collection.immutable#<id>#PKC), scala.collection.immutable.HashMap#<id>#CLS, List())
[4] TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List())
[5] SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD)
-Apply[6](Select[7](New[6](TypeTree[6]().setOriginal(AppliedTypeTree(Ident[8](scala.collection.mutable.HashMap#<id>#CLS), List(TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE)), TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE)))))), termNames.CONSTRUCTOR#<id>#CTOR), List())
+Apply[1](Select[2](New[1](TypeTree[1]().setOriginal(AppliedTypeTree(Ident[3](scala.collection.mutable.HashMap#<id>#CLS), List(TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE)), TypeTree[4]().setOriginal(Select[4](Ident[5](scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE)))))), termNames.CONSTRUCTOR#<id>#CTOR), List())
+[1] TypeRef(ThisType(scala.collection.mutable#<id>#PKC), scala.collection.mutable.HashMap#<id>#CLS, List(TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List()), TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List())))
+[2] MethodType(List(), TypeRef(ThisType(scala.collection.mutable#<id>#PKC), scala.collection.mutable.HashMap#<id>#CLS, List(TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List()), TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List()))))
+[3] TypeRef(ThisType(scala.collection.mutable#<id>#PKC), scala.collection.mutable.HashMap#<id>#CLS, List())
[4] TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List())
[5] SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD)
-[6] TypeRef(ThisType(scala.collection.mutable#<id>#PKC), scala.collection.mutable.HashMap#<id>#CLS, List(TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List()), TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List())))
-[7] MethodType(List(), TypeRef(ThisType(scala.collection.mutable#<id>#PKC), scala.collection.mutable.HashMap#<id>#CLS, List(TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List()), TypeRef(SingleType(ThisType(scala#<id>#PKC), scala.Predef#<id>#MOD), TypeName("String")#<id>#TPE, List()))))
-[8] TypeRef(ThisType(scala.collection.mutable#<id>#PKC), scala.collection.mutable.HashMap#<id>#CLS, List())
diff --git a/test/files/run/stringinterpolation_macro-run.check b/test/files/run/stringinterpolation_macro-run.check
deleted file mode 100644
index c7f46bac87..0000000000
--- a/test/files/run/stringinterpolation_macro-run.check
+++ /dev/null
@@ -1,71 +0,0 @@
-false
-false
-true
-false
-true
-FALSE
-FALSE
-TRUE
-FALSE
-TRUE
-true
-false
-null
-0
-80000000
-4c01926
-NULL
-4C01926
-null
-NULL
-Scala
-SCALA
-5
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-x
-S
-120
-120
-120
-120
-120
-120
-120
-120
-120
-120
-120
-120
- 0X4
-She is 4 feet tall.
-120
-42
-3.400000e+00
-3.400000e+00
-3.400000e+00
-3.400000e+00
-3.400000e+00
-3.400000e+00
-3.000000e+00
-3.000000e+00
-05/26/12
-05/26/12
-05/26/12
-05/26/12
-%
- mind
-------
-matter
-
-7 7 9
-7 9 9
diff --git a/test/files/run/stringinterpolation_macro-run.scala b/test/files/run/stringinterpolation_macro-run.scala
deleted file mode 100644
index ae7c0e5d7a..0000000000
--- a/test/files/run/stringinterpolation_macro-run.scala
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * filter: inliner warnings; re-run with
- */
-object Test extends App {
-
-// 'b' / 'B' (category: general)
-// -----------------------------
-println(f"${null}%b")
-println(f"${false}%b")
-println(f"${true}%b")
-println(f"${new java.lang.Boolean(false)}%b")
-println(f"${new java.lang.Boolean(true)}%b")
-
-println(f"${null}%B")
-println(f"${false}%B")
-println(f"${true}%B")
-println(f"${new java.lang.Boolean(false)}%B")
-println(f"${new java.lang.Boolean(true)}%B")
-
-implicit val stringToBoolean = java.lang.Boolean.parseBoolean(_: String)
-println(f"${"true"}%b")
-println(f"${"false"}%b")
-
-// 'h' | 'H' (category: general)
-// -----------------------------
-println(f"${null}%h")
-println(f"${0.0}%h")
-println(f"${-0.0}%h")
-println(f"${"Scala"}%h")
-
-println(f"${null}%H")
-println(f"${"Scala"}%H")
-
-// 's' | 'S' (category: general)
-// -----------------------------
-println(f"${null}%s")
-println(f"${null}%S")
-println(f"${"Scala"}%s")
-println(f"${"Scala"}%S")
-println(f"${5}")
-
-// 'c' | 'C' (category: character)
-// -------------------------------
-println(f"${120:Char}%c")
-println(f"${120:Byte}%c")
-println(f"${120:Short}%c")
-println(f"${120:Int}%c")
-println(f"${new java.lang.Character('x')}%c")
-println(f"${new java.lang.Byte(120:Byte)}%c")
-println(f"${new java.lang.Short(120:Short)}%c")
-println(f"${new java.lang.Integer(120)}%c")
-
-println(f"${'x' : java.lang.Character}%c")
-println(f"${(120:Byte) : java.lang.Byte}%c")
-println(f"${(120:Short) : java.lang.Short}%c")
-println(f"${120 : java.lang.Integer}%c")
-
-implicit val stringToChar = (x: String) => x(0)
-println(f"${"Scala"}%c")
-
-// 'd' | 'o' | 'x' | 'X' (category: integral)
-// ------------------------------------------
-println(f"${120:Byte}%d")
-println(f"${120:Short}%d")
-println(f"${120:Int}%d")
-println(f"${120:Long}%d")
-println(f"${new java.lang.Byte(120:Byte)}%d")
-println(f"${new java.lang.Short(120:Short)}%d")
-println(f"${new java.lang.Integer(120)}%d")
-println(f"${new java.lang.Long(120)}%d")
-println(f"${120 : java.lang.Integer}%d")
-println(f"${120 : java.lang.Long}%d")
-println(f"${BigInt(120)}%d")
-println(f"${new java.math.BigInteger("120")}%d")
-println(f"${4}%#10X")
-
-locally {
- val fff = new java.util.Formattable {
- def formatTo(f: java.util.Formatter, g: Int, w: Int, p: Int) = f.format("4")
- }
- println(f"She is ${fff}%#s feet tall.")
-}
-
-{
- implicit val strToShort = (s: String) => java.lang.Short.parseShort(s)
- println(f"${"120"}%d")
- implicit val strToInt = (s: String) => 42
- println(f"${"120"}%d")
-}
-
-// 'e' | 'E' | 'g' | 'G' | 'f' | 'a' | 'A' (category: floating point)
-// ------------------------------------------------------------------
-println(f"${3.4f}%e")
-println(f"${3.4}%e")
-println(f"${3.4f : java.lang.Float}%e")
-println(f"${3.4 : java.lang.Double}%e")
-println(f"${BigDecimal(3.4)}%e")
-println(f"${new java.math.BigDecimal(3.4)}%e")
-println(f"${3}%e")
-println(f"${3L}%e")
-
-// 't' | 'T' (category: date/time)
-// -------------------------------
-import java.util.Calendar
-import java.util.Locale
-val c = Calendar.getInstance(Locale.US)
-c.set(2012, Calendar.MAY, 26)
-println(f"${c}%TD")
-println(f"${c.getTime}%TD")
-println(f"${c.getTime.getTime}%TD")
-
-implicit val strToDate = (x: String) => c
-println(f"""${"1234"}%TD""")
-
-
-// literals and arg indexes
-println(f"%%")
-println(f" mind%n------%nmatter%n")
-println(f"${7}%d %<d ${9}%d")
-println(f"${7}%d %2$$d ${9}%d")
-
-}
diff --git a/test/files/run/synchronized.check b/test/files/run/synchronized.check
index dd9f4ef424..a7d75fa673 100644
--- a/test/files/run/synchronized.check
+++ b/test/files/run/synchronized.check
@@ -62,67 +62,67 @@
|.... O1.O.gi: OK
|...... O1.O.gv: OK
|...... O1.O.gf: OK
- .|..... c2.f1: OK
- .|..... c2.fi: OK
- .|....... c2.fv: OK
- .|....... c2.ff: OK
- .|..... c2.fl: OK
- .|....... c2.fo: OK
- |....... c2.g1: OK
- |....... c2.gi: OK
- |......... c2.gv: OK
- |......... c2.gf: OK
- .|........ c2.c.f1: OK
- .|........ c2.c.fi: OK
- .|.......... c2.c.fv: OK
- .|.......... c2.c.ff: OK
- .|........ c2.c.fl: OK
- .|.......... c2.c.fo: OK
- .|....... c2.c.fn: OK
- |......... c2.c.g1: OK
- |......... c2.c.gi: OK
- |........... c2.c.gv: OK
- |........... c2.c.gf: OK
- .|........ c2.O.f1: OK
- .|........ c2.O.fi: OK
- .|.......... c2.O.fv: OK
- .|.......... c2.O.ff: OK
- .|........ c2.O.fl: OK
- .|.......... c2.O.fo: OK
- .|....... c2.O.fn: OK
- |......... c2.O.g1: OK
- |......... c2.O.gi: OK
- |........... c2.O.gv: OK
- |........... c2.O.gf: OK
- .|..... O2.f1: OK
- .|..... O2.fi: OK
- .|....... O2.fv: OK
- .|....... O2.ff: OK
- .|..... O2.fl: OK
- .|....... O2.fo: OK
- |....... O2.g1: OK
- |....... O2.gi: OK
- |......... O2.gv: OK
- |......... O2.gf: OK
- .|........ O2.c.f1: OK
- .|........ O2.c.fi: OK
- .|.......... O2.c.fv: OK
- .|.......... O2.c.ff: OK
- .|........ O2.c.fl: OK
- .|.......... O2.c.fo: OK
- .|....... O2.c.fn: OK
- |......... O2.c.g1: OK
- |......... O2.c.gi: OK
- |........... O2.c.gv: OK
- |........... O2.c.gf: OK
- .|........ O2.O.f1: OK
- .|........ O2.O.fi: OK
- .|.......... O2.O.fv: OK
- .|.......... O2.O.ff: OK
- .|........ O2.O.fl: OK
- .|.......... O2.O.fo: OK
- .|....... O2.O.fn: OK
- |......... O2.O.g1: OK
- |......... O2.O.gi: OK
- |........... O2.O.gv: OK
- |........... O2.O.gf: OK
+ .|.... c2.f1: OK
+ .|.... c2.fi: OK
+ .|...... c2.fv: OK
+ .|...... c2.ff: OK
+ .|.... c2.fl: OK
+ .|...... c2.fo: OK
+ |...... c2.g1: OK
+ |...... c2.gi: OK
+ |........ c2.gv: OK
+ |........ c2.gf: OK
+ .|....... c2.c.f1: OK
+ .|....... c2.c.fi: OK
+ .|......... c2.c.fv: OK
+ .|......... c2.c.ff: OK
+ .|....... c2.c.fl: OK
+ .|......... c2.c.fo: OK
+ .|...... c2.c.fn: OK
+ |........ c2.c.g1: OK
+ |........ c2.c.gi: OK
+ |.......... c2.c.gv: OK
+ |.......... c2.c.gf: OK
+ .|....... c2.O.f1: OK
+ .|....... c2.O.fi: OK
+ .|......... c2.O.fv: OK
+ .|......... c2.O.ff: OK
+ .|....... c2.O.fl: OK
+ .|......... c2.O.fo: OK
+ .|...... c2.O.fn: OK
+ |........ c2.O.g1: OK
+ |........ c2.O.gi: OK
+ |.......... c2.O.gv: OK
+ |.......... c2.O.gf: OK
+ .|.... O2.f1: OK
+ .|.... O2.fi: OK
+ .|...... O2.fv: OK
+ .|...... O2.ff: OK
+ .|.... O2.fl: OK
+ .|...... O2.fo: OK
+ |...... O2.g1: OK
+ |...... O2.gi: OK
+ |........ O2.gv: OK
+ |........ O2.gf: OK
+ .|....... O2.c.f1: OK
+ .|....... O2.c.fi: OK
+ .|......... O2.c.fv: OK
+ .|......... O2.c.ff: OK
+ .|....... O2.c.fl: OK
+ .|......... O2.c.fo: OK
+ .|...... O2.c.fn: OK
+ |........ O2.c.g1: OK
+ |........ O2.c.gi: OK
+ |.......... O2.c.gv: OK
+ |.......... O2.c.gf: OK
+ .|....... O2.O.f1: OK
+ .|....... O2.O.fi: OK
+ .|......... O2.O.fv: OK
+ .|......... O2.O.ff: OK
+ .|....... O2.O.fl: OK
+ .|......... O2.O.fo: OK
+ .|...... O2.O.fn: OK
+ |........ O2.O.g1: OK
+ |........ O2.O.gi: OK
+ |.......... O2.O.gv: OK
+ |.......... O2.O.gf: OK
diff --git a/test/files/run/synchronized.flags b/test/files/run/synchronized.flags
index 49d036a887..82eb1b9bdd 100644
--- a/test/files/run/synchronized.flags
+++ b/test/files/run/synchronized.flags
@@ -1 +1 @@
--optimize
+-opt:l:project
diff --git a/test/files/run/synchronized.scala b/test/files/run/synchronized.scala
index 077e9d02e8..d777b85b2c 100644
--- a/test/files/run/synchronized.scala
+++ b/test/files/run/synchronized.scala
@@ -1,5 +1,5 @@
/*
- * filter: inliner warnings; re-run with
+ * filter: inliner warnings;
*/
import java.lang.Thread.holdsLock
import scala.collection.mutable.StringBuilder
@@ -201,88 +201,86 @@ object O1 {
trait T {
import Util._
- val Tclass = Class.forName("T$class")
-
val lock = new AnyRef
- def f1 = synchronized { checkLocks(this)(this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
- @inline final def fi = synchronized { checkLocks(this)(this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
- val fv: () => Boolean = () => synchronized { checkLocks(this)(this.getClass, fv, fv.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
+ def f1 = synchronized { checkLocks(this)(this.getClass, classOf[T], classOf[C2], O2.getClass) }
+ @inline final def fi = synchronized { checkLocks(this)(this.getClass, classOf[T], classOf[C2], O2.getClass) }
+ val fv: () => Boolean = () => synchronized { checkLocks(this)(this.getClass, fv, fv.getClass, classOf[T], classOf[C2], O2.getClass) }
def ff = {
- lazy val ffv: AnyRef => Boolean = lock => synchronized { checkLocks(lock)(ffv, ffv.getClass, lock.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
+ lazy val ffv: AnyRef => Boolean = lock => synchronized { checkLocks(lock)(ffv, ffv.getClass, lock.getClass, classOf[T], classOf[C2], O2.getClass) }
ffv(this)
}
def fl = {
- lazy val flv = synchronized { checkLocks(this)(this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
+ lazy val flv = synchronized { checkLocks(this)(this.getClass, classOf[T], classOf[C2], O2.getClass) }
flv
}
- def fo = lock.synchronized { checkLocks(lock)(lock.getClass, this, this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
+ def fo = lock.synchronized { checkLocks(lock)(lock.getClass, this, this.getClass, classOf[T], classOf[C2], O2.getClass) }
- def g1 = checkLocks()(this, this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
- @inline final def gi = checkLocks()(this, this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
- val gv: () => Boolean = () => checkLocks()(this, this.getClass, gv, gv.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ def g1 = checkLocks()(this, this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
+ @inline final def gi = checkLocks()(this, this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
+ val gv: () => Boolean = () => checkLocks()(this, this.getClass, gv, gv.getClass, classOf[T], classOf[C2], O2, O2.getClass)
def gf = {
- lazy val gfv: AnyRef => Boolean = lock => checkLocks()(gfv, gfv.getClass, lock, lock.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ lazy val gfv: AnyRef => Boolean = lock => checkLocks()(gfv, gfv.getClass, lock, lock.getClass, classOf[T], classOf[C2], O2, O2.getClass)
gfv(this)
}
def gl = {
- lazy val glv = checkLocks()(this, this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass)
+ lazy val glv = checkLocks()(this, this.getClass, classOf[T], classOf[C2], O2.getClass)
glv
}
class C {
- def f1 = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
- @inline final def fi = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
- val fv: () => Boolean = () => synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, fv, fv.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
+ def f1 = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
+ @inline final def fi = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
+ val fv: () => Boolean = () => synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, fv, fv.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
def ff = {
- lazy val ffv: AnyRef => Boolean = lock => synchronized { checkLocks(lock)(ffv, ffv.getClass, lock.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
+ lazy val ffv: AnyRef => Boolean = lock => synchronized { checkLocks(lock)(ffv, ffv.getClass, lock.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
ffv(this)
}
def fl = {
- lazy val flv = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
+ lazy val flv = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
flv
}
- def fo = lock.synchronized { checkLocks(lock)(lock.getClass, this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
- def fn = T.this.synchronized { checkLocks(T.this)(T.this.getClass, this, this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
+ def fo = lock.synchronized { checkLocks(lock)(lock.getClass, this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
+ def fn = T.this.synchronized { checkLocks(T.this)(T.this.getClass, this, this.getClass, classOf[T], classOf[C2], O2.getClass) }
- def g1 = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
- @inline final def gi = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
- val gv: () => Boolean = () => checkLocks()(this, this.getClass, T.this, T.this.getClass, gv, gv.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ def g1 = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
+ @inline final def gi = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
+ val gv: () => Boolean = () => checkLocks()(this, this.getClass, T.this, T.this.getClass, gv, gv.getClass, classOf[T], classOf[C2], O2, O2.getClass)
def gf = {
- lazy val gfv: AnyRef => Boolean = lock => checkLocks()(gfv, gfv.getClass, lock, lock.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ lazy val gfv: AnyRef => Boolean = lock => checkLocks()(gfv, gfv.getClass, lock, lock.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
gfv(this)
}
def gl = {
- lazy val glv = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ lazy val glv = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
glv
}
}
val c = new C
object O {
- def f1 = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
- @inline final def fi = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
- val fv: () => Boolean = () => synchronized { checkLocks(this)(this.getClass, fv, fv.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
+ def f1 = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
+ @inline final def fi = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
+ val fv: () => Boolean = () => synchronized { checkLocks(this)(this.getClass, fv, fv.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
def ff = {
- lazy val ffv: AnyRef => Boolean = lock => synchronized { checkLocks(lock)(lock.getClass, ffv, ffv.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
+ lazy val ffv: AnyRef => Boolean = lock => synchronized { checkLocks(lock)(lock.getClass, ffv, ffv.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
ffv(this)
}
def fl = {
- lazy val flv = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
+ lazy val flv = synchronized { checkLocks(this)(this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
flv
}
- def fo = lock.synchronized { checkLocks(lock)(lock.getClass, this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass) }
- def fn = T.this.synchronized { checkLocks(T.this)(T.this.getClass, this, this.getClass, classOf[T], Tclass, classOf[C2], O2.getClass) }
+ def fo = lock.synchronized { checkLocks(lock)(lock.getClass, this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass) }
+ def fn = T.this.synchronized { checkLocks(T.this)(T.this.getClass, this, this.getClass, classOf[T], classOf[C2], O2.getClass) }
- def g1 = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
- @inline final def gi = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
- val gv: () => Boolean = () => checkLocks()(this, this.getClass, gv, gv.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ def g1 = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
+ @inline final def gi = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
+ val gv: () => Boolean = () => checkLocks()(this, this.getClass, gv, gv.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
def gf = {
- lazy val gfv: AnyRef => Boolean = lock => checkLocks()(lock, lock.getClass, gfv, gfv.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ lazy val gfv: AnyRef => Boolean = lock => checkLocks()(lock, lock.getClass, gfv, gfv.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
gfv(this)
}
def gl = {
- lazy val glv = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], Tclass, classOf[C2], O2, O2.getClass)
+ lazy val glv = checkLocks()(this, this.getClass, T.this, T.this.getClass, classOf[T], classOf[C2], O2, O2.getClass)
glv
}
}
@@ -449,4 +447,4 @@ object Test extends App {
check("O2.O.gv", O2.O.gv())
check("O2.O.gf", O2.O.gf)
// check("O2.O.gl", O2.O.gl)
-} \ No newline at end of file
+}
diff --git a/test/files/run/t1500.scala b/test/files/run/t1500.scala
index 30c026f70f..5a2735fbf1 100644
--- a/test/files/run/t1500.scala
+++ b/test/files/run/t1500.scala
@@ -20,7 +20,7 @@ object Test {
val settings = new Settings()
settings.classpath.value = System.getProperty("java.class.path")
- val tool = new interpreter.IMain(settings)
+ val tool = interpreter.IMain(settings)
val global = tool.global
import global._
diff --git a/test/files/run/t2106.check b/test/files/run/t2106.check
index 66a0e707b3..c8ebe575f0 100644
--- a/test/files/run/t2106.check
+++ b/test/files/run/t2106.check
@@ -1,13 +1,5 @@
-#partest -Ybackend:GenBCode
t2106.scala:7: warning: A::foo()Ljava/lang/Object; is annotated @inline but could not be inlined:
-The callee A::foo()Ljava/lang/Object; contains the instruction INVOKEVIRTUAL java/lang/Object.clone ()Ljava/lang/Object;
+The callee A::foo()Ljava/lang/Object; contains the instruction INVOKEVIRTUAL A.clone ()Ljava/lang/Object;
that would cause an IllegalAccessError when inlined into class Test$.
def main(args: Array[String]): Unit = x.foo
^
-#partest !-Ybackend:GenBCode
-t2106.scala:7: warning: Could not inline required method foo because access level required by callee not matched by caller.
- def main(args: Array[String]): Unit = x.foo
- ^
-t2106.scala:7: warning: At the end of the day, could not inline @inline-marked method foo
- def main(args: Array[String]): Unit = x.foo
- ^
diff --git a/test/files/run/t2106.flags b/test/files/run/t2106.flags
index a2e413bb22..cde9a0c4e6 100644
--- a/test/files/run/t2106.flags
+++ b/test/files/run/t2106.flags
@@ -1 +1 @@
--optimise -Yinline-warnings -Yopt:l:classpath
+-opt-warnings -opt:l:classpath
diff --git a/test/files/run/t2212.check b/test/files/run/t2212.check
index 1465f1341a..d13ea43b07 100644
--- a/test/files/run/t2212.check
+++ b/test/files/run/t2212.check
@@ -1,4 +1,4 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
LinkedList(1)
LinkedList(1)
true
diff --git a/test/files/run/t2250.scala b/test/files/run/t2250.scala
index 1ed333792a..f87b76d4d7 100644
--- a/test/files/run/t2250.scala
+++ b/test/files/run/t2250.scala
@@ -6,7 +6,7 @@ object Test {
// we'll say rather unlikely a.sameElements(b) unless
// they are pointing to the same array
- import scala.collection.JavaConversions._
+ import scala.collection.convert.ImplicitConversionsToScala._
assert(a sameElements b)
}
}
diff --git a/test/files/run/t2251b.check b/test/files/run/t2251b.check
index 4231fc6ea6..b60698d605 100644
--- a/test/files/run/t2251b.check
+++ b/test/files/run/t2251b.check
@@ -1,4 +1,4 @@
-TypeTag[List[scala.collection.immutable.LinearSeq[B[_ >: D with C <: B[_ >: D with C <: A]]] with scala.collection.AbstractSeq[B[_ >: D with C <: B[_ >: D with C <: A]]] with java.io.Serializable]]
+TypeTag[List[scala.collection.immutable.LinearSeq[B[_ >: D with C <: B[_ >: D with C <: A]]] with scala.collection.AbstractSeq[B[_ >: D with C <: B[_ >: D with C <: A]]] with Serializable]]
TypeTag[List[scala.collection.immutable.Iterable[B[_ >: F with E with D with C <: B[_ >: F with E with D with C <: A]]] with F with Int => Any]]
TypeTag[List[scala.collection.immutable.Seq[B[_ >: D with C <: B[_ >: D with C <: A]]] with scala.collection.AbstractSeq[B[_ >: D with C <: B[_ >: D with C <: A]]] with Serializable]]
TypeTag[List[scala.collection.Set[_ >: G with F <: B[_ >: G with F <: B[_ >: G with F <: A]]]]]
@@ -6,6 +6,6 @@ TypeTag[List[scala.collection.Set[_ >: G with F <: B[_ >: G with F <: B[_ >: G w
TypeTag[List[scala.collection.Set[_ >: G with F <: B[_ >: G with F <: B[_ >: G with F <: A]]]]]
TypeTag[List[Seq[B[_ >: G with F <: B[_ >: G with F <: A]]]]]
TypeTag[List[scala.collection.Map[_ >: F with C <: B[_ >: F with C <: B[_ >: F with C <: A]], B[_ >: G with D <: B[_ >: G with D <: A]]]]]
-TypeTag[List[scala.collection.AbstractSeq[B[_ >: G with F <: B[_ >: G with F <: A]]] with scala.collection.LinearSeq[B[_ >: G with F <: B[_ >: G with F <: A]]] with java.io.Serializable]]
+TypeTag[List[scala.collection.AbstractSeq[B[_ >: G with F <: B[_ >: G with F <: A]]] with scala.collection.LinearSeq[B[_ >: G with F <: B[_ >: G with F <: A]]] with Serializable]]
TypeTag[List[Seq[B[_ >: G with F <: B[_ >: G with F <: A]]]]]
TypeTag[List[Seq[B[_ >: G with F <: B[_ >: G with F <: A]]]]]
diff --git a/test/files/run/t2813.2.scala b/test/files/run/t2813.2.scala
index f41f6451f4..f26753600d 100644
--- a/test/files/run/t2813.2.scala
+++ b/test/files/run/t2813.2.scala
@@ -1,5 +1,5 @@
import java.util.LinkedList
-import collection.JavaConversions._
+import collection.convert.ImplicitConversions._
object Test extends App {
def assertListEquals[A](expected: List[A], actual: Seq[A]) {
diff --git a/test/files/run/t2946/MyResponseCommon_2.scala b/test/files/run/t2946/MyResponseCommon_2.scala
new file mode 100644
index 0000000000..4f8f924f2c
--- /dev/null
+++ b/test/files/run/t2946/MyResponseCommon_2.scala
@@ -0,0 +1,7 @@
+class MyResponseCommon extends Parser with ResponseCommon
+
+object Test {
+ def main(args: Array[String]) {
+ new MyResponseCommon
+ }
+}
diff --git a/test/files/run/t2946/ResponseCommon_1.scala b/test/files/run/t2946/ResponseCommon_1.scala
new file mode 100644
index 0000000000..bb921e7027
--- /dev/null
+++ b/test/files/run/t2946/ResponseCommon_1.scala
@@ -0,0 +1,13 @@
+class Parser {
+ def parse(t: Any): Unit = {}
+}
+
+trait ResponseCommon extends Parser {
+ private[this] var paramsParser: Parser = null
+ def withParamsParser(parser: Parser) = {paramsParser = parser; this}
+
+ override abstract def parse(t: Any): Unit = t match {
+ case ("params", value: List[_]) => value.foreach {paramsParser.parse(_)}
+ case _ => super.parse(t)
+ }
+}
diff --git a/test/files/run/t3126.scala b/test/files/run/t3126.scala
index 36322bf896..865047ce4f 100644
--- a/test/files/run/t3126.scala
+++ b/test/files/run/t3126.scala
@@ -4,6 +4,6 @@ object Test {
def main(args: Array[String]): Unit = {
try C.unapply(null) catch { case _: MatchError => }
- try v match { case Some(1) => } catch { case _: MatchError => }
+ try ((v: @unchecked) match { case Some(1) => }) catch { case _: MatchError => }
}
}
diff --git a/test/files/run/t3158.scala b/test/files/run/t3158.scala
index c824b62e96..1e5ec186f5 100644
--- a/test/files/run/t3158.scala
+++ b/test/files/run/t3158.scala
@@ -1,6 +1,6 @@
object Test {
def main(args: Array[String]) {
- println(args.map(_ => foo _).deep)
+ println(args.map(_ => foo _).map(_ => "<function1>").deep)
}
def foo(xs: String*) {
diff --git a/test/files/run/t3235-minimal.check b/test/files/run/t3235-minimal.check
index d7f716002f..374ddc79fe 100644
--- a/test/files/run/t3235-minimal.check
+++ b/test/files/run/t3235-minimal.check
@@ -1,12 +1,12 @@
-t3235-minimal.scala:3: warning: method round in class RichInt is deprecated: This is an integer type; there is no reason to round it. Perhaps you meant to call this on a floating-point value?
+t3235-minimal.scala:3: warning: method round in class RichInt is deprecated (since 2.11.0): this is an integer type; there is no reason to round it. Perhaps you meant to call this on a floating-point value?
assert(123456789.round == 123456789)
^
-t3235-minimal.scala:4: warning: method round in package math is deprecated: This is an integer type; there is no reason to round it. Perhaps you meant to call this with a floating-point value?
+t3235-minimal.scala:4: warning: method round in package math is deprecated (since 2.11.0): This is an integer type; there is no reason to round it. Perhaps you meant to call this with a floating-point value?
assert(math.round(123456789) == 123456789)
^
-t3235-minimal.scala:5: warning: method round in class RichLong is deprecated: This is an integer type; there is no reason to round it. Perhaps you meant to call this on a floating-point value?
+t3235-minimal.scala:5: warning: method round in class RichLong is deprecated (since 2.11.0): this is an integer type; there is no reason to round it. Perhaps you meant to call this on a floating-point value?
assert(1234567890123456789L.round == 1234567890123456789L)
^
-t3235-minimal.scala:6: warning: method round in package math is deprecated: This is an integer type; there is no reason to round it. Perhaps you meant to call this with a floating-point value?
+t3235-minimal.scala:6: warning: method round in package math is deprecated (since 2.11.0): This is an integer type; there is no reason to round it. Perhaps you meant to call this with a floating-point value?
assert(math.round(1234567890123456789L) == 1234567890123456789L)
^
diff --git a/test/files/run/t3326.scala b/test/files/run/t3326.scala
index 4ac7ef9138..b6b4eac784 100644
--- a/test/files/run/t3326.scala
+++ b/test/files/run/t3326.scala
@@ -19,7 +19,7 @@ import scala.math.Ordering
* This is why `collection.SortedMap` used to resort to the generic
* `TraversableLike.++` which knows nothing about the ordering.
*
- * To avoid `collection.SortedMap`s resort to the more generic `TraverableLike.++`,
+ * To avoid `collection.SortedMap`s resort to the more generic `TraversableLike.++`,
* we override the `MapLike.++` overload in `collection.SortedMap` to return
* the proper type `SortedMap`.
*/
diff --git a/test/files/run/t3361.check b/test/files/run/t3361.check
index 5e0a763501..7d2fa3b155 100644
--- a/test/files/run/t3361.check
+++ b/test/files/run/t3361.check
@@ -1 +1 @@
-warning: there were 16 deprecation warnings; re-run with -deprecation for details
+warning: there were 16 deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t3368-c.check b/test/files/run/t3368-c.check
index e0c10cc0dd..4cbe98c577 100644
--- a/test/files/run/t3368-c.check
+++ b/test/files/run/t3368-c.check
@@ -6,8 +6,8 @@ package <empty> {
};
def x = {
val $buf = new _root_.scala.xml.NodeBuffer();
- $buf.$amp$plus(new _root_.scala.xml.Text("hi & bye"));
- $buf.$amp$plus(new _root_.scala.xml.Text("red & black"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hi & bye"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("red & black"));
$buf
}
};
@@ -24,7 +24,8 @@ package <empty> {
new _root_.scala.xml.Elem(null, "b", _root_.scala.xml.Null, $scope, true)
}
});
- $buf.$amp$plus(new _root_.scala.xml.Text("starthi & bye"));
+ $buf.$amp$plus(new _root_.scala.xml.Text("start"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hi & bye"));
$buf.$amp$plus({
{
new _root_.scala.xml.Elem(null, "c", _root_.scala.xml.Null, $scope, true)
@@ -36,7 +37,8 @@ package <empty> {
new _root_.scala.xml.Elem(null, "d", _root_.scala.xml.Null, $scope, true)
}
});
- $buf.$amp$plus(new _root_.scala.xml.Text("stuffred & black"));
+ $buf.$amp$plus(new _root_.scala.xml.Text("stuff"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("red & black"));
$buf
}: _*))
}
@@ -46,18 +48,19 @@ package <empty> {
def $init$() = {
()
};
- def d = new _root_.scala.xml.Text("hello, world");
+ def d = new _root_.scala.xml.PCData("hello, world");
def e = {
val $buf = new _root_.scala.xml.NodeBuffer();
- $buf.$amp$plus(new _root_.scala.xml.Text("hello, world"));
- $buf.$amp$plus(new _root_.scala.xml.Text("hello, world"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hello, world"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hello, world"));
$buf
};
def f = {
{
new _root_.scala.xml.Elem(null, "foo", _root_.scala.xml.Null, $scope, false, ({
val $buf = new _root_.scala.xml.NodeBuffer();
- $buf.$amp$plus(new _root_.scala.xml.Text("xhello, world"));
+ $buf.$amp$plus(new _root_.scala.xml.Text("x"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hello, world"));
$buf
}: _*))
}
@@ -66,7 +69,7 @@ package <empty> {
{
new _root_.scala.xml.Elem(null, "foo", _root_.scala.xml.Null, $scope, false, ({
val $buf = new _root_.scala.xml.NodeBuffer();
- $buf.$amp$plus(new _root_.scala.xml.Text("hello, world"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hello, world"));
$buf
}: _*))
}
@@ -75,7 +78,8 @@ package <empty> {
{
new _root_.scala.xml.Elem(null, "foo", _root_.scala.xml.Null, $scope, false, ({
val $buf = new _root_.scala.xml.NodeBuffer();
- $buf.$amp$plus(new _root_.scala.xml.Text("hello, worldhello, world"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hello, world"));
+ $buf.$amp$plus(new _root_.scala.xml.PCData("hello, world"));
$buf
}: _*))
}
diff --git a/test/files/run/t3452b-bcode.check b/test/files/run/t3452b-bcode.check
deleted file mode 100644
index 204c3d0437..0000000000
--- a/test/files/run/t3452b-bcode.check
+++ /dev/null
@@ -1,2 +0,0 @@
-Search received: test
-SearchC received: test
diff --git a/test/files/run/t3452b-bcode.flags b/test/files/run/t3452b-bcode.flags
deleted file mode 100644
index c30091d3de..0000000000
--- a/test/files/run/t3452b-bcode.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenBCode
diff --git a/test/files/run/t3452b-bcode/J_2.java b/test/files/run/t3452b-bcode/J_2.java
deleted file mode 100644
index 839f334508..0000000000
--- a/test/files/run/t3452b-bcode/J_2.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class J_2 {
- public static void j() {
- StringSearch.search("test");
- StringSearch.searchC("test");
- }
-}
diff --git a/test/files/run/t3452b-bcode/S_1.scala b/test/files/run/t3452b-bcode/S_1.scala
deleted file mode 100644
index a209f12035..0000000000
--- a/test/files/run/t3452b-bcode/S_1.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-trait Search[M] {
- def search(input: M): C[Int] = {
- println("Search received: " + input)
- null
- }
-}
-
-class SearchC[M] {
- def searchC(input: M): C[Int] = {
- println("SearchC received: " + input)
- null
- }
-}
-
-object StringSearch extends SearchC[String] with Search[String]
-
-trait C[T]
diff --git a/test/files/run/t3488.check b/test/files/run/t3488.check
index 314dfc7838..75b2c3b07f 100644
--- a/test/files/run/t3488.check
+++ b/test/files/run/t3488.check
@@ -1,7 +1,13 @@
-t3488.scala:4: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t3488.scala:4: warning: a pure expression does nothing in statement position
println(foo { val List(_*)=List(0); 1 } ())
^
-t3488.scala:5: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t3488.scala:4: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
+ println(foo { val List(_*)=List(0); 1 } ())
+ ^
+t3488.scala:5: warning: a pure expression does nothing in statement position
+ println(foo { val List(_*)=List(0); 1 } (1))
+ ^
+t3488.scala:5: warning: multiline expressions might require enclosing parentheses; a value can be silently discarded when Unit is expected
println(foo { val List(_*)=List(0); 1 } (1))
^
0
diff --git a/test/files/run/t3509.flags b/test/files/run/t3509.flags
index 6933d924d3..768ca4f13b 100644
--- a/test/files/run/t3509.flags
+++ b/test/files/run/t3509.flags
@@ -1 +1 @@
--Yinline \ No newline at end of file
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/run/t3569.check b/test/files/run/t3569.check
index a9fb5ff32e..e0e1d6c405 100644
--- a/test/files/run/t3569.check
+++ b/test/files/run/t3569.check
@@ -2,6 +2,8 @@
private final int Test$X.val1
private final int Test$X.val2
private final int Test$X.val3
+private int Test$X.const1
+private int Test$X.const2
private int Test$X.lval1
private int Test$X.lval2
private int Test$X.lval3
diff --git a/test/files/run/t3569.flags b/test/files/run/t3569.flags
index 6933d924d3..768ca4f13b 100644
--- a/test/files/run/t3569.flags
+++ b/test/files/run/t3569.flags
@@ -1 +1 @@
--Yinline \ No newline at end of file
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/run/t3569.scala b/test/files/run/t3569.scala
index eb3b424439..7da4de9e95 100644
--- a/test/files/run/t3569.scala
+++ b/test/files/run/t3569.scala
@@ -4,7 +4,13 @@ object Test {
lazy val lv = scala.util.Random.nextInt()
- class X(final var x: Int) {
+ trait T { final lazy val const1 = 1 } // no fields
+
+ class X(final var x: Int) extends T {
+ // a lazy val does not receive a constant type, for backwards compat (e.g. for the repl)
+ // besides, since you explicitly wanted something lazy, we'll give you something lazy! (a field and a bitmap)
+ final lazy val const2 = 2
+
final var var1: Int = 0
final private var var2: Int = 0
final private[this] var var3: Int = 0
diff --git a/test/files/run/t3647.check b/test/files/run/t3647.check
index e5c1ee1701..cb16c6486f 100644
--- a/test/files/run/t3647.check
+++ b/test/files/run/t3647.check
@@ -1 +1 @@
-warning: there were three deprecation warnings; re-run with -deprecation for details
+warning: there were three deprecation warnings (since 2.11.8); re-run with -deprecation for details
diff --git a/test/files/run/t3822.scala b/test/files/run/t3822.scala
deleted file mode 100644
index c35804035e..0000000000
--- a/test/files/run/t3822.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-import scala.collection.{ mutable, immutable, generic }
-import immutable.ListSet
-
-object Test {
- def main(args: Array[String]): Unit = {
- val xs = ListSet(-100000 to 100001: _*)
-
- assert(xs.size == 200002)
- assert(xs.sum == 100001)
-
- val ys = ListSet[Int]()
- val ys1 = (1 to 12).grouped(3).foldLeft(ys)(_ ++ _)
- val ys2 = (1 to 12).foldLeft(ys)(_ + _)
-
- assert(ys1 == ys2)
- }
-}
-
-
diff --git a/test/files/run/t3888.check b/test/files/run/t3888.check
index df1629dd7e..e69de29bb2 100644
--- a/test/files/run/t3888.check
+++ b/test/files/run/t3888.check
@@ -1 +0,0 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
diff --git a/test/files/run/t3888.scala b/test/files/run/t3888.scala
index 8701b42ff0..b1932ffb20 100644
--- a/test/files/run/t3888.scala
+++ b/test/files/run/t3888.scala
@@ -1,3 +1,4 @@
+case class Tuple2[+T1, +T2](_1: T1, _2: T2) extends Product2[T1, T2]
// in a match, which notion of equals prevails?
// extending Tuple doesn't seem to be at issue here.
@@ -7,13 +8,13 @@ object Test {
private[this] val T2 = T1
def m1 =
- (1, 2) match {
+ Tuple2(1, 2) match {
case T1 => true
case _ => false
}
def m2 =
- (1, 2) match {
+ Tuple2(1, 2) match {
case T2 => true
case _ => false
}
diff --git a/test/files/run/t3970.check b/test/files/run/t3970.check
index 0683a6c1a6..fd1c3af3bb 100644
--- a/test/files/run/t3970.check
+++ b/test/files/run/t3970.check
@@ -1 +1 @@
-warning: there were 5 deprecation warnings; re-run with -deprecation for details
+warning: there were 5 deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t3996.check b/test/files/run/t3996.check
index a9ecc29fea..f214cd8e6a 100644
--- a/test/files/run/t3996.check
+++ b/test/files/run/t3996.check
@@ -1 +1 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t4047.check b/test/files/run/t4047.check
index 3c41e6e244..c31f2f0858 100644
--- a/test/files/run/t4047.check
+++ b/test/files/run/t4047.check
@@ -1,13 +1,13 @@
-t4047.scala:23: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t4047.scala:23: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
a.foo
^
-t4047.scala:24: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t4047.scala:24: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
a.foo
^
-t4047.scala:26: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t4047.scala:26: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
b.foo
^
-t4047.scala:27: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t4047.scala:27: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
b.foo
^
Unit: called A.foo
diff --git a/test/files/run/t4080.check b/test/files/run/t4080.check
index 462e925b76..18f18ef2dd 100644
--- a/test/files/run/t4080.check
+++ b/test/files/run/t4080.check
@@ -1,2 +1,2 @@
-warning: there were three deprecation warnings; re-run with -deprecation for details
+warning: there were three deprecation warnings (since 2.11.0); re-run with -deprecation for details
LinkedList(1, 0, 2, 3)
diff --git a/test/files/run/t4124.scala b/test/files/run/t4124.scala
index 9f35b57ce3..db4e382634 100644
--- a/test/files/run/t4124.scala
+++ b/test/files/run/t4124.scala
@@ -2,22 +2,22 @@ import xml.Node
object Test extends App {
val body: Node = <elem>hi</elem>
- println ((body: AnyRef, "foo") match {
+ println (((body: AnyRef, "foo"): @unchecked) match {
case (node: Node, "bar") => "bye"
case (ser: Serializable, "foo") => "hi"
})
- println ((body, "foo") match {
+ println (((body, "foo"): @unchecked) match {
case (node: Node, "bar") => "bye"
case (ser: Serializable, "foo") => "hi"
})
- println ((body: AnyRef, "foo") match {
+ println (((body: AnyRef, "foo"): @unchecked) match {
case (node: Node, "foo") => "bye"
case (ser: Serializable, "foo") => "hi"
})
- println ((body: AnyRef, "foo") match {
+ println (((body: AnyRef, "foo"): @unchecked) match {
case (node: Node, "foo") => "bye"
case (ser: Serializable, "foo") => "hi"
})
diff --git a/test/files/run/t4172.check b/test/files/run/t4172.check
index 3141647dba..99e420678c 100644
--- a/test/files/run/t4172.check
+++ b/test/files/run/t4172.check
@@ -1,6 +1,6 @@
scala> val c = { class C { override def toString = "C" }; ((new C, new C { def f = 2 })) }
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
c: (C, C{def f: Int}) forSome { type C <: AnyRef } = (C,C)
scala> :quit
diff --git a/test/files/run/t4285.flags b/test/files/run/t4285.flags
index eb4d19bcb9..768ca4f13b 100644
--- a/test/files/run/t4285.flags
+++ b/test/files/run/t4285.flags
@@ -1 +1 @@
--optimise \ No newline at end of file
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/run/t4287inferredMethodTypes.check b/test/files/run/t4287inferredMethodTypes.check
deleted file mode 100644
index 56e9c097cc..0000000000
--- a/test/files/run/t4287inferredMethodTypes.check
+++ /dev/null
@@ -1,30 +0,0 @@
-[[syntax trees at end of typer]] // newSource1.scala
-[0:92]package [0:0]<empty> {
- [0:21]class A extends [7:21][23]scala.AnyRef {
- [8:16]<paramaccessor> private[this] val a: [8]Int = _;
- <8:20>def <init>(<8:20>a: [11]<type: [11]scala.Int> = [17:20]A.a): [7]A = <8:20>{
- <8:20><8:20><8:20>A.super.<init>();
- <8:20>()
- }
- };
- [23:47]object A extends [32:47][49]scala.AnyRef {
- [49]def <init>(): [32]A.type = [49]{
- [49][49][49]A.super.<init>();
- [32]()
- };
- [36:45]private[this] val a: [40]Int = [44:45]2;
- [40]<stable> <accessor> def a: [40]Int = [40][40]A.this.a;
- [8]<synthetic> def <init>$default$1: [8]Int = [19]A.a
- };
- [49:92]class B extends [57:92][65:66]A {
- [65]def <init>(): [57]B = [65]{
- [65][65][65]B.super.<init>([65]A.<init>$default$1);
- [57]()
- };
- [70:90]def <init>([79:80]a: [79]Int): [74]B = [84:90]{
- [84:90][84:90][84]B.this.<init>();
- [84]()
- }
- }
-}
-
diff --git a/test/files/run/t4287inferredMethodTypes.scala b/test/files/run/t4287inferredMethodTypes.scala
deleted file mode 100644
index f14e672da8..0000000000
--- a/test/files/run/t4287inferredMethodTypes.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-import scala.tools.partest.DirectTest
-
-object Test extends DirectTest {
-
- override def extraSettings: String =
- s"-usejavacp -Yinfer-argument-types -Xprint-pos -Xprint:typer -Yrangepos -Ystop-after:typer -d ${testOutput.path}"
-
- override def code = """
-class A(a: Int = A.a)
-
-object A {
- val a = 2
-}
-
-class B extends A {
- def this(a) = this()
-}
- """.trim
-
- override def show(): Unit = {
- Console.withErr(System.out) {
- compile()
- }
- }
-} \ No newline at end of file
diff --git a/test/files/run/t4332.scala b/test/files/run/t4332.scala
index 5a67922911..1c7e7d73de 100644
--- a/test/files/run/t4332.scala
+++ b/test/files/run/t4332.scala
@@ -12,7 +12,7 @@ object Test extends DirectTest {
}
def isExempt(sym: Symbol) = {
- val exempt = Set("view", "repr", "sliceWithKnownDelta", "sliceWithKnownBound", "transform")
+ val exempt = Set("view", "repr", "sliceWithKnownDelta", "sliceWithKnownBound", "transform", "filterImpl")
(exempt contains sym.name.decoded)
}
diff --git a/test/files/run/t4396.check b/test/files/run/t4396.check
index d38fb7fae7..9eb1be0255 100644
--- a/test/files/run/t4396.check
+++ b/test/files/run/t4396.check
@@ -1,4 +1,4 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
hallo
constructor
out:22
diff --git a/test/files/run/t4461.check b/test/files/run/t4461.check
index 346993af6f..32c7f5c487 100644
--- a/test/files/run/t4461.check
+++ b/test/files/run/t4461.check
@@ -1,4 +1,4 @@
-warning: there were four deprecation warnings; re-run with -deprecation for details
+warning: there were four deprecation warnings (since 2.11.0); re-run with -deprecation for details
Include(End,1)
Include(End,2)
Include(End,3)
diff --git a/test/files/run/t4542.check b/test/files/run/t4542.check
index 6e099222b0..942de545b5 100644
--- a/test/files/run/t4542.check
+++ b/test/files/run/t4542.check
@@ -5,7 +5,7 @@ scala> @deprecated("foooo", "ReplTest version 1.0-FINAL") class Foo() {
defined class Foo
scala> val f = new Foo
-<console>:12: warning: class Foo is deprecated: foooo
+<console>:12: warning: class Foo is deprecated (since ReplTest version 1.0-FINAL): foooo
val f = new Foo
^
f: Foo = Bippy
diff --git a/test/files/run/t4594-repl-settings.scala b/test/files/run/t4594-repl-settings.scala
index f2d1a8b3f8..587bb2312b 100644
--- a/test/files/run/t4594-repl-settings.scala
+++ b/test/files/run/t4594-repl-settings.scala
@@ -9,13 +9,13 @@ object Test extends SessionTest {
|depp: String
|
|scala> def a = depp
- |warning: there was one deprecation warning; re-run with -deprecation for details
+ |warning: there was one deprecation warning (since Time began.); for details, enable `:setting -deprecation' or `:replay -deprecation'
|a: String
|
|scala> :settings -deprecation
|
|scala> def b = depp
- |<console>:12: warning: method depp is deprecated: Please don't do that.
+ |<console>:12: warning: method depp is deprecated (since Time began.): Please don't do that.
| def b = depp
| ^
|b: String
diff --git a/test/files/run/t4680.check b/test/files/run/t4680.check
index 21a1e0cd15..749ce4c627 100644
--- a/test/files/run/t4680.check
+++ b/test/files/run/t4680.check
@@ -1,10 +1,10 @@
-t4680.scala:51: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t4680.scala:51: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
new C { 5 }
^
-t4680.scala:69: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t4680.scala:69: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
new { val x = 5 } with E() { 5 }
^
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
// new C { }
diff --git a/test/files/run/t4710.check b/test/files/run/t4710.check
index 5f90c68ed1..4a5d11f185 100644
--- a/test/files/run/t4710.check
+++ b/test/files/run/t4710.check
@@ -1,6 +1,6 @@
scala> def method : String = { implicit def f(s: Symbol) = "" ; 'symbol }
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
method: String
scala> :quit
diff --git a/test/files/run/t4813.check b/test/files/run/t4813.check
index a9ecc29fea..f214cd8e6a 100644
--- a/test/files/run/t4813.check
+++ b/test/files/run/t4813.check
@@ -1 +1 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t4891.check b/test/files/run/t4891.check
index 79fd7f6fbb..a460569fd9 100644
--- a/test/files/run/t4891.check
+++ b/test/files/run/t4891.check
@@ -1,5 +1,7 @@
test.generic.T1
- (m) public abstract A test.generic.T1.t1(A)
+ (m) public static void test.generic.T1.$init$(test.generic.T1)
+ (m) public default A test.generic.T1.t1(A)
+ (m) public static java.lang.Object test.generic.T1.t1$(test.generic.T1,java.lang.Object)
test.generic.C1
(m) public void test.generic.C1.m1()
test.generic.C2
diff --git a/test/files/run/t4935.flags b/test/files/run/t4935.flags
index 49d036a887..63535a7f4f 100644
--- a/test/files/run/t4935.flags
+++ b/test/files/run/t4935.flags
@@ -1 +1 @@
--optimize
+-opt:l:classpath
diff --git a/test/files/run/t5064.check b/test/files/run/t5064.check
index 61ccfd16e7..f7d25a67e4 100644
--- a/test/files/run/t5064.check
+++ b/test/files/run/t5064.check
@@ -1,25 +1,26 @@
[53] T5064.super.<init>()
[53] T5064.super.<init>
[53] this
-[16:23] immutable.this.List.apply(scala.this.Predef.wrapIntArray(Array[Int]{1}))
-[16:20] immutable.this.List.apply
-<16:20> immutable.this.List
-<16:20> immutable.this
-[16:23] scala.this.Predef.wrapIntArray(Array[Int]{1})
-[20] scala.this.Predef.wrapIntArray
-[20] scala.this.Predef
-[20] scala.this
-[26:32] collection.this.Seq.apply(scala.this.Predef.wrapIntArray(Array[Int]{1}))
-[26:29] collection.this.Seq.apply
-<26:29> collection.this.Seq
-<26:29> collection.this
-[26:32] scala.this.Predef.wrapIntArray(Array[Int]{1})
-[29] scala.this.Predef.wrapIntArray
-[29] scala.this.Predef
-[29] scala.this
-[35:39] immutable.this.List
-<35:39> immutable.this
-[42:45] collection.this.Seq
-<42:45> collection.this
-[48:51] immutable.this.Nil
-<48:51> immutable.this
+[16:23] scala.collection.immutable.List.apply(scala.Predef.wrapIntArray(Array[Int]{1}))
+[16:20] scala.collection.immutable.List.apply
+<16:20> scala.collection.immutable.List
+<16:20> scala.collection.immutable
+<16:20> scala.collection
+[16:23] scala.Predef.wrapIntArray(Array[Int]{1})
+[20] scala.Predef.wrapIntArray
+[20] scala.Predef
+[26:32] scala.collection.Seq.apply(scala.Predef.wrapIntArray(Array[Int]{1}))
+[26:29] scala.collection.Seq.apply
+<26:29> scala.collection.Seq
+<26:29> scala.collection
+[26:32] scala.Predef.wrapIntArray(Array[Int]{1})
+[29] scala.Predef.wrapIntArray
+[29] scala.Predef
+[35:39] scala.collection.immutable.List
+<35:39> scala.collection.immutable
+<35:39> scala.collection
+[42:45] scala.collection.Seq
+<42:45> scala.collection
+[48:51] scala.collection.immutable.Nil
+<48:51> scala.collection.immutable
+<48:51> scala.collection
diff --git a/test/files/run/t5293-map.scala b/test/files/run/t5293-map.scala
deleted file mode 100644
index ad1bbcfe30..0000000000
--- a/test/files/run/t5293-map.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-import scala.collection.JavaConverters._
-
-
-
-object Test extends App {
-
- def bench(label: String)(body: => Unit): Long = {
- val start = System.nanoTime
-
- 0.until(10).foreach(_ => body)
-
- val end = System.nanoTime
-
- //println("%s: %s ms".format(label, (end - start) / 1000.0 / 1000.0))
-
- end - start
- }
-
- def benchJava(values: java.util.Map[Int, Int]) = {
- bench("Java Map") {
- val m = new java.util.HashMap[Int, Int]
-
- m.putAll(values)
- }
- }
-
- def benchScala(values: Iterable[(Int, Int)]) = {
- bench("Scala Map") {
- val m = new scala.collection.mutable.HashMap[Int, Int]
-
- m ++= values
- }
- }
-
- def benchScalaSorted(values: Iterable[(Int, Int)]) = {
- bench("Scala Map sorted") {
- val m = new scala.collection.mutable.HashMap[Int, Int]
-
- m ++= values.toArray.sorted
- }
- }
-
- def benchScalaPar(values: Iterable[(Int, Int)]) = {
- bench("Scala ParMap") {
- val m = new scala.collection.parallel.mutable.ParHashMap[Int, Int] map { x => x }
-
- m ++= values
- }
- }
-
- val total = 50000
- val values = (0 until total) zip (0 until total)
- val map = scala.collection.mutable.HashMap.empty[Int, Int]
-
- map ++= values
-
- // warmup
- for (x <- 0 until 5) {
- benchJava(map.asJava)
- benchScala(map)
- benchScalaPar(map)
- benchJava(map.asJava)
- benchScala(map)
- benchScalaPar(map)
- }
-
- val javamap = benchJava(map.asJava)
- val scalamap = benchScala(map)
- val scalaparmap = benchScalaPar(map)
-
- // println(javamap)
- // println(scalamap)
- // println(scalaparmap)
-
- assert(scalamap < (javamap * 10), "scalamap: " + scalamap + " vs. javamap: " + javamap)
- assert(scalaparmap < (javamap * 10), "scalaparmap: " + scalaparmap + " vs. javamap: " + javamap)
-}
-
-
-
-
-
-
-
-
diff --git a/test/files/run/t5293.scala b/test/files/run/t5293.scala
deleted file mode 100644
index c42c967b42..0000000000
--- a/test/files/run/t5293.scala
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-import scala.collection.JavaConverters._
-
-
-
-object Test extends App {
-
- def bench(label: String)(body: => Unit): Long = {
- val start = System.nanoTime
-
- 0.until(10).foreach(_ => body)
-
- val end = System.nanoTime
-
- //println("%s: %s ms".format(label, (end - start) / 1000.0 / 1000.0))
-
- end - start
- }
-
- def benchJava(values: java.util.Collection[Int]) = {
- bench("Java Set") {
- val set = new java.util.HashSet[Int]
-
- set.addAll(values)
- }
- }
-
- def benchScala(values: Iterable[Int]) = {
- bench("Scala Set") {
- val set = new scala.collection.mutable.HashSet[Int]
-
- set ++= values
- }
- }
-
- def benchScalaSorted(values: Iterable[Int]) = {
- bench("Scala Set sorted") {
- val set = new scala.collection.mutable.HashSet[Int]
-
- set ++= values.toArray.sorted
- }
- }
-
- def benchScalaPar(values: Iterable[Int]) = {
- bench("Scala ParSet") {
- val set = new scala.collection.parallel.mutable.ParHashSet[Int] map { x => x }
-
- set ++= values
- }
- }
-
- val values = 0 until 50000
- val set = scala.collection.mutable.HashSet.empty[Int]
-
- set ++= values
-
- // warmup
- for (x <- 0 until 5) {
- benchJava(set.asJava)
- benchScala(set)
- benchScalaPar(set)
- benchJava(set.asJava)
- benchScala(set)
- benchScalaPar(set)
- }
-
- val javaset = benchJava(set.asJava)
- val scalaset = benchScala(set)
- val scalaparset = benchScalaPar(set)
-
- assert(scalaset < (javaset * 8), "scalaset: " + scalaset + " vs. javaset: " + javaset)
- assert(scalaparset < (javaset * 8), "scalaparset: " + scalaparset + " vs. javaset: " + javaset)
-}
-
-
-
-
-
-
-
-
diff --git a/test/files/run/t5294.scala b/test/files/run/t5294.scala
new file mode 100644
index 0000000000..2551ae89a6
--- /dev/null
+++ b/test/files/run/t5294.scala
@@ -0,0 +1,22 @@
+import scala.language.higherKinds
+
+package p {
+ trait T[+A, +CC] {
+ def t: CC
+ }
+ class C {
+ def test[CC[X] <: T[X,String] with T[X,Int]](from: CC[_]): Unit = ()
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val symtab = reflect.runtime.universe.asInstanceOf[reflect.internal.SymbolTable]
+ val CTpe = reflect.runtime.universe.typeOf[p.C].asInstanceOf[symtab.Type]
+ val TClass = reflect.runtime.universe.symbolOf[p.T[_, _]].asInstanceOf[symtab.Symbol]
+ import symtab._
+ val from = CTpe.member(TermName("test")).paramss.head.head
+ assert(from.baseClasses contains TClass)
+ assert(from.info.baseTypeIndex(TClass) != -1) // was failing!
+ }
+}
diff --git a/test/files/run/t5313.check b/test/files/run/t5313.check
deleted file mode 100644
index 7a48b2b711..0000000000
--- a/test/files/run/t5313.check
+++ /dev/null
@@ -1,12 +0,0 @@
-STORE_LOCAL(variable kept1)
-STORE_LOCAL(value result)
-STORE_LOCAL(variable kept1)
-STORE_LOCAL(variable kept2)
-STORE_LOCAL(value kept3)
-STORE_LOCAL(variable kept2)
-STORE_LOCAL(variable kept4)
-STORE_LOCAL(variable kept4)
-STORE_LOCAL(variable kept5)
-STORE_LOCAL(variable kept5)
-STORE_LOCAL(variable kept6)
-STORE_LOCAL(variable kept6)
diff --git a/test/files/run/t5313.scala b/test/files/run/t5313.scala
deleted file mode 100644
index 7f5af74c3f..0000000000
--- a/test/files/run/t5313.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-import scala.tools.partest.IcodeComparison
-
-object Test extends IcodeComparison {
- override def printIcodeAfterPhase = "dce"
-
- override def extraSettings: String = super.extraSettings + " -optimize"
-
- override def code =
- """class Foo {
- def randomBoolean = scala.util.Random.nextInt % 2 == 0
- def bar = {
- var kept1 = new Object
- val result = new java.lang.ref.WeakReference(kept1)
- kept1 = null // we can't eliminate this assignment because result can observe
- // when the object has no more references. See SI-5313
- kept1 = new Object // but we can eliminate this one because kept1 has already been clobbered
- var erased2 = null // we can eliminate this store because it's never used
- val erased3 = erased2 // and this
- var erased4 = erased2 // and this
- val erased5 = erased4 // and this
- var kept2: Object = new Object // ultimately can't be eliminated
- while(randomBoolean) {
- val kept3 = kept2
- kept2 = null // this can't, because it clobbers kept2, which is used
- erased4 = null // safe to eliminate
- println(kept3)
- }
- var kept4 = new Object // have to keep, it's used
- try
- println(kept4)
- catch {
- case _ : Throwable => kept4 = null // have to keep, it clobbers kept4 which is used
- }
- var kept5 = new Object
- print(kept5)
- kept5 = null // can't eliminate it's a clobber and it's used
- print(kept5)
- kept5 = null // can eliminate because we don't care about clobbers of nulls
- while(randomBoolean) {
- var kept6: AnyRef = null // not used, but have to keep because it clobbers the next used store
- // on the back edge of the loop
- kept6 = new Object // used
- println(kept6)
- }
- result
- }
- }""".stripMargin
-
- override def show() {
- val storeLocal = "STORE_LOCAL"
- val lines1 = collectIcode() filter (_ contains storeLocal) map (x => x.drop(x.indexOf(storeLocal)))
- println(lines1 mkString "\n")
- }
-}
diff --git a/test/files/run/t5375.check b/test/files/run/t5375.check
index b1a57eeeec..e69de29bb2 100644
--- a/test/files/run/t5375.check
+++ b/test/files/run/t5375.check
@@ -1 +0,0 @@
-Runtime exception
diff --git a/test/files/run/t5375.scala b/test/files/run/t5375.scala
index 826ecd841e..2028b6f05d 100644
--- a/test/files/run/t5375.scala
+++ b/test/files/run/t5375.scala
@@ -1,8 +1,16 @@
object Test extends App {
val foos = (1 to 1000).toSeq
- try
- foos.par.map(i => if (i % 37 == 0) sys.error("i div 37") else i)
- catch {
- case ex: RuntimeException => println("Runtime exception")
+ try {
+ foos.par.map(i => if (i % 37 == 0) throw new MultipleOf37Exception(i) else i)
+ assert(false)
+ } catch {
+ case ex: MultipleOf37Exception =>
+ assert(ex.getSuppressed.size > 0)
+ assert(ex.getSuppressed.forall(_.isInstanceOf[MultipleOf37Exception]))
+ assert(ex.i == 37)
+ assert(ex.getSuppressed.map(_.asInstanceOf[MultipleOf37Exception].i).toList == List(74, 148, 259, 518))
+ case _: Throwable =>
+ assert(false)
}
+ class MultipleOf37Exception(val i: Int) extends RuntimeException
}
diff --git a/test/files/run/t5380.check b/test/files/run/t5380.check
index 731a798301..19471ac2d2 100644
--- a/test/files/run/t5380.check
+++ b/test/files/run/t5380.check
@@ -1,7 +1,7 @@
-t5380.scala:3: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t5380.scala:3: warning: a pure expression does nothing in statement position
val f = () => return try { 1 } catch { case _: Throwable => 0 }
^
-t5380.scala:3: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t5380.scala:3: warning: a pure expression does nothing in statement position
val f = () => return try { 1 } catch { case _: Throwable => 0 }
^
t5380.scala:3: warning: enclosing method main has result type Unit: return value discarded
diff --git a/test/files/run/t5428.check b/test/files/run/t5428.check
index 52fce09399..d298f0ef10 100644
--- a/test/files/run/t5428.check
+++ b/test/files/run/t5428.check
@@ -1,2 +1,2 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
Stack(8, 7, 6, 5, 4, 3)
diff --git a/test/files/run/t5463.scala b/test/files/run/t5463.scala
new file mode 100644
index 0000000000..30b8306156
--- /dev/null
+++ b/test/files/run/t5463.scala
@@ -0,0 +1,21 @@
+import scala.reflect.internal.FatalError
+import scala.tools.partest.DirectTest
+
+object Test extends DirectTest {
+
+ def code = "class A"
+
+ override def show(): Unit = {
+ // Create a broken JAR file and put it on compiler classpath
+ val jarpath = testOutput.path + "/notajar.jar"
+ scala.reflect.io.File(jarpath).writeAll("This isn't really a JAR file")
+
+ val classpath = List(sys.props("partest.lib"), jarpath, testOutput.path) mkString sys.props("path.separator")
+ try {
+ compileString(newCompiler("-cp", classpath, "-d", testOutput.path))(code)
+ throw new Error("Compilation should have failed");
+ } catch {
+ case ex: FatalError => // this is expected
+ }
+ }
+}
diff --git a/test/files/run/t5535.scala b/test/files/run/t5535.scala
index 7bc12f3470..2833b9c94b 100644
--- a/test/files/run/t5535.scala
+++ b/test/files/run/t5535.scala
@@ -7,4 +7,11 @@ println(h()(5))
val f = h() _
println(f(10))
"""
+
+ // replace indylambda function names by <function1>
+ override def eval() = {
+ val lines = super.eval
+ val r = """\$\$Lambda.*""".r
+ lines.map(l => r.replaceAllIn(l, "<function1>"))
+ }
}
diff --git a/test/files/run/t5552.check b/test/files/run/t5552.check
index a19a60840e..73ad9cf824 100644
--- a/test/files/run/t5552.check
+++ b/test/files/run/t5552.check
@@ -1,2 +1,6 @@
+lazy: 3
(3,3)
+(3,3)
+lazy: 3.0
+(3.0,3.0)
(3.0,3.0)
diff --git a/test/files/run/t5552.scala b/test/files/run/t5552.scala
index afb8a1f0be..5b717f9e13 100644
--- a/test/files/run/t5552.scala
+++ b/test/files/run/t5552.scala
@@ -1,10 +1,14 @@
class C[@specialized(Int) A](a:A) {
- lazy val b = (a, a)
+ lazy val b = {println(s"lazy: $a"); (a, a)} // there should only be two instances of "lazy" in the output
def c = b
}
object Test {
def main(args:Array[String]) {
- println(new C(3).c)
- println(new C(3.0).c)
+ val cInt = new C(3)
+ println(cInt.c)
+ println(cInt.c)
+ val cFloat = new C(3.0)
+ println(cFloat.c)
+ println(cFloat.c)
}
}
diff --git a/test/files/run/t5652.check b/test/files/run/t5652.check
index 11438ef217..1acd924c68 100644
--- a/test/files/run/t5652.check
+++ b/test/files/run/t5652.check
@@ -1,8 +1,9 @@
-public static final int T1$class.g$1(T1)
-public static int T1$class.f0(T1)
-public static void T1$class.$init$(T1)
-public final int A1.A1$$g$2()
+public default int T1.f0()
+public static int T1.T1$$g$1()
+public static int T1.f0$(T1)
+public static void T1.$init$(T1)
public int A1.f1()
-public final int A2.A2$$g$1()
+public static final int A1.A1$$g$2()
public int A2.f0()
public int A2.f2()
+public static final int A2.A2$$g$1()
diff --git a/test/files/run/t5652/t5652_2.scala b/test/files/run/t5652/t5652_2.scala
index 765d16f8f5..d1de937e31 100644
--- a/test/files/run/t5652/t5652_2.scala
+++ b/test/files/run/t5652/t5652_2.scala
@@ -4,6 +4,6 @@ class A2 extends A1 with T1{
object Test extends A2 {
def main(args: Array[String]) {
- println(Seq(Class.forName(classOf[T1].getName + "$class"), classOf[A1], classOf[A2]).flatMap(_.getDeclaredMethods.map(_.toString).sorted).mkString("\n"))
+ println(Seq(classOf[T1], classOf[A1], classOf[A2]).flatMap(_.getDeclaredMethods.map(_.toString).sorted).mkString("\n"))
}
}
diff --git a/test/files/run/t5652b.check b/test/files/run/t5652b.check
index ca9d0a74f0..0f4290796f 100644
--- a/test/files/run/t5652b.check
+++ b/test/files/run/t5652b.check
@@ -1,4 +1,4 @@
-private final int A1.g$1()
+private static final int A1.g$1()
public int A1.f1()
-private final int A2.g$1()
+private static final int A2.g$1()
public int A2.f2()
diff --git a/test/files/run/t5652c.check b/test/files/run/t5652c.check
index 3b889e066d..5a6d535f02 100644
--- a/test/files/run/t5652c.check
+++ b/test/files/run/t5652c.check
@@ -1,6 +1,6 @@
-public final int A1.A1$$g$1()
-public final int A1.A1$$g$2()
public int A1.f1()
public int A1.f2()
+public static final int A1.A1$$g$1()
+public static final int A1.A1$$g$2()
1
2
diff --git a/test/files/run/t5676.flags b/test/files/run/t5676.flags
index e1b37447c9..73f1330c31 100644
--- a/test/files/run/t5676.flags
+++ b/test/files/run/t5676.flags
@@ -1 +1 @@
--Xexperimental \ No newline at end of file
+-Yoverride-objects
diff --git a/test/files/run/t5699.check b/test/files/run/t5699.check
index df19644ae6..8d19ecd321 100644
--- a/test/files/run/t5699.check
+++ b/test/files/run/t5699.check
@@ -1,10 +1,10 @@
[[syntax trees at end of parser]] // annodef.java
package <empty> {
object MyAnnotation extends {
- def <init>() = _
+ def <init>()
};
class MyAnnotation extends scala.annotation.Annotation with _root_.java.lang.annotation.Annotation with scala.annotation.ClassfileAnnotation {
- def <init>() = _;
+ def <init>();
def value(): String
}
}
diff --git a/test/files/run/t576.check b/test/files/run/t576.check
index 22f3843abf..2934e395ba 100644
--- a/test/files/run/t576.check
+++ b/test/files/run/t576.check
@@ -1,4 +1,4 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
1
2
3
diff --git a/test/files/run/t5789.scala b/test/files/run/t5789.scala
index 461f6a4aae..893294b56b 100644
--- a/test/files/run/t5789.scala
+++ b/test/files/run/t5789.scala
@@ -5,10 +5,17 @@ import scala.tools.partest.ReplTest
object Test extends ReplTest {
- override def extraSettings = "-Yinline"
+ override def extraSettings = "-opt:l:classpath"
def code = """
val n = 2
() => n
"""
+
+ // replace indylambda function names by <function0>
+ override def eval() = {
+ val lines = super.eval
+ val r = """\$\$Lambda.*""".r
+ lines.map(l => r.replaceAllIn(l, "<function0>"))
+ }
}
diff --git a/test/files/run/t5880.scala b/test/files/run/t5880.scala
index f88df90160..284ba03ff6 100644
--- a/test/files/run/t5880.scala
+++ b/test/files/run/t5880.scala
@@ -1,8 +1,5 @@
-
-import scala.collection.JavaConversions._
-
-
+import scala.collection.convert.ImplicitConversionsToJava._
object Test {
diff --git a/test/files/run/t5943a1.check b/test/files/run/t5943a1.check
index 9f4d160af8..4b683a3da5 100644
--- a/test/files/run/t5943a1.check
+++ b/test/files/run/t5943a1.check
@@ -1 +1 @@
-scala.this.Predef.intWrapper(1).to(3).map[Int, scala.collection.immutable.IndexedSeq[Int]](((x$1: Int) => x$1.+(1)))(immutable.this.IndexedSeq.canBuildFrom[Int])
+scala.Predef.intWrapper(1).to(3).map[Int, scala.collection.immutable.IndexedSeq[Int]](((x$1: Int) => x$1.+(1)))(immutable.this.IndexedSeq.canBuildFrom[Int])
diff --git a/test/files/run/t6023.check b/test/files/run/t6023.check
index ee93565234..dd6d8f1f1c 100644
--- a/test/files/run/t6023.check
+++ b/test/files/run/t6023.check
@@ -1,12 +1,12 @@
{
abstract trait Foo extends AnyRef {
- <stable> <accessor> def a: Int
+ val a: Int
};
()
}
{
abstract trait Foo extends AnyRef {
- <stable> <accessor> def a: Int
+ <stable> <accessor> val a: Int
};
()
}
diff --git a/test/files/run/t6028.check b/test/files/run/t6028.check
index edc8b22d6d..05634fa8eb 100644
--- a/test/files/run/t6028.check
+++ b/test/files/run/t6028.check
@@ -15,7 +15,7 @@ package <empty> {
}
};
def bar(barParam: Int): Object = {
- @volatile var MethodLocalObject$module: runtime.VolatileObjectRef = scala.runtime.VolatileObjectRef.zero();
+ lazy <artifact> val MethodLocalObject$module: scala.runtime.LazyRef = new scala.runtime.LazyRef();
T.this.MethodLocalObject$1(barParam, MethodLocalObject$module)
};
def tryy(tryyParam: Int): Function0 = {
@@ -38,28 +38,30 @@ package <empty> {
<synthetic> <paramaccessor> private[this] val methodLocal$1: Int = _
};
abstract trait MethodLocalTrait$1 extends Object {
+ def /*MethodLocalTrait$1*/$init$(barParam$1: Int): Unit = {
+ ()
+ };
+ scala.Predef.print(scala.Int.box(barParam$1));
<synthetic> <stable> <artifact> def $outer(): T
};
object MethodLocalObject$2 extends Object with T#MethodLocalTrait$1 {
def <init>($outer: T, barParam$1: Int): T#MethodLocalObject$2.type = {
MethodLocalObject$2.super.<init>();
- MethodLocalObject$2.this.$asInstanceOf[T#MethodLocalTrait$1$class]()./*MethodLocalTrait$1$class*/$init$(barParam$1);
+ MethodLocalObject$2.super./*MethodLocalTrait$1*/$init$(barParam$1);
()
};
<synthetic> <paramaccessor> <artifact> private[this] val $outer: T = _;
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer;
<synthetic> <stable> <artifact> def $outer(): T = MethodLocalObject$2.this.$outer
};
- final <stable> private[this] def MethodLocalObject$1(barParam$1: Int, MethodLocalObject$module$1: runtime.VolatileObjectRef): T#MethodLocalObject$2.type = {
- MethodLocalObject$module$1.elem = new T#MethodLocalObject$2.type(T.this, barParam$1);
- MethodLocalObject$module$1.elem.$asInstanceOf[T#MethodLocalObject$2.type]()
- };
- abstract trait MethodLocalTrait$1$class extends Object with T#MethodLocalTrait$1 {
- def /*MethodLocalTrait$1$class*/$init$(barParam$1: Int): Unit = {
- ()
- };
- scala.this.Predef.print(scala.Int.box(barParam$1))
- };
+ final <artifact> private[this] def MethodLocalObject$lzycompute$1(barParam$1: Int, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = MethodLocalObject$module$1.synchronized[T#MethodLocalObject$2.type](if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ MethodLocalObject$module$1.initialize(new T#MethodLocalObject$2.type(T.this, barParam$1)).$asInstanceOf[T#MethodLocalObject$2.type]());
+ final private[this] def MethodLocalObject$1(barParam$1: Int, MethodLocalObject$module$1: scala.runtime.LazyRef): T#MethodLocalObject$2.type = if (MethodLocalObject$module$1.initialized())
+ MethodLocalObject$module$1.value().$asInstanceOf[T#MethodLocalObject$2.type]()
+ else
+ T.this.MethodLocalObject$lzycompute$1(barParam$1, MethodLocalObject$module$1);
@SerialVersionUID(value = 0) final <synthetic> class $anonfun$tryy$1 extends scala.runtime.AbstractFunction0$mcV$sp with Serializable {
def <init>($outer: T, tryyParam$1: Int, tryyLocal$1: runtime.IntRef): <$anon: Function0> = {
$anonfun$tryy$1.super.<init>();
diff --git a/test/files/run/t6089.scala b/test/files/run/t6089.scala
index c72d7ba792..c42a9f68c6 100644
--- a/test/files/run/t6089.scala
+++ b/test/files/run/t6089.scala
@@ -3,7 +3,7 @@ case class Foo(x: Int)
object Test {
def bippo(result: Boolean): Boolean = result
def bungus(m: Foo): Boolean =
- bippo(m match { case Foo(2) => bungus(m) })
+ bippo((m: @unchecked) match { case Foo(2) => bungus(m) })
def main(args: Array[String]): Unit = try {
bungus(Foo(0))
diff --git a/test/files/run/t6102.check b/test/files/run/t6102.check
index 07378f5ed4..ce01362503 100644
--- a/test/files/run/t6102.check
+++ b/test/files/run/t6102.check
@@ -1,37 +1 @@
-[running phase parser on t6102.scala]
-[running phase namer on t6102.scala]
-[running phase packageobjects on t6102.scala]
-[running phase typer on t6102.scala]
-[running phase patmat on t6102.scala]
-[running phase superaccessors on t6102.scala]
-[running phase extmethods on t6102.scala]
-[running phase pickler on t6102.scala]
-[running phase refchecks on t6102.scala]
-[running phase uncurry on t6102.scala]
-[running phase tailcalls on t6102.scala]
-[running phase specialize on t6102.scala]
-[running phase explicitouter on t6102.scala]
-[running phase erasure on t6102.scala]
-[running phase posterasure on t6102.scala]
-[running phase lazyvals on t6102.scala]
-[running phase lambdalift on t6102.scala]
-[running phase constructors on t6102.scala]
-[running phase flatten on t6102.scala]
-[running phase mixin on t6102.scala]
-[running phase cleanup on t6102.scala]
-[running phase delambdafy on t6102.scala]
-[running phase icode on t6102.scala]
-#partest -optimise
-[running phase inliner on t6102.scala]
-[running phase inlinehandlers on t6102.scala]
-[running phase closelim on t6102.scala]
-[running phase constopt on t6102.scala]
-#partest
-[running phase dce on t6102.scala]
-#partest !-Ybackend:GenBCode
-[running phase jvm on icode]
-#partest -Ybackend:GenBCode
-[running phase jvm on t6102.scala]
-[running phase jvm on t6102.scala]
-#partest
hello
diff --git a/test/files/run/t6102.flags b/test/files/run/t6102.flags
index 726e2a997f..7f938c550f 100644
--- a/test/files/run/t6102.flags
+++ b/test/files/run/t6102.flags
@@ -1 +1 @@
--Ydead-code -Ydebug -Xfatal-warnings
+-opt:l:classpath -Xfatal-warnings
diff --git a/test/files/run/t6111.check b/test/files/run/t6111.check
index 5880658001..99f9c551b2 100644
--- a/test/files/run/t6111.check
+++ b/test/files/run/t6111.check
@@ -1,3 +1,3 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
(8,8)
(x,x)
diff --git a/test/files/run/t6188.flags b/test/files/run/t6188.flags
index 0ebca3e7af..768ca4f13b 100644
--- a/test/files/run/t6188.flags
+++ b/test/files/run/t6188.flags
@@ -1 +1 @@
- -optimize
+-opt:l:classpath \ No newline at end of file
diff --git a/test/files/run/t6198.scala b/test/files/run/t6198.scala
index 5aa8f1c1cf..65dbaf8160 100644
--- a/test/files/run/t6198.scala
+++ b/test/files/run/t6198.scala
@@ -1,13 +1,6 @@
import scala.collection.immutable._
object Test extends App {
- // test that ListSet.tail does not use a builder
- // we can't test for O(1) behavior, so the best we can do is to
- // check that ls.tail always returns the same instance
- val ls = ListSet.empty[Int] + 1 + 2
-
- if(ls.tail ne ls.tail)
- println("ListSet.tail should not use a builder!")
// class that always causes hash collisions
case class Collision(value:Int) { override def hashCode = 0 }
diff --git a/test/files/run/t6240-universe-code-gen.scala b/test/files/run/t6240-universe-code-gen.scala
index 60e1f76b54..80b60bab7e 100644
--- a/test/files/run/t6240-universe-code-gen.scala
+++ b/test/files/run/t6240-universe-code-gen.scala
@@ -54,7 +54,7 @@ object Test extends App {
|
|${forceCode("this", JavaUniverseTpe)}
|${forceCode("definitions", DefinitionsModule.info)}
- |${forceCode("refChecks", typeOf[scala.reflect.internal.transform.RefChecks])}
+ |
|${forceCode("uncurry", typeOf[scala.reflect.internal.transform.UnCurry])}
|${forceCode("erasure", typeOf[scala.reflect.internal.transform.Erasure])}
| }
diff --git a/test/files/run/t6260-delambdafy.check b/test/files/run/t6260-delambdafy.check
index b2a7bed988..2fea68afb1 100644
--- a/test/files/run/t6260-delambdafy.check
+++ b/test/files/run/t6260-delambdafy.check
@@ -1,4 +1,4 @@
f(C@2e)
-Test$lambda$1$$apply
apply
+writeReplace
diff --git a/test/files/run/t6260-delambdafy.flags b/test/files/run/t6260-delambdafy.flags
deleted file mode 100644
index 48b438ddf8..0000000000
--- a/test/files/run/t6260-delambdafy.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ydelambdafy:method
diff --git a/test/files/run/t6260c.check b/test/files/run/t6260c.check
index 78e9b27371..388f6690d6 100644
--- a/test/files/run/t6260c.check
+++ b/test/files/run/t6260c.check
@@ -1,9 +1,5 @@
f(C@2e)
-#partest !-Ydelambdafy:method
-Test$$anonfun$$apply
-#partest -Ydelambdafy:method
-Test$lambda$1$$apply
-#partest
apply
+writeReplace
g(C@2e)
diff --git a/test/files/run/t6288.check b/test/files/run/t6288.check
index a032a10de6..7933f516a8 100644
--- a/test/files/run/t6288.check
+++ b/test/files/run/t6288.check
@@ -7,7 +7,7 @@
};
[21]def unapply([29]z: [32]<type: [32]scala.Any>): [21]Option[Int] = [56][52][52]scala.Some.apply[[52]Int]([58]-1);
[64]{
- [64]case <synthetic> val x1: [64]Any = [64]"";
+ [64]case <synthetic> val x1: [64]String = [64]"";
[64]case5()[84]{
[84]<synthetic> val o7: [84]Option[Int] = [84][84]Case3.unapply([84]x1);
[84]if ([84]o7.isEmpty.unary_!)
@@ -30,14 +30,11 @@
};
[127]def unapplySeq([138]z: [141]<type: [141]scala.Any>): [127]Option[List[Int]] = [167]scala.None;
[175]{
- [175]case <synthetic> val x1: [175]Any = [175]"";
+ [175]case <synthetic> val x1: [175]String = [175]"";
[175]case5()[195]{
[195]<synthetic> val o7: [195]Option[List[Int]] = [195][195]Case4.unapplySeq([195]x1);
- [195]if ([195]o7.isEmpty.unary_!)
- [195]if ([195][195][195][195]o7.get.!=([195]null).&&([195][195][195][195]o7.get.lengthCompare([195]1).==([195]0)))
- [208][208]matchEnd4([208]())
- else
- [195][195]case6()
+ [195]if ([195][195]o7.isEmpty.unary_!.&&([195][195][195][195]o7.get.!=([195]null).&&([195][195][195][195]o7.get.lengthCompare([195]1).==([195]0))))
+ [208][208]matchEnd4([208]())
else
[195][195]case6()
};
@@ -56,14 +53,11 @@
};
[238]def unapply([246]z: [249]<type: [249]scala.Any>): [238]Boolean = [265]true;
[273]{
- [273]case <synthetic> val x1: [273]Any = [273]"";
+ [273]case <synthetic> val x1: [273]String = [273]"";
[273]case5()[293]{
[293]<synthetic> val o7: [293]Option[List[Int]] = [293][293]Case4.unapplySeq([293]x1);
- [293]if ([293]o7.isEmpty.unary_!)
- [293]if ([293][293][293][293]o7.get.!=([293]null).&&([293][293][293][293]o7.get.lengthCompare([293]0).==([293]0)))
- [304][304]matchEnd4([304]())
- else
- [293][293]case6()
+ [293]if ([293][293]o7.isEmpty.unary_!.&&([293][293][293][293]o7.get.!=([293]null).&&([293][293][293][293]o7.get.lengthCompare([293]0).==([293]0))))
+ [304][304]matchEnd4([304]())
else
[293][293]case6()
};
diff --git a/test/files/run/t6288b-jump-position.check b/test/files/run/t6288b-jump-position.check
deleted file mode 100644
index ece88b18f0..0000000000
--- a/test/files/run/t6288b-jump-position.check
+++ /dev/null
@@ -1,76 +0,0 @@
-object Case3 extends Object {
- // fields:
-
- // methods
- def unapply(z: Object (REF(class Object))): Option {
- locals: value z
- startBlock: 1
- blocks: [1]
-
- 1:
- 2 NEW REF(class Some)
- 2 DUP(REF(class Some))
- 2 CONSTANT(-1)
- 2 BOX INT
- 2 CALL_METHOD scala.Some.<init> (static-instance)
- 2 RETURN(REF(class Option))
-
- }
- Exception handlers:
-
- def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, value x1, value x
- startBlock: 1
- blocks: [1,2,3,6,7]
-
- 1:
- 4 CONSTANT("")
- 4 STORE_LOCAL(value x1)
- 4 SCOPE_ENTER value x1
- 4 JUMP 2
-
- 2:
- 5 LOAD_LOCAL(value x1)
- 5 IS_INSTANCE REF(class String)
- 5 CZJUMP (BOOL)NE ? 3 : 6
-
- 3:
- 6 LOAD_MODULE object Predef
- 6 CONSTANT("case 0")
- 6 CALL_METHOD scala.Predef.println (dynamic)
- 6 LOAD_FIELD scala.runtime.BoxedUnit.UNIT
- 6 STORE_LOCAL(value x)
- 6 JUMP 7
-
- 6:
- 8 LOAD_MODULE object Predef
- 8 CONSTANT("default")
- 8 CALL_METHOD scala.Predef.println (dynamic)
- 8 LOAD_FIELD scala.runtime.BoxedUnit.UNIT
- 8 STORE_LOCAL(value x)
- 8 JUMP 7
-
- 7:
- 10 LOAD_MODULE object Predef
- 10 CONSTANT("done")
- 10 CALL_METHOD scala.Predef.println (dynamic)
- 10 RETURN(UNIT)
-
- }
- Exception handlers:
-
- def <init>(): Case3.type {
- locals:
- startBlock: 1
- blocks: [1]
-
- 1:
- 12 THIS(Case3)
- 12 CALL_METHOD java.lang.Object.<init> (super())
- 12 RETURN(UNIT)
-
- }
- Exception handlers:
-
-
-}
diff --git a/test/files/run/t6288b-jump-position.scala b/test/files/run/t6288b-jump-position.scala
deleted file mode 100644
index c5f3bbe788..0000000000
--- a/test/files/run/t6288b-jump-position.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-import scala.tools.partest.IcodeComparison
-
-object Test extends IcodeComparison {
- override def code =
- """object Case3 { // 01
- | def unapply(z: Any): Option[Int] = Some(-1) // 02
- | def main(args: Array[String]) { // 03
- | ("": Any) match { // 04
- | case x : String => // 05 Read: <linenumber> JUMP <target basic block id>
- | println("case 0") // 06 expecting "6 JUMP 7", was "8 JUMP 7"
- | case _ => // 07
- | println("default") // 08 expecting "8 JUMP 7"
- | } // 09
- | println("done") // 10
- | }
- |}""".stripMargin
-
- override def show() = showIcode()
-}
diff --git a/test/files/run/t6292.check b/test/files/run/t6292.check
index 6f7430d5b8..f7b8f483ab 100644
--- a/test/files/run/t6292.check
+++ b/test/files/run/t6292.check
@@ -1 +1 @@
-warning: there were 7 deprecation warnings; re-run with -deprecation for details
+warning: there were 7 deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t6329_repl.check b/test/files/run/t6329_repl.check
index 8909c47e79..22882a3597 100644
--- a/test/files/run/t6329_repl.check
+++ b/test/files/run/t6329_repl.check
@@ -3,28 +3,28 @@ scala> import scala.reflect.classTag
import scala.reflect.classTag
scala> classManifest[scala.List[_]]
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.10.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
res0: scala.reflect.ClassTag[List[_]] = scala.collection.immutable.List[<?>]
scala> classTag[scala.List[_]]
res1: scala.reflect.ClassTag[List[_]] = scala.collection.immutable.List
scala> classManifest[scala.collection.immutable.List[_]]
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.10.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
res2: scala.reflect.ClassTag[List[_]] = scala.collection.immutable.List[<?>]
scala> classTag[scala.collection.immutable.List[_]]
res3: scala.reflect.ClassTag[List[_]] = scala.collection.immutable.List
scala> classManifest[Predef.Set[_]]
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.10.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
res4: scala.reflect.ClassTag[scala.collection.immutable.Set[_]] = scala.collection.immutable.Set[<?>]
scala> classTag[Predef.Set[_]]
res5: scala.reflect.ClassTag[scala.collection.immutable.Set[_]] = scala.collection.immutable.Set
scala> classManifest[scala.collection.immutable.Set[_]]
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.10.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
res6: scala.reflect.ClassTag[scala.collection.immutable.Set[_]] = scala.collection.immutable.Set[<?>]
scala> classTag[scala.collection.immutable.Set[_]]
diff --git a/test/files/run/t6329_repl_bug.check b/test/files/run/t6329_repl_bug.check
index 4b539f9e58..11decae9bd 100644
--- a/test/files/run/t6329_repl_bug.check
+++ b/test/files/run/t6329_repl_bug.check
@@ -6,7 +6,7 @@ scala> import scala.reflect.runtime._
import scala.reflect.runtime._
scala> classManifest[List[_]]
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.10.0); for details, enable `:setting -deprecation' or `:replay -deprecation'
res0: scala.reflect.ClassTag[List[_]] = scala.collection.immutable.List[<?>]
scala> scala.reflect.classTag[List[_]]
diff --git a/test/files/run/t6329_vanilla_bug.check b/test/files/run/t6329_vanilla_bug.check
index 01bf0636ea..4e139dd954 100644
--- a/test/files/run/t6329_vanilla_bug.check
+++ b/test/files/run/t6329_vanilla_bug.check
@@ -1,3 +1,3 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.10.0); re-run with -deprecation for details
scala.collection.immutable.List[<?>]
scala.collection.immutable.List
diff --git a/test/files/run/t6331b.check b/test/files/run/t6331b.check
index 6ca09e3814..565348ce3f 100644
--- a/test/files/run/t6331b.check
+++ b/test/files/run/t6331b.check
@@ -10,19 +10,19 @@ else
-0.0
res: Double = 0.0
-trace> Test.this.intercept.apply[Any](if (scala.this.Predef.???)
+trace> Test.this.intercept.apply[Any](if (scala.Predef.???)
-0.0
else
0.0)
res: Any = class scala.NotImplementedError
-trace> Test.this.intercept.apply[Any](if (scala.this.Predef.???)
+trace> Test.this.intercept.apply[Any](if (scala.Predef.???)
0.0
else
0.0)
res: Any = class scala.NotImplementedError
-trace> Test.this.intercept.apply[Any](if (scala.this.Predef.???)
+trace> Test.this.intercept.apply[Any](if (scala.Predef.???)
()
else
())
diff --git a/test/files/run/t6434.scala b/test/files/run/t6434.scala
index e4a4579613..6b6a783299 100644
--- a/test/files/run/t6434.scala
+++ b/test/files/run/t6434.scala
@@ -5,4 +5,11 @@ object Test extends ReplTest {
"""def f(x: => Int): Int = x
f _
"""
+
+ // replace indylambda function names by <function1>
+ override def eval() = {
+ val lines = super.eval
+ val r = """\$\$Lambda.*""".r
+ lines.map(l => r.replaceAllIn(l, "<function1>"))
+ }
}
diff --git a/test/files/run/t6481.check b/test/files/run/t6481.check
index 4a3f6f7ee9..0535110f75 100644
--- a/test/files/run/t6481.check
+++ b/test/files/run/t6481.check
@@ -1,4 +1,4 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
delayed init
new foo(1, 2)
delayed init
diff --git a/test/files/run/t6502.scala b/test/files/run/t6502.scala
index f4fc39a03d..cb2b3ff449 100644
--- a/test/files/run/t6502.scala
+++ b/test/files/run/t6502.scala
@@ -1,6 +1,5 @@
import scala.tools.nsc.Settings
import scala.tools.nsc.interpreter.{ ILoop, replProps }
-import scala.tools.nsc.settings.ClassPathRepresentationType
import scala.tools.partest._
object Test extends StoreReporterDirectTest {
@@ -14,14 +13,6 @@ object Test extends StoreReporterDirectTest {
compileString(newCompiler("-cp", classpath, "-d", s"${testOutput.path}/$jarFileName"))(code)
}
- // TODO flat classpath doesn't support the classpath invalidation yet so we force using the recursive one
- // it's the only test which needed such a workaround
- override def settings = {
- val settings = new Settings
- settings.YclasspathImpl.value = ClassPathRepresentationType.Recursive
- settings
- }
-
def app1 = """
package test
@@ -72,9 +63,8 @@ object Test extends StoreReporterDirectTest {
s"[${added}] in [${output.lines.mkString("/")}]"
)
lines = lines drop promptLength
- assert {
- lines.next.contains("testing...")
- }
+ val r = lines.next
+ assert(r.contains("testing..."), r)
}
def test2(): Unit = {
@@ -91,14 +81,10 @@ object Test extends StoreReporterDirectTest {
var lines = output.lines.drop(headerLength)
lines = lines drop promptLength
val added = lines.next
- assert {
- added.contains("Added") && added.contains("test1.jar")
- }
+ assert(added.contains("Added") && added.contains("test1.jar"), added)
lines = lines drop promptLength
val msg = lines.next
- assert {
- msg.contains("test2.jar") && msg.contains("existing classpath entries conflict")
- }
+ assert(msg.contains("test2.jar") && msg.contains("contains a classfile that already exists on the classpath: test.Test$"), msg)
}
def test3(): Unit = {
@@ -116,13 +102,10 @@ object Test extends StoreReporterDirectTest {
var lines = output.lines.drop(headerLength)
lines = lines drop promptLength
val added = lines.next
- assert {
- added.contains("Added") && added.contains("test1.jar")
- }
+ assert(added.contains("Added") && added.contains("test1.jar"), added)
lines = lines drop (2 * promptLength + 1)
- assert {
- lines.next.contains("new object in existing package")
- }
+ val r = lines.next
+ assert(r.contains("new object in existing package"), r)
}
def test4(): Unit = {
@@ -136,14 +119,10 @@ object Test extends StoreReporterDirectTest {
var lines = output.lines.drop(headerLength)
lines = lines drop promptLength
val added = lines.next
- assert {
- added.contains("Added") && added.contains("test1.jar")
- }
+ assert(added.contains("Added") && added.contains("test1.jar"), added)
lines = lines drop promptLength
val msg = lines.next
- assert {
- msg.contains("test1.jar") && msg.contains("existing classpath entries conflict")
- }
+ assert(msg.contains("test1.jar") && msg.contains("contains a classfile that already exists on the classpath: test.Test$"), msg)
}
def test5(): Unit = {
diff --git a/test/files/run/t6546.flags b/test/files/run/t6546.flags
deleted file mode 100644
index eb4d19bcb9..0000000000
--- a/test/files/run/t6546.flags
+++ /dev/null
@@ -1 +0,0 @@
--optimise \ No newline at end of file
diff --git a/test/files/run/t6546/A_1.scala b/test/files/run/t6546/A_1.scala
deleted file mode 100644
index bd086c08f8..0000000000
--- a/test/files/run/t6546/A_1.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-final class Opt {
- @inline def getOrElse(x: => String): String = ""
-}
-class A_1 {
- def f(x: Opt): String = x getOrElse null
-}
diff --git a/test/files/run/t6546/B_2.scala b/test/files/run/t6546/B_2.scala
deleted file mode 100644
index 64ec966f75..0000000000
--- a/test/files/run/t6546/B_2.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-import scala.tools.partest.BytecodeTest
-
-object Test extends BytecodeTest {
- def show: Unit = {
- val node = loadClassNode("A_1")
- assert(node.innerClasses.isEmpty, node.innerClasses)
- }
-}
diff --git a/test/files/run/t6554.scala b/test/files/run/t6554.scala
index 5d29d16666..eed139fea6 100644
--- a/test/files/run/t6554.scala
+++ b/test/files/run/t6554.scala
@@ -1,8 +1,14 @@
-trait Foo[A] {
+trait T1[A] {
def minBy[B](b: B): A = ???
}
-
-class Bar extends Foo[Int]
+
+// The second trait is needed to make sure there's a forwarder generated in Bar.
+// otherwise Bar.minBy is just the inherited default method from T1.
+trait T2[A] { self: T1[A] =>
+ override def minBy[B](b: B): A = ???
+}
+
+class Bar extends T1[Int] with T2[Int]
object Test extends App {
val sigs = classOf[Bar].getDeclaredMethods.map(m => s"${m.toString} / ${m.toGenericString}").sorted
diff --git a/test/files/run/t6634.check b/test/files/run/t6634.check
index f6cbb30c67..b085f397e6 100644
--- a/test/files/run/t6634.check
+++ b/test/files/run/t6634.check
@@ -4,27 +4,31 @@ String OK.
Length OK.
Trying lb1 ...
+java.lang.IndexOutOfBoundsException: at 6 deleting 6
Checking ...
String OK.
Length OK.
Trying lb2 ...
+java.lang.IndexOutOfBoundsException: at 99 deleting 6
Checking ...
String OK.
Length OK.
Trying lb3 ...
+java.lang.IndexOutOfBoundsException: at 1 deleting 9
Checking ...
String OK.
Length OK.
Trying lb4 ...
+java.lang.IndexOutOfBoundsException: at -1 deleting 1
Checking ...
String OK.
Length OK.
Trying lb5 ...
-java.lang.IllegalArgumentException: removing negative number (-1) of elements
+java.lang.IllegalArgumentException: removing negative number of elements: -1
Checking ...
String OK.
Length OK.
diff --git a/test/files/run/t6634.scala b/test/files/run/t6634.scala
index 759e6d519d..081cca7502 100644
--- a/test/files/run/t6634.scala
+++ b/test/files/run/t6634.scala
@@ -8,7 +8,7 @@ object Test extends App {
try {
lb0.remove(5, 0)
} catch {
- // Not thrown in 2.10, will be thrown in 2.11
+ // Should not be thrown--nothing is deleted so nothing to do
case ex: IndexOutOfBoundsException => println(ex)
}
checkNotCorrupted(lb0)
@@ -17,8 +17,8 @@ object Test extends App {
println("Trying lb1 ...")
try {
lb1.remove(6, 6)
- } catch {
- // Not thrown in 2.10, will be thrown in 2.11
+ } catch {
+ // Not thrown in 2.11, is thrown in 2.12
case ex: IndexOutOfBoundsException => println(ex)
}
checkNotCorrupted(lb1)
@@ -28,7 +28,7 @@ object Test extends App {
try {
lb2.remove(99, 6)
} catch {
- // Not thrown in 2.10, will be thrown in 2.11
+ // Not thrown in 2.11, is thrown in 2.12
case ex: IndexOutOfBoundsException => println(ex)
}
checkNotCorrupted(lb2)
@@ -38,26 +38,27 @@ object Test extends App {
try {
lb3.remove(1, 9)
} catch {
- // Not thrown in 2.10, will be thrown in 2.11
- case ex: IllegalArgumentException => println(ex)
+ // Not thrown in 2.11, is thrown in 2.12
+ case ex: IndexOutOfBoundsException => println(ex)
}
- checkNotCorrupted(lb3, "ListBuffer('a)", 1)
+ checkNotCorrupted(lb3)
val lb4 = newLB
println("Trying lb4 ...")
try {
lb4.remove(-1, 1)
} catch {
- // Not thrown in 2.10, will be thrown in 2.11
+ // Not thrown in 2.11, is thrown in 2.12
case ex: IndexOutOfBoundsException => println(ex)
}
- checkNotCorrupted(lb4, "ListBuffer('b, 'c, 'd, 'e)", 4)
+ checkNotCorrupted(lb4)
val lb5 = newLB
println("Trying lb5 ...")
try {
lb5.remove(1, -1)
} catch {
+ // Was thrown prior to 2.12 also
case ex: IllegalArgumentException => println(ex)
}
checkNotCorrupted(lb5)
@@ -77,4 +78,4 @@ object Test extends App {
else println("!!! length FAILED: " + len)
println()
}
-} \ No newline at end of file
+}
diff --git a/test/files/run/t6690.check b/test/files/run/t6690.check
index a9ecc29fea..f214cd8e6a 100644
--- a/test/files/run/t6690.check
+++ b/test/files/run/t6690.check
@@ -1 +1 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t6733.check b/test/files/run/t6733.check
index aeb595fbfd..811a7d8f70 100644
--- a/test/files/run/t6733.check
+++ b/test/files/run/t6733.check
@@ -2,24 +2,21 @@ method $init$: isPrivateThis = false, isProtectedThis = false
value pri1a: isPrivateThis = true, isProtectedThis = false
method pri2a: isPrivateThis = true, isProtectedThis = false
variable pri3a: isPrivateThis = true, isProtectedThis = false
-value pri4a: isPrivateThis = true, isProtectedThis = false
+variable pri3a: isPrivateThis = true, isProtectedThis = false
lazy value pri4a: isPrivateThis = true, isProtectedThis = false
type Pri5a: isPrivateThis = true, isProtectedThis = false
class Pri6: isPrivateThis = true, isProtectedThis = false
trait Pri7: isPrivateThis = true, isProtectedThis = false
object Pri8: isPrivateThis = true, isProtectedThis = false
value pro1a: isPrivateThis = false, isProtectedThis = true
-value pro1a: isPrivateThis = true, isProtectedThis = false
value pro1b: isPrivateThis = false, isProtectedThis = true
method pro2a: isPrivateThis = false, isProtectedThis = true
method pro2b: isPrivateThis = false, isProtectedThis = true
-method pro3a: isPrivateThis = false, isProtectedThis = true
-method pro3a_=: isPrivateThis = false, isProtectedThis = true
-variable pro3a: isPrivateThis = true, isProtectedThis = false
-method pro3b: isPrivateThis = false, isProtectedThis = true
-method pro3b_=: isPrivateThis = false, isProtectedThis = true
-value pro4a: isPrivateThis = false, isProtectedThis = true
-lazy value pro4a: isPrivateThis = true, isProtectedThis = false
+variable pro3a: isPrivateThis = false, isProtectedThis = true
+variable pro3a: isPrivateThis = false, isProtectedThis = true
+variable pro3b: isPrivateThis = false, isProtectedThis = true
+variable pro3b: isPrivateThis = false, isProtectedThis = true
+lazy value pro4a: isPrivateThis = false, isProtectedThis = true
type Pro5a: isPrivateThis = false, isProtectedThis = true
type Pro5b: isPrivateThis = false, isProtectedThis = true
class Pro6: isPrivateThis = false, isProtectedThis = true
diff --git a/test/files/run/t6827.check b/test/files/run/t6827.check
index 3a3a71c67d..4889e05be8 100644
--- a/test/files/run/t6827.check
+++ b/test/files/run/t6827.check
@@ -1,6 +1,6 @@
-start at -5: java.lang.IllegalArgumentException: requirement failed: start -5 out of range 10
-start at -1: java.lang.IllegalArgumentException: requirement failed: start -1 out of range 10
-start at limit: java.lang.IllegalArgumentException: requirement failed: start 10 out of range 10
+start at -5: java.lang.ArrayIndexOutOfBoundsException: -5
+start at -1: java.lang.ArrayIndexOutOfBoundsException: -1
+start at limit: ok
start at limit-1: ok
first 10: ok
read all: ok
@@ -8,8 +8,8 @@ test huge len: ok
5 from 5: ok
20 from 5: ok
test len overflow: ok
-start beyond limit: java.lang.IllegalArgumentException: requirement failed: start 30 out of range 10
+start beyond limit: ok
read 0: ok
read -1: ok
-invalid read 0: java.lang.IllegalArgumentException: requirement failed: start 30 out of range 10
-invalid read -1: java.lang.IllegalArgumentException: requirement failed: start 30 out of range 10
+invalid read 0: ok
+invalid read -1: ok
diff --git a/test/files/run/t6827.scala b/test/files/run/t6827.scala
index 8e17af09e2..eb020711bb 100644
--- a/test/files/run/t6827.scala
+++ b/test/files/run/t6827.scala
@@ -31,4 +31,24 @@ object Test extends App {
// okay, see SI-7128
"...".toIterator.copyToArray(new Array[Char](0), 0, 0)
+
+
+ // Bonus test from @som-snytt to check for overflow in
+ // index calculations.
+ def testOverflow(start: Int, len: Int, expected: List[Char]) {
+ def copyFromIterator = {
+ val arr = Array.fill[Char](3)('-')
+ "abc".toIterator.copyToArray(arr, start, len)
+ arr.toList
+ }
+ def copyFromArray = {
+ val arr = Array.fill[Char](3)('-')
+ "abc".toArray.copyToArray(arr, start, len)
+ arr.toList
+ }
+ assert(copyFromIterator == expected)
+ assert(copyFromArray == expected)
+ }
+ testOverflow(1, Int.MaxValue - 1, "-ab".toList)
+ testOverflow(1, Int.MaxValue, "-ab".toList)
}
diff --git a/test/files/run/t6863.check b/test/files/run/t6863.check
index d4df5f7a74..010e82a41e 100644
--- a/test/files/run/t6863.check
+++ b/test/files/run/t6863.check
@@ -10,4 +10,4 @@ t6863.scala:46: warning: comparing values of types Unit and Unit using `==' will
t6863.scala:59: warning: comparing values of types Unit and Unit using `==' will always yield true
assert({ () => x }.apply == ())
^
-warning: there were four deprecation warnings; re-run with -deprecation for details
+warning: there were four deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t6935.check b/test/files/run/t6935.check
index df1629dd7e..6fda32d713 100644
--- a/test/files/run/t6935.check
+++ b/test/files/run/t6935.check
@@ -1 +1 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t6955.scala b/test/files/run/t6955.scala
deleted file mode 100644
index 329af688e4..0000000000
--- a/test/files/run/t6955.scala
+++ /dev/null
@@ -1,34 +0,0 @@
-import scala.tools.partest.IcodeComparison
-
-// this class should compile to code that uses switches (twice)
-class Switches {
- type Tag = Byte
-
- def switchBad(i: Tag): Int = i match { // notice type of i is Tag = Byte
- case 1 => 1
- case 2 => 2
- case 3 => 3
- case _ => 0
- }
-
- // this worked before, should keep working
- def switchOkay(i: Byte): Int = i match {
- case 1 => 1
- case 2 => 2
- case 3 => 3
- case _ => 0
- }
-}
-
-object Test extends IcodeComparison {
- // ensure we get two switches out of this -- ignore the rest of the output for robustness
- // exclude the constant we emit for the "SWITCH ..." string below (we get the icode for all the code you see in this file)
- override def show() = {
- val expected = 2
- val actual = (collectIcode() filter {
- x => x.indexOf("SWITCH ...") >= 0 && x.indexOf("CONSTANT(") == -1
- }).size
- assert(actual == expected)
- }
-}
-
diff --git a/test/files/run/t6956.scala b/test/files/run/t6956.scala
deleted file mode 100644
index 3569adf483..0000000000
--- a/test/files/run/t6956.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-import scala.tools.partest.IcodeComparison
-
-class Switches {
- private[this] final val ONE = 1
-
- def switchBad(i: Byte): Int = i match {
- case ONE => 1
- case 2 => 2
- case 3 => 3
- case _ => 0
- }
-
- def switchOkay(i: Byte): Int = i match {
- case 1 => 1
- case 2 => 2
- case 3 => 3
- case _ => 0
- }
-}
-
-object Test extends IcodeComparison {
- // ensure we get two switches out of this -- ignore the rest of the output for robustness
- // exclude the constant we emit for the "SWITCH ..." string below (we get the icode for all the code you see in this file)
- override def show() = {
- val expected = 2
- val actual = (collectIcode() filter {
- x => x.indexOf("SWITCH ...") >= 0 && x.indexOf("CONSTANT(") == -1
- }).size
- assert(actual == expected)
- }
-}
diff --git a/test/files/run/t7008-scala-defined.flags b/test/files/run/t7008-scala-defined.flags
deleted file mode 100644
index 49f2d2c4c8..0000000000
--- a/test/files/run/t7008-scala-defined.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenASM
diff --git a/test/files/run/t7046-1/Macros_1.scala b/test/files/run/t7046-1/Macros_1.scala
deleted file mode 100644
index 2a5bf82f62..0000000000
--- a/test/files/run/t7046-1/Macros_1.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox.Context
-
-object Macros {
- def impl[T](c: Context)(implicit ttag: c.WeakTypeTag[T]): c.Expr[List[String]] = {
- import c.universe._;
- val ttpe = ttag.tpe
- val tsym = ttpe.typeSymbol.asClass
- val subclasses = tsym.knownDirectSubclasses.toList.map(_.name.toString)
-
- c.Expr[List[String]](q"$subclasses")
- }
-
- def knownDirectSubclasses[T]: List[String] = macro impl[T]
-}
diff --git a/test/files/run/t7046-1/Test_2.scala b/test/files/run/t7046-1/Test_2.scala
deleted file mode 100644
index 28459fde72..0000000000
--- a/test/files/run/t7046-1/Test_2.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-object Test extends App {
- val subs = Macros.knownDirectSubclasses[Foo]
- assert(subs == List("Wibble", "Wobble", "Bar", "Baz"))
-}
-
-sealed trait Foo
-object Foo {
- trait Wibble extends Foo
- case object Wobble extends Foo
-}
-
-trait Bar extends Foo
-
-object Blah {
- type Quux = Foo
-}
-
-import Blah._
-
-trait Baz extends Quux
-
-class Boz[T](t: T)
-class Unrelated extends Boz(Test.subs)
diff --git a/test/files/run/t7046-2/Macros_1.scala b/test/files/run/t7046-2/Macros_1.scala
deleted file mode 100644
index 2a5bf82f62..0000000000
--- a/test/files/run/t7046-2/Macros_1.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-import scala.language.experimental.macros
-import scala.reflect.macros.blackbox.Context
-
-object Macros {
- def impl[T](c: Context)(implicit ttag: c.WeakTypeTag[T]): c.Expr[List[String]] = {
- import c.universe._;
- val ttpe = ttag.tpe
- val tsym = ttpe.typeSymbol.asClass
- val subclasses = tsym.knownDirectSubclasses.toList.map(_.name.toString)
-
- c.Expr[List[String]](q"$subclasses")
- }
-
- def knownDirectSubclasses[T]: List[String] = macro impl[T]
-}
diff --git a/test/files/run/t7046-2/Test_2.scala b/test/files/run/t7046-2/Test_2.scala
deleted file mode 100644
index 79407f522f..0000000000
--- a/test/files/run/t7046-2/Test_2.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-object Test extends App {
- def nested: Unit = {
- sealed trait Foo
- object Foo {
- trait Bar extends Foo
- trait Baz extends Foo
- }
-
- val subs = Macros.knownDirectSubclasses[Foo]
- assert(subs == List("Bar", "Baz"))
- }
-
- nested
-}
diff --git a/test/files/run/t7047.check b/test/files/run/t7047.check
index 32bd581094..129ce3eeca 100644
--- a/test/files/run/t7047.check
+++ b/test/files/run/t7047.check
@@ -1,3 +1,3 @@
-Test_2.scala:2: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+Test_2.scala:2: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
Macros.foo
^
diff --git a/test/files/run/t7171.check b/test/files/run/t7171.check
index d826f6cb94..5454142882 100644
--- a/test/files/run/t7171.check
+++ b/test/files/run/t7171.check
@@ -1,3 +1,6 @@
t7171.scala:2: warning: The outer reference in this type test cannot be checked at run time.
final case class A()
^
+t7171.scala:9: warning: The outer reference in this type test cannot be checked at run time.
+ case _: A => true; case _ => false
+ ^
diff --git a/test/files/run/t7269.scala b/test/files/run/t7269.scala
index d22e57dfee..1102d49ecb 100644
--- a/test/files/run/t7269.scala
+++ b/test/files/run/t7269.scala
@@ -1,4 +1,4 @@
-import scala.collection.JavaConversions._
+import scala.collection.convert.ImplicitConversionsToScala._
import scala.collection.mutable
object Test extends App {
diff --git a/test/files/run/t7319.check b/test/files/run/t7319.check
index 31923e7119..1dcb84c804 100644
--- a/test/files/run/t7319.check
+++ b/test/files/run/t7319.check
@@ -3,15 +3,15 @@ scala> class M[A]
defined class M
scala> implicit def ma0[A](a: A): M[A] = null
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
ma0: [A](a: A)M[A]
scala> implicit def ma1[A](a: A): M[A] = null
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
ma1: [A](a: A)M[A]
scala> def convert[F[X <: F[X]]](builder: F[_ <: F[_]]) = 0
-warning: there was one feature warning; re-run with -feature for details
+warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
convert: [F[X <: F[X]]](builder: F[_ <: F[_]])Int
scala> convert(Some[Int](0))
diff --git a/test/files/run/t7375b.check b/test/files/run/t7375b.check
index d7578e28ba..0993cceca2 100644
--- a/test/files/run/t7375b.check
+++ b/test/files/run/t7375b.check
@@ -1,4 +1,4 @@
-Predef.this.classOf[C1]
-Predef.this.classOf[C2]
-Predef.this.classOf[C1]
-Predef.this.classOf[C2]
+scala.Predef.classOf[C1]
+scala.Predef.classOf[C2]
+scala.Predef.classOf[C1]
+scala.Predef.classOf[C2]
diff --git a/test/files/run/t7407.flags b/test/files/run/t7407.flags
index ffc65f4b81..213d7425d1 100644
--- a/test/files/run/t7407.flags
+++ b/test/files/run/t7407.flags
@@ -1 +1 @@
--Yopt:l:none -Ybackend:GenBCode
+-opt:l:none
diff --git a/test/files/run/t7407b.flags b/test/files/run/t7407b.flags
deleted file mode 100644
index c30091d3de..0000000000
--- a/test/files/run/t7407b.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenBCode
diff --git a/test/files/run/t7439.check b/test/files/run/t7439.check
index 9ea09f9c40..b95884311a 100644
--- a/test/files/run/t7439.check
+++ b/test/files/run/t7439.check
@@ -1,2 +1,2 @@
Recompiling after deleting t7439-run.obj/A_1.class
-pos: NoPosition Class A_1 not found - continuing with a stub. WARNING
+
diff --git a/test/files/run/t7445.scala b/test/files/run/t7445.scala
deleted file mode 100644
index e4ffeb8e1a..0000000000
--- a/test/files/run/t7445.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-import scala.collection.immutable.ListMap
-
-object Test extends App {
- val a = ListMap(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4, 5 -> 5);
- require(a.tail == ListMap(2 -> 2, 3 -> 3, 4 -> 4, 5 -> 5));
-}
diff --git a/test/files/run/t7459b-optimize.flags b/test/files/run/t7459b-optimize.flags
index 49d036a887..63535a7f4f 100644
--- a/test/files/run/t7459b-optimize.flags
+++ b/test/files/run/t7459b-optimize.flags
@@ -1 +1 @@
--optimize
+-opt:l:classpath
diff --git a/test/files/run/t7459f.scala b/test/files/run/t7459f.scala
index 63e2109560..5cd972129a 100644
--- a/test/files/run/t7459f.scala
+++ b/test/files/run/t7459f.scala
@@ -3,7 +3,7 @@ object Test extends App {
case class FooSeq(x: Int, y: String, z: C*)
- FooSeq(1, "a", new C()) match {
+ (FooSeq(1, "a", new C()): @unchecked) match {
case FooSeq(1, "a", x@_* ) =>
//println(x.toList)
x.asInstanceOf[x.type]
diff --git a/test/files/run/t3452b-bcode/S_3.scala b/test/files/run/t7521/Test.scala
index 102b433f47..e9816ad6cb 100644
--- a/test/files/run/t3452b-bcode/S_3.scala
+++ b/test/files/run/t7521/Test.scala
@@ -1,5 +1,5 @@
object Test {
def main(args: Array[String]): Unit = {
- J_2.j()
+ new Wrapper(new Array[Int](1))
}
}
diff --git a/test/files/run/t7521/Wrapper.scala b/test/files/run/t7521/Wrapper.scala
new file mode 100644
index 0000000000..0b923f8924
--- /dev/null
+++ b/test/files/run/t7521/Wrapper.scala
@@ -0,0 +1 @@
+class Wrapper[Repr](val xs: Repr) extends AnyVal
diff --git a/test/files/run/t7521b.check b/test/files/run/t7521b.check
new file mode 100644
index 0000000000..4d96df106d
--- /dev/null
+++ b/test/files/run/t7521b.check
@@ -0,0 +1,7 @@
+= Java Erased Signatures =
+public int C.a(Wrapper)
+public int C.b(Wrapper)
+
+= Java Generic Signatures =
+public int C.a(Wrapper<int[]>)
+public int C.b(Wrapper<java.lang.Object>)
diff --git a/test/files/run/t7521b.scala b/test/files/run/t7521b.scala
new file mode 100644
index 0000000000..c9e27f28b4
--- /dev/null
+++ b/test/files/run/t7521b.scala
@@ -0,0 +1,20 @@
+class Wrapper[X](x: X)
+
+class C {
+ def a(w: Wrapper[Array[Int]]) = 0
+ def b(w: Wrapper[Int]) = 0
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new C
+ c.a(new Wrapper(Array(1, 2)))
+ c.b(new Wrapper(1))
+
+ val methods = classOf[C].getDeclaredMethods.sortBy(_.getName)
+ println("= Java Erased Signatures =")
+ println(methods.mkString("\n"))
+ println("\n= Java Generic Signatures =")
+ println(methods.map(_.toGenericString).mkString("\n"))
+ }
+}
diff --git a/test/files/run/t7533.check b/test/files/run/t7533.check
index fa5b3edc8f..61fd4657bd 100644
--- a/test/files/run/t7533.check
+++ b/test/files/run/t7533.check
@@ -1,30 +1,29 @@
Testing Symbol.isAbstract...
=======class C=======
-class C => true
-constructor C => false
-value x1 => true
-value x2 => false
-value x2 => false
-method y1 => true
-method y2 => false
-type T1 => true
-type T2 => false
+class C => abstract
+constructor C => concrete
+value xAbs => abstract
+value x => concrete
+value x => concrete
+method yAbs => abstract
+method y => concrete
+type TAbs => abstract
+type T => concrete
=======trait T=======
-trait T => true
-method $init$ => false
-value z1 => true
-value z2 => false
-value z2 => false
-method w1 => true
-method w2 => false
-type U1 => true
-type U2 => false
-=======class D=======
-class D => false
-constructor D => false
-value x1 => false
-value x1 => false
-method y1 => false
+trait T => abstract
+method $init$ => concrete
+value zAbs => abstract
+value z => concrete
+method wAbs => abstract
+method w => concrete
+type UAbs => abstract
+type U => concrete
+=======class AllConcrete=======
+class AllConcrete => concrete
+constructor AllConcrete => concrete
+value xAbs => concrete
+value xAbs => concrete
+method yAbs => concrete
=======object M=======
-object M => false
-constructor M => false
+object M => concrete
+constructor M => concrete
diff --git a/test/files/run/t7533.scala b/test/files/run/t7533.scala
index c7bd8e8d43..65c5c26b42 100644
--- a/test/files/run/t7533.scala
+++ b/test/files/run/t7533.scala
@@ -1,24 +1,24 @@
import scala.reflect.runtime.universe._
abstract class C {
- val x1: Int
- val x2: Int = 2
- def y1: Int
- def y2: Int = 2
- type T1 <: Int
- type T2 = Int
+ val xAbs: Int
+ val x: Int = 2
+ def yAbs: Int
+ def y: Int = 2
+ type TAbs <: Int
+ type T = Int
}
trait T {
- val z1: Int
- val z2: Int = 2
- def w1: Int
- def w2: Int = 2
- type U1 <: Int
- type U2 = Int
+ val zAbs: Int
+ val z: Int = 2
+ def wAbs: Int
+ def w: Int = 2
+ type UAbs <: Int
+ type U = Int
}
-class D extends C {
- val x1 = 3
- def y1 = 3
+class AllConcrete extends C {
+ val xAbs = 3
+ def yAbs = 3
}
object M
@@ -27,12 +27,12 @@ object Test extends App {
def test[T: TypeTag] = {
val sym = typeOf[T].typeSymbol
println(s"=======$sym=======")
- def printAbstract(sym: Symbol) = println(s"$sym => ${sym.isAbstract}")
+ def printAbstract(sym: Symbol) = println(s"$sym => ${if (sym.isAbstract) "abstract" else "concrete"}")
printAbstract(sym)
sym.info.decls.sorted.foreach(printAbstract)
}
test[C]
test[T]
- test[D]
+ test[AllConcrete]
test[M.type]
} \ No newline at end of file
diff --git a/test/files/run/t7582.check b/test/files/run/t7582.check
index 0cfbf08886..58d0f19f5d 100644
--- a/test/files/run/t7582.check
+++ b/test/files/run/t7582.check
@@ -1 +1,6 @@
+InlineHolder.scala:9: warning: p1/InlineHolder$::inlinable()I is annotated @inline but could not be inlined:
+The callee p1/InlineHolder$::inlinable()I contains the instruction INVOKESTATIC p1/PackageProtectedJava.protectedMethod ()I
+that would cause an IllegalAccessError when inlined into class O$.
+ def x = p1.InlineHolder.inlinable
+ ^
2
diff --git a/test/files/run/t7582.flags b/test/files/run/t7582.flags
index 1182725e86..7e64669429 100644
--- a/test/files/run/t7582.flags
+++ b/test/files/run/t7582.flags
@@ -1 +1 @@
--optimize \ No newline at end of file
+-opt:l:classpath -opt-warnings \ No newline at end of file
diff --git a/test/files/run/t7582/InlineHolder.scala b/test/files/run/t7582/InlineHolder.scala
index 3cbf233ce1..a18b9effaa 100644
--- a/test/files/run/t7582/InlineHolder.scala
+++ b/test/files/run/t7582/InlineHolder.scala
@@ -1,6 +1,3 @@
-/*
- * filter: inliner warning; re-run with
- */
package p1 {
object InlineHolder {
@inline def inlinable = p1.PackageProtectedJava.protectedMethod() + 1
diff --git a/test/files/run/t7582b.check b/test/files/run/t7582b.check
index 0cfbf08886..58d0f19f5d 100644
--- a/test/files/run/t7582b.check
+++ b/test/files/run/t7582b.check
@@ -1 +1,6 @@
+InlineHolder.scala:9: warning: p1/InlineHolder$::inlinable()I is annotated @inline but could not be inlined:
+The callee p1/InlineHolder$::inlinable()I contains the instruction INVOKESTATIC p1/PackageProtectedJava.protectedMethod ()I
+that would cause an IllegalAccessError when inlined into class O$.
+ def x = p1.InlineHolder.inlinable
+ ^
2
diff --git a/test/files/run/t7582b.flags b/test/files/run/t7582b.flags
index 1182725e86..7e64669429 100644
--- a/test/files/run/t7582b.flags
+++ b/test/files/run/t7582b.flags
@@ -1 +1 @@
--optimize \ No newline at end of file
+-opt:l:classpath -opt-warnings \ No newline at end of file
diff --git a/test/files/run/t7582b/InlineHolder.scala b/test/files/run/t7582b/InlineHolder.scala
index 3cbf233ce1..a18b9effaa 100644
--- a/test/files/run/t7582b/InlineHolder.scala
+++ b/test/files/run/t7582b/InlineHolder.scala
@@ -1,6 +1,3 @@
-/*
- * filter: inliner warning; re-run with
- */
package p1 {
object InlineHolder {
@inline def inlinable = p1.PackageProtectedJava.protectedMethod() + 1
diff --git a/test/files/run/t7700.check b/test/files/run/t7700.check
index ca8e686984..7d18dbfcb4 100644
--- a/test/files/run/t7700.check
+++ b/test/files/run/t7700.check
@@ -1,2 +1,4 @@
-public abstract java.lang.Object C.bar(java.lang.Object)
-public abstract java.lang.Object C.foo(java.lang.Object)
+public static void C.$init$(C)
+public default java.lang.Object C.bar(java.lang.Object)
+public static java.lang.Object C.bar$(C,java.lang.Object)
+public abstract java.lang.Object C.foo(java.lang.Object) \ No newline at end of file
diff --git a/test/files/run/t7700.scala b/test/files/run/t7700.scala
index 76d16b808c..fd13666467 100644
--- a/test/files/run/t7700.scala
+++ b/test/files/run/t7700.scala
@@ -7,11 +7,13 @@ trait C[@specialized U] {
def bar[A](u: U) = u
}
-object Test extends App {
- val declared = classOf[C[_]].getDeclaredMethods.sortBy(_.getName)
- println(declared.mkString("\n"))
- object CInt extends C[Int] { def foo(i: Int) = i }
- object CAny extends C[Any] { def foo(a: Any) = a }
- assert(CInt.foo(1) == 1)
- assert(CAny.foo("") == "")
+object Test {
+ def main(args: Array[String]) {
+ val declared = classOf[C[_]].getDeclaredMethods.sortBy(_.getName)
+ println(declared.mkString("\n"))
+ object CInt extends C[Int] { def foo(i: Int) = i }
+ object CAny extends C[Any] { def foo(a: Any) = a }
+ assert(CInt.foo(1) == 1)
+ assert(CAny.foo("") == "")
+ }
}
diff --git a/test/files/run/t7747-repl.check b/test/files/run/t7747-repl.check
index d698ea668d..621a70205e 100644
--- a/test/files/run/t7747-repl.check
+++ b/test/files/run/t7747-repl.check
@@ -15,13 +15,13 @@ scala> val z = x * y
z: Int = 156
scala> 2 ; 3
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
2 ;;
^
res0: Int = 3
scala> { 2 ; 3 }
-<console>:12: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:12: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
{ 2 ; 3 }
^
res1: Int = 3
@@ -30,16 +30,16 @@ scala> 5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Mooo
1 +
2 +
3 } ; bippy+88+11
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; 10 ; case object Cow ; 20 ; class Moo { override def toString = "Moooooo" } ; 30 ; def bippy = {
^
defined object Cow
@@ -81,10 +81,10 @@ scala> ( (2 + 2 ) )
res10: Int = 4
scala> 5 ; ( (2 + 2 ) ) ; ((5))
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; ( (2 + 2 ) ) ;;
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
5 ; ( (2 + 2 ) ) ;;
^
res11: Int = 5
@@ -101,16 +101,16 @@ res14: String = 4423
scala>
scala> 55 ; ((2 + 2)) ; (1, 2, 3)
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ; ((2 + 2)) ;;
^
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ; ((2 + 2)) ;;
^
res15: (Int, Int, Int) = (1,2,3)
scala> 55 ; (x: Int) => x + 1 ; () => ((5))
-<console>:13: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:13: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ; (x: Int) => x + 1 ;;
^
res16: () => Int = <function0>
@@ -121,7 +121,7 @@ scala> () => 5
res17: () => Int = <function0>
scala> 55 ; () => 5
-<console>:11: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+<console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
55 ;;
^
res18: () => Int = <function0>
@@ -246,12 +246,12 @@ scala> case class Bingo()
defined class Bingo
scala> List(BippyBups(), PuppyPups(), Bingo()) // show
-class $read extends Serializable {
+class $read extends _root_.java.io.Serializable {
def <init>() = {
super.<init>;
()
};
- class $iw extends Serializable {
+ class $iw extends _root_.java.io.Serializable {
def <init>() = {
super.<init>;
()
@@ -262,7 +262,7 @@ class $read extends Serializable {
import $line45.$read.INSTANCE.$iw.$iw.PuppyPups;
import $line46.$read.INSTANCE.$iw.$iw.Bingo;
import $line46.$read.INSTANCE.$iw.$iw.Bingo;
- class $iw extends Serializable {
+ class $iw extends _root_.java.io.Serializable {
def <init>() = {
super.<init>;
()
diff --git a/test/files/run/t7747-repl.scala b/test/files/run/t7747-repl.scala
index 141c2d9844..8203f4c802 100644
--- a/test/files/run/t7747-repl.scala
+++ b/test/files/run/t7747-repl.scala
@@ -8,6 +8,11 @@ object Test extends ReplTest {
s
}
+ override def normalize(s: String) = {
+ // replace indylambda function names by <function0>
+ """\$Lambda.*""".r.replaceAllIn(s, "<function0>")
+ }
+
def code = """
|var x = 10
|var y = 11
diff --git a/test/files/run/t7775.scala b/test/files/run/t7775.scala
index 48b0d89974..bc69064e17 100644
--- a/test/files/run/t7775.scala
+++ b/test/files/run/t7775.scala
@@ -1,3 +1,45 @@
+import scala.concurrent._, duration._
+import ExecutionContext.Implicits.global
+import scala.tools.reflect.WrappedProperties.AccessControl._
+import java.util.concurrent.CyclicBarrier
+
+object Test extends App {
+ @volatile var done = false
+ val barrier = new CyclicBarrier(2)
+
+ val probe = Future {
+ val attempts = 1024 // previously, failed after a few
+ def fail(i: Int) = s"Failed at $i"
+ barrier.await()
+ for (i <- 1 to attempts ; p <- systemProperties)
+ p match { case (k, v) => assert (k != null && v != null, fail(i)) }
+ }
+ probe onComplete {
+ case _ => done = true
+ }
+
+ System.setProperty("foo", "fooz")
+ System.setProperty("bar", "barz")
+ barrier.await() // just for fun, wait to start mucking with properties
+
+ // continually modify properties trying to break live iteration over sys props
+ // hint: don't iterate lively over sys props
+ var alt = true
+ while (!done) {
+ if (alt) {
+ System.getProperties.remove("foo")
+ System.setProperty("bar", "barz")
+ alt = false
+ } else {
+ System.getProperties.remove("bar")
+ System.setProperty("foo", "fooz")
+ alt = true
+ }
+ }
+ Await.result(probe, Duration.Inf)
+}
+
+/*
import scala.concurrent.{duration, Future, Await, ExecutionContext}
import scala.tools.nsc.Settings
import ExecutionContext.Implicits.global
@@ -15,3 +57,4 @@ object Test {
Await.result(compiler, duration.Duration.Inf)
}
}
+*/
diff --git a/test/files/run/t7807.check b/test/files/run/t7807.check
new file mode 100644
index 0000000000..fd22077f2e
--- /dev/null
+++ b/test/files/run/t7807.check
@@ -0,0 +1,3 @@
+...
+...
+...
diff --git a/test/files/run/t7807.scala b/test/files/run/t7807.scala
new file mode 100644
index 0000000000..8e3099ec14
--- /dev/null
+++ b/test/files/run/t7807.scala
@@ -0,0 +1,21 @@
+object Test {
+ def main(args: Array[String]) {
+ try {
+ println("...")
+ }
+ finally {
+ try {
+ println("...")
+ }
+ finally {
+ try {
+ println("...")
+ }
+ catch {
+ case ct: scala.util.control.ControlThrowable => throw(ct)
+ case t: Throwable => t.printStackTrace()
+ }
+ }
+ }
+ }
+}
diff --git a/test/files/run/t7817-tree-gen.check b/test/files/run/t7817-tree-gen.check
index 4ed4b0d94a..69ad2b2f28 100644
--- a/test/files/run/t7817-tree-gen.check
+++ b/test/files/run/t7817-tree-gen.check
@@ -38,13 +38,13 @@ Joint Compilation:
mixin [ test2.PO] - test2.package$PO
cleanup [ test2.PO] - test2.package$PO
- typer [ test2.bar] - `package`.this.bar
- pickler [ test2.bar] - `package`.this.bar
- refchecks [ test2.bar] - `package`.this.bar
- uncurry [ test2.bar] - `package`.this.bar
- specialize [ test2.bar] - `package`.this.bar
- explicitouter [ test2.bar] - `package`.this.bar
- erasure [ test2.bar] - `package`.this.bar
+ typer [ test2.bar] - test2.`package`.bar
+ pickler [ test2.bar] - test2.`package`.bar
+ refchecks [ test2.bar] - test2.`package`.bar
+ uncurry [ test2.bar] - test2.`package`.bar
+ specialize [ test2.bar] - test2.`package`.bar
+ explicitouter [ test2.bar] - test2.`package`.bar
+ erasure [ test2.bar] - test2.`package`.bar
posterasure [ test2.bar] - test2.`package`.bar
flatten [ test2.bar] - test2.`package`.bar
mixin [ test2.bar] - test2.`package`.bar
@@ -90,13 +90,13 @@ Separate Compilation:
mixin [ PO] - test2.package$PO
cleanup [ PO] - test2.package$PO
- typer [testSep2.bar] - `package`.this.bar
- pickler [testSep2.bar] - `package`.this.bar
- refchecks [testSep2.bar] - `package`.this.bar
- uncurry [testSep2.bar] - `package`.this.bar
- specialize [testSep2.bar] - `package`.this.bar
- explicitouter [testSep2.bar] - `package`.this.bar
- erasure [testSep2.bar] - `package`.this.bar
+ typer [testSep2.bar] - test2.`package`.bar
+ pickler [testSep2.bar] - test2.`package`.bar
+ refchecks [testSep2.bar] - test2.`package`.bar
+ uncurry [testSep2.bar] - test2.`package`.bar
+ specialize [testSep2.bar] - test2.`package`.bar
+ explicitouter [testSep2.bar] - test2.`package`.bar
+ erasure [testSep2.bar] - test2.`package`.bar
posterasure [testSep2.bar] - test2.`package`.bar
flatten [testSep2.bar] - test2.`package`.bar
mixin [testSep2.bar] - test2.`package`.bar
diff --git a/test/files/run/t7817-tree-gen.flags b/test/files/run/t7817-tree-gen.flags
deleted file mode 100644
index ce6e93b3da..0000000000
--- a/test/files/run/t7817-tree-gen.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ynooptimise \ No newline at end of file
diff --git a/test/files/run/t7852.flags b/test/files/run/t7852.flags
index f6262fd3e0..213d7425d1 100644
--- a/test/files/run/t7852.flags
+++ b/test/files/run/t7852.flags
@@ -1 +1 @@
--Ynooptimise
+-opt:l:none
diff --git a/test/files/run/t7932.check b/test/files/run/t7932.check
index 3f0a0c4f62..76968fd179 100644
--- a/test/files/run/t7932.check
+++ b/test/files/run/t7932.check
@@ -1,3 +1,10 @@
-warning: there was one feature warning; re-run with -feature for details
public Category<?> C.category()
public Category<scala.Tuple2> C.category1()
+public default Category<java.lang.Object> M1.category()
+public default Category<scala.Tuple2> M1.category1()
+public static Category M1.category$(M1)
+public static Category M1.category1$(M1)
+public default Category<java.lang.Object> M2.category()
+public default Category<scala.Tuple2> M2.category1()
+public static Category M2.category$(M2)
+public static Category M2.category1$(M2) \ No newline at end of file
diff --git a/test/files/run/t7932.scala b/test/files/run/t7932.scala
index 8743abff88..40b0b9989b 100644
--- a/test/files/run/t7932.scala
+++ b/test/files/run/t7932.scala
@@ -1,11 +1,30 @@
+import scala.language.higherKinds
+
class Category[M[_, _]]
-trait M[F] {
+
+trait M1[F] {
type X[a, b] = F
def category: Category[X] = null
def category1: Category[Tuple2] = null
}
-abstract class C extends M[Float]
-object Test extends App {
- val ms = classOf[C].getMethods.filter(_.getName.startsWith("category"))
- println(ms.map(_.toGenericString).sorted.mkString("\n"))
+
+// The second trait is needed to make sure there's a forwarder generated in C.
+// otherwise the trait methods are just the inherited default methods from M1.
+trait M2[F] { self: M1[F] =>
+ override def category: Category[X] = null
+ override def category1: Category[Tuple2] = null
+}
+
+abstract class C extends M1[Float] with M2[Float]
+
+object Test {
+ def t(c: Class[_]) = {
+ val ms = c.getMethods.filter(_.getName.startsWith("category"))
+ println(ms.map(_.toGenericString).sorted.mkString("\n"))
+ }
+ def main(args: Array[String]) {
+ t(classOf[C])
+ t(classOf[M1[_]])
+ t(classOf[M2[_]])
+ }
}
diff --git a/test/files/run/t7974.check b/test/files/run/t7974.check
index 4eae5eb152..f649161ae9 100644
--- a/test/files/run/t7974.check
+++ b/test/files/run/t7974.check
@@ -1,26 +1,12 @@
- // access flags 0x9
- public static <clinit>()V
- GETSTATIC scala/Symbol$.MODULE$ : Lscala/Symbol$;
- LDC "Symbolic1"
- INVOKEVIRTUAL scala/Symbol$.apply (Ljava/lang/String;)Lscala/Symbol;
- PUTSTATIC Symbols.symbol$1 : Lscala/Symbol;
- GETSTATIC scala/Symbol$.MODULE$ : Lscala/Symbol$;
- LDC "Symbolic2"
- INVOKEVIRTUAL scala/Symbol$.apply (Ljava/lang/String;)Lscala/Symbol;
- PUTSTATIC Symbols.symbol$2 : Lscala/Symbol;
- GETSTATIC scala/Symbol$.MODULE$ : Lscala/Symbol$;
- LDC "Symbolic3"
- INVOKEVIRTUAL scala/Symbol$.apply (Ljava/lang/String;)Lscala/Symbol;
- PUTSTATIC Symbols.symbol$3 : Lscala/Symbol;
- RETURN
- MAXSTACK = 2
- MAXLOCALS = 0
-
-
// access flags 0x1
public someSymbol1()Lscala/Symbol;
- GETSTATIC Symbols.symbol$1 : Lscala/Symbol;
+ INVOKEDYNAMIC apply()Lscala/Symbol; [
+ // handle kind 0x6 : INVOKESTATIC
+ scala/runtime/SymbolLiteral.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite;
+ // arguments:
+ "Symbolic1"
+ ]
ARETURN
MAXSTACK = 1
MAXLOCALS = 1
@@ -28,7 +14,12 @@
// access flags 0x1
public someSymbol2()Lscala/Symbol;
- GETSTATIC Symbols.symbol$2 : Lscala/Symbol;
+ INVOKEDYNAMIC apply()Lscala/Symbol; [
+ // handle kind 0x6 : INVOKESTATIC
+ scala/runtime/SymbolLiteral.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite;
+ // arguments:
+ "Symbolic2"
+ ]
ARETURN
MAXSTACK = 1
MAXLOCALS = 1
@@ -36,7 +27,12 @@
// access flags 0x1
public sameSymbol1()Lscala/Symbol;
- GETSTATIC Symbols.symbol$1 : Lscala/Symbol;
+ INVOKEDYNAMIC apply()Lscala/Symbol; [
+ // handle kind 0x6 : INVOKESTATIC
+ scala/runtime/SymbolLiteral.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite;
+ // arguments:
+ "Symbolic1"
+ ]
ARETURN
MAXSTACK = 1
MAXLOCALS = 1
@@ -56,7 +52,12 @@
ALOAD 0
INVOKESPECIAL java/lang/Object.<init> ()V
ALOAD 0
- GETSTATIC Symbols.symbol$3 : Lscala/Symbol;
+ INVOKEDYNAMIC apply()Lscala/Symbol; [
+ // handle kind 0x6 : INVOKESTATIC
+ scala/runtime/SymbolLiteral.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;)Ljava/lang/invoke/CallSite;
+ // arguments:
+ "Symbolic3"
+ ]
PUTFIELD Symbols.someSymbol3 : Lscala/Symbol;
RETURN
MAXSTACK = 2
diff --git a/test/files/run/t7974/Test.scala b/test/files/run/t7974/Test.scala
index 296ec32ee2..53ec71bc2b 100644
--- a/test/files/run/t7974/Test.scala
+++ b/test/files/run/t7974/Test.scala
@@ -4,7 +4,7 @@ import scala.tools.partest.BytecodeTest
import scala.tools.nsc.backend.jvm.AsmUtils
import scala.tools.asm.util._
import scala.tools.nsc.util.stringFromWriter
-import scala.collection.convert.decorateAsScala._
+import scala.collection.JavaConverters._
object Test extends BytecodeTest {
def show {
diff --git a/test/files/run/t8196.check b/test/files/run/t8196.check
index d11dc27e68..8a07ebb6d7 100644
--- a/test/files/run/t8196.check
+++ b/test/files/run/t8196.check
@@ -1,4 +1,4 @@
-t8196.scala:26: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+t8196.scala:26: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
form2.g1 // comment this line in order to make the test pass
^
warning: there were two feature warnings; re-run with -feature for details
diff --git a/test/files/run/t8199.scala b/test/files/run/t8199.scala
index 50994159ed..ebe14a74df 100644
--- a/test/files/run/t8199.scala
+++ b/test/files/run/t8199.scala
@@ -21,17 +21,17 @@ class cls01234567
class cls012345678
class cls0123456789
class cls01234567890
-trait trt0 { def x = Test.checkCallerImplClassName() }
-trait trt01 { def x = Test.checkCallerImplClassName() }
-trait trt012 { def x = Test.checkCallerImplClassName() }
-trait trt0123 { def x = Test.checkCallerImplClassName() }
-trait trt01234 { def x = Test.checkCallerImplClassName() }
-trait trt012345 { def x = Test.checkCallerImplClassName() }
-trait trt0123456 { def x = Test.checkCallerImplClassName() }
-trait trt01234567 { def x = Test.checkCallerImplClassName() }
-trait trt012345678 { def x = Test.checkCallerImplClassName() }
-trait trt0123456789 { def x = Test.checkCallerImplClassName() }
-trait trt01234567890 { def x = Test.checkCallerImplClassName() }
+trait trt0
+trait trt01
+trait trt012
+trait trt0123
+trait trt01234
+trait trt012345
+trait trt0123456
+trait trt01234567
+trait trt012345678
+trait trt0123456789
+trait trt01234567890
}
object Test extends App {
@@ -42,11 +42,6 @@ object Test extends App {
val defaultMaxClassFileLength = 255
assert((name + ".class").length <= defaultMaxClassFileLength, name)
}
- def checkCallerImplClassName() {
- val name = Thread.currentThread.getStackTrace.apply(2).getClassName
- assert(name.contains("$class"))
- Test.checkClassName(name)
- }
val c = new reallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongname
import c._
@@ -75,7 +70,6 @@ object Test extends App {
check(classOf[cls0123456789])
check(classOf[cls01234567890])
- // interface facets
check(classOf[trt0])
check(classOf[trt01])
check(classOf[trt012])
@@ -88,18 +82,6 @@ object Test extends App {
check(classOf[trt0123456789])
check(classOf[trt01234567890])
- // impl classes are harder to find the names of to test!
- (new trt0 {}).x
- (new trt01 {}).x
- (new trt012 {}).x
- (new trt0123 {}).x
- (new trt01234 {}).x
- (new trt012345 {}).x
- (new trt0123456 {}).x
- (new trt01234567 {}).x
- (new trt012345678 {}).x
- (new trt0123456789 {}).x
- (new trt01234567890 {}).x
}
// filename too long: reallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongname$obj012345$.class
diff --git a/test/files/run/t8233-bcode.flags b/test/files/run/t8233-bcode.flags
deleted file mode 100644
index c30091d3de..0000000000
--- a/test/files/run/t8233-bcode.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenBCode
diff --git a/test/files/run/t8233-bcode.scala b/test/files/run/t8233-bcode.scala
deleted file mode 100644
index 72d013e553..0000000000
--- a/test/files/run/t8233-bcode.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-object Test {
- def bar(s: String) = s;
- val o: Option[Null] = None
- def nullReference {
- val a: Null = o.get
- bar(a) // Was: VerifyError under GenICode
- }
-
- def literal {
- val a: Null = null
- bar(a)
- }
-
- /** Check SI-8330 for details */
- def expectedUnitInABranch(b: Boolean): Boolean = {
- if (b) {
- val x = 12
- ()
- } else {
- // here expected type is (unboxed) Unit
- null
- }
- true
- }
-
- def main(args: Array[String]): Unit = {
- try { nullReference } catch { case _: NoSuchElementException => }
- literal
- expectedUnitInABranch(true)
- }
-}
diff --git a/test/files/run/t8334.scala b/test/files/run/t8334.scala
new file mode 100644
index 0000000000..bc7e97bd04
--- /dev/null
+++ b/test/files/run/t8334.scala
@@ -0,0 +1,17 @@
+object Test extends App {
+ def f: Boolean = {
+ val xs = Nil map (_ => return false)
+ true
+ }
+
+ def g: Boolean = {
+ val xs = Nil collect { case _ => return false }
+ true
+ }
+
+ def h: Boolean = {
+ val xs = Nil flatMap { _ => return false }
+ true
+ }
+ assert(f && g && h)
+}
diff --git a/test/files/run/t8442.check b/test/files/run/t8442.check
index ce9e8b52ff..8b13789179 100644
--- a/test/files/run/t8442.check
+++ b/test/files/run/t8442.check
@@ -1 +1 @@
-pos: NoPosition Class A_1 not found - continuing with a stub. WARNING
+
diff --git a/test/files/run/t8549.check b/test/files/run/t8549.check
index a9ecc29fea..f214cd8e6a 100644
--- a/test/files/run/t8549.check
+++ b/test/files/run/t8549.check
@@ -1 +1 @@
-warning: there were two deprecation warnings; re-run with -deprecation for details
+warning: there were two deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t8549.scala b/test/files/run/t8549.scala
index cb254e3810..7ec3635ab6 100644
--- a/test/files/run/t8549.scala
+++ b/test/files/run/t8549.scala
@@ -79,10 +79,10 @@ object Test extends App {
}
}
- // Generated on 20141010-14:01:28 with Scala version 2.11.2)
+ // Generated on 20160930-16:09:23 with Scala version 2.12.0-local-ffc8e3e)
overwrite.foreach(updateComment)
- check(Some(1))("rO0ABXNyAApzY2FsYS5Tb21lESLyaV6hi3QCAAFMAAF4dAASTGphdmEvbGFuZy9PYmplY3Q7eHIADHNjYWxhLk9wdGlvbv5pN/3bDmZ0AgAAeHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAQ==")
+ check(Some(1))("rO0ABXNyAApzY2FsYS5Tb21lESLyaV6hi3QCAAFMAAV2YWx1ZXQAEkxqYXZhL2xhbmcvT2JqZWN0O3hyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAE=")
check(None)("rO0ABXNyAAtzY2FsYS5Ob25lJEZQJPZTypSsAgAAeHIADHNjYWxhLk9wdGlvbv5pN/3bDmZ0AgAAeHA=")
check(List(1, 2, 3))( "rO0ABXNyADJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0JFNlcmlhbGl6YXRpb25Qcm94eQAAAAAAAAABAwAAeHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJzcQB+AAIAAAADc3IALHNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3RTZXJpYWxpemVFbmQkilxjW/dTC20CAAB4cHg=")
@@ -95,10 +95,10 @@ object Test extends App {
import collection.{ mutable, immutable }
class C
- check(reflect.classTag[C])("rO0ABXNyAB5zY2FsYS5yZWZsZWN0LkNsYXNzVGFnJCRhbm9uJDG7ePPrmQBkhgIAAUwAD3J1bnRpbWVDbGFzczEkMXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHB2cgAGVGVzdCRDAAAAAAAAAAAAAAB4cA==")
- check(reflect.classTag[Int])("rO0ABXNyACVzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSQkYW5vbiQ5zfmiSVNjtVICAAB4cgAcc2NhbGEucmVmbGVjdC5BbnlWYWxNYW5pZmVzdAAAAAAAAAABAgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAA0ludA==")
- check(reflect.classTag[String])("rO0ABXNyAB5zY2FsYS5yZWZsZWN0LkNsYXNzVGFnJCRhbm9uJDG7ePPrmQBkhgIAAUwAD3J1bnRpbWVDbGFzczEkMXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHB2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAAeHA=")
- check(reflect.classTag[Object])("rO0ABXNyACVzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSQkYW5vbiQymPrtq/Ci1gsCAAB4cgAtc2NhbGEucmVmbGVjdC5NYW5pZmVzdEZhY3RvcnkkUGhhbnRvbU1hbmlmZXN0rzigP7KRh/kCAAFMAAh0b1N0cmluZ3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hyAC9zY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRDbGFzc1R5cGVNYW5pZmVzdFq6NWvfTgYFAgADTAAGcHJlZml4dAAOTHNjYWxhL09wdGlvbjtMAAxydW50aW1lQ2xhc3N0ABFMamF2YS9sYW5nL0NsYXNzO0wADXR5cGVBcmd1bWVudHN0ACFMc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvTGlzdDt4cHNyAAtzY2FsYS5Ob25lJEZQJPZTypSsAgAAeHIADHNjYWxhLk9wdGlvbv5pN/3bDmZ0AgAAeHB2cgAQamF2YS5sYW5nLk9iamVjdAAAAAAAAAAAAAAAeHBzcgAyc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuTGlzdCRTZXJpYWxpemF0aW9uUHJveHkAAAAAAAAAAQMAAHhwc3IALHNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3RTZXJpYWxpemVFbmQkilxjW/dTC20CAAB4cHh0AAZPYmplY3Q=")
+ check(reflect.classTag[C])("rO0ABXNyACZzY2FsYS5yZWZsZWN0LkNsYXNzVGFnJEdlbmVyaWNDbGFzc1RhZwAAAAAAAAABAgABTAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzczt4cHZyAAZUZXN0JEMAAAAAAAAAAAAAAHhw")
+ check(reflect.classTag[Int])("rO0ABXNyAClzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRJbnRNYW5pZmVzdAAAAAAAAAABAgAAeHIAHHNjYWxhLnJlZmxlY3QuQW55VmFsTWFuaWZlc3QAAAAAAAAAAQIAAUwACHRvU3RyaW5ndAASTGphdmEvbGFuZy9TdHJpbmc7eHB0AANJbnQ=")
+ check(reflect.classTag[String])("rO0ABXNyACZzY2FsYS5yZWZsZWN0LkNsYXNzVGFnJEdlbmVyaWNDbGFzc1RhZwAAAAAAAAABAgABTAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzczt4cHZyABBqYXZhLmxhbmcuU3RyaW5noPCkOHo7s0ICAAB4cA==")
+ check(reflect.classTag[Object])("rO0ABXNyACxzY2FsYS5yZWZsZWN0Lk1hbmlmZXN0RmFjdG9yeSRPYmplY3RNYW5pZmVzdAAAAAAAAAABAgAAeHIALXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JFBoYW50b21NYW5pZmVzdAAAAAAAAAABAgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cgAvc2NhbGEucmVmbGVjdC5NYW5pZmVzdEZhY3RvcnkkQ2xhc3NUeXBlTWFuaWZlc3QAAAAAAAAAAQIAA0wABnByZWZpeHQADkxzY2FsYS9PcHRpb247TAAMcnVudGltZUNsYXNzdAARTGphdmEvbGFuZy9DbGFzcztMAA10eXBlQXJndW1lbnRzdAAhTHNjYWxhL2NvbGxlY3Rpb24vaW1tdXRhYmxlL0xpc3Q7eHBzcgALc2NhbGEuTm9uZSRGUCT2U8qUrAIAAHhyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwdnIAEGphdmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwc3IAMnNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3QkU2VyaWFsaXphdGlvblByb3h5AAAAAAAAAAEDAAB4cHNyACxzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2VyaWFsaXplRW5kJIpcY1v3UwttAgAAeHB4dAAGT2JqZWN0")
// TODO SI-8576 unstable under -Xcheckinit
// check(Enum)( "rO0ABXNyAApUZXN0JEVudW0ketCIyQ8C23MCAAJMAAJWMXQAGUxzY2FsYS9FbnVtZXJhdGlvbiRWYWx1ZTtMAAJWMnQAF0xzY2FsYS9FbnVtZXJhdGlvbiRWYWw7eHIAEXNjYWxhLkVudW1lcmF0aW9udaDN3ZgOWY4CAAhJAAZuZXh0SWRJABtzY2FsYSRFbnVtZXJhdGlvbiQkYm90dG9tSWRJABhzY2FsYSRFbnVtZXJhdGlvbiQkdG9wSWRMABRWYWx1ZU9yZGVyaW5nJG1vZHVsZXQAIkxzY2FsYS9FbnVtZXJhdGlvbiRWYWx1ZU9yZGVyaW5nJDtMAA9WYWx1ZVNldCRtb2R1bGV0AB1Mc2NhbGEvRW51bWVyYXRpb24kVmFsdWVTZXQkO0wACG5leHROYW1ldAAbTHNjYWxhL2NvbGxlY3Rpb24vSXRlcmF0b3I7TAAXc2NhbGEkRW51bWVyYXRpb24kJG5tYXB0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL01hcDtMABdzY2FsYSRFbnVtZXJhdGlvbiQkdm1hcHEAfgAHeHAAAAArAAAAAAAAACtwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hNYXAAAAAAAAAAAQMAAHhwdw0AAALuAAAAAAAAAAQAeHNxAH4ACXcNAAAC7gAAAAEAAAAEAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAqc3IAFXNjYWxhLkVudW1lcmF0aW9uJFZhbM9pZ6/J/O1PAgACSQAYc2NhbGEkRW51bWVyYXRpb24kVmFsJCRpTAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hyABdzY2FsYS5FbnVtZXJhdGlvbiRWYWx1ZWJpfC/tIR1RAgACTAAGJG91dGVydAATTHNjYWxhL0VudW1lcmF0aW9uO0wAHHNjYWxhJEVudW1lcmF0aW9uJCRvdXRlckVudW1xAH4AEnhwcQB+AAhxAH4ACAAAACpweHNyABFUZXN0JEVudW0kJGFub24kMVlIjlmE1sXaAgAAeHEAfgARcQB+AAhxAH4ACHEAfgAT")
@@ -116,6 +116,19 @@ object Test extends App {
// TODO SI-8576 unstable under -Xcheckinit
check(collection.convert.Wrappers)( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcA==")
+ check(new collection.convert.Wrappers.SetWrapper(immutable.Set()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyAChzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkRW1wdHlTZXQk3hYx1+cpzHgCAAB4cA==")
+ check(new collection.convert.Wrappers.SetWrapper(immutable.Set(1, 2, 3)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkU2V0M84syT0560SgAgADTAAFZWxlbTF0ABJMamF2YS9sYW5nL09iamVjdDtMAAVlbGVtMnEAfgAZTAAFZWxlbTNxAH4AGXhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+ABsAAAACc3EAfgAbAAAAAw==")
+ check(new collection.convert.Wrappers.SetWrapper(mutable.Set()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAcIAAAAAAAAABQB4")
+ check(new collection.convert.Wrappers.SetWrapper(mutable.Set(1, 2, 3)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkU2V0V3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkU2V0V3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL1NldDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAcIAAAADAAAABQBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AGgAAAAJzcQB+ABoAAAADeA==")
+ check(new collection.convert.Wrappers.MutableSetWrapper(mutable.Set()))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXK9XXTONonwwgIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1NldDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJFNldFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJFNldFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9TZXQ7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hTZXQAAAAAAAAAAQMAAHhwdw0AAAHCAAAAAAAAAAUAeHEAfgAb")
+ check(new collection.convert.Wrappers.MutableSetWrapper(mutable.Set(1, 2, 3)))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXK9XXTONonwwgIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1NldDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJFNldFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJFNldFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9TZXQ7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hTZXQAAAAAAAAAAQMAAHhwdw0AAAHCAAAAAwAAAAUAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+ABwAAAACc3EAfgAcAAAAA3hxAH4AGw==")
+ check(new collection.convert.Wrappers.MapWrapper(immutable.Map()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyAChzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5NYXAkRW1wdHlNYXAksesbhW5CgMsCAAB4cA==")
+ check(new collection.convert.Wrappers.MapWrapper(immutable.Map[Int, Int](1 -> 2, 2 -> 3, 3 -> 4)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5NYXAkTWFwM6csFD+HjyRxAgAGTAAEa2V5MXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABGtleTJxAH4AGUwABGtleTNxAH4AGUwABnZhbHVlMXEAfgAZTAAGdmFsdWUycQB+ABlMAAZ2YWx1ZTNxAH4AGXhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+ABsAAAACc3EAfgAbAAAAA3EAfgAecQB+AB9zcQB+ABsAAAAE")
+ check(new collection.convert.Wrappers.MapWrapper(mutable.Map()))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAAAAAAABAB4")
+ check(new collection.convert.Wrappers.MapWrapper(mutable.Map[Int, Int](1 -> 2, 2 -> 3, 3 -> 4)))("rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTWFwV3JhcHBlcgAAAAAAAAABAgACTAAGJG91dGVydAAjTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycztMADhzY2FsYSRjb2xsZWN0aW9uJGNvbnZlcnQkV3JhcHBlcnMkTWFwV3JhcHBlciQkdW5kZXJseWluZ3QAFkxzY2FsYS9jb2xsZWN0aW9uL01hcDt4cHNyACJzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkrrSziizavIECABJMABhEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJERpY3Rpb25hcnlXcmFwcGVyJDtMABZJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYWJsZVdyYXBwZXIkO0wAFkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADRMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEl0ZXJhdG9yV3JhcHBlciQ7TAAZSkNvbGxlY3Rpb25XcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbGxlY3Rpb25XcmFwcGVyJDtMABxKQ29uY3VycmVudE1hcFdyYXBwZXIkbW9kdWxldAA6THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKQ29uY3VycmVudE1hcFdyYXBwZXIkO0wAGUpEaWN0aW9uYXJ5V3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpEaWN0aW9uYXJ5V3JhcHBlciQ7TAAaSkVudW1lcmF0aW9uV3JhcHBlciRtb2R1bGV0ADhMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpFbnVtZXJhdGlvbldyYXBwZXIkO0wAF0pJdGVyYWJsZVdyYXBwZXIkbW9kdWxldAA1THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKSXRlcmFibGVXcmFwcGVyJDtMABdKSXRlcmF0b3JXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhdG9yV3JhcHBlciQ7TAATSkxpc3RXcmFwcGVyJG1vZHVsZXQAMUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkxpc3RXcmFwcGVyJDtMABJKTWFwV3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpNYXBXcmFwcGVyJDtMABlKUHJvcGVydGllc1dyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKUHJvcGVydGllc1dyYXBwZXIkO0wAEkpTZXRXcmFwcGVyJG1vZHVsZXQAMExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlNldFdyYXBwZXIkO0wAG011dGFibGVCdWZmZXJXcmFwcGVyJG1vZHVsZXQAOUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZUJ1ZmZlcldyYXBwZXIkO0wAGE11dGFibGVNYXBXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXIkO0wAGE11dGFibGVTZXFXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNlcVdyYXBwZXIkO0wAGE11dGFibGVTZXRXcmFwcGVyJG1vZHVsZXQANkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkTXV0YWJsZVNldFdyYXBwZXIkO0wAEVNlcVdyYXBwZXIkbW9kdWxldAAvTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRTZXFXcmFwcGVyJDt4cHBwcHBwcHBwcHBwcHBwcHBwcHNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAADAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAnNxAH4AGgAAAANzcQB+ABoAAAABcQB+ABxxAH4AHXNxAH4AGgAAAAR4")
+ check(new collection.convert.Wrappers.MutableMapWrapper(mutable.Map()))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXJ4TG6ffKy11wIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL01hcDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJE1hcFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9NYXA7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hNYXAAAAAAAAAAAQMAAHhwdw0AAALuAAAAAAAAAAQAeHEAfgAb")
+ check(new collection.convert.Wrappers.MutableMapWrapper(mutable.Map[Int, Int](1 -> 2, 2 -> 3, 3 -> 4)))("rO0ABXNyADNzY2FsYS5jb2xsZWN0aW9uLmNvbnZlcnQuV3JhcHBlcnMkTXV0YWJsZU1hcFdyYXBwZXJ4TG6ffKy11wIAAUwACnVuZGVybHlpbmd0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL01hcDt4cgAsc2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJE1hcFdyYXBwZXIAAAAAAAAAAQIAAkwABiRvdXRlcnQAI0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnM7TAA4c2NhbGEkY29sbGVjdGlvbiRjb252ZXJ0JFdyYXBwZXJzJE1hcFdyYXBwZXIkJHVuZGVybHlpbmd0ABZMc2NhbGEvY29sbGVjdGlvbi9NYXA7eHBzcgAic2NhbGEuY29sbGVjdGlvbi5jb252ZXJ0LldyYXBwZXJzJK60s4os2ryBAgASTAAYRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA2THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyREaWN0aW9uYXJ5V3JhcHBlciQ7TAAWSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANExzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSXRlcmFibGVXcmFwcGVyJDtMABZJdGVyYXRvcldyYXBwZXIkbW9kdWxldAA0THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRJdGVyYXRvcldyYXBwZXIkO0wAGUpDb2xsZWN0aW9uV3JhcHBlciRtb2R1bGV0ADdMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpDb2xsZWN0aW9uV3JhcHBlciQ7TAAcSkNvbmN1cnJlbnRNYXBXcmFwcGVyJG1vZHVsZXQAOkxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkNvbmN1cnJlbnRNYXBXcmFwcGVyJDtMABlKRGljdGlvbmFyeVdyYXBwZXIkbW9kdWxldAA3THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRGljdGlvbmFyeVdyYXBwZXIkO0wAGkpFbnVtZXJhdGlvbldyYXBwZXIkbW9kdWxldAA4THNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKRW51bWVyYXRpb25XcmFwcGVyJDtMABdKSXRlcmFibGVXcmFwcGVyJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSkl0ZXJhYmxlV3JhcHBlciQ7TAAXSkl0ZXJhdG9yV3JhcHBlciRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpJdGVyYXRvcldyYXBwZXIkO0wAE0pMaXN0V3JhcHBlciRtb2R1bGV0ADFMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpMaXN0V3JhcHBlciQ7TAASSk1hcFdyYXBwZXIkbW9kdWxldAAwTHNjYWxhL2NvbGxlY3Rpb24vY29udmVydC9XcmFwcGVycyRKTWFwV3JhcHBlciQ7TAAZSlByb3BlcnRpZXNXcmFwcGVyJG1vZHVsZXQAN0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkSlByb3BlcnRpZXNXcmFwcGVyJDtMABJKU2V0V3JhcHBlciRtb2R1bGV0ADBMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJEpTZXRXcmFwcGVyJDtMABtNdXRhYmxlQnVmZmVyV3JhcHBlciRtb2R1bGV0ADlMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVCdWZmZXJXcmFwcGVyJDtMABhNdXRhYmxlTWFwV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVNYXBXcmFwcGVyJDtMABhNdXRhYmxlU2VxV3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXFXcmFwcGVyJDtMABhNdXRhYmxlU2V0V3JhcHBlciRtb2R1bGV0ADZMc2NhbGEvY29sbGVjdGlvbi9jb252ZXJ0L1dyYXBwZXJzJE11dGFibGVTZXRXcmFwcGVyJDtMABFTZXFXcmFwcGVyJG1vZHVsZXQAL0xzY2FsYS9jb2xsZWN0aW9uL2NvbnZlcnQvV3JhcHBlcnMkU2VxV3JhcHBlciQ7eHBwcHBwcHBwcHBwcHBwcHBwcHBzcgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkhhc2hNYXAAAAAAAAAAAQMAAHhwdw0AAALuAAAAAwAAAAQAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAJzcQB+ABwAAAADc3EAfgAcAAAAAXEAfgAecQB+AB9zcQB+ABwAAAAEeHEAfgAb")
+
check(immutable.BitSet(1, 2, 3))( "rO0ABXNyAClzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5CaXRTZXQkQml0U2V0MR9dg8JGRI8UAgABSgAFZWxlbXN4cgAhc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuQml0U2V0Flz5Ms3qxsoCAAB4cAAAAAAAAAAO")
check(immutable.HashMap())( "rO0ABXNyADVzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5IYXNoTWFwJFNlcmlhbGl6YXRpb25Qcm94eQAAAAAAAAACAwAAeHB3BAAAAAB4")
check(immutable.HashMap(1 -> 2))( "rO0ABXNyADVzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5IYXNoTWFwJFNlcmlhbGl6YXRpb25Qcm94eQAAAAAAAAACAwAAeHB3BAAAAAFzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJ4")
@@ -128,6 +141,8 @@ object Test extends App {
check(immutable.HashSet(1, 2, 3))( "rO0ABXNyADVzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5IYXNoU2V0JFNlcmlhbGl6YXRpb25Qcm94eQAAAAAAAAACAwAAeHB3BAAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJzcQB+AAIAAAADeA==")
// TODO provoke HashSetCollision1
+ check(immutable.ListSet())( "rO0ABXNyADBzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2V0JEVtcHR5TGlzdFNldCRFiHGwmKwhTAIAAHhyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2V0izCZaSia0jYCAAB4cA==")
+ check(immutable.ListSet(1))( "rO0ABXNyACdzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2V0JE5vZGX1EX2lizBAdwIAAkwABiRvdXRlcnQAJExzY2FsYS9jb2xsZWN0aW9uL2ltbXV0YWJsZS9MaXN0U2V0O0wABGVsZW10ABJMamF2YS9sYW5nL09iamVjdDt4cgAic2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuTGlzdFNldIswmWkomtI2AgAAeHBzcgAwc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuTGlzdFNldCRFbXB0eUxpc3RTZXQkRYhxsJisIUwCAAB4cQB+AANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAQ==")
check(immutable.ListMap())( "rO0ABXNyADBzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0TWFwJEVtcHR5TGlzdE1hcCSNalsvpBZeDgIAAHhyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0TWFwBC1gfIkUSKsCAAB4cA==")
check(immutable.ListMap(1 -> 2))( "rO0ABXNyACdzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0TWFwJE5vZGWmciM1Yav+8gIAA0wABiRvdXRlcnQAJExzY2FsYS9jb2xsZWN0aW9uL2ltbXV0YWJsZS9MaXN0TWFwO0wAA2tleXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABXZhbHVlcQB+AAJ4cgAic2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuTGlzdE1hcAQtYHyJFEirAgAAeHBzcgAwc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuTGlzdE1hcCRFbXB0eUxpc3RNYXAkjWpbL6QWXg4CAAB4cQB+AANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4ABwAAAAI=")
check(immutable.Queue())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5RdWV1ZZY146W3qSuhAgACTAACaW50ACFMc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvTGlzdDtMAANvdXRxAH4AAXhwc3IAMnNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3QkU2VyaWFsaXphdGlvblByb3h5AAAAAAAAAAEDAAB4cHNyACxzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0U2VyaWFsaXplRW5kJIpcY1v3UwttAgAAeHB4cQB+AAQ=")
@@ -136,7 +151,7 @@ object Test extends App {
// TODO SI-8576 throws scala.UnitializedFieldError under -Xcheckinit
// check(new immutable.Range(0, 1, 1))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5SYW5nZWm7o1SrFTINAgAHSQADZW5kWgAHaXNFbXB0eUkAC2xhc3RFbGVtZW50SQAQbnVtUmFuZ2VFbGVtZW50c0kABXN0YXJ0SQAEc3RlcEkAD3Rlcm1pbmFsRWxlbWVudHhwAAAAAQAAAAAAAAAAAQAAAAAAAAABAAAAAQ==")
- check(immutable.Set())( "rO0ABXNyAChzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkRW1wdHlTZXQk8Hk3TFN0uDYCAAB4cA==")
+ check(immutable.Set())( "rO0ABXNyAChzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkRW1wdHlTZXQk3hYx1+cpzHgCAAB4cA==")
check(immutable.Set(1))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkU2V0MREd3c4yqtWTAgABTAAFZWxlbTF0ABJMamF2YS9sYW5nL09iamVjdDt4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAB")
check(immutable.Set(1, 2))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkU2V0MqaV02sZQzV0AgACTAAFZWxlbTF0ABJMamF2YS9sYW5nL09iamVjdDtMAAVlbGVtMnEAfgABeHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAwAAAAI=")
check(immutable.Set(1, 2, 3))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TZXQkU2V0M84syT0560SgAgADTAAFZWxlbTF0ABJMamF2YS9sYW5nL09iamVjdDtMAAVlbGVtMnEAfgABTAAFZWxlbTNxAH4AAXhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+AAMAAAACc3EAfgADAAAAAw==")
@@ -148,7 +163,7 @@ object Test extends App {
// TODO SI-8576 Uninitialized field: IndexedSeqLike.scala: 56
// check(immutable.Stream(1, 2, 3))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TdHJlYW0kQ29uc/ekjBXM3TlFAgADTAACaGR0ABJMamF2YS9sYW5nL09iamVjdDtMAAV0bEdlbnQAEUxzY2FsYS9GdW5jdGlvbjA7TAAFdGxWYWx0ACNMc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvU3RyZWFtO3hyACFzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5TdHJlYW0552RDntM42gIAAHhwc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcgAtc2NhbGEuY29sbGVjdGlvbi5JdGVyYXRvciQkYW5vbmZ1biR0b1N0cmVhbSQxRWR4We0SX0UCAAFMAAYkb3V0ZXJ0ABtMc2NhbGEvY29sbGVjdGlvbi9JdGVyYXRvcjt4cHNyAChzY2FsYS5jb2xsZWN0aW9uLkluZGV4ZWRTZXFMaWtlJEVsZW1lbnRzGF+1cBwmcx0CAANJAANlbmRJAAVpbmRleEwABiRvdXRlcnQAIUxzY2FsYS9jb2xsZWN0aW9uL0luZGV4ZWRTZXFMaWtlO3hwAAAAAwAAAAFzcgArc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLldyYXBwZWRBcnJheSRvZkludMmRLBcI15VjAgABWwAFYXJyYXl0AAJbSXhwdXIAAltJTbpgJnbqsqUCAAB4cAAAAAMAAAABAAAAAgAAAANw")
- check(immutable.TreeSet[Int]())( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5UcmVlU2V0sRdVIDjbWAsCAAJMAAhvcmRlcmluZ3QAFUxzY2FsYS9tYXRoL09yZGVyaW5nO0wABHRyZWV0AC5Mc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkC4BMdr1Z51wCAAB4cHA=")
+ check(immutable.TreeSet[Int]())( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5UcmVlU2V0sRdVIDjbWAsCAAJMAAhvcmRlcmluZ3QAFUxzY2FsYS9tYXRoL09yZGVyaW5nO0wABHRyZWV0AC5Mc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHA=")
// TODO SI-8576 unstable under -Xcheckinit
// check(immutable.TreeSet(1, 2, 3))( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5UcmVlU2V0sRdVIDjbWAsCAAJMAAhvcmRlcmluZ3QAFUxzY2FsYS9tYXRoL09yZGVyaW5nO0wABHRyZWV0AC5Mc2NhbGEvY29sbGVjdGlvbi9pbW11dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQkC4BMdr1Z51wCAAB4cHNyADFzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5SZWRCbGFja1RyZWUkQmxhY2tUcmVlzRxnCKenVAECAAB4cgAsc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWVrqCSyHJbsMgIABUkABWNvdW50TAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgACTAAFcmlnaHRxAH4AAkwABXZhbHVlcQB+AAh4cAAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAnNxAH4ABgAAAAFzcQB+AAoAAAABcHBzcgAXc2NhbGEucnVudGltZS5Cb3hlZFVuaXR0pn1HHezLmgIAAHhwc3EAfgAGAAAAAXNxAH4ACgAAAANwcHEAfgAQcQB+ABA=")
@@ -157,22 +172,29 @@ object Test extends App {
// check(mutable.ArrayBuffer(1, 2, 3))( "rO0ABXNyACRzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuQXJyYXlCdWZmZXIVOLBTg4KOcwIAA0kAC2luaXRpYWxTaXplSQAFc2l6ZTBbAAVhcnJheXQAE1tMamF2YS9sYW5nL09iamVjdDt4cAAAABAAAAADdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAAEHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABc3EAfgAFAAAAAnNxAH4ABQAAAANwcHBwcHBwcHBwcHBw")
// TODO SI-8576 Uninitialized field under -Xcheckinit
// check(mutable.ArraySeq(1, 2, 3))( "rO0ABXNyACFzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuQXJyYXlTZXEVPD3SKEkOcwIAAkkABmxlbmd0aFsABWFycmF5dAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwAAAAA3VyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4ABQAAAAJzcQB+AAUAAAAD")
+ check(mutable.AnyRefMap("a" -> "A"))( "rO0ABXNyACJzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuQW55UmVmTWFwAAAAAAAAAAECAAdJAAVfc2l6ZUkAB192YWNhbnRJAARtYXNrTAAMZGVmYXVsdEVudHJ5dAARTHNjYWxhL0Z1bmN0aW9uMTtbACtzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkQW55UmVmTWFwJCRfaGFzaGVzdAACW0lbAClzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkQW55UmVmTWFwJCRfa2V5c3QAE1tMamF2YS9sYW5nL09iamVjdDtbACtzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkQW55UmVmTWFwJCRfdmFsdWVzcQB+AAN4cAAAAAEAAAAAAAAAB3NyADNzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuQW55UmVmTWFwJEV4Y2VwdGlvbkRlZmF1bHQAAAAAAAAAAQIAAHhwdXIAAltJTbpgJnbqsqUCAAB4cAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+UkA2AAAAAHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAhwcHBwcHB0AAFhcHVxAH4ACQAAAAhwcHBwcHB0AAFBcA==")
check(mutable.ArrayStack(1, 2, 3))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuQXJyYXlTdGFja3bdxXbcnLBeAgACSQAqc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJEFycmF5U3RhY2skJGluZGV4WwAqc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJEFycmF5U3RhY2skJHRhYmxldAATW0xqYXZhL2xhbmcvT2JqZWN0O3hwAAAAA3VyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAANzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAA3NxAH4ABQAAAAJzcQB+AAUAAAAB")
- check(mutable.DoubleLinkedList(1, 2, 3))( "rO0ABXNyAClzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuRG91YmxlTGlua2VkTGlzdI73LKsKRr1RAgADTAAEZWxlbXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABG5leHR0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1NlcTtMAARwcmV2cQB+AAJ4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABc3EAfgAAc3EAfgAEAAAAAnNxAH4AAHNxAH4ABAAAAANzcQB+AABwcQB+AAtxAH4ACXEAfgAHcQB+AANw")
+ check(mutable.DoubleLinkedList(1, 2, 3))( "rO0ABXNyAClzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuRG91YmxlTGlua2VkTGlzdI73LKsKRr1RAgADTAAEZWxlbXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABG5leHR0ACtMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL0RvdWJsZUxpbmtlZExpc3Q7TAAEcHJldnEAfgACeHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAHNxAH4ABAAAAAJzcQB+AABzcQB+AAQAAAADc3EAfgAAcHEAfgALcQB+AAlxAH4AB3EAfgADcA==")
check(mutable.HashMap())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAAAAAAABAB4")
check(mutable.HashMap(1 -> 1))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAABAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXEAfgAEeA==")
check(mutable.HashSet(1, 2, 3))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAcIAAAADAAAABQBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJzcQB+AAIAAAADeA==")
+ check(mutable.TreeMap[Int, Int]())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcNx8qC229ZvwAgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZU1hcCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAABw")
+ check(mutable.TreeMap(1 -> 1, 3 -> 6))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcNx8qC229ZvwAgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZU1hcCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAAJzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSROb2RlGxHsFtValgACAAZaAANyZWRMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAARsZWZ0cQB+AAdMAAZwYXJlbnRxAH4AB0wABXJpZ2h0cQB+AAdMAAV2YWx1ZXEAfgAKeHAAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFwcHNxAH4ACQFzcQB+AAwAAAADcHEAfgALcHNxAH4ADAAAAAZxAH4ADg==")
+ check(mutable.TreeMap(1 -> 1, 3 -> 6).range(1, 2))( "rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZU1hcCRUcmVlTWFwVmlldx7MCZxLhVQ8AgADTAAGJG91dGVydAAiTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9UcmVlTWFwO0wABGZyb210AA5Mc2NhbGEvT3B0aW9uO0wABXVudGlscQB+AAJ4cgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlRyZWVNYXDcfKgttvWb8AIAAkwACG9yZGVyaW5ndAAVTHNjYWxhL21hdGgvT3JkZXJpbmc7TAAmc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJFRyZWVNYXAkJHRyZWV0ACxMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1JlZEJsYWNrVHJlZSRUcmVlO3hwc3IAGHNjYWxhLm1hdGguT3JkZXJpbmckSW50JPLu3IK7lc7nAgAAeHBzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSRUcmVlAEynNPA1phUCAAJJAARzaXplTAAEcm9vdHQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJE5vZGU7eHAAAAACc3IAKnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5SZWRCbGFja1RyZWUkTm9kZRsR7BbVWpYAAgAGWgADcmVkTAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgAKTAAGcGFyZW50cQB+AApMAAVyaWdodHEAfgAKTAAFdmFsdWVxAH4ADXhwAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABcHBzcQB+AAwBc3EAfgAPAAAAA3BxAH4ADnBzcQB+AA8AAAAGcQB+ABFzcQB+AANxAH4ACHEAfgALc3IACnNjYWxhLlNvbWURIvJpXqGLdAIAAUwABXZhbHVlcQB+AA14cgAMc2NhbGEuT3B0aW9u/mk3/dsOZnQCAAB4cHEAfgARc3EAfgAWc3EAfgAPAAAAAg==")
+ check(mutable.TreeSet[Int]())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldM10nxFQDpt4AgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZVNldCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAABw")
+ check(mutable.TreeSet(1, 3))( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldM10nxFQDpt4AgACTAAIb3JkZXJpbmd0ABVMc2NhbGEvbWF0aC9PcmRlcmluZztMACZzY2FsYSRjb2xsZWN0aW9uJG11dGFibGUkVHJlZVNldCQkdHJlZXQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJFRyZWU7eHBzcgAYc2NhbGEubWF0aC5PcmRlcmluZyRJbnQk8u7cgruVzucCAAB4cHNyACpzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuUmVkQmxhY2tUcmVlJFRyZWUATKc08DWmFQIAAkkABHNpemVMAARyb290dAAsTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9SZWRCbGFja1RyZWUkTm9kZTt4cAAAAAJzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSROb2RlGxHsFtValgACAAZaAANyZWRMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAARsZWZ0cQB+AAdMAAZwYXJlbnRxAH4AB0wABXJpZ2h0cQB+AAdMAAV2YWx1ZXEAfgAKeHAAc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFwcHNxAH4ACQFzcQB+AAwAAAADcHEAfgALcHBw")
+ check(mutable.TreeSet(1, 3).range(1, 2))( "rO0ABXNyACxzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVHJlZVNldCRUcmVlU2V0Vmlld2JdAzqy0DpGAgADTAAGJG91dGVydAAiTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9UcmVlU2V0O0wABGZyb210AA5Mc2NhbGEvT3B0aW9uO0wABXVudGlscQB+AAJ4cgAgc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlRyZWVTZXTNdJ8RUA6beAIAAkwACG9yZGVyaW5ndAAVTHNjYWxhL21hdGgvT3JkZXJpbmc7TAAmc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJFRyZWVTZXQkJHRyZWV0ACxMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1JlZEJsYWNrVHJlZSRUcmVlO3hwc3IAGHNjYWxhLm1hdGguT3JkZXJpbmckSW50JPLu3IK7lc7nAgAAeHBzcgAqc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLlJlZEJsYWNrVHJlZSRUcmVlAEynNPA1phUCAAJJAARzaXplTAAEcm9vdHQALExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUmVkQmxhY2tUcmVlJE5vZGU7eHAAAAACc3IAKnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5SZWRCbGFja1RyZWUkTm9kZRsR7BbVWpYAAgAGWgADcmVkTAADa2V5dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEbGVmdHEAfgAKTAAGcGFyZW50cQB+AApMAAVyaWdodHEAfgAKTAAFdmFsdWVxAH4ADXhwAHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABcHBzcQB+AAwBc3EAfgAPAAAAA3BxAH4ADnBwcHNxAH4AA3EAfgAIcQB+AAtzcgAKc2NhbGEuU29tZREi8mleoYt0AgABTAAFdmFsdWVxAH4ADXhyAAxzY2FsYS5PcHRpb27+aTf92w5mdAIAAHhwcQB+ABFzcQB+ABVzcQB+AA8AAAAC")
// TODO SI-8576 Uninitialized field under -Xcheckinit
// check(new mutable.History())( "rO0ABXNyACBzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuSGlzdG9yeUhuXxDIFJrsAgACSQAKbWF4SGlzdG9yeUwAA2xvZ3QAIExzY2FsYS9jb2xsZWN0aW9uL211dGFibGUvUXVldWU7eHAAAAPoc3IAHnNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5RdWV1ZbjMURVfOuHHAgAAeHIAJHNjYWxhLmNvbGxlY3Rpb24ubXV0YWJsZS5NdXRhYmxlTGlzdFJpnjJ+gFbAAgADSQADbGVuTAAGZmlyc3QwdAAlTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9MaW5rZWRMaXN0O0wABWxhc3QwcQB+AAV4cAAAAABzcgAjc2NhbGEuY29sbGVjdGlvbi5tdXRhYmxlLkxpbmtlZExpc3Sak+nGCZHaUQIAAkwABGVsZW10ABJMamF2YS9sYW5nL09iamVjdDtMAARuZXh0dAAeTHNjYWxhL2NvbGxlY3Rpb24vbXV0YWJsZS9TZXE7eHBwcQB+AApxAH4ACg==")
check(mutable.LinkedHashMap(1 -> 2))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlua2VkSGFzaE1hcAAAAAAAAAABAwAAeHB3DQAAAu4AAAABAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJ4")
check(mutable.LinkedHashSet(1, 2, 3))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlua2VkSGFzaFNldAAAAAAAAAABAwAAeHB3DQAAAu4AAAADAAAABABzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAgAAAAJzcQB+AAIAAAADeA==")
- check(mutable.LinkedList(1, 2, 3))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlua2VkTGlzdJqT6cYJkdpRAgACTAAEZWxlbXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABG5leHR0AB5Mc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL1NlcTt4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABc3EAfgAAc3EAfgAEAAAAAnNxAH4AAHNxAH4ABAAAAANzcQB+AABwcQB+AAs=")
+ check(mutable.LinkedList(1, 2, 3))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlua2VkTGlzdJqT6cYJkdpRAgACTAAEZWxlbXQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABG5leHR0ACVMc2NhbGEvY29sbGVjdGlvbi9tdXRhYmxlL0xpbmtlZExpc3Q7eHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4AAHNxAH4ABAAAAAJzcQB+AABzcQB+AAQAAAADc3EAfgAAcHEAfgAL")
// TODO SI-8576 unstable under -Xcheckinit
// check(mutable.ListBuffer(1, 2, 3))( "rO0ABXNyACNzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuTGlzdEJ1ZmZlci9y9I7QyWzGAwAEWgAIZXhwb3J0ZWRJAANsZW5MAAVsYXN0MHQAKUxzY2FsYS9jb2xsZWN0aW9uL2ltbXV0YWJsZS8kY29sb24kY29sb247TAAqc2NhbGEkY29sbGVjdGlvbiRtdXRhYmxlJExpc3RCdWZmZXIkJHN0YXJ0dAAhTHNjYWxhL2NvbGxlY3Rpb24vaW1tdXRhYmxlL0xpc3Q7eHBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNxAH4ABAAAAAJzcQB+AAQAAAADc3IALHNjYWxhLmNvbGxlY3Rpb24uaW1tdXRhYmxlLkxpc3RTZXJpYWxpemVFbmQkilxjW/dTC20CAAB4cHcFAAAAAAN4")
check(new mutable.StringBuilder(new java.lang.StringBuilder("123")))( "rO0ABXNyACZzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuU3RyaW5nQnVpbGRlcomvqgGv1tTxAgABTAAKdW5kZXJseWluZ3QAGUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjt4cHNyABdqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcjzV+xRaTGrLAwAAeHB3BAAAAAN1cgACW0OwJmaw4l2ErAIAAHhwAAAAEwAxADIAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeA==")
- check(mutable.UnrolledBuffer[Int]())( "rO0ABXNyACdzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVW5yb2xsZWRCdWZmZXIAAAAAAAAAAQMAAUwAA3RhZ3QAGExzY2FsYS9yZWZsZWN0L0NsYXNzVGFnO3hwc3IAJXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JCRhbm9uJDnN+aJJU2O1UgIAAHhyABxzY2FsYS5yZWZsZWN0LkFueVZhbE1hbmlmZXN0AAAAAAAAAAECAAFMAAh0b1N0cmluZ3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hwdAADSW50dwQAAAAAeA==")
+ check(mutable.UnrolledBuffer[Int]())( "rO0ABXNyACdzY2FsYS5jb2xsZWN0aW9uLm11dGFibGUuVW5yb2xsZWRCdWZmZXIAAAAAAAAAAQMAAUwAA3RhZ3QAGExzY2FsYS9yZWZsZWN0L0NsYXNzVGFnO3hwc3IAKXNjYWxhLnJlZmxlY3QuTWFuaWZlc3RGYWN0b3J5JEludE1hbmlmZXN0AAAAAAAAAAECAAB4cgAcc2NhbGEucmVmbGVjdC5BbnlWYWxNYW5pZmVzdAAAAAAAAAABAgABTAAIdG9TdHJpbmd0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAA0ludHcEAAAAAHg=")
import collection.parallel
check(parallel.immutable.ParHashMap(1 -> 2))( "rO0ABXNyAC5zY2FsYS5jb2xsZWN0aW9uLnBhcmFsbGVsLmltbXV0YWJsZS5QYXJIYXNoTWFwAAAAAAAAAAECAANMAA9TY2FuTGVhZiRtb2R1bGV0ADVMc2NhbGEvY29sbGVjdGlvbi9wYXJhbGxlbC9QYXJJdGVyYWJsZUxpa2UkU2NhbkxlYWYkO0wAD1NjYW5Ob2RlJG1vZHVsZXQANUxzY2FsYS9jb2xsZWN0aW9uL3BhcmFsbGVsL1Bhckl0ZXJhYmxlTGlrZSRTY2FuTm9kZSQ7TAAEdHJpZXQAJExzY2FsYS9jb2xsZWN0aW9uL2ltbXV0YWJsZS9IYXNoTWFwO3hwcHBzcgA1c2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuSGFzaE1hcCRTZXJpYWxpemF0aW9uUHJveHkAAAAAAAAAAgMAAHhwdwQAAAABc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcQB+AAcAAAACeA==")
@@ -186,4 +208,4 @@ object Test extends App {
check("...".r)("rO0ABXNyABlzY2FsYS51dGlsLm1hdGNoaW5nLlJlZ2V44u3Vap7wIb8CAAJMAAdwYXR0ZXJudAAZTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuO0wAJXNjYWxhJHV0aWwkbWF0Y2hpbmckUmVnZXgkJGdyb3VwTmFtZXN0ABZMc2NhbGEvY29sbGVjdGlvbi9TZXE7eHBzcgAXamF2YS51dGlsLnJlZ2V4LlBhdHRlcm5GZ9VrbkkCDQIAAkkABWZsYWdzTAAHcGF0dGVybnQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwAAAAAHQAAy4uLnNyADJzY2FsYS5jb2xsZWN0aW9uLmltbXV0YWJsZS5MaXN0JFNlcmlhbGl6YXRpb25Qcm94eQAAAAAAAAABAwAAeHBzcgAsc2NhbGEuY29sbGVjdGlvbi5pbW11dGFibGUuTGlzdFNlcmlhbGl6ZUVuZCSKXGNb91MLbQIAAHhweA==",
r => (r.toString))
-}
+} \ No newline at end of file
diff --git a/test/files/run/t8575.scala b/test/files/run/t8575.scala
new file mode 100644
index 0000000000..fb8f603f3e
--- /dev/null
+++ b/test/files/run/t8575.scala
@@ -0,0 +1,32 @@
+class E[F]
+class A
+class B
+class C
+
+trait TypeMember {
+ type X
+
+ // This call throws an AbstractMethodError, because it invokes the erasure of
+ // consume(X): Unit that is consume(Object): Unit. But the corresponding
+ // bridge method is not generated.
+ consume(value)
+
+ def value: X
+ def consume(x: X): Unit
+}
+
+object Test extends TypeMember {
+ type F = A with B
+
+ // works if replaced by type X = E[A with B with C]
+ type X = E[F with C]
+
+ def value = new E[F with C]
+
+ // This call passes, since it invokes consume(E): Unit
+ def consume(x: X) {}
+
+ def main(args: Array[String]) {
+ consume(value)
+ }
+}
diff --git a/test/files/run/t8575b.scala b/test/files/run/t8575b.scala
new file mode 100644
index 0000000000..0d731ccf9f
--- /dev/null
+++ b/test/files/run/t8575b.scala
@@ -0,0 +1,17 @@
+class A
+class B
+class C
+
+object Test {
+ type F = A with B
+
+ def main(args: Array[String]) {
+ import reflect.runtime.universe._
+ val t1 = typeOf[F with C]
+ val t2 = typeOf[(A with B) with C]
+ val t3 = typeOf[A with B with C]
+ assert(t1 =:= t2)
+ assert(t2 =:= t3)
+ assert(t3 =:= t1)
+ }
+}
diff --git a/test/files/run/t8575c.scala b/test/files/run/t8575c.scala
new file mode 100644
index 0000000000..8219952299
--- /dev/null
+++ b/test/files/run/t8575c.scala
@@ -0,0 +1,23 @@
+class C
+
+trait TypeMember {
+ type X
+ type Y
+ type Z
+}
+
+object Test extends TypeMember {
+ type A = X with Y
+ type B = Z with A
+ type F = A with B
+
+ def main(args: Array[String]) {
+ import reflect.runtime.universe._
+ val t1 = typeOf[F with C]
+ val t2 = typeOf[(A with B) with C]
+ val t3 = typeOf[A with B with C]
+ assert(t1 =:= t2)
+ assert(t2 =:= t3)
+ assert(t3 =:= t1)
+ }
+}
diff --git a/test/files/run/t8601-closure-elim.flags b/test/files/run/t8601-closure-elim.flags
index 9158076b71..24396d4d02 100644
--- a/test/files/run/t8601-closure-elim.flags
+++ b/test/files/run/t8601-closure-elim.flags
@@ -1 +1 @@
--optimize -Ydelambdafy:inline -Ybackend:GenASM
+-Ydelambdafy:method -opt:l:classpath
diff --git a/test/files/run/t8601-closure-elim.scala b/test/files/run/t8601-closure-elim.scala
index ebeb16e0c7..40fbf1fe0e 100644
--- a/test/files/run/t8601-closure-elim.scala
+++ b/test/files/run/t8601-closure-elim.scala
@@ -1,4 +1,5 @@
import scala.tools.partest.BytecodeTest
+import scala.tools.partest.ASMConverters.instructionsFromMethod
import scala.tools.asm
import scala.tools.asm.util._
import scala.collection.JavaConverters._
@@ -10,8 +11,9 @@ object Test extends BytecodeTest {
def test(methodName: String) {
val classNode = loadClassNode("Foo")
val methodNode = getMethod(classNode, "b")
+ val instrs = instructionsFromMethod(methodNode)
val ops = methodNode.instructions.iterator.asScala.map(_.getOpcode).toList
- assert(!ops.contains(asm.Opcodes.NEW), ops)// should be allocation free if the closure is eliminated
+ assert(!ops.contains(asm.Opcodes.NEW), instrs)// should be allocation free if the closure is eliminated
}
test("b")
}
diff --git a/test/files/run/t8601.flags b/test/files/run/t8601.flags
index 1182725e86..63535a7f4f 100644
--- a/test/files/run/t8601.flags
+++ b/test/files/run/t8601.flags
@@ -1 +1 @@
--optimize \ No newline at end of file
+-opt:l:classpath
diff --git a/test/files/run/t8601b.flags b/test/files/run/t8601b.flags
index 1182725e86..63535a7f4f 100644
--- a/test/files/run/t8601b.flags
+++ b/test/files/run/t8601b.flags
@@ -1 +1 @@
--optimize \ No newline at end of file
+-opt:l:classpath
diff --git a/test/files/run/t8601c.flags b/test/files/run/t8601c.flags
index 1182725e86..63535a7f4f 100644
--- a/test/files/run/t8601c.flags
+++ b/test/files/run/t8601c.flags
@@ -1 +1 @@
--optimize \ No newline at end of file
+-opt:l:classpath
diff --git a/test/files/run/t8601d.flags b/test/files/run/t8601d.flags
index 1182725e86..63535a7f4f 100644
--- a/test/files/run/t8601d.flags
+++ b/test/files/run/t8601d.flags
@@ -1 +1 @@
--optimize \ No newline at end of file
+-opt:l:classpath
diff --git a/test/files/run/t8601e.flags b/test/files/run/t8601e.flags
index 49d036a887..63535a7f4f 100644
--- a/test/files/run/t8601e.flags
+++ b/test/files/run/t8601e.flags
@@ -1 +1 @@
--optimize
+-opt:l:classpath
diff --git a/test/files/run/t8601e/StaticInit.class b/test/files/run/t8601e/StaticInit.class
deleted file mode 100644
index 99a0e2a643..0000000000
--- a/test/files/run/t8601e/StaticInit.class
+++ /dev/null
Binary files differ
diff --git a/test/files/run/t8710.scala b/test/files/run/t8710.scala
new file mode 100644
index 0000000000..15aab5b8a4
--- /dev/null
+++ b/test/files/run/t8710.scala
@@ -0,0 +1,17 @@
+class Bar(val x: Int) extends AnyVal {
+ def f: String = f(0)
+ private def f(x: Int): String = ""
+}
+
+class Baz(val x: Int) extends AnyVal {
+ def f: String = "123"
+ private def f(x: Int): String = ""
+}
+object Baz {
+ def x(b: Baz) = b.f(0)
+}
+
+object Test extends App {
+ new Bar(23).f
+ new Baz(23).f
+}
diff --git a/test/files/run/t8756.check b/test/files/run/t8756.check
new file mode 100644
index 0000000000..9b9dcafe7d
--- /dev/null
+++ b/test/files/run/t8756.check
@@ -0,0 +1,9 @@
+public Bippy<java.lang.Object> Test.f1(long)
+public Bippy<java.lang.Object> Test.f2(long)
+public Bippy<java.lang.Object> Test.i1(Bippy<java.lang.Object>)
+public Bippy<java.lang.Object> Test.i2(Bippy<java.lang.Object>)
+public int Test.g1(long)
+public int Test.g2(long)
+public java.lang.Object Test.h1(long)
+public java.lang.Object Test.h2(long)
+public static void Test.main(java.lang.String[])
diff --git a/test/files/run/t8756.scala b/test/files/run/t8756.scala
new file mode 100644
index 0000000000..edd243473a
--- /dev/null
+++ b/test/files/run/t8756.scala
@@ -0,0 +1,22 @@
+trait Bippy[A]
+
+class Test {
+ type T1 = Long
+ type T2 = Long { type Tag = Nothing }
+
+ def f1(t: T1): Bippy[Object] = ???
+ def f2(t: T2): Bippy[Object] = ???
+ def g1(t: T1): Int = ???
+ def g2(t: T2): Int = ???
+ def h1(t: T1): Object = ???
+ def h2(t: T2): Object = ???
+ def i1(t: Bippy[T1]): Bippy[T1] = ???
+ def i2(t: Bippy[T2]): Bippy[T2] = ???
+
+}
+
+object Test {
+ def main(args: Array[String]) {
+ println(classOf[Test].getDeclaredMethods.map(_.toGenericString).toList.sorted.mkString("\n"))
+ }
+}
diff --git a/test/files/run/t8764.check b/test/files/run/t8764.check
deleted file mode 100644
index 6260069602..0000000000
--- a/test/files/run/t8764.check
+++ /dev/null
@@ -1,5 +0,0 @@
-IntOnly: should return an unboxed int
-Int: int
-IntAndDouble: should just box and return Anyval
-Double: class java.lang.Double
-Int: class java.lang.Integer
diff --git a/test/files/run/t8764.flags b/test/files/run/t8764.flags
deleted file mode 100644
index 48fd867160..0000000000
--- a/test/files/run/t8764.flags
+++ /dev/null
@@ -1 +0,0 @@
--Xexperimental
diff --git a/test/files/run/t8764.scala b/test/files/run/t8764.scala
deleted file mode 100644
index decc658f6e..0000000000
--- a/test/files/run/t8764.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-object Test extends App {
-case class IntOnly(i: Int, j: Int)
-
-println("IntOnly: should return an unboxed int")
-val a = IntOnly(1, 2)
-val i: Int = a.productElement(0)
-println(s"Int: ${a.productElement(0).getClass}")
-
-case class IntAndDouble(i: Int, d: Double)
-
-println("IntAndDouble: should just box and return Anyval")
-val b = IntAndDouble(1, 2.0)
-val j: AnyVal = b.productElement(0)
-println(s"Double: ${b.productElement(1).getClass}")
-println(s"Int: ${b.productElement(0).getClass}")
-}
diff --git a/test/files/run/t8845.flags b/test/files/run/t8845.flags
deleted file mode 100644
index c30091d3de..0000000000
--- a/test/files/run/t8845.flags
+++ /dev/null
@@ -1 +0,0 @@
--Ybackend:GenBCode
diff --git a/test/files/run/t8918-unary-ids.check b/test/files/run/t8918-unary-ids.check
new file mode 100644
index 0000000000..92f02371c7
--- /dev/null
+++ b/test/files/run/t8918-unary-ids.check
@@ -0,0 +1,7 @@
+Expected 41 lines, got 39
+--- expected
++++ actual
+@@ -1,3 +1,1 @@
+-Type in expressions to have them evaluated.
+-Type :help for more information.
+
diff --git a/test/files/run/t8918-unary-ids.scala b/test/files/run/t8918-unary-ids.scala
new file mode 100644
index 0000000000..3aa990f72c
--- /dev/null
+++ b/test/files/run/t8918-unary-ids.scala
@@ -0,0 +1,49 @@
+
+
+import scala.tools.partest.SessionTest
+
+// Taking unary ids as plain
+object Test extends SessionTest {
+ def session =
+"""Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> val - = 42
+-: Int = 42
+
+scala> val i = -
+i: Int = 42
+
+scala> - { 42 }
+res0: Int = -42
+
+scala> - if (true) 1 else 2
+<console>:1: error: illegal start of simple expression
+- if (true) 1 else 2
+ ^
+
+scala> - - 1
+<console>:1: error: ';' expected but integer literal found.
+- - 1
+ ^
+
+scala> -.-(1)
+res1: Int = 41
+
+scala> -
+res2: Int = 42
+
+scala> - -
+res3: Int = -42
+
+scala> + -
+res4: Int = 42
+
+scala> object X { def -(i: Int) = 42 - i ; def f(g: Int => Int) = g(7) ; def j = f(-) }
+defined object X
+
+scala> X.j
+res5: Int = 35
+
+scala> :quit"""
+}
diff --git a/test/files/run/t8925.flags b/test/files/run/t8925.flags
index ffc65f4b81..213d7425d1 100644
--- a/test/files/run/t8925.flags
+++ b/test/files/run/t8925.flags
@@ -1 +1 @@
--Yopt:l:none -Ybackend:GenBCode
+-opt:l:none
diff --git a/test/files/run/t8944/A_1.scala b/test/files/run/t8944/A_1.scala
new file mode 100644
index 0000000000..7ff80327b0
--- /dev/null
+++ b/test/files/run/t8944/A_1.scala
@@ -0,0 +1 @@
+case class A(private val x: String)
diff --git a/test/files/run/t8944/A_2.scala b/test/files/run/t8944/A_2.scala
new file mode 100644
index 0000000000..3dcdea1583
--- /dev/null
+++ b/test/files/run/t8944/A_2.scala
@@ -0,0 +1,6 @@
+case class Other(private val x: String) // consume a fresh name suffix
+
+// the param accessor will now be called "x$2",
+// whereas the previously compiled client expects it to be called
+// x$1
+case class A(private val x: String)
diff --git a/test/files/run/t8944/Test_1.scala b/test/files/run/t8944/Test_1.scala
new file mode 100644
index 0000000000..fe466693cf
--- /dev/null
+++ b/test/files/run/t8944/Test_1.scala
@@ -0,0 +1,3 @@
+object Test extends App {
+ val A("") = new A("")
+}
diff --git a/test/files/run/t8944b.scala b/test/files/run/t8944b.scala
new file mode 100644
index 0000000000..f469122ce6
--- /dev/null
+++ b/test/files/run/t8944b.scala
@@ -0,0 +1,9 @@
+case class A(private var foo: Any) {
+ def m = { def foo = 42 /*will be lamba lifted to `A#foo$1`*/ }
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ val A("") = new A("")
+ new A("").m
+ }
+}
diff --git a/test/files/run/t8944c.check b/test/files/run/t8944c.check
new file mode 100644
index 0000000000..7738f76980
--- /dev/null
+++ b/test/files/run/t8944c.check
@@ -0,0 +1,5 @@
+private java.lang.Object Foo.ant()
+public java.lang.Object Foo.ant$access$0()
+private scala.collection.Seq Foo.cat()
+public scala.collection.Seq Foo.cat$access$2()
+public java.lang.Object Foo.elk()
diff --git a/test/files/run/t8944c.scala b/test/files/run/t8944c.scala
new file mode 100644
index 0000000000..95c2143851
--- /dev/null
+++ b/test/files/run/t8944c.scala
@@ -0,0 +1,8 @@
+case class Foo[A](private val ant: Any, elk: Any, private val cat: A*)
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ def pred(name: String) = Set("ant", "elk", "cat").exists(name contains _)
+ println(classOf[Foo[_]].getDeclaredMethods.filter(m => pred(m.getName)).sortBy(_.getName).mkString("\n"))
+ }
+}
diff --git a/test/files/run/t8955.scala b/test/files/run/t8955.scala
new file mode 100644
index 0000000000..afa31aa5d7
--- /dev/null
+++ b/test/files/run/t8955.scala
@@ -0,0 +1,12 @@
+import scala.collection.parallel.immutable.ParSet
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ for (i <- 1 to 2000) test()
+ }
+
+ def test() {
+ ParSet[Int]((1 to 10000): _*) foreach (x => ()) // hangs non deterministically
+ }
+}
+
diff --git a/test/files/run/t8960.scala b/test/files/run/t8960.scala
index a58ac53d33..a43d5679d8 100644
--- a/test/files/run/t8960.scala
+++ b/test/files/run/t8960.scala
@@ -1,5 +1,5 @@
object Test extends App {
- def test(o: AnyRef, sp: Boolean = false) = {
+ def testAnonFunClass(o: AnyRef, sp: Boolean = false) = {
val isSpecialized = o.getClass.getSuperclass.getName contains "$sp"
val isDelambdafyMethod = o.getClass.getName contains "$lambda$"
assert(
@@ -11,62 +11,68 @@ object Test extends App {
assert(f.getLong(null) == 0l)
}
- test(() => (), sp = true)
- test(() => 1, sp = true)
- test(() => "")
+ def testIndyLambda(o: AnyRef, sp: Boolean = false) = {
+ val isSpecialized = o.getClass.getInterfaces.exists(_.getName contains "$sp")
+ assert(sp == isSpecialized, o.getClass.getName)
+ }
+
+
+ testIndyLambda(() => (), sp = true)
+ testIndyLambda(() => 1, sp = true)
+ testIndyLambda(() => "")
- test((x: Int) => x, sp = true)
- test((x: Boolean) => x)
- test((x: Int) => "")
+ testIndyLambda((x: Int) => x, sp = true)
+ testIndyLambda((x: Boolean) => x)
+ testIndyLambda((x: Int) => "")
- test((x1: Int, x2: Int) => 0d, sp = true)
- test((x1: Int, x2: AnyRef) => 0d)
- test((x1: Any, x2: Any) => x1)
+ testIndyLambda((x1: Int, x2: Int) => 0d, sp = true)
+ testIndyLambda((x1: Int, x2: AnyRef) => 0d)
+ testIndyLambda((x1: Any, x2: Any) => x1)
- // scala> println((for (i <- 3 to 22) yield (for (j <- 1 to i) yield s"x$j: Int").mkString(" test((", ", ", ") => x1)")).mkString("\n"))
+ // scala> println((for (i <- 3 to 22) yield (for (j <- 1 to i) yield s"x$j: Int").mkString(" testIndyLambda((", ", ", ") => x1)")).mkString("\n"))
- test((x1: Int, x2: Int, x3: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int) => x1)
- test((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int) => x1)
+ testIndyLambda((x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int) => x1)
- test({
+ testAnonFunClass({
case x: Int => x
}: PartialFunction[Int, Int], sp = true)
- test({
+ testAnonFunClass({
case x: Int => x
}: PartialFunction[Any, Any])
- test({
+ testAnonFunClass({
case x: Int => ()
}: PartialFunction[Int, Unit], sp = true)
- test({
+ testAnonFunClass({
case x: String => 1
}: PartialFunction[String, Int])
- test({
+ testAnonFunClass({
case x: String => ()
}: PartialFunction[String, Unit])
- test({
+ testAnonFunClass({
case x: String => x
}: PartialFunction[String, String])
}
diff --git a/test/files/run/t9003.flags b/test/files/run/t9003.flags
index 49d036a887..63535a7f4f 100644
--- a/test/files/run/t9003.flags
+++ b/test/files/run/t9003.flags
@@ -1 +1 @@
--optimize
+-opt:l:classpath
diff --git a/test/files/run/t9097.scala b/test/files/run/t9097.scala
index aa2b23bbac..49c9e2f2e5 100644
--- a/test/files/run/t9097.scala
+++ b/test/files/run/t9097.scala
@@ -6,7 +6,6 @@ object Test extends StoreReporterDirectTest {
override def extraSettings: String = List(
"-usejavacp",
"-Xfatal-warnings",
- "-Ybackend:GenBCode",
"-Ydelambdafy:method",
"-Xprint:delambdafy",
s"-d ${testOutput.path}"
@@ -29,6 +28,6 @@ object Test extends StoreReporterDirectTest {
assert(!storeReporter.hasErrors, message = filteredInfos map (_.msg) mkString "; ")
val out = baos.toString("UTF-8")
// was 2 before the fix, the two PackageDefs for a would both contain the ClassDef for the closure
- assert(out.lines.count(_ contains "class hihi$1") == 1, out)
+ assert(out.lines.count(_ contains "def $anonfun$hihi$1(x$1: Int): String") == 1, out)
}
}
diff --git a/test/files/run/t9110.scala b/test/files/run/t9110.scala
new file mode 100644
index 0000000000..660291a4d1
--- /dev/null
+++ b/test/files/run/t9110.scala
@@ -0,0 +1,27 @@
+trait Event
+
+trait Domain {
+ case class Created(name: String) extends Event
+}
+
+// declare three instances of Domain trait, one here and two
+// in an inner scope
+
+object DomainC extends Domain
+
+object Test {
+ def main(args: Array[String]) {
+ object DomainA extends Domain
+ object DomainB extends Domain
+
+ def lookingForAs(event: Event): Unit = {
+ event match {
+ case DomainB.Created(_) => throw null
+ case DomainC.Created(_) => throw null
+ case DomainA.Created(_) => // okay
+ }
+ }
+
+ lookingForAs(DomainA.Created("I am an A"))
+ }
+}
diff --git a/test/files/run/t9174.check b/test/files/run/t9174.check
new file mode 100644
index 0000000000..14d6bc10db
--- /dev/null
+++ b/test/files/run/t9174.check
@@ -0,0 +1,17 @@
+
+scala> import scala.util.{Success, Failure}
+import scala.util.{Success, Failure}
+
+scala> def f1(b: Boolean) = if (b) Left(1) else Right(2)
+f1: (b: Boolean)scala.util.Either[Int,Int]
+
+scala> def f2(b: Boolean) = if (b) Nil else 1 :: Nil
+f2: (b: Boolean)List[Int]
+
+scala> def f3(b: Boolean) = if (b) Stream.Empty else new Stream.Cons(1, Stream.Empty)
+f3: (b: Boolean)scala.collection.immutable.Stream[Int]
+
+scala> def f4(b: Boolean) = if (b) Success(1) else Failure(new Exception(""))
+f4: (b: Boolean)scala.util.Try[Int]
+
+scala> :quit
diff --git a/test/files/run/t9174.scala b/test/files/run/t9174.scala
new file mode 100644
index 0000000000..0c70e9bca9
--- /dev/null
+++ b/test/files/run/t9174.scala
@@ -0,0 +1,11 @@
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+ |import scala.util.{Success, Failure}
+ |def f1(b: Boolean) = if (b) Left(1) else Right(2)
+ |def f2(b: Boolean) = if (b) Nil else 1 :: Nil
+ |def f3(b: Boolean) = if (b) Stream.Empty else new Stream.Cons(1, Stream.Empty)
+ |def f4(b: Boolean) = if (b) Success(1) else Failure(new Exception(""))
+ |""".stripMargin
+}
diff --git a/test/files/neg/sammy_wrong_arity.flags b/test/files/run/t9178a.flags
index 48fd867160..48fd867160 100644
--- a/test/files/neg/sammy_wrong_arity.flags
+++ b/test/files/run/t9178a.flags
diff --git a/test/files/run/t9178a.scala b/test/files/run/t9178a.scala
new file mode 100644
index 0000000000..4788841f8d
--- /dev/null
+++ b/test/files/run/t9178a.scala
@@ -0,0 +1,15 @@
+trait Sam { def apply(): Unit }
+abstract class Test {
+ def foo(): Sam
+ // no parens, instantiateToMethodType would wrap in a `new Sam { def apply = foo }`
+ // rather than applying to an empty param list() */
+ val f: Sam = foo
+}
+
+object Test extends Test {
+ lazy val samIAm = new Sam { def apply() {} }
+ def foo() = samIAm
+ def main(args: Array[String]): Unit = {
+ assert(f eq samIAm, f)
+ }
+}
diff --git a/test/files/run/t9200/Test.java b/test/files/run/t9200/Test.java
new file mode 100644
index 0000000000..8ff0314f6c
--- /dev/null
+++ b/test/files/run/t9200/Test.java
@@ -0,0 +1,6 @@
+public class Test {
+ public static void main(String[] args) {
+ new C1(new C2()); // Was NoSuchMethodError
+ }
+}
+
diff --git a/test/files/run/t9200/test.scala b/test/files/run/t9200/test.scala
new file mode 100644
index 0000000000..6fa7e91571
--- /dev/null
+++ b/test/files/run/t9200/test.scala
@@ -0,0 +1,12 @@
+trait W
+
+trait T1
+trait T2 extends T1
+
+object O1 {
+ type t = T1 with T2
+}
+
+class C1[w<:W](o: O1.t)
+
+class C2 extends T1 with T2
diff --git a/test/files/run/t9268.check b/test/files/run/t9268.check
index 90ef940eb3..60afcbb648 100644
--- a/test/files/run/t9268.check
+++ b/test/files/run/t9268.check
@@ -1,5 +1,4 @@
Compiling Client1
-pos: NoPosition Class Waiter not found - continuing with a stub. WARNING
+
Compiling Client2
-pos: NoPosition Class Waiter not found - continuing with a stub. WARNING
pos: NoPosition Unable to locate class corresponding to inner class entry for Predicate in owner Waiter ERROR
diff --git a/test/files/run/t9349/data.scala b/test/files/run/t9349/data.scala
new file mode 100644
index 0000000000..f88a6cfaeb
--- /dev/null
+++ b/test/files/run/t9349/data.scala
@@ -0,0 +1 @@
+case class Outer(i: Int) { class Inner }
diff --git a/test/files/run/t9349/test.scala b/test/files/run/t9349/test.scala
new file mode 100644
index 0000000000..ebce4e77dd
--- /dev/null
+++ b/test/files/run/t9349/test.scala
@@ -0,0 +1,21 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ val o1 = Outer(5)
+ o1 match {
+ case o @ Outer(_) =>
+ val i = new o.Inner
+ }
+ o1 match {
+ case o : Outer =>
+ val i = new o.Inner
+
+ }
+ object Extractor {
+ def unapply(a: Any): Option[Outer] = Some(o1)
+ }
+ null match {
+ case Extractor(o2) =>
+ val i = new o2.Inner
+ }
+ }
+}
diff --git a/test/files/run/t9375.check b/test/files/run/t9375.check
index 87551dccd1..8f43fab025 100644
--- a/test/files/run/t9375.check
+++ b/test/files/run/t9375.check
@@ -21,7 +21,7 @@ now initializing nested objects
konstruktor: class A$T$O$
konstruktor: class A$T$Op$
konstruktor: class A$O$11$
- konstruktor: class A$$anonfun$1$O$13$
+ konstruktor: class A$O$13$
konstruktor: class A$$anon$1$O$
konstruktor: class A$$anon$1$Op$
konstruktor: class T$O$
@@ -33,7 +33,7 @@ now initializing nested objects
konstruktor: class T$T$O$
konstruktor: class T$T$Op$
konstruktor: class T$O$14$
- konstruktor: class T$$anonfun$2$O$16$
+ konstruktor: class T$O$16$
konstruktor: class T$$anon$2$O$
konstruktor: class T$$anon$2$Op$
no object konstruktors called when serializing / deserializing objects (starting at the outer or the object itself)
@@ -56,5 +56,5 @@ init lazy val M.w
objects declared in lazy val are not static modules either
konstruktor: class M$O$19$
object declared in a function: new instance created on each invocation
- konstruktor: class M$$anonfun$3$O$20$
- konstruktor: class M$$anonfun$3$O$20$
+ konstruktor: class M$O$20$
+ konstruktor: class M$O$20$
diff --git a/test/files/run/t9375.scala b/test/files/run/t9375.scala
index 6ff4a425f8..3995b38666 100644
--- a/test/files/run/t9375.scala
+++ b/test/files/run/t9375.scala
@@ -1,6 +1,3 @@
-/*
- * filter: inliner warning
- */
import java.io._
object SerDes {
diff --git a/test/files/run/t9388-bin-compat.scala b/test/files/run/t9388-bin-compat.scala
deleted file mode 100644
index a03646612f..0000000000
--- a/test/files/run/t9388-bin-compat.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-class C {
- private object N extends Serializable { override def toString = "N" }
- def foo = N.toString
-}
-object Test {
- def main(args: Array[String]): Unit = {
- val c = Class.forName("C")
- assert(c.getDeclaredFields().toList.map(_.toString) ==
- List("private volatile C$N$ C.C$$N$module")) // field is name-mangled (C$$N$module instead of just N$module)
- assert(c.getDeclaredMethods().toList.map(_.toString).sorted ==
- List("private C$N$ C.C$$N$lzycompute()",
- "public C$N$ C.C$$N()",
- "public java.lang.String C.foo()")) // accessor is public, name-mangled
- assert((new C).foo == "N")
- }
-}
diff --git a/test/files/run/t9390.scala b/test/files/run/t9390.scala
new file mode 100644
index 0000000000..8d7e1be557
--- /dev/null
+++ b/test/files/run/t9390.scala
@@ -0,0 +1,67 @@
+class C {
+ def methodLift1 = {
+ def isEven(c: Int) = c % 2 == 0
+ val f: Int => Boolean = isEven
+ f
+ }
+ def methodLift2 = {
+ def isEven(c: Int) = c % 2 == 0
+ def isEven0(c: Int) = isEven(c)
+ val f: Int => Boolean = isEven0
+ f
+ }
+
+ def methodLift3 = {
+ def isEven(c: Int) = {toString; c % 2 == 0}
+ def isEven0(c: Int) = isEven(c)
+ val f: Int => Boolean = isEven0
+ f
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new C
+
+ {
+ val f = c.methodLift1
+ assert(f(0))
+ assert(!f(1))
+ val f1 = serializeDeserialize(f)
+ assert(f1(0))
+ assert(!f1(1))
+ }
+
+
+ {
+ val f = c.methodLift2
+ assert(f(0))
+ assert(!f(1))
+ val f1 = serializeDeserialize(f)
+ assert(f1(0))
+ assert(!f1(1))
+ }
+
+ {
+ val f = c.methodLift3
+ assert(f(0))
+ assert(!f(1))
+ try {
+ serializeDeserialize(this)
+ assert(false)
+ } catch {
+ case _: java.io.NotSerializableException =>
+ // expected, the closure in methodLift3 must capture C which is not serializable
+ }
+ }
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T): T = {
+ import java.io._
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray))
+ in.readObject.asInstanceOf[T]
+ }
+}
diff --git a/test/files/run/t9390b.scala b/test/files/run/t9390b.scala
new file mode 100644
index 0000000000..439e21e0a0
--- /dev/null
+++ b/test/files/run/t9390b.scala
@@ -0,0 +1,31 @@
+class C { // C is not serializable
+ def foo = (x: Int) => (y: Int) => x + y
+ def bar = (x: Int) => (y: Int) => {toString; x + y}
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new C
+ val f = c.foo
+ assert(f(1)(2) == 3)
+ val f1 = serializeDeserialize(f)
+ assert(f1(1)(2) == 3)
+
+ try {
+ serializeDeserialize(c.bar)
+ assert(false)
+ } catch {
+ case _: java.io.NotSerializableException =>
+ // expected, lambda transitively refers to this
+ }
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T): T = {
+ import java.io._
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray))
+ in.readObject.asInstanceOf[T]
+ }
+}
diff --git a/test/files/run/t9390c.scala b/test/files/run/t9390c.scala
new file mode 100644
index 0000000000..db39da57cd
--- /dev/null
+++ b/test/files/run/t9390c.scala
@@ -0,0 +1,21 @@
+class C { // C is not serializable
+ def foo = {
+ { (x: Any) => new Object {} }
+ }
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new C
+ val f = c.foo
+ val f1 = serializeDeserialize(f)
+ }
+
+ def serializeDeserialize[T <: AnyRef](obj: T): T = {
+ import java.io._
+ val buffer = new ByteArrayOutputStream
+ val out = new ObjectOutputStream(buffer)
+ out.writeObject(obj)
+ val in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray))
+ in.readObject.asInstanceOf[T]
+ }
+}
diff --git a/test/files/run/t9390d.scala b/test/files/run/t9390d.scala
new file mode 100644
index 0000000000..3c5de3abf7
--- /dev/null
+++ b/test/files/run/t9390d.scala
@@ -0,0 +1,12 @@
+class C { // C is not serializable
+ def foo: () => Any = {
+ { () => class UseOuterInConstructor { C.this.toString }; new UseOuterInConstructor : Any}
+ }
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ val c = new C
+ val f = c.foo
+ f() // Doesn't NPE, as we didn't elide the outer instance in the constructor call.
+ }
+}
diff --git a/test/files/run/t9403.flags b/test/files/run/t9403.flags
index 307668060c..63535a7f4f 100644
--- a/test/files/run/t9403.flags
+++ b/test/files/run/t9403.flags
@@ -1 +1 @@
--Ybackend:GenASM -optimize
+-opt:l:classpath
diff --git a/test/files/run/t9408.scala b/test/files/run/t9408.scala
new file mode 100644
index 0000000000..231dca4ce7
--- /dev/null
+++ b/test/files/run/t9408.scala
@@ -0,0 +1,61 @@
+class Outer {
+ def assertNoFields(c: Class[_]) {
+ assert(c.getDeclaredFields.isEmpty)
+ }
+ def assertHasOuter(c: Class[_]) {
+ assert(c.getDeclaredFields.exists(_.getName.contains("outer")))
+ }
+ class Member
+ final class FinalMember
+
+ def test {
+ assertHasOuter(classOf[Member])
+ assertNoFields(classOf[FinalMember])
+ final class C
+ assertNoFields(classOf[C])
+ class D
+ assertNoFields(classOf[D])
+ (() => {class E; assertNoFields(classOf[E])}).apply()
+
+ // The outer reference elision currently runs on a class-by-class basis. If it cannot rule out that a class has
+ // subclasses, it will not remove the outer reference. A smarter analysis here could detect if no members of
+ // a sealed (or effectively sealed) hierarchy use the outer reference, the optimization could be performed.
+ class Parent
+ class Child extends Parent
+ assertHasOuter(classOf[Parent])
+
+ // Note: outer references (if they haven't been elided) are used in pattern matching as follows.
+ // This isn't relevant to term-owned classes, as you can't refer to them with a prefix that includes
+ // the outer class.
+ val outer1 = new Outer
+ val outer2 = new Outer
+ (new outer1.Member: Any) match {
+ case _: outer2.Member => sys.error("wrong match!")
+ case _: outer1.Member => // okay
+ }
+
+ // ... continuing on that theme, note that `Member` isn't considered as a local class, it is owned by a the class
+ // `LocalOuter`, which itself happens to be term-owned. So we expect that it has an outer reference, and that this
+ // is respected in type tests.
+ class LocalOuter {
+ class Member
+ final class FinalMember
+ }
+ assertNoFields(classOf[LocalOuter])
+ assertHasOuter(classOf[LocalOuter#Member])
+ val localOuter1 = new LocalOuter
+ val localOuter2 = new LocalOuter
+ (new localOuter1.Member: Any) match {
+ case _: localOuter2.Member => sys.error("wrong match!")
+ case _: localOuter1.Member => // okay
+ }
+ // Final member classes still lose the outer reference.
+ assertNoFields(classOf[LocalOuter#FinalMember])
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ new Outer().test
+ }
+}
diff --git a/test/files/run/t9437a.check b/test/files/run/t9437a.check
new file mode 100644
index 0000000000..564213c587
--- /dev/null
+++ b/test/files/run/t9437a.check
@@ -0,0 +1,10 @@
+name: a; isNamePresent: true; isSynthetic: false
+name: _; isNamePresent: true; isSynthetic: false
+name: ***; isNamePresent: true; isSynthetic: false
+name: unary_!; isNamePresent: true; isSynthetic: false
+name: ABC; isNamePresent: true; isSynthetic: false
+name: a; isNamePresent: true; isSynthetic: false
+name: _; isNamePresent: true; isSynthetic: false
+name: ***; isNamePresent: true; isSynthetic: false
+name: unary_!; isNamePresent: true; isSynthetic: false
+name: ABC; isNamePresent: true; isSynthetic: false
diff --git a/test/files/run/t9437a/Test.scala b/test/files/run/t9437a/Test.scala
new file mode 100644
index 0000000000..a86c17b646
--- /dev/null
+++ b/test/files/run/t9437a/Test.scala
@@ -0,0 +1,20 @@
+class Foo(a: Int, `_`: String, *** : Long, `unary_!` : Float, ABC: Double) {
+ def bar(a: Int, `_`: String, *** : Long, `unary_!` : Float, ABC: Double) = null
+}
+
+object Test extends App {
+ val constrParams = classOf[Foo].getConstructors.head.getParameters
+ val methodParams = classOf[Foo].getDeclaredMethods.head.getParameters
+
+ def printParams(params: Array[java.lang.reflect.Parameter]) = {
+ params.foreach { param =>
+ println(s"name: ${param.getName}; isNamePresent: ${param.isNamePresent}; isSynthetic: ${param.isSynthetic}")
+ }
+ }
+
+ printParams(constrParams)
+ printParams(methodParams)
+
+ val foo = new Foo(a = 1, `_` = "2", *** = 3L, `unary_!` = 4.0f, ABC = 5.0)
+ foo.bar(a = 1, `_` = "2", *** = 3L, `unary_!` = 4.0f, ABC = 5.0)
+}
diff --git a/test/files/run/t9437b.check b/test/files/run/t9437b.check
new file mode 100644
index 0000000000..564213c587
--- /dev/null
+++ b/test/files/run/t9437b.check
@@ -0,0 +1,10 @@
+name: a; isNamePresent: true; isSynthetic: false
+name: _; isNamePresent: true; isSynthetic: false
+name: ***; isNamePresent: true; isSynthetic: false
+name: unary_!; isNamePresent: true; isSynthetic: false
+name: ABC; isNamePresent: true; isSynthetic: false
+name: a; isNamePresent: true; isSynthetic: false
+name: _; isNamePresent: true; isSynthetic: false
+name: ***; isNamePresent: true; isSynthetic: false
+name: unary_!; isNamePresent: true; isSynthetic: false
+name: ABC; isNamePresent: true; isSynthetic: false
diff --git a/test/files/run/t9437b/Foo_1.scala b/test/files/run/t9437b/Foo_1.scala
new file mode 100644
index 0000000000..ca6c9c6156
--- /dev/null
+++ b/test/files/run/t9437b/Foo_1.scala
@@ -0,0 +1,3 @@
+class Foo(a: Int, `_`: String, *** : Long, `unary_!` : Float, ABC: Double) {
+ def bar(a: Int, `_`: String, *** : Long, `unary_!` : Float, ABC: Double) = null
+}
diff --git a/test/files/run/t9437b/Test_2.scala b/test/files/run/t9437b/Test_2.scala
new file mode 100644
index 0000000000..521f525f1d
--- /dev/null
+++ b/test/files/run/t9437b/Test_2.scala
@@ -0,0 +1,16 @@
+object Test extends App {
+ val constrParams = classOf[Foo].getConstructors.head.getParameters
+ val methodParams = classOf[Foo].getDeclaredMethods.head.getParameters
+
+ def printParams(params: Array[java.lang.reflect.Parameter]) = {
+ params.foreach { param =>
+ println(s"name: ${param.getName}; isNamePresent: ${param.isNamePresent}; isSynthetic: ${param.isSynthetic}")
+ }
+ }
+
+ printParams(constrParams)
+ printParams(methodParams)
+
+ val foo = new Foo(a = 1, `_` = "2", *** = 3L, `unary_!` = 4.0f, ABC = 5.0)
+ foo.bar(a = 1, `_` = "2", *** = 3L, `unary_!` = 4.0f, ABC = 5.0)
+}
diff --git a/test/files/run/t9437c.check b/test/files/run/t9437c.check
new file mode 100644
index 0000000000..564213c587
--- /dev/null
+++ b/test/files/run/t9437c.check
@@ -0,0 +1,10 @@
+name: a; isNamePresent: true; isSynthetic: false
+name: _; isNamePresent: true; isSynthetic: false
+name: ***; isNamePresent: true; isSynthetic: false
+name: unary_!; isNamePresent: true; isSynthetic: false
+name: ABC; isNamePresent: true; isSynthetic: false
+name: a; isNamePresent: true; isSynthetic: false
+name: _; isNamePresent: true; isSynthetic: false
+name: ***; isNamePresent: true; isSynthetic: false
+name: unary_!; isNamePresent: true; isSynthetic: false
+name: ABC; isNamePresent: true; isSynthetic: false
diff --git a/test/files/run/t9437c/Test.scala b/test/files/run/t9437c/Test.scala
new file mode 100644
index 0000000000..4be233a258
--- /dev/null
+++ b/test/files/run/t9437c/Test.scala
@@ -0,0 +1,92 @@
+import java.io.{File, FileOutputStream}
+
+import scala.tools.nsc.settings.ScalaVersion
+import scala.tools.partest._
+import scala.tools.asm
+import asm.{AnnotationVisitor, ClassWriter, FieldVisitor, Handle, MethodVisitor, Opcodes}
+import Opcodes._
+
+// This test ensures that we can read JDK 8 (classfile format 52) files with
+// parameter names. To do that it first uses ASM to generate a class containing
+// these additional attributes. Then it runs a normal compile on Scala source
+// that uses the class with named arguments.
+// Any failure will be dumped to std out.
+object Test extends DirectTest {
+ override def extraSettings: String = "-usejavacp -d " + testOutput.path + " -cp " + testOutput.path
+
+ def generateCode(): Unit = {
+ val className = "Foo"
+
+ val cw = new ClassWriter(0)
+ cw.visit(52, ACC_PUBLIC + ACC_SUPER, className, null, "java/lang/Object", null);
+
+ val mvC = cw.visitMethod(ACC_PUBLIC, "<init>", "(ILjava/lang/String;JFD)V", null, null);
+ mvC.visitParameter("a", ACC_FINAL);
+ mvC.visitParameter("_", ACC_FINAL);
+ mvC.visitParameter("***", ACC_FINAL);
+ mvC.visitParameter("unary_!", ACC_FINAL);
+ mvC.visitParameter("ABC", ACC_FINAL);
+ mvC.visitCode();
+ mvC.visitVarInsn(ALOAD, 0);
+ mvC.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+ mvC.visitInsn(RETURN);
+ mvC.visitMaxs(1, 8);
+ mvC.visitEnd();
+
+ val mvM = cw.visitMethod(ACC_PUBLIC, "bar", "(ILjava/lang/String;JFD)Lscala/runtime/Null$;", null, null);
+ mvM.visitParameter("a", ACC_FINAL);
+ mvM.visitParameter("_", ACC_FINAL);
+ mvM.visitParameter("***", ACC_FINAL);
+ mvM.visitParameter("unary_!", ACC_FINAL);
+ mvM.visitParameter("ABC", ACC_FINAL);
+ mvM.visitCode();
+ mvM.visitInsn(ACONST_NULL);
+ mvM.visitInsn(ARETURN);
+ mvM.visitMaxs(1, 8);
+ mvM.visitEnd();
+
+ cw.visitEnd();
+
+ val bytes = cw.toByteArray()
+
+ val fos = new FileOutputStream(new File(s"${testOutput.path}/$className.class"))
+ try
+ fos write bytes
+ finally
+ fos.close()
+
+ }
+
+ def code =
+"""
+class Driver {
+ val constrParams = classOf[Foo].getConstructors.head.getParameters
+ val methodParams = classOf[Foo].getDeclaredMethods.head.getParameters
+
+ def printParams(params: Array[java.lang.reflect.Parameter]) = {
+ params.foreach { param =>
+ println(s"name: ${param.getName}; isNamePresent: ${param.isNamePresent}; isSynthetic: ${param.isSynthetic}")
+ }
+ }
+
+ printParams(constrParams)
+ printParams(methodParams)
+
+ val foo = new Foo(a = 1, `_` = "2", *** = 3L, `unary_!` = 4.0f, ABC = 5.0)
+ foo.bar(a = 1, `_` = "2", *** = 3L, `unary_!` = 4.0f, ABC = 5.0)
+}
+"""
+
+ override def show(): Unit = {
+ // redirect err to out, for logging
+ val prevErr = System.err
+ System.setErr(System.out)
+ try {
+ generateCode()
+ compile()
+ Class.forName("Driver").newInstance()
+ }
+ finally
+ System.setErr(prevErr)
+ }
+}
diff --git a/test/files/neg/t8764.flags b/test/files/run/t9489.flags
index 48fd867160..48fd867160 100644
--- a/test/files/neg/t8764.flags
+++ b/test/files/run/t9489.flags
diff --git a/test/files/run/t9489/A.java b/test/files/run/t9489/A.java
new file mode 100644
index 0000000000..c3536faa14
--- /dev/null
+++ b/test/files/run/t9489/A.java
@@ -0,0 +1,3 @@
+public class A {
+ public B b() { return null; }
+}
diff --git a/test/files/run/t9489/B.java b/test/files/run/t9489/B.java
new file mode 100644
index 0000000000..e5d1278cd7
--- /dev/null
+++ b/test/files/run/t9489/B.java
@@ -0,0 +1,3 @@
+public abstract class B {
+ public abstract int m();
+}
diff --git a/test/files/run/t9489/test.scala b/test/files/run/t9489/test.scala
new file mode 100644
index 0000000000..1b745af865
--- /dev/null
+++ b/test/files/run/t9489/test.scala
@@ -0,0 +1,10 @@
+class T {
+ def f(a: A) = g(a.b) // was: "found Int, required B"
+ def g(b: => B) = null
+}
+
+object Test extends T {
+ def main(args: Array[String]): Unit = {
+ f(new A)
+ }
+}
diff --git a/test/files/run/t9516.scala b/test/files/run/t9516.scala
new file mode 100644
index 0000000000..b3068dd1ff
--- /dev/null
+++ b/test/files/run/t9516.scala
@@ -0,0 +1,52 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ intShiftLeftLongConstantFolded()
+ intShiftLeftLongAtRuntime()
+ intShiftLogicalRightLongConstantFolded()
+ intShiftLogicalRightLongAtRuntime()
+ intShiftArithmeticRightLongConstantFolded()
+ intShiftArithmeticRightLongAtRuntime()
+ }
+
+ def intShiftLeftLongConstantFolded(): Unit = {
+ assert(0x01030507 << 36L == 271601776)
+ val r = 0x01030507 << 36L
+ assert(r == 271601776)
+ }
+
+ def intShiftLeftLongAtRuntime(): Unit = {
+ var x: Int = 0x01030507
+ var y: Long = 36L
+ assert(x << y == 271601776)
+ val r = x << y
+ assert(r == 271601776)
+ }
+
+ def intShiftLogicalRightLongConstantFolded(): Unit = {
+ assert(0x90503010 >>> 36L == 151323393)
+ val r = 0x90503010 >>> 36L
+ assert(r == 151323393)
+ }
+
+ def intShiftLogicalRightLongAtRuntime(): Unit = {
+ var x: Int = 0x90503010
+ var y: Long = 36L
+ assert(x >>> y == 151323393)
+ val r = x >>> y
+ assert(r == 151323393)
+ }
+
+ def intShiftArithmeticRightLongConstantFolded(): Unit = {
+ assert(0x90503010 >> 36L == -117112063)
+ val r = 0x90503010 >> 36L
+ assert(r == -117112063)
+ }
+
+ def intShiftArithmeticRightLongAtRuntime(): Unit = {
+ var x: Int = 0x90503010
+ var y: Long = 36L
+ assert(x >> y == -117112063)
+ val r = x >> y
+ assert(r == -117112063)
+ }
+}
diff --git a/test/files/run/t9535.scala b/test/files/run/t9535.scala
new file mode 100644
index 0000000000..62e156e456
--- /dev/null
+++ b/test/files/run/t9535.scala
@@ -0,0 +1,22 @@
+class C[E <: Exception] {
+ @throws[E] def f = 1
+
+ @throws(classOf[Exception]) def g: E = ???
+
+ @throws[E] @throws[Exception] def h = 1
+}
+
+object Test extends App {
+ val c = classOf[C[_]]
+ def sig(method: String) = c.getDeclaredMethod(method).toString
+ def genSig(method: String) = c.getDeclaredMethod(method).toGenericString
+
+ assert(sig("f") == "public int C.f() throws java.lang.Exception")
+ assert(genSig("f") == "public int C.f() throws E")
+
+ assert(sig("g") == "public java.lang.Exception C.g() throws java.lang.Exception")
+ assert(genSig("g") == "public E C.g() throws java.lang.Exception")
+
+ assert(sig("h") == "public int C.h() throws java.lang.Exception,java.lang.Exception")
+ assert(genSig("h") == "public int C.h() throws E,java.lang.Exception")
+}
diff --git a/test/files/run/t9656.check b/test/files/run/t9656.check
new file mode 100644
index 0000000000..03e3ff3b5f
--- /dev/null
+++ b/test/files/run/t9656.check
@@ -0,0 +1,14 @@
+Range 1 to 10
+Range 1 to 10
+inexact Range 1 to 10 by 2
+Range 1 to 10 by 3
+inexact Range 1 until 10 by 2
+Range 100 to 100
+empty Range 100 until 100
+NumericRange 1 to 10
+NumericRange 1 to 10 by 2
+NumericRange 0.1 until 1.0 by 0.1
+NumericRange 0.1 until 1.0 by 0.1
+NumericRange 0.1 until 1.0 by 0.1 (using NumericRange 0.1 until 1.0 by 0.1 of BigDecimal)
+NumericRange 0 days until 10 seconds by 1 second
+empty NumericRange 0 days until 0 days by 1 second
diff --git a/test/files/run/t9656.scala b/test/files/run/t9656.scala
new file mode 100644
index 0000000000..3732719553
--- /dev/null
+++ b/test/files/run/t9656.scala
@@ -0,0 +1,43 @@
+
+import scala.math.BigDecimal
+
+object Test extends App {
+ println(1 to 10)
+ println(1 to 10 by 1)
+ println(1 to 10 by 2)
+ println(1 to 10 by 3)
+ println(1 until 10 by 2)
+ println(100 to 100)
+ println(100 until 100)
+
+ println(1L to 10L)
+ println(1L to 10L by 2)
+
+ // want to know if this is BigDecimal or Double stepping by BigDecimal
+ println(0.1 until 1.0 by 0.1)
+ println(Range.BigDecimal(BigDecimal("0.1"), BigDecimal("1.0"), BigDecimal("0.1")))
+ println(Range.Double(0.1, 1.0, 0.1))
+
+ import concurrent.duration.{SECONDS => Seconds, _}, collection.immutable.NumericRange
+ implicit val `duration is integerish`: math.Integral[FiniteDuration] = new math.Integral[FiniteDuration] {
+ def quot(x: scala.concurrent.duration.FiniteDuration,y: scala.concurrent.duration.FiniteDuration): scala.concurrent.duration.FiniteDuration = ???
+ def rem(x: scala.concurrent.duration.FiniteDuration,y: scala.concurrent.duration.FiniteDuration): scala.concurrent.duration.FiniteDuration = ???
+
+ // Members declared in scala.math.Numeric
+ def fromInt(x: Int): scala.concurrent.duration.FiniteDuration = Duration(x, Seconds)
+ def minus(x: scala.concurrent.duration.FiniteDuration,y: scala.concurrent.duration.FiniteDuration): scala.concurrent.duration.FiniteDuration = ???
+ def negate(x: scala.concurrent.duration.FiniteDuration): scala.concurrent.duration.FiniteDuration = ???
+ def plus(x: scala.concurrent.duration.FiniteDuration,y: scala.concurrent.duration.FiniteDuration): scala.concurrent.duration.FiniteDuration = ???
+ def times(x: scala.concurrent.duration.FiniteDuration,y: scala.concurrent.duration.FiniteDuration): scala.concurrent.duration.FiniteDuration = ???
+ def toDouble(x: scala.concurrent.duration.FiniteDuration): Double = ???
+ def toFloat(x: scala.concurrent.duration.FiniteDuration): Float = ???
+ def toInt(x: scala.concurrent.duration.FiniteDuration): Int = toLong(x).toInt
+ def toLong(x: scala.concurrent.duration.FiniteDuration): Long = x.length
+
+ // Members declared in scala.math.Ordering
+ def compare(x: scala.concurrent.duration.FiniteDuration,y: scala.concurrent.duration.FiniteDuration): Int =
+ x.compare(y)
+ }
+ println(NumericRange(Duration.Zero, Duration(10, Seconds), Duration(1, Seconds)))
+ println(NumericRange(Duration.Zero, Duration.Zero, Duration(1, Seconds)))
+}
diff --git a/test/files/run/t9697.check b/test/files/run/t9697.check
new file mode 100644
index 0000000000..2a4f01c14f
--- /dev/null
+++ b/test/files/run/t9697.check
@@ -0,0 +1 @@
+warning: there were 9 deprecation warnings (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/t9697.scala b/test/files/run/t9697.scala
new file mode 100644
index 0000000000..eb8e44f8fc
--- /dev/null
+++ b/test/files/run/t9697.scala
@@ -0,0 +1,204 @@
+object log {
+ val b = new collection.mutable.StringBuilder
+ def apply(s: Any): Unit = b.append(s)
+ def check(s: String) = {
+ val bs = b.toString
+ assert(s == bs, bs)
+ b.clear()
+ }
+}
+
+package t9697 {
+ abstract class WA extends DelayedInit {
+ override def delayedInit(x: => Unit): Unit = x
+ val waField = "4"
+ }
+
+ class C {
+ def b(s: String) = log(s)
+ val cField = "1"
+
+ {
+ val dummyLocal = "2"
+ new WA {
+ val anonField = "3"
+ b(cField)
+ b(dummyLocal)
+ b(anonField)
+ b(waField)
+ }
+ }
+ }
+}
+
+package sd229 {
+ class Broken {
+ def is(ee: AnyRef) = {
+ new Delayed {
+ log(ee)
+ }
+ }
+ }
+
+ class Delayed extends DelayedInit {
+ def delayedInit(x: => Unit): Unit = x
+ }
+}
+
+
+// already fixed in 2.11.8, crashes in 2.10.6
+package t4683a {
+ class A { log("a") }
+ class B { log("b") }
+ class Bug extends DelayedInit {
+ log("bug")
+ def foo(a: A): B = new B
+ def delayedInit(init: => Unit): Unit = init
+ }
+}
+
+// already fixed in 2.12.0-RC1, crashes in 2.11.8
+package t4683b {
+ class Entity extends DelayedInit {
+ def delayedInit(x: => Unit): Unit = x
+
+ class Field
+
+ protected def EntityField[T <: Entity: reflect.ClassTag] = new Field
+
+ def find[T <: Entity: reflect.ClassTag] {
+ Nil.map(dbo => {
+ class EntityHolder extends Entity {
+ val entity = EntityField[T]
+ }
+ })
+ log("find")
+ }
+ }
+}
+
+package t4683c {
+ trait T extends DelayedInit {
+ def delayedInit(body: => Unit) = {
+ log("init")
+ body
+ }
+ }
+}
+
+package t4683d {
+ class C extends DelayedInit {
+ def delayedInit(body: => Unit): Unit = body
+ }
+ class Injector {
+ def test: Object = {
+ val name = "k"
+ class crash extends C {
+ log(name)
+ }
+ new crash()
+ }
+ }
+}
+
+package t4683e {
+ class DelayedInitTest {
+ def a = log("uh")
+ class B extends DelayedInit {
+ a
+ def delayedInit(body: => Unit): Unit = body
+ }
+ }
+}
+
+package t4683f {
+ class Foo extends DelayedInit {
+ log("fooInit")
+ def delayedInit(newBody: => Unit): Unit = {
+ log("delayedInit")
+ inits = {
+ val f = () => newBody
+ if (inits == null) {
+ log("initsNull")
+ List(f)
+ } else
+ f :: inits
+ }
+ }
+ def foo = log("foo")
+ var inits: List[() => Unit] = Nil
+ }
+
+ class Bar extends Foo {
+ log("barInit")
+ def bar = foo
+ def newBaz: Foo = new Baz
+ private class Baz extends Foo {
+ log("bazInit")
+ bar
+ }
+ }
+}
+
+package t4683g {
+ trait MatExpWorld { self =>
+ class T extends Runner { val expWorld: self.type = self }
+ }
+
+ trait Runner extends DelayedInit {
+ def delayedInit(init: => Unit): Unit = init
+ val expWorld: MatExpWorld
+ }
+}
+
+
+object Test extends App {
+ new t9697.C()
+ log.check("1234")
+
+ new sd229.Broken().is("hi")
+ log.check("hi")
+
+ val a: t4683a.A = new t4683a.A
+ var b: t4683a.B = null
+ new t4683a.Bug {
+ val b = foo(a)
+ }
+ log.check("abugb")
+
+ new t4683b.Entity().find[t4683b.Entity]
+ log.check("find")
+
+ val f = (p1: Int) => new t4683c.T { log(p1) }
+ f(5)
+ log.check("init5")
+
+ new t4683d.Injector().test
+ log.check("k")
+
+ val dit = new t4683e.DelayedInitTest()
+ new dit.B()
+ log.check("uh")
+
+ val fuu = new t4683f.Foo
+ log.check("delayedInitinitsNull")
+ fuu.inits.foreach(_.apply())
+ log.check("fooInit")
+ assert(fuu.inits == Nil) // the (delayed) initializer of Foo sets the inits field to Nil
+
+ val brr = new t4683f.Bar
+ log.check("delayedInitinitsNulldelayedInit") // delayedInit is called once for each constructor
+ brr.inits.foreach(_.apply())
+ log.check("barInitfooInit")
+ assert(brr.inits == Nil)
+
+ val bzz = brr.newBaz
+ log.check("delayedInitinitsNulldelayedInit")
+ bzz.inits.foreach(_.apply())
+ log.check("bazInitfoofooInit")
+ assert(bzz.inits == Nil)
+
+ val mew = new t4683g.MatExpWorld { }
+ val mt = new mew.T
+ assert(mt.expWorld == mew)
+}
diff --git a/test/files/run/t9749-repl-dot.check b/test/files/run/t9749-repl-dot.check
new file mode 100644
index 0000000000..5ffec4ce60
--- /dev/null
+++ b/test/files/run/t9749-repl-dot.check
@@ -0,0 +1,8 @@
+
+scala> "3"
+res0: String = 3
+
+scala> .toInt
+res1: Int = 3
+
+scala> :quit
diff --git a/test/files/run/t9749-repl-dot.scala b/test/files/run/t9749-repl-dot.scala
new file mode 100644
index 0000000000..19cecbf444
--- /dev/null
+++ b/test/files/run/t9749-repl-dot.scala
@@ -0,0 +1,10 @@
+
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code =
+ """
+"3"
+ .toInt
+ """
+}
diff --git a/test/files/run/t9806.scala b/test/files/run/t9806.scala
deleted file mode 100644
index ccde989efe..0000000000
--- a/test/files/run/t9806.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-object Ex extends Exception
-object Test {
- def main(args: Array[String]) {
- try foo catch { case Ex => }
- }
-
- def isTrue(b: Boolean) = b
- def foo = {
- var streamErrors1 = true
- try {
- streamErrors1 = false
- throw Ex
- } catch {
- case ex if streamErrors1 =>
- assert(isTrue(streamErrors1))
- }
- }
-}
diff --git a/test/files/run/t9841.scala b/test/files/run/t9841.scala
index 19cfef28a5..2f7642ed03 100644
--- a/test/files/run/t9841.scala
+++ b/test/files/run/t9841.scala
@@ -1,10 +1,4 @@
-// SI-9841 regrettable behavior initializing private inner object
-// A fix is not yet planned for 2.11.9, but it works in 2.12.x.
-//
-//at Container.Container$$Inner$lzycompute(t9841.scala:4)
-//at Container.Container$$Inner(t9841.scala:4)
-//at Container$Inner$.<init>(t9841.scala:5)
-//
+
class Container {
private case class Inner(s: String)
private object Inner {
@@ -14,11 +8,5 @@ class Container {
}
object Test extends App {
- val catcher: PartialFunction[Throwable, Unit] = {
- case _: StackOverflowError =>
- }
- try {
- new Container
- Console println "Expected StackOverflowError"
- } catch catcher
+ new Container
}
diff --git a/test/files/run/t9920.scala b/test/files/run/t9920.scala
new file mode 100644
index 0000000000..5dc32e99b7
--- /dev/null
+++ b/test/files/run/t9920.scala
@@ -0,0 +1,17 @@
+class C0
+trait T { self: C0 =>
+ def test = {
+ object Local
+
+ class C1 {
+ Local
+ }
+ new C1()
+ }
+}
+
+object Test extends C0 with T {
+ def main(args: Array[String]): Unit = {
+ test
+ }
+}
diff --git a/test/files/run/t9920b.scala b/test/files/run/t9920b.scala
new file mode 100644
index 0000000000..fab196b669
--- /dev/null
+++ b/test/files/run/t9920b.scala
@@ -0,0 +1,17 @@
+class C0
+trait T {
+ def test = {
+ object Local
+
+ class C1 {
+ Local
+ }
+ new C1()
+ }
+}
+
+object Test extends C0 with T {
+ def main(args: Array[String]): Unit = {
+ test
+ }
+}
diff --git a/test/files/run/t9920c.scala b/test/files/run/t9920c.scala
new file mode 100644
index 0000000000..9541dc650a
--- /dev/null
+++ b/test/files/run/t9920c.scala
@@ -0,0 +1,21 @@
+class C0
+trait T { self: C0 =>
+ def test = {
+ object Local
+
+ class C2 {
+ class C1 {
+ Local
+ }
+ T.this.toString
+ new C1
+ }
+ new C2()
+ }
+}
+
+object Test extends C0 with T {
+ def main(args: Array[String]): Unit = {
+ test
+ }
+}
diff --git a/test/files/run/t9920d.scala b/test/files/run/t9920d.scala
new file mode 100644
index 0000000000..debc99e199
--- /dev/null
+++ b/test/files/run/t9920d.scala
@@ -0,0 +1,14 @@
+class C { object O }
+trait T { _: C =>
+ def foo {
+ class D { O }
+ new D
+ }
+}
+
+
+object Test extends C with T {
+ def main(args: Array[String]): Unit = {
+ foo
+ }
+}
diff --git a/test/files/run/t9946a.scala b/test/files/run/t9946a.scala
new file mode 100644
index 0000000000..491fb31f7b
--- /dev/null
+++ b/test/files/run/t9946a.scala
@@ -0,0 +1,14 @@
+package p1 {
+ object O {
+ private case class N(a: Any)
+ lazy val x: AnyRef = N
+ lazy val y: AnyRef = new { assert(N != null) }
+ }
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ p1.O.x
+ p1.O.y
+ }
+}
diff --git a/test/files/run/t9946b.scala b/test/files/run/t9946b.scala
new file mode 100644
index 0000000000..ac102a38f7
--- /dev/null
+++ b/test/files/run/t9946b.scala
@@ -0,0 +1,12 @@
+class Test(private val x: String) {
+ lazy val y = x.reverse
+}
+object Test {
+ def getX(t: Test) = t.x
+ def main(args: Array[String]): Unit = {
+ val t = new Test("foo")
+ assert(t.y == "oof", t.y)
+ assert(t.x == "foo", t.x)
+ }
+}
+
diff --git a/test/files/run/t9946c.scala b/test/files/run/t9946c.scala
new file mode 100644
index 0000000000..f9fe68d48f
--- /dev/null
+++ b/test/files/run/t9946c.scala
@@ -0,0 +1,10 @@
+class Test(private[this] val x: String) {
+ lazy val y = x.reverse
+}
+object Test {
+ def main(args: Array[String]): Unit = {
+ val t = new Test("foo")
+ assert(t.y == "oof", t.y)
+ }
+}
+
diff --git a/test/files/run/test-cpp.check b/test/files/run/test-cpp.check
deleted file mode 100644
index 13f4c64be3..0000000000
--- a/test/files/run/test-cpp.check
+++ /dev/null
@@ -1,81 +0,0 @@
---- a
-+++ b
-@@ -36,3 +36,3 @@
- def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
-- locals: value args, value x, value y
-+ locals: value args
- startBlock: 1
-@@ -41,10 +41,6 @@
- 1:
-- 52 CONSTANT(2)
-- 52 STORE_LOCAL(value x)
- 52 SCOPE_ENTER value x
-- 53 LOAD_LOCAL(value x)
-- 53 STORE_LOCAL(value y)
- 53 SCOPE_ENTER value y
- 54 LOAD_MODULE object Predef
-- 54 LOAD_LOCAL(value y)
-+ 54 CONSTANT(2)
- 54 BOX INT
-@@ -91,3 +87,3 @@
- def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
-- locals: value args, value x, value y
-+ locals: value args, value x
- startBlock: 1
-@@ -100,7 +96,5 @@
- 81 SCOPE_ENTER value x
-- 82 LOAD_LOCAL(value x)
-- 82 STORE_LOCAL(value y)
- 82 SCOPE_ENTER value y
- 83 LOAD_MODULE object Predef
-- 83 LOAD_LOCAL(value y)
-+ 83 LOAD_LOCAL(value x)
- 83 BOX INT
-@@ -134,3 +128,3 @@
- def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
-- locals: value args, value x, value y
-+ locals: value args
- startBlock: 1
-@@ -139,10 +133,6 @@
- 1:
-- 66 THIS(TestAliasChainDerefThis)
-- 66 STORE_LOCAL(value x)
- 66 SCOPE_ENTER value x
-- 67 LOAD_LOCAL(value x)
-- 67 STORE_LOCAL(value y)
- 67 SCOPE_ENTER value y
- 68 LOAD_MODULE object Predef
-- 68 LOAD_LOCAL(value y)
-+ 68 THIS(Object)
- 68 CALL_METHOD scala.Predef.println (dynamic)
-@@ -175,3 +165,3 @@
- def test(x: Int (INT)): Unit {
-- locals: value x, value y
-+ locals: value x
- startBlock: 1
-@@ -180,7 +170,5 @@
- 1:
-- 29 LOAD_LOCAL(value x)
-- 29 STORE_LOCAL(value y)
- 29 SCOPE_ENTER value y
- 30 LOAD_MODULE object Predef
-- 30 LOAD_LOCAL(value y)
-+ 30 LOAD_LOCAL(value x)
- 30 BOX INT
-@@ -222,7 +210,5 @@
- 96 SCOPE_ENTER variable x
-- 97 LOAD_LOCAL(variable x)
-- 97 STORE_LOCAL(variable y)
- 97 SCOPE_ENTER variable y
- 98 LOAD_MODULE object Predef
-- 98 LOAD_LOCAL(variable y)
-+ 98 LOAD_LOCAL(variable x)
- 98 BOX INT
-@@ -232,6 +218,4 @@
- 100 STORE_LOCAL(variable y)
-- 101 LOAD_LOCAL(variable y)
-- 101 STORE_LOCAL(variable x)
- 102 LOAD_MODULE object Predef
-- 102 LOAD_LOCAL(variable x)
-+ 102 LOAD_LOCAL(variable y)
- 102 BOX INT
diff --git a/test/files/run/test-cpp.scala b/test/files/run/test-cpp.scala
deleted file mode 100644
index 4fca67d51e..0000000000
--- a/test/files/run/test-cpp.scala
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * The only change is in the decision to replace a LOAD_LOCAL(l)
- * in the copy-propagation performed before ClosureElimination.
- *
- * In the general case, the local variable 'l' is connected through
- * an alias chain with other local variables and at the end of the
- * alias chain there may be a Value, call it 'v'.
- *
- * If 'v' is cheaper to access (it is a Deref(This) or Const(_)), then
- * replace the instruction to load it from the cheaper place.
- * Otherwise, we use the local variable at the end of the alias chain
- * instead of 'l'.
- */
-
-import scala.tools.partest.IcodeComparison
-
-object Test extends IcodeComparison {
- override def printIcodeAfterPhase = "dce"
-}
-
-import scala.util.Random._
-
-/**
- * The example in the bug report (Issue-5321): an alias chain which store
- * an Unknown. Should remove local variable 'y'.
- */
-object TestBugReport {
- def test(x: Int) = {
- val y = x
- println(y)
- }
-}
-
-/**
- * The code taken from scala.tools.nsc.settings.Settings:
- * After inlining of the setter is performed, there is an opportunity for
- * copy-propagation to eliminate some local variables.
- */
-object TestSetterInline {
- private var _postSetHook: this.type => Unit = (x: this.type) => ()
- def withPostSetHook(f: this.type => Unit): this.type = { _postSetHook = f ; this }
-}
-
-
-/**
- * The access of the local variable 'y' should be replaced by the
- * constant.
- */
-object TestAliasChainConstant {
-
- def main(args: Array[String]): Unit = {
- val x = 2
- val y = x
- println(y)
- }
-}
-
-/**
- * At the end of the alias chain we have a reference to 'this'.
- * The local variables should be all discarded and replace by a
- * direct reference to this
- */
-class TestAliasChainDerefThis {
-
- def main(args: Array[String]): Unit = {
- val x = this
- val y = x
- println(y)
- }
-}
-
-/**
- * At the end of the alias chain, there is the value of a field.
- * The use of variable 'y' should be replaced by 'x', not by an access
- * to the field 'f' since it is more costly.
- */
-object TestAliasChainDerefField {
- def f = nextInt
-
- def main(args: Array[String]): Unit = {
- val x = f
- val y = x
- println(y)
- }
-}
-
-
-/**
- * The first time 'println' is called, 'x' is replaced by 'y'
- * and the second time, 'y' is replaced by 'x'. But none of them
- * can be removed.
- */
-object TestDifferentBindings {
-
- def main(args: Array[String]): Unit = {
- var x = nextInt
- var y = x
- println(y)
-
- y = nextInt
- x = y
- println(x)
- }
-}
diff --git a/test/files/run/toolbox_console_reporter.check b/test/files/run/toolbox_console_reporter.check
index 1395c68740..fca10ba458 100644
--- a/test/files/run/toolbox_console_reporter.check
+++ b/test/files/run/toolbox_console_reporter.check
@@ -1,8 +1,8 @@
hello
============compiler console=============
-warning: method foo in object Utils is deprecated: test
+warning: method foo in object Utils is deprecated (since 2.10.0): test
=========================================
============compiler messages============
-Info(NoPosition,method foo in object Utils is deprecated: test,WARNING)
+Info(NoPosition,method foo in object Utils is deprecated (since 2.10.0): test,WARNING)
=========================================
diff --git a/test/files/run/toolbox_silent_reporter.check b/test/files/run/toolbox_silent_reporter.check
index 2d05b1e3f8..dff89f635f 100644
--- a/test/files/run/toolbox_silent_reporter.check
+++ b/test/files/run/toolbox_silent_reporter.check
@@ -1,4 +1,4 @@
hello
============compiler messages============
-Info(NoPosition,method foo in object Utils is deprecated: test,WARNING)
+Info(NoPosition,method foo in object Utils is deprecated (since 2.10.0): test,WARNING)
=========================================
diff --git a/test/files/run/trait-clonable.scala b/test/files/run/trait-clonable.scala
new file mode 100644
index 0000000000..5be59d2586
--- /dev/null
+++ b/test/files/run/trait-clonable.scala
@@ -0,0 +1,11 @@
+// minimization of failure in run/t4813.scala related to the special
+// case for default methods that override methods owned by Object.class in
+// Java interfaces.
+trait C[A >: Null <: AnyRef] { override def clone(): A = null }
+trait X extends C[X]
+class D extends X { def foo = (this: X).clone() }
+object Test {
+ def main(args: Array[String]) {
+ assert(new D().foo == null)
+ }
+}
diff --git a/test/files/run/trait-default-specialize.check b/test/files/run/trait-default-specialize.check
new file mode 100644
index 0000000000..1034d1c703
--- /dev/null
+++ b/test/files/run/trait-default-specialize.check
@@ -0,0 +1,3 @@
+public abstract void T.t(java.lang.Object)
+0
+0
diff --git a/test/files/run/trait-default-specialize.scala b/test/files/run/trait-default-specialize.scala
new file mode 100644
index 0000000000..6faa9d5f47
--- /dev/null
+++ b/test/files/run/trait-default-specialize.scala
@@ -0,0 +1,14 @@
+trait T[@specialized(Int) A] {
+ def t(a: A): Unit
+}
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ class TInt extends T[Int] { def t(a : Int) = println(a) }
+ val tMethods = classOf[TInt].getInterfaces.head.getMethods.filter(_.getName == "t")
+ println(tMethods.map(_.toString).sorted.mkString("\n"))
+ new TInt().t(0)
+ def call[A](t: T[A], a: A) = t.t(a)
+ call[Int](new TInt(), 0)
+ }
+}
diff --git a/test/files/run/trait-defaults-modules.scala b/test/files/run/trait-defaults-modules.scala
new file mode 100644
index 0000000000..93fc74baff
--- /dev/null
+++ b/test/files/run/trait-defaults-modules.scala
@@ -0,0 +1,20 @@
+trait T1 { def a: Any }
+
+trait T2 extends T1 { object a; object b; private object c; def usec: Any = c}
+trait T3 extends T2
+
+class C1 extends T1 { object a; object b }
+class C2 extends C1
+class C3 extends T2
+class C4 extends T3
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val (c1, c2, c3, c4) = (new C1, new C2, new C3, new C4)
+ c1.a; c1.b; (c1: T1).a
+ c2.a; c2.b; (c2: T1).a
+ c3.a; c3.b; (c3: T1).a; c3.usec
+ c4.a; c4.b; (c4: T1).a; c4.usec
+ }
+
+}
diff --git a/test/files/run/trait-defaults-modules2/T_1.scala b/test/files/run/trait-defaults-modules2/T_1.scala
new file mode 100644
index 0000000000..962acdade1
--- /dev/null
+++ b/test/files/run/trait-defaults-modules2/T_1.scala
@@ -0,0 +1,4 @@
+trait T {
+ private object O
+ def useO: Any = O
+}
diff --git a/test/files/run/trait-defaults-modules2/Test_2.scala b/test/files/run/trait-defaults-modules2/Test_2.scala
new file mode 100644
index 0000000000..a1c49f5ddd
--- /dev/null
+++ b/test/files/run/trait-defaults-modules2/Test_2.scala
@@ -0,0 +1,5 @@
+object Test extends T {
+ def main(args: Array[String]): Unit = {
+ useO
+ }
+}
diff --git a/test/files/run/trait-defaults-modules3.scala b/test/files/run/trait-defaults-modules3.scala
new file mode 100644
index 0000000000..8790a95f4c
--- /dev/null
+++ b/test/files/run/trait-defaults-modules3.scala
@@ -0,0 +1,8 @@
+object Test {
+ def main(args: Array[String]): Unit = {
+ object O
+ val x = O
+ val y = O
+ assert(x eq y)
+ }
+}
diff --git a/test/files/run/trait-fields-override-lazy.check b/test/files/run/trait-fields-override-lazy.check
new file mode 100644
index 0000000000..9e4a9fe6c2
--- /dev/null
+++ b/test/files/run/trait-fields-override-lazy.check
@@ -0,0 +1,2 @@
+warning: there was one feature warning; re-run with -feature for details
+ok
diff --git a/test/files/run/trait-fields-override-lazy.scala b/test/files/run/trait-fields-override-lazy.scala
new file mode 100644
index 0000000000..2c1cf0e3b0
--- /dev/null
+++ b/test/files/run/trait-fields-override-lazy.scala
@@ -0,0 +1,13 @@
+trait T {
+ protected lazy val lv: Boolean = ???
+}
+
+object Test extends App {
+ val overrideLazy = new T {
+ override lazy val lv = true
+ def foo = lv
+ }
+
+ assert(overrideLazy.foo)
+ println("ok")
+}
diff --git a/test/files/run/trait-renaming.check b/test/files/run/trait-renaming.check
deleted file mode 100644
index b2e5affde5..0000000000
--- a/test/files/run/trait-renaming.check
+++ /dev/null
@@ -1,2 +0,0 @@
-public static int bippy.A$B$1$class.f(bippy.A$B$1)
-public static void bippy.A$B$1$class.$init$(bippy.A$B$1)
diff --git a/test/files/run/trait-renaming/A_1.scala b/test/files/run/trait-renaming/A_1.scala
deleted file mode 100644
index d0fab7bfc3..0000000000
--- a/test/files/run/trait-renaming/A_1.scala
+++ /dev/null
@@ -1,15 +0,0 @@
-package bippy {
- class A {
- def f = {
- trait B {
- def f = 5
- }
- trait C {
- def g = 10
- }
- new B with C { }
- }
-
- def g = Class.forName("bippy.A$B$1$class")
- }
-}
diff --git a/test/files/run/trait-renaming/B_2.scala b/test/files/run/trait-renaming/B_2.scala
deleted file mode 100644
index 174e929fe2..0000000000
--- a/test/files/run/trait-renaming/B_2.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-object Test {
- def main(args: Array[String]): Unit = {
- (new bippy.A).g.getDeclaredMethods.map(_.toString).sorted foreach println
- }
-}
diff --git a/test/files/run/trait-static-clash.scala b/test/files/run/trait-static-clash.scala
new file mode 100644
index 0000000000..603cf6b6e5
--- /dev/null
+++ b/test/files/run/trait-static-clash.scala
@@ -0,0 +1,10 @@
+trait T {
+ def foo = 1
+ def foo(t: T) = 2
+}
+object Test extends T {
+ def main(args: Array[String]) {
+ assert(foo == 1)
+ assert(foo(this) == 2)
+ }
+}
diff --git a/test/files/jvm/t1449.check b/test/files/run/trait-static-forwarder.check
index d81cc0710e..d81cc0710e 100644
--- a/test/files/jvm/t1449.check
+++ b/test/files/run/trait-static-forwarder.check
diff --git a/test/files/run/trait-static-forwarder/Test.java b/test/files/run/trait-static-forwarder/Test.java
new file mode 100644
index 0000000000..89012c0162
--- /dev/null
+++ b/test/files/run/trait-static-forwarder/Test.java
@@ -0,0 +1,5 @@
+public final class Test {
+ public static void main(String... args) {
+ System.out.println(T.foo());
+ }
+}
diff --git a/test/files/run/trait-static-forwarder/forwarders.scala b/test/files/run/trait-static-forwarder/forwarders.scala
new file mode 100644
index 0000000000..d6ee9a081d
--- /dev/null
+++ b/test/files/run/trait-static-forwarder/forwarders.scala
@@ -0,0 +1,5 @@
+trait T
+
+object T {
+ def foo = 42
+}
diff --git a/test/files/run/trait-super-calls.scala b/test/files/run/trait-super-calls.scala
new file mode 100644
index 0000000000..df405d0f13
--- /dev/null
+++ b/test/files/run/trait-super-calls.scala
@@ -0,0 +1,127 @@
+object t1 {
+ trait T { def f = 1 }
+ trait U extends T
+ class C extends U { def t = super.f }
+}
+
+object t2 {
+ class A { def f = 1 }
+ trait T extends A { override def f = 2 }
+ class B extends A
+ class C extends B with T {
+ def t1 = super.f
+ def t2 = super[T].f
+ def t3 = super[B].f
+ }
+}
+
+object t3 {
+ class A { def f = 1 }
+ trait T extends A
+ class B extends A { override def f = 2 }
+ class C extends B with T {
+ def t1 = super.f
+ // def t2 = super[T].f // error: cannot emit super call (test exists)
+ def t3 = super[B].f
+ }
+}
+
+object t4 {
+ trait T1 { def f = 1 }
+ trait T2 { self: T1 => override def f = 2 }
+ trait U extends T1 with T2
+ class C extends U {
+ def t1 = super.f
+ def t2 = super[U].f
+ }
+}
+
+object t5 {
+ trait T { override def hashCode = -1 }
+ trait U extends T
+ class C extends U {
+ def t1 = super[U].hashCode
+ def t2 = super.hashCode
+ }
+}
+
+object t6 {
+ trait T { def f = 1 }
+ trait U1 extends T { override def f = 2 }
+ trait U2 extends T { override def f = 3 }
+ class C1 extends T with U1 with U2 {
+ def t1 = super.f
+ def t2 = super[T].f
+ def t3 = super[U1].f
+ def t4 = super[U2].f
+ }
+ class C2 extends T with U2 with U1 {
+ def t1 = super.f
+ }
+}
+
+object t7 {
+ trait T1 { def f = 1 }
+ trait T2 { _: T1 => override def f = 2 }
+ trait U extends T1 with T2
+ trait V extends U with T2
+ class C extends V {
+ def t1 = super.f
+ def t2 = super[V].f
+ }
+}
+
+object t8 {
+ trait HasNewBuilder { def newBuilder: Int }
+ trait GenericTraversableTemplate extends HasNewBuilder { def newBuilder = 0 }
+ trait Iterable extends GenericTraversableTemplate
+ trait MutMapLike extends HasNewBuilder { override def newBuilder = 1 }
+ trait MutMap extends Iterable with MutMapLike
+ class TrieMap extends MutMap with MutMapLike
+}
+
+object Test {
+ def e(a: Any, b: Any) = assert(a == b, s"expected: $b\ngot: $a")
+
+ def main(args: Array[String]): Unit = {
+ e(new t1.C().t, 1)
+
+ val c2 = new t2.C
+ e(c2.f, 2)
+ e(c2.t1, 2)
+ e(c2.t2, 2)
+ e(c2.t3, 1)
+
+ val c3 = new t3.C
+ e(c3.f, 2)
+ e(c3.t1, 2)
+ e(c3.t3, 2)
+
+ val c4 = new t4.C
+ e(c4.f, 2)
+ e(c4.t1, 2)
+ e(c4.t2, 2)
+
+ val c5 = new t5.C
+ e(c5.hashCode, -1)
+ e(c5.t1, -1)
+ e(c5.t2, -1)
+
+ val c6a = new t6.C1
+ val c6b = new t6.C2
+ e(c6a.f, 3)
+ e(c6a.t1, 3)
+ e(c6a.t2, 1)
+ e(c6a.t3, 2)
+ e(c6a.t4, 3)
+ e(c6b.f, 2)
+ e(c6b.t1, 2)
+
+ val c7 = new t7.C
+ e(c7.f, 2)
+ e(c7.t1, 2)
+ e(c7.t2, 2)
+
+ e(new t8.TrieMap().newBuilder, 1)
+ }
+}
diff --git a/test/files/run/trait_fields_bytecode.scala b/test/files/run/trait_fields_bytecode.scala
new file mode 100644
index 0000000000..d87412f43e
--- /dev/null
+++ b/test/files/run/trait_fields_bytecode.scala
@@ -0,0 +1,23 @@
+trait TFinal { final val bla: Int = 123 }
+
+// bla should be final in C
+class CFinal extends TFinal
+
+
+trait TConst { final val C = "S" }
+// there should be a C method in `T$class`!
+class CConst extends TConst { }
+
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val f1 = classOf[CFinal].getDeclaredMethod("bla")
+ import java.lang.reflect.Modifier._
+ assert(isFinal(f1.getModifiers), f1)
+
+ classOf[CConst].getMethod("C")
+
+ import language.reflectiveCalls
+ assert(new CConst().asInstanceOf[{def C: String}].C == "S")
+ }
+}
diff --git a/test/files/run/trait_fields_final.scala b/test/files/run/trait_fields_final.scala
new file mode 100644
index 0000000000..8b32e5b47d
--- /dev/null
+++ b/test/files/run/trait_fields_final.scala
@@ -0,0 +1,21 @@
+// TODO: clarify meaning of final in traits
+// In the new compiler, there's no final modifier after mixin for `meh`'s setter,
+// whereas 2.12.0-M3 makes meh's trait setter final.
+// NOTE: bytecode is identical, but the scalasignature is different
+trait Foo { self: Meh =>
+ def bar(x: String) = x == "a"
+ private final val meh = bar("a")
+}
+
+abstract class Meh extends Foo
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val setter = classOf[Meh].getDeclaredMethod("Foo$_setter_$Foo$$meh_$eq", java.lang.Boolean.TYPE)
+ val getter = classOf[Meh].getDeclaredMethod("Foo$$meh")
+ import java.lang.reflect.Modifier._
+ assert(isFinal(setter.getModifiers), setter)
+ assert(isFinal(getter.getModifiers), getter)
+ }
+
+}
diff --git a/test/files/run/trait_fields_init.check b/test/files/run/trait_fields_init.check
new file mode 100644
index 0000000000..84c1a2ead9
--- /dev/null
+++ b/test/files/run/trait_fields_init.check
@@ -0,0 +1,21 @@
+x
+y
+z
+abstract
+public
+protected
+abstract protected
+private
+private[this]
+abstract
+public
+protected
+abstract protected
+private
+private[this]
+abstract
+public
+protected
+abstract protected
+private
+private[this]
diff --git a/test/files/run/trait_fields_init.scala b/test/files/run/trait_fields_init.scala
new file mode 100644
index 0000000000..496911d538
--- /dev/null
+++ b/test/files/run/trait_fields_init.scala
@@ -0,0 +1,55 @@
+trait T {
+ val abs: String
+ protected val protabs: String
+ val pub = "public"
+ protected val prot = "protected"
+ private val privvy = "private"
+ private[this] val privateThis = "private[this]"
+ // TODO:
+ // final val const = "const"
+
+ trait Nested { println(abs + privateThis) }
+
+ object NO {
+ println(abs)
+ println(pub)
+ println(prot)
+ println(protabs)
+ println(privvy)
+ println(privateThis)
+ }
+
+ trait NT {
+ println(abs)
+ println(pub)
+ println(prot)
+ println(protabs)
+ println(privvy)
+ println(privateThis)
+ }
+
+ class NC {
+ println(abs)
+ println(pub)
+ println(prot)
+ println(protabs)
+ println(privvy)
+ println(privateThis)
+ }
+}
+
+class C extends AnyRef with T {
+ println("x")
+ val abs = "abstract"
+ println("y")
+ val protabs = "abstract protected"
+ final val const = "const"
+ println("z")
+}
+
+object Test extends C {
+ def main(args: Array[String]): Unit = {
+ NO
+ new NT{}
+ new NC
+}} \ No newline at end of file
diff --git a/test/files/run/trait_fields_repl.check b/test/files/run/trait_fields_repl.check
new file mode 100644
index 0000000000..d03a565c7b
--- /dev/null
+++ b/test/files/run/trait_fields_repl.check
@@ -0,0 +1,11 @@
+
+scala> trait B { val y = "a" }
+defined trait B
+
+scala> trait T extends B { val x: y.type = y }
+defined trait T
+
+scala> println((new T{}).x)
+a
+
+scala> :quit
diff --git a/test/files/run/trait_fields_repl.scala b/test/files/run/trait_fields_repl.scala
new file mode 100644
index 0000000000..311477b7d2
--- /dev/null
+++ b/test/files/run/trait_fields_repl.scala
@@ -0,0 +1,10 @@
+// TODO: fix AME when this runs in REPL
+import scala.tools.partest.ReplTest
+
+object Test extends ReplTest {
+ def code = """
+trait B { val y = "a" }
+trait T extends B { val x: y.type = y }
+println((new T{}).x)
+"""
+}
diff --git a/test/files/run/trait_fields_three_layer_overrides.check b/test/files/run/trait_fields_three_layer_overrides.check
new file mode 100644
index 0000000000..8bb45803c5
--- /dev/null
+++ b/test/files/run/trait_fields_three_layer_overrides.check
@@ -0,0 +1,2 @@
+the real universe.TypeTag
+1
diff --git a/test/files/run/trait_fields_three_layer_overrides.scala b/test/files/run/trait_fields_three_layer_overrides.scala
new file mode 100644
index 0000000000..9d7aa94341
--- /dev/null
+++ b/test/files/run/trait_fields_three_layer_overrides.scala
@@ -0,0 +1,25 @@
+// interesting hierarchies/overrides distilled from reflect/compiler
+
+trait Aliases {
+ val TypeTag = "universe.TypeTag"
+}
+trait AliasesOverrides extends Aliases { // or self: Aliases =>
+ override val TypeTag = "the real universe.TypeTag"
+}
+class Context extends Aliases with AliasesOverrides
+
+
+
+trait SymbolTable {
+ def currentRunId: Int = -1
+}
+trait ReflectSetup extends SymbolTable {
+ override val currentRunId = 1
+}
+class G extends SymbolTable with ReflectSetup
+
+
+object Test extends App {
+ println((new Context).TypeTag)
+ println((new G).currentRunId)
+} \ No newline at end of file
diff --git a/test/files/run/trait_fields_volatile.scala b/test/files/run/trait_fields_volatile.scala
new file mode 100644
index 0000000000..eedb6de1c2
--- /dev/null
+++ b/test/files/run/trait_fields_volatile.scala
@@ -0,0 +1,13 @@
+// bytecode should reflect volatile annotation
+trait VolatileAbort {
+ @volatile private var abortflag = false
+}
+class DefaultSignalling extends VolatileAbort
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ val field = classOf[DefaultSignalling].getDeclaredFields.find(_.getName.contains("abortflag")).get
+ assert(java.lang.reflect.Modifier.isVolatile(field.getModifiers), field)
+ }
+
+}
diff --git a/test/files/run/try-2.check b/test/files/run/try-2.check
index 987d3462df..7fd45414da 100644
--- a/test/files/run/try-2.check
+++ b/test/files/run/try-2.check
@@ -1,4 +1,4 @@
-try-2.scala:41: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+try-2.scala:41: warning: a pure expression does nothing in statement position
10;
^
exception happened
diff --git a/test/files/run/try.check b/test/files/run/try.check
index f742ccb0df..d9521c2362 100644
--- a/test/files/run/try.check
+++ b/test/files/run/try.check
@@ -1,4 +1,4 @@
-try.scala:65: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+try.scala:65: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
1+1;
^
1 + 1 = 2
diff --git a/test/files/run/tuple-zipped.scala b/test/files/run/tuple-zipped.scala
deleted file mode 100644
index 37ac52977f..0000000000
--- a/test/files/run/tuple-zipped.scala
+++ /dev/null
@@ -1,41 +0,0 @@
-
-import scala.language.postfixOps
-
-object Test {
- val xs1 = List.range(1, 100)
- val xs2 = xs1.view
- val xs3 = xs1 take 10
- val ss1 = Stream from 1
- val ss2 = ss1.view
- val ss3 = ss1 take 10
- val as1 = 1 to 100 toArray
- val as2 = as1.view
- val as3 = as1 take 10
-
- def xss1 = List[Seq[Int]](xs1, xs2, xs3, ss1, ss2, ss3, as1, as2, as3)
- def xss2 = List[Seq[Int]](xs1, xs2, xs3, ss3, as1, as2, as3) // no infinities
- def xss3 = List[Seq[Int]](xs2, xs3, ss3, as1) // representative sampling
-
- def main(args: Array[String]): Unit = {
- for (cc1 <- xss1 ; cc2 <- xss2) {
- val sum1 = (cc1, cc2).zipped map { case (x, y) => x + y } sum
- val sum2 = (cc1, cc2).zipped map (_ + _) sum
-
- assert(sum1 == sum2)
- }
-
- for (cc1 <- xss1 ; cc2 <- xss2 ; cc3 <- xss3) {
- val sum1 = (cc1, cc2, cc3).zipped map { case (x, y, z) => x + y + z } sum
- val sum2 = (cc1, cc2, cc3).zipped map (_ + _ + _) sum
-
- assert(sum1 == sum2)
- }
-
- assert((ss1, ss1).zipped exists ((x, y) => true))
- assert((ss1, ss1, ss1).zipped exists ((x, y, z) => true))
-
- assert(!(ss1, ss2, 1 to 3).zipped.exists(_ + _ + _ > 100000))
- assert((1 to 3, ss1, ss2).zipped.forall(_ + _ + _ > 0))
- assert((ss1, 1 to 3, ss2).zipped.map(_ + _ + _).size == 3)
- }
-}
diff --git a/test/files/run/unittest_collection.check b/test/files/run/unittest_collection.check
index df1629dd7e..6fda32d713 100644
--- a/test/files/run/unittest_collection.check
+++ b/test/files/run/unittest_collection.check
@@ -1 +1 @@
-warning: there was one deprecation warning; re-run with -deprecation for details
+warning: there was one deprecation warning (since 2.11.0); re-run with -deprecation for details
diff --git a/test/files/run/various-flat-classpath-types.scala b/test/files/run/various-flat-classpath-types.scala
index d39019e885..bc54ffb6cc 100644
--- a/test/files/run/various-flat-classpath-types.scala
+++ b/test/files/run/various-flat-classpath-types.scala
@@ -5,7 +5,7 @@
import java.io.{File => JFile, FileInputStream, FileOutputStream}
import java.util.zip.{ZipEntry, ZipOutputStream}
import scala.reflect.io.{Directory, File}
-import scala.tools.nsc.classpath.FlatClassPath.RootPackage
+import scala.tools.nsc.util.ClassPath.RootPackage
import scala.tools.nsc.classpath.PackageNameUtils
import scala.tools.nsc.io.Jar
@@ -80,7 +80,6 @@ object Test {
private val compiler = new scala.tools.nsc.MainClass
private val appRunner = new scala.tools.nsc.MainGenericRunner
- private val classPathImplFlag = "-YclasspathImpl:flat"
private val javaClassPath = sys.props("java.class.path")
// creates a test dir in a temporary dir containing compiled files of this test
@@ -166,13 +165,13 @@ object Test {
val classPath = mkPath(javaClassPath, binDir.path, zipsDir.path + "/Bin.zip", jarsDir.path + "/Bin.jar")
val sourcePath = mkPath(srcDir.path, zipsDir.path + "/Src.zip", jarsDir.path + "/Src.jar")
- compiler.process(Array(classPathImplFlag, "-cp", classPath, "-sourcepath", sourcePath,
+ compiler.process(Array("-cp", classPath, "-sourcepath", sourcePath,
"-d", outDir.path, s"${srcDir.path}/Main.scala"))
}
private def runApp(): Unit = {
val classPath = mkPath(javaClassPath, outDir.path, binDir.path, zipsDir.path + "/Bin.zip", jarsDir.path + "/Bin.jar")
- appRunner.process(Array(classPathImplFlag, "-cp", classPath, "Main"))
+ appRunner.process(Array("-cp", classPath, "Main"))
}
private def createStandardSrcHierarchy(baseFileName: String): Unit =
@@ -200,7 +199,7 @@ object Test {
private def compileSrc(baseFileName: String, destination: JFile = outDir): Unit = {
val srcDirPath = srcDir.path
- compiler.process(Array(classPathImplFlag, "-cp", javaClassPath, "-d", destination.path,
+ compiler.process(Array("-cp", javaClassPath, "-d", destination.path,
s"$srcDirPath/$baseFileName.scala", s"$srcDirPath/nested/Nested$baseFileName.scala"))
}
diff --git a/test/files/run/xMigration.check b/test/files/run/xMigration.check
index cd860bf394..b812d6a282 100644
--- a/test/files/run/xMigration.check
+++ b/test/files/run/xMigration.check
@@ -1,47 +1,47 @@
scala> Map(1 -> "eis").values // no warn
-res0: Iterable[String] = MapLike(eis)
+res0: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :setting -Xmigration:none
scala> Map(1 -> "eis").values // no warn
-res1: Iterable[String] = MapLike(eis)
+res1: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :setting -Xmigration:any
scala> Map(1 -> "eis").values // warn
<console>:12: warning: method values in trait MapLike has changed semantics in version 2.8.0:
-`values` returns `Iterable[B]` rather than `Iterator[B]`.
+`values` returns `Iterable[V]` rather than `Iterator[V]`.
Map(1 -> "eis").values // warn
^
-res2: Iterable[String] = MapLike(eis)
+res2: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :setting -Xmigration:2.8
scala> Map(1 -> "eis").values // no warn
-res3: Iterable[String] = MapLike(eis)
+res3: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :setting -Xmigration:2.7
scala> Map(1 -> "eis").values // warn
<console>:12: warning: method values in trait MapLike has changed semantics in version 2.8.0:
-`values` returns `Iterable[B]` rather than `Iterator[B]`.
+`values` returns `Iterable[V]` rather than `Iterator[V]`.
Map(1 -> "eis").values // warn
^
-res4: Iterable[String] = MapLike(eis)
+res4: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :setting -Xmigration:2.11
scala> Map(1 -> "eis").values // no warn
-res5: Iterable[String] = MapLike(eis)
+res5: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :setting -Xmigration // same as :any
scala> Map(1 -> "eis").values // warn
<console>:12: warning: method values in trait MapLike has changed semantics in version 2.8.0:
-`values` returns `Iterable[B]` rather than `Iterator[B]`.
+`values` returns `Iterable[V]` rather than `Iterator[V]`.
Map(1 -> "eis").values // warn
^
-res6: Iterable[String] = MapLike(eis)
+res6: Iterable[String] = MapLike.DefaultValuesIterable(eis)
scala> :quit
diff --git a/test/files/scalacheck/CheckEither.scala b/test/files/scalacheck/CheckEither.scala
index 48f732a22d..f0ec797045 100644
--- a/test/files/scalacheck/CheckEither.scala
+++ b/test/files/scalacheck/CheckEither.scala
@@ -132,6 +132,58 @@ object Test extends Properties("Either") {
case Right(a) => a
}))
+ val prop_getOrElse = forAll((e: Either[Int, Int], or: Int) => e.getOrElse(or) == (e match {
+ case Left(_) => or
+ case Right(b) => b
+ }))
+
+ val prop_contains = forAll((e: Either[Int, Int], n: Int) =>
+ e.contains(n) == (e.isRight && e.right.get == n))
+
+ val prop_forall = forAll((e: Either[Int, Int]) =>
+ e.forall(_ % 2 == 0) == (e.isLeft || e.right.get % 2 == 0))
+
+ val prop_exists = forAll((e: Either[Int, Int]) =>
+ e.exists(_ % 2 == 0) == (e.isRight && e.right.get % 2 == 0))
+
+ val prop_flatMapLeftIdentity = forAll((e: Either[Int, Int], n: Int, s: String) => {
+ def f(x: Int) = if(x % 2 == 0) Left(s) else Right(s)
+ Right(n).flatMap(f(_)) == f(n)})
+
+ val prop_flatMapRightIdentity = forAll((e: Either[Int, Int]) => e.flatMap(Right(_)) == e)
+
+ val prop_flatMapComposition = forAll((e: Either[Int, Int]) => {
+ def f(x: Int) = if(x % 2 == 0) Left(x) else Right(x)
+ def g(x: Int) = if(x % 7 == 0) Right(x) else Left(x)
+ e.flatMap(f(_)).flatMap(g(_)) == e.flatMap(f(_).flatMap(g(_)))})
+
+ val prop_mapIdentity = forAll((e: Either[Int, Int]) => e.map(x => x) == e)
+
+ val prop_mapComposition = forAll((e: Either[Int, String]) => {
+ def f(s: String) = s.toLowerCase
+ def g(s: String) = s.reverse
+ e.map(x => f(g(x))) == e.map(x => g(x)).map(f(_))})
+
+ val prop_filterOrElse = forAll((e: Either[Int, Int], x: Int) => e.filterOrElse(_ % 2 == 0, -x) ==
+ (if(e.isLeft) e
+ else if(e.right.get % 2 == 0) e
+ else Left(-x)))
+
+ val prop_seq = forAll((e: Either[Int, Int]) => e.toSeq == (e match {
+ case Left(_) => collection.immutable.Seq.empty
+ case Right(b) => collection.immutable.Seq(b)
+ }))
+
+ val prop_option = forAll((e: Either[Int, Int]) => e.toOption == (e match {
+ case Left(_) => None
+ case Right(b) => Some(b)
+ }))
+
+ val prop_try = forAll((e: Either[Throwable, Int]) => e.toTry == (e match {
+ case Left(a) => util.Failure(a)
+ case Right(b) => util.Success(b)
+ }))
+
/** Hard to believe I'm "fixing" a test to reflect B before A ... */
val prop_Either_cond = forAll((c: Boolean, a: Int, b: Int) =>
Either.cond(c, a, b) == (if(c) Right(a) else Left(b)))
@@ -169,9 +221,21 @@ object Test extends Properties("Either") {
("prop_Either_right", prop_Either_right),
("prop_Either_joinLeft", prop_Either_joinLeft),
("prop_Either_joinRight", prop_Either_joinRight),
- ("prop_Either_reduce", prop_Either_reduce),
- ("prop_Either_cond", prop_Either_cond)
- )
+ ("prop_Either_reduce", prop_Either_reduce),
+ ("prop_getOrElse", prop_getOrElse),
+ ("prop_contains", prop_contains),
+ ("prop_forall", prop_forall),
+ ("prop_exists", prop_exists),
+ ("prop_flatMapLeftIdentity", prop_flatMapLeftIdentity),
+ ("prop_flatMapRightIdentity", prop_flatMapRightIdentity),
+ ("prop_flatMapComposition", prop_flatMapComposition),
+ ("prop_mapIdentity", prop_mapIdentity),
+ ("prop_mapComposition", prop_mapComposition),
+ ("prop_filterOrElse", prop_filterOrElse),
+ ("prop_seq", prop_seq),
+ ("prop_option", prop_option),
+ ("prop_try", prop_try),
+ ("prop_Either_cond", prop_Either_cond))
for ((label, prop) <- tests) {
property(label) = prop
diff --git a/test/files/scalacheck/MutablePriorityQueue.scala b/test/files/scalacheck/MutablePriorityQueue.scala
new file mode 100644
index 0000000000..687e2e7c62
--- /dev/null
+++ b/test/files/scalacheck/MutablePriorityQueue.scala
@@ -0,0 +1,102 @@
+import scala.collection.mutable.PriorityQueue
+import org.scalacheck._
+import Prop._
+import Arbitrary._
+
+object Test extends Properties("PriorityQueue") {
+ type E = Int // the element type used for most/all of the tests
+
+ def checkInvariant[A](pq: PriorityQueue[A])(implicit ord: Ordering[A]): Boolean = {
+ // The ordering invariant in the heap is that parent >= child.
+ // A child at index i has a parent at index i/2 in the priority
+ // queue's internal array. However, that array is padded with
+ // an extra slot in front so that the first real element is at
+ // index 1. The vector below is not padded, so subtract 1 from
+ // every index.
+ import ord._
+ val vec = pq.toVector // elements in same order as pq's internal array
+ 2 until pq.size forall { i => vec(i/2-1) >= vec(i-1) }
+ }
+
+ property("newBuilder (in companion)") = forAll { list: List[E] =>
+ val builder = PriorityQueue.newBuilder[E]
+ for (x <- list) builder += x
+ val pq = builder.result()
+ checkInvariant(pq) &&
+ pq.dequeueAll == list.sorted.reverse
+ }
+
+ property("to[PriorityQueue]") = forAll { list: List[E] =>
+ val pq = list.to[PriorityQueue]
+ checkInvariant(pq) &&
+ pq.dequeueAll == list.sorted.reverse
+ }
+
+ property("apply (in companion)") = forAll { list: List[E] =>
+ val pq = PriorityQueue.apply(list : _*)
+ checkInvariant(pq) &&
+ pq.dequeueAll == list.sorted.reverse
+ }
+
+ property("size, isEmpty") = forAll { list: List[E] =>
+ val pq = PriorityQueue(list : _*)
+ pq.size == list.size && pq.isEmpty == list.isEmpty
+ }
+
+ property("+=") = forAll { (x: E, list: List[E]) =>
+ val pq = PriorityQueue(list : _*)
+ pq += x
+ checkInvariant(pq) &&
+ pq.dequeueAll == (x :: list).sorted.reverse
+ }
+
+ property("++= on empty") = forAll { list: List[E] =>
+ val pq = PriorityQueue.empty[E]
+ pq ++= list
+ checkInvariant(pq) &&
+ pq.dequeueAll == list.sorted.reverse
+ }
+
+ property("++=") = forAll { (list1: List[E], list2: List[E]) =>
+ val pq = PriorityQueue(list1 : _*)
+ pq ++= list2
+ checkInvariant(pq) &&
+ pq.dequeueAll == (list1 ++ list2).sorted.reverse
+ }
+
+ property("reverse") = forAll { list: List[E] =>
+ val pq = PriorityQueue(list : _*).reverse
+ checkInvariant(pq)(implicitly[Ordering[E]].reverse) &&
+ pq.dequeueAll == list.sorted
+ }
+
+ property("reverse then ++=") = forAll { list: List[E] =>
+ val pq = PriorityQueue.empty[E].reverse ++= list
+ checkInvariant(pq)(implicitly[Ordering[E]].reverse) &&
+ pq.dequeueAll == list.sorted
+ }
+
+ property("reverse then +=") = forAll { (x: E, list: List[E]) =>
+ val pq = PriorityQueue(list : _*).reverse += x
+ checkInvariant(pq)(implicitly[Ordering[E]].reverse) &&
+ pq.dequeueAll == (x +: list).sorted
+ }
+
+ property("clone") = forAll { list: List[E] =>
+ val pq = PriorityQueue(list : _*)
+ val c = pq.clone()
+ (pq ne c) &&
+ checkInvariant(c) &&
+ c.dequeueAll == pq.dequeueAll
+ }
+
+ property("dequeue") = forAll { list: List[E] =>
+ list.nonEmpty ==> {
+ val pq = PriorityQueue(list : _*)
+ val x = pq.dequeue()
+ checkInvariant(pq) &&
+ x == list.max && pq.dequeueAll == list.sorted.reverse.tail
+ }
+ }
+
+}
diff --git a/test/files/scalacheck/MutableTreeMap.scala b/test/files/scalacheck/MutableTreeMap.scala
new file mode 100644
index 0000000000..42b88c56a7
--- /dev/null
+++ b/test/files/scalacheck/MutableTreeMap.scala
@@ -0,0 +1,345 @@
+import java.io._
+
+import org.scalacheck._
+import org.scalacheck.Arbitrary._
+import org.scalacheck.Prop.forAll
+
+import scala.collection.generic.CanBuildFrom
+import scala.collection.immutable
+import scala.collection.mutable
+import scala.util.Try
+import scala.collection.mutable.{RedBlackTree => RB}
+
+package scala.collection.mutable {
+
+ trait Generators {
+
+ def genRedBlackTree[A: Arbitrary: Ordering, B: Arbitrary]: Gen[RB.Tree[A, B]] = {
+ import org.scalacheck.Gen._
+ for { entries <- listOf(arbitrary[(A, B)]) } yield {
+ val tree = RB.Tree.empty[A, B]
+ entries.foreach { case (k, v) => RB.insert(tree, k, v) }
+ tree
+ }
+ }
+
+ // Note: in scalacheck 1.12.2 tree maps can be automatically generated without the need for custom
+ // machinery
+ def genTreeMap[A: Arbitrary: Ordering, B: Arbitrary]: Gen[mutable.TreeMap[A, B]] = {
+ import org.scalacheck.Gen._
+ for {
+ keys <- listOf(arbitrary[A])
+ values <- listOfN(keys.size, arbitrary[B])
+ } yield mutable.TreeMap(keys zip values: _*)
+ }
+
+ implicit def arbRedBlackTree[A: Arbitrary: Ordering, B: Arbitrary] = Arbitrary(genRedBlackTree[A, B])
+ implicit def arbTreeMap[A: Arbitrary: Ordering, B: Arbitrary] = Arbitrary(genTreeMap[A, B])
+ }
+
+ object RedBlackTreeProperties extends Properties("mutable.RedBlackTree") with Generators {
+ type K = String
+ type V = Int
+
+ property("initial invariants") = forAll { (tree: RB.Tree[K, V]) =>
+ RB.isValid(tree)
+ }
+
+ property("insert") = forAll { (tree: RB.Tree[K, V], entries: Seq[(K, V)]) =>
+ entries.foreach { case (k, v) => RB.insert(tree, k, v) }
+ RB.isValid(tree) && entries.toMap.forall { case (k, v) => RB.get(tree, k) == Some(v) }
+ }
+
+ property("delete") = forAll { (tree: RB.Tree[K, V], ks: Seq[K]) =>
+ ks.foreach { k => RB.delete(tree, k) }
+ RB.isValid(tree) && ks.toSet.forall { k => RB.get(tree, k) == None }
+ }
+
+ property("insert & delete") = forAll { (tree: RB.Tree[K, V], ops: Seq[Either[(K, V), K]]) =>
+ ops.foreach {
+ case Left((k, v)) => RB.insert(tree, k, v)
+ case Right(k) => RB.delete(tree, k)
+ }
+ RB.isValid(tree)
+ }
+
+ property("min") = forAll { (entries: Seq[(K, V)]) =>
+ val tree = RB.Tree.empty[K, V]
+ entries.foreach { case (k, v) => RB.insert(tree, k, v) }
+ RB.min(tree) == (if (entries.isEmpty) None else Some(entries.toMap.min))
+ }
+
+ property("max") = forAll { (entries: Seq[(K, V)]) =>
+ val tree = RB.Tree.empty[K, V]
+ entries.foreach { case (k, v) => RB.insert(tree, k, v) }
+ RB.max(tree) == (if (entries.isEmpty) None else Some(entries.toMap.max))
+ }
+ }
+
+ object MutableTreeMapProperties extends Properties("mutable.TreeMap") with Generators {
+ type K = String
+ type V = Int
+
+ property("get, contains") = forAll { (allEntries: Map[K, V]) =>
+ val entries = allEntries.take(allEntries.size / 2)
+
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ allEntries.forall { case (k, v) =>
+ map.contains(k) == entries.contains(k) &&
+ map.get(k) == entries.get(k)
+ }
+ }
+
+ property("size, isEmpty") = forAll { (entries: Map[K, V]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+ map.size == entries.size && map.isEmpty == entries.isEmpty
+ }
+
+ property("+=") = forAll { (map: mutable.TreeMap[K, V], k: K, v: V) =>
+ val oldSize = map.size
+ val containedKeyBefore = map.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize else oldSize + 1
+
+ map += (k -> v)
+ map.contains(k) && map.get(k) == Some(v) && map.size == newExpectedSize
+ }
+
+ property("++=") = forAll { (map: mutable.TreeMap[K, V], entries: Seq[(K, V)]) =>
+ val oldEntries = map.toMap
+ map ++= entries
+ (oldEntries ++ entries).forall { case (k, v) => map.get(k) == Some(v) }
+ }
+
+ property("-=") = forAll { (map: mutable.TreeMap[K, V], k: K) =>
+ val oldSize = map.size
+ val containedKeyBefore = map.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize - 1 else oldSize
+
+ map -= k
+ !map.contains(k) && map.get(k) == None && map.size == newExpectedSize
+ }
+
+ property("--=") = forAll { (map: mutable.TreeMap[K, V], ks: Seq[K]) =>
+ val oldElems = map.toList
+ map --= ks
+ val deletedElems = ks.toSet
+ oldElems.forall { case (k, v) => map.get(k) == (if(deletedElems(k)) None else Some(v)) }
+ }
+
+ property("iterator") = forAll { (entries: Map[K, V]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ map.iterator.toSeq == entries.toSeq.sorted
+ }
+
+ property("iteratorFrom") = forAll { (entries: Map[K, V], k: K) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ map.iteratorFrom(k).toSeq == entries.filterKeys(_ >= k).toSeq.sorted
+ }
+
+ property("keysIteratorFrom") = forAll { (entries: Map[K, V], k: K) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ map.keysIteratorFrom(k).toSeq == entries.keysIterator.filter(_ >= k).toSeq.sorted
+ }
+
+ property("valuesIteratorFrom") = forAll { (entries: Map[K, V], k: K) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ map.valuesIteratorFrom(k).toSeq == entries.filterKeys(_ >= k).toSeq.sorted.map(_._2)
+ }
+
+ property("headOption") = forAll { (map: mutable.TreeMap[K, V]) =>
+ map.headOption == Try(map.iterator.next()).toOption
+ }
+
+ property("lastOption") = forAll { (map: mutable.TreeMap[K, V]) =>
+ map.lastOption == Try(map.iterator.max).toOption
+ }
+
+ property("clear") = forAll { (map: mutable.TreeMap[K, V]) =>
+ map.clear()
+ map.isEmpty && map.size == 0
+ }
+
+ property("serializable") = forAll { (map: mutable.TreeMap[K, V]) =>
+ val bytesOut = new ByteArrayOutputStream()
+ val out = new ObjectOutputStream(bytesOut)
+ out.writeObject(map)
+ val bytes = bytesOut.toByteArray
+
+ val in = new ObjectInputStream(new ByteArrayInputStream(bytes))
+ val sameMap = in.readObject().asInstanceOf[mutable.TreeMap[K, V]]
+ map.iterator.toSeq == sameMap.iterator.toSeq
+ }
+
+ property("same behavior as immutable.TreeMap") = forAll { ops: Seq[Either[(K, V), K]] =>
+ var imap = immutable.TreeMap[K, V]()
+ val mmap = mutable.TreeMap[K, V]()
+
+ ops.foreach {
+ case Left((k, v)) => imap += k -> v; mmap += k -> v
+ case Right(k) => imap -= k; mmap -= k
+ }
+
+ imap.toList == mmap.toList
+ }
+ }
+
+ object MutableTreeMapViewProperties extends Properties("mutable.TreeMapView") with Generators {
+ type K = String
+ type V = Int
+
+ implicit val ord = implicitly[Ordering[K]]
+
+ def in(key: K, from: Option[K], until: Option[K]) =
+ from.fold(true)(_ <= key) && until.fold(true)(_ > key)
+
+ def entriesInView[This <: TraversableOnce[(K, V)], That](entries: This, from: Option[K], until: Option[K])(implicit bf: CanBuildFrom[This, (K, V), That]) = {
+ (bf.apply(entries) ++= entries.filter { case (k, _) => in(k, from, until) }).result()
+ }
+
+ property("get, contains") = forAll { (allEntries: Map[K, V], from: Option[K], until: Option[K]) =>
+ val entries = allEntries.take(allEntries.size / 2)
+
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ val mapView = map.rangeImpl(from, until)
+ allEntries.forall { case (k, v) =>
+ mapView.contains(k) == (in(k, from, until) && entries.contains(k)) &&
+ mapView.get(k) == (if(in(k, from, until)) entries.get(k) else None)
+ }
+ }
+
+ property("size, isEmpty") = forAll { (entries: Map[K, V], from: Option[K], until: Option[K]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ val mapView = map.rangeImpl(from, until)
+ mapView.size == entriesInView(entries, from, until).size &&
+ mapView.isEmpty == !entries.exists { kv => in(kv._1, from, until) }
+ }
+
+ property("+=") = forAll { (map: mutable.TreeMap[K, V], k: K, v: V, from: Option[K], until: Option[K]) =>
+ val oldSize = map.size
+ val containedKeyBefore = map.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize else oldSize + 1
+ val isInRange = in(k, from, until)
+
+ val mapView = map.rangeImpl(from, until)
+ mapView += (k -> v)
+
+ map.contains(k) && map.get(k) == Some(v) && map.size == newExpectedSize &&
+ mapView.contains(k) == isInRange &&
+ mapView.get(k) == (if(isInRange) Some(v) else None)
+ }
+
+ property("++=") = forAll { (map: mutable.TreeMap[K, V], entries: Seq[(K, V)], from: Option[K], until: Option[K]) =>
+ val mapView = map.rangeImpl(from, until)
+ mapView ++= entries
+ entries.toMap.forall { case (k, v) =>
+ map.get(k) == Some(v) &&
+ mapView.get(k) == (if (in(k, from, until)) Some(v) else None)
+ }
+ }
+
+ property("-=") = forAll { (map: mutable.TreeMap[K, V], k: K, from: Option[K], until: Option[K]) =>
+ val oldSize = map.size
+ val containedKeyBefore = map.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize - 1 else oldSize
+
+ val mapView = map.rangeImpl(from, until)
+ mapView -= k
+
+ !map.contains(k) && map.get(k) == None && map.size == newExpectedSize &&
+ !mapView.contains(k) &&
+ mapView.get(k) == None
+ }
+
+ property("--=") = forAll { (map: mutable.TreeMap[K, V], ks: Seq[K], from: Option[K], until: Option[K]) =>
+ val mapView = map.rangeImpl(from, until)
+ mapView --= ks
+ ks.toSet.forall { k => map.get(k) == None && mapView.get(k) == None }
+ }
+
+ property("iterator") = forAll { (entries: Map[K, V], from: Option[K], until: Option[K]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ val mapView = map.rangeImpl(from, until)
+ mapView.iterator.toSeq == entriesInView(entries, from, until).toSeq.sorted
+ }
+
+ property("iteratorFrom") = forAll { (entries: Map[K, V], k: K, from: Option[K], until: Option[K]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ val mapView = map.rangeImpl(from, until)
+ val newLower = Some(from.fold(k)(ord.max(_, k)))
+ mapView.iteratorFrom(k).toSeq == entriesInView(entries, newLower, until).toSeq.sorted
+ }
+
+ property("keysIteratorFrom") = forAll { (entries: Map[K, V], k: K, from: Option[K], until: Option[K]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ val mapView = map.rangeImpl(from, until)
+ val newLower = Some(from.fold(k)(ord.max(_, k)))
+ mapView.keysIteratorFrom(k).toSeq == entriesInView(entries, newLower, until).toSeq.sorted.map(_._1)
+ }
+
+ property("valuesIteratorFrom") = forAll { (entries: Map[K, V], k: K, from: Option[K], until: Option[K]) =>
+ val map = mutable.TreeMap[K, V]()
+ map ++= entries
+
+ val mapView = map.rangeImpl(from, until)
+ val newLower = Some(from.fold(k)(ord.max(_, k)))
+ mapView.valuesIteratorFrom(k).toSeq == entriesInView(entries, newLower, until).toSeq.sorted.map(_._2)
+ }
+
+ property("headOption") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) =>
+ val mapView = map.rangeImpl(from, until)
+ mapView.headOption == Try(entriesInView(map.iterator, from, until).next()).toOption
+ }
+
+ property("lastOption") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) =>
+ val mapView = map.rangeImpl(from, until)
+ mapView.lastOption == Try(entriesInView(map.iterator, from, until).max).toOption
+ }
+
+ property("clear") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) =>
+ val mapView = map.rangeImpl(from, until)
+ mapView.clear()
+ map.isEmpty && mapView.isEmpty && map.size == 0 && mapView.size == 0
+ }
+
+ property("serializable") = forAll { (map: mutable.TreeMap[K, V], from: Option[K], until: Option[K]) =>
+ val mapView = map.rangeImpl(from, until)
+
+ val bytesOut = new ByteArrayOutputStream()
+ val out = new ObjectOutputStream(bytesOut)
+ out.writeObject(mapView)
+ val bytes = bytesOut.toByteArray
+
+ val in = new ObjectInputStream(new ByteArrayInputStream(bytes))
+ val sameMapView = in.readObject().asInstanceOf[mutable.TreeMap[K, V]]
+ mapView.iterator.toSeq == sameMapView.iterator.toSeq
+ }
+ }
+}
+
+object Test extends Properties("mutable.TreeMap") {
+ import scala.collection.mutable._
+ include(RedBlackTreeProperties)
+ include(MutableTreeMapProperties)
+ include(MutableTreeMapViewProperties)
+}
diff --git a/test/files/scalacheck/MutableTreeSet.scala b/test/files/scalacheck/MutableTreeSet.scala
new file mode 100644
index 0000000000..bcb1d0ed94
--- /dev/null
+++ b/test/files/scalacheck/MutableTreeSet.scala
@@ -0,0 +1,216 @@
+import java.io._
+
+import org.scalacheck._
+import org.scalacheck.Arbitrary._
+import org.scalacheck.Prop.forAll
+
+import scala.collection.generic.CanBuildFrom
+import scala.collection.immutable
+import scala.collection.mutable
+import scala.util.Try
+
+package scala.collection.mutable {
+
+ object MutableTreeSetProperties extends Properties("mutable.TreeSet") {
+ type K = String
+
+ property("size, isEmpty") = forAll { (elems: Set[K]) =>
+ val set = mutable.TreeSet[K]()
+ set ++= elems
+ set.size == elems.size && set.isEmpty == elems.isEmpty
+ }
+
+ property("+=") = forAll { (set: mutable.TreeSet[K], k: K) =>
+ val oldSize = set.size
+ val containedKeyBefore = set.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize else oldSize + 1
+
+ set += k
+ set.contains(k) && set.size == newExpectedSize
+ }
+
+ property("++=") = forAll { (set: mutable.TreeSet[K], ks: Seq[K]) =>
+ val oldElems = set.toList
+ set ++= ks
+ (oldElems ++ ks).forall(set.contains)
+ }
+
+ property("-=") = forAll { (set: mutable.TreeSet[K], k: K) =>
+ val oldSize = set.size
+ val containedKeyBefore = set.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize - 1 else oldSize
+
+ set -= k
+ !set.contains(k) && set.size == newExpectedSize
+ }
+
+ property("--=") = forAll { (set: mutable.TreeSet[K], ks: Seq[K]) =>
+ val oldElems = set.toList
+ set --= ks
+ val deletedElems = ks.toSet
+ oldElems.forall { e => set.contains(e) == !deletedElems(e) }
+ }
+
+ property("iterator") = forAll { (ks: Set[K]) =>
+ val set = mutable.TreeSet[K]()
+ set ++= ks
+
+ set.iterator.toSeq == ks.toSeq.sorted
+ }
+
+ property("iteratorFrom, keysIteratorFrom") = forAll { (ks: Set[K], k: K) =>
+ val set = mutable.TreeSet[K]()
+ set ++= ks
+
+ set.iteratorFrom(k).toSeq == ks.filter(_ >= k).toSeq.sorted
+ set.keysIteratorFrom(k).toSeq == ks.filter(_ >= k).toSeq.sorted
+ }
+
+ property("headOption") = forAll { (set: mutable.TreeSet[K]) =>
+ set.headOption == Try(set.iterator.next()).toOption
+ }
+
+ property("lastOption") = forAll { (set: mutable.TreeSet[K]) =>
+ set.lastOption == Try(set.iterator.max).toOption
+ }
+
+ property("clear") = forAll { (set: mutable.TreeSet[K]) =>
+ set.clear()
+ set.isEmpty && set.size == 0
+ }
+
+ property("serializable") = forAll { (set: mutable.TreeSet[K]) =>
+ val bytesOut = new ByteArrayOutputStream()
+ val out = new ObjectOutputStream(bytesOut)
+ out.writeObject(set)
+ val bytes = bytesOut.toByteArray
+
+ val in = new ObjectInputStream(new ByteArrayInputStream(bytes))
+ val sameSet = in.readObject().asInstanceOf[mutable.TreeSet[K]]
+ set.iterator.toSeq == sameSet.iterator.toSeq
+ }
+
+ property("same behavior as immutable.TreeMap") = forAll { ops: Seq[Either[K, K]] =>
+ var iset = immutable.TreeSet[K]()
+ val mset = mutable.TreeSet[K]()
+
+ ops.foreach {
+ case Left(k) => iset += k; mset += k
+ case Right(k) => iset -= k; mset -= k
+ }
+
+ iset.toList == mset.toList
+ }
+ }
+
+ object MutableTreeSetViewProperties extends Properties("mutable.TreeSetView") {
+ type K = String
+
+ implicit val ord = implicitly[Ordering[K]]
+
+ def in(key: K, from: Option[K], until: Option[K]) =
+ from.fold(true)(_ <= key) && until.fold(true)(_ > key)
+
+ def keysInView[This <: TraversableOnce[K], That](keys: This, from: Option[K], until: Option[K])(implicit bf: CanBuildFrom[This, K, That]) = {
+ (bf.apply(keys) ++= keys.filter(in(_, from, until))).result()
+ }
+
+ property("size, isEmpty") = forAll { (keys: Set[K], from: Option[K], until: Option[K]) =>
+ val map = mutable.TreeSet[K]()
+ map ++= keys
+
+ val mapView = map.rangeImpl(from, until)
+ mapView.size == keysInView(keys, from, until).size &&
+ mapView.isEmpty == !keys.exists(in(_, from, until))
+ }
+
+ property("+=") = forAll { (set: mutable.TreeSet[K], k: K, from: Option[K], until: Option[K]) =>
+ val oldSize = set.size
+ val containedKeyBefore = set.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize else oldSize + 1
+ val isInRange = in(k, from, until)
+
+ val setView = set.rangeImpl(from, until)
+ setView += k
+
+ set.contains(k) && set.size == newExpectedSize && setView.contains(k) == isInRange
+ }
+
+ property("++=") = forAll { (set: mutable.TreeSet[K], ks: Seq[K], from: Option[K], until: Option[K]) =>
+ val setView = set.rangeImpl(from, until)
+ setView ++= ks
+ ks.toSet.forall { k =>
+ set.contains(k) && setView.contains(k) == in(k, from, until)
+ }
+ }
+
+ property("-=") = forAll { (set: mutable.TreeSet[K], k: K, from: Option[K], until: Option[K]) =>
+ val oldSize = set.size
+ val containedKeyBefore = set.contains(k)
+ val newExpectedSize = if(containedKeyBefore) oldSize - 1 else oldSize
+
+ val setView = set.rangeImpl(from, until)
+ setView -= k
+
+ !set.contains(k) && set.size == newExpectedSize && !setView.contains(k)
+ }
+
+ property("--=") = forAll { (set: mutable.TreeSet[K], ks: Seq[K], from: Option[K], until: Option[K]) =>
+ val setView = set.rangeImpl(from, until)
+ setView --= ks
+ ks.toSet.forall { k => !set.contains(k) && !setView.contains(k) }
+ }
+
+ property("iterator") = forAll { (ks: Set[K], from: Option[K], until: Option[K]) =>
+ val set = mutable.TreeSet[K]()
+ set ++= ks
+
+ val setView = set.rangeImpl(from, until)
+ setView.iterator.toSeq == keysInView(ks, from, until).toSeq.sorted
+ }
+
+ property("iteratorFrom, keysIteratorFrom") = forAll { (ks: Set[K], k: K, from: Option[K], until: Option[K]) =>
+ val set = mutable.TreeSet[K]()
+ set ++= ks
+
+ val setView = set.rangeImpl(from, until)
+ val newLower = Some(from.fold(k)(ord.max(_, k)))
+ setView.iteratorFrom(k).toSeq == keysInView(ks, newLower, until).toSeq.sorted
+ }
+
+ property("headOption") = forAll { (set: mutable.TreeSet[K], from: Option[K], until: Option[K]) =>
+ val setView = set.rangeImpl(from, until)
+ setView.headOption == Try(keysInView(set.iterator, from, until).next()).toOption
+ }
+
+ property("lastOption") = forAll { (set: mutable.TreeSet[K], from: Option[K], until: Option[K]) =>
+ val setView = set.rangeImpl(from, until)
+ setView.lastOption == Try(keysInView(set.iterator, from, until).max).toOption
+ }
+
+ property("clear") = forAll { (set: mutable.TreeSet[K], from: Option[K], until: Option[K]) =>
+ val setView = set.rangeImpl(from, until)
+ setView.clear()
+ set.isEmpty && setView.isEmpty && set.size == 0 && setView.size == 0
+ }
+
+ property("serializable") = forAll { (set: mutable.TreeSet[K], from: Option[K], until: Option[K]) =>
+ val setView = set.rangeImpl(from, until)
+
+ val bytesOut = new ByteArrayOutputStream()
+ val out = new ObjectOutputStream(bytesOut)
+ out.writeObject(setView)
+ val bytes = bytesOut.toByteArray
+
+ val in = new ObjectInputStream(new ByteArrayInputStream(bytes))
+ val sameSetView = in.readObject().asInstanceOf[mutable.TreeSet[K]]
+ setView.iterator.toSeq == sameSetView.iterator.toSeq
+ }
+ }
+}
+
+object Test extends Properties("mutable.TreeSet") {
+ import scala.collection.mutable._
+ include(MutableTreeSetProperties)
+ include(MutableTreeSetViewProperties)
+}
diff --git a/test/files/scalacheck/avl.scala b/test/files/scalacheck/avl.scala
deleted file mode 100644
index 4cfacaf407..0000000000
--- a/test/files/scalacheck/avl.scala
+++ /dev/null
@@ -1,112 +0,0 @@
-import org.scalacheck.Gen
-import org.scalacheck.Prop.forAll
-import org.scalacheck.Properties
-
-package scala.collection.mutable {
-
- /**
- * Property of an AVL Tree : Any node of the tree has a balance value beetween in [-1; 1]
- */
- abstract class AVLTreeTest(name: String) extends Properties(name) {
-
- def `2^`(n: Int) = (1 to n).fold(1)((a, b) => b*2)
-
- def capacityMax(depth: Int): Int = `2^`(depth+1) - 1
-
- def minDepthForCapacity(x: Int): Int = {
- var depth = 0
- while(capacityMax(depth) < x)
- depth += 1
- depth
- }
-
- def numberOfElementsInLeftSubTree(n: Int): collection.immutable.IndexedSeq[Int] = {
- val mid = n/2 + n%2
- ((1 until mid)
- .filter { i => math.abs(minDepthForCapacity(i) - minDepthForCapacity(n-i)) < 2 }
- .flatMap { i => Seq(i, n-(i+1)) }).toIndexedSeq.distinct
- }
-
- def makeAllBalancedTree[A](elements: List[A]): List[AVLTree[A]] = elements match {
- case Nil => Leaf::Nil
- case first::Nil => Node(first, Leaf, Leaf)::Nil
- case first::second::Nil => Node(second, Node(first, Leaf, Leaf), Leaf)::Node(first, Leaf, Node(second, Leaf, Leaf))::Nil
- case first::second::third::Nil => Node(second, Node(first, Leaf, Leaf), Node(third, Leaf, Leaf))::Nil
- case _ => {
- val combinations = for {
- left <- numberOfElementsInLeftSubTree(elements.size)
- root = elements(left)
- right = elements.size - (left + 1)
- } yield (root, left, right)
- (combinations.flatMap(triple => for {
- l <- makeAllBalancedTree(elements.take(triple._2))
- r <- makeAllBalancedTree(elements.takeRight(triple._3))
- } yield Node(triple._1, l, r))).toList
- }
- }
-
- def genInput: org.scalacheck.Gen[(Int, List[AVLTree[Int]])] = for {
- size <- org.scalacheck.Gen.choose(20, 25)
- elements <- org.scalacheck.Gen.listOfN(size, org.scalacheck.Gen.choose(0, 1000))
- selected <- org.scalacheck.Gen.choose(0, 1000)
- } yield {
- // selected mustn't be in elements already
- val list = makeAllBalancedTree(elements.sorted.distinct.map(_*2))
- (selected*2+1, list)
- }
-
- def genInputDelete: org.scalacheck.Gen[(Int, List[AVLTree[Int]])] = for {
- size <- org.scalacheck.Gen.choose(20, 25)
- elements <- org.scalacheck.Gen.listOfN(size, org.scalacheck.Gen.choose(0, 1000))
- e = elements.sorted.distinct
- selected <- org.scalacheck.Gen.choose(0, e.size-1)
- } yield {
- // selected must be in elements already
- val list = makeAllBalancedTree(e)
- (e(selected), list)
- }
- }
-
- trait AVLInvariants {
- self: AVLTreeTest =>
-
- def isBalanced[A](t: AVLTree[A]): Boolean = t match {
- case node: Node[A] => math.abs(node.balance) < 2 && (List(node.left, node.right) forall isBalanced)
- case Leaf => true
- }
-
- def setup(invariant: AVLTree[Int] => Boolean) = forAll(genInput) {
- case (selected: Int, trees: List[AVLTree[Int]]) =>
- trees.map(tree => invariant(tree)).fold(true)((a, b) => a && b)
- }
-
- property("Every tree is initially balanced.") = setup(isBalanced)
- }
-
- object TestInsert extends AVLTreeTest("Insert") with AVLInvariants {
- import math.Ordering.Int
- property("`insert` creates a new tree containing the given element. The tree remains balanced.") = forAll(genInput) {
- case (selected: Int, trees: List[AVLTree[Int]]) =>
- trees.map(tree => {
- val modifiedTree = tree.insert(selected, Int)
- modifiedTree.contains(selected, Int) && isBalanced(modifiedTree)
- }).fold(true)((a, b) => a && b)
- }
- }
-
- object TestRemove extends AVLTreeTest("Remove") with AVLInvariants {
- import math.Ordering.Int
- property("`remove` creates a new tree without the given element. The tree remains balanced.") = forAll(genInputDelete) {
- case (selected: Int, trees: List[AVLTree[Int]]) =>
- trees.map(tree => {
- val modifiedTree = tree.remove(selected, Int)
- tree.contains(selected, Int) && !modifiedTree.contains(selected, Int) && isBalanced(modifiedTree)
- }).fold(true)((a, b) => a && b)
- }
- }
-}
-
-object Test extends Properties("AVL") {
- include(scala.collection.mutable.TestInsert)
- include(scala.collection.mutable.TestRemove)
-}
diff --git a/test/files/scalacheck/concurrent-map.scala b/test/files/scalacheck/concurrent-map.scala
new file mode 100755
index 0000000000..7c9b8d4169
--- /dev/null
+++ b/test/files/scalacheck/concurrent-map.scala
@@ -0,0 +1,76 @@
+
+
+
+import java.util.concurrent._
+import scala.collection._
+import scala.collection.JavaConverters._
+import org.scalacheck._
+import org.scalacheck.Prop._
+import org.scalacheck.Gen._
+
+
+
+case class Wrap(i: Int) {
+ override def hashCode = i * 0x9e3775cd
+}
+
+
+object Test extends Properties("concurrent.TrieMap") {
+
+ /* generators */
+
+ val sizes = choose(0, 20000)
+
+ val threadCounts = choose(2, 16)
+
+ val threadCountsAndSizes = for {
+ p <- threadCounts
+ sz <- sizes
+ } yield (p, sz);
+
+
+ /* helpers */
+
+ def inParallel[T](totalThreads: Int)(body: Int => T): Seq[T] = {
+ val threads = for (idx <- 0 until totalThreads) yield new Thread {
+ setName("ParThread-" + idx)
+ private var res: T = _
+ override def run() {
+ res = body(idx)
+ }
+ def result = {
+ this.join()
+ res
+ }
+ }
+
+ threads foreach (_.start())
+ threads map (_.result)
+ }
+
+ property("concurrent getOrElseUpdate insertions") = forAll(threadCounts, sizes) {
+ (p, sz) =>
+ val chm = new ConcurrentHashMap[Wrap, Int]().asScala
+
+ val results = inParallel(p) {
+ idx =>
+ for (i <- 0 until sz) yield chm.getOrElseUpdate(new Wrap(i), idx)
+ }
+
+ val resultSets = for (i <- 0 until sz) yield results.map(_(i)).toSet
+ val largerThanOne = resultSets.zipWithIndex.find(_._1.size != 1)
+ val allThreadsAgreeOnWhoInserted = {
+ largerThanOne == None
+ } :| s"$p threads agree on who inserted [disagreement (differentResults, position) = $largerThanOne]"
+
+ allThreadsAgreeOnWhoInserted
+ }
+
+
+}
+
+
+
+
+
+
diff --git a/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala b/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala
index 691a3e961e..605c16857a 100644
--- a/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelArrayCheck.scala
@@ -44,7 +44,7 @@ abstract class ParallelArrayCheck[T](tp: String) extends ParallelSeqCheck[T]("Pa
pa
}
- property("array mappings must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("array mappings must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((f, ind) <- mapFunctions.zipWithIndex)
yield ("op index: " + ind) |: t.map(f) == coll.map(f)
results.reduceLeft(_ && _)
diff --git a/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala b/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala
index 9805e2644f..fb09a5bbb7 100644
--- a/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelArrayViewCheck.scala
@@ -46,7 +46,7 @@
// pa.view
// }
-// property("forces must be equal") = forAll(collectionPairs) { case (s, coll) =>
+// property("forces must be equal") = forAllNoShrink(collectionPairs) { case (s, coll) =>
// val smodif = (s ++ s).reverse.take(s.length).reverse.zip(s).drop(s.length / 2)
// val cmodif = (coll ++ s).reverse.take(s.length).reverse.zip(s).drop(s.length / 2).force
// smodif == cmodif
diff --git a/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala b/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala
index 468bcb6dd1..7e7ef2ce1b 100644
--- a/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala
@@ -109,7 +109,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
println("cf == tf - " + (cf == tf))
}
- property("reductions must be equal for assoc. operators") = forAll(collectionPairs) { case (t, coll) =>
+ property("reductions must be equal for assoc. operators") = forAllNoShrink(collectionPairs) { case (t, coll) =>
if (t.size != 0) {
val results = for ((op, ind) <- reduceOperators.zipWithIndex) yield {
val tr = t.reduceLeft(op)
@@ -127,7 +127,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
} else "has size 0" |: true
}
- property("counts must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("counts must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((pred, ind) <- countPredicates.zipWithIndex) yield {
val tc = t.count(pred)
val cc = coll.count(pred)
@@ -143,19 +143,19 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
results.reduceLeft(_ && _)
}
- property("forall must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("forall must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((pred, ind) <- forallPredicates.zipWithIndex)
yield ("op index: " + ind) |: t.forall(pred) == coll.forall(pred)
results.reduceLeft(_ && _)
}
- property("exists must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("exists must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((pred, ind) <- existsPredicates.zipWithIndex)
yield ("op index: " + ind) |: t.exists(pred) == coll.exists(pred)
results.reduceLeft(_ && _)
}
- property("both must find or not find an element") = forAll(collectionPairs) { case (t, coll) =>
+ property("both must find or not find an element") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((pred, ind) <- findPredicates.zipWithIndex) yield {
val ft = t.find(pred)
val fcoll = coll.find(pred)
@@ -164,7 +164,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
results.reduceLeft(_ && _)
}
- property("mappings must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("mappings must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((f, ind) <- mapFunctions.zipWithIndex) yield {
val ms = t.map(f)
val mp = coll.map(f)
@@ -185,7 +185,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
results.reduceLeft(_ && _)
}
- property("collects must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("collects must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val results = for ((f, ind) <- partialMapFunctions.zipWithIndex) yield {
val ps = t.collect(f)
val pp = coll.collect(f)
@@ -201,12 +201,12 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
results.reduceLeft(_ && _)
}
- property("flatMaps must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("flatMaps must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((f, ind) <- flatMapFunctions.zipWithIndex)
yield ("op index: " + ind) |: areEqual(t.flatMap(f), coll.flatMap(f))).reduceLeft(_ && _)
}
- property("filters must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("filters must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((p, ind) <- filterPredicates.zipWithIndex) yield {
val tf = t.filter(p)
val cf = coll.filter(p)
@@ -235,7 +235,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}).reduceLeft(_ && _)
}
- property("filterNots must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ property("filterNots must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((p, ind) <- filterNotPredicates.zipWithIndex) yield {
val tf = t.filterNot(p)
val cf = coll.filterNot(p)
@@ -244,7 +244,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}).reduceLeft(_ && _)
}
- if (!isCheckingViews) property("partitions must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ if (!isCheckingViews) property("partitions must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((p, ind) <- partitionPredicates.zipWithIndex) yield {
val tpart = t.partition(p)
val cpart = coll.partition(p)
@@ -258,15 +258,15 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}).reduceLeft(_ && _)
}
- if (hasStrictOrder) property("takes must be equal") = forAll(collectionPairsWithLengths) { case (t, coll, n) =>
+ if (hasStrictOrder) property("takes must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (t, coll, n) =>
("take " + n + " elements") |: t.take(n) == coll.take(n)
}
- if (hasStrictOrder) property("drops must be equal") = forAll(collectionPairsWithLengths) { case (t, coll, n) =>
+ if (hasStrictOrder) property("drops must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (t, coll, n) =>
("drop " + n + " elements") |: t.drop(n) == coll.drop(n)
}
- if (hasStrictOrder) property("slices must be equal") = forAll(collectionPairsWith2Indices)
+ if (hasStrictOrder) property("slices must be equal") = forAllNoShrink(collectionPairsWith2Indices)
{ case (t, coll, fr, slicelength) =>
val from = if (fr < 0) 0 else fr
val until = if (from + slicelength > t.size) t.size else from + slicelength
@@ -290,7 +290,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
("slice from " + from + " until " + until) |: tsl == collsl
}
- if (hasStrictOrder) property("splits must be equal") = forAll(collectionPairsWithLengths) { case (t, coll, n) =>
+ if (hasStrictOrder) property("splits must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (t, coll, n) =>
val tspl = t.splitAt(n)
val cspl = coll.splitAt(n)
if (tspl != cspl) {
@@ -303,7 +303,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
("splitAt " + n) |: tspl == cspl
}
- if (hasStrictOrder) property("takeWhiles must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ if (hasStrictOrder) property("takeWhiles must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((pred, ind) <- takeWhilePredicates.zipWithIndex) yield {
val tt = t.takeWhile(pred)
val ct = coll.takeWhile(pred)
@@ -318,7 +318,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}).reduceLeft(_ && _)
}
- if (hasStrictOrder) property("spans must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ if (hasStrictOrder) property("spans must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((pred, ind) <- spanPredicates.zipWithIndex) yield {
val tsp = t.span(pred)
val csp = coll.span(pred)
@@ -336,13 +336,13 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}).reduceLeft(_ && _)
}
- if (hasStrictOrder) property("dropWhiles must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ if (hasStrictOrder) property("dropWhiles must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for ((pred, ind) <- dropWhilePredicates.zipWithIndex) yield {
("operator " + ind) |: t.dropWhile(pred) == coll.dropWhile(pred)
}).reduceLeft(_ && _)
}
- property("folds must be equal for assoc. operators") = forAll(collectionPairs) { case (t, coll) =>
+ property("folds must be equal for assoc. operators") = forAllNoShrink(collectionPairs) { case (t, coll) =>
(for (((first, op), ind) <- foldArguments.zipWithIndex) yield {
val tres = t.foldLeft(first)(op)
val cres = coll.fold(first)(op)
@@ -389,7 +389,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}
}
- if (hasStrictOrder) property("copies to array must be equal") = forAll(collectionPairs) { case (t, coll) =>
+ if (hasStrictOrder) property("copies to array must be equal") = forAllNoShrink(collectionPairs) { case (t, coll) =>
val tarr = newArray(t.size)
val collarr = newArray(coll.size)
t.copyToArray(tarr, 0, t.size)
@@ -403,7 +403,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
tarr.toSeq == collarr.toSeq
}
- if (hasStrictOrder) property("scans must be equal") = forAll(collectionPairs) {
+ if (hasStrictOrder) property("scans must be equal") = forAllNoShrink(collectionPairs) {
case (t, coll) =>
(for (((first, op), ind) <- foldArguments.zipWithIndex) yield {
val tscan = t.scanLeft(first)(op)
@@ -419,7 +419,7 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col
}).reduceLeft(_ && _)
}
- property("groupBy must be equal") = forAll(collectionPairs) {
+ property("groupBy must be equal") = forAllNoShrink(collectionPairs) {
case (t, coll) =>
(for ((f, ind) <- groupByFunctions.zipWithIndex) yield {
val tgroup = t.groupBy(f)
diff --git a/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala b/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala
index d4643e7f2c..50aa4ad0c7 100644
--- a/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelMapCheck1.scala
@@ -17,7 +17,7 @@ import scala.collection.parallel._
abstract class ParallelMapCheck[K, V](collname: String) extends ParallelIterableCheck[(K, V)](collname) {
type CollType <: ParMap[K, V]
- property("gets iterated keys") = forAll(collectionPairs) {
+ property("gets iterated keys") = forAllNoShrink(collectionPairs) {
case (t, coll) =>
val containsT = for ((k, v) <- t) yield (coll.get(k) == Some(v))
val containsSelf = coll.map { case (k, v) => coll.get(k) == Some(v) }
diff --git a/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala b/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala
index f490d9490a..a80d1a27a1 100644
--- a/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelRangeCheck.scala
@@ -27,7 +27,7 @@ class ParallelRangeCheck(val tasksupport: TaskSupport) extends ParallelSeqCheck[
def isCheckingViews = false
- def ofSize(vals: Seq[Gen[Int]], sz: Int) = unsupported
+ def ofSize(vals: Seq[Gen[Int]], sz: Int) = throw new UnsupportedOperationException
override def instances(vals: Seq[Gen[Int]]): Gen[Seq[Int]] = sized { start =>
sized { end =>
diff --git a/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala b/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala
index 3f8a8ad4f5..48c3d3f745 100644
--- a/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelSeqCheck.scala
@@ -24,6 +24,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
def fromSeq(s: Seq[T]): CollType
override def instances(vals: Seq[Gen[T]]): Gen[Seq[T]] = oneOf(
+ Gen.const(ofSize(vals, 1)),
sized(
sz =>
ofSize(vals, sz)
@@ -74,7 +75,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
coll.patch(updateStart, coll, howMany)
}
- property("segmentLengths must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ property("segmentLengths must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (s, coll, len) =>
(for ((pred, ind) <- segmentLengthPredicates.zipWithIndex) yield {
val slen = s.segmentLength(pred, if (len < 0) 0 else len)
val clen = coll.segmentLength(pred, len)
@@ -88,13 +89,13 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}).reduceLeft(_ && _)
}
- property("prefixLengths must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ property("prefixLengths must be equal") = forAllNoShrink(collectionPairs) { case (s, coll) =>
(for ((pred, ind) <- segmentLengthPredicates.zipWithIndex) yield {
("operator " + ind) |: s.prefixLength(pred) == coll.prefixLength(pred)
}).reduceLeft(_ && _)
}
- property("indexWheres must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ property("indexWheres must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (s, coll, len) =>
(for ((pred, ind) <- indexWherePredicates.zipWithIndex) yield {
val sind = s.indexWhere(pred, len)
val cind = coll.indexWhere(pred, len)
@@ -109,7 +110,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}).reduceLeft(_ && _)
}
- property("lastIndexWheres must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ property("lastIndexWheres must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (s, coll, len) =>
(for ((pred, ind) <- lastIndexWherePredicates.zipWithIndex) yield {
val end = if (len >= s.size) s.size - 1 else len
val sind = s.lastIndexWhere(pred, end)
@@ -118,7 +119,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}).reduceLeft(_ && _)
}
- property("reverses must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ property("reverses must be equal") = forAllNoShrink(collectionPairs) { case (s, coll) =>
(s.length == 0 && s.getClass == classOf[collection.immutable.Range]) ||
{
val sr = s.reverse
@@ -133,13 +134,13 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}
}
- property("reverseMaps must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ property("reverseMaps must be equal") = forAllNoShrink(collectionPairs) { case (s, coll) =>
(for ((f, ind) <- reverseMapFunctions.zipWithIndex) yield {
("operator " + ind) |: s.reverseMap(f) == coll.reverseMap(f)
}).reduceLeft(_ && _)
}
- property("sameElements must be equal") = forAll(collectionPairsWithModifiedWithLengths) {
+ property("sameElements must be equal") = forAllNoShrink(collectionPairsWithModifiedWithLengths) {
case (s, coll, collmodif, len) =>
val pos = if (len < 0) 0 else len
val scm = s.sameElements(collmodif)
@@ -171,7 +172,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}).reduceLeft(_ && _)
}
- property("startsWiths must be equal") = forAll(collectionPairsWithModifiedWithLengths) {
+ property("startsWiths must be equal") = forAllNoShrink(collectionPairsWithModifiedWithLengths) {
case (s, coll, collmodif, len) =>
val pos = if (len < 0) 0 else len
("start with self" |: s.startsWith(s) == coll.startsWith(coll)) &&
@@ -195,7 +196,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}).reduceLeft(_ && _)
}
- property("endsWiths must be equal") = forAll(collectionPairsWithModified) {
+ property("endsWiths must be equal") = forAllNoShrink(collectionPairsWithModified) {
case (s, coll, collmodif) =>
("ends with self" |: s.endsWith(s) == coll.endsWith(s)) &&
("ends with tail" |: (s.length == 0 || s.endsWith(s.tail) == coll.endsWith(coll.tail))) &&
@@ -214,7 +215,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
}).reduceLeft(_ && _)
}
- property("unions must be equal") = forAll(collectionPairsWithModified) { case (s, coll, collmodif) =>
+ property("unions must be equal") = forAllNoShrink(collectionPairsWithModified) { case (s, coll, collmodif) =>
("modified" |: s.union(collmodif.seq) == coll.union(collmodif)) &&
("empty" |: s.union(Nil) == coll.union(fromSeq(Nil)))
}
@@ -233,7 +234,7 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
("with one" |: (s.length == 0 || s.patch(from, List(s(0)), 1) == coll.patch(from, fromSeq(List(coll(0))), 1)))
}
- if (!isCheckingViews) property("updates must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ if (!isCheckingViews) property("updates must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (s, coll, len) =>
val pos = if (len >= s.length) s.length - 1 else len
if (s.length > 0) {
val supd = s.updated(pos, s(0))
@@ -248,15 +249,15 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
} else "trivially" |: true
}
- property("prepends must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ property("prepends must be equal") = forAllNoShrink(collectionPairs) { case (s, coll) =>
s.length == 0 || s(0) +: s == coll(0) +: coll
}
- property("appends must be equal") = forAll(collectionPairs) { case (s, coll) =>
+ property("appends must be equal") = forAllNoShrink(collectionPairs) { case (s, coll) =>
s.length == 0 || s :+ s(0) == coll :+ coll(0)
}
- property("padTos must be equal") = forAll(collectionPairsWithLengths) { case (s, coll, len) =>
+ property("padTos must be equal") = forAllNoShrink(collectionPairsWithLengths) { case (s, coll, len) =>
val someValue = sampleValue
val sdoub = s.padTo(len * 2, someValue)
val cdoub = coll.padTo(len * 2, someValue)
@@ -267,10 +268,10 @@ abstract class ParallelSeqCheck[T](collName: String) extends ParallelIterableChe
println(cdoub)
}
("smaller" |: s.padTo(len / 2, someValue) == coll.padTo(len / 2, someValue)) &&
- ("bigger" |: sdoub == cdoub)
+ ("bigger" |: sdoub == cdoub)
}
- property("corresponds must be equal") = forAll(collectionPairsWithModified) { case (s, coll, modified) =>
+ property("corresponds must be equal") = forAllNoShrink(collectionPairsWithModified) { case (s, coll, modified) =>
val modifcut = modified.toSeq.slice(0, modified.length)
("self" |: s.corresponds(s)(_ == _) == coll.corresponds(coll)(_ == _)) &&
("modified" |: s.corresponds(modified.seq)(_ == _) == coll.corresponds(modified)(_ == _)) &&
diff --git a/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala b/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala
index 56f7832fed..c22dddf96d 100644
--- a/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala
+++ b/test/files/scalacheck/parallel-collections/ParallelSetCheck.scala
@@ -17,7 +17,7 @@ import scala.collection.parallel._
abstract class ParallelSetCheck[T](collname: String) extends ParallelIterableCheck[T](collname) {
type CollType <: ParSet[T]
- property("gets iterated keys") = forAll(collectionPairs) {
+ property("gets iterated keys") = forAllNoShrink(collectionPairs) {
case (t, coll) =>
val containsT = for (elem <- t) yield (coll.contains(elem))
val containsSelf = for (elem <- coll) yield (coll.contains(elem))
diff --git a/test/files/scalacheck/quasiquotes/TypecheckedProps.scala b/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
index f84df269ca..07bff40f13 100644
--- a/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
+++ b/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
@@ -103,7 +103,7 @@ object TypecheckedProps extends QuasiquoteProperties("typechecked")
val lazyName = TermName("x")
val lazyRhsVal = 42
val lazyRhs = Literal(Constant(lazyRhsVal))
- val q"{lazy val $pname = $rhs}" = typecheck(q"{lazy val $lazyName = $lazyRhsVal}")
+ val q"{ $mods val $pname: $_ = $rhs }" = typecheck(q"{lazy val $lazyName = $lazyRhsVal}")
assert(pname == lazyName)
assert(rhs ≈ lazyRhs)
@@ -167,7 +167,7 @@ trait TypecheckedTypes { self: QuasiquoteProperties =>
property("applied type") = test {
val tt = typecheckTyp(tq"Map[Int, Int]")
val tq"$tpt[..$tpts]" = tt
- val tq"scala.this.Predef.Map" = tpt
+ val tq"scala.Predef.Map" = tpt
val List(tq"scala.Int", tq"scala.Int") = tpts
}
diff --git a/test/files/specialized/SI-7343.scala b/test/files/specialized/SI-7343.scala
index 8d14a2c1c5..a5fc547868 100644
--- a/test/files/specialized/SI-7343.scala
+++ b/test/files/specialized/SI-7343.scala
@@ -48,7 +48,7 @@ object Test extends App {
new Val(101, "Parent$mcI$sp")
/**
- * NOTE: The the same check, only modified to affect constructors, won't
+ * NOTE: The same check, only modified to affect constructors, won't
* work since the class X definition will always be lifted to become a
* member of the class, making it impossible to force its duplication.
*/
diff --git a/test/files/specialized/fft.check b/test/files/specialized/fft.check
index 74cb9bb3b5..5283c6cbe2 100644
--- a/test/files/specialized/fft.check
+++ b/test/files/specialized/fft.check
@@ -1,4 +1,4 @@
Processing 65536 items
Boxed doubles: 0
-Boxed ints: 2
+Boxed ints: 0
Boxed longs: 1179811
diff --git a/test/files/specialized/tb3651.check b/test/files/specialized/tb3651.check
index 8a3f686ef5..8e104f13ff 100644
--- a/test/files/specialized/tb3651.check
+++ b/test/files/specialized/tb3651.check
@@ -1,4 +1,4 @@
-tb3651.scala:8: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+tb3651.scala:8: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
lk.a
^
0
diff --git a/test/files/specialized/tc3651.check b/test/files/specialized/tc3651.check
index e2dbadf22c..1e56d196fd 100644
--- a/test/files/specialized/tc3651.check
+++ b/test/files/specialized/tc3651.check
@@ -1,4 +1,4 @@
-tc3651.scala:12: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+tc3651.scala:12: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
lk.a
^
0
diff --git a/test/files/specialized/td3651.check b/test/files/specialized/td3651.check
index 1a709fd0a7..697443ffe9 100644
--- a/test/files/specialized/td3651.check
+++ b/test/files/specialized/td3651.check
@@ -1,7 +1,7 @@
-td3651.scala:12: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+td3651.scala:12: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
b.a
^
-td3651.scala:16: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+td3651.scala:16: warning: a pure expression does nothing in statement position; multiline expressions might require enclosing parentheses
der.a
^
0
diff --git a/test/instrumented/library/scala/runtime/BoxesRunTime.java b/test/instrumented/library/scala/runtime/BoxesRunTime.java
index 57799bd9b1..05ce2941a8 100644
--- a/test/instrumented/library/scala/runtime/BoxesRunTime.java
+++ b/test/instrumented/library/scala/runtime/BoxesRunTime.java
@@ -278,10 +278,6 @@ public final class BoxesRunTime
else if (n instanceof java.lang.Float) return hashFromFloat((java.lang.Float)n);
else return n.hashCode();
}
- public static int hashFromObject(Object a) {
- if (a instanceof Number) return hashFromNumber((Number)a);
- else return a.hashCode();
- }
private static int unboxCharOrInt(Object arg1, int code) {
if (code == CHAR)
diff --git a/test/instrumented/library/scala/runtime/ScalaRunTime.scala b/test/instrumented/library/scala/runtime/ScalaRunTime.scala
index 6b45a4e9f3..7480ad6fbf 100644
--- a/test/instrumented/library/scala/runtime/ScalaRunTime.scala
+++ b/test/instrumented/library/scala/runtime/ScalaRunTime.scala
@@ -35,15 +35,6 @@ object ScalaRunTime {
private def isArrayClass(clazz: jClass[_], atLevel: Int): Boolean =
clazz.isArray && (atLevel == 1 || isArrayClass(clazz.getComponentType, atLevel - 1))
- def isValueClass(clazz: jClass[_]) = clazz.isPrimitive()
-
- // includes specialized subclasses and future proofed against hypothetical TupleN (for N > 22)
- def isTuple(x: Any) = x != null && x.getClass.getName.startsWith("scala.Tuple")
- def isAnyVal(x: Any) = x match {
- case _: Byte | _: Short | _: Char | _: Int | _: Long | _: Float | _: Double | _: Boolean | _: Unit => true
- case _ => false
- }
-
/** Return the class object representing an array with element class `clazz`.
*/
def arrayClass(clazz: jClass[_]): jClass[_] = {
@@ -52,15 +43,6 @@ object ScalaRunTime {
else java.lang.reflect.Array.newInstance(clazz, 0).getClass
}
- /** Return the class object representing elements in arrays described by a given schematic.
- */
- def arrayElementClass(schematic: Any): jClass[_] = schematic match {
- case cls: jClass[_] => cls.getComponentType
- case tag: ClassTag[_] => tag.runtimeClass
- case _ =>
- throw new UnsupportedOperationException(s"unsupported schematic $schematic (${schematic.getClass})")
- }
-
/** Return the class object representing an unboxed value type,
* e.g. classOf[int], not classOf[java.lang.Integer]. The compiler
* rewrites expressions like 5.getClass to come here.
@@ -122,15 +104,15 @@ object ScalaRunTime {
}
def array_clone(xs: AnyRef): AnyRef = xs match {
- case x: Array[AnyRef] => ArrayRuntime.cloneArray(x)
- case x: Array[Int] => ArrayRuntime.cloneArray(x)
- case x: Array[Double] => ArrayRuntime.cloneArray(x)
- case x: Array[Long] => ArrayRuntime.cloneArray(x)
- case x: Array[Float] => ArrayRuntime.cloneArray(x)
- case x: Array[Char] => ArrayRuntime.cloneArray(x)
- case x: Array[Byte] => ArrayRuntime.cloneArray(x)
- case x: Array[Short] => ArrayRuntime.cloneArray(x)
- case x: Array[Boolean] => ArrayRuntime.cloneArray(x)
+ case x: Array[AnyRef] => x.clone()
+ case x: Array[Int] => x.clone()
+ case x: Array[Double] => x.clone()
+ case x: Array[Long] => x.clone()
+ case x: Array[Float] => x.clone()
+ case x: Array[Char] => x.clone()
+ case x: Array[Byte] => x.clone()
+ case x: Array[Short] => x.clone()
+ case x: Array[Boolean] => x.clone()
case x: Array[Unit] => x
case null => throw new NullPointerException
}
@@ -169,9 +151,6 @@ object ScalaRunTime {
m
}
- def checkInitialized[T <: AnyRef](x: T): T =
- if (x == null) throw new UninitializedError else x
-
def _toString(x: Product): String =
x.productIterator.mkString(x.productPrefix + "(", ",", ")")
@@ -191,72 +170,12 @@ object ScalaRunTime {
}
}
- /** Fast path equality method for inlining; used when -optimise is set.
- */
- @inline def inlinedEquals(x: Object, y: Object): Boolean =
- if (x eq y) true
- else if (x eq null) false
- else if (x.isInstanceOf[java.lang.Number]) BoxesRunTime.equalsNumObject(x.asInstanceOf[java.lang.Number], y)
- else if (x.isInstanceOf[java.lang.Character]) BoxesRunTime.equalsCharObject(x.asInstanceOf[java.lang.Character], y)
- else x.equals(y)
-
- def _equals(x: Product, y: Any): Boolean = y match {
- case y: Product if x.productArity == y.productArity => x.productIterator sameElements y.productIterator
- case _ => false
- }
-
- // hashcode -----------------------------------------------------------
- //
- // Note that these are the implementations called by ##, so they
- // must not call ## themselves.
-
+ /** Implementation of `##`. */
def hash(x: Any): Int =
if (x == null) 0
else if (x.isInstanceOf[java.lang.Number]) BoxesRunTime.hashFromNumber(x.asInstanceOf[java.lang.Number])
else x.hashCode
- def hash(dv: Double): Int = {
- val iv = dv.toInt
- if (iv == dv) return iv
-
- val lv = dv.toLong
- if (lv == dv) return lv.hashCode
-
- val fv = dv.toFloat
- if (fv == dv) fv.hashCode else dv.hashCode
- }
- def hash(fv: Float): Int = {
- val iv = fv.toInt
- if (iv == fv) return iv
-
- val lv = fv.toLong
- if (lv == fv) return hash(lv)
- else fv.hashCode
- }
- def hash(lv: Long): Int = {
- val low = lv.toInt
- val lowSign = low >>> 31
- val high = (lv >>> 32).toInt
- low ^ (high + lowSign)
- }
- def hash(x: Number): Int = runtime.BoxesRunTime.hashFromNumber(x)
-
- // The remaining overloads are here for completeness, but the compiler
- // inlines these definitions directly so they're not generally used.
- def hash(x: Int): Int = x
- def hash(x: Short): Int = x.toInt
- def hash(x: Byte): Int = x.toInt
- def hash(x: Char): Int = x.toInt
- def hash(x: Boolean): Int = if (x) true.hashCode else false.hashCode
- def hash(x: Unit): Int = 0
-
- /** A helper method for constructing case class equality methods,
- * because existential types get in the way of a clean outcome and
- * it's performing a series of Any/Any equals comparisons anyway.
- * See ticket #2867 for specifics.
- */
- def sameElements(xs1: scala.collection.Seq[Any], xs2: scala.collection.Seq[Any]) = xs1 sameElements xs2
-
/** Given any Scala value, convert it to a String.
*
* The primary motivation for this method is to provide a means for
@@ -278,6 +197,9 @@ object ScalaRunTime {
def isScalaClass(x: AnyRef) = packageOf(x) startsWith "scala."
def isScalaCompilerClass(x: AnyRef) = packageOf(x) startsWith "scala.tools.nsc."
+ // includes specialized subclasses and future proofed against hypothetical TupleN (for N > 22)
+ def isTuple(x: Any) = x != null && x.getClass.getName.startsWith("scala.Tuple")
+
// When doing our own iteration is dangerous
def useOwnToString(x: Any) = x match {
// Node extends NodeSeq extends Seq[Node] and MetaData extends Iterable[MetaData]
@@ -345,18 +267,4 @@ object ScalaRunTime {
nl + s + "\n"
}
- private[scala] def checkZip(what: String, coll1: TraversableOnce[_], coll2: TraversableOnce[_]) {
- if (sys.props contains "scala.debug.zip") {
- val xs = coll1.toIndexedSeq
- val ys = coll2.toIndexedSeq
- if (xs.length != ys.length) {
- Console.err.println(
- "Mismatched zip in " + what + ":\n" +
- " this: " + xs.mkString(", ") + "\n" +
- " that: " + ys.mkString(", ")
- )
- (new Exception).getStackTrace.drop(2).take(10).foreach(println)
- }
- }
- }
}
diff --git a/test/junit/scala/PartialFunctionSerializationTest.scala b/test/junit/scala/PartialFunctionSerializationTest.scala
new file mode 100644
index 0000000000..2019e3a425
--- /dev/null
+++ b/test/junit/scala/PartialFunctionSerializationTest.scala
@@ -0,0 +1,30 @@
+package scala
+
+import org.junit.Test
+import org.junit.Assert._
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class PartialFunctionSerializationTest {
+ val pf1: PartialFunction[Int, Int] = { case n if n > 0 => 1 }
+ val pf2: PartialFunction[Int, Int] = { case n if n <= 0 => 2 }
+
+
+ private def assertSerializable[A,B](fn: A => B): Unit = {
+ import java.io._
+ new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(fn)
+ }
+
+ @Test def canSerializeLiteral = assertSerializable(pf1)
+
+ @Test def canSerializeLifted = assertSerializable(pf1.lift)
+
+ @Test def canSerializeOrElse = assertSerializable(pf1 orElse pf2)
+
+ @Test def canSerializeUnlifted = assertSerializable(Function.unlift((x: Int) => Some(x)))
+
+ @Test def canSerializeAndThen = assertSerializable(pf1.andThen((x: Int) => x))
+
+ @Test def canSerializeEmpty = assertSerializable(PartialFunction.empty)
+}
diff --git a/test/junit/scala/StringContextTest.scala b/test/junit/scala/StringContextTest.scala
deleted file mode 100644
index 7e9e775d58..0000000000
--- a/test/junit/scala/StringContextTest.scala
+++ /dev/null
@@ -1,87 +0,0 @@
-
-package scala
-
-import org.junit.Test
-import org.junit.Assert._
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-import scala.tools.testing.AssertUtil._
-
-@RunWith(classOf[JUnit4])
-class StringContextTest {
-
- import StringContext._
-
- @Test def noEscape() = {
- val s = "string"
- val res = processEscapes(s)
- assertEquals(s, res)
- }
- @Test def tabbed() = {
- val s = """a\tb"""
- val res = processEscapes(s)
- assertEquals("a\tb", res)
- }
- @Test def quoted() = {
- val s = """hello, \"world\""""
- val res = processEscapes(s)
- assertEquals("""hello, "world"""", res)
- }
- @Test def octal() = {
- val s = """\123cala"""
- val res = treatEscapes(s)
- assertEquals("Scala", res)
- }
- @Test def doubled() = {
- val s = """\123cala\123yntax"""
- val res = treatEscapes(s)
- assertEquals("ScalaSyntax", res)
- }
- @Test def badly() = assertThrows[InvalidEscapeException] {
- val s = """Scala\"""
- val res = treatEscapes(s)
- assertEquals("Scala", res)
- }
- @Test def noOctal() = assertThrows[InvalidEscapeException] {
- val s = """\123cala"""
- val res = processEscapes(s)
- assertEquals("Scala", res)
- }
-
- @Test def t6631_baseline() = assertEquals("\f\r\n\t", s"""\f\r\n\t""")
-
- @Test def t6631_badEscape() = assertThrows[InvalidEscapeException] {
- s"""\x"""
- }
-
- // verifying that the standard interpolators can be supplanted
- @Test def antiHijack_?() = {
- object AllYourStringsAreBelongToMe { case class StringContext(args: Any*) { def s(args: Any) = "!!!!" } }
- import AllYourStringsAreBelongToMe._
- //assertEquals("????", s"????")
- assertEquals("!!!!", s"????") // OK to hijack core interpolator ids
- }
-
- @Test def fIf() = {
- val res = f"${if (true) 2.5 else 2.5}%.2f"
- val expected = formatUsingCurrentLocale(2.50)
- assertEquals(expected, res)
- }
-
- @Test def fIfNot() = {
- val res = f"${if (false) 2.5 else 3.5}%.2f"
- val expected = formatUsingCurrentLocale(3.50)
- assertEquals(expected, res)
- }
-
- @Test def fHeteroArgs() = {
- val res = f"${3.14}%.2f rounds to ${3}%d"
- val expected = formatUsingCurrentLocale(3.14) + " rounds to 3"
- assertEquals(expected, res)
- }
-
- // Use this method to avoid problems with a locale-dependent decimal mark.
- // The string interpolation is not used here intentionally as this method is used to test string interpolation.
- private def formatUsingCurrentLocale(number: Double, decimalPlaces: Int = 2) = ("%." + decimalPlaces + "f").format(number)
-}
diff --git a/test/junit/scala/collection/IteratorTest.scala b/test/junit/scala/collection/IteratorTest.scala
index d980cadeb3..09061a3b29 100644
--- a/test/junit/scala/collection/IteratorTest.scala
+++ b/test/junit/scala/collection/IteratorTest.scala
@@ -135,6 +135,20 @@ class IteratorTest {
assertEquals(3, List(1, 2, 3, 4, 5).iterator.indexWhere { x: Int => x >= 4 })
assertEquals(-1, List(1, 2, 3, 4, 5).iterator.indexWhere { x: Int => x >= 16 })
}
+ @Test def indexOfFrom(): Unit = {
+ assertEquals(1, List(1, 2, 3, 4, 5).iterator.indexOf(2, 0))
+ assertEquals(1, List(1, 2, 3, 4, 5).iterator.indexOf(2, 1))
+ assertEquals(-1, List(1, 2, 3, 4, 5).iterator.indexOf(2, 2))
+ assertEquals(4, List(1, 2, 3, 2, 1).iterator.indexOf(1, 1))
+ assertEquals(1, List(1, 2, 3, 2, 1).iterator.indexOf(2, 1))
+ }
+ @Test def indexWhereFrom(): Unit = {
+ assertEquals(1, List(1, 2, 3, 4, 5).iterator.indexWhere(_ == 2, 0))
+ assertEquals(1, List(1, 2, 3, 4, 5).iterator.indexWhere(_ == 2, 1))
+ assertEquals(-1, List(1, 2, 3, 4, 5).iterator.indexWhere(_ == 2, 2))
+ assertEquals(4, List(1, 2, 3, 2, 1).iterator.indexWhere(_ < 2, 1))
+ assertEquals(1, List(1, 2, 3, 2, 1).iterator.indexWhere(_ <= 2, 1))
+ }
// iterator-iterate-lazy.scala
// was java.lang.UnsupportedOperationException: tail of empty list
@Test def iterateIsSufficientlyLazy(): Unit = {
@@ -154,6 +168,14 @@ class IteratorTest {
results += (Stream from 1).toIterator.drop(10).toStream.drop(10).toIterator.next()
assertSameElements(List(1,1,21), results)
}
+ // SI-8552
+ @Test def indexOfShouldWorkForTwoParams(): Unit = {
+ assertEquals(1, List(1, 2, 3).iterator.indexOf(2, 0))
+ assertEquals(-1, List(5 -> 0).iterator.indexOf(5, 0))
+ assertEquals(0, List(5 -> 0).iterator.indexOf((5, 0)))
+ assertEquals(-1, List(5 -> 0, 9 -> 2, 0 -> 3).iterator.indexOf(9, 2))
+ assertEquals(1, List(5 -> 0, 9 -> 2, 0 -> 3).iterator.indexOf(9 -> 2))
+ }
// SI-9332
@Test def spanExhaustsLeadingIterator(): Unit = {
def it = Iterator.iterate(0)(_ + 1).take(6)
@@ -192,22 +214,32 @@ class IteratorTest {
assertSameElements(exp, res)
assertEquals(8, counter) // was 14
}
-
- // SI-9766
- @Test def exhaustedConcatIteratorConcat: Unit = {
- def consume[A](i: Iterator[A]) = {
- while(i.hasNext) i.next()
- }
- val joiniter = Iterator.empty ++ Seq(1, 2, 3)
- assertTrue(joiniter.hasNext)
- consume(joiniter)
- val concatiter = joiniter ++ Seq(4, 5, 6)
- assertTrue(concatiter.hasNext)
- consume(concatiter)
- assertFalse(concatiter.hasNext)
- val concatFromEmpty = concatiter ++ Seq(7, 8, 9)
- assertTrue(concatFromEmpty.hasNext)
- consume(concatFromEmpty)
- assertFalse(concatFromEmpty.hasNext)
+ // SI-9691
+ @Test def bufferedHeadOptionReturnsValueWithHeadOrNone(): Unit = {
+ // Checks BufferedIterator returns Some(value) when there is a value
+ val validHeadOption = List(1,2,3).iterator.buffered.headOption
+ assertEquals(Some(1), validHeadOption)
+ // Checks BufferedIterator returns None when there is no value
+ val invalidHeadOption = List(1,2,3).iterator.drop(10).buffered.headOption
+ assertEquals(None: Option[Int], invalidHeadOption)
+ // Checks BufferedIterator returns Some(value) in the last position with a value
+ val validHeadOptionAtTail = List(1,2,3).iterator.drop(2).buffered.headOption
+ assertEquals(Some(3), validHeadOptionAtTail)
+ // Checks BufferedIterator returns None at the first position without a value
+ val invalidHeadOptionOnePastTail = List(1,2,3).iterator.drop(3).buffered.headOption
+ assertEquals(None, invalidHeadOptionOnePastTail)
+ // Checks BufferedIterator returns Some(null) if the next value is null.
+ val nullHandingList = List(null, "yellow").iterator.buffered.headOption
+ assertEquals(Some(null), nullHandingList)
+ // Checks that BufferedIterator is idempotent. That the head is not
+ // changed by its invocation, nor the headOption by the next call to head.
+ val it = List(1,2,3).iterator.buffered
+ val v1 = it.head
+ val v2 = it.headOption
+ val v3 = it.head
+ val v4 = it.headOption
+ assertEquals(v1, v3)
+ assertEquals(v2, v4)
+ assertEquals(Some(v1), v2)
}
}
diff --git a/test/junit/scala/collection/NewBuilderTest.scala b/test/junit/scala/collection/NewBuilderTest.scala
new file mode 100644
index 0000000000..fdc6af113d
--- /dev/null
+++ b/test/junit/scala/collection/NewBuilderTest.scala
@@ -0,0 +1,184 @@
+package scala.collection
+
+import scala.{collection => sc}
+import scala.collection.{mutable => scm, immutable => sci, parallel => scp, concurrent => scc}
+import scala.collection.parallel.{mutable => scpm, immutable => scpi}
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+import scala.reflect.ClassTag
+import org.junit.Assert._
+
+/* Tests various maps by making sure they all agree on the same answers. */
+@RunWith(classOf[JUnit4])
+class NewBuilderTest {
+
+ @Test
+ def mapPreservesCollectionType() {
+ def test[T: ClassTag](mapped: Any): Unit = {
+ val expected = reflect.classTag[T].runtimeClass
+ val isInstance = reflect.classTag[T].runtimeClass.isInstance(mapped)
+ assertTrue(s"$mapped (of class ${mapped.getClass} is not a in instance of ${expected}", isInstance)
+ }
+
+ test[sc.GenTraversable[_] ]((sc.GenTraversable(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.Traversable[_] ]((sc.Traversable(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.GenIterable[_] ]((sc.GenIterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.Iterable[_] ]((sc.Iterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.GenSeq[_] ]((sc.GenSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.Seq[_] ]((sc.Seq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.LinearSeq[_] ]((sc.LinearSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.LinearSeq[_] ]((sc.LinearSeq(1): sc.Seq[Int] ).map(x => x))
+ test[sc.IndexedSeq[_] ]((sc.IndexedSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.IndexedSeq[_] ]((sc.IndexedSeq(1): sc.Seq[Int] ).map(x => x))
+ test[sc.GenSet[_] ]((sc.GenSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.Set[_] ]((sc.Set(1): sc.GenTraversable[Int]).map(x => x))
+ test[sc.GenMap[_, _] ]((sc.GenMap(1 -> 1): sc.GenMap[Int, Int] ).map(x => x))
+ test[sc.Map[_, _] ]((sc.Map(1 -> 1): sc.GenMap[Int, Int] ).map(x => x))
+
+ test[scm.Traversable[_] ]((scm.Traversable(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.Iterable[_] ]((scm.Iterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.LinearSeq[_] ]((scm.LinearSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.LinearSeq[_] ]((scm.LinearSeq(1): sc.Seq[Int] ).map(x => x))
+ test[scm.MutableList[_] ]((scm.MutableList(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.MutableList[_] ]((scm.MutableList(1): sc.Seq[Int] ).map(x => x))
+ test[scm.Queue[_] ]((scm.Queue(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.Queue[_] ]((scm.Queue(1): sc.Seq[Int] ).map(x => x))
+ test[scm.DoubleLinkedList[_]]((scm.DoubleLinkedList(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.DoubleLinkedList[_]]((scm.DoubleLinkedList(1): sc.Seq[Int] ).map(x => x))
+ test[scm.LinkedList[_] ]((scm.LinkedList(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.LinkedList[_] ]((scm.LinkedList(1): sc.Seq[Int] ).map(x => x))
+ test[scm.ArrayStack[_] ]((scm.ArrayStack(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.ArrayStack[_] ]((scm.ArrayStack(1): sc.Seq[Int] ).map(x => x))
+ test[scm.Stack[_] ]((scm.Stack(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.Stack[_] ]((scm.Stack(1): sc.Seq[Int] ).map(x => x))
+ test[scm.ArraySeq[_] ]((scm.ArraySeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.ArraySeq[_] ]((scm.ArraySeq(1): sc.Seq[Int] ).map(x => x))
+
+ test[scm.Buffer[_] ]((scm.Buffer(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.Buffer[_] ]((scm.Buffer(1): sc.Seq[Int] ).map(x => x))
+ test[scm.IndexedSeq[_] ]((scm.IndexedSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.IndexedSeq[_] ]((scm.IndexedSeq(1): sc.Seq[Int] ).map(x => x))
+ test[scm.ArrayBuffer[_] ]((scm.ArrayBuffer(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.ArrayBuffer[_] ]((scm.ArrayBuffer(1): sc.Seq[Int] ).map(x => x))
+ test[scm.ListBuffer[_] ]((scm.ListBuffer(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.ListBuffer[_] ]((scm.ListBuffer(1): sc.Seq[Int] ).map(x => x))
+ test[scm.Seq[_] ]((scm.Seq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.Seq[_] ]((scm.Seq(1): sc.Seq[Int] ).map(x => x))
+ test[scm.ResizableArray[_] ]((scm.ResizableArray(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.ResizableArray[_] ]((scm.ResizableArray(1): sc.Seq[Int] ).map(x => x))
+ test[scm.Set[_] ]((scm.Set(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.Set[_] ]((scm.Set(1): sc.Set[Int] ).map(x => x))
+ test[scm.HashSet[_] ]((scm.HashSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.HashSet[_] ]((scm.HashSet(1): sc.Set[Int] ).map(x => x))
+ test[scm.LinkedHashSet[_] ]((scm.LinkedHashSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scm.LinkedHashSet[_] ]((scm.LinkedHashSet(1): sc.Set[Int] ).map(x => x))
+
+ test[sci.Traversable[_] ]((sci.Traversable(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Iterable[_] ]((sci.Iterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.LinearSeq[_] ]((sci.LinearSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.LinearSeq[_] ]((sci.LinearSeq(1): sc.Seq[Int] ).map(x => x))
+ test[sci.List[_] ]((sci.List(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.List[_] ]((sci.List(1): sc.Seq[Int] ).map(x => x))
+ test[sci.Stream[_] ]((sci.Stream(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Stream[_] ]((sci.Stream(1): sc.Seq[Int] ).map(x => x))
+ test[sci.Stack[_] ]((sci.Stack(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Stack[_] ]((sci.Stack(1): sc.Seq[Int] ).map(x => x))
+ test[sci.Queue[_] ]((sci.Queue(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Queue[_] ]((sci.Queue(1): sc.Seq[Int] ).map(x => x))
+ test[sci.IndexedSeq[_] ]((sci.IndexedSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.IndexedSeq[_] ]((sci.IndexedSeq(1): sc.Seq[Int] ).map(x => x))
+ test[sci.Vector[_] ]((sci.Vector(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Vector[_] ]((sci.Vector(1): sc.Seq[Int] ).map(x => x))
+ test[sci.Seq[_] ]((sci.Seq(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Seq[_] ]((sci.Seq(1): sc.Seq[Int] ).map(x => x))
+ test[sci.Set[_] ]((sci.Set(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.Set[_] ]((sci.Set(1): sc.Set[Int] ).map(x => x))
+ test[sci.ListSet[_] ]((sci.ListSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.ListSet[_] ]((sci.ListSet(1): sc.Set[Int] ).map(x => x))
+ test[sci.HashSet[_] ]((sci.HashSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[sci.HashSet[_] ]((sci.HashSet(1): sc.Set[Int] ).map(x => x))
+
+ test[scp.ParIterable[_] ]((scp.ParIterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[scp.ParSeq[_] ]((scp.ParSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scp.ParSeq[_] ]((scp.ParSeq(1): sc.GenSeq[Int] ).map(x => x))
+ test[scp.ParSet[_] ]((scp.ParSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scp.ParSet[_] ]((scp.ParSet(1): sc.GenSet[Int] ).map(x => x))
+
+ test[scpm.ParIterable[_] ]((scpm.ParIterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpm.ParSeq[_] ]((scpm.ParSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpm.ParSeq[_] ]((scpm.ParSeq(1): sc.GenSeq[Int] ).map(x => x))
+ test[scpm.ParArray[_] ]((scpm.ParArray(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpm.ParArray[_] ]((scpm.ParArray(1): sc.GenSeq[Int] ).map(x => x))
+ test[scpm.ParSet[_] ]((scpm.ParSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpm.ParSet[_] ]((scpm.ParSet(1): sc.GenSet[Int] ).map(x => x))
+ test[scpm.ParHashSet[_] ]((scpm.ParHashSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpm.ParHashSet[_] ]((scpm.ParHashSet(1): sc.GenSet[Int] ).map(x => x))
+
+ test[scpi.ParIterable[_] ]((scpi.ParIterable(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpi.ParSeq[_] ]((scpi.ParSeq(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpi.ParSeq[_] ]((scpi.ParSeq(1): sc.GenSeq[Int] ).map(x => x))
+ test[scpi.ParVector[_] ]((scpi.ParVector(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpi.ParVector[_] ]((scpi.ParVector(1): sc.GenSeq[Int] ).map(x => x))
+ test[scpi.ParSet[_] ]((scpi.ParSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpi.ParSet[_] ]((scpi.ParSet(1): sc.GenSet[Int] ).map(x => x))
+ test[scpi.ParHashSet[_] ]((scpi.ParHashSet(1): sc.GenTraversable[Int]).map(x => x))
+ test[scpi.ParHashSet[_] ]((scpi.ParHashSet(1): sc.GenSet[Int] ).map(x => x))
+
+ // These go through `GenMap.canBuildFrom`. There is no simple fix for Map like there is for Set.
+ // A Map does not provide access to its companion object at runtime. (The `companion` field
+ // points to an inherited `GenericCompanion`, not the actual companion object). Therefore, the
+ // `MapCanBuildFrom` has no way to get the correct builder for the source type at runtime.
+ //test[scm.Map[_, _] ]((scm.Map(1 -> 1): sc.GenMap[Int, Int]).map(x => x)
+ //test[scm.OpenHashMap[_, _] ]((scm.OpenHashMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scm.LongMap[_] ]((scm.LongMap(1L -> 1): sc.GenMap[Long, Int]).map(x => x))
+ //test[scm.ListMap[_, _] ]((scm.ListMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scm.LinkedHashMap[_, _]]((scm.LinkedHashMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scm.HashMap[_, _] ]((scm.HashMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sci.Map[_, _] ]((sci.Map(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sci.ListMap[_, _] ]((sci.ListMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sci.IntMap[_] ]((sci.IntMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sci.LongMap[_] ]((sci.LongMap(1L -> 1): sc.GenMap[Long, Int]).map(x => x))
+ //test[sci.HashMap[_, _] ]((sci.HashMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sci.SortedMap[_, _] ]((sci.SortedMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sci.TreeMap[_, _] ]((sci.TreeMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scc.TrieMap[_, _] ]((scc.TrieMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scp.ParMap[_, _] ]((scp.ParMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scpm.ParMap[_, _] ]((scpm.ParMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scpm.ParHashMap[_, _] ]((scpm.ParHashMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scpm.ParTrieMap[_, _] ]((scpm.ParTrieMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scpi.ParMap[_, _] ]((scpi.ParMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scpi.ParHashMap[_, _] ]((scpi.ParHashMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+
+ // These cannot be expected to work. The static type information is lost, and `map` does not capture
+ // a `ClassTag` of the result type, so there is no way for a `CanBuildFrom` to decide to build another
+ // `BitSet` instead of a generic `Set` implementation:
+ //test[scm.BitSet ]((scm.BitSet(1): sc.GenTraversable[Int]).map(x => x))
+ //test[scm.BitSet ]((scm.BitSet(1): sc.Set[Int]).map(x => x))
+
+ // These also require a `ClassTag`:
+ //test[scm.UnrolledBuffer[_]]((scm.UnrolledBuffer(1): sc.GenTraversable[Int]).map(x => x))
+ //test[scm.UnrolledBuffer[_]]((scm.UnrolledBuffer(1): sc.Seq[Int]).map(x => x))
+
+ // The situation is similar for sorted collection. They require an implicit `Ordering` which cannot
+ // be captured at runtime by a `CanBuildFrom` when the static type has been lost:
+ //test[sc.SortedMap[_, _] ]((sc.SortedMap(1 -> 1): sc.GenTraversable[(Int, Int)]).map(x => x))
+ //test[sc.SortedMap[_, _] ]((sc.SortedMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[sc.SortedSet[_] ]((sc.SortedSet(1): sc.GenTraversable[Int]).map(x => x))
+ //test[sc.SortedSet[_] ]((sc.SortedSet(1): sc.Set[Int]).map(x => x))
+ //test[scm.SortedSet[_] ]((scm.SortedSet(1): sc.GenTraversable[Int]).map(x => x))
+ //test[scm.SortedSet[_] ]((scm.SortedSet(1): sc.Set[Int]).map(x => x))
+ //test[scm.TreeSet[_] ]((scm.TreeSet(1): sc.GenTraversable[Int]).map(x => x))
+ //test[scm.TreeSet[_] ]((scm.TreeSet(1): sc.Set[Int]).map(x => x))
+ //test[scm.TreeMap[_, _] ]((scm.TreeMap(1 -> 1): sc.GenTraversable[(Int, Int)]).map(x => x))
+ //test[scm.TreeMap[_, _] ]((scm.TreeMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+ //test[scm.SortedMap[_, _] ]((scm.SortedMap(1 -> 1): sc.GenTraversable[(Int, Int)]).map(x => x))
+ //test[scm.SortedMap[_, _] ]((scm.SortedMap(1 -> 1): sc.GenMap[Int, Int]).map(x => x))
+
+ // Maps do not map to maps when seen as GenTraversable. This would require knowledge that `map`
+ // returns a `Tuple2`, which is not available dynamically:
+ //test[sc.GenMap[_, _] ]((sc.GenMap(1 -> 1): sc.GenTraversable[(Int, Int)]).map(x => x))
+ //test[sc.Map[_, _] ]((sc.Map(1 -> 1): sc.GenTraversable[(Int, Int)]).map(x => x))
+ }
+}
diff --git a/test/junit/scala/collection/ReusableBuildersTest.scala b/test/junit/scala/collection/ReusableBuildersTest.scala
new file mode 100644
index 0000000000..8dd1a37adf
--- /dev/null
+++ b/test/junit/scala/collection/ReusableBuildersTest.scala
@@ -0,0 +1,48 @@
+package scala.collection
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+
+/* Tests various maps by making sure they all agree on the same answers. */
+@RunWith(classOf[JUnit4])
+class ReusableBuildersTest {
+ // GrowingBuilders are NOT reusable but can clear themselves
+ @Test
+ def test_SI8648() {
+ val b = collection.mutable.HashSet.newBuilder[Int]
+ b += 3
+ b.clear
+ assert(!b.isInstanceOf[collection.mutable.ReusableBuilder[_,_]])
+ assert(b.isInstanceOf[collection.mutable.GrowingBuilder[_,_]])
+ assert(b.result == Set[Int]())
+ }
+
+ // ArrayBuilders ARE reusable, regardless of whether they returned their internal array or not
+ @Test
+ def test_SI9564() {
+ val b = Array.newBuilder[Float]
+ b += 3f
+ val three = b.result
+ b.clear
+ b ++= (1 to 16).map(_.toFloat)
+ val sixteen = b.result
+ b.clear
+ b += 0f
+ val zero = b.result
+ assert(b.isInstanceOf[collection.mutable.ReusableBuilder[_,_]])
+ assert(three.toList == 3 :: Nil)
+ assert(sixteen.toList == (1 to 16))
+ assert(zero.toList == 0 :: Nil)
+ }
+
+ @Test
+ def test_reusability() {
+ val bl = List.newBuilder[String]
+ val bv = Vector.newBuilder[String]
+ val ba = collection.mutable.ArrayBuffer.newBuilder[String]
+ assert(bl.isInstanceOf[collection.mutable.ReusableBuilder[_, _]])
+ assert(bv.isInstanceOf[collection.mutable.ReusableBuilder[_, _]])
+ assert(!ba.isInstanceOf[collection.mutable.ReusableBuilder[_, _]])
+ }
+}
diff --git a/test/junit/scala/collection/SeqLikeTest.scala b/test/junit/scala/collection/SeqLikeTest.scala
new file mode 100644
index 0000000000..2ab682299d
--- /dev/null
+++ b/test/junit/scala/collection/SeqLikeTest.scala
@@ -0,0 +1,19 @@
+package scala.collection
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Assert._
+import org.junit.Test
+
+@RunWith(classOf[JUnit4])
+class SeqLikeTest {
+
+ @Test def `SI-9936 indexWhere`(): Unit = {
+ assertEquals(2, "abcde".indexOf('c', -1))
+ assertEquals(2, "abcde".indexOf('c', -2))
+ assertEquals(2, "abcde".toVector.indexOf('c', -1))
+ assertEquals(2, "abcde".toVector.indexOf('c', -2))
+ assertEquals(2, "abcde".toVector.indexWhere(_ == 'c', -1))
+ assertEquals(2, "abcde".toVector.indexWhere(_ == 'c', -2))
+ }
+}
diff --git a/test/junit/scala/collection/SeqViewTest.scala b/test/junit/scala/collection/SeqViewTest.scala
new file mode 100644
index 0000000000..24474fc4b9
--- /dev/null
+++ b/test/junit/scala/collection/SeqViewTest.scala
@@ -0,0 +1,16 @@
+package scala.collection
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Assert._
+import org.junit.Test
+
+@RunWith(classOf[JUnit4])
+class SeqViewTest {
+
+ @Test
+ def test_SI8691() {
+ // Really just testing to make sure ++: doesn't throw an exception
+ assert( Seq(1,2) ++: Seq(3,4).view == Seq(1,2,3,4) )
+ }
+}
diff --git a/test/junit/scala/collection/SetMapConsistencyTest.scala b/test/junit/scala/collection/SetMapConsistencyTest.scala
index 261c11a98b..eb864a8449 100644
--- a/test/junit/scala/collection/SetMapConsistencyTest.scala
+++ b/test/junit/scala/collection/SetMapConsistencyTest.scala
@@ -66,6 +66,8 @@ class SetMapConsistencyTest {
def boxMhm[A] = new BoxMutableMap[A, cm.HashMap[A, Int]](new cm.HashMap[A, Int], "mutable.HashMap")
def boxMohm[A] = new BoxMutableMap[A, cm.OpenHashMap[A, Int]](new cm.OpenHashMap[A, Int], "mutable.OpenHashMap")
+
+ def boxMtm[A: Ordering] = new BoxMutableMap[A, cm.TreeMap[A, Int]](new cm.TreeMap[A, Int], "mutable.TreeMap")
def boxMarm[A <: AnyRef] = new BoxMutableMap[A, cm.AnyRefMap[A, Int]](new cm.AnyRefMap[A, Int](_ => -1), "mutable.AnyRefMap") {
private def arm: cm.AnyRefMap[A, Int] = m.asInstanceOf[cm.AnyRefMap[A, Int]]
@@ -188,7 +190,9 @@ class SetMapConsistencyTest {
def boxMbs = new BoxMutableSet[Int, cm.BitSet](new cm.BitSet, "mutable.BitSet")
def boxMhs[A] = new BoxMutableSet[A, cm.HashSet[A]](new cm.HashSet[A], "mutable.HashSet")
-
+
+ def boxMts[A: Ordering] = new BoxMutableSet[A, cm.TreeSet[A]](new cm.TreeSet[A], "mutable.TreeSet")
+
def boxJavaS[A] = new BoxMutableSet[A, cm.Set[A]]((new java.util.HashSet[A]).asScala, "java.util.HashSet") {
override def adders = 3
override def subbers = 1
@@ -315,7 +319,7 @@ class SetMapConsistencyTest {
@Test
def churnIntMaps() {
val maps = Array[() => MapBox[Int]](
- () => boxMlm[Int], () => boxMhm[Int], () => boxMohm[Int], () => boxJavaM[Int],
+ () => boxMlm[Int], () => boxMhm[Int], () => boxMohm[Int], () => boxMtm[Int], () => boxJavaM[Int],
() => boxIim, () => boxIhm[Int], () => boxIlm[Int], () => boxItm[Int]
)
assert( maps.sliding(2).forall{ ms => churn(ms(0)(), ms(1)(), intKeys, 2000) } )
@@ -325,7 +329,7 @@ class SetMapConsistencyTest {
def churnLongMaps() {
val maps = Array[() => MapBox[Long]](
() => boxMjm, () => boxIjm, () => boxJavaM[Long],
- () => boxMlm[Long], () => boxMhm[Long], () => boxMohm[Long], () => boxIhm[Long], () => boxIlm[Long]
+ () => boxMlm[Long], () => boxMhm[Long], () => boxMtm[Long], () => boxMohm[Long], () => boxIhm[Long], () => boxIlm[Long]
)
assert( maps.sliding(2).forall{ ms => churn(ms(0)(), ms(1)(), longKeys, 10000) } )
}
@@ -352,7 +356,7 @@ class SetMapConsistencyTest {
def churnIntSets() {
val sets = Array[() => MapBox[Int]](
() => boxMhm[Int], () => boxIhm[Int], () => boxJavaS[Int],
- () => boxMbs, () => boxMhs[Int], () => boxIbs, () => boxIhs[Int], () => boxIls[Int], () => boxIts[Int]
+ () => boxMbs, () => boxMhs[Int], () => boxMts[Int], () => boxIbs, () => boxIhs[Int], () => boxIls[Int], () => boxIts[Int]
)
assert( sets.sliding(2).forall{ ms => churn(ms(0)(), ms(1)(), smallKeys, 1000, valuer = _ => 0) } )
}
@@ -529,4 +533,15 @@ class SetMapConsistencyTest {
assert(nit == 4)
assert(nfe == 4)
}
+
+ @Test
+ def test_SI8727() {
+ import scala.tools.testing.AssertUtil._
+ type NSEE = NoSuchElementException
+ val map = Map(0 -> "zero", 1 -> "one")
+ val m = map.filterKeys(i => if (map contains i) true else throw new NSEE)
+ assert{ (m contains 0) && (m get 0).nonEmpty }
+ assertThrows[NSEE]{ m contains 2 }
+ assertThrows[NSEE]{ m get 2 }
+ }
}
diff --git a/test/junit/scala/collection/TraversableLikeTest.scala b/test/junit/scala/collection/TraversableLikeTest.scala
new file mode 100644
index 0000000000..8588956016
--- /dev/null
+++ b/test/junit/scala/collection/TraversableLikeTest.scala
@@ -0,0 +1,33 @@
+package scala.collection
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class TraversableLikeTest {
+ // For test_SI9019; out here because as of test writing, putting this in a method would crash compiler
+ class Baz[@specialized(Int) A]() extends IndexedSeq[A] {
+ def apply(i: Int) = ???
+ def length: Int = 0
+ }
+
+ @Test
+ def test_SI9019 {
+ object Foo {
+ def mkBar = () => {
+ class Bar extends IndexedSeq[Int] {
+ def apply(i: Int) = ???
+ def length: Int = 0
+ }
+ new Bar
+ }
+ }
+ val bar = Foo.mkBar()
+ assertEquals("Bar", bar.stringPrefix) // Previously would have been outermost class, TraversableLikeTest
+
+ val baz = new Baz[Int]()
+ assertEquals("TraversableLikeTest.Baz", baz.stringPrefix) // Make sure we don't see specialization $mcI$sp stuff
+ }
+}
diff --git a/test/junit/scala/collection/convert/NullSafetyToJavaTest.scala b/test/junit/scala/collection/convert/NullSafetyToJavaTest.scala
new file mode 100644
index 0000000000..da0513ed8a
--- /dev/null
+++ b/test/junit/scala/collection/convert/NullSafetyToJavaTest.scala
@@ -0,0 +1,138 @@
+package scala.collection.convert
+
+import java.util.{concurrent => juc}
+import java.{lang => jl, util => ju}
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.collection.JavaConverters._
+import scala.collection.convert.ImplicitConversions._
+import scala.collection.{concurrent, mutable}
+
+// SI-9113: tests to insure that wrappers return null instead of wrapping it as a collection
+
+@RunWith(classOf[JUnit4])
+class NullSafetyToJavaTest {
+ @Test def testIteratorWrapping(): Unit = {
+ val nullIterator: Iterator[AnyRef] = null
+ val jIterator: ju.Iterator[AnyRef] = nullIterator
+
+ assert(jIterator == null)
+ }
+
+ @Test def testEnumerationWrapping(): Unit = {
+ val nullEnumeration: Iterator[AnyRef] = null
+ val enumeration: ju.Iterator[AnyRef] = nullEnumeration
+
+ assert(enumeration == null)
+ }
+
+ @Test def testIterableWrapping(): Unit = {
+ val nullIterable: Iterable[AnyRef] = null
+ val iterable: jl.Iterable[AnyRef] = asJavaIterable(nullIterable)
+
+ assert(iterable == null)
+ }
+
+ @Test def testCollectionWrapping(): Unit = {
+ val nullCollection: Iterable[AnyRef] = null
+ val collection: ju.Collection[AnyRef] = nullCollection
+
+ assert(collection == null)
+ }
+
+ @Test def testBufferWrapping(): Unit = {
+ val nullList: mutable.Buffer[AnyRef] = null
+ val buffer: ju.List[AnyRef] = nullList
+
+ assert(buffer == null)
+ }
+
+ @Test def testSetWrapping(): Unit = {
+ val nullSet: mutable.Set[AnyRef] = null
+ val set: ju.Set[AnyRef] = nullSet
+
+ assert(set == null)
+ }
+
+ @Test def testMapWrapping(): Unit = {
+ val nullMap: mutable.Map[AnyRef, AnyRef] = null
+ val map: ju.Map[AnyRef, AnyRef] = nullMap
+
+ assert(map == null)
+ }
+
+ @Test def testConcurrentMapWrapping(): Unit = {
+ val nullConMap: concurrent.Map[AnyRef, AnyRef] = null
+ val conMap: juc.ConcurrentMap[AnyRef, AnyRef] = nullConMap
+
+ assert(conMap == null)
+ }
+
+ @Test def testDictionaryWrapping(): Unit = {
+ val nullDict: mutable.Map[AnyRef, AnyRef] = null
+ val dict: ju.Dictionary[AnyRef, AnyRef] = nullDict
+
+ assert(dict == null)
+ }
+
+ // Implicit conversion to ju.Properties is not available
+
+ @Test def testIteratorDecoration(): Unit = {
+ val nullIterator: Iterator[AnyRef] = null
+
+ assert(nullIterator.asJava == null)
+ }
+
+ @Test def testEnumerationDecoration(): Unit = {
+ val nullEnumeration: Iterator[AnyRef] = null
+
+ assert(nullEnumeration.asJavaEnumeration == null)
+ }
+
+ @Test def testIterableDecoration(): Unit = {
+ val nullIterable: Iterable[AnyRef] = null
+
+ assert(nullIterable.asJava == null)
+ }
+
+ @Test def testCollectionDecoration(): Unit = {
+ val nullCollection: Iterable[AnyRef] = null
+
+ assert(nullCollection.asJavaCollection == null)
+ }
+
+ @Test def testBufferDecoration(): Unit = {
+ val nullBuffer: mutable.Buffer[AnyRef] = null
+
+ assert(nullBuffer.asJava == null)
+ }
+
+ @Test def testSetDecoration(): Unit = {
+ val nullSet: Set[AnyRef] = null
+
+ assert(nullSet.asJava == null)
+ }
+
+ @Test def testMapDecoration(): Unit = {
+ val nullMap: mutable.Map[AnyRef, AnyRef] = null
+
+ assert(nullMap.asJava == null)
+ }
+
+ @Test def testConcurrentMapDecoration(): Unit = {
+ val nullConMap: concurrent.Map[AnyRef, AnyRef] = null
+
+ assert(nullConMap.asJava == null)
+ }
+
+ @Test def testDictionaryDecoration(): Unit = {
+ val nullDict: mutable.Map[AnyRef, AnyRef] = null
+
+ assert(nullDict.asJavaDictionary == null)
+ }
+
+ // Decorator conversion to ju.Properties is not available
+}
diff --git a/test/junit/scala/collection/convert/NullSafetyToScalaTest.scala b/test/junit/scala/collection/convert/NullSafetyToScalaTest.scala
new file mode 100644
index 0000000000..9b6d366faf
--- /dev/null
+++ b/test/junit/scala/collection/convert/NullSafetyToScalaTest.scala
@@ -0,0 +1,148 @@
+package scala.collection.convert
+
+import java.util.{concurrent => juc}
+import java.{lang => jl, util => ju}
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.collection.JavaConverters._
+import scala.collection.convert.ImplicitConversions._
+import scala.collection.{concurrent, mutable}
+
+// SI-9113: tests to insure that wrappers return null instead of wrapping it as a collection
+
+@RunWith(classOf[JUnit4])
+class NullSafetyToScalaTest {
+ @Test def testIteratorWrapping(): Unit = {
+ val nullJIterator: ju.Iterator[AnyRef] = null
+ val iterator: Iterator[AnyRef] = nullJIterator
+
+ assert(iterator == null)
+ }
+
+ @Test def testEnumerationWrapping(): Unit = {
+ val nullJEnumeration: ju.Enumeration[AnyRef] = null
+ val enumeration: Iterator[AnyRef] = nullJEnumeration
+
+ assert(enumeration == null)
+ }
+
+ @Test def testIterableWrapping(): Unit = {
+ val nullJIterable: jl.Iterable[AnyRef] = null
+ val iterable: Iterable[AnyRef] = nullJIterable
+
+ assert(iterable == null)
+ }
+
+ @Test def testCollectionWrapping(): Unit = {
+ val nullJCollection: ju.Collection[AnyRef] = null
+ val collection: Iterable[AnyRef] = nullJCollection
+
+ assert(collection == null)
+ }
+
+ @Test def testBufferWrapping(): Unit = {
+ val nullJList: ju.List[AnyRef] = null
+ val buffer: mutable.Buffer[AnyRef] = nullJList
+
+ assert(buffer == null)
+ }
+
+ @Test def testSetWrapping(): Unit = {
+ val nullJSet: ju.Set[AnyRef] = null
+ val set: mutable.Set[AnyRef] = nullJSet
+
+ assert(set == null)
+ }
+
+ @Test def testMapWrapping(): Unit = {
+ val nullJMap: ju.Map[AnyRef, AnyRef] = null
+ val map: mutable.Map[AnyRef, AnyRef] = nullJMap
+
+ assert(map == null)
+ }
+
+ @Test def testConcurrentMapWrapping(): Unit = {
+ val nullJConMap: juc.ConcurrentMap[AnyRef, AnyRef] = null
+ val conMap: concurrent.Map[AnyRef, AnyRef] = nullJConMap
+
+ assert(conMap == null)
+ }
+
+ @Test def testDictionaryWrapping(): Unit = {
+ val nullJDict: ju.Dictionary[AnyRef, AnyRef] = null
+ val dict: mutable.Map[AnyRef, AnyRef] = nullJDict
+
+ assert(dict == null)
+ }
+
+
+ @Test def testPropertyWrapping(): Unit = {
+ val nullJProps: ju.Properties = null
+ val props: mutable.Map[String, String] = nullJProps
+
+ assert(props == null)
+ }
+
+ @Test def testIteratorDecoration(): Unit = {
+ val nullJIterator: ju.Iterator[AnyRef] = null
+
+ assert(nullJIterator.asScala == null)
+ }
+
+ @Test def testEnumerationDecoration(): Unit = {
+ val nullJEnumeration: ju.Enumeration[AnyRef] = null
+
+ assert(nullJEnumeration.asScala == null)
+ }
+
+ @Test def testIterableDecoration(): Unit = {
+ val nullJIterable: jl.Iterable[AnyRef] = null
+
+ assert(nullJIterable.asScala == null)
+ }
+
+ @Test def testCollectionDecoration(): Unit = {
+ val nullJCollection: ju.Collection[AnyRef] = null
+
+ assert(nullJCollection.asScala == null)
+ }
+
+ @Test def testBufferDecoration(): Unit = {
+ val nullJBuffer: ju.List[AnyRef] = null
+
+ assert(nullJBuffer.asScala == null)
+ }
+
+ @Test def testSetDecoration(): Unit = {
+ val nullJSet: ju.Set[AnyRef] = null
+
+ assert(nullJSet.asScala == null)
+ }
+
+ @Test def testMapDecoration(): Unit = {
+ val nullJMap: ju.Map[AnyRef, AnyRef] = null
+
+ assert(nullJMap.asScala == null)
+ }
+
+ @Test def testConcurrentMapDecoration(): Unit = {
+ val nullJConMap: juc.ConcurrentMap[AnyRef, AnyRef] = null
+
+ assert(nullJConMap.asScala == null)
+ }
+
+ @Test def testDictionaryDecoration(): Unit = {
+ val nullJDict: ju.Dictionary[AnyRef, AnyRef] = null
+
+ assert(nullJDict.asScala == null)
+ }
+
+ @Test def testPropertiesDecoration(): Unit = {
+ val nullJProperties: ju.Properties = null
+
+ assert(nullJProperties.asScala == null)
+ }
+}
diff --git a/test/junit/scala/collection/convert/WrapperSerializationTest.scala b/test/junit/scala/collection/convert/WrapperSerializationTest.scala
new file mode 100644
index 0000000000..d398be806a
--- /dev/null
+++ b/test/junit/scala/collection/convert/WrapperSerializationTest.scala
@@ -0,0 +1,29 @@
+package scala.collection.convert
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class WrapperSerializationTest {
+ def ser(a: AnyRef) = {
+ val baos = new java.io.ByteArrayOutputStream
+ (new java.io.ObjectOutputStream(baos)).writeObject(a)
+ baos
+ }
+ def des(baos: java.io.ByteArrayOutputStream): AnyRef = {
+ val bais = new java.io.ByteArrayInputStream(baos.toByteArray)
+ (new java.io.ObjectInputStream(bais)).readObject()
+ }
+ def serdes(a: AnyRef): Boolean = a == des(ser(a))
+
+ @Test
+ def test_SI8911() {
+ import scala.collection.JavaConverters._
+ assert( serdes(scala.collection.mutable.ArrayBuffer(1,2).asJava) )
+ assert( serdes(Seq(1,2).asJava) )
+ assert( serdes(Set(1,2).asJava) )
+ assert( serdes(Map(1 -> "one", 2 -> "two").asJava) )
+ }
+}
diff --git a/test/junit/scala/collection/immutable/ListMapTest.scala b/test/junit/scala/collection/immutable/ListMapTest.scala
new file mode 100644
index 0000000000..320a976755
--- /dev/null
+++ b/test/junit/scala/collection/immutable/ListMapTest.scala
@@ -0,0 +1,48 @@
+package scala.collection.immutable
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class ListMapTest {
+
+ @Test
+ def t7445(): Unit = {
+ val m = ListMap(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4, 5 -> 5)
+ assertEquals(ListMap(2 -> 2, 3 -> 3, 4 -> 4, 5 -> 5), m.tail)
+ }
+
+ @Test
+ def hasCorrectBuilder(): Unit = {
+ val m = ListMap("a" -> "1", "b" -> "2", "c" -> "3", "b" -> "2.2", "d" -> "4")
+ assertEquals(List("a" -> "1", "c" -> "3", "b" -> "2.2", "d" -> "4"), m.toList)
+ }
+
+ @Test
+ def hasCorrectHeadTailLastInit(): Unit = {
+ val m = ListMap(1 -> 1, 2 -> 2, 3 -> 3)
+ assertEquals(1 -> 1, m.head)
+ assertEquals(ListMap(2 -> 2, 3 -> 3), m.tail)
+ assertEquals(3 -> 3, m.last)
+ assertEquals(ListMap(1 -> 1, 2 -> 2), m.init)
+ }
+
+ @Test
+ def hasCorrectAddRemove(): Unit = {
+ val m = ListMap(1 -> 1, 2 -> 2, 3 -> 3)
+ assertEquals(ListMap(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4), m + (4 -> 4))
+ assertEquals(ListMap(1 -> 1, 3 -> 3, 2 -> 4), m + (2 -> 4))
+ assertEquals(ListMap(1 -> 1, 2 -> 2, 3 -> 3), m + (2 -> 2))
+ assertEquals(ListMap(2 -> 2, 3 -> 3), m - 1)
+ assertEquals(ListMap(1 -> 1, 3 -> 3), m - 2)
+ assertEquals(ListMap(1 -> 1, 2 -> 2, 3 -> 3), m - 4)
+ }
+
+ @Test
+ def hasCorrectIterator(): Unit = {
+ val m = ListMap(1 -> 1, 2 -> 2, 3 -> 3, 5 -> 5, 4 -> 4)
+ assertEquals(List(1 -> 1, 2 -> 2, 3 -> 3, 5 -> 5, 4 -> 4), m.iterator.toList)
+ }
+}
diff --git a/test/junit/scala/collection/immutable/ListSetTest.scala b/test/junit/scala/collection/immutable/ListSetTest.scala
new file mode 100644
index 0000000000..395da88c75
--- /dev/null
+++ b/test/junit/scala/collection/immutable/ListSetTest.scala
@@ -0,0 +1,53 @@
+package scala.collection.immutable
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class ListSetTest {
+
+ @Test
+ def t7445(): Unit = {
+ val s = ListSet(1, 2, 3, 4, 5)
+ assertEquals(ListSet(2, 3, 4, 5), s.tail)
+ }
+
+ @Test
+ def hasCorrectBuilder(): Unit = {
+ val m = ListSet("a", "b", "c", "b", "d")
+ assertEquals(List("a", "b", "c", "d"), m.toList)
+ }
+
+ @Test
+ def hasTailRecursiveDelete(): Unit = {
+ val s = ListSet(1 to 50000: _*)
+ try s - 25000 catch { case e: StackOverflowError => fail("A stack overflow occurred") }
+ }
+
+ @Test
+ def hasCorrectHeadTailLastInit(): Unit = {
+ val m = ListSet(1, 2, 3)
+ assertEquals(1, m.head)
+ assertEquals(ListSet(2, 3), m.tail)
+ assertEquals(3, m.last)
+ assertEquals(ListSet(1, 2), m.init)
+ }
+
+ @Test
+ def hasCorrectAddRemove(): Unit = {
+ val m = ListSet(1, 2, 3)
+ assertEquals(ListSet(1, 2, 3, 4), m + 4)
+ assertEquals(ListSet(1, 2, 3), m + 2)
+ assertEquals(ListSet(2, 3), m - 1)
+ assertEquals(ListSet(1, 3), m - 2)
+ assertEquals(ListSet(1, 2, 3), m - 4)
+ }
+
+ @Test
+ def hasCorrectIterator(): Unit = {
+ val s = ListSet(1, 2, 3, 5, 4)
+ assertEquals(List(1, 2, 3, 5, 4), s.iterator.toList)
+ }
+}
diff --git a/test/junit/scala/collection/immutable/PagedSeqTest.scala b/test/junit/scala/collection/immutable/PagedSeqTest.scala
index 74f8825307..6c974db884 100644
--- a/test/junit/scala/collection/immutable/PagedSeqTest.scala
+++ b/test/junit/scala/collection/immutable/PagedSeqTest.scala
@@ -2,13 +2,14 @@ package scala.collection.immutable
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
+import org.junit.{Ignore, Test}
import org.junit.Assert._
@RunWith(classOf[JUnit4])
class PagedSeqTest {
// should not NPE, and should equal the given Seq
@Test
+ @Ignore("This tests a non-stack safe method in a deprecated class that requires ~1.5M stack, disabling")
def test_SI6615(): Unit = {
assertEquals(Seq('a'), PagedSeq.fromStrings(List.fill(5000)("a")).slice(4096, 4097))
}
diff --git a/test/junit/scala/collection/immutable/SetTests.scala b/test/junit/scala/collection/immutable/SetTest.scala
index 28c7864359..4029c98009 100644
--- a/test/junit/scala/collection/immutable/SetTests.scala
+++ b/test/junit/scala/collection/immutable/SetTest.scala
@@ -6,7 +6,7 @@ import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@RunWith(classOf[JUnit4])
-class SetTests {
+class SetTest {
@Test
def test_SI8346_toSet_soundness(): Unit = {
val any2stringadd = "Disabled string conversions so as not to get confused!"
diff --git a/test/junit/scala/collection/immutable/StreamTest.scala b/test/junit/scala/collection/immutable/StreamTest.scala
new file mode 100644
index 0000000000..7046525f37
--- /dev/null
+++ b/test/junit/scala/collection/immutable/StreamTest.scala
@@ -0,0 +1,120 @@
+package scala.collection.immutable
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+import org.junit.Assert._
+
+import scala.ref.WeakReference
+import scala.util.Try
+
+@RunWith(classOf[JUnit4])
+class StreamTest {
+
+ @Test
+ def t6727_and_t6440_and_8627(): Unit = {
+ assertTrue(Stream.continually(()).filter(_ => true).take(2) == Seq((), ()))
+ assertTrue(Stream.continually(()).filterNot(_ => false).take(2) == Seq((), ()))
+ assertTrue(Stream(1,2,3,4,5).filter(_ < 4) == Seq(1,2,3))
+ assertTrue(Stream(1,2,3,4,5).filterNot(_ > 4) == Seq(1,2,3,4))
+ assertTrue(Stream.from(1).filter(_ > 4).take(3) == Seq(5,6,7))
+ assertTrue(Stream.from(1).filterNot(_ <= 4).take(3) == Seq(5,6,7))
+ }
+
+ /** Test helper to verify that the given Stream operation allows
+ * GC of the head during processing of the tail.
+ */
+ def assertStreamOpAllowsGC(op: (=> Stream[Int], Int => Unit) => Any, f: Int => Unit): Unit = {
+ val msgSuccessGC = "GC success"
+ val msgFailureGC = "GC failure"
+
+ // A stream of 500 elements at most. We will test that the head can be collected
+ // while processing the tail. After each element we will GC and wait 10 ms, so a
+ // failure to collect will take roughly 5 seconds.
+ val ref = WeakReference( Stream.from(1).take(500) )
+
+ def gcAndThrowIfCollected(n: Int): Unit = {
+ System.gc() // try to GC
+ Thread.sleep(10) // give it 10 ms
+ if (ref.get.isEmpty) throw new RuntimeException(msgSuccessGC) // we're done if head collected
+ f(n)
+ }
+
+ val res = Try { op(ref(), gcAndThrowIfCollected) }.failed // success is indicated by an
+ val msg = res.map(_.getMessage).getOrElse(msgFailureGC) // exception with expected message
+ // failure is indicated by no
+ assertTrue(msg == msgSuccessGC) // exception, or one with different message
+ }
+
+ @Test
+ def foreach_allows_GC() {
+ assertStreamOpAllowsGC(_.foreach(_), _ => ())
+ }
+
+ @Test
+ def filter_all_foreach_allows_GC() {
+ assertStreamOpAllowsGC(_.filter(_ => true).foreach(_), _ => ())
+ }
+
+ @Test // SI-8990
+ def withFilter_after_first_foreach_allows_GC: Unit = {
+ assertStreamOpAllowsGC(_.withFilter(_ > 1).foreach(_), _ => ())
+ }
+
+ @Test // SI-8990
+ def withFilter_after_first_withFilter_foreach_allows_GC: Unit = {
+ assertStreamOpAllowsGC(_.withFilter(_ > 1).withFilter(_ < 100).foreach(_), _ => ())
+ }
+
+ @Test // SI-8990
+ def withFilter_can_retry_after_exception_thrown_in_filter: Unit = {
+ // use mutable state to control an intermittent failure in filtering the Stream
+ var shouldThrow = true
+
+ val wf = Stream.from(1).take(10).withFilter { n =>
+ if (shouldThrow && n == 5) throw new RuntimeException("n == 5") else n > 5
+ }
+
+ assertTrue( Try { wf.map(identity) }.isFailure ) // throws on n == 5
+
+ shouldThrow = false // won't throw next time
+
+ assertTrue( wf.map(identity).length == 5 ) // success instead of NPE
+ }
+
+ /** Test helper to verify that the given Stream operation is properly lazy in the tail */
+ def assertStreamOpLazyInTail(op: (=> Stream[Int]) => Stream[Int], expectedEvaluated: List[Int]): Unit = {
+ // mutable state to record every strict evaluation
+ var evaluated: List[Int] = Nil
+
+ def trackEffectsOnNaturals: Stream[Int] = {
+ def loop(i: Int): Stream[Int] = { evaluated ++= List(i); i #:: loop(i + 1) }
+ loop(1)
+ }
+
+ // call op on a stream which records every strict evaluation
+ val result = op(trackEffectsOnNaturals)
+
+ assertTrue( evaluated == expectedEvaluated )
+ }
+
+ @Test // SI-9134
+ def filter_map_properly_lazy_in_tail: Unit = {
+ assertStreamOpLazyInTail(_.filter(_ % 2 == 0).map(identity), List(1, 2))
+ }
+
+ @Test // SI-9134
+ def withFilter_map_properly_lazy_in_tail: Unit = {
+ assertStreamOpLazyInTail(_.withFilter(_ % 2 == 0).map(identity), List(1, 2))
+ }
+
+ @Test // SI-6881
+ def test_reference_equality: Unit = {
+ // Make sure we're tested with reference equality
+ val s = Stream.from(0)
+ assert(s == s, "Referentially identical streams should be equal (==)")
+ assert(s equals s, "Referentially identical streams should be equal (equals)")
+ assert((0 #:: 1 #:: s) == (0 #:: 1 #:: s), "Cons of referentially identical streams should be equal (==)")
+ assert((0 #:: 1 #:: s) equals (0 #:: 1 #:: s), "Cons of referentially identical streams should be equal (equals)")
+ }
+}
diff --git a/test/junit/scala/collection/immutable/StringLikeTest.scala b/test/junit/scala/collection/immutable/StringLikeTest.scala
index 3722bdfe4d..44bade860e 100644
--- a/test/junit/scala/collection/immutable/StringLikeTest.scala
+++ b/test/junit/scala/collection/immutable/StringLikeTest.scala
@@ -1,5 +1,6 @@
package scala.collection.immutable
+import org.junit.Assert._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@@ -28,10 +29,46 @@ class StringLikeTest {
@Test
def testSplitEdgeCases: Unit = {
+ val high = 0xD852.toChar
+ val low = 0xDF62.toChar
+ val surrogatepair = List(high, low).mkString
+ val twopairs = surrogatepair + "_" + surrogatepair
+
AssertUtil.assertSameElements("abcd".split('d'), Array("abc")) // not Array("abc", "")
AssertUtil.assertSameElements("abccc".split('c'), Array("ab")) // not Array("ab", "", "", "")
AssertUtil.assertSameElements("xxx".split('x'), Array[String]()) // not Array("", "", "", "")
AssertUtil.assertSameElements("".split('x'), Array("")) // not Array()
AssertUtil.assertSameElements("--ch--omp--".split("-"), Array("", "", "ch", "", "omp")) // All the cases!
+ AssertUtil.assertSameElements(twopairs.split(high), Array(twopairs)) //don't split on characters that are half a surrogate pair
+ }
+
+ /* Test for SI-9767 */
+ @Test
+ def testNumericConversion: Unit = {
+ val sOne = " \t\n 1 \n\r\t "
+ val sOk = "2"
+ val sNull:String = null
+
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sOne.toInt)
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sOne.toLong)
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sOne.toShort)
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sOne.toByte)
+ assertTrue("trim toDouble", sOne.toDouble == 1.0d)
+ assertTrue("trim toFloat", sOne.toFloat == 1.0f)
+
+ assertTrue("no trim toInt", sOk.toInt == 2)
+ assertTrue("no trim toLong", sOk.toLong == 2L)
+ assertTrue("no trim toShort", sOk.toShort == 2.toShort)
+ assertTrue("no trim toByte", sOk.toByte == 2.toByte)
+ assertTrue("no trim toDouble", sOk.toDouble == 2.0d)
+ assertTrue("no trim toFloat", sOk.toFloat == 2.0f)
+
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sNull.toInt, {s => s == "null"})
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sNull.toLong, {s => s == "null"})
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sNull.toShort, {s => s == "null"})
+ AssertUtil.assertThrows[java.lang.NumberFormatException](sNull.toByte, {s => s == "null"})
+
+ AssertUtil.assertThrows[java.lang.NullPointerException](sNull.toDouble)
+ AssertUtil.assertThrows[java.lang.NullPointerException](sNull.toFloat)
}
}
diff --git a/test/junit/scala/collection/mutable/BitSetTest.scala b/test/junit/scala/collection/mutable/BitSetTest.scala
index d56cc45601..84b906e8d5 100644
--- a/test/junit/scala/collection/mutable/BitSetTest.scala
+++ b/test/junit/scala/collection/mutable/BitSetTest.scala
@@ -1,8 +1,8 @@
package scala.collection.mutable
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.{Test, Ignore}
@RunWith(classOf[JUnit4])
class BitSetTest {
@@ -28,4 +28,11 @@ class BitSetTest {
littleBitSet &= bigBitSet
assert(littleBitSet.toBitMask.length < bigBitSet.toBitMask.length, "Needlessly extended the size of bitset on &=")
}
+
+ @Test def test_SI8647() {
+ val bs = BitSet()
+ bs.map(_ + 1) // Just needs to compile
+ val xs = bs: SortedSet[Int]
+ xs.map(_ + 1) // Also should compile (did before)
+ }
}
diff --git a/test/junit/scala/collection/mutable/OpenHashMapTest.scala b/test/junit/scala/collection/mutable/OpenHashMapTest.scala
index 1459c14d78..e9f2a52bf6 100644
--- a/test/junit/scala/collection/mutable/OpenHashMapTest.scala
+++ b/test/junit/scala/collection/mutable/OpenHashMapTest.scala
@@ -1,9 +1,10 @@
package scala.collection.mutable
-import org.junit.Test
import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import org.openjdk.jol.info.{GraphPathRecord, GraphVisitor, GraphWalker}
/** Tests for [[OpenHashMap]]. */
@RunWith(classOf[JUnit4])
@@ -28,7 +29,13 @@ class OpenHashMapTest {
val fieldMirror = mirror.reflect(m).reflectField(termSym)
*/
// Use Java reflection instead for now.
- val field = m.getClass.getDeclaredField("scala$collection$mutable$OpenHashMap$$deleted")
+ val field =
+ try { // Name may or not be mangled, depending on what the compiler authors are doing.
+ m.getClass.getDeclaredField("scala$collection$mutable$OpenHashMap$$deleted")
+ } catch {
+ case _: NoSuchFieldException =>
+ m.getClass.getDeclaredField("deleted")
+ }
field.setAccessible(true)
m.put(0, 0)
@@ -39,4 +46,50 @@ class OpenHashMapTest {
// TODO assertEquals(0, fieldMirror.get.asInstanceOf[Int])
assertEquals(0, field.getInt(m))
}
+
+ /** Test that an [[OpenHashMap]] frees references to a deleted key (SI-9522). */
+ @Test
+ def freesDeletedKey {
+ import scala.language.reflectiveCalls
+
+ class MyClass {
+ override def hashCode() = 42
+ }
+
+ val counter = new GraphVisitor() {
+ private[this] var instanceCount: Int = _
+
+ def countInstances(obj: AnyRef) = {
+ instanceCount = 0
+ val walker = new GraphWalker(obj)
+ walker.addVisitor(this)
+ walker.walk
+ instanceCount
+ }
+
+ override def visit(record: GraphPathRecord) {
+ if (record.klass() == classOf[MyClass]) instanceCount += 1
+ }
+ }
+
+ val m = OpenHashMap.empty[MyClass, Int]
+ val obj = new MyClass
+ assertEquals("Found a key instance in the map before adding one!?", 0, counter.countInstances(m))
+ m.put(obj, 0)
+ assertEquals("There should be only one key instance in the map.", 1, counter.countInstances(m))
+ m.put(obj, 1)
+ assertEquals("There should still be only one key instance in the map.", 1, counter.countInstances(m))
+ m.remove(obj)
+ assertEquals("There should be no key instance in the map.", 0, counter.countInstances(m))
+
+ val obj2 = new MyClass
+ assertEquals("The hash codes of the test objects need to match.", obj.##, obj2.##)
+ m.put(obj, 0)
+ m.put(obj2, 0)
+ assertEquals("There should be two key instances in the map.", 2, counter.countInstances(m))
+ m.remove(obj)
+ assertEquals("There should be one key instance in the map.", 1, counter.countInstances(m))
+ m.remove(obj2)
+ assertEquals("There should be no key instance in the map.", 0, counter.countInstances(m))
+ }
}
diff --git a/test/junit/scala/collection/mutable/PriorityQueueTest.scala b/test/junit/scala/collection/mutable/PriorityQueueTest.scala
index a14f1bf4c8..faedcf11f0 100644
--- a/test/junit/scala/collection/mutable/PriorityQueueTest.scala
+++ b/test/junit/scala/collection/mutable/PriorityQueueTest.scala
@@ -14,6 +14,12 @@ class PriorityQueueTest {
priorityQueue.enqueue(elements :_*)
@Test
+ def orderingReverseReverse() {
+ val pq = new mutable.PriorityQueue[Nothing]()((_,_)=>42)
+ assert(pq.ord eq pq.reverse.reverse.ord)
+ }
+
+ @Test
def canSerialize() {
val outputStream = new ByteArrayOutputStream()
new ObjectOutputStream(outputStream).writeObject(priorityQueue)
@@ -27,6 +33,7 @@ class PriorityQueueTest {
val objectInputStream = new ObjectInputStream(new ByteArrayInputStream(bytes))
val deserializedPriorityQueue = objectInputStream.readObject().asInstanceOf[PriorityQueue[Int]]
+ //correct sequencing is also tested here:
assert(deserializedPriorityQueue.dequeueAll == elements.sorted.reverse)
}
}
diff --git a/test/junit/scala/io/SourceTest.scala b/test/junit/scala/io/SourceTest.scala
index 3138a4589c..3fe48940a0 100644
--- a/test/junit/scala/io/SourceTest.scala
+++ b/test/junit/scala/io/SourceTest.scala
@@ -28,6 +28,10 @@ class SourceTest {
@Test def canIterateLines() = {
assertEquals(sampler.lines.size, (Source fromString sampler).getLines.size)
}
+ @Test def loadFromResource() = {
+ val res = Source.fromResource("rootdoc.txt")
+ assertTrue("No classpath resource found", res.getLines().size > 5)
+ }
@Test def canCustomizeReporting() = {
class CapitalReporting(is: InputStream) extends BufferedSource(is) {
override def report(pos: Int, msg: String, out: PrintStream): Unit = {
diff --git a/test/junit/scala/issues/BytecodeTests.scala b/test/junit/scala/lang/annotations/BytecodeTest.scala
index d4ed063a03..09fc1d3572 100644
--- a/test/junit/scala/issues/BytecodeTests.scala
+++ b/test/junit/scala/lang/annotations/BytecodeTest.scala
@@ -1,18 +1,19 @@
-package scala.issues
+package scala.lang.annotations
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes
-import scala.tools.nsc.backend.jvm.AsmUtils
-import scala.tools.nsc.backend.jvm.CodeGenTools._
-import org.junit.Assert._
+
import scala.collection.JavaConverters._
+import scala.tools.nsc.backend.jvm.AsmUtils
import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class BytecodeTests {
- val compiler = newCompiler()
+class BytecodeTest extends BytecodeTesting {
+ import compiler._
@Test
def t8731(): Unit = {
@@ -32,10 +33,10 @@ class BytecodeTests {
|}
""".stripMargin
- val List(c) = compileClasses(compiler)(code)
+ val c = compileClass(code)
- assertTrue(getSingleMethod(c, "f").instructions.count(_.isInstanceOf[TableSwitch]) == 1)
- assertTrue(getSingleMethod(c, "g").instructions.count(_.isInstanceOf[LookupSwitch]) == 1)
+ assertTrue(getInstructions(c, "f").count(_.isInstanceOf[TableSwitch]) == 1)
+ assertTrue(getInstructions(c, "g").count(_.isInstanceOf[LookupSwitch]) == 1)
}
@Test
@@ -59,10 +60,9 @@ class BytecodeTests {
|@AnnotB class B
""".stripMargin
- val compiler = newCompiler()
- val run = new compiler.Run()
+ val run = new global.Run()
run.compileSources(List(new BatchSourceFile("AnnotA.java", annotA), new BatchSourceFile("AnnotB.java", annotB), new BatchSourceFile("Test.scala", scalaSrc)))
- val outDir = compiler.settings.outputDirs.getSingleOutput.get
+ val outDir = global.settings.outputDirs.getSingleOutput.get
val outfiles = (for (f <- outDir.iterator if !f.isDirectory) yield (f.name, f.toByteArray)).toList
def check(classfile: String, annotName: String) = {
@@ -77,4 +77,4 @@ class BytecodeTests {
// a @Retention annotation are currently emitted as RUNTIME.
check("B.class", "AnnotB")
}
-}
+} \ No newline at end of file
diff --git a/test/junit/scala/lang/annotations/RunTest.scala b/test/junit/scala/lang/annotations/RunTest.scala
new file mode 100644
index 0000000000..0d9c0c4713
--- /dev/null
+++ b/test/junit/scala/lang/annotations/RunTest.scala
@@ -0,0 +1,32 @@
+package scala.lang.annotations
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.testing.RunTesting
+
+@RunWith(classOf[JUnit4])
+class RunTest extends RunTesting {
+ import runner._
+
+ @Test
+ def annotationInfoNotErased(): Unit = {
+ val code =
+ """import javax.annotation.Resource
+ |import scala.annotation.meta.getter
+ |class C {
+ | type Rg = Resource @getter
+ | @(Resource @getter)(`type` = classOf[Int]) def a = 0
+ | @Rg(`type` = classOf[Int]) def b = 0
+ |}
+ |val c = classOf[C]
+ |def typeArg(meth: String) = c.getDeclaredMethod(meth).getDeclaredAnnotation(classOf[Resource]).`type`
+ |List("a", "b") map typeArg
+ |""".stripMargin
+
+ val i = Integer.TYPE
+ assertEquals(run[List[Class[_]]](code), List(i, i))
+ }
+}
diff --git a/test/junit/scala/lang/primitives/BoxUnboxTest.scala b/test/junit/scala/lang/primitives/BoxUnboxTest.scala
new file mode 100644
index 0000000000..e4911f1af5
--- /dev/null
+++ b/test/junit/scala/lang/primitives/BoxUnboxTest.scala
@@ -0,0 +1,249 @@
+package scala.lang.primitives
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.testing.RunTesting
+
+object BoxUnboxTest {
+ class VCI(val x: Int) extends AnyVal { override def toString = "" + x }
+}
+
+@RunWith(classOf[JUnit4])
+class BoxUnboxTest extends RunTesting {
+ import runner._
+
+ @Test
+ def boxUnboxInt(): Unit = {
+ // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
+ // Some fixes not yet available in M4 make the test fail when compiled with M4.
+ val code =
+ """import scala.tools.testing.AssertUtil._
+ |import org.junit.Assert._
+ |
+ |def genericNull[T] = null.asInstanceOf[T] // allowed, see SI-4437, point 2
+ |
+ |val b = new Integer(1)
+ |val u = 1
+ |
+ |assertEquals(1.toInt, u)
+ |
+ |assertEquals(Predef.int2Integer(1), b)
+ |assertEquals(1: Integer, b)
+ |assertEquals(Int.box(1), b)
+ |assertEquals(1.asInstanceOf[Object], b)
+ |
+ |assertThrows[ClassCastException]("".asInstanceOf[Integer])
+ |
+ |assertEquals(Predef.Integer2int(b), u)
+ |assertEquals(b: Int, u)
+ |assertEquals(Int.unbox(b), u)
+ |assertEquals(b.asInstanceOf[Int], u)
+ |assertEquals(b.intValue, u)
+ |assertEquals(b.toInt, u)
+ |intWrapper(b).toInt
+ |
+ |assertThrows[ClassCastException](Int.unbox(""))
+ |assertThrows[ClassCastException]("".asInstanceOf[Int])
+ |
+ |// null unboxing in various positions
+ |
+ |val n1 = Int.unbox(null)
+ |assertEquals(n1, 0)
+ |val n2 = Predef.Integer2int(null)
+ |assertEquals(n2, 0)
+ |val n3 = (null: Integer): Int
+ |assertEquals(n3, 0)
+ |val n4 = null.asInstanceOf[Int]
+ |assertEquals(n4, 0)
+ |val n5 = null.asInstanceOf[Int] == 0
+ |assertTrue(n5)
+ |val n6 = null.asInstanceOf[Int] == null
+ |assertFalse(n6)
+ |val n7 = null.asInstanceOf[Int] != 0
+ |assertFalse(n7)
+ |val n8 = null.asInstanceOf[Int] != null
+ |assertTrue(n8)
+ |
+ |val mp = new java.util.HashMap[Int, Int]
+ |val n9 = mp.get(0)
+ |assertEquals(n9, 0)
+ |val n10 = mp.get(0) == null // SI-602
+ |assertThrows[AssertionError](assertFalse(n10)) // should not throw
+ |
+ |def f(a: Any) = "" + a
+ |val n11 = f(null.asInstanceOf[Int])
+ |assertEquals(n11, "0")
+ |
+ |def n12 = genericNull[Int]
+ |assertEquals(n12, 0)
+ """.stripMargin
+
+ run[Unit](code)
+ }
+
+ @Test
+ def numericConversions(): Unit = {
+ // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
+ val code =
+ """import scala.tools.testing.AssertUtil._
+ |import org.junit.Assert._
+ |
+ |val i1 = 1L.asInstanceOf[Int]
+ |assertEquals(i1, 1)
+ |assertThrows[ClassCastException] {
+ | val i2 = (1L: Any).asInstanceOf[Int] // SI-1448, should not throw. see also SI-4437 point 1.
+ | assertEquals(i2, 1)
+ |}
+ """.stripMargin
+ run[Unit](code)
+ }
+
+ @Test
+ def boxUnboxBoolean(): Unit = {
+ // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
+ val code =
+ """val n1 = Option(null.asInstanceOf[Boolean])
+ |n1
+ """.stripMargin
+ assertEquals(run[Option[Boolean]](code), Some(false))
+ }
+
+ @Test
+ def boxUnboxUnit(): Unit = {
+ // should not use assertEquals in this test: it takes two Object parameters. normally, Unit does
+ // not conform to Object, but for Java-defined methods scalac makes an exception and treats them
+ // as Any. passing a Unit as Any makes the compiler go through another layer of boxing, so it
+ // can hide some bugs (where we actually have a null, but the compiler makes it a ()).
+
+ // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
+ val code =
+ """import scala.tools.testing.AssertUtil._
+ |import org.junit.Assert._
+ |
+ |var v = 0
+ |def eff() = { v = 1 }
+ |def chk() = { assert(v == 1); v = 0 }
+ |
+ |val b = runtime.BoxedUnit.UNIT
+ |
+ |assert(eff() == b); chk()
+ |assert(Unit.box(eff()) == b); chk()
+ |assert(().asInstanceOf[Object] == b)
+ |
+ |Unit.unbox({eff(); b}); chk()
+ |Unit.unbox({eff(); null}); chk()
+ |assertThrows[ClassCastException](Unit.unbox({eff(); ""})); chk()
+ |
+ |val n1 = null.asInstanceOf[Unit]
+ |assert(n1 == b)
+ |
+ |val n2 = null.asInstanceOf[Unit] == b
+ |assert(n2)
+ |
+ |def f(a: Any) = "" + a
+ |val n3 = f(null.asInstanceOf[Unit])
+ |assertEquals(n3, "()")
+ """.stripMargin
+ run[Unit](code)
+ }
+
+ @Test
+ def t9671(): Unit = {
+ // Once we use 2.12.0-M5 as starr, this code can be run directly in the JUnit test.
+ val code =
+ """import scala.lang.primitives.BoxUnboxTest.VCI
+ |
+ |def f1(a: Any) = "" + a
+ |def f2(a: AnyVal) = "" + a
+ |def f3[T](a: T) = "" + a
+ |def f4(a: Int) = "" + a
+ |def f5(a: VCI) = "" + a
+ |def f6(u: Unit) = "" + u
+ |
+ |def n1: AnyRef = null
+ |def n2: Null = null
+ |def n3: Any = null
+ |def n4[T]: T = null.asInstanceOf[T]
+ |
+ |def npe(s: => String) = try { s; throw new Error() } catch { case _: NullPointerException => "npe" }
+ |
+ | f1(null.asInstanceOf[Int]) +
+ | f1( n1.asInstanceOf[Int]) +
+ | f1( n2.asInstanceOf[Int]) +
+ | f1( n3.asInstanceOf[Int]) +
+ | f1( n4[Int]) + // "null"
+ |"-" +
+ | f1(null.asInstanceOf[VCI]) +
+ |npe(f1( n1.asInstanceOf[VCI])) + // SI-8097
+ | f1( n2.asInstanceOf[VCI]) +
+ |npe(f1( n3.asInstanceOf[VCI])) + // SI-8097
+ | f1( n4[VCI]) + // "null"
+ |"-" +
+ | f1(null.asInstanceOf[Unit]) +
+ | f1( n1.asInstanceOf[Unit]) +
+ | f1( n2.asInstanceOf[Unit]) +
+ | f1( n3.asInstanceOf[Unit]) +
+ | f1( n4[Unit]) + // "null"
+ |"-" +
+ | f2(null.asInstanceOf[Int]) +
+ | f2( n1.asInstanceOf[Int]) +
+ | f2( n2.asInstanceOf[Int]) +
+ | f2( n3.asInstanceOf[Int]) +
+ | f2( n4[Int]) + // "null"
+ |"-" +
+ | f2(null.asInstanceOf[VCI]) +
+ |npe(f2( n1.asInstanceOf[VCI])) + // SI-8097
+ | f2( n2.asInstanceOf[VCI]) +
+ |npe(f2( n3.asInstanceOf[VCI])) + // SI-8097
+ | f2( n4[VCI]) + // "null"
+ |"-" +
+ | f2(null.asInstanceOf[Unit]) +
+ | f2( n1.asInstanceOf[Unit]) +
+ | f2( n2.asInstanceOf[Unit]) +
+ | f2( n3.asInstanceOf[Unit]) +
+ | f2( n4[Unit]) + // "null"
+ |"-" +
+ | f3(null.asInstanceOf[Int]) +
+ | f3( n1.asInstanceOf[Int]) +
+ | f3( n2.asInstanceOf[Int]) +
+ | f3( n3.asInstanceOf[Int]) +
+ | f3( n4[Int]) + // "null"
+ |"-" +
+ | f3(null.asInstanceOf[VCI]) +
+ |npe(f3( n1.asInstanceOf[VCI])) + // SI-8097
+ | f3( n2.asInstanceOf[VCI]) +
+ |npe(f3( n3.asInstanceOf[VCI])) + // SI-8097
+ | f3( n4[VCI]) + // "null"
+ |"-" +
+ | f3(null.asInstanceOf[Unit]) +
+ | f3( n1.asInstanceOf[Unit]) +
+ | f3( n2.asInstanceOf[Unit]) +
+ | f3( n3.asInstanceOf[Unit]) +
+ | f3( n4[Unit]) + // "null"
+ |"-" +
+ | f4(null.asInstanceOf[Int]) +
+ | f4( n1.asInstanceOf[Int]) +
+ | f4( n2.asInstanceOf[Int]) +
+ | f4( n3.asInstanceOf[Int]) +
+ | f4( n4[Int]) +
+ |"-" +
+ | f5(null.asInstanceOf[VCI]) +
+ |npe(f5( n1.asInstanceOf[VCI])) + // SI-8097
+ | f5( n2.asInstanceOf[VCI]) +
+ |npe(f5( n3.asInstanceOf[VCI])) + // SI-8097
+ |npe(f5( n4[VCI])) + // SI-8097
+ |"-" +
+ | f6(null.asInstanceOf[Unit]) +
+ | f6( n1.asInstanceOf[Unit]) +
+ | f6( n2.asInstanceOf[Unit]) +
+ | f6( n3.asInstanceOf[Unit]) +
+ | f6( n4[Unit]) // "null"
+ """.stripMargin
+
+ assertEquals(run[String](code),
+ "0000null-0npe0npenull-()()()()null-0000null-0npe0npenull-()()()()null-0000null-0npe0npenull-()()()()null-00000-0npe0npenpe-()()()()null")
+ }
+}
diff --git a/test/junit/scala/lang/primitives/NaNTest.scala b/test/junit/scala/lang/primitives/NaNTest.scala
new file mode 100644
index 0000000000..f4c4258395
--- /dev/null
+++ b/test/junit/scala/lang/primitives/NaNTest.scala
@@ -0,0 +1,38 @@
+package scala.lang.primitives
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.testing.RunTesting
+
+@RunWith(classOf[JUnit4])
+class NaNTest extends RunTesting {
+
+ @Test
+ def compNaNFalse(): Unit = {
+ def code(tp: String) =
+ s"""val n = $tp.NaN
+ |def ne(x: $tp, y: $tp) = x != y
+ |val fs: List[($tp, $tp) => Boolean] = List(_ < _, _ <= _, _ > _, _ >= _, _ == _, (x, y) => !ne(x, y))
+ |val vs = List[$tp](n, 1, -1, 0)
+ |for (f <- fs; v <- vs; (x, y) <- List((n, v), (v, n))) yield f(x, y)
+ """.stripMargin
+
+ runner.run[List[Boolean]](code("Double")).foreach(assertFalse)
+ runner.run[List[Boolean]](code("Float")).foreach(assertFalse)
+ }
+
+ @Test
+ def genericEqNe(): Unit = {
+ def code(tp: String) =
+ s"""def a[T](x: T, y: T) = x == y
+ |def b[T](x: T, y: T) = x != y
+ |val n = $tp.NaN
+ |a(n, n) :: a(n, 0) :: a (0, n) :: !b(n, n) :: !b(n, 0) :: !b(0, n) :: Nil
+ """.stripMargin
+ runner.run[List[Boolean]](code("Double")).foreach(assertFalse)
+ runner.run[List[Boolean]](code("Float")).foreach(assertFalse)
+ }
+}
diff --git a/test/junit/scala/lang/primitives/PredefAutoboxingTest.scala b/test/junit/scala/lang/primitives/PredefAutoboxingTest.scala
new file mode 100644
index 0000000000..ab31a9e8f1
--- /dev/null
+++ b/test/junit/scala/lang/primitives/PredefAutoboxingTest.scala
@@ -0,0 +1,33 @@
+package scala.lang.primitives
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class PredefAutoboxingTest {
+ @Test def unboxNullByte() =
+ assertEquals(Predef.Byte2byte(null), 0.toByte)
+
+ @Test def unboxNullShort() =
+ assertEquals(Predef.Short2short(null), 0.toShort)
+
+ @Test def unboxNullCharacter() =
+ assertEquals(Predef.Character2char(null), 0.toChar)
+
+ @Test def unboxNullInteger() =
+ assertEquals(Predef.Integer2int(null), 0)
+
+ @Test def unboxNullLong() =
+ assertEquals(Predef.Long2long(null), 0L)
+
+ @Test def unboxNullFloat() =
+ assertEquals(Predef.Float2float(null), 0F, 0F)
+
+ @Test def unboxNullDouble() =
+ assertEquals(Predef.Double2double(null), 0D, 0D)
+
+ @Test def unboxNullBoolean() =
+ assertEquals(Predef.Boolean2boolean(null), false)
+}
diff --git a/test/junit/scala/lang/stringinterpol/StringContextTest.scala b/test/junit/scala/lang/stringinterpol/StringContextTest.scala
new file mode 100644
index 0000000000..d2cb8149d7
--- /dev/null
+++ b/test/junit/scala/lang/stringinterpol/StringContextTest.scala
@@ -0,0 +1,265 @@
+
+package scala.lang.stringinterpol
+
+import java.text.DecimalFormat
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.language.implicitConversions
+import scala.tools.testing.AssertUtil._
+
+object StringContextTestUtils {
+ private val decimalSeparator: Char = new DecimalFormat().getDecimalFormatSymbols().getDecimalSeparator()
+ private val numberPattern = """(\d+)\.(\d+.*)""".r
+
+ implicit class StringContextOps(val sc: StringContext) extends AnyVal {
+ // Use this String interpolator to avoid problems with a locale-dependent decimal mark.
+ def locally(numbers: String*): String = {
+ val numbersWithCorrectLocale = numbers.map(applyProperLocale)
+ sc.s(numbersWithCorrectLocale: _*)
+ }
+
+ // Handles cases like locally"3.14" - it's prettier than locally"${"3.14"}".
+ def locally(): String = sc.parts.map(applyProperLocale).mkString
+
+ private def applyProperLocale(number: String): String = {
+ val numberPattern(intPart, fractionalPartAndSuffix) = number
+ s"$intPart$decimalSeparator$fractionalPartAndSuffix"
+ }
+ }
+}
+
+@RunWith(classOf[JUnit4])
+class StringContextTest {
+
+ import StringContext._
+ import StringContextTestUtils.StringContextOps
+
+ @Test def noEscape() = {
+ val s = "string"
+ val res = processEscapes(s)
+ assertEquals(s, res)
+ }
+ @Test def tabbed() = {
+ val s = """a\tb"""
+ val res = processEscapes(s)
+ assertEquals("a\tb", res)
+ }
+ @Test def quoted() = {
+ val s = """hello, \"world\""""
+ val res = processEscapes(s)
+ assertEquals("""hello, "world"""", res)
+ }
+ @Test def octal() = {
+ val s = """\123cala"""
+ val res = treatEscapes(s)
+ assertEquals("Scala", res)
+ }
+ @Test def doubled() = {
+ val s = """\123cala\123yntax"""
+ val res = treatEscapes(s)
+ assertEquals("ScalaSyntax", res)
+ }
+ @Test def badly() = assertThrows[InvalidEscapeException] {
+ val s = """Scala\"""
+ val res = treatEscapes(s)
+ assertEquals("Scala", res)
+ }
+ @Test def noOctal() = assertThrows[InvalidEscapeException] {
+ val s = """\123cala"""
+ val res = processEscapes(s)
+ assertEquals("Scala", res)
+ }
+
+ @Test def t6631_baseline() = assertEquals("\f\r\n\t", s"""\f\r\n\t""")
+
+ @Test def t6631_badEscape() = assertThrows[InvalidEscapeException] {
+ s"""\x"""
+ }
+
+ // verifying that the standard interpolators can be supplanted
+ @Test def antiHijack_?() = {
+ object AllYourStringsAreBelongToMe { case class StringContext(args: Any*) { def s(args: Any) = "!!!!" } }
+ import AllYourStringsAreBelongToMe._
+ //assertEquals("????", s"????")
+ assertEquals("!!!!", s"????") // OK to hijack core interpolator ids
+ }
+
+ @Test def fIf() = {
+ val res = f"${if (true) 2.5 else 2.5}%.2f"
+ val expected = locally"2.50"
+ assertEquals(expected, res)
+ }
+
+ @Test def fIfNot() = {
+ val res = f"${if (false) 2.5 else 3.5}%.2f"
+ val expected = locally"3.50"
+ assertEquals(expected, res)
+ }
+
+ @Test def fHeteroArgs() = {
+ val res = f"${3.14}%.2f rounds to ${3}%d"
+ val expected = locally"${"3.14"} rounds to 3"
+ assertEquals(expected, res)
+ }
+
+ @Test def `f interpolator baseline`(): Unit = {
+
+ implicit def stringToBoolean(s: String): Boolean = java.lang.Boolean.parseBoolean(s)
+ implicit def stringToChar(s: String): Char = s(0)
+ implicit def str2fmt(s: String): java.util.Formattable = new java.util.Formattable {
+ def formatTo(f: java.util.Formatter, g: Int, w: Int, p: Int) = f.format("%s", s)
+ }
+
+ val b_true = true
+ val b_false = false
+
+ val i = 42
+
+ val f_zero = 0.0
+ val f_zero_- = -0.0
+
+ val s = "Scala"
+
+ val fff = new java.util.Formattable {
+ def formatTo(f: java.util.Formatter, g: Int, w: Int, p: Int) = f.format("4")
+ }
+ import java.util.{Calendar, Locale}
+ val c = Calendar.getInstance(Locale.US)
+ c.set(2012, Calendar.MAY, 26)
+ implicit def strToDate(x: String): Calendar = c
+
+ val ss = List[(String, String)] (
+ // 'b' / 'B' (category: general)
+ // -----------------------------
+ f"${b_false}%b" -> "false",
+ f"${b_true}%b" -> "true",
+
+ f"${null}%b" -> "false",
+ f"${false}%b" -> "false",
+ f"${true}%b" -> "true",
+ f"${true && false}%b" -> "false",
+ f"${new java.lang.Boolean(false)}%b" -> "false",
+ f"${new java.lang.Boolean(true)}%b" -> "true",
+
+ f"${null}%B" -> "FALSE",
+ f"${false}%B" -> "FALSE",
+ f"${true}%B" -> "TRUE",
+ f"${new java.lang.Boolean(false)}%B" -> "FALSE",
+ f"${new java.lang.Boolean(true)}%B" -> "TRUE",
+
+ f"${"true"}%b" -> "true",
+ f"${"false"}%b"-> "false",
+
+ // 'h' | 'H' (category: general)
+ // -----------------------------
+ f"${null}%h" -> "null",
+ f"${f_zero}%h" -> "0",
+ f"${f_zero_-}%h" -> "80000000",
+ f"${s}%h" -> "4c01926",
+
+ f"${null}%H" -> "NULL",
+ f"${s}%H" -> "4C01926",
+
+ // 's' | 'S' (category: general)
+ // -----------------------------
+ f"${null}%s" -> "null",
+ f"${null}%S" -> "NULL",
+ f"${s}%s" -> "Scala",
+ f"${s}%S" -> "SCALA",
+ f"${5}" -> "5",
+ f"${i}" -> "42",
+ f"${'foo}" -> "'foo",
+
+ f"${Thread.State.NEW}" -> "NEW",
+
+ // 'c' | 'C' (category: character)
+ // -------------------------------
+ f"${120:Char}%c" -> "x",
+ f"${120:Byte}%c" -> "x",
+ f"${120:Short}%c" -> "x",
+ f"${120:Int}%c" -> "x",
+ f"${new java.lang.Character('x')}%c" -> "x",
+ f"${new java.lang.Byte(120:Byte)}%c" -> "x",
+ f"${new java.lang.Short(120:Short)}%c" -> "x",
+ f"${new java.lang.Integer(120)}%c" -> "x",
+
+ f"${'x' : java.lang.Character}%c" -> "x",
+ f"${(120:Byte) : java.lang.Byte}%c" -> "x",
+ f"${(120:Short) : java.lang.Short}%c" -> "x",
+ f"${120 : java.lang.Integer}%c" -> "x",
+
+ f"${"Scala"}%c" -> "S",
+
+ // 'd' | 'o' | 'x' | 'X' (category: integral)
+ // ------------------------------------------
+ f"${120:Byte}%d" -> "120",
+ f"${120:Short}%d" -> "120",
+ f"${120:Int}%d" -> "120",
+ f"${120:Long}%d" -> "120",
+ f"${60 * 2}%d" -> "120",
+ f"${new java.lang.Byte(120:Byte)}%d" -> "120",
+ f"${new java.lang.Short(120:Short)}%d" -> "120",
+ f"${new java.lang.Integer(120)}%d" -> "120",
+ f"${new java.lang.Long(120)}%d" -> "120",
+ f"${120 : java.lang.Integer}%d" -> "120",
+ f"${120 : java.lang.Long}%d" -> "120",
+ f"${BigInt(120)}%d" -> "120",
+
+ f"${new java.math.BigInteger("120")}%d" -> "120",
+
+ f"${4}%#10X" -> " 0X4",
+
+ f"She is ${fff}%#s feet tall." -> "She is 4 feet tall.",
+
+ f"Just want to say ${"hello, world"}%#s..." -> "Just want to say hello, world...",
+
+ { implicit val strToShort = (s: String) => java.lang.Short.parseShort(s) ; f"${"120"}%d" } -> "120",
+ { implicit val strToInt = (s: String) => 42 ; f"${"120"}%d" } -> "42",
+
+ // 'e' | 'E' | 'g' | 'G' | 'f' | 'a' | 'A' (category: floating point)
+ // ------------------------------------------------------------------
+ f"${3.4f}%e" -> locally"3.400000e+00",
+ f"${3.4}%e" -> locally"3.400000e+00",
+ f"${3.4f : java.lang.Float}%e" -> locally"3.400000e+00",
+ f"${3.4 : java.lang.Double}%e" -> locally"3.400000e+00",
+
+ f"${BigDecimal(3.4)}%e" -> locally"3.400000e+00",
+
+ f"${new java.math.BigDecimal(3.4)}%e" -> locally"3.400000e+00",
+
+ f"${3}%e" -> locally"3.000000e+00",
+ f"${3L}%e" -> locally"3.000000e+00",
+
+ // 't' | 'T' (category: date/time)
+ // -------------------------------
+ f"${c}%TD" -> "05/26/12",
+ f"${c.getTime}%TD" -> "05/26/12",
+ f"${c.getTime.getTime}%TD" -> "05/26/12",
+ f"""${"1234"}%TD""" -> "05/26/12",
+
+ // literals and arg indexes
+ f"%%" -> "%",
+ f" mind%n------%nmatter" ->
+ """| mind
+ |------
+ |matter""".stripMargin.lines.mkString(compat.Platform.EOL),
+ f"${i}%d %<d ${9}%d" -> "42 42 9",
+ f"${7}%d %<d ${9}%d" -> "7 7 9",
+ f"${7}%d %2$$d ${9}%d" -> "7 9 9",
+
+ f"${null}%d %<B" -> "null FALSE",
+
+ f"${5: Any}" -> "5",
+ f"${5}%s%<d" -> "55",
+ f"${3.14}%s,%<f" -> locally"3.14,${"3.140000"}",
+
+ f"z" -> "z"
+ )
+
+ for ((f, s) <- ss) assertEquals(s, f)
+ }
+}
diff --git a/test/junit/scala/lang/traits/BytecodeTest.scala b/test/junit/scala/lang/traits/BytecodeTest.scala
new file mode 100644
index 0000000000..ccf53fe3b1
--- /dev/null
+++ b/test/junit/scala/lang/traits/BytecodeTest.scala
@@ -0,0 +1,612 @@
+package scala.lang.traits
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.collection.JavaConverters._
+import scala.tools.asm.Opcodes
+import scala.tools.asm.Opcodes._
+import scala.tools.asm.tree.ClassNode
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class BytecodeTest extends BytecodeTesting {
+ import compiler._
+
+ val noForwardersCompiler = newCompiler(extraArgs = "-Xmixin-force-forwarders:false")
+
+ def checkForwarder(classes: Map[String, ClassNode], clsName: Symbol, target: String) = {
+ val f = getMethod(classes(clsName.name), "f")
+ assertSameCode(f, List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, target, "f$", s"(L$target;)I", true), Op(IRETURN)))
+ }
+
+ @Test
+ def traitMethodForwarders(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 extends T1 { override def f = 2 }
+ |trait T3 { self: T1 => override def f = 3 }
+ |
+ |abstract class A1 { def f: Int }
+ |class A2 { def f: Int = 4 }
+ |
+ |trait T4 extends A1 { def f = 5 }
+ |trait T5 extends A2 { override def f = 6 }
+ |
+ |trait T6 { def f: Int }
+ |trait T7 extends T6 { abstract override def f = super.f + 1 }
+ |
+ |trait T8 { override def clone() = super.clone() }
+ |
+ |class A3 extends T1 { override def f = 7 }
+ |
+ |class C1 extends T1
+ |class C2 extends T2
+ |class C3 extends T1 with T2
+ |class C4 extends T2 with T1
+ |class C5 extends T1 with T3
+ |
+ |// traits extending a class that defines f
+ |class C6 extends T4
+ |class C7 extends T5
+ |class C8 extends A1 with T4
+ |class C9 extends A2 with T5
+ |
+ |// T6: abstract f in trait
+ |class C10 extends T6 with T1
+ |class C11 extends T6 with T2
+ |abstract class C12 extends A1 with T6
+ |class C13 extends A2 with T6
+ |class C14 extends T4 with T6
+ |class C15 extends T5 with T6
+ |
+ |// superclass overrides a trait method
+ |class C16 extends A3
+ |class C17 extends A3 with T1
+ |
+ |// abstract override
+ |class C18 extends T6 { def f = 22 }
+ |class C19 extends C18 with T7
+ |
+ |class C20 extends T8
+ """.stripMargin
+
+ val c = noForwardersCompiler.compileClasses(code).map(c => (c.name, c)).toMap
+
+ val noForwarder = List('C1, 'C2, 'C3, 'C4, 'C10, 'C11, 'C12, 'C13, 'C16, 'C17)
+ for (cn <- noForwarder) assertEquals(getMethods(c(cn.name), "f"), Nil)
+
+ checkForwarder(c, 'C5, "T3")
+ checkForwarder(c, 'C6, "T4")
+ checkForwarder(c, 'C7, "T5")
+ checkForwarder(c, 'C8, "T4")
+ checkForwarder(c, 'C9, "T5")
+ checkForwarder(c, 'C14, "T4")
+ checkForwarder(c, 'C15, "T5")
+ assertSameSummary(getMethod(c("C18"), "f"), List(BIPUSH, IRETURN))
+ checkForwarder(c, 'C19, "T7")
+ assertSameCode(getMethod(c("C19"), "T7$$super$f"), List(VarOp(ALOAD, 0), Invoke(INVOKESPECIAL, "C18", "f", "()I", false), Op(IRETURN)))
+ assertInvoke(getMethod(c("C20"), "clone"), "T8", "clone$") // mixin forwarder
+ }
+
+ @Test
+ def noTraitMethodForwardersForOverloads(): Unit = {
+ val code =
+ """trait T1 { def f(x: Int) = 0 }
+ |trait T2 { def f(x: String) = 1 }
+ |class C extends T1 with T2
+ """.stripMargin
+ val List(c, t1, t2) = noForwardersCompiler.compileClasses(code)
+ assertEquals(getMethods(c, "f"), Nil)
+ }
+
+ @Test
+ def traitMethodForwardersForJavaDefaultMethods(): Unit = {
+ val j1 = ("interface J1 { int f(); }", "J1.java")
+ val j2 = ("interface J2 { default int f() { return 1; } }", "J2.java")
+ val j3 = ("interface J3 extends J1 { default int f() { return 2; } }", "J3.java")
+ val j4 = ("interface J4 extends J2 { default int f() { return 3; } }", "J4.java")
+ val code =
+ """trait T1 extends J2 { override def f = 4 }
+ |trait T2 { self: J2 => override def f = 5 }
+ |
+ |class K1 extends J2
+ |class K2 extends J1 with J2
+ |class K3 extends J2 with J1
+ |
+ |class K4 extends J3
+ |class K5 extends J3 with J1
+ |class K6 extends J1 with J3
+ |
+ |class K7 extends J4
+ |class K8 extends J4 with J2
+ |class K9 extends J2 with J4
+ |
+ |class K10 extends T1 with J2
+ |class K11 extends J2 with T1
+ |
+ |class K12 extends J2 with T2
+ """.stripMargin
+ val c = noForwardersCompiler.compileClasses(code, List(j1, j2, j3, j4)).map(c => (c.name, c)).toMap
+
+ val noForwarder = List('K1, 'K2, 'K3, 'K4, 'K5, 'K6, 'K7, 'K8, 'K9, 'K10, 'K11)
+ for (cn <- noForwarder) assertEquals(getMethods(c(cn.name), "f"), Nil)
+
+ checkForwarder(c, 'K12, "T2")
+ }
+
+ @Test
+ def invocationReceivers(): Unit = {
+ val List(c1, c2, t, u) = noForwardersCompiler.compileClasses(invocationReceiversTestCode.definitions("Object"))
+ // mixin forwarder in C1
+ assertSameCode(getMethod(c1, "clone"), List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, "T", "clone$", "(LT;)Ljava/lang/Object;", true), Op(ARETURN)))
+ assertInvoke(getMethod(c1, "f1"), "T", "clone")
+ assertInvoke(getMethod(c1, "f2"), "T", "clone")
+ assertInvoke(getMethod(c1, "f3"), "C1", "clone")
+ assertInvoke(getMethod(c2, "f1"), "T", "clone")
+ assertInvoke(getMethod(c2, "f2"), "T", "clone")
+ assertInvoke(getMethod(c2, "f3"), "C1", "clone")
+
+ val List(c1b, c2b, tb, ub) = noForwardersCompiler.compileClasses(invocationReceiversTestCode.definitions("String"))
+ def ms(c: ClassNode, n: String) = c.methods.asScala.toList.filter(_.name == n)
+ assert(ms(tb, "clone").length == 1)
+ assert(ms(ub, "clone").isEmpty)
+ val List(c1Clone) = ms(c1b, "clone")
+ assertEquals(c1Clone.desc, "()Ljava/lang/Object;")
+ assert((c1Clone.access | Opcodes.ACC_BRIDGE) != 0)
+ assertSameCode(convertMethod(c1Clone), List(VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "C1", "clone", "()Ljava/lang/String;", false), Op(ARETURN)))
+
+ def iv(m: Method) = getInstructions(c1b, "f1").collect({case i: Invoke => i})
+ assertSameCode(iv(getMethod(c1b, "f1")), List(Invoke(INVOKEINTERFACE, "T", "clone", "()Ljava/lang/String;", true)))
+ assertSameCode(iv(getMethod(c1b, "f2")), List(Invoke(INVOKEINTERFACE, "T", "clone", "()Ljava/lang/String;", true)))
+ // invokeinterface T.clone in C1 is OK here because it is not an override of Object.clone (different siganture)
+ assertSameCode(iv(getMethod(c1b, "f3")), List(Invoke(INVOKEINTERFACE, "T", "clone", "()Ljava/lang/String;", true)))
+ }
+
+ @Test
+ def invocationReceiversProtected(): Unit = {
+ // http://lrytz.github.io/scala-aladdin-bugtracker/displayItem.do%3Fid=455.html / 9954eaf
+ // also https://issues.scala-lang.org/browse/SI-1430 / 0bea2ab (same but with interfaces)
+ val aC =
+ """package a;
+ |/*package private*/ abstract class A {
+ | public int f() { return 1; }
+ | public int t;
+ |}
+ """.stripMargin
+ val bC =
+ """package a;
+ |public class B extends A { }
+ """.stripMargin
+ val iC =
+ """package a;
+ |/*package private*/ interface I { int f(); }
+ """.stripMargin
+ val jC =
+ """package a;
+ |public interface J extends I { }
+ """.stripMargin
+ val cC =
+ """package b
+ |class C {
+ | def f1(b: a.B) = b.f
+ | def f2(b: a.B) = { b.t = b.t + 1 }
+ | def f3(j: a.J) = j.f
+ |}
+ """.stripMargin
+ val c = compileClass(cC, javaCode = List((aC, "A.java"), (bC, "B.java"), (iC, "I.java"), (jC, "J.java")))
+ assertInvoke(getMethod(c, "f1"), "a/B", "f") // receiver needs to be B (A is not accessible in class C, package b)
+ assertInvoke(getMethod(c, "f3"), "a/J", "f") // receiver needs to be J
+ }
+
+ @Test
+ def specialInvocationReceivers(): Unit = {
+ val code =
+ """class C {
+ | def f1(a: Array[String]) = a.clone()
+ | def f2(a: Array[Int]) = a.hashCode()
+ | def f3(n: Nothing) = n.hashCode()
+ | def f4(n: Null) = n.toString()
+ |
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertInvoke(getMethod(c, "f1"), "[Ljava/lang/String;", "clone") // array descriptor as receiver
+ assertInvoke(getMethod(c, "f2"), "java/lang/Object", "hashCode") // object receiver
+ assertInvoke(getMethod(c, "f3"), "java/lang/Object", "hashCode")
+ assertInvoke(getMethod(c, "f4"), "java/lang/Object", "toString")
+ }
+
+ @Test
+ def superConstructorArgumentInSpecializedClass(): Unit = {
+ // see comment in SpecializeTypes.forwardCtorCall
+ val code = "case class C[@specialized(Int) T](_1: T)"
+ val List(c, cMod, cSpec) = compileClasses(code)
+ assertSameSummary(getMethod(cSpec, "<init>"),
+ // pass `null` to super constructor, no box-unbox, no Integer created
+ List(ALOAD, ILOAD, PUTFIELD, ALOAD, ACONST_NULL, "<init>", RETURN))
+ }
+
+ @Test
+ def mixinForwarders(): Unit = {
+ val code =
+ """trait T { def f = 1 }
+ |class C extends T
+ """.stripMargin
+ val List(c1, _) = noForwardersCompiler.compileClasses(code)
+ val List(c2, _) = compileClasses(code)
+ assert(getMethods(c1, "f").isEmpty)
+ assertSameCode(getMethod(c2, "f"),
+ List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, "T", "f$", "(LT;)I", true), Op(IRETURN)))
+ }
+
+ @Test
+ def sd143(): Unit = {
+ val code =
+ """class A { def m = 1 }
+ |class B extends A { override def m = 2 }
+ |trait T extends A
+ |class C extends B with T {
+ | override def m = super[T].m // should invoke A.m
+ |}
+ """.stripMargin
+
+ val err =
+ """cannot emit super call: the selected method m is declared in class A, which is not the direct superclass of class C.
+ |An unqualified super call (super.m) would be allowed.""".stripMargin
+ val cls = compileClasses(code, allowMessage = _.msg contains err)
+ assert(cls.isEmpty, cls.map(_.name))
+ }
+
+ @Test
+ def sd143b(): Unit = {
+ val jCode = List("interface A { default int m() { return 1; } }" -> "A.java")
+ val code =
+ """class B extends A { override def m = 2 }
+ |trait T extends A
+ |class C extends B with T {
+ | override def m = super[T].m
+ |}
+ """.stripMargin
+
+ val err = "unable to emit super call unless interface A (which declares method m) is directly extended by class C"
+ val cls = compileClasses(code, jCode, allowMessage = _.msg contains err)
+ assert(cls.isEmpty, cls.map(_.name))
+ }
+
+ @Test
+ def sd143c(): Unit = {
+ // Allow super calls to class methods of indirect super classes
+ val code =
+ """class A { def f = 1 }
+ |class B extends A
+ |trait T extends A { override def f = 2 }
+ |class C extends B with T {
+ | def t1 = super[B].f
+ | def t2 = super.f
+ | def t3 = super[T].f
+ |}
+ """.stripMargin
+ val List(_, _, c, _) = compileClasses(code)
+ val t1 = getInstructions(c, "t1")
+ assert(t1 contains Invoke(INVOKESPECIAL, "A", "f", "()I", false), t1.stringLines)
+ val t2 = getInstructions(c, "t2")
+ val invStat = Invoke(INVOKESTATIC, "T", "f$", "(LT;)I", true)
+ assert(t2 contains invStat, t2.stringLines)
+ val t3 = getInstructions(c, "t3")
+ assert(t3 contains invStat, t3.stringLines)
+ }
+
+ @Test
+ def sd210(): Unit = {
+ val jCode = List("interface A { default int m() { return 1; } }" -> "A.java")
+
+
+ // used to crash in the backend (SD-210) under `-Xmixin-force-forwarders:true`
+ val code1 =
+ """trait B1 extends A // called "B1" not "B" due to scala-dev#214
+ |class C extends B1
+ """.stripMargin
+
+ val List(_, c1a) = noForwardersCompiler.compileClasses(code1, jCode)
+ assert(getAsmMethods(c1a, "m").isEmpty) // ok, no forwarder
+
+ // here we test a warning. without `-Xmixin-force-forwarders:true`, the forwarder would not be
+ // generated, it is not necessary for correctness.
+ val List(_, c1b) = compileClasses(code1, jCode)
+ assert(getAsmMethods(c1b, "m").isEmpty) // no forwarder: it cannot be implemented because A is not a direct parent of C
+
+
+ val code2 =
+ """abstract class B { def m(): Int }
+ |trait T extends B with A
+ |class C extends T
+ """.stripMargin
+
+ // here we test a compilation error. the forwarder is required for correctness, but it cannot be generated.
+ val err = "Unable to implement a mixin forwarder for method m in class C unless interface A is directly extended by class C"
+ val cs = compileClasses(code2, jCode, allowMessage = _.msg contains err)
+ assert(cs.isEmpty, cs.map(_.name))
+
+
+ val code3 =
+ """abstract class B { def m: Int }
+ |class C extends B with A
+ """.stripMargin
+
+ val List(_, c3) = compileClasses(code3, jCode)
+ // invokespecial to A.m is correct here: A is an interface, so resolution starts at A.
+ // https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokespecial
+ val ins3 = getMethod(c3, "m").instructions
+ assert(ins3 contains Invoke(INVOKESPECIAL, "A", "m", "()I", true), ins3.stringLines)
+
+
+ val code4 =
+ """trait B { self: A => override def m = 2 }
+ |class C extends A with B // forwarder, invokestatic B.m$
+ """.stripMargin
+
+ val List(_, c4) = compileClasses(code4, jCode)
+ val ins4 = getMethod(c4, "m").instructions
+ assert(ins4 contains Invoke(INVOKESTATIC, "B", "m$", "(LB;)I", true), ins4.stringLines)
+
+
+ // scala-only example
+ val code5 =
+ """trait AS { def m = 1 }
+ |abstract class B { def m: Int }
+ |class C extends B with AS // forwarder, invokestatic AS.m$
+ """.stripMargin
+
+ val List(_, _, c5) = compileClasses(code5)
+ val ins5 = getMethod(c5, "m").instructions
+ assert(ins5 contains Invoke(INVOKESTATIC, "AS", "m$", "(LAS;)I", true), ins5.stringLines)
+ }
+
+ @Test
+ def sd224(): Unit = {
+ val jCode = List("interface T { default int f() { return 1; } }" -> "T.java")
+ val code =
+ """trait U extends T
+ |class C extends U { def t = super.f }
+ """.stripMargin
+ val msg = "unable to emit super call unless interface T (which declares method f) is directly extended by class C"
+ val cls = compileClasses(code, jCode, allowMessage = _.msg contains msg)
+ assertEquals(cls, Nil)
+ }
+
+ def ifs(c: ClassNode, expected: List[String]) = assertEquals(expected, c.interfaces.asScala.toList.sorted)
+ def invSt(m: Method, receiver: String, method: String = "f$", itf: Boolean = true): Unit =
+ assert(m.instructions contains Invoke(INVOKESTATIC, receiver, method, s"(L$receiver;)I", itf), m.instructions.stringLines)
+ def invSp(m: Method, receiver: String, method: String = "f", sig: String = "()I", itf: Boolean = true): Unit =
+ assert(m.instructions contains Invoke(INVOKESPECIAL, receiver, method, sig, itf), m.instructions.stringLines)
+
+ @Test
+ def superCalls1(): Unit = {
+ val code =
+ """trait T { def f = 1 }
+ |trait U extends T
+ |class C extends U { def t = super.f }
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U"))
+ invSt(getMethod(c, "t"), "T")
+ invSt(getMethod(c, "f"), "T")
+ }
+
+ @Test
+ def superCalls2(): Unit = {
+ val code =
+ """class A { def f = 1 }
+ |trait T extends A { override def f = 2 }
+ |class B extends A
+ |class C extends B with T {
+ | def t1 = super.f
+ | def t2 = super[T].f
+ | def t3 = super[B].f
+ |}
+ """.stripMargin
+ val List(_, _, c, _) = compileClasses(code)
+ invSt(getMethod(c, "f"), "T")
+ invSt(getMethod(c, "t1"), "T")
+ invSt(getMethod(c, "t2"), "T")
+ invSp(getMethod(c, "t3"), "A", itf = false)
+ }
+
+ @Test
+ def superCalls3(): Unit = {
+ val code =
+ """class A { def f = 1 }
+ |trait T extends A
+ |class B extends A { override def f = 2 }
+ |class C extends B with T {
+ | def t1 = super.f
+ | // def t2 = super[T].f // error: cannot emit super call. tested in sd143
+ | def t3 = super[B].f
+ |}
+ """.stripMargin
+ val List(_, _, c, _) = compileClasses(code)
+ invSp(getMethod(c, "t1"), "B", itf = false)
+ invSp(getMethod(c, "t3"), "B", itf = false)
+ assertEquals(getMethods(c, "f"), Nil)
+ }
+
+ @Test
+ def superCalls4(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 { self: T1 => override def f = 2 }
+ |trait U extends T1 with T2
+ |class C extends U {
+ | def t1 = super.f
+ | def t2 = super[U].f
+ |}
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U"))
+ invSt(getMethod(c, "f"), "T2")
+ invSt(getMethod(c, "t1"), "T2")
+ invSt(getMethod(c, "t2"), "T2")
+ }
+
+ @Test
+ def superCalls5(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 { self: T1 => override def f = 2 }
+ |trait U extends T1 with T2
+ |class C extends U with T1 with T2
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U")) // T1, T2 removed by minimizeParents
+ invSt(getMethod(c, "f"), "T2")
+ }
+
+ @Test
+ def superCalls6(): Unit = {
+ val code =
+ """trait T { override def hashCode = -1 }
+ |trait U extends T
+ |class C extends U {
+ | def t1 = super[U].hashCode
+ | def t2 = super.hashCode
+ |}
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("U"))
+ invSt(getMethod(c, "hashCode"), "T", "hashCode$")
+ invSt(getMethod(c, "t1"), "T", "hashCode$")
+ invSt(getMethod(c, "t2"), "T", "hashCode$")
+ }
+
+ @Test
+ def superCalls7(): Unit = {
+ val code =
+ """trait T { def f = 1 }
+ |trait U1 extends T { override def f = 2 }
+ |trait U2 extends T { override def f = 3 }
+ |class C1 extends T with U1 with U2 {
+ | def t1 = super.f
+ | def t2 = super[T].f
+ | def t3 = super[U1].f
+ | def t4 = super[U2].f
+ |}
+ |class C2 extends T with U2 with U1 {
+ | def t1 = super.f
+ |}
+ """.stripMargin
+ val List(c1, c2, _*) = compileClasses(code)
+ ifs(c1, List("U1", "U2"))
+ ifs(c2, List("U1", "U2"))
+ invSt(getMethod(c1, "f"), "U2")
+ invSt(getMethod(c1, "t1"), "U2")
+ invSt(getMethod(c1, "t2"), "T")
+ invSt(getMethod(c1, "t3"), "U1")
+ invSt(getMethod(c1, "t4"), "U2")
+ invSt(getMethod(c2, "f"), "U1")
+ invSt(getMethod(c2, "t1"), "U1")
+ }
+
+ @Test
+ def superCalls8(): Unit = {
+ val code =
+ """trait T1 { def f = 1 }
+ |trait T2 { _: T1 => override def f = 2 }
+ |trait U extends T1 with T2
+ |trait V extends U with T2
+ |class C extends V {
+ | def t1 = super.f
+ | def t2 = super[V].f
+ |}
+ """.stripMargin
+ val List(c, _*) = compileClasses(code)
+ ifs(c, List("V"))
+ invSt(getMethod(c, "f"), "T2")
+ invSt(getMethod(c, "t1"), "T2")
+ invSt(getMethod(c, "t2"), "T2")
+ }
+
+ @Test
+ def superCalls9(): Unit = {
+ val code =
+ """trait T { def f: Int }
+ |trait U1 extends T { def f = 0 }
+ |trait U2 extends T { override def f = 1 }
+ |trait V extends U1
+ |
+ |trait W1 extends V with U2
+ |class C1 extends W1 with U2
+ |
+ |trait W2 extends V with U2 { override def f = super[U2].f }
+ |class C2 extends W2 with U2
+ |
+ |trait W3 extends V with U2 { override def f = super.f }
+ |class C3 extends W3 with U2
+ """.stripMargin
+ val List(c1, c2, c3, _*) = compileClasses(code)
+
+ ifs(c1, List("W1"))
+ invSt(getMethod(c1, "f"), "U2")
+
+ ifs(c2, List("W2"))
+ invSt(getMethod(c2, "f"), "W2")
+
+ ifs(c3, List("W3"))
+ invSt(getMethod(c3, "W3$$super$f"), "U2")
+ invSt(getMethod(c3, "f"), "W3")
+ }
+}
+
+object invocationReceiversTestCode {
+ // if cloneType is more specific than Object (e.g., String), a bridge method is generated.
+ def definitions(cloneType: String) =
+ s"""trait T { override def clone(): $cloneType = "hi" }
+ |trait U extends T
+ |class C1 extends U with Cloneable {
+ | // The comments below are true when $cloneType is Object.
+ | // C1 gets a forwarder for clone that invokes T.clone. this is needed because JVM method
+ | // resolution always prefers class members, so it would resolve to Object.clone, even if
+ | // C1 is a subtype of the interface T which has an overriding default method for clone.
+ |
+ | // invokeinterface T.clone
+ | def f1 = (this: T).clone()
+ |
+ | // cannot invokeinterface U.clone (NoSuchMethodError). Object.clone would work here, but
+ | // not in the example in C2 (illegal access to protected). T.clone works in all cases and
+ | // resolves correctly.
+ | def f2 = (this: U).clone()
+ |
+ | // invokevirtual C1.clone()
+ | def f3 = (this: C1).clone()
+ |}
+ |
+ |class C2 {
+ | def f1(t: T) = t.clone() // invokeinterface T.clone
+ | def f2(t: U) = t.clone() // invokeinterface T.clone -- Object.clone would be illegal (protected, explained in C1)
+ | def f3(t: C1) = t.clone() // invokevirtual C1.clone -- Object.clone would be illegal
+ |}
+ """.stripMargin
+
+ val runCode =
+ """
+ |val r = new StringBuffer()
+ |val c1 = new C1
+ |r.append(c1.f1)
+ |r.append(c1.f2)
+ |r.append(c1.f3)
+ |val t = new T { }
+ |val u = new U { }
+ |val c2 = new C2
+ |r.append(c2.f1(t))
+ |r.append(c2.f1(u))
+ |r.append(c2.f1(c1))
+ |r.append(c2.f2(u))
+ |r.append(c2.f2(c1))
+ |r.append(c2.f3(c1))
+ |r.toString
+ """.stripMargin
+}
diff --git a/test/junit/scala/lang/traits/RunTest.scala b/test/junit/scala/lang/traits/RunTest.scala
new file mode 100644
index 0000000000..d27dc15e20
--- /dev/null
+++ b/test/junit/scala/lang/traits/RunTest.scala
@@ -0,0 +1,20 @@
+package scala.lang.traits
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.testing.RunTesting
+
+@RunWith(classOf[JUnit4])
+class RunTest extends RunTesting {
+ import runner._
+
+ @Test
+ def invocationReceivers(): Unit = {
+ import invocationReceiversTestCode._
+ assertEquals(run[String](definitions("Object") + runCode), "hi" * 9)
+ assertEquals(run[String](definitions("String") + runCode), "hi" * 9) // bridge method for clone generated
+ }
+}
diff --git a/test/junit/scala/math/BigDecimalTest.scala b/test/junit/scala/math/BigDecimalTest.scala
index a9e2481f37..5de02cbe0c 100644
--- a/test/junit/scala/math/BigDecimalTest.scala
+++ b/test/junit/scala/math/BigDecimalTest.scala
@@ -260,4 +260,9 @@ class BigDecimalTest {
testPrecision()
testRounded()
}
+
+ @Test
+ def testIsComparable() {
+ assert(BigDecimal(0.1).isInstanceOf[java.lang.Comparable[_]])
+ }
}
diff --git a/test/junit/scala/math/BigIntTest.scala b/test/junit/scala/math/BigIntTest.scala
new file mode 100644
index 0000000000..5a5694a775
--- /dev/null
+++ b/test/junit/scala/math/BigIntTest.scala
@@ -0,0 +1,16 @@
+package scala.math
+
+import java.math.{BigInteger => BI, MathContext => MC}
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class BigIntTest {
+
+ @Test
+ def testIsComparable() {
+ assert(BigInt(1).isInstanceOf[java.lang.Comparable[_]])
+ }
+}
diff --git a/test/junit/scala/reflect/ClassOfTest.scala b/test/junit/scala/reflect/ClassOfTest.scala
new file mode 100644
index 0000000000..520b14ccd4
--- /dev/null
+++ b/test/junit/scala/reflect/ClassOfTest.scala
@@ -0,0 +1,124 @@
+package scala.reflect
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.testing.RunTesting
+
+object ClassOfTest {
+ class VC(val x: Any) extends AnyVal
+}
+
+@RunWith(classOf[JUnit4])
+class ClassOfTest extends RunTesting {
+ import runner._
+
+ @Test
+ def classOfValueClassAlias(): Unit = {
+ val code =
+ """import scala.reflect.ClassOfTest.VC
+ |type aVC = VC
+ |type aInt = Int
+ |type aInteger = Integer
+ |classOf[VC] == classOf[aVC] &&
+ | classOf[aInt] == classOf[Int] &&
+ | classOf[aInteger] == classOf[Integer] &&
+ | classOf[aInt] != classOf[aInteger]
+ """.stripMargin
+ assertTrue(run[Boolean](code))
+ }
+
+ @Test
+ def classOfFinalVal(): Unit = {
+ val code =
+ """class C {
+ | final val a1 = classOf[Int]
+ | final val b1 = classOf[List[_]]
+ | final val c1 = classOf[List[String]]
+ | final val d1 = classOf[Array[Int]]
+ | final val e1 = classOf[Array[List[_]]]
+ | final val f1 = classOf[Array[_]]
+ |
+ | val a2 = classOf[Int]
+ | val b2 = classOf[List[_]]
+ | val c2 = classOf[List[String]]
+ | val d2 = classOf[Array[Int]]
+ | val e2 = classOf[Array[List[_]]]
+ | val f2 = classOf[Array[_]]
+ |
+ | val listC = Class.forName("scala.collection.immutable.List")
+ |
+ | val compare = List(
+ | (a1, a2, Integer.TYPE),
+ | (b1, b2, listC),
+ | (c1, c2, listC),
+ | (d1, d2, Array(1).getClass),
+ | (e1, e2, Array(List()).getClass),
+ | (f1, f2, new Object().getClass))
+ |}
+ |(new C).compare
+ """.stripMargin
+ type K = Class[_]
+ val cs = run[List[(K, K, K)]](code)
+ for ((x, y, z) <- cs) {
+ assertEquals(x, y)
+ assertEquals(x, z)
+ }
+ }
+
+ @Test
+ def t9702(): Unit = {
+ val code =
+ """import javax.annotation.Resource
+ |import scala.reflect.ClassOfTest.VC
+ |class C {
+ | type aList[K] = List[K]
+ | type aVC = VC
+ | type aInt = Int
+ | type aInteger = Integer
+ | @Resource(`type` = classOf[List[Int]]) def a = 0
+ | @Resource(`type` = classOf[List[_]]) def b = 0
+ | @Resource(`type` = classOf[aList[_]]) def c = 0
+ | @Resource(`type` = classOf[Int]) def d = 0
+ | @Resource(`type` = classOf[aInt]) def e = 0
+ | @Resource(`type` = classOf[Integer]) def f = 0
+ | @Resource(`type` = classOf[aInteger]) def g = 0
+ | @Resource(`type` = classOf[VC]) def h = 0
+ | @Resource(`type` = classOf[aVC]) def i = 0
+ | @Resource(`type` = classOf[Array[Int]]) def j = 0
+ | @Resource(`type` = classOf[Array[List[_]]]) def k = 0
+ |}
+ |val c = classOf[C]
+ |def typeArg(meth: String) = c.getDeclaredMethod(meth).getDeclaredAnnotation(classOf[Resource]).`type`
+ |('a' to 'k').toList.map(_.toString).map(typeArg)
+ """.stripMargin
+
+ val l = Class.forName("scala.collection.immutable.List")
+ val i = Integer.TYPE
+ val ig = new Integer(1).getClass
+ val v = new ClassOfTest.VC(1).getClass
+ val ai = Array(1).getClass
+ val al = Array(List()).getClass
+
+ // sanity checks
+ assertEquals(i, classOf[Int])
+ assertNotEquals(i, ig)
+
+ assertEquals(run[List[Class[_]]](code),
+ List(l, l, l, i, i, ig, ig, v, v, ai, al))
+ }
+
+ @Test
+ def classOfUnitConstant(): Unit = {
+ val code =
+ """abstract class A { def f: Class[_] }
+ |class C extends A { final val f = classOf[Unit] }
+ |val c = new C
+ |(c.f, (c: A).f)
+ """.stripMargin
+ val u = Void.TYPE
+ assertEquals(run[(Class[_], Class[_])](code), (u, u))
+ }
+}
diff --git a/test/junit/scala/reflect/ClassTag.scala b/test/junit/scala/reflect/ClassTagTest.scala
index 49022dccda..49022dccda 100644
--- a/test/junit/scala/reflect/ClassTag.scala
+++ b/test/junit/scala/reflect/ClassTagTest.scala
diff --git a/test/junit/scala/reflect/internal/PrintersTest.scala b/test/junit/scala/reflect/internal/PrintersTest.scala
index cacff6a012..722062ba21 100644
--- a/test/junit/scala/reflect/internal/PrintersTest.scala
+++ b/test/junit/scala/reflect/internal/PrintersTest.scala
@@ -8,14 +8,6 @@ import scala.reflect.runtime.{currentMirror=>cm}
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-@RunWith(classOf[JUnit4])
-class PrintersTest extends BasePrintTests
- with ClassPrintTests
- with TraitPrintTests
- with ValAndDefPrintTests
- with QuasiTreesPrintTests
- with PackagePrintTests
-
object PrinterHelper {
val toolbox = cm.mkToolBox()
@@ -73,7 +65,8 @@ object PrinterHelper {
import PrinterHelper._
-trait BasePrintTests {
+@RunWith(classOf[JUnit4])
+class BasePrintTest {
@Test def testIdent = assertTreeCode(Ident("*"))("*")
@Test def testConstant1 = assertTreeCode(Literal(Constant("*")))("\"*\"")
@@ -86,13 +79,21 @@ trait BasePrintTests {
@Test def testConstantLong = assertTreeCode(Literal(Constant(42l)))("42L")
- @Test def testConstantMultiline = assertTreeCode(Literal(Constant("hello\nworld")))("\"\"\"hello\nworld\"\"\"")
-
val sq = "\""
- val teq = "\\\"" * 3
val tq = "\"" * 3
+ val teq = "\"\"\\\""
+
+ @Test def testConstantMultiline = assertTreeCode(Literal(Constant("hello\nworld")))(s"${tq}hello\nworld${tq}")
+
+ @Test def testConstantFormfeed = assertTreeCode(Literal(Constant("hello\fworld")))(s"${sq}hello\\fworld${sq}")
- @Test def testConstantEmbeddedTriple = assertTreeCode(Literal(Constant(s"${tq}hello${tq}\nworld")))(s"${sq}${teq}hello${teq}\\nworld${sq}")
+ @Test def testConstantControl = assertTreeCode(Literal(Constant("hello\u0003world")))(s"${sq}hello\\u0003world${sq}")
+
+ @Test def testConstantFormfeedChar = assertTreeCode(Literal(Constant('\f')))("'\\f'")
+
+ @Test def testConstantControlChar = assertTreeCode(Literal(Constant(3.toChar)))("'\\u0003'")
+
+ @Test def testConstantEmbeddedTriple = assertTreeCode(Literal(Constant(s"${tq}hello${tq}\nworld")))(s"${tq}${teq}hello${teq}\nworld${tq}")
@Test def testOpExpr = assertPrintedCode("(5).+(4)", checkTypedTree = false)
@@ -356,7 +357,8 @@ trait BasePrintTests {
@Test def testImport4 = assertPrintedCode("import scala.collection._")
}
-trait ClassPrintTests {
+@RunWith(classOf[JUnit4])
+class ClassPrintTest {
@Test def testClass = assertPrintedCode("class *")
@Test def testClassWithBody = assertPrintedCode(sm"""
@@ -841,7 +843,8 @@ trait ClassPrintTests {
|}""")
}
-trait TraitPrintTests {
+@RunWith(classOf[JUnit4])
+class TraitPrintTest {
@Test def testTrait = assertPrintedCode("trait *")
@Test def testTraitWithBody = assertPrintedCode(sm"""
@@ -900,7 +903,7 @@ trait TraitPrintTests {
| type Foo;
| type XString = scala.Predef.String
|} with scala.Serializable {
- | val z = 7
+ | val z: scala.Int = 7
|}""")
@Test def testTraitWithSingletonTypeTree = assertPrintedCode(sm"""
@@ -961,7 +964,8 @@ trait TraitPrintTests {
|}""")
}
-trait ValAndDefPrintTests {
+@RunWith(classOf[JUnit4])
+class ValAndDefPrintTest {
@Test def testVal1 = assertPrintedCode("val a: scala.Unit = ()")
@Test def testVal2 = assertPrintedCode("val * : scala.Unit = ()")
@@ -1004,23 +1008,16 @@ trait ValAndDefPrintTests {
@Test def testDef9 = assertPrintedCode("def a(x: scala.Int)(implicit z: scala.Double, y: scala.Float): scala.Unit = ()")
- @Test def testDefWithLazyVal1 = assertResultCode(
- code = "def a = { lazy val test: Int = 42 }")(
- parsedCode = sm"""
- |def a = {
- | lazy val test: Int = 42;
- | ()
- |}
- """,
- typedCode = sm"""
+ @Test def testDefWithLazyVal1 = assertPrintedCode(sm"""
|def a = {
| lazy val test: scala.Int = 42;
| ()
- |}""")
+ |}
+ """)
@Test def testDefWithLazyVal2 = assertPrintedCode(sm"""
|def a = {
- | lazy val test: Unit = {
+ | lazy val test: scala.Unit = {
| scala.Predef.println();
| scala.Predef.println()
| };
@@ -1101,7 +1098,8 @@ trait ValAndDefPrintTests {
|}""", wrapCode = true)
}
-trait PackagePrintTests {
+@RunWith(classOf[JUnit4])
+class PackagePrintTest {
@Test def testPackage1 = assertPrintedCode(sm"""
|package foo.bar {
|
@@ -1139,7 +1137,8 @@ trait PackagePrintTests {
|}""", checkTypedTree = false)
}
-trait QuasiTreesPrintTests {
+@RunWith(classOf[JUnit4])
+class QuasiTreesPrintTest {
@Test def testQuasiIdent = assertTreeCode(q"*")("*")
@Test def testQuasiVal = assertTreeCode(q"val * : Unit = null")("val * : Unit = null")
diff --git a/test/junit/scala/reflect/internal/TreeGenTest.scala b/test/junit/scala/reflect/internal/TreeGenTest.scala
new file mode 100644
index 0000000000..db1ea5cf6a
--- /dev/null
+++ b/test/junit/scala/reflect/internal/TreeGenTest.scala
@@ -0,0 +1,51 @@
+package scala.reflect.internal
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.runtime.ScalaRunTime
+import scala.tools.nsc.symtab.SymbolTableForUnitTesting
+
+@RunWith(classOf[JUnit4])
+class TreeGenTest {
+ object symbolTable extends SymbolTableForUnitTesting
+
+ import symbolTable._
+
+ @Test
+ def attributedRefToTopLevelMemberNotPrefixedByThis_t9473_a(): Unit = {
+ val SomeClass = symbolOf[Some[_]]
+ val ref = gen.mkAttributedRef(SomeClass)
+ assertEquals("scala.Some", ref.toString) // was scala.this.Some
+ ref match {
+ case sel @ Select(pre @ Ident(preName), name) =>
+ assertEquals(TermName("scala"), preName)
+ assertEquals(TypeName("Some"), name)
+ assertEquals(SomeClass, sel.symbol)
+ case _ => fail(showRaw(ref))
+ }
+ }
+
+ @Test
+ def attributedRefToTopLevelMemberNotPrefixedByThis_t9473_b(): Unit = {
+ val ScalaRuntimeModule = symbolOf[ScalaRunTime.type].sourceModule
+ val ref = gen.mkAttributedRef(ScalaRuntimeModule)
+ assertEquals("scala.runtime.ScalaRunTime", ref.toString)
+ ref match {
+ case sel @ Select(Select(Ident(TermName("scala")), TermName("runtime")), TermName("ScalaRunTime")) =>
+ case _ => fail(showRaw(ref))
+ }
+ }
+ @Test
+ def attributedRefToTopLevelMemberNotPrefixedByThis_t9473_c(): Unit = {
+ val DummyImplicitClass = symbolOf[Predef.DummyImplicit]
+ val ref = gen.mkAttributedRef(DummyImplicitClass)
+ assertEquals("scala.Predef.DummyImplicit", ref.toString)
+// ref match {
+// case sel @ Select(Select(Ident(TermName("scala")), TermName("runtime")), TermName("ScalaRunTime")) =>
+// case _ => fail(showRaw(ref))
+// }
+ }
+}
diff --git a/test/junit/scala/reflect/internal/TypesTest.scala b/test/junit/scala/reflect/internal/TypesTest.scala
index 95194ef0a4..585493280b 100644
--- a/test/junit/scala/reflect/internal/TypesTest.scala
+++ b/test/junit/scala/reflect/internal/TypesTest.scala
@@ -1,9 +1,10 @@
package scala.reflect.internal
import org.junit.Assert._
-import org.junit.Test
+import org.junit.{Assert, Test}
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.collection.mutable
import scala.tools.nsc.symtab.SymbolTableForUnitTesting
@RunWith(classOf[JUnit4])
@@ -32,4 +33,110 @@ class TypesTest {
val uniquelyNarrowed2 = refinedType(boolWithString1narrow2 :: Nil, NoSymbol)
assert(uniquelyNarrowed1 =:= uniquelyNarrowed2)
}
+
+ @Test
+ def testTransitivityWithModuleTypeRef(): Unit = {
+ import rootMirror.EmptyPackageClass
+ val (module, moduleClass) = EmptyPackageClass.newModuleAndClassSymbol(TermName("O"), NoPosition, 0L)
+ val minfo = ClassInfoType(List(ObjectTpe), newScope, moduleClass)
+ module.moduleClass setInfo minfo
+ module setInfo module.moduleClass.tpe
+ val tp1 = TypeRef(ThisType(EmptyPackageClass), moduleClass, Nil)
+ val tp2 = SingleType(ThisType(EmptyPackageClass), module)
+ val tp3 = ThisType(moduleClass)
+ val tps = List(tp1, tp2, tp3)
+ val results = mutable.Buffer[String]()
+ tps.permutations.foreach {
+ case ts @ List(a, b, c) =>
+ def tsShownRaw = ts.map(t => showRaw(t)).mkString(", ")
+ if (a <:< b && b <:< c && !(a <:< c)) results += s"<:< intransitive: $tsShownRaw"
+ if (a =:= b && b =:= c && !(a =:= c)) results += s"=:= intransitive: $tsShownRaw"
+ }
+ results.toList match {
+ case Nil => // okay
+ case xs =>
+ Assert.fail(xs.mkString("\n"))
+ }
+ }
+
+ @Test
+ def testRefinementContains(): Unit = {
+ val refinement = typeOf[{def foo: Int}]
+ assert(refinement.isInstanceOf[RefinedType])
+ assert(refinement.contains(IntClass))
+ val elem0 = refinement.baseTypeSeq(0)
+ assert(elem0.isInstanceOf[RefinementTypeRef])
+ assert(elem0.contains(IntClass))
+ }
+
+ @Test
+ def testRefinedLubs(): Unit = {
+ // https://github.com/scala/scala-dev/issues/168
+ assertEquals(typeOf[Option[AnyVal]], lub(typeOf[Option[Int] with Option[Char]] :: typeOf[Option[Boolean] with Option[Short]] :: Nil))
+ assertEquals(typeOf[Option[AnyVal]], lub(typeOf[Option[Int] with Option[Char]] :: typeOf[Option[Boolean]] :: Nil))
+ assertEquals(typeOf[Option[AnyVal]], lub((typeOf[Option[Int] with Option[Char]] :: typeOf[Option[Boolean] with Option[Short]] :: Nil).reverse))
+ assertEquals(typeOf[Option[AnyVal]], lub((typeOf[Option[Int] with Option[Char]] :: typeOf[Option[Boolean]] :: Nil).reverse))
+ }
+
+ @Test
+ def testExistentialRefinement(): Unit = {
+ import rootMirror.EmptyPackageClass
+
+ // class M[A]
+ val MClass = EmptyPackageClass.newClass("M")
+ val A = MClass.newTypeParameter("A").setInfo(TypeBounds.empty)
+ MClass.setInfo(PolyType(A :: Nil, ClassInfoType(ObjectClass.tpeHK :: Nil, newScopeWith(), MClass)))
+
+ // (M[Int] with M[X] { def m: Any }) forSome { type X }
+ val X = NoSymbol.newExistential("X").setInfo(TypeBounds.empty)
+ val T: Type = {
+ val decls = newScopeWith(MClass.newMethod("m").setInfo(NullaryMethodType(AnyClass.tpeHK)))
+ val refined = refinedType(appliedType(MClass, IntClass.tpeHK) :: appliedType(MClass, X.tpeHK) :: Nil, NoSymbol, decls, NoPosition)
+ newExistentialType(X :: Nil, refined)
+ }
+
+ val RefinementClass = T.underlying.typeSymbol
+ assertTrue(RefinementClass.isRefinementClass)
+ TypeRef(NoPrefix, RefinementClass, Nil) match {
+ case rtr : RefinementTypeRef =>
+ // ContainsCollector needs to look inside the info of symbols of RefinementTypeRefs
+ assert(rtr.contains(X))
+ }
+
+ val underlying = T.underlying
+ val baseTypeSeqIndices = T.baseTypeSeq.toList.indices
+ for (i <- baseTypeSeqIndices) {
+ // Elements of the existential type should have the same type symbol as underlying
+ assertEquals(T.baseTypeSeq.typeSymbol(i), underlying.baseTypeSeq.typeSymbol(i))
+ }
+
+ // Type symbols should be distinct
+ def checkDistinctTypeSyms(bts: BaseTypeSeq): Unit = {
+ val syms = baseTypeSeqIndices.map(T.baseTypeSeq.typeSymbol)
+ assertEquals(syms, syms.distinct)
+ }
+ checkDistinctTypeSyms(T.baseTypeSeq)
+ checkDistinctTypeSyms(T.underlying.baseTypeSeq)
+
+ // This is the entry for the refinement class
+ assertTrue(T.baseTypeSeq.typeSymbol(0).isRefinementClass)
+ assertEquals("M[Int] with M[X]{def m: Any} forSome { type X }", T.baseTypeSeq.rawElem(0).toString)
+
+ // This is the entry for M. The raw entry is an existential over a RefinedType which encodes a lazily computed base type
+ assertEquals(T.baseTypeSeq.typeSymbol(1), MClass)
+ assertEquals("M[X] with M[Int] forSome { type X }", T.baseTypeSeq.rawElem(1).toString)
+ // calling `apply` merges the prefix/args of the elements ot the RefinedType and rewraps in the existential
+ assertEquals("M[_1] forSome { type X; type _1 >: X with Int }", T.baseTypeSeq.apply(1).toString)
+ }
+
+ @Test
+ def testExistentialMerge(): Unit = {
+ val ts = typeOf[Set[Any]] :: typeOf[Set[X] forSome { type X <: Y; type Y <: Int}] :: Nil
+ def merge(ts: List[Type]) = mergePrefixAndArgs(ts, Variance.Contravariant, lubDepth(ts))
+ val merged1 = merge(ts)
+ val merged2 = merge(ts.reverse)
+ assert(ts.forall(_ <:< merged1)) // use to fail before fix to mergePrefixAndArgs for existentials
+ assert(ts.forall(_ <:< merged2))
+ assert(merged1 =:= merged2)
+ }
}
diff --git a/test/junit/scala/runtime/LambdaDeserializerTest.java b/test/junit/scala/runtime/LambdaDeserializerTest.java
new file mode 100644
index 0000000000..4e9c5c8954
--- /dev/null
+++ b/test/junit/scala/runtime/LambdaDeserializerTest.java
@@ -0,0 +1,240 @@
+package scala.runtime;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.Serializable;
+import java.lang.invoke.*;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
+
+public final class LambdaDeserializerTest {
+ private LambdaHost lambdaHost = new LambdaHost();
+
+ @Test
+ public void serializationPrivate() {
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByPrivateImplMethod();
+ Assert.assertEquals(f1.apply(true), reconstitute(f1).apply(true));
+ }
+
+ @Test
+ public void serializationStatic() {
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByStaticImplMethod();
+ Assert.assertEquals(f1.apply(true), reconstitute(f1).apply(true));
+ }
+
+ @Test
+ public void serializationVirtualMethodReference() {
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByVirtualMethodReference();
+ Assert.assertEquals(f1.apply(true), reconstitute(f1).apply(true));
+ }
+
+ @Test
+ public void serializationInterfaceMethodReference() {
+ F1<I, Object> f1 = lambdaHost.lambdaBackedByInterfaceMethodReference();
+ I i = new I() {
+ };
+ Assert.assertEquals(f1.apply(i), reconstitute(f1).apply(i));
+ }
+
+ @Test
+ public void serializationStaticMethodReference() {
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByStaticMethodReference();
+ Assert.assertEquals(f1.apply(true), reconstitute(f1).apply(true));
+ }
+
+ @Test
+ public void serializationNewInvokeSpecial() {
+ F0<Object> f1 = lambdaHost.lambdaBackedByConstructorCall();
+ Assert.assertEquals(f1.apply(), reconstitute(f1).apply());
+ }
+
+ @Test
+ public void uncached() {
+ F0<Object> f1 = lambdaHost.lambdaBackedByConstructorCall();
+ F0<Object> reconstituted1 = reconstitute(f1);
+ F0<Object> reconstituted2 = reconstitute(f1);
+ Assert.assertNotEquals(reconstituted1.getClass(), reconstituted2.getClass());
+ }
+
+ @Test
+ public void cached() {
+ HashMap<String, MethodHandle> cache = new HashMap<>();
+ F0<Object> f1 = lambdaHost.lambdaBackedByConstructorCall();
+ F0<Object> reconstituted1 = reconstitute(f1, cache);
+ F0<Object> reconstituted2 = reconstitute(f1, cache);
+ Assert.assertEquals(reconstituted1.getClass(), reconstituted2.getClass());
+ }
+
+ @Test
+ public void cachedStatic() {
+ HashMap<String, MethodHandle> cache = new HashMap<>();
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByStaticImplMethod();
+ // Check that deserialization of a static lambda always returns the
+ // same instance.
+ Assert.assertSame(reconstitute(f1, cache), reconstitute(f1, cache));
+
+ // (as is the case with regular invocation.)
+ Assert.assertSame(f1, lambdaHost.lambdaBackedByStaticImplMethod());
+ }
+
+ @Test
+ public void implMethodNameChanged() {
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByStaticImplMethod();
+ SerializedLambda sl = writeReplace(f1);
+ checkIllegalAccess(sl, copySerializedLambda(sl, sl.getImplMethodName() + "___", sl.getImplMethodSignature()));
+ }
+
+ @Test
+ public void implMethodSignatureChanged() {
+ F1<Boolean, String> f1 = lambdaHost.lambdaBackedByStaticImplMethod();
+ SerializedLambda sl = writeReplace(f1);
+ checkIllegalAccess(sl, copySerializedLambda(sl, sl.getImplMethodName(), sl.getImplMethodSignature().replace("Boolean", "Integer")));
+ }
+
+ private void checkIllegalAccess(SerializedLambda allowed, SerializedLambda requested) {
+ try {
+ HashMap<String, MethodHandle> allowedMap = createAllowedMap(LambdaHost.lookup(), allowed);
+ LambdaDeserializer.deserializeLambda(MethodHandles.lookup(), null, allowedMap, requested);
+ throw new AssertionError();
+ } catch (IllegalArgumentException iae) {
+ if (!iae.getMessage().contains("Illegal lambda deserialization")) {
+ Assert.fail("Unexpected message: " + iae.getMessage());
+ }
+ }
+ }
+
+ private SerializedLambda copySerializedLambda(SerializedLambda sl, String implMethodName, String implMethodSignature) {
+ Object[] captures = new Object[sl.getCapturedArgCount()];
+ for (int i = 0; i < captures.length; i++) {
+ captures[i] = sl.getCapturedArg(i);
+ }
+ return new SerializedLambda(loadClass(sl.getCapturingClass()), sl.getFunctionalInterfaceClass(), sl.getFunctionalInterfaceMethodName(),
+ sl.getFunctionalInterfaceMethodSignature(), sl.getImplMethodKind(), sl.getImplClass(), implMethodName, implMethodSignature,
+ sl.getInstantiatedMethodType(), captures);
+ }
+
+ private Class<?> loadClass(String className) {
+ try {
+ return Class.forName(className.replace('/', '.'));
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private <A, B> A reconstitute(A f1) {
+ return reconstitute(f1, null);
+ }
+
+ @SuppressWarnings("unchecked")
+ private <A, B> A reconstitute(A f1, java.util.HashMap<String, MethodHandle> cache) {
+ try {
+ return deserizalizeLambdaCreatingAllowedMap(f1, cache, LambdaHost.lookup());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private <A> A deserizalizeLambdaCreatingAllowedMap(A f1, HashMap<String, MethodHandle> cache, MethodHandles.Lookup lookup) {
+ SerializedLambda serialized = writeReplace(f1);
+ HashMap<String, MethodHandle> allowed = createAllowedMap(lookup, serialized);
+ return (A) LambdaDeserializer.deserializeLambda(lookup, cache, allowed, serialized);
+ }
+
+ private HashMap<String, MethodHandle> createAllowedMap(MethodHandles.Lookup lookup, SerializedLambda serialized) {
+ Class<?> implClass = classForName(serialized.getImplClass().replace("/", "."), lookup.lookupClass().getClassLoader());
+ MethodHandle implMethod = findMember(lookup, serialized.getImplMethodKind(), implClass, serialized.getImplMethodName(), MethodType.fromMethodDescriptorString(serialized.getImplMethodSignature(), lookup.lookupClass().getClassLoader()));
+ HashMap<String, MethodHandle> allowed = new HashMap<>();
+ allowed.put(LambdaDeserialize.nameAndDescriptorKey(serialized.getImplMethodName(), serialized.getImplMethodSignature()), implMethod);
+ return allowed;
+ }
+
+ private Class<?> classForName(String className, ClassLoader classLoader) {
+ try {
+ return Class.forName(className, true, classLoader);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private MethodHandle findMember(MethodHandles.Lookup lookup, int kind, Class<?> owner,
+ String name, MethodType signature) {
+ try {
+ switch (kind) {
+ case MethodHandleInfo.REF_invokeStatic:
+ return lookup.findStatic(owner, name, signature);
+ case MethodHandleInfo.REF_newInvokeSpecial:
+ return lookup.findConstructor(owner, signature);
+ case MethodHandleInfo.REF_invokeVirtual:
+ case MethodHandleInfo.REF_invokeInterface:
+ return lookup.findVirtual(owner, name, signature);
+ case MethodHandleInfo.REF_invokeSpecial:
+ return lookup.findSpecial(owner, name, signature, owner);
+ default:
+ throw new IllegalArgumentException();
+ }
+ } catch (NoSuchMethodException | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private <A> SerializedLambda writeReplace(A f1) {
+ try {
+ Method writeReplace = f1.getClass().getDeclaredMethod("writeReplace");
+ writeReplace.setAccessible(true);
+ return (SerializedLambda) writeReplace.invoke(f1);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
+
+
+interface F1<A, B> extends Serializable {
+ B apply(A a);
+}
+
+interface F0<A> extends Serializable {
+ A apply();
+}
+
+class LambdaHost {
+ public F1<Boolean, String> lambdaBackedByPrivateImplMethod() {
+ int local = 42;
+ return (b) -> Arrays.asList(local, b ? "true" : "false", LambdaHost.this).toString();
+ }
+
+ @SuppressWarnings("Convert2MethodRef")
+ public F1<Boolean, String> lambdaBackedByStaticImplMethod() {
+ return (b) -> String.valueOf(b);
+ }
+
+ public F1<Boolean, String> lambdaBackedByStaticMethodReference() {
+ return String::valueOf;
+ }
+
+ public F1<Boolean, String> lambdaBackedByVirtualMethodReference() {
+ return Object::toString;
+ }
+
+ public F1<I, Object> lambdaBackedByInterfaceMethodReference() {
+ return I::i;
+ }
+
+ public F0<Object> lambdaBackedByConstructorCall() {
+ return String::new;
+ }
+
+ public static MethodHandles.Lookup lookup() {
+ return MethodHandles.lookup();
+ }
+}
+
+interface I {
+ default String i() {
+ return "i";
+ }
+}
diff --git a/test/junit/scala/runtime/ScalaRunTimeTest.scala b/test/junit/scala/runtime/ScalaRunTimeTest.scala
index e28deae786..5bfb12610e 100644
--- a/test/junit/scala/runtime/ScalaRunTimeTest.scala
+++ b/test/junit/scala/runtime/ScalaRunTimeTest.scala
@@ -5,71 +5,11 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-/** Tests for the private class DefaultPromise */
+/** Tests for the runtime object ScalaRunTime */
@RunWith(classOf[JUnit4])
class ScalaRunTimeTest {
@Test
- def testIsTuple() {
- import ScalaRunTime.isTuple
- def check(v: Any) = {
- assertTrue(v.toString, isTuple(v))
- }
-
- val s = ""
- check(Tuple1(s))
- check((s, s))
- check((s, s, s))
- check((s, s, s, s))
- check((s, s, s, s, s))
- check((s, s, s, s, s, s))
- check((s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
- check((s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s))
-
- // some specialized variants will have mangled classnames
- check(Tuple1(0))
- check((0, 0))
- check((0, 0, 0))
- check((0, 0, 0, 0))
- check((0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- check((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
-
- case class C()
- val c = new C()
- assertFalse(c.toString, isTuple(c))
- }
-
- @Test
- def testStringOf() {
+ def testStingOf() {
import ScalaRunTime.stringOf
import scala.collection._
import parallel.ParIterable
@@ -109,14 +49,17 @@ class ScalaRunTimeTest {
val tuple1 = Tuple1(0)
assertEquals("(0,)", stringOf(tuple1))
assertEquals("(0,)", stringOf(tuple1, 0))
+ assertEquals("(Array(0),)", stringOf(Tuple1(Array(0))))
val tuple2 = Tuple2(0, 1)
assertEquals("(0,1)", stringOf(tuple2))
assertEquals("(0,1)", stringOf(tuple2, 0))
+ assertEquals("(Array(0),1)", stringOf((Array(0), 1)))
val tuple3 = Tuple3(0, 1, 2)
assertEquals("(0,1,2)", stringOf(tuple3))
assertEquals("(0,1,2)", stringOf(tuple3, 0))
+ assertEquals("(Array(0),1,2)", stringOf((Array(0), 1, 2)))
val x = new Object {
override def toString(): String = "this is the stringOf string"
diff --git a/test/junit/scala/runtime/ZippedTest.scala b/test/junit/scala/runtime/ZippedTest.scala
new file mode 100644
index 0000000000..d3ce4945aa
--- /dev/null
+++ b/test/junit/scala/runtime/ZippedTest.scala
@@ -0,0 +1,68 @@
+
+package scala.runtime
+
+import scala.language.postfixOps
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+/** Tests Tuple?Zipped */
+@RunWith(classOf[JUnit4])
+class ZippedTest {
+ @Test
+ def crossZipped() {
+
+ val xs1 = List.range(1, 100)
+ val xs2 = xs1.view
+ val xs3 = xs1 take 10
+ val ss1 = Stream from 1
+ val ss2 = ss1.view
+ val ss3 = ss1 take 10
+ val as1 = 1 to 100 toArray
+ val as2 = as1.view
+ val as3 = as1 take 10
+
+ def xss1 = List[Seq[Int]](xs1, xs2, xs3, ss1, ss2, ss3, as1, as2, as3)
+ def xss2 = List[Seq[Int]](xs1, xs2, xs3, ss3, as1, as2, as3) // no infinities
+ def xss3 = List[Seq[Int]](xs2, xs3, ss3, as1) // representative sampling
+
+ for (cc1 <- xss1 ; cc2 <- xss2) {
+ val sum1 = (cc1, cc2).zipped map { case (x, y) => x + y } sum
+ val sum2 = (cc1, cc2).zipped map (_ + _) sum
+
+ assert(sum1 == sum2)
+ }
+
+ for (cc1 <- xss1 ; cc2 <- xss2 ; cc3 <- xss3) {
+ val sum1 = (cc1, cc2, cc3).zipped map { case (x, y, z) => x + y + z } sum
+ val sum2 = (cc1, cc2, cc3).zipped map (_ + _ + _) sum
+
+ assert(sum1 == sum2)
+ }
+
+ assert((ss1, ss1).zipped exists ((x, y) => true))
+ assert((ss1, ss1, ss1).zipped exists ((x, y, z) => true))
+
+ assert(!(ss1, ss2, 1 to 3).zipped.exists(_ + _ + _ > 100000))
+ assert((1 to 3, ss1, ss2).zipped.forall(_ + _ + _ > 0))
+ assert((ss1, 1 to 3, ss2).zipped.map(_ + _ + _).size == 3)
+ }
+
+ @Test
+ def test_si9379() {
+ class Boom {
+ private var i = -1
+ def inc = {
+ i += 1
+ if (i > 1000) throw new NoSuchElementException("Boom! Too many elements!")
+ i
+ }
+ }
+ val b = new Boom
+ val s = Stream.continually(b.inc)
+ // zipped.toString must allow s to short-circuit evaluation
+ assertTrue((s, s).zipped.toString contains s.toString)
+ }
+}
diff --git a/test/junit/scala/sys/process/t7350.scala b/test/junit/scala/sys/process/t7350.scala
new file mode 100644
index 0000000000..9fdcac8ccc
--- /dev/null
+++ b/test/junit/scala/sys/process/t7350.scala
@@ -0,0 +1,298 @@
+package scala.sys.process
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+import java.io.{InputStream, OutputStream, PipedInputStream, PipedOutputStream, ByteArrayInputStream,
+ ByteArrayOutputStream, IOException, Closeable}
+import java.lang.reflect.InvocationTargetException
+import scala.concurrent.{Await, Future}
+import scala.concurrent.duration.{Duration, SECONDS}
+import scala.concurrent.ExecutionContext.Implicits.global
+import scala.util.control.Exception.ignoring
+
+// Each test normally ends in a moment, but for failure cases, waits until one second.
+
+@RunWith(classOf[JUnit4])
+class PipedProcessTest {
+ class ProcessMock(error: Boolean) extends Process {
+ var destroyCount = 0
+ def isAlive() = false
+ def exitValue(): Int = {
+ if (error) {
+ throw new InterruptedException()
+ }
+ 0
+ }
+ def destroy(): Unit = { destroyCount += 1 }
+ }
+
+ class ProcessBuilderMock(process: Process, error: Boolean) extends ProcessBuilder.AbstractBuilder {
+ override def run(io: ProcessIO): Process = {
+ if (error) {
+ throw new IOException()
+ }
+ process
+ }
+ }
+
+ class PipeSinkMock extends Process.PipeSink("PipeSinkMock") {
+ var releaseCount = 0
+ override val pipe = null
+ override val sink = null
+ override def run(): Unit = {}
+ override def connectOut(out: OutputStream): Unit = {}
+ override def connectIn(pipeOut: PipedOutputStream): Unit = {}
+ override def release(): Unit = { releaseCount += 1 }
+ }
+
+ class PipeSourceMock extends Process.PipeSource("PipeSourceMock") {
+ var releaseCount = 0
+ override val pipe = null
+ override val source = null
+ override def run(): Unit = {}
+ override def connectIn(in: InputStream): Unit = {}
+ override def connectOut(sink: Process.PipeSink): Unit = {}
+ override def release(): Unit = { releaseCount += 1 }
+ }
+
+ class PipedProcesses(a: ProcessBuilder, b: ProcessBuilder, defaultIO: ProcessIO, toError: Boolean)
+ extends Process.PipedProcesses(a, b, defaultIO, toError) {
+ def callRunAndExitValue(source: Process.PipeSource, sink: Process.PipeSink) = {
+ val m = classOf[Process.PipedProcesses].getDeclaredMethod("runAndExitValue", classOf[Process.PipeSource], classOf[Process.PipeSink])
+ m.setAccessible(true)
+ try m.invoke(this, source, sink).asInstanceOf[Option[Int]]
+ catch {
+ case err: InvocationTargetException => throw err.getTargetException
+ }
+ }
+ }
+
+ // PipedProcesses need not to release resources when it normally end
+ @Test
+ def normallyEnd() {
+ val io = BasicIO(false, ProcessLogger(_ => ()))
+ val source = new PipeSourceMock
+ val sink = new PipeSinkMock
+ val a = new ProcessMock(error = false)
+ val b = new ProcessMock(error = false)
+ val p = new PipedProcesses(new ProcessBuilderMock(a, error = false), new ProcessBuilderMock(b, error = false), io, false)
+ val f = Future {
+ p.callRunAndExitValue(source, sink)
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(source.releaseCount == 0)
+ assert(sink.releaseCount == 0)
+ assert(a.destroyCount == 0)
+ assert(b.destroyCount == 0)
+ }
+
+ // PipedProcesses must release resources when b.run() failed
+ @Test
+ def bFailed() {
+ val io = BasicIO(false, ProcessLogger(_ => ()))
+ val source = new PipeSourceMock
+ val sink = new PipeSinkMock
+ val a = new ProcessMock(error = false)
+ val b = new ProcessMock(error = false)
+ val p = new PipedProcesses(new ProcessBuilderMock(a, error = false), new ProcessBuilderMock(b, error = true), io, false)
+ val f = Future {
+ ignoring(classOf[IOException]) {
+ p.callRunAndExitValue(source, sink)
+ }
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(source.releaseCount == 1)
+ assert(sink.releaseCount == 1)
+ assert(a.destroyCount == 0)
+ assert(b.destroyCount == 0)
+ }
+
+ // PipedProcesses must release resources when a.run() failed
+ @Test
+ def aFailed() {
+ val io = BasicIO(false, ProcessLogger(_ => ()))
+ val source = new PipeSourceMock
+ val sink = new PipeSinkMock
+ val a = new ProcessMock(error = false)
+ val b = new ProcessMock(error = false)
+ val p = new PipedProcesses(new ProcessBuilderMock(a, error = true), new ProcessBuilderMock(b, error = false), io, false)
+ val f = Future {
+ ignoring(classOf[IOException]) {
+ p.callRunAndExitValue(source, sink)
+ }
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(source.releaseCount == 1)
+ assert(sink.releaseCount == 1)
+ assert(a.destroyCount == 0)
+ assert(b.destroyCount == 1)
+ }
+
+ // PipedProcesses must release resources when interrupted during waiting for first.exitValue()
+ @Test
+ def firstInterrupted() {
+ val io = BasicIO(false, ProcessLogger(_ => ()))
+ val source = new PipeSourceMock
+ val sink = new PipeSinkMock
+ val a = new ProcessMock(error = true)
+ val b = new ProcessMock(error = false)
+ val p = new PipedProcesses(new ProcessBuilderMock(a, error = false), new ProcessBuilderMock(b, error = false), io, false)
+ val f = Future {
+ p.callRunAndExitValue(source, sink)
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(source.releaseCount == 1)
+ assert(sink.releaseCount == 1)
+ assert(a.destroyCount == 1)
+ assert(b.destroyCount == 1)
+ }
+
+ // PipedProcesses must release resources when interrupted during waiting for second.exitValue()
+ @Test
+ def secondInterrupted() {
+ val io = BasicIO(false, ProcessLogger(_ => ()))
+ val source = new PipeSourceMock
+ val sink = new PipeSinkMock
+ val a = new ProcessMock(error = false)
+ val b = new ProcessMock(error = true)
+ val p = new PipedProcesses(new ProcessBuilderMock(a, error = false), new ProcessBuilderMock(b, error = false), io, false)
+ val f = Future {
+ p.callRunAndExitValue(source, sink)
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(source.releaseCount == 1)
+ assert(sink.releaseCount == 1)
+ assert(a.destroyCount == 1)
+ assert(b.destroyCount == 1)
+ }
+}
+
+@RunWith(classOf[JUnit4])
+class PipeSourceSinkTest {
+ def throwsIOException(f: => Unit) = {
+ try { f; false }
+ catch { case _: IOException => true }
+ }
+
+ class PipeSink extends Process.PipeSink("TestPipeSink") {
+ def ensureRunloopStarted() = {
+ while (sink.size() > 0) {
+ Thread.sleep(1)
+ }
+ }
+ def isReleased = {
+ val field = classOf[Process.PipeSink].getDeclaredField("pipe")
+ field.setAccessible(true)
+ val pipe = field.get(this).asInstanceOf[PipedInputStream]
+ !this.isAlive && throwsIOException { pipe.read() }
+ }
+ }
+
+ class PipeSource extends Process.PipeSource("TestPipeSource") {
+ def ensureRunloopStarted() = {
+ while (source.size() > 0) {
+ Thread.sleep(1)
+ }
+ }
+ def isReleased = {
+ val field = classOf[Process.PipeSource].getDeclaredField("pipe")
+ field.setAccessible(true)
+ val pipe = field.get(this).asInstanceOf[PipedOutputStream]
+ !this.isAlive && throwsIOException { pipe.write(1) }
+ }
+ }
+
+ trait CloseChecking extends Closeable {
+ var closed = false
+ override def close() = closed = true
+ }
+ class DebugOutputStream extends ByteArrayOutputStream with CloseChecking
+ class DebugInputStream(s: String) extends ByteArrayInputStream(s.getBytes()) with CloseChecking
+ class DebugInfinityInputStream extends InputStream with CloseChecking {
+ def read() = 1
+ }
+
+ def sourceSink() = {
+ val source = new PipeSource
+ val sink = new PipeSink
+ source connectOut sink
+ source.start()
+ sink.start()
+ (source, sink)
+ }
+
+ // PipeSource and PipeSink must release resources when it normally end
+ @Test
+ def normallyEnd() {
+ val in = new DebugInputStream("aaa")
+ val (source, sink) = sourceSink()
+ val out = new DebugOutputStream
+ source connectIn in
+ sink connectOut out
+ val f = Future {
+ source.join()
+ sink.join()
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(in.closed == true)
+ assert(out.closed == true)
+ assert(source.isReleased == true)
+ assert(sink.isReleased == true)
+ }
+
+ // PipeSource and PipeSink must release resources when interrupted during waiting for source.take()
+ @Test
+ def sourceInterrupted() {
+ val (source, sink) = sourceSink()
+ val out = new DebugOutputStream
+ sink connectOut out
+ val f = Future {
+ sink.ensureRunloopStarted()
+ source.release()
+ sink.release()
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(out.closed == true)
+ assert(source.isReleased == true)
+ assert(sink.isReleased == true)
+ }
+
+ // PipeSource and PipeSink must release resources when interrupted during waiting for sink.take()
+ @Test
+ def sinkInterrupted() {
+ val in = new DebugInputStream("aaa")
+ val (source, sink) = sourceSink()
+ source connectIn in
+ val f = Future {
+ source.ensureRunloopStarted()
+ source.release()
+ sink.release()
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(in.closed == true)
+ assert(source.isReleased == true)
+ assert(sink.isReleased == true)
+ }
+
+ // PipeSource and PipeSink must release resources when interrupted during copy streams"
+ @Test
+ def runloopInterrupted() {
+ val in = new DebugInfinityInputStream
+ val (source, sink) = sourceSink()
+ val out = new DebugOutputStream
+ source connectIn in
+ sink connectOut out
+ val f = Future {
+ source.ensureRunloopStarted()
+ sink.ensureRunloopStarted()
+ source.release()
+ sink.release()
+ }
+ Await.result(f, Duration(1, SECONDS))
+ assert(in.closed == true)
+ assert(out.closed == true)
+ assert(source.isReleased == true)
+ assert(sink.isReleased == true)
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/BTypesTest.scala b/test/junit/scala/tools/nsc/backend/jvm/BTypesTest.scala
index 6ada0e20fb..58df4691e4 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/BTypesTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/BTypesTest.scala
@@ -1,37 +1,29 @@
package scala.tools.nsc
package backend.jvm
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes
-import org.junit.Assert._
-
-import scala.tools.nsc.backend.jvm.CodeGenTools._
-import scala.tools.testing.ClearAfterClass
-object BTypesTest extends ClearAfterClass.Clearable {
- var compiler = {
- val comp = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:none")
- new comp.Run() // initializes some of the compiler
- comp.exitingDelambdafy(comp.scalaPrimitives.init()) // needed: it's only done when running the backend, and we don't actually run the compiler
- comp.exitingDelambdafy(comp.genBCode.bTypes.initializeCoreBTypes())
- comp
- }
- def clear(): Unit = { compiler = null }
-}
+import scala.tools.asm.Opcodes
+import scala.tools.testing.BytecodeTesting
@RunWith(classOf[JUnit4])
-class BTypesTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = BTypesTest
-
- val compiler = BTypesTest.compiler
- import compiler.genBCode.bTypes._
+class BTypesTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:none"
+ import compiler.global
+ locally {
+ new global.Run() // initializes some of the compiler
+ global.exitingDelambdafy(global.scalaPrimitives.init()) // needed: it's only done when running the backend, and we don't actually run the compiler
+ global.exitingDelambdafy(global.genBCode.bTypes.initializeCoreBTypes())
+ }
+ import global.genBCode.bTypes._
- def classBTFS(sym: compiler.Symbol) = compiler.exitingDelambdafy(classBTypeFromSymbol(sym))
+ def classBTFS(sym: global.Symbol) = global.exitingDelambdafy(classBTypeFromSymbol(sym))
- def jlo = compiler.definitions.ObjectClass
- def jls = compiler.definitions.StringClass
+ def jlo = global.definitions.ObjectClass
+ def jls = global.definitions.StringClass
def o = classBTFS(jlo)
def s = classBTFS(jls)
def oArr = ArrayBType(o)
diff --git a/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala b/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala
new file mode 100644
index 0000000000..00b6d1cc42
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/BytecodeTest.scala
@@ -0,0 +1,198 @@
+package scala.tools.nsc.backend.jvm
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.asm.Opcodes._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class BytecodeTest extends BytecodeTesting {
+ import compiler._
+
+ @Test
+ def t6288bJumpPosition(): Unit = {
+ val code =
+ """object Case3 { // 01
+ | def unapply(z: Any): Option[Int] = Some(-1) // 02
+ | def main(args: Array[String]) { // 03
+ | ("": Any) match { // 04
+ | case x : String => // 05
+ | println("case 0") // 06 println and jump at 6
+ | case _ => // 07
+ | println("default") // 08 println and jump at 8
+ | } // 09
+ | println("done") // 10
+ | }
+ |}
+ """.stripMargin
+ val List(mirror, module) = compileClasses(code)
+
+ val unapplyLineNumbers = getInstructions(module, "unapply").filter(_.isInstanceOf[LineNumber])
+ assert(unapplyLineNumbers == List(LineNumber(2, Label(0))), unapplyLineNumbers)
+
+ val expected = List(
+ LineNumber(4, Label(0)),
+ LineNumber(5, Label(5)),
+ Jump(IFEQ, Label(20)),
+
+ LineNumber(6, Label(11)),
+ Invoke(INVOKEVIRTUAL, "scala/Predef$", "println", "(Ljava/lang/Object;)V", false),
+ Jump(GOTO, Label(33)),
+
+ LineNumber(5, Label(20)),
+ Jump(GOTO, Label(24)),
+
+ LineNumber(8, Label(24)),
+ Invoke(INVOKEVIRTUAL, "scala/Predef$", "println", "(Ljava/lang/Object;)V", false),
+ Jump(GOTO, Label(33)),
+
+ LineNumber(10, Label(33)),
+ Invoke(INVOKEVIRTUAL, "scala/Predef$", "println", "(Ljava/lang/Object;)V", false)
+ )
+
+ val mainIns = getInstructions(module, "main") filter {
+ case _: LineNumber | _: Invoke | _: Jump => true
+ case _ => false
+ }
+ assertSameCode(mainIns, expected)
+ }
+
+ @Test
+ def bytecodeForBranches(): Unit = {
+ val code =
+ """class C {
+ | def t1(b: Boolean) = if (b) 1 else 2
+ | def t2(x: Int) = if (x == 393) 1 else 2
+ | def t3(a: Array[String], b: AnyRef) = a != b && b == a
+ | def t4(a: AnyRef) = a == null || null != a
+ | def t5(a: AnyRef) = (a eq null) || (null ne a)
+ | def t6(a: Int, b: Boolean) = if ((a == 10) && b || a != 1) 1 else 2
+ | def t7(a: AnyRef, b: AnyRef) = a == b
+ | def t8(a: AnyRef) = Nil == a || "" != a
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+
+ // t1: no unnecessary GOTOs
+ assertSameCode(getMethod(c, "t1"), List(
+ VarOp(ILOAD, 1), Jump(IFEQ, Label(6)),
+ Op(ICONST_1), Jump(GOTO, Label(9)),
+ Label(6), Op(ICONST_2),
+ Label(9), Op(IRETURN)))
+
+ // t2: no unnecessary GOTOs
+ assertSameCode(getMethod(c, "t2"), List(
+ VarOp(ILOAD, 1), IntOp(SIPUSH, 393), Jump(IF_ICMPNE, Label(7)),
+ Op(ICONST_1), Jump(GOTO, Label(10)),
+ Label(7), Op(ICONST_2),
+ Label(10), Op(IRETURN)))
+
+ // t3: Array == is translated to reference equality, AnyRef == to null checks and equals
+ assertSameCode(getMethod(c, "t3"), List(
+ // Array ==
+ VarOp(ALOAD, 1), VarOp(ALOAD, 2), Jump(IF_ACMPEQ, Label(23)),
+ // AnyRef ==
+ VarOp(ALOAD, 2), VarOp(ALOAD, 1), VarOp(ASTORE, 3), Op(DUP), Jump(IFNONNULL, Label(14)),
+ Op(POP), VarOp(ALOAD, 3), Jump(IFNULL, Label(19)), Jump(GOTO, Label(23)),
+ Label(14), VarOp(ALOAD, 3), Invoke(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z", false), Jump(IFEQ, Label(23)),
+ Label(19), Op(ICONST_1), Jump(GOTO, Label(26)),
+ Label(23), Op(ICONST_0),
+ Label(26), Op(IRETURN)))
+
+ val t4t5 = List(
+ VarOp(ALOAD, 1), Jump(IFNULL, Label(6)),
+ VarOp(ALOAD, 1), Jump(IFNULL, Label(10)),
+ Label(6), Op(ICONST_1), Jump(GOTO, Label(13)),
+ Label(10), Op(ICONST_0),
+ Label(13), Op(IRETURN))
+
+ // t4: one side is known null, so just a null check on the other
+ assertSameCode(getMethod(c, "t4"), t4t5)
+
+ // t5: one side known null, so just a null check on the other
+ assertSameCode(getMethod(c, "t5"), t4t5)
+
+ // t6: no unnecessary GOTOs
+ assertSameCode(getMethod(c, "t6"), List(
+ VarOp(ILOAD, 1), IntOp(BIPUSH, 10), Jump(IF_ICMPNE, Label(7)),
+ VarOp(ILOAD, 2), Jump(IFNE, Label(12)),
+ Label(7), VarOp(ILOAD, 1), Op(ICONST_1), Jump(IF_ICMPEQ, Label(16)),
+ Label(12), Op(ICONST_1), Jump(GOTO, Label(19)),
+ Label(16), Op(ICONST_2),
+ Label(19), Op(IRETURN)))
+
+ // t7: universal equality
+ assertInvoke(getMethod(c, "t7"), "scala/runtime/BoxesRunTime", "equals")
+
+ // t8: no null checks invoking equals on modules and constants
+ assertSameCode(getMethod(c, "t8"), List(
+ Field(GETSTATIC, "scala/collection/immutable/Nil$", "MODULE$", "Lscala/collection/immutable/Nil$;"), VarOp(ALOAD, 1), Invoke(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z", false), Jump(IFNE, Label(10)),
+ Ldc(LDC, ""), VarOp(ALOAD, 1), Invoke(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z", false), Jump(IFNE, Label(14)),
+ Label(10), Op(ICONST_1), Jump(GOTO, Label(17)),
+ Label(14), Op(ICONST_0),
+ Label(17), Op(IRETURN)))
+ }
+
+ @Test // wrong local variable table for methods containing while loops
+ def t9179(): Unit = {
+ val code =
+ """class C {
+ | def t(): Unit = {
+ | var x = ""
+ | while (x != null) {
+ | foo()
+ | x = null
+ | }
+ | bar()
+ | }
+ | def foo(): Unit = ()
+ | def bar(): Unit = ()
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ val t = getMethod(c, "t")
+ val isFrameLine = (x: Instruction) => x.isInstanceOf[FrameEntry] || x.isInstanceOf[LineNumber]
+ assertSameCode(t.instructions.filterNot(isFrameLine), List(
+ Label(0), Ldc(LDC, ""), Label(3), VarOp(ASTORE, 1),
+ Label(5), VarOp(ALOAD, 1), Jump(IFNULL, Label(21)),
+ Label(10), VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "C", "foo", "()V", false), Label(14), Op(ACONST_NULL), VarOp(ASTORE, 1), Label(18), Jump(GOTO, Label(5)),
+ Label(21), VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "C", "bar", "()V", false), Label(26), Op(RETURN), Label(28)))
+ val labels = t.instructions collect { case l: Label => l }
+ val x = t.localVars.find(_.name == "x").get
+ assertEquals(x.start, labels(1))
+ assertEquals(x.end, labels(7))
+ }
+
+ @Test
+ def sd186_traitLineNumber(): Unit = {
+ val code =
+ """trait T {
+ | def t(): Unit = {
+ | toString
+ | toString
+ | }
+ |}
+ """.stripMargin
+ val t = compileClass(code)
+ val tMethod = getMethod(t, "t$")
+ val invoke = Invoke(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;", false)
+ // ths static accessor is positioned at the line number of the accessed method.
+ assertSameCode(tMethod.instructions,
+ List(Label(0), LineNumber(2, Label(0)), VarOp(ALOAD, 0), Invoke(INVOKESPECIAL, "T", "t", "()V", true), Op(RETURN), Label(4))
+ )
+ }
+
+ @Test
+ def sd233(): Unit = {
+ val code = "def f = { println(1); synchronized(println(2)) }"
+ val m = compileMethod(code)
+ val List(ExceptionHandler(_, _, _, desc)) = m.handlers
+ assert(desc == None, desc)
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/CodeGenTools.scala b/test/junit/scala/tools/nsc/backend/jvm/CodeGenTools.scala
deleted file mode 100644
index ee9580c1c3..0000000000
--- a/test/junit/scala/tools/nsc/backend/jvm/CodeGenTools.scala
+++ /dev/null
@@ -1,178 +0,0 @@
-package scala.tools.nsc.backend.jvm
-
-import org.junit.Assert._
-
-import scala.collection.mutable.ListBuffer
-import scala.reflect.internal.util.BatchSourceFile
-import scala.reflect.io.VirtualDirectory
-import scala.tools.asm.Opcodes
-import scala.tools.asm.tree.{AbstractInsnNode, ClassNode, MethodNode}
-import scala.tools.cmd.CommandLineParser
-import scala.tools.nsc.io.AbstractFile
-import scala.tools.nsc.reporters.StoreReporter
-import scala.tools.nsc.settings.MutableSettings
-import scala.tools.nsc.{Settings, Global}
-import scala.tools.partest.ASMConverters
-import scala.collection.JavaConverters._
-import scala.tools.testing.TempDir
-import AsmUtils._
-
-object CodeGenTools {
- import ASMConverters._
-
- def genMethod( flags: Int = Opcodes.ACC_PUBLIC,
- name: String = "m",
- descriptor: String = "()V",
- genericSignature: String = null,
- throwsExceptions: Array[String] = null,
- handlers: List[ExceptionHandler] = Nil,
- localVars: List[LocalVariable] = Nil)(body: Instruction*): MethodNode = {
- val node = new MethodNode(flags, name, descriptor, genericSignature, throwsExceptions)
- applyToMethod(node, Method(body.toList, handlers, localVars))
- node
- }
-
- def wrapInClass(method: MethodNode): ClassNode = {
- val cls = new ClassNode()
- cls.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, "C", null, "java/lang/Object", null)
- cls.methods.add(method)
- cls
- }
-
- private def resetOutput(compiler: Global): Unit = {
- compiler.settings.outputDirs.setSingleOutput(new VirtualDirectory("(memory)", None))
- }
-
- def newCompiler(defaultArgs: String = "-usejavacp", extraArgs: String = ""): Global = {
- val compiler = newCompilerWithoutVirtualOutdir(defaultArgs, extraArgs)
- resetOutput(compiler)
- compiler
- }
-
- def newCompilerWithoutVirtualOutdir(defaultArgs: String = "-usejavacp", extraArgs: String = ""): Global = {
- val settings = new Settings()
- val args = (CommandLineParser tokenize defaultArgs) ++ (CommandLineParser tokenize extraArgs)
- settings.processArguments(args, processAll = true)
- new Global(settings, new StoreReporter)
- }
-
- def newRun(compiler: Global): compiler.Run = {
- compiler.reporter.reset()
- resetOutput(compiler)
- new compiler.Run()
- }
-
- def reporter(compiler: Global) = compiler.reporter.asInstanceOf[StoreReporter]
-
- def makeSourceFile(code: String, filename: String): BatchSourceFile = new BatchSourceFile(filename, code)
-
- def getGeneratedClassfiles(outDir: AbstractFile): List[(String, Array[Byte])] = {
- def files(dir: AbstractFile): List[(String, Array[Byte])] = {
- val res = ListBuffer.empty[(String, Array[Byte])]
- for (f <- dir.iterator) {
- if (!f.isDirectory) res += ((f.name, f.toByteArray))
- else if (f.name != "." && f.name != "..") res ++= files(f)
- }
- res.toList
- }
- files(outDir)
- }
-
- def checkReport(compiler: Global, allowMessage: StoreReporter#Info => Boolean = _ => false): Unit = {
- val disallowed = reporter(compiler).infos.toList.filter(!allowMessage(_)) // toList prevents an infer-non-wildcard-existential warning.
- if (disallowed.nonEmpty) {
- val msg = disallowed.mkString("\n")
- assert(false, "The compiler issued non-allowed warnings or errors:\n" + msg)
- }
- }
-
- def compile(compiler: Global)(scalaCode: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): List[(String, Array[Byte])] = {
- val run = newRun(compiler)
- run.compileSources(makeSourceFile(scalaCode, "unitTestSource.scala") :: javaCode.map(p => makeSourceFile(p._1, p._2)))
- checkReport(compiler, allowMessage)
- getGeneratedClassfiles(compiler.settings.outputDirs.getSingleOutput.get)
- }
-
- /**
- * Compile multiple Scala files separately into a single output directory.
- *
- * Note that a new compiler instance is created for compiling each file because symbols survive
- * across runs. This makes separate compilation slower.
- *
- * The output directory is a physical directory, I have not figured out if / how it's possible to
- * add a VirtualDirectory to the classpath of a compiler.
- */
- def compileSeparately(codes: List[String], extraArgs: String = "", allowMessage: StoreReporter#Info => Boolean = _ => false, afterEach: AbstractFile => Unit = _ => ()): List[(String, Array[Byte])] = {
- val outDir = AbstractFile.getDirectory(TempDir.createTempDir())
- val outDirPath = outDir.canonicalPath
- val argsWithOutDir = extraArgs + s" -d $outDirPath -cp $outDirPath"
-
- for (code <- codes) {
- val compiler = newCompilerWithoutVirtualOutdir(extraArgs = argsWithOutDir)
- new compiler.Run().compileSources(List(makeSourceFile(code, "unitTestSource.scala")))
- checkReport(compiler, allowMessage)
- afterEach(outDir)
- }
-
- val classfiles = getGeneratedClassfiles(outDir)
- outDir.delete()
- classfiles
- }
-
- def compileClassesSeparately(codes: List[String], extraArgs: String = "", allowMessage: StoreReporter#Info => Boolean = _ => false, afterEach: AbstractFile => Unit = _ => ()) = {
- readAsmClasses(compileSeparately(codes, extraArgs, allowMessage, afterEach))
- }
-
- def readAsmClasses(classfiles: List[(String, Array[Byte])]) = {
- classfiles.map(p => AsmUtils.readClass(p._2)).sortBy(_.name)
- }
-
- def compileClasses(compiler: Global)(code: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): List[ClassNode] = {
- readAsmClasses(compile(compiler)(code, javaCode, allowMessage))
- }
-
- def compileMethods(compiler: Global)(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): List[MethodNode] = {
- compileClasses(compiler)(s"class C { $code }", allowMessage = allowMessage).head.methods.asScala.toList.filterNot(_.name == "<init>")
- }
-
- def singleMethodInstructions(compiler: Global)(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): List[Instruction] = {
- val List(m) = compileMethods(compiler)(code, allowMessage = allowMessage)
- instructionsFromMethod(m)
- }
-
- def singleMethod(compiler: Global)(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): Method = {
- val List(m) = compileMethods(compiler)(code, allowMessage = allowMessage)
- convertMethod(m)
- }
-
- def assertSameCode(actual: List[Instruction], expected: List[Instruction]): Unit = {
- assertTrue(s"\nExpected: $expected\nActual : $actual", actual === expected)
- }
-
- def getSingleMethod(classNode: ClassNode, name: String): Method =
- convertMethod(classNode.methods.asScala.toList.find(_.name == name).get)
-
- /**
- * Instructions that match `query` when textified.
- * If `query` starts with a `+`, the next instruction is returned.
- */
- def findInstr(method: MethodNode, query: String): List[AbstractInsnNode] = {
- val useNext = query(0) == '+'
- val instrPart = if (useNext) query.drop(1) else query
- val insns = method.instructions.iterator.asScala.find(i => textify(i) contains instrPart).toList
- if (useNext) insns.map(_.getNext) else insns
- }
-
- def assertHandlerLabelPostions(h: ExceptionHandler, instructions: List[Instruction], startIndex: Int, endIndex: Int, handlerIndex: Int): Unit = {
- val insVec = instructions.toVector
- assertTrue(h.start == insVec(startIndex) && h.end == insVec(endIndex) && h.handler == insVec(handlerIndex))
- }
-
- import scala.language.implicitConversions
-
- implicit def aliveInstruction(ins: Instruction): (Instruction, Boolean) = (ins, true)
-
- implicit class MortalInstruction(val ins: Instruction) extends AnyVal {
- def dead: (Instruction, Boolean) = (ins, false)
- }
-}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/DefaultMethodTest.scala b/test/junit/scala/tools/nsc/backend/jvm/DefaultMethodTest.scala
new file mode 100644
index 0000000000..841e850b49
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/DefaultMethodTest.scala
@@ -0,0 +1,35 @@
+package scala.tools.nsc.backend.jvm
+
+import org.junit.Assert._
+import org.junit.Test
+
+import scala.collection.JavaConverters
+import scala.collection.JavaConverters._
+import scala.reflect.internal.Flags
+import scala.tools.asm.Opcodes
+import scala.tools.asm.tree.ClassNode
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+class DefaultMethodTest extends BytecodeTesting {
+ import compiler._
+ @Test
+ def defaultMethodsViaGenBCode(): Unit = {
+ import global._
+ val code = "package pack { trait T { def foo: Int }}"
+ object makeFooDefaultMethod extends Transformer {
+ val Foo = TermName("foo")
+ /** Transforms a single tree. */
+ override def transform(tree: global.Tree): global.Tree = tree match {
+ case dd @ DefDef(_, Foo, _, _, _, _) =>
+ dd.symbol.setFlag(Flags.JAVA_DEFAULTMETHOD).resetFlag(Flags.DEFERRED)
+ copyDefDef(dd)(rhs = Literal(Constant(1)).setType(definitions.IntTpe))
+ case _ => super.transform(tree)
+ }
+ }
+ val asmClasses: List[ClassNode] = compiler.compileClassesTransformed(code, Nil, makeFooDefaultMethod.transform(_))
+ val foo = asmClasses.head.methods.iterator.asScala.toList.last
+ assertTrue("default method should not be abstract", (foo.access & Opcodes.ACC_ABSTRACT) == 0)
+ assertTrue("default method body emitted", foo.instructions.size() > 0)
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala b/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala
index 240d3523f1..a28599cd92 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/DirectCompileTest.scala
@@ -1,28 +1,23 @@
package scala.tools.nsc.backend.jvm
+import org.junit.Assert._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Assert._
-import CodeGenTools._
+
import scala.tools.asm.Opcodes._
import scala.tools.partest.ASMConverters._
-import scala.tools.testing.ClearAfterClass
-
-object DirectCompileTest extends ClearAfterClass.Clearable {
- var compiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:method")
- def clear(): Unit = { compiler = null }
-}
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class DirectCompileTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = DirectCompileTest
-
- val compiler = DirectCompileTest.compiler
+class DirectCompileTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:method"
+ import compiler._
@Test
def testCompile(): Unit = {
- val List(("C.class", bytes)) = compile(compiler)(
+ val List(("C.class", bytes)) = compileToBytes(
"""class C {
| def f = 1
|}
@@ -33,12 +28,12 @@ class DirectCompileTest extends ClearAfterClass {
@Test
def testCompileClasses(): Unit = {
- val List(cClass, cModuleClass) = compileClasses(compiler)("class C; object C")
+ val List(cClass, cModuleClass) = compileClasses("class C; object C")
assertTrue(cClass.name == "C")
assertTrue(cModuleClass.name == "C$")
- val List(dMirror, dModuleClass) = compileClasses(compiler)("object D")
+ val List(dMirror, dModuleClass) = compileClasses("object D")
assertTrue(dMirror.name == "D")
assertTrue(dModuleClass.name == "D$")
@@ -46,25 +41,23 @@ class DirectCompileTest extends ClearAfterClass {
@Test
def testCompileMethods(): Unit = {
- val List(f, g) = compileMethods(compiler)(
+ val List(f, g) = compileMethods(
"""def f = 10
|def g = f
""".stripMargin)
- assertTrue(f.name == "f")
- assertTrue(g.name == "g")
- assertSameCode(instructionsFromMethod(f).dropNonOp,
+ assertSameCode(f.instructions.dropNonOp,
List(IntOp(BIPUSH, 10), Op(IRETURN)))
- assertSameCode(instructionsFromMethod(g).dropNonOp,
+ assertSameCode(g.instructions.dropNonOp,
List(VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "C", "f", "()I", itf = false), Op(IRETURN)))
}
@Test
def testDropNonOpAliveLabels(): Unit = {
// makes sure that dropNoOp doesn't drop labels that are being used
- val List(f) = compileMethods(compiler)("""def f(x: Int) = if (x == 0) "a" else "b"""")
- assertSameCode(instructionsFromMethod(f).dropLinesFrames, List(
+ val is = compileInstructions("""def f(x: Int) = if (x == 0) "a" else "b"""")
+ assertSameCode(is.dropLinesFrames, List(
Label(0),
VarOp(ILOAD, 1),
Op(ICONST_0),
@@ -84,7 +77,7 @@ class DirectCompileTest extends ClearAfterClass {
val codeA = "class A { def f = 1 }"
val codeB = "class B extends A { def g = f }"
val List(a, b) = compileClassesSeparately(List(codeA, codeB))
- val ins = getSingleMethod(b, "g").instructions
+ val ins = getInstructions(b, "g")
assert(ins exists {
case Invoke(_, "B", "f", _, _) => true
case _ => false
@@ -93,6 +86,29 @@ class DirectCompileTest extends ClearAfterClass {
@Test
def compileErroneous(): Unit = {
- compileClasses(compiler)("class C { def f: String = 1 }", allowMessage = _.msg contains "type mismatch")
+ compileToBytes("class C { def f: String = 1 }", allowMessage = _.msg contains "type mismatch")
+ }
+
+ @Test
+ def residentRedefineFinalFlag(): Unit = {
+ val compiler = newCompiler()
+ val a = "final class C { def c1 = 0 }"
+ // for re-defined class symbols (C), the compiler did not clear the `final` flag.
+ // so compiling `D` would give an error `illegal inheritance from final class C`.
+ val b = "class C; class D extends C"
+ compiler.compileToBytes(a)
+ compiler.compileToBytes(b)
+ }
+
+ @Test
+ def residentMultipleRunsNotCompanions(): Unit = {
+ val compiler = newCompiler()
+ val a = List(("public class A { }", "A.java"))
+ // when checking that a class and its companion are defined in the same compilation unit, the
+ // compiler would also emit a warning if the two symbols are defined in separate runs. this
+ // would lead to an error message when compiling the scala class A.
+ val b = "class A"
+ compiler.compileToBytes("", a)
+ compiler.compileToBytes(b)
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/IndyLambdaTest.scala b/test/junit/scala/tools/nsc/backend/jvm/IndyLambdaTest.scala
new file mode 100644
index 0000000000..ac2aab01dc
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/IndyLambdaTest.scala
@@ -0,0 +1,63 @@
+package scala.tools.nsc.backend.jvm
+
+import org.junit.Assert._
+import org.junit.Test
+
+import scala.collection.JavaConverters._
+import scala.tools.asm.Handle
+import scala.tools.asm.tree.InvokeDynamicInsnNode
+import scala.tools.testing.BytecodeTesting
+
+class IndyLambdaTest extends BytecodeTesting {
+ import compiler._
+
+ @Test def boxingBridgeMethodUsedSelectively(): Unit = {
+ def implMethodDescriptorFor(code: String): String = {
+ val method = compileAsmMethods(s"""def f = $code """).find(_.name == "f").get
+ val x = method.instructions.iterator.asScala.toList
+ x.flatMap {
+ case insn : InvokeDynamicInsnNode => insn.bsmArgs.collect { case h : Handle => h.getDesc }
+ case _ => Nil
+ }.head
+ }
+
+ val obj = "Ljava/lang/Object;"
+ val str = "Ljava/lang/String;"
+
+ // unspecialized functions that have a primitive in parameter or return position
+ // give rise to a "boxing bridge" method (which has the suffix `$adapted`).
+ // This is because Scala's unboxing of null values gives zero, whereas Java's throw a NPE.
+
+ // 1. Here we show that we are calling the boxing bridge (the lambda bodies here are compiled into
+ // methods of `(I)Ljava/lang/Object;` / `(I)Ljava/lang/Object;` respectively.)
+ assertEquals(s"($obj)$obj", implMethodDescriptorFor("(x: Int) => new Object"))
+ assertEquals(s"($obj)$obj", implMethodDescriptorFor("(x: Object) => 0"))
+
+ // 2a. We don't need such adaptations for parameters or return values with types that differ
+ // from Object due to other generic substitution, LambdaMetafactory will downcast the arguments.
+ assertEquals(s"($str)$str", implMethodDescriptorFor("(x: String) => x"))
+
+ // 2b. Testing 2a. in combination with 1.
+ assertEquals(s"($obj)$str", implMethodDescriptorFor("(x: Int) => \"\""))
+ assertEquals(s"($str)$obj", implMethodDescriptorFor("(x: String) => 0"))
+
+ // 3. Specialized functions, don't need any of this as they implement a method like `apply$mcII$sp`,
+ // and the (un)boxing is handled in the base class in code emitted by scalac.
+ assertEquals("(I)I", implMethodDescriptorFor("(x: Int) => x"))
+
+ // non-builtin sams are like specialized functions
+ compileToBytes("class VC(private val i: Int) extends AnyVal; trait FunVC { def apply(a: VC): VC }")
+ assertEquals("(I)I", implMethodDescriptorFor("((x: VC) => x): FunVC"))
+
+ compileToBytes("trait Fun1[T, U] { def apply(a: T): U }")
+ assertEquals(s"($obj)$str", implMethodDescriptorFor("(x => x.toString): Fun1[Int, String]"))
+ assertEquals(s"($obj)$obj", implMethodDescriptorFor("(x => println(x)): Fun1[Int, Unit]"))
+ assertEquals(s"($obj)$str", implMethodDescriptorFor("((x: VC) => \"\") : Fun1[VC, String]"))
+ assertEquals(s"($str)$obj", implMethodDescriptorFor("((x: String) => new VC(0)) : Fun1[String, VC]"))
+
+ compileToBytes("trait Coll[A, Repr] extends Any")
+ compileToBytes("final class ofInt(val repr: Array[Int]) extends AnyVal with Coll[Int, Array[Int]]")
+
+ assertEquals(s"([I)$obj", implMethodDescriptorFor("((xs: Array[Int]) => new ofInt(xs)): Array[Int] => Coll[Int, Array[Int]]"))
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/IndySammyTest.scala b/test/junit/scala/tools/nsc/backend/jvm/IndySammyTest.scala
new file mode 100644
index 0000000000..1ad02c10cf
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/IndySammyTest.scala
@@ -0,0 +1,146 @@
+package scala.tools.nsc
+package backend.jvm
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.asm.Opcodes._
+import scala.tools.nsc.reporters.StoreReporter
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+
+@RunWith(classOf[JUnit4])
+class IndySammyTest extends BytecodeTesting {
+ import compiler._
+
+ def funClassName(from: String, to: String) = s"Fun$from$to"
+ def classPrologue(from: String, to: String) =
+ "class VC(private val i: Int) extends AnyVal\n" +
+ s"trait ${funClassName(from, to)} { def apply(a: $from): $to}"
+
+ def lamDef(from: String, to: String, body: String => String) =
+ s"""def lam = (x => ${body("x")}): ${funClassName(from, to)}"""
+
+ def appDef(arg: String) = s"""def app = lam($arg)"""
+
+ /* Create a lambda of type "$from => $to" (with body "$body(x)" if "x" is the argument name),
+ * and apply it to `arg`.
+ *
+ * Check:
+ * - the signature of the apply method
+ * - the instructions in the lambda's body (anonfun method)
+ * - the instructions used to create the argument for the application
+ * (and the return corresponding to the lambda's result type)
+ */
+ def test(from: String, to: String, arg: String, body: String => String = x => x)
+ (expectedSig: String, lamBody: List[Instruction], appArgs: List[Instruction], ret: Instruction)
+ (allowMessage: StoreReporter#Info => Boolean = _ => false) = {
+ val List(funClass, vcClass, vcCompanion) = compileClasses(s"${classPrologue(from, to)}")
+ val c = compileClass(s"class C { ${lamDef(from, to, body)}; ${appDef(arg)} }", allowMessage = allowMessage)
+
+ val applySig = getAsmMethod(funClass, "apply").desc
+ val anonfun = getMethod(c, "$anonfun$lam$1")
+ val lamInsn = getInstructions(c, "lam").dropNonOp
+ val applyInvoke = getMethod(c, "app")
+
+ assertEquals(expectedSig, applySig)
+ assert(lamInsn.length == 2 && lamInsn.head.isInstanceOf[InvokeDynamic], lamInsn)
+ assertSameCode(anonfun, lamBody)
+ assertSameCode(applyInvoke, List(
+ VarOp(ALOAD, 0),
+ Invoke(INVOKEVIRTUAL, "C", "lam", s"()L${funClassName(from, to)};", false)) ++ appArgs ++ List(
+ Invoke(INVOKEINTERFACE, funClassName(from, to), "apply", applySig, true), ret)
+ )
+ }
+
+// def testSpecial(lam: String, lamTp: String, arg: String)(allowMessage: StoreReporter#Info => Boolean = _ => false) = {
+// val cls = compileClasses("trait Special[@specialized A] { def apply(a: A): A}" )
+// val methodNodes = compileMethods(compiler)(s"def lam : $lamTp = $lam" +";"+ appDef(arg), allowMessage)
+//
+// val anonfun = methodNodes.filter(_.name contains "$anonfun$").map(convertMethod)
+// val lamInsn = methodNodes.find(_.name == "lam").map(instructionsFromMethod).get.dropNonOp
+// val applyInvoke = methodNodes.find(_.name == "app").map(convertMethod).get
+//
+// assert(lamInsn.length == 2 && lamInsn.head.isInstanceOf[InvokeDynamic], lamInsn)
+// assertSameCode(anonfun, lamBody)
+// assertSameCode(applyInvoke, List(
+// VarOp(ALOAD, 0),
+// Invoke(INVOKEVIRTUAL, "C", "lam", s"()L${funClassName(from, to)};", false)) ++ appArgs ++ List(
+// Invoke(INVOKEINTERFACE, funClassName(from, to), "apply", applySig, true), ret)
+// )
+// }
+
+ // x => x : VC => VC applied to VC(1)
+ @Test
+ def testVC_VC_VC =
+ test("VC", "VC", "new VC(1)")("(I)I",
+ List(VarOp(ILOAD, 0), Op(IRETURN)),
+ List(Op(ICONST_1)),
+ Op(IRETURN))()
+
+ // x => new VC(x) : Int => VC applied to 1
+ @Test
+ def testInt_VC_1 =
+ test("Int", "VC", "1", x => s"new VC($x)")("(I)I",
+ List(VarOp(ILOAD, 0), Op(IRETURN)),
+ List(Op(ICONST_1)),
+ Op(IRETURN))()
+
+ // x => x : VC => Int applied to VC(1)
+ @Test
+ def testVC_Int_VC =
+ test("VC", "Int", "new VC(1)", x => "1")("(I)I",
+ List(Op(ICONST_1), Op(IRETURN)),
+ List(Op(ICONST_1)),
+ Op(IRETURN))()
+
+ // x => new VC(1) : VC => Any applied to VC(1)
+ @Test
+ def testVC_Any_VC =
+ test("VC", "Any", "new VC(1)", x => s"new VC(1)")("(I)Ljava/lang/Object;",
+ List(TypeOp(NEW, "VC"), Op(DUP), Op(ICONST_1), Invoke(INVOKESPECIAL, "VC", "<init>", "(I)V", false), Op(ARETURN)),
+ List(Op(ICONST_1)),
+ Op(ARETURN))()
+
+
+ // x => x : VC => Unit applied to VC(1)
+ @Test
+ def testVC_Unit_VC =
+ test("VC", "Unit", "new VC(1)")("(I)V",
+ List(VarOp(ILOAD, 0), Op(POP), Op(RETURN)),
+ List(Op(ICONST_1)),
+ Op(RETURN))(allowMessage = _.msg.contains("pure expression"))
+
+ // x => new VC(x.asInstanceOf[Int]) : Any => VC applied to 1
+ //
+ // Scala:
+ // def lam = (x => new VC(x.asInstanceOf[Int])): FunAny_VC
+ // def app = lam(1)
+ // Java:
+ // FunAny_VC lam() { return x -> BoxesRunTime.unboxToInt((Object)x); }
+ // int app() { lam().apply(BoxesRunTime.boxToInteger((int)1));
+ @Test
+ def testAny_VC_1 =
+ test("Any", "VC", "1", x => s"new VC($x.asInstanceOf[Int])")("(Ljava/lang/Object;)I",
+ List(VarOp(ALOAD, 0), Invoke(INVOKESTATIC, "scala/runtime/BoxesRunTime", "unboxToInt", "(Ljava/lang/Object;)I", false), Op(IRETURN)),
+ List(Op(ICONST_1), Invoke(INVOKESTATIC, "scala/runtime/BoxesRunTime", "boxToInteger", "(I)Ljava/lang/Integer;", false)),
+ Op(IRETURN))()
+
+ // TODO
+ // x => x : Special[Int] applied to 1
+// @Test
+// def testSpecial_Int_1 =
+// testSpecial("x => x", "Special[Int]", "1")()
+
+
+ // Tests ThisReferringMethodsTraverser
+ @Test
+ def testStaticIfNoThisReference: Unit = {
+ val methodNodes = compileAsmMethods("def foo = () => () => () => 42")
+ methodNodes.forall(m => !m.name.contains("anonfun") || (m.access & ACC_STATIC) == ACC_STATIC)
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/OptimizedBytecodeTest.scala b/test/junit/scala/tools/nsc/backend/jvm/OptimizedBytecodeTest.scala
new file mode 100644
index 0000000000..9a0899ffc5
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/OptimizedBytecodeTest.scala
@@ -0,0 +1,362 @@
+package scala.tools.nsc.backend.jvm
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.asm.Opcodes._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class OptimizedBytecodeTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:classpath -opt-warnings"
+ import compiler._
+
+ @Test
+ def t2171(): Unit = {
+ val code =
+ """class C {
+ | final def m(msg: => String) = try 0 catch { case ex: Throwable => println(msg) }
+ | def t(): Unit = while (true) m("...")
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"), List(Label(0), Jump(GOTO, Label(0))))
+ }
+
+ @Test
+ def t3430(): Unit = {
+ val code =
+ """class C {
+ | final def m(f: String => Boolean) = f("a")
+ | def t(): Boolean =
+ | m { s1 =>
+ | m { s2 =>
+ | while (true) { }
+ | true
+ | }
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+
+ assertSameSummary(getMethod(c, "t"), List(
+ LDC, ASTORE, ALOAD /*0*/, ALOAD /*1*/, "$anonfun$t$1", IRETURN))
+ assertSameSummary(getMethod(c, "$anonfun$t$1"), List(LDC, "$anonfun$t$2", IRETURN))
+ assertSameSummary(getMethod(c, "$anonfun$t$2"), List(-1 /*A*/, GOTO /*A*/))
+ }
+
+ @Test
+ def t3252(): Unit = {
+ val code =
+ """class C {
+ | def t(x: Boolean): Thread = {
+ | g {
+ | x match {
+ | case false => Tat.h { }
+ | }
+ | }
+ | }
+ |
+ | private def g[T](block: => T) = ???
+ |}
+ |object Tat {
+ | def h(block: => Unit): Nothing = ???
+ |}
+ """.stripMargin
+ val List(c, t, tMod) = compileClasses(code, allowMessage = _.msg.contains("not be exhaustive"))
+ assertSameSummary(getMethod(c, "t"), List(GETSTATIC, "$qmark$qmark$qmark", ATHROW))
+ }
+
+ @Test
+ def t6157(): Unit = {
+ val code =
+ """class C {
+ | def t = println(ErrorHandler.defaultIfIOException("String")("String"))
+ |}
+ |object ErrorHandler {
+ | import java.io.IOException
+ | @inline
+ | def defaultIfIOException[T](default: => T)(closure: => T): T = try closure catch {
+ | case e: IOException => default
+ | }
+ |}
+ """.stripMargin
+
+ val msg =
+ """ErrorHandler$::defaultIfIOException(Lscala/Function0;Lscala/Function0;)Ljava/lang/Object; is annotated @inline but could not be inlined:
+ |The operand stack at the callsite in C::t()V contains more values than the
+ |arguments expected by the callee ErrorHandler$::defaultIfIOException(Lscala/Function0;Lscala/Function0;)Ljava/lang/Object;. These values would be discarded
+ |when entering an exception handler declared in the inlined method.""".stripMargin
+
+ compileClasses(code, allowMessage = _.msg == msg)
+ }
+
+ @Test
+ def t6547(): Unit = { // "pos" test -- check that it compiles
+ val code =
+ """trait ConfigurableDefault[@specialized V] {
+ | def fillArray(arr: Array[V], v: V) = (arr: Any) match {
+ | case x: Array[Int] => null
+ | case x: Array[Long] => v.asInstanceOf[Long]
+ | }
+ |}
+ """.stripMargin
+ compileToBytes(code)
+ }
+
+ @Test
+ def t8062(): Unit = {
+ val c1 =
+ """package warmup
+ |object Warmup { def filter[A](p: Any => Boolean): Any = filter[Any](p) }
+ """.stripMargin
+ val c2 = "class C { def t = warmup.Warmup.filter[Any](x => false) }"
+ val List(c, _, _) = compileClassesSeparately(List(c1, c2), extraArgs = compilerArgs)
+ assertInvoke(getMethod(c, "t"), "warmup/Warmup$", "filter")
+ }
+
+ @Test
+ def t8306(): Unit = { // "pos" test
+ val code =
+ """class C {
+ | def foo: Int = 123
+ | lazy val extension: Int = foo match {
+ | case idx if idx != -1 => 15
+ | case _ => 17
+ | }
+ |}
+ """.stripMargin
+ compileToBytes(code)
+ }
+
+ @Test
+ def t8359(): Unit = { // "pos" test
+ // This is a minimization of code that crashed the compiler during bootstrapping
+ // in the first iteration of https://github.com/scala/scala/pull/4373, the PR
+ // that adjusted the order of free and declared params in LambdaLift.
+
+ // Was:
+ // java.lang.AssertionError: assertion failed:
+ // Record Record(<$anon: Function1>,Map(value a$1 -> Deref(LocalVar(value b)))) does not contain a field value b$1
+ // at scala.tools.nsc.Global.assert(Global.scala:262)
+ // at scala.tools.nsc.backend.icode.analysis.CopyPropagation$copyLattice$State.getFieldNonRecordValue(CopyPropagation.scala:113)
+ // at scala.tools.nsc.backend.icode.analysis.CopyPropagation$copyLattice$State.getFieldNonRecordValue(CopyPropagation.scala:122)
+ // at scala.tools.nsc.backend.opt.ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2.replaceFieldAccess$1(ClosureElimination.scala:124)
+ val code =
+ """package test
+ |class Typer {
+ | def bar(a: Boolean, b: Boolean): Unit = {
+ | @inline
+ | def baz(): Unit = {
+ | ((_: Any) => (Typer.this, a, b)).apply("")
+ | }
+ | ((_: Any) => baz()).apply("")
+ | }
+ |}
+ """.stripMargin
+ compileToBytes(code)
+ }
+
+ @Test
+ def t9123(): Unit = { // "pos" test
+ val code =
+ """trait Setting {
+ | type T
+ | def value: T
+ |}
+ |object Test {
+ | def test(x: Some[Setting]) = x match {
+ | case Some(dep) => Some(dep.value) map (_ => true)
+ | }
+ |}
+ """.stripMargin
+ compileToBytes(code)
+ }
+
+ @Test
+ def traitForceInfo(): Unit = {
+ // This did NOT crash unless it's in the interactive package.
+ // error: java.lang.AssertionError: assertion failed: trait Contexts.NoContext$ linkedModule: <none>List()
+ // at scala.Predef$.assert(Predef.scala:160)
+ // at scala.tools.nsc.symtab.classfile.ClassfileParser$innerClasses$.innerSymbol$1(ClassfileParser.scala:1211)
+ // at scala.tools.nsc.symtab.classfile.ClassfileParser$innerClasses$.classSymbol(ClassfileParser.scala:1223)
+ // at scala.tools.nsc.symtab.classfile.ClassfileParser.classNameToSymbol(ClassfileParser.scala:489)
+ // at scala.tools.nsc.symtab.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:757)
+ // at scala.tools.nsc.symtab.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:789)
+ val code =
+ """package scala.tools.nsc
+ |package interactive
+ |
+ |trait MyContextTrees {
+ | val self: Global
+ | val NoContext = self.analyzer.NoContext
+ |}
+ """.stripMargin
+ compileClasses(code)
+ }
+
+ @Test
+ def t9160(): Unit = {
+ val code =
+ """class C {
+ | def getInt: Int = 0
+ | def t(trees: Object): Int = {
+ | trees match {
+ | case Some(elems) =>
+ | case tree => getInt
+ | }
+ | 55
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameSummary(getMethod(c, "t"), List(
+ ALOAD /*1*/, INSTANCEOF /*Some*/, IFNE /*A*/,
+ ALOAD /*0*/, "getInt", POP,
+ -1 /*A*/, BIPUSH, IRETURN))
+ }
+
+ @Test
+ def t8796(): Unit = {
+ val code =
+ """final class C {
+ | def pr(): Unit = ()
+ | def t(index: Int): Unit = index match {
+ | case 0 => pr()
+ | case 1 => pr()
+ | case _ => t(index - 2)
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameSummary(getMethod(c, "t"), List(
+ -1 /*A*/, ILOAD /*1*/, TABLESWITCH,
+ -1, ALOAD, "pr", RETURN,
+ -1, ALOAD, "pr", RETURN,
+ -1, ILOAD, ICONST_2, ISUB, ISTORE, GOTO /*A*/))
+ }
+
+ @Test
+ def t8524(): Unit = {
+ val c1 =
+ """package library
+ |object Library {
+ | @inline def pleaseInlineMe() = 1
+ | object Nested { @inline def pleaseInlineMe() = 2 }
+ |}
+ """.stripMargin
+
+ val c2 =
+ """class C {
+ | def t = library.Library.pleaseInlineMe() + library.Library.Nested.pleaseInlineMe()
+ |}
+ """.stripMargin
+
+ val cls = compileClassesSeparately(List(c1, c2), extraArgs = compilerArgs)
+ val c = findClass(cls, "C")
+ assertSameSummary(getMethod(c, "t"), List(
+ GETSTATIC, IFNONNULL, ACONST_NULL, ATHROW, // module load and null checks not yet eliminated
+ -1, ICONST_1, GETSTATIC, IFNONNULL, ACONST_NULL, ATHROW,
+ -1, ICONST_2, IADD, IRETURN))
+ }
+
+ @Test
+ def privateInline(): Unit = {
+ val code =
+ """final class C {
+ | private var x1 = false
+ | var x2 = false
+ |
+ | @inline private def wrapper1[T](body: => T): T = {
+ | val saved = x1
+ | x1 = true
+ | try body
+ | finally x1 = saved
+ | }
+ |
+ | @inline private def wrapper2[T](body: => T): T = {
+ | val saved = x2
+ | x2 = true
+ | try body
+ | finally x2 = saved
+ | }
+ | // inlined
+ | def f1a() = wrapper1(5)
+ | // not inlined: even after inlining `identity`, the Predef module is already on the stack for the
+ | // subsequent null check (the receiver of an inlined method, in this case Predef, is checked for
+ | // nullness, to ensure an NPE is thrown)
+ | def f1b() = identity(wrapper1(5))
+ |
+ | def f2a() = wrapper2(5) // inlined
+ | def f2b() = identity(wrapper2(5)) // not inlined
+ |}
+ """.stripMargin
+ val c = compileClass(code, allowMessage = _.msg.contains("exception handler declared in the inlined method"))
+ assertInvoke(getMethod(c, "f1a"), "C", "$anonfun$f1a$1")
+ assertInvoke(getMethod(c, "f1b"), "C", "wrapper1")
+ assertInvoke(getMethod(c, "f2a"), "C", "$anonfun$f2a$1")
+ assertInvoke(getMethod(c, "f2b"), "C", "wrapper2")
+ }
+
+ @Test
+ def t7060(): Unit = {
+ val code =
+ """class C {
+ | @inline final def mbarray_apply_minibox(array: Any, tag: Byte): Long =
+ | if (tag == 0) array.asInstanceOf[Array[Long]](0)
+ | else array.asInstanceOf[Array[Byte]](0).toLong
+ |
+ | def t = mbarray_apply_minibox(null, 0)
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertNoInvoke(getMethod(c, "t"))
+ }
+
+ @Test
+ def t8315(): Unit = {
+ val code =
+ """class C {
+ | def t(as: Listt): Unit = {
+ | map(as, (_: Any) => return)
+ | }
+ | final def map(x: Listt, f: Any => Any): Any = {
+ | if (x eq Nill) "" else f("")
+ | }
+ |}
+ |object Nill extends Listt
+ |class Listt
+ """.stripMargin
+ val List(c, nil, nilMod, listt) = compileClasses(code)
+ assertInvoke(getMethod(c, "t"), "C", "$anonfun$t$1")
+ }
+
+ @Test
+ def t8315b(): Unit = {
+ val code =
+ """class C {
+ | def crash: Unit = {
+ | val key = ""
+ | try map(new F(key))
+ | catch { case _: Throwable => }
+ | }
+ | final def map(f: F): Any = f.apply("")
+ |}
+ |final class F(key: String) {
+ | final def apply(a: Any): Any = throw new RuntimeException(key)
+ |}
+ """.stripMargin
+ val List(c, f) = compileClasses(code)
+ assertInvoke(getMethod(c, "crash"), "C", "map")
+ }
+
+ @Test
+ def optimiseEnablesNewOpt(): Unit = {
+ val code = """class C { def t = (1 to 10) foreach println }"""
+ val List(c) = readAsmClasses(newCompiler(extraArgs = "-optimise -deprecation").compileToBytes(code, allowMessage = _.msg.contains("is deprecated")))
+ assertInvoke(getMethod(c, "t"), "C", "$anonfun$t$1") // range-foreach inlined from classpath
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/StringConcatTest.scala b/test/junit/scala/tools/nsc/backend/jvm/StringConcatTest.scala
new file mode 100644
index 0000000000..af2c8f9ce0
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/StringConcatTest.scala
@@ -0,0 +1,123 @@
+package scala.tools.nsc
+package backend.jvm
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class StringConcatTest extends BytecodeTesting {
+ import compiler._
+
+ @Test
+ def appendOverloadNoBoxing(): Unit = {
+ val code =
+ """class C {
+ | def t1(
+ | v: Unit,
+ | z: Boolean,
+ | c: Char,
+ | b: Byte,
+ | s: Short,
+ | i: Int,
+ | l: Long,
+ | f: Float,
+ | d: Double,
+ | str: String,
+ | sbuf: java.lang.StringBuffer,
+ | chsq: java.lang.CharSequence,
+ | chrs: Array[Char]) = str + this + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
+ |
+ | // similar, but starting off with any2stringadd
+ | def t2(
+ | v: Unit,
+ | z: Boolean,
+ | c: Char,
+ | b: Byte,
+ | s: Short,
+ | i: Int,
+ | l: Long,
+ | f: Float,
+ | d: Double,
+ | str: String,
+ | sbuf: java.lang.StringBuffer,
+ | chsq: java.lang.CharSequence,
+ | chrs: Array[Char]) = this + str + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+
+ def invokeNameDesc(m: String): List[String] = getInstructions(c, m) collect {
+ case Invoke(_, _, name, desc, _) => name + desc
+ }
+ assertEquals(invokeNameDesc("t1"), List(
+ "<init>()V",
+ "append(Ljava/lang/String;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
+ "append(Z)Ljava/lang/StringBuilder;",
+ "append(C)Ljava/lang/StringBuilder;",
+ "append(I)Ljava/lang/StringBuilder;",
+ "append(I)Ljava/lang/StringBuilder;",
+ "append(I)Ljava/lang/StringBuilder;",
+ "append(F)Ljava/lang/StringBuilder;",
+ "append(J)Ljava/lang/StringBuilder;",
+ "append(D)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/Object;)Ljava/lang/StringBuilder;", // test that we're not using the [C overload
+ "toString()Ljava/lang/String;"))
+
+ assertEquals(invokeNameDesc("t2"), List(
+ "<init>()V",
+ "any2stringadd(Ljava/lang/Object;)Ljava/lang/Object;",
+ "$plus$extension(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;",
+ "append(Ljava/lang/String;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
+ "append(Z)Ljava/lang/StringBuilder;",
+ "append(C)Ljava/lang/StringBuilder;",
+ "append(I)Ljava/lang/StringBuilder;",
+ "append(I)Ljava/lang/StringBuilder;",
+ "append(I)Ljava/lang/StringBuilder;",
+ "append(F)Ljava/lang/StringBuilder;",
+ "append(J)Ljava/lang/StringBuilder;",
+ "append(D)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;",
+ "append(Ljava/lang/Object;)Ljava/lang/StringBuilder;", // test that we're not using the [C overload
+ "toString()Ljava/lang/String;"))
+ }
+
+ @Test
+ def concatPrimitiveCorrectness(): Unit = {
+ val obj: Object = new { override def toString = "TTT" }
+ def t(
+ v: Unit,
+ z: Boolean,
+ c: Char,
+ b: Byte,
+ s: Short,
+ i: Int,
+ l: Long,
+ f: Float,
+ d: Double,
+ str: String,
+ sbuf: java.lang.StringBuffer,
+ chsq: java.lang.CharSequence,
+ chrs: Array[Char]) = {
+ val s1 = str + obj + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
+ val s2 = obj + str + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
+ s1 + "//" + s2
+ }
+ def sbuf = { val r = new java.lang.StringBuffer(); r.append("sbuf"); r }
+ def chsq: java.lang.CharSequence = "chsq"
+ val s = t((), true, 'd', 3: Byte, 12: Short, 3, -32l, 12.3f, -4.2d, "me", sbuf, chsq, Array('a', 'b'))
+ val r = s.replaceAll("""\[C@\w+""", "<ARRAY>")
+ assertEquals(r, "meTTT()trued312312.3-32-4.2sbufchsq<ARRAY>//TTTme()trued312312.3-32-4.2sbufchsq<ARRAY>")
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/analysis/NullnessAnalyzerTest.scala b/test/junit/scala/tools/nsc/backend/jvm/analysis/NullnessAnalyzerTest.scala
index 94e776aadb..c173bacd46 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/analysis/NullnessAnalyzerTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/analysis/NullnessAnalyzerTest.scala
@@ -2,54 +2,39 @@ package scala.tools.nsc
package backend.jvm
package analysis
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-import CodeGenTools._
-import scala.tools.asm.tree.{AbstractInsnNode, MethodNode}
+import scala.collection.JavaConverters._
+import scala.tools.asm.tree.MethodNode
+import scala.tools.nsc.backend.jvm.AsmUtils._
import scala.tools.nsc.backend.jvm.BTypes._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import scala.tools.testing.ClearAfterClass
import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._
-import AsmUtils._
-
-import scala.collection.convert.decorateAsScala._
-
-object NullnessAnalyzerTest extends ClearAfterClass.Clearable {
- var noOptCompiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:none")
-
- def clear(): Unit = {
- noOptCompiler = null
- }
-}
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class NullnessAnalyzerTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = NullnessAnalyzerTest
- val noOptCompiler = NullnessAnalyzerTest.noOptCompiler
-
- def newNullnessAnalyzer(methodNode: MethodNode, classInternalName: InternalName = "C"): NullnessAnalyzer = {
- val nullnessAnalyzer = new NullnessAnalyzer
- nullnessAnalyzer.analyze(classInternalName, methodNode)
- nullnessAnalyzer
- }
+class NullnessAnalyzerTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:none"
+ import compiler._
+ import global.genBCode.bTypes.backendUtils._
+
+ def newNullnessAnalyzer(methodNode: MethodNode, classInternalName: InternalName = "C") = new AsmAnalyzer(methodNode, classInternalName, new NullnessAnalyzer(global.genBCode.bTypes, methodNode))
- def testNullness(analyzer: NullnessAnalyzer, method: MethodNode, query: String, index: Int, nullness: Nullness): Unit = {
- for (i <- findInstr(method, query)) {
- val r = analyzer.frameAt(i, method).getValue(index).nullness
+ def testNullness(analyzer: AsmAnalyzer[NullnessValue], method: MethodNode, query: String, index: Int, nullness: NullnessValue): Unit = {
+ for (i <- findInstrs(method, query)) {
+ val r = analyzer.frameAt(i).getValue(index)
assertTrue(s"Expected: $nullness, found: $r. At instr ${textify(i)}", nullness == r)
}
}
// debug / helper for writing tests
- def showAllNullnessFrames(analyzer: NullnessAnalyzer, method: MethodNode): String = {
+ def showAllNullnessFrames(analyzer: AsmAnalyzer[NullnessValue], method: MethodNode): String = {
val instrLength = method.instructions.iterator.asScala.map(textify(_).length).max
val lines = for (i <- method.instructions.iterator.asScala) yield {
- val f = analyzer.frameAt(i, method)
+ val f = analyzer.frameAt(i)
val frameString = {
if (f == null) "null"
else (0 until (f.getLocals + f.getStackSize)).iterator
@@ -65,39 +50,40 @@ class NullnessAnalyzerTest extends ClearAfterClass {
@Test
def showNullnessFramesTest(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = this.toString")
+ val m = compileAsmMethod("def f = this.toString")
// NOTE: the frame for an instruction represents the state *before* executing that instr.
// So in the frame for `ALOAD 0`, the stack is still empty.
val res =
- """ L0: 0: NotNull
- | LINENUMBER 1 L0: 0: NotNull
- | ALOAD 0: 0: NotNull
- |INVOKEVIRTUAL java/lang/Object.toString ()Ljava/lang/String;: 0: NotNull, 1: NotNull
- | ARETURN: 0: NotNull, 1: Unknown1
- | L0: null""".stripMargin
+ """ L0: 0: NotNull
+ | LINENUMBER 1 L0: 0: NotNull
+ | ALOAD 0: 0: NotNull
+ |INVOKEVIRTUAL C.toString ()Ljava/lang/String;: 0: NotNull, 1: NotNull
+ | ARETURN: 0: NotNull, 1: Unknown1
+ | L0: null""".stripMargin
+// println(showAllNullnessFrames(newNullnessAnalyzer(m), m))
assertEquals(showAllNullnessFrames(newNullnessAnalyzer(m), m), res)
}
@Test
def thisNonNull(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = this.toString")
+ val m = compileAsmMethod("def f = this.toString")
val a = newNullnessAnalyzer(m)
- testNullness(a, m, "ALOAD 0", 0, NotNull)
+ testNullness(a, m, "ALOAD 0", 0, NotNullValue)
}
@Test
def instanceMethodCall(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f(a: String) = a.trim")
+ val m = compileAsmMethod("def f(a: String) = a.trim")
val a = newNullnessAnalyzer(m)
- testNullness(a, m, "INVOKEVIRTUAL java/lang/String.trim", 1, Unknown)
- testNullness(a, m, "ARETURN", 1, NotNull)
+ testNullness(a, m, "INVOKEVIRTUAL java/lang/String.trim", 1, UnknownValue1)
+ testNullness(a, m, "ARETURN", 1, NotNullValue)
}
@Test
def constructorCall(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = { val a = new Object; a.toString }")
+ val m = compileAsmMethod("def f = { val a = new Object; a.toString }")
val a = newNullnessAnalyzer(m)
// for reference, the output of showAllNullnessFrames(a, m) - note that the frame represents the state *before* executing the instr.
@@ -110,40 +96,58 @@ class NullnessAnalyzerTest extends ClearAfterClass {
// ARETURN: 0: NotNull, 1: NotNull, 2: Unknown
for ((insn, index, nullness) <- List(
- ("+NEW", 2, Unknown), // new value at slot 2 on the stack
- ("+DUP", 3, Unknown),
- ("+INVOKESPECIAL java/lang/Object", 2, NotNull), // after calling the initializer on 3, the value at 2 becomes NotNull
- ("ASTORE 1", 1, Unknown), // before the ASTORE 1, nullness of the value in local 1 is Unknown
- ("+ASTORE 1", 1, NotNull), // after storing the value at 2 in local 1, the local 1 is NotNull
- ("+ALOAD 1", 2, NotNull), // loading the value 1 puts a NotNull value on the stack (at 2)
- ("+INVOKEVIRTUAL java/lang/Object.toString", 2, Unknown) // nullness of value returned by `toString` is Unknown
+ ("+NEW", 2, UnknownValue1), // new value at slot 2 on the stack
+ ("+DUP", 3, UnknownValue1),
+ ("+INVOKESPECIAL java/lang/Object", 2, NotNullValue), // after calling the initializer on 3, the value at 2 becomes NotNull
+ ("ASTORE 1", 1, UnknownValue1), // before the ASTORE 1, nullness of the value in local 1 is Unknown
+ ("+ASTORE 1", 1, NotNullValue), // after storing the value at 2 in local 1, the local 1 is NotNull
+ ("+ALOAD 1", 2, NotNullValue), // loading the value 1 puts a NotNull value on the stack (at 2)
+ ("+INVOKEVIRTUAL java/lang/Object.toString", 2, UnknownValue1) // nullness of value returned by `toString` is Unknown
)) testNullness(a, m, insn, index, nullness)
}
@Test
def explicitNull(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = { var a: Object = null; a }")
+ val m = compileAsmMethod("def f = { var a: Object = null; a }")
val a = newNullnessAnalyzer(m)
for ((insn, index, nullness) <- List(
- ("+ACONST_NULL", 2, Null),
- ("+ASTORE 1", 1, Null),
- ("+ALOAD 1", 2, Null)
+ ("+ACONST_NULL", 2, NullValue),
+ ("+ASTORE 1", 1, NullValue),
+ ("+ALOAD 1", 2, NullValue)
)) testNullness(a, m, insn, index, nullness)
}
@Test
def stringLiteralsNotNull(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("""def f = { val a = "hi"; a.trim }""")
+ val m = compileAsmMethod("""def f = { val a = "hi"; a.trim }""")
val a = newNullnessAnalyzer(m)
- testNullness(a, m, "+ASTORE 1", 1, NotNull)
+ testNullness(a, m, "+ASTORE 1", 1, NotNullValue)
}
@Test
def newArraynotNull() {
- val List(m) = compileMethods(noOptCompiler)("def f = { val a = new Array[Int](2); a(0) }")
+ val m = compileAsmMethod("def f = { val a = new Array[Int](2); a(0) }")
+ val a = newNullnessAnalyzer(m)
+ testNullness(a, m, "+NEWARRAY T_INT", 2, NotNullValue) // new array on stack
+ testNullness(a, m, "+ASTORE 1", 1, NotNullValue) // local var (a)
+ }
+
+ @Test
+ def mergeNullNotNull(): Unit = {
+ val code =
+ """def f(o: Object) = {
+ | var a: Object = o
+ | var c: Object = null
+ | if ("".trim eq "-") {
+ | c = o
+ | }
+ | a.toString
+ |}
+ """.stripMargin
+ val m = compileAsmMethod(code)
val a = newNullnessAnalyzer(m)
- testNullness(a, m, "+NEWARRAY T_INT", 2, NotNull) // new array on stack
- testNullness(a, m, "+ASTORE 1", 1, NotNull) // local var (a)
+ val toSt = "+INVOKEVIRTUAL java/lang/Object.toString"
+ testNullness(a, m, toSt, 3, UnknownValue1)
}
@Test
@@ -166,29 +170,29 @@ class NullnessAnalyzerTest extends ClearAfterClass {
| // d is null here, assinged in both branches.
|}
""".stripMargin
- val List(m) = compileMethods(noOptCompiler)(code)
+ val m = compileAsmMethod(code)
val a = newNullnessAnalyzer(m)
val trim = "INVOKEVIRTUAL java/lang/String.trim"
val toSt = "INVOKEVIRTUAL java/lang/Object.toString"
val end = s"+$toSt"
for ((insn, index, nullness) <- List(
- (trim, 0, NotNull), // this
- (trim, 1, Unknown), // parameter o
- (trim, 2, Unknown), // a
- (trim, 3, Null), // b
- (trim, 4, Null), // c
- (trim, 5, Unknown), // d
-
- (toSt, 2, Unknown), // a, still the same
- (toSt, 3, Unknown), // b, was re-assinged in both branches to Unknown
- (toSt, 4, Unknown), // c, was re-assigned in one branch to Unknown
- (toSt, 5, Null), // d, was assigned to null in both branches
-
- (end, 2, NotNull), // a, NotNull (alias of b)
- (end, 3, NotNull), // b, receiver of toString
- (end, 4, Unknown), // c, no change (not an alias of b)
- (end, 5, Null) // d, no change
+ (trim, 0, NotNullValue), // this
+ (trim, 1, UnknownValue1), // parameter o
+ (trim, 2, UnknownValue1), // a
+ (trim, 3, NullValue), // b
+ (trim, 4, NullValue), // c
+ (trim, 5, UnknownValue1), // d
+
+ (toSt, 2, UnknownValue1), // a, still the same
+ (toSt, 3, UnknownValue1), // b, was re-assinged in both branches to Unknown
+ (toSt, 4, UnknownValue1), // c, was re-assigned in one branch to Unknown
+ (toSt, 5, NullValue), // d, was assigned to null in both branches
+
+ (end, 2, NotNullValue), // a, NotNull (alias of b)
+ (end, 3, NotNullValue), // b, receiver of toString
+ (end, 4, UnknownValue1), // c, no change (not an alias of b)
+ (end, 5, NullValue) // d, no change
)) testNullness(a, m, insn, index, nullness)
}
@@ -202,7 +206,7 @@ class NullnessAnalyzerTest extends ClearAfterClass {
| a.asInstanceOf[String].trim // the stack value (LOAD of local a) is still not-null after the CHECKCAST
|}
""".stripMargin
- val List(m) = compileMethods(noOptCompiler)(code)
+ val m = compileAsmMethod(code)
val a = newNullnessAnalyzer(m)
val instof = "+INSTANCEOF"
@@ -210,11 +214,11 @@ class NullnessAnalyzerTest extends ClearAfterClass {
val trim = "INVOKEVIRTUAL java/lang/String.trim"
for ((insn, index, nullness) <- List(
- (instof, 1, Unknown), // a after INSTANCEOF
- (instof, 2, Unknown), // x after INSTANCEOF
- (tost, 1, NotNull),
- (tost, 2, NotNull),
- (trim, 3, NotNull) // receiver at `trim`
+ (instof, 1, UnknownValue1), // a after INSTANCEOF
+ (instof, 2, UnknownValue1), // x after INSTANCEOF
+ (tost, 1, NotNullValue),
+ (tost, 2, NotNullValue),
+ (trim, 3, NotNullValue) // receiver at `trim`
)) testNullness(a, m, insn, index, nullness)
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/analysis/ProdConsAnalyzerTest.scala b/test/junit/scala/tools/nsc/backend/jvm/analysis/ProdConsAnalyzerTest.scala
index 941a167114..8cb04822de 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/analysis/ProdConsAnalyzerTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/analysis/ProdConsAnalyzerTest.scala
@@ -2,30 +2,23 @@ package scala.tools.nsc
package backend.jvm
package analysis
+import org.junit.Assert._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Assert._
import scala.tools.asm.Opcodes
import scala.tools.asm.tree.AbstractInsnNode
+import scala.tools.nsc.backend.jvm.AsmUtils._
import scala.tools.partest.ASMConverters._
-import scala.tools.testing.ClearAfterClass
-import CodeGenTools._
-import AsmUtils._
-
-object ProdConsAnalyzerTest extends ClearAfterClass.Clearable {
- var noOptCompiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:none")
-
- def clear(): Unit = {
- noOptCompiler = null
- }
-}
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class ProdConsAnalyzerTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = ProdConsAnalyzerTest
- val noOptCompiler = ProdConsAnalyzerTest.noOptCompiler
+class ProdConsAnalyzerTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:none"
+ import compiler._
+ import global.genBCode.bTypes.backendUtils._
def prodToString(producer: AbstractInsnNode) = producer match {
case p: InitialProducer => p.toString
@@ -56,9 +49,9 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
@Test
def parameters(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = this.toString")
+ val m = compileAsmMethod("def f = this.toString")
val a = new ProdConsAnalyzer(m, "C")
- val call = findInstr(m, "INVOKEVIRTUAL").head
+ val call = findInstr(m, "INVOKEVIRTUAL")
testSingleInsn(a.producersForValueAt(call, 1), "ALOAD 0") // producer of stack value
testSingleInsn(a.producersForInputsOf(call), "ALOAD 0")
@@ -91,55 +84,55 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
m.maxStack = 1
val a = new ProdConsAnalyzer(m, "C")
- val ifne = findInstr(m, "IFNE").head
+ val ifne = findInstr(m, "IFNE")
testSingleInsn(a.producersForValueAt(ifne, 1), "ParameterProducer")
- val ret = findInstr(m, "IRETURN").head
+ val ret = findInstr(m, "IRETURN")
testMultiInsns(a.producersForValueAt(ret, 1), List("ParameterProducer", "ISTORE 1"))
}
@Test
def branching(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f(x: Int) = { var a = x; if (a == 0) a = 12; a }")
+ val m = compileAsmMethod("def f(x: Int) = { var a = x; if (a == 0) a = 12; a }")
val a = new ProdConsAnalyzer(m, "C")
- val List(ret) = findInstr(m, "IRETURN")
+ val ret = findInstr(m, "IRETURN")
testMultiInsns(a.producersForValueAt(ret, 2), List("ISTORE 2", "ISTORE 2"))
testMultiInsns(a.initialProducersForValueAt(ret, 2), List("BIPUSH 12", "ParameterProducer"))
- val List(bipush) = findInstr(m, "BIPUSH 12")
+ val bipush = findInstr(m, "BIPUSH 12")
testSingleInsn(a.consumersOfOutputsFrom(bipush), "ISTORE 2")
testSingleInsn(a.ultimateConsumersOfValueAt(bipush.getNext, 3), "IRETURN")
}
@Test
def checkCast(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f(o: Object) = o.asInstanceOf[String]")
+ val m = compileAsmMethod("def f(o: Object) = o.asInstanceOf[String]")
val a = new ProdConsAnalyzer(m, "C")
- assert(findInstr(m, "CHECKCAST java/lang/String").length == 1)
+ assert(findInstrs(m, "CHECKCAST java/lang/String").length == 1)
- val List(ret) = findInstr(m, "ARETURN")
+ val ret = findInstr(m, "ARETURN")
testSingleInsn(a.initialProducersForInputsOf(ret), "ParameterProducer(1)")
}
@Test
def instanceOf(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f(o: Object) = o.isInstanceOf[String]")
+ val m = compileAsmMethod("def f(o: Object) = o.isInstanceOf[String]")
val a = new ProdConsAnalyzer(m, "C")
- assert(findInstr(m, "INSTANCEOF java/lang/String").length == 1)
+ assert(findInstrs(m, "INSTANCEOF java/lang/String").length == 1)
- val List(ret) = findInstr(m, "IRETURN")
+ val ret = findInstr(m, "IRETURN")
testSingleInsn(a.initialProducersForInputsOf(ret), "INSTANCEOF")
}
@Test
def unInitLocal(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f(b: Boolean) = { if (b) { var a = 0; println(a) }; 1 }")
+ val m = compileAsmMethod("def f(b: Boolean) = { if (b) { var a = 0; println(a) }; 1 }")
val a = new ProdConsAnalyzer(m, "C")
- val List(store) = findInstr(m, "ISTORE")
- val List(call) = findInstr(m, "INVOKEVIRTUAL")
- val List(ret) = findInstr(m, "IRETURN")
+ val store = findInstr(m, "ISTORE")
+ val call = findInstr(m, "INVOKEVIRTUAL")
+ val ret = findInstr(m, "IRETURN")
testSingleInsn(a.producersForValueAt(store, 2), "UninitializedLocalProducer(2)")
testSingleInsn(a.producersForValueAt(call, 2), "ISTORE")
@@ -148,11 +141,11 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
@Test
def dupCopying(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = new Object")
+ val m = compileAsmMethod("def f = new Object")
val a = new ProdConsAnalyzer(m, "C")
- val List(newO) = findInstr(m, "NEW")
- val List(constr) = findInstr(m, "INVOKESPECIAL")
+ val newO = findInstr(m, "NEW")
+ val constr = findInstr(m, "INVOKESPECIAL")
testSingleInsn(a.producersForInputsOf(constr), "DUP")
testSingleInsn(a.initialProducersForInputsOf(constr), "NEW")
@@ -177,11 +170,11 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
m.maxStack = 4
val a = new ProdConsAnalyzer(m, "C")
- val List(dup2) = findInstr(m, "DUP2")
- val List(add) = findInstr(m, "IADD")
- val List(swap) = findInstr(m, "SWAP")
- val List(store) = findInstr(m, "ISTORE")
- val List(ret) = findInstr(m, "IRETURN")
+ val dup2 = findInstr(m, "DUP2")
+ val add = findInstr(m, "IADD")
+ val swap = findInstr(m, "SWAP")
+ val store = findInstr(m, "ISTORE")
+ val ret = findInstr(m, "IRETURN")
testMultiInsns(a.producersForInputsOf(dup2), List("ILOAD", "ILOAD"))
testSingleInsn(a.consumersOfValueAt(dup2.getNext, 4), "IADD")
@@ -212,9 +205,9 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
m.maxStack = 1
val a = new ProdConsAnalyzer(m, "C")
- val List(inc) = findInstr(m, "IINC")
- val List(load) = findInstr(m, "ILOAD")
- val List(ret) = findInstr(m, "IRETURN")
+ val inc = findInstr(m, "IINC")
+ val load = findInstr(m, "ILOAD")
+ val ret = findInstr(m, "IRETURN")
testSingleInsn(a.producersForInputsOf(inc), "ParameterProducer(1)")
testSingleInsn(a.consumersOfOutputsFrom(inc), "ILOAD")
@@ -230,12 +223,12 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
@Test
def copyingInsns(): Unit = {
- val List(m) = compileMethods(noOptCompiler)("def f = 0l.asInstanceOf[Int]")
+ val m = compileAsmMethod("def f = 0l.asInstanceOf[Int]")
val a = new ProdConsAnalyzer(m, "C")
- val List(cnst) = findInstr(m, "LCONST_0")
- val List(l2i) = findInstr(m, "L2I") // l2i is not a copying instruction
- val List(ret) = findInstr(m, "IRETURN")
+ val cnst = findInstr(m, "LCONST_0")
+ val l2i = findInstr(m, "L2I") // l2i is not a copying instruction
+ val ret = findInstr(m, "IRETURN")
testSingleInsn(a.consumersOfOutputsFrom(cnst), "L2I")
testSingleInsn(a.ultimateConsumersOfOutputsFrom(cnst), "L2I")
@@ -271,10 +264,10 @@ class ProdConsAnalyzerTest extends ClearAfterClass {
m.maxStack = 2
val a = new ProdConsAnalyzer(m, "C")
- val List(iadd) = findInstr(m, "IADD")
+ val iadd = findInstr(m, "IADD")
val firstLoad = iadd.getPrevious.getPrevious
assert(firstLoad.getOpcode == ILOAD)
- val secondLoad = findInstr(m, "ISTORE").head.getPrevious
+ val secondLoad = findInstr(m, "ISTORE").getPrevious
assert(secondLoad.getOpcode == ILOAD)
testSingleInsn(a.producersForValueAt(iadd, 2), "ILOAD")
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/AnalyzerTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/AnalyzerTest.scala
new file mode 100644
index 0000000000..33ca6a5fd2
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/AnalyzerTest.scala
@@ -0,0 +1,50 @@
+package scala.tools.nsc
+package backend.jvm
+package opt
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.asm.tree.analysis._
+import scala.tools.nsc.backend.jvm.analysis.{AliasingAnalyzer, AliasingFrame}
+import scala.tools.nsc.backend.jvm.opt.BytecodeUtils._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class AnalyzerTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:none"
+ import compiler._
+
+ @Test
+ def aliasingOfPrimitives(): Unit = {
+ val code =
+ """class C {
+ | def f(a: Int, b: Long) = {
+ | val c = a - b // a is converted with i2l
+ | val d = c
+ | val e = a
+ | // locals: 0 this -- 1 a -- 2-3 b -- 4-5 c -- 6-7 d -- 8 e
+ | e + d // e is converted with i2l
+ | }
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ val a = new AliasingAnalyzer(new BasicInterpreter)
+ val f = getAsmMethod(c, "f")
+ a.analyze("C", f)
+
+ val List(_, i2l) = findInstrs(f, "I2L")
+ val aliasesAtI2l = a.frameAt(i2l, f).asInstanceOf[AliasingFrame[_]].aliases
+ assertEquals(aliasesAtI2l(1).iterator.toList, List(1, 8, 9)) // a, e and stack top
+ assertEquals(aliasesAtI2l(4).iterator.toList, List(4, 6))
+
+ val add = findInstr(f, "LADD")
+ val aliasesAtAdd = a.frameAt(add, f).asInstanceOf[AliasingFrame[_]].aliases
+ assertEquals(aliasesAtAdd(1).iterator.toList, List(1, 8)) // after i2l the value on the stack is no longer an alias
+ assertEquals(aliasesAtAdd(4).iterator.toList, List(4, 6, 10)) // c, d and stack top
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala
index 1b6c080234..42a2c417a0 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/BTypesFromClassfileTest.scala
@@ -2,37 +2,29 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
+import scala.tools.asm.Opcodes._
import scala.tools.nsc.backend.jvm.BTypes.InternalName
-import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-
-import BackendReporting._
-
-import scala.collection.convert.decorateAsScala._
+import scala.tools.nsc.backend.jvm.BackendReporting._
+import scala.tools.testing.BytecodeTesting
@RunWith(classOf[JUnit4])
-class BTypesFromClassfileTest {
+class BTypesFromClassfileTest extends BytecodeTesting {
// inliner enabled -> inlineInfos are collected (and compared) in ClassBTypes
- val compiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:inline-global")
+ override def compilerArgs = "-opt:inline-global"
- import compiler._
+ import compiler.global._
import definitions._
import genBCode.bTypes
import bTypes._
- def duringBackend[T](f: => T) = compiler.exitingDelambdafy(f)
+ def duringBackend[T](f: => T) = global.exitingDelambdafy(f)
- val run = new compiler.Run() // initializes some of the compiler
- duringBackend(compiler.scalaPrimitives.init()) // needed: it's only done when running the backend, and we don't actually run the compiler
+ val run = new global.Run() // initializes some of the compiler
+ duringBackend(global.scalaPrimitives.init()) // needed: it's only done when running the backend, and we don't actually run the compiler
duringBackend(bTypes.initializeCoreBTypes())
def clearCache() = bTypes.classBTypeFromInternalName.clear()
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/CallGraphTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/CallGraphTest.scala
index 9fda034a04..80fbba133e 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/CallGraphTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/CallGraphTest.scala
@@ -2,44 +2,62 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.collection.generic.Clearable
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
+import scala.collection.JavaConverters._
+import scala.collection.generic.Clearable
+import scala.collection.immutable.IntMap
import scala.tools.asm.tree._
-import scala.tools.asm.tree.analysis._
+import scala.tools.nsc.backend.jvm.BackendReporting._
import scala.tools.nsc.reporters.StoreReporter
-import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import AsmUtils._
-import BackendReporting._
-
-import scala.collection.convert.decorateAsScala._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class CallGraphTest {
- val compiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:inline-global -Yopt-warnings")
- import compiler.genBCode.bTypes._
-
- // allows inspecting the caches after a compilation run
- val notPerRun: List[Clearable] = List(classBTypeFromInternalName, byteCodeRepository.classes, callGraph.callsites)
- notPerRun foreach compiler.perRunCaches.unrecordCache
-
- def compile(code: String, allowMessage: StoreReporter#Info => Boolean): List[ClassNode] = {
+class CallGraphTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:inline-global -opt-warnings"
+ import compiler._
+ import global.genBCode.bTypes
+ val notPerRun: List[Clearable] = List(
+ bTypes.classBTypeFromInternalName,
+ bTypes.byteCodeRepository.compilingClasses,
+ bTypes.byteCodeRepository.parsedClasses,
+ bTypes.callGraph.callsites)
+ notPerRun foreach global.perRunCaches.unrecordCache
+
+ import global.genBCode.bTypes._
+ import callGraph._
+
+ def compile(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): List[ClassNode] = {
notPerRun.foreach(_.clear())
- compileClasses(compiler)(code, allowMessage = allowMessage)
+ compileClasses(code, allowMessage = allowMessage).map(c => byteCodeRepository.classNode(c.name).get)
}
def callsInMethod(methodNode: MethodNode): List[MethodInsnNode] = methodNode.instructions.iterator.asScala.collect({
case call: MethodInsnNode => call
}).toList
+ def checkCallsite(call: MethodInsnNode, callsiteMethod: MethodNode, target: MethodNode, calleeDeclClass: ClassBType,
+ safeToInline: Boolean, atInline: Boolean, atNoInline: Boolean, argInfos: IntMap[ArgInfo] = IntMap.empty) = {
+ val callsite = callGraph.callsites(callsiteMethod)(call)
+ try {
+ assert(callsite.callsiteInstruction == call)
+ assert(callsite.callsiteMethod == callsiteMethod)
+ val callee = callsite.callee.get
+ assert(callee.callee == target)
+ assert(callee.calleeDeclarationClass == calleeDeclClass)
+ assert(callee.safeToInline == safeToInline)
+ assert(callee.annotatedInline == atInline)
+ assert(callee.annotatedNoInline == atNoInline)
+ assert(callsite.argInfos == argInfos)
+ } catch {
+ case e: Throwable => println(callsite); throw e
+ }
+ }
+
@Test
def callGraphStructure(): Unit = {
val code =
@@ -83,70 +101,107 @@ class CallGraphTest {
msgCount += 1
ok exists (m.msg contains _)
}
- val List(cCls, cMod, dCls, testCls) = compile(code, checkMsg).map(c => byteCodeRepository.classNode(c.name).get)
+ val List(cCls, cMod, dCls, testCls) = compile(code, checkMsg)
assert(msgCount == 6, msgCount)
- val List(cf1, cf2, cf3, cf4, cf5, cf6, cf7) = cCls.methods.iterator.asScala.filter(_.name.startsWith("f")).toList.sortBy(_.name)
- val List(df1, df3) = dCls.methods.iterator.asScala.filter(_.name.startsWith("f")).toList.sortBy(_.name)
- val g1 = cMod.methods.iterator.asScala.find(_.name == "g1").get
- val List(t1, t2) = testCls.methods.iterator.asScala.filter(_.name.startsWith("t")).toList.sortBy(_.name)
+ val List(cf1, cf2, cf3, cf4, cf5, cf6, cf7) = getAsmMethods(cCls, _.startsWith("f"))
+ val List(df1, df3) = getAsmMethods(dCls, _.startsWith("f"))
+ val g1 = getAsmMethod(cMod, "g1")
+ val List(t1, t2) = getAsmMethods(testCls, _.startsWith("t"))
val List(cf1Call, cf2Call, cf3Call, cf4Call, cf5Call, cf6Call, cf7Call, cg1Call) = callsInMethod(t1)
val List(df1Call, df2Call, df3Call, df4Call, df5Call, df6Call, df7Call, dg1Call) = callsInMethod(t2)
- def checkCallsite(callsite: callGraph.Callsite,
- call: MethodInsnNode, callsiteMethod: MethodNode, target: MethodNode, calleeDeclClass: ClassBType,
- safeToInline: Boolean, atInline: Boolean, atNoInline: Boolean) = try {
- assert(callsite.callsiteInstruction == call)
- assert(callsite.callsiteMethod == callsiteMethod)
- val callee = callsite.callee.get
- assert(callee.callee == target)
- assert(callee.calleeDeclarationClass == calleeDeclClass)
- assert(callee.safeToInline == safeToInline)
- assert(callee.annotatedInline == atInline)
- assert(callee.annotatedNoInline == atNoInline)
-
- assert(callsite.argInfos == List()) // not defined yet
- } catch {
- case e: Throwable => println(callsite); throw e
- }
-
val cClassBType = classBTypeFromClassNode(cCls)
val cMClassBType = classBTypeFromClassNode(cMod)
val dClassBType = classBTypeFromClassNode(dCls)
- checkCallsite(callGraph.callsites(cf1Call),
- cf1Call, t1, cf1, cClassBType, false, false, false)
- checkCallsite(callGraph.callsites(cf2Call),
- cf2Call, t1, cf2, cClassBType, true, false, false)
- checkCallsite(callGraph.callsites(cf3Call),
- cf3Call, t1, cf3, cClassBType, false, true, false)
- checkCallsite(callGraph.callsites(cf4Call),
- cf4Call, t1, cf4, cClassBType, true, true, false)
- checkCallsite(callGraph.callsites(cf5Call),
- cf5Call, t1, cf5, cClassBType, false, false, true)
- checkCallsite(callGraph.callsites(cf6Call),
- cf6Call, t1, cf6, cClassBType, true, false, true)
- checkCallsite(callGraph.callsites(cf7Call),
- cf7Call, t1, cf7, cClassBType, false, true, true)
- checkCallsite(callGraph.callsites(cg1Call),
- cg1Call, t1, g1, cMClassBType, true, false, false)
-
- checkCallsite(callGraph.callsites(df1Call),
- df1Call, t2, df1, dClassBType, false, true, false)
- checkCallsite(callGraph.callsites(df2Call),
- df2Call, t2, cf2, cClassBType, true, false, false)
- checkCallsite(callGraph.callsites(df3Call),
- df3Call, t2, df3, dClassBType, true, false, false)
- checkCallsite(callGraph.callsites(df4Call),
- df4Call, t2, cf4, cClassBType, true, true, false)
- checkCallsite(callGraph.callsites(df5Call),
- df5Call, t2, cf5, cClassBType, false, false, true)
- checkCallsite(callGraph.callsites(df6Call),
- df6Call, t2, cf6, cClassBType, true, false, true)
- checkCallsite(callGraph.callsites(df7Call),
- df7Call, t2, cf7, cClassBType, false, true, true)
- checkCallsite(callGraph.callsites(dg1Call),
- dg1Call, t2, g1, cMClassBType, true, false, false)
+ checkCallsite(cf1Call, t1, cf1, cClassBType, false, false, false)
+ checkCallsite(cf2Call, t1, cf2, cClassBType, true, false, false)
+ checkCallsite(cf3Call, t1, cf3, cClassBType, false, true, false)
+ checkCallsite(cf4Call, t1, cf4, cClassBType, true, true, false)
+ checkCallsite(cf5Call, t1, cf5, cClassBType, false, false, true)
+ checkCallsite(cf6Call, t1, cf6, cClassBType, true, false, true)
+ checkCallsite(cf7Call, t1, cf7, cClassBType, false, true, true)
+ checkCallsite(cg1Call, t1, g1, cMClassBType, true, false, false)
+
+ checkCallsite(df1Call, t2, df1, dClassBType, false, true, false)
+ checkCallsite(df2Call, t2, cf2, cClassBType, true, false, false)
+ checkCallsite(df3Call, t2, df3, dClassBType, true, false, false)
+ checkCallsite(df4Call, t2, cf4, cClassBType, true, true, false)
+ checkCallsite(df5Call, t2, cf5, cClassBType, false, false, true)
+ checkCallsite(df6Call, t2, cf6, cClassBType, true, false, true)
+ checkCallsite(df7Call, t2, cf7, cClassBType, false, true, true)
+ checkCallsite(dg1Call, t2, g1, cMClassBType, true, false, false)
+ }
+
+ @Test
+ def callerSensitiveNotSafeToInline(): Unit = {
+ val code =
+ """class C {
+ | def m = java.lang.Class.forName("C")
+ |}
+ """.stripMargin
+ val List(c) = compile(code)
+ val m = getAsmMethod(c, "m")
+ val List(fn) = callsInMethod(m)
+ val forNameMeth = byteCodeRepository.methodNode("java/lang/Class", "forName", "(Ljava/lang/String;)Ljava/lang/Class;").get._1
+ val classTp = classBTypeFromInternalName("java/lang/Class")
+ val r = callGraph.callsites(m)(fn)
+ checkCallsite(fn, m, forNameMeth, classTp, safeToInline = false, atInline = false, atNoInline = false)
+ }
+
+ @Test
+ def checkArgInfos(): Unit = {
+ val code =
+ """abstract class C {
+ | def h(f: Int => Int): Int = f(1)
+ | def t1 = h(x => x + 1)
+ | def t2(i: Int, f: Int => Int, z: Int) = h(f) + i - z
+ | def t3(f: Int => Int) = h(x => f(x + 1))
+ |}
+ |trait D {
+ | def iAmASam(x: Int): Int
+ | def selfSamCall = iAmASam(10)
+ |}
+ |""".stripMargin
+ val List(c, d) = compile(code)
+
+ def callIn(m: String) = callGraph.callsites.find(_._1.name == m).get._2.values.head
+ val t1h = callIn("t1")
+ assertEquals(t1h.argInfos.toList, List((1, FunctionLiteral)))
+
+ val t2h = callIn("t2")
+ assertEquals(t2h.argInfos.toList, List((1, ForwardedParam(2))))
+
+ val t3h = callIn("t3")
+ assertEquals(t3h.argInfos.toList, List((1, FunctionLiteral)))
+
+ val selfSamCall = callIn("selfSamCall")
+ assertEquals(selfSamCall.argInfos.toList, List((0,ForwardedParam(0))))
+ }
+
+ @Test
+ def argInfoAfterInlining(): Unit = {
+ val code =
+ """class C {
+ | def foo(f: Int => Int) = f(1) // not inlined
+ | @inline final def bar(g: Int => Int) = foo(g) // forwarded param 1
+ | @inline final def baz = foo(x => x + 1) // literal
+ |
+ | def t1 = bar(x => x + 1) // call to foo should have argInfo literal
+ | def t2(x: Int, f: Int => Int) = x + bar(f) // call to foo should have argInfo forwarded param 2
+ | def t3 = baz // call to foo should have argInfo literal
+ | def someFun: Int => Int = null
+ | def t4(x: Int) = x + bar(someFun) // call to foo has empty argInfo
+ |}
+ """.stripMargin
+
+ compile(code)
+ def callIn(m: String) = callGraph.callsites.find(_._1.name == m).get._2.values.head
+ assertEquals(callIn("t1").argInfos.toList, List((1, FunctionLiteral)))
+ assertEquals(callIn("t2").argInfos.toList, List((1, ForwardedParam(2))))
+ assertEquals(callIn("t3").argInfos.toList, List((1, FunctionLiteral)))
+ assertEquals(callIn("t4").argInfos.toList, Nil)
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/ClosureOptimizerTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/ClosureOptimizerTest.scala
new file mode 100644
index 0000000000..f672237f10
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/ClosureOptimizerTest.scala
@@ -0,0 +1,86 @@
+package scala.tools.nsc
+package backend.jvm
+package opt
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.asm.Opcodes._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class ClosureOptimizerTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:classpath -opt-warnings:_"
+ import compiler._
+
+ @Test
+ def nothingTypedClosureBody(): Unit = {
+ val code =
+ """abstract class C {
+ | def isEmpty: Boolean
+ | @inline final def getOrElse[T >: C](f: => T) = if (isEmpty) f else this
+ | def t = getOrElse(throw new Error(""))
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ val t = getAsmMethod(c, "t")
+ val bodyCall = findInstr(t, "INVOKESTATIC C.$anonfun$t$1 ()Lscala/runtime/Nothing$")
+ assert(bodyCall.getNext.getOpcode == ATHROW)
+ }
+
+ @Test
+ def nullTypedClosureBody(): Unit = {
+ val code =
+ """abstract class C {
+ | def isEmpty: Boolean
+ | @inline final def getOrElse[T >: C](f: => T) = if (isEmpty) f else this
+ | def t = getOrElse(null)
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ val t = getAsmMethod(c, "t")
+ val bodyCall = findInstr(t, "INVOKESTATIC C.$anonfun$t$1 ()Lscala/runtime/Null$")
+ assert(bodyCall.getNext.getOpcode == POP)
+ assert(bodyCall.getNext.getNext.getOpcode == ACONST_NULL)
+ }
+
+ @Test
+ def makeLMFCastExplicit(): Unit = {
+ val code =
+ """class C {
+ | def t(l: List[String]) = {
+ | val fun: String => String = s => s
+ | fun(l.head)
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"),
+ List(VarOp(ALOAD, 1), Invoke(INVOKEVIRTUAL, "scala/collection/immutable/List", "head", "()Ljava/lang/Object;", false),
+ TypeOp(CHECKCAST, "java/lang/String"), Invoke(INVOKESTATIC, "C", "$anonfun$t$1", "(Ljava/lang/String;)Ljava/lang/String;", false),
+ Op(ARETURN)))
+ }
+
+ @Test
+ def closureOptWithUnreachableCode(): Unit = {
+ // this example used to crash the ProdCons analysis in the closure optimizer - ProdCons
+ // expects no unreachable code.
+ val code =
+ """class C {
+ | @inline final def m = throw new Error("")
+ | def t = {
+ | val f = (x: Int) => x + 1
+ | m
+ | f(10) // unreachable after inlining m
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameSummary(getMethod(c, "t"), List(NEW, DUP, LDC, "<init>", ATHROW))
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/CompactLocalVariablesTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/CompactLocalVariablesTest.scala
index 76492cfa23..6f54f170b5 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/CompactLocalVariablesTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/CompactLocalVariablesTest.scala
@@ -2,23 +2,21 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting._
+import scala.tools.testing.ClearAfterClass
@RunWith(classOf[JUnit4])
-class CompactLocalVariablesTest {
-
+class CompactLocalVariablesTest extends ClearAfterClass {
// recurse-unreachable-jumps is required for eliminating catch blocks, in the first dce round they
// are still live.only after eliminating the empty handler the catch blocks become unreachable.
- val methodOptCompiler = newCompiler(extraArgs = "-target:jvm-1.6 -Ybackend:GenBCode -Yopt:unreachable-code,compact-locals")
- val noCompactVarsCompiler = newCompiler(extraArgs = "-target:jvm-1.6 -Ybackend:GenBCode -Yopt:unreachable-code")
+ val methodOptCompiler = cached("methodOptCompiler", () => newCompiler(extraArgs = "-opt:unreachable-code,compact-locals"))
+ val noCompactVarsCompiler = cached("noCompactVarsCompiler", () => newCompiler(extraArgs = "-opt:unreachable-code"))
@Test
def compactUnused(): Unit = {
@@ -58,8 +56,8 @@ class CompactLocalVariablesTest {
|}
|""".stripMargin
- val List(noCompact) = compileMethods(noCompactVarsCompiler)(code)
- val List(withCompact) = compileMethods(methodOptCompiler)(code)
+ val noCompact = noCompactVarsCompiler.compileAsmMethod(code)
+ val withCompact = methodOptCompiler.compileAsmMethod(code)
// code is the same, except for local var indices
assertTrue(noCompact.instructions.size == withCompact.instructions.size)
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyExceptionHandlersTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyExceptionHandlersTest.scala
index cb01f3d164..77215304fd 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyExceptionHandlersTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyExceptionHandlersTest.scala
@@ -2,32 +2,23 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
+
import scala.tools.asm.Opcodes._
-import org.junit.Assert._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import scala.tools.testing.ClearAfterClass
-
-object EmptyExceptionHandlersTest extends ClearAfterClass.Clearable {
- var noOptCompiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:none")
- var dceCompiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:unreachable-code")
- def clear(): Unit = {
- noOptCompiler = null
- dceCompiler = null
- }
-}
@RunWith(classOf[JUnit4])
-class EmptyExceptionHandlersTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = EmptyExceptionHandlersTest
+class EmptyExceptionHandlersTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:unreachable-code"
+ def dceCompiler = compiler
- val noOptCompiler = EmptyExceptionHandlersTest.noOptCompiler
- val dceCompiler = EmptyExceptionHandlersTest.dceCompiler
+ val noOptCompiler = cached("noOptCompiler", () => newCompiler(extraArgs = "-opt:l:none"))
val exceptionDescriptor = "java/lang/Exception"
@@ -69,8 +60,8 @@ class EmptyExceptionHandlersTest extends ClearAfterClass {
def eliminateUnreachableHandler(): Unit = {
val code = "def f: Unit = try { } catch { case _: Exception => println(0) }; println(1)"
- assertTrue(singleMethod(noOptCompiler)(code).handlers.length == 1)
- val optMethod = singleMethod(dceCompiler)(code)
+ assertTrue(noOptCompiler.compileMethod(code).handlers.length == 1)
+ val optMethod = dceCompiler.compileMethod(code)
assertTrue(optMethod.handlers.isEmpty)
val code2 =
@@ -82,7 +73,7 @@ class EmptyExceptionHandlersTest extends ClearAfterClass {
| println(2)
|}""".stripMargin
- assertTrue(singleMethod(dceCompiler)(code2).handlers.isEmpty)
+ assertTrue(dceCompiler.compileMethod(code2).handlers.isEmpty)
}
@Test
@@ -94,6 +85,6 @@ class EmptyExceptionHandlersTest extends ClearAfterClass {
| catch { case _: Exception => 2 }
|}""".stripMargin
- assertTrue(singleMethod(dceCompiler)(code).handlers.length == 1)
+ assertTrue(dceCompiler.compileMethod(code).handlers.length == 1)
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyLabelsAndLineNumbersTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyLabelsAndLineNumbersTest.scala
index 7283e20745..d57d44f2a3 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyLabelsAndLineNumbersTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/EmptyLabelsAndLineNumbersTest.scala
@@ -2,16 +2,16 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-import scala.tools.testing.AssertUtil._
-import CodeGenTools._
+import scala.tools.asm.Opcodes._
import scala.tools.partest.ASMConverters
-import ASMConverters._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.AssertUtil._
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
class EmptyLabelsAndLineNumbersTest {
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineInfoTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineInfoTest.scala
index 57088bdd2f..6f098e1432 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineInfoTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineInfoTest.scala
@@ -2,37 +2,33 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.collection.generic.Clearable
-import org.junit.Assert._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import AsmUtils._
-import scala.tools.testing.ClearAfterClass
-import BackendReporting._
-
-import scala.collection.convert.decorateAsScala._
+import scala.collection.JavaConverters._
+import scala.collection.generic.Clearable
+import scala.tools.nsc.backend.jvm.BTypes.MethodInlineInfo
+import scala.tools.nsc.backend.jvm.BackendReporting._
+import scala.tools.testing.BytecodeTesting
-object InlineInfoTest extends ClearAfterClass.Clearable {
- var compiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:classpath")
- def clear(): Unit = { compiler = null }
+@RunWith(classOf[JUnit4])
+class InlineInfoTest extends BytecodeTesting {
+ import compiler._
+ import global.genBCode.bTypes
- def notPerRun: List[Clearable] = List(compiler.genBCode.bTypes.classBTypeFromInternalName, compiler.genBCode.bTypes.byteCodeRepository.classes)
- notPerRun foreach compiler.perRunCaches.unrecordCache
-}
+ override def compilerArgs = "-opt:l:classpath"
-@RunWith(classOf[JUnit4])
-class InlineInfoTest {
- val compiler = InlineInfoTest.compiler
+ def notPerRun: List[Clearable] = List(
+ bTypes.classBTypeFromInternalName,
+ bTypes.byteCodeRepository.compilingClasses,
+ bTypes.byteCodeRepository.parsedClasses)
+ notPerRun foreach global.perRunCaches.unrecordCache
def compile(code: String) = {
- InlineInfoTest.notPerRun.foreach(_.clear())
- compileClasses(compiler)(code)
+ notPerRun.foreach(_.clear())
+ compiler.compileClasses(code)
}
@Test
@@ -55,13 +51,30 @@ class InlineInfoTest {
|class C extends T with U
""".stripMargin
val classes = compile(code)
- val fromSyms = classes.map(c => compiler.genBCode.bTypes.classBTypeFromInternalName(c.name).info.get.inlineInfo)
+
+ val fromSyms = classes.map(c => global.genBCode.bTypes.classBTypeFromInternalName(c.name).info.get.inlineInfo)
val fromAttrs = classes.map(c => {
assert(c.attrs.asScala.exists(_.isInstanceOf[InlineInfoAttribute]), c.attrs)
- compiler.genBCode.bTypes.inlineInfoFromClassfile(c)
+ global.genBCode.bTypes.inlineInfoFromClassfile(c)
})
assert(fromSyms == fromAttrs)
}
+
+ @Test // scala-dev#20
+ def javaStaticMethodsInlineInfoInMixedCompilation(): Unit = {
+ val jCode =
+ """public class A {
+ | public static final int bar() { return 100; }
+ | public final int baz() { return 100; }
+ |}
+ """.stripMargin
+ compileClasses("class C { new A }", javaCode = List((jCode, "A.java")))
+ val info = global.genBCode.bTypes.classBTypeFromInternalName("A").info.get.inlineInfo
+ assertEquals(info.methodInfos, Map(
+ "bar()I" -> MethodInlineInfo(true,false,false),
+ "<init>()V" -> MethodInlineInfo(false,false,false),
+ "baz()I" -> MethodInlineInfo(true,false,false)))
+ }
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala
index 029caa995c..95b47f7d04 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlineWarningTest.scala
@@ -2,48 +2,21 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.collection.generic.Clearable
-import scala.collection.mutable.ListBuffer
-import scala.reflect.internal.util.BatchSourceFile
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-
-import scala.tools.asm.tree._
-import scala.tools.asm.tree.analysis._
-import scala.tools.nsc.backend.jvm.opt.BytecodeUtils.AsmAnalyzer
-import scala.tools.nsc.io._
-import scala.tools.nsc.reporters.StoreReporter
-import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import AsmUtils._
-
-import BackendReporting._
-
-import scala.collection.convert.decorateAsScala._
-import scala.tools.testing.ClearAfterClass
-
-object InlineWarningTest extends ClearAfterClass.Clearable {
- val argsNoWarn = "-Ybackend:GenBCode -Yopt:l:classpath"
- val args = argsNoWarn + " -Yopt-warnings"
- var compiler = newCompiler(extraArgs = args)
- def clear(): Unit = { compiler = null }
-}
+
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class InlineWarningTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = InlineWarningTest
+class InlineWarningTest extends BytecodeTesting {
+ def optCp = "-opt:l:classpath"
+ override def compilerArgs = s"$optCp -opt-warnings"
- val compiler = InlineWarningTest.compiler
+ import compiler._
- def compile(scalaCode: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): List[ClassNode] = {
- compileClasses(compiler)(scalaCode, javaCode, allowMessage)
- }
+ val compilerWarnAll = cached("compilerWarnAll", () => newCompiler(extraArgs = s"$optCp -opt-warnings:_"))
@Test
def nonFinal(): Unit = {
@@ -65,34 +38,11 @@ class InlineWarningTest extends ClearAfterClass {
"C::m1()I is annotated @inline but cannot be inlined: the method is not final and may be overridden",
"T::m2()I is annotated @inline but cannot be inlined: the method is not final and may be overridden",
"D::m2()I is annotated @inline but cannot be inlined: the method is not final and may be overridden")
- compile(code, allowMessage = i => {count += 1; warns.exists(i.msg contains _)})
+ compileToBytes(code, allowMessage = i => {count += 1; warns.exists(i.msg contains _)})
assert(count == 4, count)
}
@Test
- def traitMissingImplClass(): Unit = {
- val codeA = "trait T { @inline final def f = 1 }"
- val codeB = "class C { def t1(t: T) = t.f }"
-
- val removeImpl = (outDir: AbstractFile) => {
- val f = outDir.lookupName("T$class.class", directory = false)
- if (f != null) f.delete()
- }
-
- val warn =
- """T::f()I is annotated @inline but cannot be inlined: the trait method call could not be rewritten to the static implementation method. Possible reason:
- |The method f(LT;)I could not be found in the class T$class or any of its parents.
- |Note that the following parent classes could not be found on the classpath: T$class""".stripMargin
-
- var c = 0
- compileSeparately(List(codeA, codeB), extraArgs = InlineWarningTest.args, afterEach = removeImpl, allowMessage = i => {c += 1; i.msg contains warn})
- assert(c == 1, c)
-
- // only summary here
- compileSeparately(List(codeA, codeB), extraArgs = InlineWarningTest.argsNoWarn, afterEach = removeImpl, allowMessage = _.msg contains "there was one inliner warning")
- }
-
- @Test
def handlerNonEmptyStack(): Unit = {
val code =
"""class C {
@@ -103,11 +53,11 @@ class InlineWarningTest extends ClearAfterClass {
""".stripMargin
var c = 0
- compile(code, allowMessage = i => {c += 1; i.msg contains "operand stack at the callsite in C::t1()V contains more values"})
+ compileToBytes(code, allowMessage = i => {c += 1; i.msg contains "operand stack at the callsite in C::t1()V contains more values"})
assert(c == 1, c)
}
- @Test
+// @Test -- TODO
def mixedWarnings(): Unit = {
val javaCode =
"""public class A {
@@ -125,29 +75,29 @@ class InlineWarningTest extends ClearAfterClass {
val warns = List(
"""failed to determine if bar should be inlined:
|The method bar()I could not be found in the class A or any of its parents.
- |Note that the following parent classes are defined in Java sources (mixed compilation), no bytecode is available: A""".stripMargin,
+ |Note that class A is defined in a Java source (mixed compilation), no bytecode is available.""".stripMargin,
"""B::flop()I is annotated @inline but could not be inlined:
|Failed to check if B::flop()I can be safely inlined to B without causing an IllegalAccessError. Checking instruction INVOKESTATIC A.bar ()I failed:
|The method bar()I could not be found in the class A or any of its parents.
- |Note that the following parent classes are defined in Java sources (mixed compilation), no bytecode is available: A""".stripMargin)
+ |Note that class A is defined in a Java source (mixed compilation), no bytecode is available.""".stripMargin)
var c = 0
- val List(b) = compile(scalaCode, List((javaCode, "A.java")), allowMessage = i => {c += 1; warns.tail.exists(i.msg contains _)})
+ val List(b) = compileToBytes(scalaCode, List((javaCode, "A.java")), allowMessage = i => {c += 1; warns.tail.exists(i.msg contains _)})
assert(c == 1, c)
// no warnings here
- compileClasses(newCompiler(extraArgs = InlineWarningTest.argsNoWarn + " -Yopt-warnings:none"))(scalaCode, List((javaCode, "A.java")))
+ newCompiler(extraArgs = s"$optCp -opt-warnings:none").compileToBytes(scalaCode, List((javaCode, "A.java")))
c = 0
- compileClasses(newCompiler(extraArgs = InlineWarningTest.argsNoWarn + " -Yopt-warnings:no-inline-mixed"))(scalaCode, List((javaCode, "A.java")), allowMessage = i => {c += 1; warns.exists(i.msg contains _)})
+ newCompiler(extraArgs = s"$optCp -opt-warnings:no-inline-mixed").compileToBytes(scalaCode, List((javaCode, "A.java")), allowMessage = i => {c += 1; warns.exists(i.msg contains _)})
assert(c == 2, c)
}
@Test
def cannotInlinePrivateCallIntoDifferentClass(): Unit = {
val code =
- """class M {
+ """class A {
| @inline final def f = {
| @noinline def nested = 0
| nested
@@ -156,18 +106,45 @@ class InlineWarningTest extends ClearAfterClass {
| def t = f // ok
|}
|
- |class N {
- | def t(a: M) = a.f // not possible
+ |class B {
+ | def t(a: A) = a.f // not possible
+ |}
+ """.stripMargin
+
+ val warn =
+ """A::f()I is annotated @inline but could not be inlined:
+ |The callee A::f()I contains the instruction INVOKESTATIC A.nested$1 ()I
+ |that would cause an IllegalAccessError when inlined into class B""".stripMargin
+
+ var c = 0
+ compileToBytes(code, allowMessage = i => { c += 1; i.msg contains warn })
+ assert(c == 1, c)
+ }
+
+ @Test
+ def dontWarnWhenNotIlnineAnnotated(): Unit = {
+ val code =
+ """class A {
+ | final def f(t: Int => Int) = {
+ | @noinline def nested = 0
+ | nested + t(1)
+ | }
+ | def t = f(x => x + 1)
+ |}
+ |
+ |class B {
+ | def t(a: A) = a.f(x => x + 1)
|}
""".stripMargin
+ compileToBytes(code, allowMessage = _ => false) // no warnings allowed
val warn =
- """M::f()I is annotated @inline but could not be inlined:
- |The callee M::f()I contains the instruction INVOKESPECIAL M.nested$1 ()I
- |that would cause an IllegalAccessError when inlined into class N""".stripMargin
+ """A::f(Lscala/Function1;)I could not be inlined:
+ |The callee A::f(Lscala/Function1;)I contains the instruction INVOKESTATIC A.nested$1 ()I
+ |that would cause an IllegalAccessError when inlined into class B""".stripMargin
var c = 0
- compile(code, allowMessage = i => { c += 1; i.msg contains warn })
+ compilerWarnAll.compileToBytes(code, allowMessage = i => { c += 1; i.msg contains warn })
assert(c == 1, c)
}
@@ -188,7 +165,42 @@ class InlineWarningTest extends ClearAfterClass {
|does not have the same strictfp mode as the callee C::f()I.""".stripMargin
var c = 0
- compile(code, allowMessage = i => { c += 1; i.msg contains warn })
+ compileToBytes(code, allowMessage = i => { c += 1; i.msg contains warn })
assert(c == 1, c)
}
+
+ @Test // scala-dev#20
+ def mixedCompilationSpuriousWarning(): Unit = {
+ val jCode =
+ """public class A {
+ | public static final int bar() { return 100; }
+ | public final int baz() { return 100; }
+ |}
+ """.stripMargin
+
+ val sCode =
+ """class C {
+ | @inline final def foo = A.bar()
+ | @inline final def fii(a: A) = a.baz()
+ | def t = foo + fii(new A)
+ |}
+ """.stripMargin
+
+ val warns = List(
+ """C::foo()I is annotated @inline but could not be inlined:
+ |Failed to check if C::foo()I can be safely inlined to C without causing an IllegalAccessError. Checking instruction INVOKESTATIC A.bar ()I failed:
+ |The method bar()I could not be found in the class A or any of its parents.
+ |Note that class A is defined in a Java source (mixed compilation), no bytecode is available.""".stripMargin,
+
+ """C::fii(LA;)I is annotated @inline but could not be inlined:
+ |Failed to check if C::fii(LA;)I can be safely inlined to C without causing an IllegalAccessError. Checking instruction INVOKEVIRTUAL A.baz ()I failed:
+ |The method baz()I could not be found in the class A or any of its parents.
+ |Note that class A is defined in a Java source (mixed compilation), no bytecode is available.""".stripMargin
+ )
+ var c = 0
+ compileClasses(sCode, javaCode = List((jCode, "A.java")), allowMessage = i => { c += 1;
+ warns.exists(i.msg.contains)
+ })
+ assert(c == 2)
+ }
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerIllegalAccessTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerIllegalAccessTest.scala
index 7ed0e13226..3e0b889e9c 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerIllegalAccessTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerIllegalAccessTest.scala
@@ -2,36 +2,24 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
+import scala.collection.JavaConverters._
+import scala.tools.asm.Opcodes._
import scala.tools.asm.tree._
-import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import AsmUtils._
-
-import scala.collection.convert.decorateAsScala._
-import scala.tools.testing.ClearAfterClass
-
-object InlinerIllegalAccessTest extends ClearAfterClass.Clearable {
- var compiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:none")
- def clear(): Unit = { compiler = null }
-}
+import scala.tools.nsc.backend.jvm.AsmUtils._
+import scala.tools.testing.BytecodeTesting
@RunWith(classOf[JUnit4])
-class InlinerIllegalAccessTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = InlinerIllegalAccessTest
+class InlinerIllegalAccessTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:none"
- val compiler = InlinerIllegalAccessTest.compiler
- import compiler.genBCode.bTypes._
+ import compiler._
+ import global.genBCode.bTypes._
- def addToRepo(cls: List[ClassNode]): Unit = for (c <- cls) byteCodeRepository.add(c, ByteCodeRepository.Classfile)
+ def addToRepo(cls: List[ClassNode]): Unit = for (c <- cls) byteCodeRepository.add(c, None)
def assertEmpty(ins: Option[AbstractInsnNode]) = for (i <- ins)
throw new AssertionError(textify(i))
@@ -51,7 +39,7 @@ class InlinerIllegalAccessTest extends ClearAfterClass {
|}
""".stripMargin
- val allClasses = compileClasses(compiler)(code)
+ val allClasses = compileClasses(code)
val List(cClass, dClass, eClass) = allClasses
assert(cClass.name == "a/C" && dClass.name == "a/D" && eClass.name == "b/E", s"${cClass.name}, ${dClass.name}, ${eClass.name}")
addToRepo(allClasses) // they are not on the compiler's classpath, so we add them manually to the code repo
@@ -67,7 +55,7 @@ class InlinerIllegalAccessTest extends ClearAfterClass {
check(dClass, assertEmpty)
check(eClass, assertEmpty) // C is public, so accessible in E
- byteCodeRepository.classes.clear()
+ byteCodeRepository.parsedClasses.clear()
classBTypeFromInternalName.clear()
cClass.access &= ~ACC_PUBLIC // ftw
@@ -127,7 +115,7 @@ class InlinerIllegalAccessTest extends ClearAfterClass {
|}
""".stripMargin
- val allClasses = compileClasses(compiler)(code)
+ val allClasses = compileClasses(code)
val List(cCl, dCl, eCl, fCl, gCl, hCl, iCl) = allClasses
addToRepo(allClasses)
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala
index 5c9bd1c188..a2513cacdc 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerSeparateCompilationTest.scala
@@ -2,27 +2,15 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import AsmUtils._
-import scala.collection.convert.decorateAsScala._
-
-object InlinerSeparateCompilationTest {
- val args = "-Ybackend:GenBCode -Yopt:l:classpath"
-}
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
class InlinerSeparateCompilationTest {
- import InlinerSeparateCompilationTest._
- import InlinerTest.{listStringLines, assertInvoke, assertNoInvoke}
+ val args = "-opt:l:classpath"
@Test
def inlnieMixedinMember(): Unit = {
@@ -44,10 +32,10 @@ class InlinerSeparateCompilationTest {
""".stripMargin
val warn = "T::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden"
- val List(c, o, oMod, t, tCls) = compileClassesSeparately(List(codeA, codeB), args + " -Yopt-warnings", _.msg contains warn)
- assertInvoke(getSingleMethod(c, "t1"), "T", "f")
- assertNoInvoke(getSingleMethod(c, "t2"))
- assertNoInvoke(getSingleMethod(c, "t3"))
+ val List(c, o, oMod, t) = compileClassesSeparately(List(codeA, codeB), args + " -opt-warnings", _.msg contains warn)
+ assertInvoke(getMethod(c, "t1"), "T", "f")
+ assertNoInvoke(getMethod(c, "t2"))
+ assertNoInvoke(getMethod(c, "t3"))
}
@Test
@@ -64,8 +52,8 @@ class InlinerSeparateCompilationTest {
|}
""".stripMargin
- val List(c, t, tCls) = compileClassesSeparately(List(codeA, codeB), args)
- assertNoInvoke(getSingleMethod(c, "t1"))
+ val List(c, t) = compileClassesSeparately(List(codeA, codeB), args)
+ assertNoInvoke(getMethod(c, "t1"))
}
@Test
@@ -87,8 +75,8 @@ class InlinerSeparateCompilationTest {
|}
""".stripMargin
- val List(c, t, tCls, u, uCls) = compileClassesSeparately(List(codeA, codeB), args)
- for (m <- List("t1", "t2", "t3")) assertNoInvoke(getSingleMethod(c, m))
+ val List(c, t, u) = compileClassesSeparately(List(codeA, codeB), args)
+ for (m <- List("t1", "t2", "t3")) assertNoInvoke(getMethod(c, m))
}
@Test
@@ -108,8 +96,8 @@ class InlinerSeparateCompilationTest {
|$assembly
""".stripMargin
- val List(a, aCls, t, tCls) = compileClassesSeparately(List(codeA, assembly), args)
- assertNoInvoke(getSingleMethod(tCls, "f"))
- assertNoInvoke(getSingleMethod(aCls, "n"))
+ val List(a, t) = compileClassesSeparately(List(codeA, assembly), args)
+ assertNoInvoke(getMethod(t, "f"))
+ assertNoInvoke(getMethod(a, "n"))
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala
index 0309bb97cc..a844c20a7f 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/InlinerTest.scala
@@ -2,72 +2,48 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
+
+import scala.collection.JavaConverters._
import scala.collection.generic.Clearable
-import scala.collection.mutable.ListBuffer
-import scala.reflect.internal.util.BatchSourceFile
import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-
import scala.tools.asm.tree._
-import scala.tools.asm.tree.analysis._
-import scala.tools.nsc.backend.jvm.opt.BytecodeUtils.AsmAnalyzer
-import scala.tools.nsc.io._
+import scala.tools.nsc.backend.jvm.BackendReporting._
import scala.tools.nsc.reporters.StoreReporter
-import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import AsmUtils._
-
-import BackendReporting._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
-import scala.collection.convert.decorateAsScala._
-import scala.tools.testing.ClearAfterClass
+@RunWith(classOf[JUnit4])
+class InlinerTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:classpath -opt-warnings"
-object InlinerTest extends ClearAfterClass.Clearable {
- val args = "-Ybackend:GenBCode -Yopt:l:classpath -Yopt-warnings"
- var compiler = newCompiler(extraArgs = args)
+ val inlineOnlyCompiler = cached("inlineOnlyCompiler", () => newCompiler(extraArgs = "-opt:inline-project"))
+ import compiler._
+ import global.genBCode.bTypes
// allows inspecting the caches after a compilation run
- def notPerRun: List[Clearable] = List(compiler.genBCode.bTypes.classBTypeFromInternalName, compiler.genBCode.bTypes.byteCodeRepository.classes, compiler.genBCode.bTypes.callGraph.callsites)
- notPerRun foreach compiler.perRunCaches.unrecordCache
-
- def clear(): Unit = { compiler = null }
+ def notPerRun: List[Clearable] = List(
+ bTypes.classBTypeFromInternalName,
+ bTypes.byteCodeRepository.compilingClasses,
+ bTypes.byteCodeRepository.parsedClasses,
+ bTypes.callGraph.callsites)
+ notPerRun foreach global.perRunCaches.unrecordCache
- implicit class listStringLines[T](val l: List[T]) extends AnyVal {
- def stringLines = l.mkString("\n")
- }
-
- def assertNoInvoke(m: Method): Unit = assertNoInvoke(m.instructions)
- def assertNoInvoke(ins: List[Instruction]): Unit = {
- assert(!ins.exists(_.isInstanceOf[Invoke]), ins.stringLines)
- }
-
- def assertInvoke(m: Method, receiver: String, method: String): Unit = assertInvoke(m.instructions, receiver, method)
- def assertInvoke(l: List[Instruction], receiver: String, method: String): Unit = {
- assert(l.exists {
- case Invoke(_, `receiver`, `method`, _, _) => true
- case _ => false
- }, l.stringLines)
- }
-}
-
-@RunWith(classOf[JUnit4])
-class InlinerTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = InlinerTest
+ import global.genBCode.bTypes.{byteCodeRepository, callGraph, inliner, inlinerHeuristics}
+ import inlinerHeuristics._
- import InlinerTest.{listStringLines, assertInvoke, assertNoInvoke}
-
- val compiler = InlinerTest.compiler
- import compiler.genBCode.bTypes._
def compile(scalaCode: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): List[ClassNode] = {
- InlinerTest.notPerRun.foreach(_.clear())
- compileClasses(compiler)(scalaCode, javaCode, allowMessage)
+ notPerRun.foreach(_.clear())
+ compileToBytes(scalaCode, javaCode, allowMessage)
+ // Use the class nodes stored in the byteCodeRepository. The ones returned by compileClasses are not the same,
+ // these are created new from the classfile byte array. They are completely separate instances which cannot
+ // be used to look up methods / callsites in the callGraph hash maps for example.
+ byteCodeRepository.compilingClasses.valuesIterator.map(_._1).toList.sortBy(_.name)
}
def checkCallsite(callsite: callGraph.Callsite, callee: MethodNode) = {
@@ -79,27 +55,25 @@ class InlinerTest extends ClearAfterClass {
assert(callsite.callee.get.callee == callee, callsite.callee.get.callee.name)
}
- // inline first invocation of f into g in class C
- def inlineTest(code: String, mod: ClassNode => Unit = _ => ()): (MethodNode, Option[CannotInlineWarning]) = {
- val List(cls) = compile(code)
- mod(cls)
- val clsBType = classBTypeFromParsedClassfile(cls.name)
+ def getCallsite(method: MethodNode, calleeName: String) = callGraph.callsites(method).valuesIterator.find(_.callee.get.callee.name == calleeName).get
- val List(f, g) = cls.methods.asScala.filter(m => Set("f", "g")(m.name)).toList.sortBy(_.name)
- val fCall = g.instructions.iterator.asScala.collect({ case i: MethodInsnNode if i.name == "f" => i }).next()
+ def gMethAndFCallsite(code: String, mod: ClassNode => Unit = _ => ()) = {
+ val List(c) = compile(code)
+ mod(c)
+ val gMethod = getAsmMethod(c, "g")
+ val fCall = getCallsite(gMethod, "f")
+ (gMethod, fCall)
+ }
- val analyzer = new AsmAnalyzer(g, clsBType.internalName)
+ def canInlineTest(code: String, mod: ClassNode => Unit = _ => ()): Option[OptimizerWarning] = {
+ val cs = gMethAndFCallsite(code, mod)._2
+ inliner.earlyCanInlineCheck(cs) orElse inliner.canInlineBody(cs)
+ }
- val r = inliner.inline(
- fCall,
- analyzer.frameAt(fCall).getStackSize,
- g,
- clsBType,
- f,
- clsBType,
- receiverKnownNotNull = true,
- keepLineNumbers = true)
- (g, r)
+ def inlineTest(code: String, mod: ClassNode => Unit = _ => ()): MethodNode = {
+ val (gMethod, fCall) = gMethAndFCallsite(code, mod)
+ inliner.inline(InlineRequest(fCall, Nil, null))
+ gMethod
}
@Test
@@ -111,10 +85,10 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
- val (g, _) = inlineTest(code)
+ val g = inlineTest(code)
val gConv = convertMethod(g)
- assertSameCode(gConv.instructions.dropNonOp,
+ assertSameCode(gConv,
List(
VarOp(ALOAD, 0), VarOp(ASTORE, 1), // store this
Op(ICONST_1), VarOp(ISTORE, 2), Jump(GOTO, Label(10)), // store return value
@@ -145,16 +119,23 @@ class InlinerTest extends ClearAfterClass {
// See also discussion around ATHROW in BCodeBodyBuilder
- val (g, _) = inlineTest(code)
- val expectedInlined = List(
- VarOp(ALOAD, 0), VarOp(ASTORE, 1), // store this
- Field(GETSTATIC, "scala/Predef$", "MODULE$", "Lscala/Predef$;"), Invoke(INVOKEVIRTUAL, "scala/Predef$", "$qmark$qmark$qmark", "()Lscala/runtime/Nothing$;", false)) // inlined call to ???
+ val g = inlineTest(code)
+
+ val invokeQQQ = List(
+ Field(GETSTATIC, "scala/Predef$", "MODULE$", "Lscala/Predef$;"),
+ Invoke(INVOKEVIRTUAL, "scala/Predef$", "$qmark$qmark$qmark", "()Lscala/runtime/Nothing$;", false))
- assertSameCode(convertMethod(g).instructions.dropNonOp.take(4), expectedInlined)
+ val gBeforeLocalOpt = VarOp(ALOAD, 0) :: VarOp(ASTORE, 1) :: invokeQQQ ::: List(
+ VarOp(ASTORE, 2),
+ Jump(GOTO, Label(11)),
+ Label(11),
+ VarOp(ALOAD, 2),
+ Op(ATHROW))
- compiler.genBCode.bTypes.localOpt.methodOptimizations(g, "C")
- assertSameCode(convertMethod(g).instructions.dropNonOp,
- expectedInlined ++ List(VarOp(ASTORE, 2), VarOp(ALOAD, 2), Op(ATHROW)))
+ assertSameCode(convertMethod(g), gBeforeLocalOpt)
+
+ global.genBCode.bTypes.localOpt.methodOptimizations(g, "C")
+ assertSameCode(convertMethod(g), invokeQQQ :+ Op(ATHROW))
}
@Test
@@ -166,11 +147,11 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
- val (_, can) = inlineTest(code, cls => {
- val f = cls.methods.asScala.find(_.name == "f").get
+ val can = canInlineTest(code, cls => {
+ val f = getAsmMethod(cls, "f")
f.access |= ACC_SYNCHRONIZED
})
- assert(can.get.isInstanceOf[SynchronizedMethod], can)
+ assert(can.nonEmpty && can.get.isInstanceOf[SynchronizedMethod], can)
}
@Test
@@ -181,7 +162,7 @@ class InlinerTest extends ClearAfterClass {
| def g = f + 1
|}
""".stripMargin
- val (_, r) = inlineTest(code)
+ val r = canInlineTest(code)
assert(r.isEmpty, r)
}
@@ -195,8 +176,8 @@ class InlinerTest extends ClearAfterClass {
| def g = println(f)
|}
""".stripMargin
- val (_, r) = inlineTest(code)
- assert(r.get.isInstanceOf[MethodWithHandlerCalledOnNonEmptyStack], r)
+ val r = canInlineTest(code)
+ assert(r.nonEmpty && r.get.isInstanceOf[MethodWithHandlerCalledOnNonEmptyStack], r)
}
@Test
@@ -216,29 +197,10 @@ class InlinerTest extends ClearAfterClass {
""".stripMargin
val List(c, d) = compile(code)
-
- val cTp = classBTypeFromParsedClassfile(c.name)
- val dTp = classBTypeFromParsedClassfile(d.name)
-
- val g = c.methods.asScala.find(_.name == "g").get
- val h = d.methods.asScala.find(_.name == "h").get
- val gCall = h.instructions.iterator.asScala.collect({
- case m: MethodInsnNode if m.name == "g" => m
- }).next()
-
- val analyzer = new AsmAnalyzer(h, dTp.internalName)
-
- val r = inliner.inline(
- gCall,
- analyzer.frameAt(gCall).getStackSize,
- h,
- dTp,
- g,
- cTp,
- receiverKnownNotNull = true,
- keepLineNumbers = true)
-
- assert(r.get.isInstanceOf[IllegalAccessInstruction], r)
+ val hMeth = getAsmMethod(d, "h")
+ val gCall = getCallsite(hMeth, "g")
+ val r = inliner.canInlineBody(gCall)
+ assert(r.nonEmpty && r.get.isInstanceOf[IllegalAccessInstruction], r)
}
@Test
@@ -252,7 +214,7 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
val List(cCls) = compile(code)
- val instructions = getSingleMethod(cCls, "test").instructions
+ val instructions = getInstructions(cCls, "test")
assert(instructions.contains(Op(ICONST_0)), instructions.stringLines)
assert(!instructions.contains(Op(ICONST_1)), instructions)
}
@@ -273,7 +235,7 @@ class InlinerTest extends ClearAfterClass {
assert(gIns contains invokeG, gIns) // f is inlined into g, g invokes itself recursively
assert(callGraph.callsites.size == 3, callGraph.callsites)
- for (callsite <- callGraph.callsites.values if methods.contains(callsite.callsiteMethod)) {
+ for (callsite <- callGraph.callsites.valuesIterator.flatMap(_.valuesIterator) if methods.contains(callsite.callsiteMethod)) {
checkCallsite(callsite, g)
}
}
@@ -295,8 +257,8 @@ class InlinerTest extends ClearAfterClass {
assert(gIns.count(_ == invokeG) == 2, gIns)
assert(hIns.count(_ == invokeG) == 2, hIns)
- assert(callGraph.callsites.size == 7, callGraph.callsites)
- for (callsite <- callGraph.callsites.values if methods.contains(callsite.callsiteMethod)) {
+ assert(callGraph.callsites.valuesIterator.flatMap(_.valuesIterator).size == 7, callGraph.callsites)
+ for (callsite <- callGraph.callsites.valuesIterator.flatMap(_.valuesIterator) if methods.contains(callsite.callsiteMethod)) {
checkCallsite(callsite, g)
}
}
@@ -318,7 +280,7 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
val List(c, _, _) = compile(code)
- val ins = getSingleMethod(c, "f").instructions
+ val ins = getInstructions(c, "f")
val invokeSysArraycopy = Invoke(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V", false)
assert(ins contains invokeSysArraycopy, ins.stringLines)
}
@@ -336,7 +298,7 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
val List(c) = compile(code)
- assert(callGraph.callsites.values exists (_.callsiteInstruction.name == "clone"))
+ assert(callGraph.callsites.valuesIterator.flatMap(_.valuesIterator) exists (_.callsiteInstruction.name == "clone"))
}
@Test
@@ -349,8 +311,8 @@ class InlinerTest extends ClearAfterClass {
| def g(t: T) = t.f
|}
""".stripMargin
- val List(c, t, tClass) = compile(code)
- assertNoInvoke(getSingleMethod(c, "g"))
+ val List(c, t) = compile(code)
+ assertNoInvoke(getMethod(c, "g"))
}
@Test
@@ -363,7 +325,7 @@ class InlinerTest extends ClearAfterClass {
""".stripMargin
val List(c) = compile(code)
// no more invoke, f is inlined
- assertNoInvoke(getSingleMethod(c, "g"))
+ assertNoInvoke(getMethod(c, "g"))
}
@Test
@@ -375,26 +337,14 @@ class InlinerTest extends ClearAfterClass {
""".stripMargin
val List(c) = compile(code)
- val f = c.methods.asScala.find(_.name == "f").get
- val callsiteIns = f.instructions.iterator().asScala.collect({ case c: MethodInsnNode => c }).next()
- val clsBType = classBTypeFromParsedClassfile(c.name)
- val analyzer = new AsmAnalyzer(f, clsBType.internalName)
-
- val integerClassBType = classBTypeFromInternalName("java/lang/Integer")
- val lowestOneBitMethod = byteCodeRepository.methodNode(integerClassBType.internalName, "lowestOneBit", "(I)I").get._1
-
- val r = inliner.inline(
- callsiteIns,
- analyzer.frameAt(callsiteIns).getStackSize,
- f,
- clsBType,
- lowestOneBitMethod,
- integerClassBType,
- receiverKnownNotNull = false,
- keepLineNumbers = false)
+ val fMeth = getAsmMethod(c, "f")
+ val call = getCallsite(fMeth, "lowestOneBit")
- assert(r.isEmpty, r)
- val ins = instructionsFromMethod(f)
+ val warning = inliner.canInlineBody(call)
+ assert(warning.isEmpty, warning)
+
+ inliner.inline(InlineRequest(call, Nil, null))
+ val ins = instructionsFromMethod(fMeth)
// no invocations, lowestOneBit is inlined
assertNoInvoke(ins)
@@ -425,7 +375,8 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
- val List(c) = compile(code)
+ // use a compiler without local optimizations (cleanups)
+ val c = inlineOnlyCompiler.compileClass(code)
val ms @ List(f1, f2, g1, g2) = c.methods.asScala.filter(_.name.length == 2).toList
// stack height at callsite of f1 is 1, so max of g1 after inlining is max of f1 + 1
@@ -465,12 +416,12 @@ class InlinerTest extends ClearAfterClass {
"""B::flop()I is annotated @inline but could not be inlined:
|Failed to check if B::flop()I can be safely inlined to B without causing an IllegalAccessError. Checking instruction INVOKESTATIC A.bar ()I failed:
|The method bar()I could not be found in the class A or any of its parents.
- |Note that the following parent classes are defined in Java sources (mixed compilation), no bytecode is available: A""".stripMargin
+ |Note that class A is defined in a Java source (mixed compilation), no bytecode is available.""".stripMargin
var c = 0
val List(b) = compile(scalaCode, List((javaCode, "A.java")), allowMessage = i => {c += 1; i.msg contains warn})
assert(c == 1, c)
- val ins = getSingleMethod(b, "g").instructions
+ val ins = getInstructions(b, "g")
val invokeFlop = Invoke(INVOKEVIRTUAL, "B", "flop", "()I", false)
assert(ins contains invokeFlop, ins.stringLines)
}
@@ -488,23 +439,10 @@ class InlinerTest extends ClearAfterClass {
| def t2(c: C) = c.f
|}
""".stripMargin
- val List(c, t, tClass) = compile(code)
+ val List(c, t) = compile(code)
// both are just `return 1`, no more calls
- assertNoInvoke(getSingleMethod(c, "t1"))
- assertNoInvoke(getSingleMethod(c, "t2"))
- }
-
- @Test
- def inlineMixinMethods(): Unit = {
- val code =
- """trait T {
- | @inline final def f = 1
- |}
- |class C extends T
- """.stripMargin
- val List(c, t, tClass) = compile(code)
- // the static implementation method is inlined into the mixin, so there's no invocation in the mixin
- assertNoInvoke(getSingleMethod(c, "f"))
+ assertNoInvoke(getMethod(c, "t1"))
+ assertNoInvoke(getMethod(c, "t2"))
}
@Test
@@ -521,9 +459,9 @@ class InlinerTest extends ClearAfterClass {
| def t2 = g
|}
""".stripMargin
- val List(c, t, tClass, u, uClass) = compile(code)
- assertNoInvoke(getSingleMethod(c, "t1"))
- assertNoInvoke(getSingleMethod(c, "t2"))
+ val List(c, t, u) = compile(code)
+ assertNoInvoke(getMethod(c, "t1"))
+ assertNoInvoke(getMethod(c, "t2"))
}
@Test
@@ -537,14 +475,12 @@ class InlinerTest extends ClearAfterClass {
| def t2 = this.f
|}
""".stripMargin
- val warns = Set(
- "C::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden",
- "T::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden")
+ val warn = "::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden"
var count = 0
- val List(c, t, tClass) = compile(code, allowMessage = i => {count += 1; warns.exists(i.msg contains _)})
+ val List(c, t) = compile(code, allowMessage = i => {count += 1; i.msg contains warn})
assert(count == 2, count)
- assertInvoke(getSingleMethod(c, "t1"), "T", "f")
- assertInvoke(getSingleMethod(c, "t2"), "C", "f")
+ assertInvoke(getMethod(c, "t1"), "T", "f")
+ assertInvoke(getMethod(c, "t2"), "C", "f")
}
@Test
@@ -557,8 +493,8 @@ class InlinerTest extends ClearAfterClass {
| def t1(t: T) = t.f
|}
""".stripMargin
- val List(c, t, tClass) = compile(code)
- assertNoInvoke(getSingleMethod(c, "t1"))
+ val List(c, t) = compile(code)
+ assertNoInvoke(getMethod(c, "t1"))
}
@Test
@@ -569,7 +505,7 @@ class InlinerTest extends ClearAfterClass {
|}
|object O extends T {
| @inline def g = 1
- | // mixin generates `def f = T$class.f(this)`, which is inlined here (we get ICONST_0)
+ | // mixin generates `def f = super[T].f`, which is inlined here (we get ICONST_0)
|}
|class C {
| def t1 = O.f // the mixin method of O is inlined, so we directly get the ICONST_0
@@ -579,14 +515,14 @@ class InlinerTest extends ClearAfterClass {
""".stripMargin
val warn = "T::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden"
var count = 0
- val List(c, oMirror, oModule, t, tClass) = compile(code, allowMessage = i => {count += 1; i.msg contains warn})
+ val List(c, oMirror, oModule, t) = compile(code, allowMessage = i => {count += 1; i.msg contains warn})
assert(count == 1, count)
- assertNoInvoke(getSingleMethod(oModule, "f"))
+ assertNoInvoke(getMethod(t, "f"))
- assertNoInvoke(getSingleMethod(c, "t1"))
- assertNoInvoke(getSingleMethod(c, "t2"))
- assertInvoke(getSingleMethod(c, "t3"), "T", "f")
+ assertNoInvoke(getMethod(c, "t1"))
+ assertNoInvoke(getMethod(c, "t2"))
+ assertInvoke(getMethod(c, "t3"), "T", "f")
}
@Test
@@ -598,24 +534,22 @@ class InlinerTest extends ClearAfterClass {
|}
|trait Assembly extends T {
| @inline final def g = 1
- | @inline final def n = m // inlined. (*)
- | // (*) the declaration class of m is T. the signature of T$class.m is m(LAssembly;)I. so we need the self type to build the
- | // signature. then we can look up the MethodNode of T$class.m and then rewrite the INVOKEINTERFACE to INVOKESTATIC.
+ | @inline final def n = m // inlined (m is final)
|}
|class C {
- | def t1(a: Assembly) = a.f // like above, decl class is T, need self-type of T to rewrite the interface call to static.
+ | def t1(a: Assembly) = a.f // inlined (f is final)
| def t2(a: Assembly) = a.n
|}
""".stripMargin
- val List(assembly, assemblyClass, c, t, tClass) = compile(code)
+ val List(assembly, c, t) = compile(code)
- assertNoInvoke(getSingleMethod(tClass, "f"))
+ assertNoInvoke(getMethod(t, "f"))
- assertNoInvoke(getSingleMethod(assemblyClass, "n"))
+ assertNoInvoke(getMethod(assembly, "n"))
- assertNoInvoke(getSingleMethod(c, "t1"))
- assertNoInvoke(getSingleMethod(c, "t2"))
+ assertNoInvoke(getMethod(c, "t1"))
+ assertNoInvoke(getMethod(c, "t2"))
}
@Test
@@ -647,30 +581,30 @@ class InlinerTest extends ClearAfterClass {
val code =
"""trait T1 {
| @inline def f: Int = 0
- | @inline def g1 = f // not inlined: f not final, so T1$class.g1 has an interface call T1.f
+ | @inline def g1 = f // not inlined: f not final
|}
|
- |// erased self-type (used in impl class for `self` parameter): T1
+ |// erased self-type: T1
|trait T2a { self: T1 with T2a =>
| @inline override final def f = 1
- | @inline def g2a = f // inlined: resolved as T2a.f, which is re-written to T2a$class.f, so T2a$class.g2a has ICONST_1
+ | @inline def g2a = f // inlined: resolved as T2a.f
|}
|
|final class Ca extends T1 with T2a {
- | // mixin generates accessors like `def g1 = T1$class.g1`, the impl class method call is inlined into the accessor.
+ | // mixin generates accessors like `def g1 = super[T1].g1`, the impl super call is inlined into the accessor.
|
| def m1a = g1 // call to accessor, inlined, we get the interface call T1.f
| def m2a = g2a // call to accessor, inlined, we get ICONST_1
| def m3a = f // call to accessor, inlined, we get ICONST_1
|
- | def m4a(t: T1) = t.f // T1.f is not final, so not inlined, interface call to T1.f
- | def m5a(t: T2a) = t.f // re-written to T2a$class.f, inlined, ICONST_1
+ | def m4a(t: T1) = t.f // T1.f is not final, so not inlined, we get an interface call T1.f
+ | def m5a(t: T2a) = t.f // inlined, we get ICONST_1
|}
|
|// erased self-type: T2b
|trait T2b { self: T2b with T1 =>
| @inline override final def f = 1
- | @inline def g2b = f // not inlined: resolved as T1.f, so T2b$class.g2b has an interface call T1.f
+ | @inline def g2b = f // not inlined: resolved as T1.f, we get an interface call T1.f
|}
|
|final class Cb extends T1 with T2b {
@@ -679,35 +613,29 @@ class InlinerTest extends ClearAfterClass {
| def m3b = f // inlined, we get ICONST_1
|
| def m4b(t: T1) = t.f // T1.f is not final, so not inlined, interface call to T1.f
- | def m5b(t: T2b) = t.f // re-written to T2b$class.f, inlined, ICONST_1
+ | def m5b(t: T2b) = t.f // inlined, ICONST_1
|}
""".stripMargin
val warning = "T1::f()I is annotated @inline but cannot be inlined: the method is not final and may be overridden"
var count = 0
- val List(ca, cb, t1, t1C, t2a, t2aC, t2b, t2bC) = compile(code, allowMessage = i => {count += 1; i.msg contains warning})
+ val List(ca, cb, t1, t2a, t2b) = compile(code, allowMessage = i => {count += 1; i.msg contains warning})
assert(count == 4, count) // see comments, f is not inlined 4 times
- val t2aCfDesc = t2aC.methods.asScala.find(_.name == "f").get.desc
- assert(t2aCfDesc == "(LT1;)I", t2aCfDesc) // self-type of T2a is T1
-
- val t2bCfDesc = t2bC.methods.asScala.find(_.name == "f").get.desc
- assert(t2bCfDesc == "(LT2b;)I", t2bCfDesc) // self-type of T2b is T2b
+ assertNoInvoke(getMethod(t2a, "g2a"))
+ assertInvoke(getMethod(t2b, "g2b"), "T1", "f")
- assertNoInvoke(getSingleMethod(t2aC, "g2a"))
- assertInvoke(getSingleMethod(t2bC, "g2b"), "T1", "f")
+ assertInvoke(getMethod(ca, "m1a"), "T1", "f")
+ assertNoInvoke(getMethod(ca, "m2a")) // no invoke, see comment on def g2a
+ assertNoInvoke(getMethod(ca, "m3a"))
+ assertInvoke(getMethod(ca, "m4a"), "T1", "f")
+ assertNoInvoke(getMethod(ca, "m5a"))
- assertInvoke(getSingleMethod(ca, "m1a"), "T1", "f")
- assertNoInvoke(getSingleMethod(ca, "m2a")) // no invoke, see comment on def g2a
- assertNoInvoke(getSingleMethod(ca, "m3a"))
- assertInvoke(getSingleMethod(ca, "m4a"), "T1", "f")
- assertNoInvoke(getSingleMethod(ca, "m5a"))
-
- assertInvoke(getSingleMethod(cb, "m1b"), "T1", "f")
- assertInvoke(getSingleMethod(cb, "m2b"), "T1", "f") // invoke, see comment on def g2b
- assertNoInvoke(getSingleMethod(cb, "m3b"))
- assertInvoke(getSingleMethod(cb, "m4b"), "T1", "f")
- assertNoInvoke(getSingleMethod(cb, "m5b"))
+ assertInvoke(getMethod(cb, "m1b"), "T1", "f")
+ assertInvoke(getMethod(cb, "m2b"), "T1", "f") // invoke, see comment on def g2b
+ assertNoInvoke(getMethod(cb, "m3b"))
+ assertInvoke(getMethod(cb, "m4b"), "T1", "f")
+ assertNoInvoke(getMethod(cb, "m5b"))
}
@Test
@@ -724,7 +652,7 @@ class InlinerTest extends ClearAfterClass {
|} // so d.f can be resolved statically. same for E.f
""".stripMargin
val List(c, d, e, eModule, t) = compile(code)
- assertNoInvoke(getSingleMethod(t, "t1"))
+ assertNoInvoke(getMethod(t, "t1"))
}
@Test
@@ -732,16 +660,15 @@ class InlinerTest extends ClearAfterClass {
val code =
"""class C {
| trait T { @inline final def f = 1 }
- | class D extends T{
+ | class D extends T {
| def m(t: T) = t.f
| }
- |
| def m(d: D) = d.f
|}
""".stripMargin
- val List(c, d, t, tC) = compile(code)
- assertNoInvoke(getSingleMethod(d, "m"))
- assertNoInvoke(getSingleMethod(c, "m"))
+ val List(c, d, t) = compile(code)
+ assertNoInvoke(getMethod(d, "m"))
+ assertNoInvoke(getMethod(c, "m"))
}
@Test
@@ -754,9 +681,9 @@ class InlinerTest extends ClearAfterClass {
| def t2(t: T) = t.f(2)
|}
""".stripMargin
- val List(c, t, tc) = compile(code)
- val t1 = getSingleMethod(tc, "t1")
- val t2 = getSingleMethod(tc, "t2")
+ val List(c, t) = compile(code)
+ val t1 = getMethod(t, "t1")
+ val t2 = getMethod(t, "t2")
val cast = TypeOp(CHECKCAST, "C")
Set(t1, t2).foreach(m => assert(m.instructions.contains(cast), m.instructions))
}
@@ -799,12 +726,12 @@ class InlinerTest extends ClearAfterClass {
"""sealed trait T {
| lazy val a = 0
| val b = 1
- | final lazy val c = 2
+ | final lazy val c: Int = 2 // make sure it doesn't get a constant type
| final val d = 3
| final val d1: Int = 3
|
- | @noinline def f = 5 // re-written to T$class
- | @noinline final def g = 6 // re-written
+ | @noinline def f = 5
+ | @noinline final def g = 6
|
| @noinline def h: Int
| @inline def i: Int
@@ -813,12 +740,12 @@ class InlinerTest extends ClearAfterClass {
|trait U { // not sealed
| lazy val a = 0
| val b = 1
- | final lazy val c = 2
+ | final lazy val c: Int = 2 // make sure it doesn't get a constant type
| final val d = 3
| final val d1: Int = 3
|
- | @noinline def f = 5 // not re-written (not final)
- | @noinline final def g = 6 // re-written
+ | @noinline def f = 5
+ | @noinline final def g = 6
|
| @noinline def h: Int
| @inline def i: Int
@@ -835,30 +762,30 @@ class InlinerTest extends ClearAfterClass {
|}
""".stripMargin
- val List(c, t, tClass, u, uClass) = compile(code, allowMessage = _.msg contains "i()I is annotated @inline but cannot be inlined")
- val m1 = getSingleMethod(c, "m1")
+ val List(c, t, u) = compile(code, allowMessage = _.msg contains "i()I is annotated @inline but cannot be inlined")
+ val m1 = getMethod(c, "m1")
assertInvoke(m1, "T", "a")
assertInvoke(m1, "T", "b")
- assertInvoke(m1, "T", "c")
+// assertInvoke(m1, "T", "c") -- this lazy val is implemented purely in the trait, as it's constant, so it *can* be inlined
- assertNoInvoke(getSingleMethod(c, "m2"))
+ assertNoInvoke(getMethod(c, "m2"))
- val m3 = getSingleMethod(c, "m3")
- assertInvoke(m3, "T$class", "f")
- assertInvoke(m3, "T$class", "g")
+ val m3 = getMethod(c, "m3")
+ assertInvoke(m3, "T", "f")
+ assertInvoke(m3, "T", "g")
assertInvoke(m3, "T", "h")
assertInvoke(m3, "T", "i")
- val m4 = getSingleMethod(c, "m4")
+ val m4 = getMethod(c, "m4")
assertInvoke(m4, "U", "a")
assertInvoke(m4, "U", "b")
- assertInvoke(m4, "U", "c")
+// assertInvoke(m4, "U", "c") -- this lazy val is implemented purely in the trait, as it's constant, so it *can* be inlined
- assertNoInvoke(getSingleMethod(c, "m5"))
+ assertNoInvoke(getMethod(c, "m5"))
- val m6 = getSingleMethod(c, "m6")
+ val m6 = getMethod(c, "m6")
assertInvoke(m6, "U", "f")
- assertInvoke(m6, "U$class", "g")
+ assertInvoke(m6, "U", "g")
assertInvoke(m6, "U", "h")
assertInvoke(m6, "U", "i")
}
@@ -892,11 +819,11 @@ class InlinerTest extends ClearAfterClass {
val warn =
"""failed to determine if <init> should be inlined:
|The method <init>()V could not be found in the class A$Inner or any of its parents.
- |Note that the following parent classes could not be found on the classpath: A$Inner""".stripMargin
+ |Note that class A$Inner could not be found on the classpath.""".stripMargin
var c = 0
- compileClasses(newCompiler(extraArgs = InlinerTest.args + " -Yopt-warnings:_"))(
+ newCompiler(extraArgs = compilerArgs + " -opt-warnings:_").compileClasses(
scalaCode,
List((javaCode, "A.java")),
allowMessage = i => {c += 1; i.msg contains warn})
@@ -906,11 +833,11 @@ class InlinerTest extends ClearAfterClass {
@Test
def inlineInvokeSpecial(): Unit = {
val code =
- """class Aa {
+ """class A {
| def f1 = 0
|}
- |class B extends Aa {
- | @inline final override def f1 = 1 + super.f1 // invokespecial Aa.f1
+ |class B extends A {
+ | @inline final override def f1 = 1 + super.f1 // invokespecial A.f1
|
| private def f2m = 0 // public B$$f2m in bytecode
| @inline final def f2 = f2m // invokevirtual B.B$$f2m
@@ -934,21 +861,21 @@ class InlinerTest extends ClearAfterClass {
val warn =
"""B::f1()I is annotated @inline but could not be inlined:
- |The callee B::f1()I contains the instruction INVOKESPECIAL Aa.f1 ()I
+ |The callee B::f1()I contains the instruction INVOKESPECIAL A.f1 ()I
|that would cause an IllegalAccessError when inlined into class T.""".stripMargin
var c = 0
val List(a, b, t) = compile(code, allowMessage = i => {c += 1; i.msg contains warn})
assert(c == 1, c)
- assertInvoke(getSingleMethod(b, "t1"), "Aa", "f1")
- assertInvoke(getSingleMethod(b, "t2"), "B", "B$$f2m")
- assertInvoke(getSingleMethod(b, "t3"), "B", "<init>")
- assertInvoke(getSingleMethod(b, "t4"), "B", "<init>")
+ assertInvoke(getMethod(b, "t1"), "A", "f1")
+ assertInvoke(getMethod(b, "t2"), "B", "B$$f2m")
+ assertInvoke(getMethod(b, "t3"), "B", "<init>")
+ assertInvoke(getMethod(b, "t4"), "B", "<init>")
- assertInvoke(getSingleMethod(t, "t1"), "B", "f1")
- assertInvoke(getSingleMethod(t, "t2"), "B", "B$$f2m")
- assertInvoke(getSingleMethod(t, "t3"), "B", "<init>")
- assertInvoke(getSingleMethod(t, "t4"), "B", "<init>")
+ assertInvoke(getMethod(t, "t1"), "B", "f1")
+ assertInvoke(getMethod(t, "t2"), "B", "B$$f2m")
+ assertInvoke(getMethod(t, "t3"), "B", "<init>")
+ assertInvoke(getMethod(t, "t4"), "B", "<init>")
}
@Test
@@ -958,8 +885,8 @@ class InlinerTest extends ClearAfterClass {
| def t = System.arraycopy(null, 0, null, 0, 0)
|}
""".stripMargin
- val List(c) = compileClasses(newCompiler(extraArgs = InlinerTest.args + " -Yopt-inline-heuristics:everything"))(code)
- assertInvoke(getSingleMethod(c, "t"), "java/lang/System", "arraycopy")
+ val c = newCompiler(extraArgs = compilerArgs + " -Yopt-inline-heuristics:everything").compileClass(code)
+ assertInvoke(getMethod(c, "t"), "java/lang/System", "arraycopy")
}
@Test
@@ -973,7 +900,7 @@ class InlinerTest extends ClearAfterClass {
""".stripMargin
val List(c) = compile(code)
- assertInvoke(getSingleMethod(c, "t"), "java/lang/Error", "<init>")
+ assertInvoke(getMethod(c, "t"), "java/lang/Error", "<init>")
}
@Test
@@ -986,9 +913,713 @@ class InlinerTest extends ClearAfterClass {
""".stripMargin
val List(c) = compile(code)
- val t = getSingleMethod(c, "t").instructions
+ val t = getInstructions(c, "t")
assertNoInvoke(t)
- assert(2 == t.collect({case Ldc(_, "hai!") => }).size) // twice the body of f
+ assert(1 == t.collect({case Ldc(_, "hai!") => }).size) // push-pop eliminates the first LDC("hai!")
assert(1 == t.collect({case Jump(IFNONNULL, _) => }).size) // one single null check
}
+
+ @Test
+ def inlineIndyLambda(): Unit = {
+ val code =
+ """object M {
+ | @inline def m(s: String) = {
+ | val f = (x: String) => x.trim
+ | f(s)
+ | }
+ |}
+ |class C {
+ | @inline final def m(s: String) = {
+ | val f = (x: String) => x.trim
+ | f(s)
+ | }
+ | def t1 = m("foo")
+ | def t2 = M.m("bar")
+ |}
+ """.stripMargin
+
+ val List(c, _, _) = compile(code)
+
+ val t1 = getMethod(c, "t1")
+ assertNoIndy(t1)
+ // the indy call is inlined into t, and the closure elimination rewrites the closure invocation to the body method
+ assertInvoke(t1, "C", "$anonfun$m$2")
+
+ val t2 = getMethod(c, "t2")
+ assertNoIndy(t2)
+ assertInvoke(t2, "M$", "$anonfun$m$1")
+ }
+
+ @Test
+ def inlinePostRequests(): Unit = {
+ val code =
+ """class C {
+ | final def f = 10
+ | final def g = f + 19
+ | final def h = g + 29
+ | final def i = h + 39
+ |}
+ """.stripMargin
+
+ val List(c) = compile(code)
+ val hMeth = getAsmMethod(c, "h")
+ val gMeth = getAsmMethod(c, "g")
+ val iMeth = getAsmMethod(c, "i")
+ val fCall = getCallsite(gMeth, "f")
+ val gCall = getCallsite(hMeth, "g")
+ val hCall = getCallsite(iMeth, "h")
+
+ val warning = inliner.canInlineBody(gCall)
+ assert(warning.isEmpty, warning)
+
+ inliner.inline(InlineRequest(hCall,
+ post = List(InlineRequest(gCall,
+ post = List(InlineRequest(fCall, Nil, null)), null)), null))
+ assertNoInvoke(convertMethod(iMeth)) // no invoke in i: first h is inlined, then the inlined call to g is also inlined, etc for f
+ assertInvoke(convertMethod(gMeth), "C", "f") // g itself still has the call to f
+ }
+
+ @Test
+ def postRequestSkipAlreadyInlined(): Unit = {
+ val code =
+ """class C {
+ | final def a = 10
+ | final def b = a + 20
+ | final def c = b + 30
+ | final def d = c + 40
+ |}
+ """.stripMargin
+
+ val List(cl) = compile(code)
+ val List(b, c, d) = List("b", "c", "d").map(getAsmMethod(cl, _))
+ val aCall = getCallsite(b, "a")
+ val bCall = getCallsite(c, "b")
+ val cCall = getCallsite(d, "c")
+
+ inliner.inline(InlineRequest(bCall, Nil, null))
+
+ val req = InlineRequest(cCall,
+ List(InlineRequest(bCall,
+ List(InlineRequest(aCall, Nil, null)), null)), null)
+ inliner.inline(req)
+
+ assertNoInvoke(convertMethod(d))
+ }
+
+ @Test
+ def inlineAnnotatedCallsite(): Unit = {
+ val code =
+ """class C {
+ | final def a(x: Int, f: Int => Int): Int = f(x)
+ | final def b(x: Int) = x
+ | final def c = 1
+ | final def d[T] = 2
+ | final def e[T](x: T) = c
+ | final def f[T](x: T) = println(x)
+ | final def g(x: Int)(y: Int) = x
+ |
+ | def t1 = a(10, _ + 1)
+ | def t2 = a(10, _ + 1): @noinline
+ | def t3 = b(3)
+ | def t4 = b(3): @inline
+ | def t5 = c: @inline
+ | def t6 = d[Int]: @inline
+ | def t7 = e[Int](2): @inline
+ | def t8 = f[Int](2): @inline
+ | def t9 = g(1)(2): @inline
+ |}
+ """.stripMargin
+
+ val List(c) = compile(code)
+ assertInvoke(getMethod(c, "t1"), "C", "$anonfun$t1$1")
+ assertInvoke(getMethod(c, "t2"), "C", "a")
+ assertInvoke(getMethod(c, "t3"), "C", "b")
+ assertNoInvoke(getMethod(c, "t4"))
+ assertNoInvoke(getMethod(c, "t5"))
+ assertNoInvoke(getMethod(c, "t6"))
+ assertInvoke(getMethod(c, "t7"), "C", "c")
+ assertInvoke(getMethod(c, "t8"), "scala/Predef$", "println")
+ assertNoInvoke(getMethod(c, "t9"))
+ }
+
+ @Test
+ def inlineNoInlineOverride(): Unit = {
+ val code =
+ """class C {
+ | @inline final def f1(x: Int) = x
+ | @noinline final def f2(x: Int) = x
+ | final def f3(x: Int) = x
+ |
+ | def t1 = f1(1) // inlined
+ | def t2 = f2(1) // not inlined
+ | def t3 = f1(1): @noinline // not inlined
+ | def t4 = f2(1): @inline // not inlined (cannot override the def-site @noinline)
+ | def t5 = f3(1): @inline // inlined
+ | def t6 = f3(1): @noinline // not inlined
+ |
+ | def t7 = f1(1) + (f3(1): @inline) // without parenthesis, the ascription encloses the entire expression..
+ | def t8 = f1(1) + (f1(1): @noinline)
+ | def t9 = f1(1) + f1(1) : @noinline // the ascription goes on the entire expression, so on the + invocation.. both f1 are inlined
+ |}
+ """.stripMargin
+
+ val List(c) = compile(code)
+ assertNoInvoke(getMethod(c, "t1"))
+ assertInvoke(getMethod(c, "t2"), "C", "f2")
+ assertInvoke(getMethod(c, "t3"), "C", "f1")
+ assertInvoke(getMethod(c, "t4"), "C", "f2")
+ assertNoInvoke(getMethod(c, "t5"))
+ assertInvoke(getMethod(c, "t6"), "C", "f3")
+ assertNoInvoke(getMethod(c, "t7"))
+ assertInvoke(getMethod(c, "t8"), "C", "f1")
+ assertNoInvoke(getMethod(c, "t9"))
+ }
+
+ @Test
+ def inlineHigherOrder(): Unit = {
+ val code =
+ """class C {
+ | final def h(f: Int => Int): Int = f(0)
+ | def t1 = h(x => x + 1)
+ | def t2 = {
+ | val fun = (x: Int) => x + 1
+ | h(fun)
+ | }
+ | def t3(f: Int => Int) = h(f)
+ | def t4(f: Int => Int) = {
+ | val fun = f
+ | h(fun)
+ | }
+ | def t5 = h(Map(0 -> 10)) // not currently inlined
+ |}
+ """.stripMargin
+
+ val List(c) = compile(code)
+ assertInvoke(getMethod(c, "t1"), "C", "$anonfun$t1$1")
+ assertInvoke(getMethod(c, "t2"), "C", "$anonfun$t2$1")
+ assertInvoke(getMethod(c, "t3"), "scala/Function1", "apply$mcII$sp")
+ assertInvoke(getMethod(c, "t4"), "scala/Function1", "apply$mcII$sp")
+ assertInvoke(getMethod(c, "t5"), "C", "h")
+ }
+
+ @Test
+ def twoStepNoInlineHandler(): Unit = {
+ val code =
+ """class C {
+ | @inline final def f = try 1 catch { case _: Throwable => 2 }
+ | @inline final def g = f
+ | def t = println(g) // cannot inline g onto non-empty stack once that f was inlined into g
+ |}
+ """.stripMargin
+
+ val warn =
+ """C::g()I is annotated @inline but could not be inlined:
+ |The operand stack at the callsite in C::t()V contains more values than the
+ |arguments expected by the callee C::g()I. These values would be discarded
+ |when entering an exception handler declared in the inlined method.""".stripMargin
+
+ val List(c) = compile(code, allowMessage = _.msg contains warn)
+ assertInvoke(getMethod(c, "t"), "C", "g")
+ }
+
+ @Test
+ def twoStepNoInlinePrivate(): Unit = {
+ val code =
+ """class C {
+ | @inline final def g = {
+ | @noinline def f = 0
+ | f
+ | }
+ | @inline final def h = g // after inlining g, h has an invocate of private method f$1
+ |}
+ |class D {
+ | def t(c: C) = c.h // cannot inline
+ |}
+ """.stripMargin
+
+ val warn =
+ """C::h()I is annotated @inline but could not be inlined:
+ |The callee C::h()I contains the instruction INVOKESTATIC C.f$1 ()I
+ |that would cause an IllegalAccessError when inlined into class D.""".stripMargin
+
+ val List(c, d) = compile(code, allowMessage = _.msg contains warn)
+ assertInvoke(getMethod(c, "h"), "C", "f$1")
+ assertInvoke(getMethod(d, "t"), "C", "h")
+ }
+
+ @Test
+ def twoStepInlinePrivate(): Unit = {
+ val code =
+ """class C {
+ | @inline final def g = { // initially, g invokes the private method f$1, but then f$1 is inlined
+ | @inline def f = 0
+ | f
+ | }
+ |}
+ |class D {
+ | def t(c: C) = c.g // can inline
+ |}
+ """.stripMargin
+
+ val List(c, d) = compile(code)
+ assertNoInvoke(getMethod(c, "g"))
+ assertNoInvoke(getMethod(d, "t"))
+ }
+
+ @Test
+ def optimizeSpecializedClosures(): Unit = {
+ val code =
+ """class ValKl(val x: Int) extends AnyVal
+ |
+ |class C {
+ | def t1 = {
+ | // IndyLambda: SAM type is JFunction1$mcII$sp, SAM is apply$mcII$sp(I)I, body method is $anonfun(I)I
+ | val f = (x: Int) => x + 1
+ | // invocation of apply$mcII$sp(I)I, matches the SAM in IndyLambda. no boxing / unboxing needed.
+ | f(10)
+ | // opt: re-write the invocation to the body method
+ | }
+ |
+ | @inline final def m1a(f: Long => Int) = f(1l)
+ | def t1a = m1a(l => l.toInt) // after inlining m1a, we have the same situation as in t1
+ |
+ | def t2 = {
+ | // there is no specialized variant of Function2 for this combination of types, so the IndyLambda has to create a generic Function2.
+ | // IndyLambda: SAM type is JFunction2, SAM is apply(ObjectObject)Object, body method is $anonfun$adapted(ObjectObject)Object
+ | val f = (b: Byte, i: Int) => i + b
+ | // invocation of apply(ObjectOjbect)Object, matches SAM in IndyLambda. arguments are boxed, result unboxed.
+ | f(1, 2)
+ | // opt: re-wrtie to $anonfun$adapted
+ | // inline that call, then we get box-unbox pairs (can be eliminated) and a call to $anonfun(BI)I
+ | }
+ |
+ | def t3 = {
+ | // similar to t2: for functions with value class parameters, IndyLambda always uses the generic Function version.
+ | // IndyLambda: SAM type is JFunction1, SAM is apply(Object)Object, body method is $anonfun$adapted(Object)Object
+ | val f = (a: ValKl) => a
+ | // invocation of apply(Object)Object, ValKl instance is created, result extracted
+ | f(new ValKl(1))
+ | // opt: re-write to $anonfun$adapted.
+ | // inline that call, then we get value class instantiation-extraction pairs and a call to $anonfun(I)I
+ | }
+ |
+ | def t4 = {
+ | // IndyLambda: SAM type is JFunction1$mcII$sp, SAM is apply$mcII$sp(I)I, body method is $anonfun(I)I
+ | val f: Int => Any = (x: Int) => 1
+ | // invocation of apply(Object)Object, argument is boxed. method name and type doesn't match IndyLambda.
+ | f(10)
+ | // opt: rewriting to the body method requires inserting an unbox operation for the argument, and a box operation for the result
+ | // that produces a box-unbox pair and a call to $anonfun(I)I
+ | }
+ |
+ |
+ | @inline final def m4a[T, U, V](f: (T, U) => V, x: T, y: U) = f(x, y) // invocation to generic apply(ObjectObject)Object
+ | def t4a = m4a((x: Int, y: Double) => 1l + x + y.toLong, 1, 2d) // IndyLambda uses specilized JFunction2$mcJID$sp. after inlining m4a, similar to t4.
+ |
+ | def t5 = {
+ | // no specialization for the comibnation of primitives
+ | // IndyLambda: SAM type is JFunction2, SAM is generic apply, body method is $anonfun$adapted
+ | val f: (Int, Byte) => Any = (x: Int, b: Byte) => 1
+ | // invocation of generic apply.
+ | f(10, 3)
+ | // opt: re-write to $anonfun$adapted, inline that method. generates box-unbox pairs and a call to $anonfun(IB)I
+ | }
+ |
+ | def t5a = m4a((x: Int, y: Byte) => 1, 12, 31.toByte) // similar to t5 after inlining m4a
+ |
+ | // m6$mIVc$sp invokes apply$mcVI$sp
+ | @inline final def m6[@specialized(Int) T, @specialized(Unit) U](f: T => U, x: T): Unit = f(x)
+ | // IndyLambda: JFunction1$mcVI$sp, SAM is apply$mcVI$sp, body method $anonfun(I)V
+ | // invokes m6$mIVc$sp (Lscala/Function1;I)V
+ | def t6 = m6((x: Int) => (), 10)
+ | // opt: after inlining m6, the closure method invocation (apply$mcVI$sp) matches the IndyLambda, the call can be rewritten, no boxing
+ |
+ | // m7 invokes apply
+ | @inline final def m7[@specialized(Boolean) T, @specialized(Int) U](f: T => U, x: T): Unit = f(x)
+ | // IndyLambda: JFunction1, SAM is apply(Object)Object, body method is $anonfun$adapted(Obj)Obj
+ | // `true` is boxed before passing to m7
+ | def t7 = m7((x: Boolean) => (), true)
+ | // opt: after inlining m7, the apply call is re-written to $anonfun$adapted, which is then inlined.
+ | // we get a box-unbox pair and a call to $anonfun(Z)V
+ |
+ |
+ | // invokes the generic apply(ObjObj)Obj
+ | @inline final def m8[T, U, V](f: (T, U) => V, x: T, y: U) = f(x, y)
+ | // IndyLambda: JFunction2$mcJID$sp, SAM is apply$mcJID$sp, body method $anonfun(ID)J
+ | // boxes the int and double arguments and calls m8, unboxToLong the result
+ | def t8 = m8((x: Int, y: Double) => 1l + x + y.toLong, 1, 2d)
+ | // opt: after inlining m8, rewrite to the body method $anonfun(ID)J, which requires inserting unbox operations for the params, box for the result
+ | // the box-unbox pairs can then be optimized away
+ |
+ | // m9$mVc$sp invokes apply$mcVI$sp
+ | @inline final def m9[@specialized(Unit) U](f: Int => U): Unit = f(1)
+ | // IndyLambda: JFunction1, SAM is apply(Obj)Obj, body method $anonfun$adapted(Ojb)Obj
+ | // invocation of m9$mVc$sp
+ | def t9 = m9(println)
+ | // opt: after inlining m9, rewrite to $anonfun$adapted(Ojb)Obj, which requires inserting a box operation for the parameter.
+ | // then we inline $adapted, which has signature (Obj)V. the `BoxedUnit.UNIT` from the body of $anonfun$adapted is eliminated by push-pop
+ |
+ | def t9a = (1 to 10) foreach println // similar to t9
+ |
+ | def intCons(i: Int): Unit = ()
+ | // IndyLambda: JFunction1$mcVI$sp, SAM is apply$mcVI$sp, body method $anonfun(I)V
+ | def t10 = m9(intCons)
+ | // after inlining m9, rewrite the apply$mcVI$sp call to the body method, no adaptations required
+ |
+ | def t10a = (1 to 10) foreach intCons // similar to t10
+ |}
+ """.stripMargin
+ val List(c, _, _) = compile(code)
+
+ assertSameSummary(getMethod(c, "t1"), List(BIPUSH, "$anonfun$t1$1", IRETURN))
+ assertSameSummary(getMethod(c, "t1a"), List(LCONST_1, "$anonfun$t1a$1", IRETURN))
+ assertSameSummary(getMethod(c, "t2"), List(ICONST_1, ICONST_2, "$anonfun$t2$1",IRETURN))
+
+ // val a = new ValKl(n); new ValKl(anonfun(a.x)).x
+ // value class instantiation-extraction should be optimized by boxing elim
+ assertSameSummary(getMethod(c, "t3"), List(
+ NEW, DUP, ICONST_1, "<init>", ASTORE,
+ NEW, DUP, ALOAD, "x",
+ "$anonfun$t3$1",
+ "<init>",
+ "x", IRETURN))
+
+ assertSameSummary(getMethod(c, "t4"), List(BIPUSH, "$anonfun$t4$1", "boxToInteger", ARETURN))
+ assertSameSummary(getMethod(c, "t4a"), List(ICONST_1, LDC, "$anonfun$t4a$1", LRETURN))
+ assertSameSummary(getMethod(c, "t5"), List(BIPUSH, ICONST_3, "$anonfun$t5$1", "boxToInteger", ARETURN))
+ assertSameSummary(getMethod(c, "t5a"), List(BIPUSH, BIPUSH, I2B, "$anonfun$t5a$1", IRETURN))
+ assertSameSummary(getMethod(c, "t6"), List(BIPUSH, "$anonfun$t6$1", RETURN))
+ assertSameSummary(getMethod(c, "t7"), List(ICONST_1, "$anonfun$t7$1", RETURN))
+ assertSameSummary(getMethod(c, "t8"), List(ICONST_1, LDC, "$anonfun$t8$1", LRETURN))
+ assertSameSummary(getMethod(c, "t9"), List(ICONST_1, "boxToInteger", "$anonfun$t9$1", RETURN))
+
+ // t9a inlines Range.foreach, which is quite a bit of code, so just testing the core
+ assertInvoke(getMethod(c, "t9a"), "C", "$anonfun$t9a$1")
+ assertInvoke(getMethod(c, "t9a"), "scala/runtime/BoxesRunTime", "boxToInteger")
+
+ assertSameSummary(getMethod(c, "t10"), List(
+ ICONST_1, ISTORE,
+ ALOAD, ILOAD,
+ "$anonfun$t10$1", RETURN))
+
+ // t10a inlines Range.foreach
+ assertInvoke(getMethod(c, "t10a"), "C", "$anonfun$t10a$1")
+ assertDoesNotInvoke(getMethod(c, "t10a"), "boxToInteger")
+ }
+
+ @Test
+ def refElimination(): Unit = {
+ val code =
+ """class C {
+ | def t1 = {
+ | var i = 0
+ | @inline def inner() = i += 1
+ | inner()
+ | i
+ | }
+ |
+ | final def m(f: Int => Unit) = f(10)
+ | def t2 = {
+ | var x = -1 // IntRef not yet eliminated: closure elimination does not
+ | m(i => if (i == 10) x = 1) // yet inline the anonfun method, need to improve the heuristsics
+ | x
+ | }
+ |}
+ """.stripMargin
+ val List(c) = compile(code)
+ assertSameCode(getMethod(c, "t1"), List(Op(ICONST_0), Op(ICONST_1), Op(IADD), Op(IRETURN)))
+ assertEquals(getMethod(c, "t2").instructions collect { case i: Invoke => i.owner +"."+ i.name }, List(
+ "scala/runtime/IntRef.create", "C.$anonfun$t2$1"))
+ }
+
+ @Test
+ def tupleElimination(): Unit = {
+ val code =
+ """class C {
+ | @inline final def tpl[A, B](a: A, b: B) = (a, b)
+ | @inline final def t_1[A, B](t: (A, B)) = t._1
+ | @inline final def t_2[A, B](t: (A, B)) = t._2
+ |
+ | def t1 = {
+ | val t = (3, 4) // specialized tuple
+ | t_1(t) + t_2(t) // invocations to generic _1 / _2, box operation inserted when eliminated
+ | }
+ |
+ | def t2 = {
+ | val t = tpl(1, 2) // generic Tuple2[Integer, Integer] created
+ | t._1 + t._2 // invokes the specialized _1$mcI$sp, eliminating requires adding an unbox operation
+ | }
+ |
+ | @inline final def m = (1, 3)
+ | def t3 = {
+ | val (a, b) = m
+ | a - b
+ | }
+ |
+ | def t4 = {
+ | val ((a, b), (c, d)) = (m, m)
+ | a + b + c + d
+ | }
+ |
+ | def t5 = m match {
+ | case (1, y) => y
+ | case (x, y) => x * y
+ | }
+ |}
+ """.stripMargin
+ val List(c) = compile(code)
+ assertSameCode(getMethod(c, "t1"), List(Op(ICONST_3), Op(ICONST_4), Op(IADD), Op(IRETURN)))
+ assertSameCode(getMethod(c, "t2"), List(Op(ICONST_1), Op(ICONST_2), Op(IADD), Op(IRETURN)))
+ assertSameCode(getMethod(c, "t3"), List(Op(ICONST_1), Op(ICONST_3), Op(ISUB), Op(IRETURN)))
+ assertNoInvoke(getMethod(c, "t4"))
+ assertNoInvoke(getMethod(c, "t5"))
+ }
+
+ @Test
+ def redundantCasts(): Unit = {
+
+ // we go through the hoop of inlining the casts because erasure eliminates `asInstanceOf` calls
+ // that are statically known to succeed. For example the following cast is removed by erasure:
+ // `(if (b) c else d).asInstanceOf[C]`
+
+ val code =
+ """class C {
+ | @inline final def asO(a: Any) = a.asInstanceOf[Object]
+ | @inline final def asC(a: Any) = a.asInstanceOf[C]
+ | @inline final def asD(a: Any) = a.asInstanceOf[D]
+ |
+ | def t1(c: C) = asC(c) // eliminated
+ | def t2(c: C) = asO(c) // eliminated
+ | def t3(c: Object) = asC(c) // not elimianted
+ | def t4(c: C, d: D, b: Boolean) = asC(if (b) c else d) // not eliminated: lub of two non-equal reference types approximated with Object
+ | def t5(c: C, d: D, b: Boolean) = asO(if (b) c else d)
+ | def t6(c: C, cs: Array[C], b: Boolean) = asO(if (b) c else cs)
+ |}
+ |class D extends C
+ """.stripMargin
+ val List(c, _) = compile(code)
+ def casts(m: String) = getInstructions(c, m) collect { case TypeOp(CHECKCAST, tp) => tp }
+ assertSameCode(getMethod(c, "t1"), List(VarOp(ALOAD, 1), Op(ARETURN)))
+ assertSameCode(getMethod(c, "t2"), List(VarOp(ALOAD, 1), Op(ARETURN)))
+ assertSameCode(getMethod(c, "t3"), List(VarOp(ALOAD, 1), TypeOp(CHECKCAST, "C"), Op(ARETURN)))
+ assertEquals(casts("t4"), List("C"))
+ assertEquals(casts("t5"), Nil)
+ assertEquals(casts("t6"), Nil)
+ }
+
+ @Test
+ def inlineFromSealed(): Unit = {
+ val code =
+ """sealed abstract class Foo {
+ | @inline def bar(x: Int) = x + 1
+ |}
+ |object Foo {
+ | def mkFoo(): Foo = new Baz2
+ |}
+ |
+ |object Baz1 extends Foo
+ |final class Baz2 extends Foo
+ |
+ |object Test {
+ | def f = Foo.mkFoo() bar 10
+ |}
+ """.stripMargin
+
+ val cls = compile(code)
+ val test = findClass(cls, "Test$")
+ assertSameSummary(getMethod(test, "f"), List(
+ GETSTATIC, "mkFoo",
+ BIPUSH, ISTORE,
+ IFNONNULL, ACONST_NULL, ATHROW, -1 /*label*/,
+ ILOAD, ICONST_1, IADD, IRETURN))
+ }
+
+ @Test // a test taken from the test suite for the 2.11 inliner
+ def oldInlineHigherOrderTest(): Unit = {
+ val code =
+ """class C {
+ | private var debug = false
+ | @inline private def ifelse[T](cond: => Boolean, ifPart: => T, elsePart: => T): T = if (cond) ifPart else elsePart
+ | final def t = ifelse(debug, 1, 2)
+ |}
+ """.stripMargin
+ val List(c) = compile(code)
+
+ // box-unbox will clean it up
+ assertSameSummary(getMethod(c, "t"), List(
+ ALOAD, "$anonfun$t$1", IFEQ /*A*/,
+ "$anonfun$t$2", IRETURN,
+ -1 /*A*/, "$anonfun$t$3", IRETURN))
+ }
+
+ @Test
+ def inlineProject(): Unit = {
+ val codeA = "final class A { @inline def f = 1 }"
+ val codeB = "class B { def t(a: A) = a.f }"
+ // tests that no warning is emitted
+ val List(a, b) = compileClassesSeparately(List(codeA, codeB), extraArgs = "-opt:l:project -opt-warnings")
+ assertInvoke(getMethod(b, "t"), "A", "f")
+ }
+
+ @Test
+ def sd86(): Unit = {
+ val code =
+ """trait T1 { @inline def f = 999 }
+ |trait T2 { self: T1 => @inline override def f = 1 } // note that f is not final
+ |class C extends T1 with T2
+ """.stripMargin
+ val List(c, t1, t2) = compile(code, allowMessage = _ => true)
+ // the forwarder C.f is inlined, so there's no invocation
+ assertSameSummary(getMethod(c, "f"), List(ICONST_1, IRETURN))
+ }
+
+ @Test
+ def sd140(): Unit = {
+ val code =
+ """trait T { @inline def f = 0 }
+ |trait U extends T { @inline override def f = 1 }
+ |trait V extends T { def m = 0 }
+ |final class K extends V with U { override def m = super[V].m }
+ |class C { def t = (new K).f }
+ """.stripMargin
+ val c :: _ = compile(code)
+ assertSameSummary(getMethod(c, "t"), List(NEW, "<init>", ICONST_1, IRETURN)) // ICONST_1, U.f is inlined (not T.f)
+ }
+
+ @Test
+ def inlineArrayForeach(): Unit = {
+ val code =
+ """class C {
+ | def consume(x: Int) = ()
+ | def t(a: Array[Int]): Unit = a foreach consume
+ |}
+ """.stripMargin
+ val List(c) = compile(code)
+ val t = getMethod(c, "t")
+ assertNoIndy(t)
+ assertInvoke(t, "C", "$anonfun$t$1")
+ }
+
+ @Test
+ def t9121(): Unit = {
+ val codes = List(
+ """package p1
+ |object Implicits {
+ | class ScalaObservable(val underlying: Any) extends AnyVal {
+ | @inline def scMap[R](f: String): Any = f.toRx
+ | }
+ | implicit class RichFunction1[T1, R](val f: String) extends AnyVal {
+ | def toRx: Any = ""
+ | }
+ |}
+ """.stripMargin,
+ """
+ |import p1.Implicits._
+ |class C {
+ | def t(): Unit = new ScalaObservable("").scMap("")
+ |}
+ """.stripMargin)
+ val c :: _ = compileClassesSeparately(codes, extraArgs = compilerArgs)
+ assertInvoke(getMethod(c, "t"), "p1/Implicits$RichFunction1$", "toRx$extension")
+ }
+
+ @Test
+ def keepLineNumbersPerCompilationUnit(): Unit = {
+ val code1 =
+ """class A {
+ | def fx(): Unit = ()
+ | @inline final def ma = {
+ | fx()
+ | 1
+ | }
+ |}
+ """.stripMargin
+ val code2 =
+ """class B extends A {
+ | @inline final def mb = {
+ | fx()
+ | 1
+ | }
+ |}
+ |class C extends B {
+ | @inline final def mc = {
+ | fx()
+ | 1
+ | }
+ | def t1 = ma // no lines, not the same source file
+ | def t2 = mb // lines
+ | def t3 = mc // lines
+ |}
+ """.stripMargin
+ notPerRun.foreach(_.clear())
+ val run = compiler.newRun
+ run.compileSources(List(makeSourceFile(code1, "A.scala"), makeSourceFile(code2, "B.scala")))
+ val List(_, _, c) = readAsmClasses(getGeneratedClassfiles(global.settings.outputDirs.getSingleOutput.get))
+ def is(name: String) = getMethod(c, name).instructions.filterNot(_.isInstanceOf[FrameEntry])
+
+ assertSameCode(is("t1"), List(
+ Label(0), LineNumber(12, Label(0)),
+ VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "A", "fx", "()V", false),
+ Op(ICONST_1), Op(IRETURN), Label(6)))
+
+ assertSameCode(is("t2"), List(
+ Label(0), LineNumber(3, Label(0)), VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "B", "fx", "()V", false),
+ Label(4), LineNumber(4, Label(4)), Op(ICONST_1), Op(IRETURN), Label(8)))
+
+ assertSameCode(is("t3"), List(
+ Label(0), LineNumber(9, Label(0)), VarOp(ALOAD, 0), Invoke(INVOKEVIRTUAL, "C", "fx", "()V", false),
+ Label(4), LineNumber(10, Label(4)), Op(ICONST_1), Op(IRETURN), Label(8)))
+ }
+
+ @Test
+ def traitHO(): Unit = {
+ val code =
+ """trait T {
+ | def foreach(f: Int => Unit): Unit = f(1)
+ |}
+ |final class C extends T {
+ | def cons(x: Int): Unit = ()
+ | def t1 = foreach(cons)
+ |}
+ """.stripMargin
+ val List(c, t) = compile(code)
+ assertNoIndy(getMethod(c, "t1"))
+ }
+
+ @Test
+ def limitInlinedLocalVariableNames(): Unit = {
+ val code =
+ """class C {
+ | def f(x: Int): Int = x
+ | @inline final def methodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(param: Int) =
+ | f(param)
+ | @inline final def anotherMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(param: Int) =
+ | methodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(f(param))
+ | @inline final def oneMoreMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(param: Int) =
+ | anotherMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(f(param))
+ | @inline final def yetAnotherMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(param: Int) =
+ | oneMoreMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(f(param))
+ | @inline final def oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(param: Int) =
+ | yetAnotherMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(f(param))
+ | def t(p: Int) =
+ | oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(f(p)) +
+ | oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence(f(p))
+ |}
+ """.stripMargin
+
+ val List(c) = compile(code)
+ assertEquals(getAsmMethod(c, "t").localVariables.asScala.toList.map(l => (l.name, l.index)).sortBy(_._2),List(
+ ("this",0),
+ ("p",1),
+ ("oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence_param",2),
+ ("oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchS_yetAnotherMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFren_param",3),
+ ("oneLastMethodWithVeryVeryLongNameAlmostLik_yetAnotherMethodWithVeryVeryLongNameAlmost_oneMoreMethodWithVeryVeryLongNameAlmostLik_param",4),
+ ("oneLastMethodWithVeryVeryLongNam_yetAnotherMethodWithVeryVeryLong_oneMoreMethodWithVeryVeryLongNam_anotherMethodWithVeryVeryLongNam_param",5),
+ ("oneLastMethodWithVeryVery_yetAnotherMethodWithVeryV_oneMoreMethodWithVeryVery_anotherMethodWithVeryVery_methodWithVeryVeryLongNam_param",6),
+ ("oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchSentence_param",7),
+ ("oneLastMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFrenchS_yetAnotherMethodWithVeryVeryLongNameAlmostLikeAGermanWordOrAFren_param",8),
+ ("oneLastMethodWithVeryVeryLongNameAlmostLik_yetAnotherMethodWithVeryVeryLongNameAlmost_oneMoreMethodWithVeryVeryLongNameAlmostLik_param",9),
+ ("oneLastMethodWithVeryVeryLongNam_yetAnotherMethodWithVeryVeryLong_oneMoreMethodWithVeryVeryLongNam_anotherMethodWithVeryVeryLongNam_param",10),
+ ("oneLastMethodWithVeryVery_yetAnotherMethodWithVeryV_oneMoreMethodWithVeryVery_anotherMethodWithVeryVery_methodWithVeryVeryLongNam_param",11)))
+ }
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala
deleted file mode 100644
index 5ef2458c0a..0000000000
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOpts.scala
+++ /dev/null
@@ -1,92 +0,0 @@
-package scala.tools.nsc
-package backend.jvm
-package opt
-
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-
-import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import scala.tools.testing.ClearAfterClass
-
-object MethodLevelOpts extends ClearAfterClass.Clearable {
- var methodOptCompiler = newCompiler(extraArgs = "-target:jvm-1.6 -Ybackend:GenBCode -Yopt:l:method")
- def clear(): Unit = { methodOptCompiler = null }
-}
-
-@RunWith(classOf[JUnit4])
-class MethodLevelOpts extends ClearAfterClass {
- ClearAfterClass.stateToClear = MethodLevelOpts
-
- val methodOptCompiler = MethodLevelOpts.methodOptCompiler
-
- def wrapInDefault(code: Instruction*) = List(Label(0), LineNumber(1, Label(0))) ::: code.toList ::: List(Label(1))
-
- @Test
- def eliminateEmptyTry(): Unit = {
- val code = "def f = { try {} catch { case _: Throwable => 0; () }; 1 }"
- val warn = "a pure expression does nothing in statement position"
- assertSameCode(singleMethodInstructions(methodOptCompiler)(code, allowMessage = _.msg contains warn), wrapInDefault(Op(ICONST_1), Op(IRETURN)))
- }
-
- @Test
- def cannotEliminateLoadBoxedUnit(): Unit = {
- // the compiler inserts a boxed into the try block. it's therefore non-empty (and live) and not eliminated.
- val code = "def f = { try {} catch { case _: Throwable => 0 }; 1 }"
- val m = singleMethod(methodOptCompiler)(code)
- assertTrue(m.handlers.length == 1)
- assertSameCode(m.instructions.take(3), List(Label(0), LineNumber(1, Label(0)), Field(GETSTATIC, "scala/runtime/BoxedUnit", "UNIT", "Lscala/runtime/BoxedUnit;")))
- }
-
- @Test
- def inlineThrowInCatchNotTry(): Unit = {
- // the try block does not contain the `ATHROW` instruction, but in the catch block, `ATHROW` is inlined
- val code = "def f(e: Exception) = throw { try e catch { case _: Throwable => e } }"
- val m = singleMethod(methodOptCompiler)(code)
- assertHandlerLabelPostions(m.handlers.head, m.instructions, 0, 3, 5)
- assertSameCode(m.instructions,
- wrapInDefault(VarOp(ALOAD, 1), Label(3), Op(ATHROW), Label(5), FrameEntry(4, List(), List("java/lang/Throwable")), Op(POP), VarOp(ALOAD, 1), Op(ATHROW))
- )
- }
-
- @Test
- def inlineReturnInCatchNotTry(): Unit = {
- val code = "def f: Int = return { try 1 catch { case _: Throwable => 2 } }"
- // cannot inline the IRETURN into the try block (because RETURN may throw IllegalMonitorState)
- val m = singleMethod(methodOptCompiler)(code)
- assertHandlerLabelPostions(m.handlers.head, m.instructions, 0, 3, 5)
- assertSameCode(m.instructions,
- wrapInDefault(Op(ICONST_1), Label(3), Op(IRETURN), Label(5), FrameEntry(4, List(), List("java/lang/Throwable")), Op(POP), Op(ICONST_2), Op(IRETURN)))
- }
-
- @Test
- def simplifyJumpsInTryCatchFinally(): Unit = {
- val code =
- """def f: Int =
- | try {
- | return 1
- | } catch {
- | case _: Throwable =>
- | return 2
- | } finally {
- | return 2
- | // dead
- | val x = try 10 catch { case _: Throwable => 11 }
- | println(x)
- | }
- """.stripMargin
- val m = singleMethod(methodOptCompiler)(code)
- assertTrue(m.handlers.length == 2)
- assertSameCode(m.instructions.dropNonOp, // drop line numbers and labels that are only used by line numbers
-
- // one single label left :-)
- List(Op(ICONST_1), VarOp(ISTORE, 2), Jump(GOTO, Label(20)), Op(POP), Op(ICONST_2), VarOp(ISTORE, 2), Jump(GOTO, Label(20)), VarOp(ASTORE, 3), Op(ICONST_2), Op(IRETURN), Label(20), Op(ICONST_2), Op(IRETURN))
- )
- }
-}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala
new file mode 100644
index 0000000000..2c697bfe50
--- /dev/null
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/MethodLevelOptsTest.scala
@@ -0,0 +1,773 @@
+package scala.tools.nsc
+package backend.jvm
+package opt
+
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.collection.JavaConverters._
+import scala.tools.asm.Opcodes._
+import scala.tools.asm.tree.ClassNode
+import scala.tools.nsc.backend.jvm.AsmUtils._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class MethodLevelOptsTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:method"
+ import compiler._
+
+ def wrapInDefault(code: Instruction*) = List(Label(0), LineNumber(1, Label(0))) ::: code.toList ::: List(Label(1))
+
+ def locals(c: ClassNode, m: String) = getAsmMethod(c, m).localVariables.asScala.toList.map(l => (l.name, l.index)).sortBy(_._2)
+
+ @Test
+ def eliminateEmptyTry(): Unit = {
+ val code = "def f = { try {} catch { case _: Throwable => 0; () }; 1 }"
+ val warn = "a pure expression does nothing in statement position"
+ assertSameCode(compileInstructions(code, allowMessage = _.msg contains warn), wrapInDefault(Op(ICONST_1), Op(IRETURN)))
+ }
+
+ @Test
+ def eliminateLoadBoxedUnit(): Unit = {
+ // the compiler inserts a boxed into the try block. it's therefore non-empty (and live) and not eliminated.
+ val code = "def f = { try {} catch { case _: Throwable => 0 }; 1 }"
+ val m = compileMethod(code)
+ assertTrue(m.handlers.length == 0)
+ assertSameCode(m, List(Op(ICONST_1), Op(IRETURN)))
+ }
+
+ @Test
+ def inlineThrowInCatchNotTry(): Unit = {
+ // the try block does not contain the `ATHROW` instruction, but in the catch block, `ATHROW` is inlined
+ val code = "def f(e: Exception) = throw { try e catch { case _: Throwable => e } }"
+ val m = compileMethod(code)
+ assertHandlerLabelPostions(m.handlers.head, m.instructions, 0, 3, 5)
+ assertSameCode(m.instructions,
+ wrapInDefault(VarOp(ALOAD, 1), Label(3), Op(ATHROW), Label(5), FrameEntry(4, List(), List("java/lang/Throwable")), Op(POP), VarOp(ALOAD, 1), Op(ATHROW))
+ )
+ }
+
+ @Test
+ def inlineReturnInCatchNotTry(): Unit = {
+ val code = "def f: Int = return { try 1 catch { case _: Throwable => 2 } }"
+ // cannot inline the IRETURN into the try block (because RETURN may throw IllegalMonitorState)
+ val m = compileMethod(code)
+ assertHandlerLabelPostions(m.handlers.head, m.instructions, 0, 3, 5)
+ assertSameCode(m.instructions,
+ wrapInDefault(Op(ICONST_1), Label(3), Op(IRETURN), Label(5), FrameEntry(4, List(), List("java/lang/Throwable")), Op(POP), Op(ICONST_2), Op(IRETURN)))
+ }
+
+ @Test
+ def simplifyJumpsInTryCatchFinally(): Unit = {
+ val code =
+ """def f: Int =
+ | try {
+ | return 1
+ | } catch {
+ | case _: Throwable =>
+ | return 2
+ | } finally {
+ | return 3
+ | // dead
+ | val x = try 10 catch { case _: Throwable => 11 }
+ | println(x)
+ | }
+ """.stripMargin
+ val m = compileMethod(code)
+ assertTrue(m.handlers.isEmpty)
+ assertSameCode(m, List(Op(ICONST_3), Op(IRETURN)))
+ }
+
+ @Test
+ def nullStoreLoadElim(): Unit = {
+ // point of this test: we have two cleanups
+ // - remove `ACONST_NULL; ASTORE x` if x is otherwise not live
+ // - remove `ASTORE x; ALOAD x` if x is otherwise not live
+ // in the example below, we have `ACONST_NULL; ASTORE x; ALOAD x`. in this case the store-load
+ // should be removed (even though it looks like a null-store at first).
+ val code =
+ """class C {
+ | def t = {
+ | val x = null
+ | x.toString
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"), List(
+ Op(ACONST_NULL), Invoke(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;", false), Op(ARETURN)))
+ }
+
+ @Test
+ def deadStoreReferenceElim(): Unit = {
+ val code =
+ """class C {
+ | def t = {
+ | var a = "a" // assign to non-initialized, directly removed by dead store
+ | a = "b" // assign to initialized, replaced by null-store, which is then removed: the var is not live, the uses are null-store or store-load
+ | a = "c"
+ | a // store-load pair will be eliminated
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(
+ getMethod(c, "t"), List(Ldc(LDC, "c"), Op(ARETURN)))
+ }
+
+ @Test
+ def deadStoreReferenceKeepNull(): Unit = {
+ val code =
+ """class C {
+ | def t = {
+ | var a = "el" // this store is live, used in the println.
+ | println(a)
+ | a = "met" // since it's an ASTORE to a live variable, cannot elim the store (SI-5313), but store null instead.
+ | // so we get `LDC met; POP; ACONST_NULL; ASTORE 1`. the `LDC met; POP` is eliminated by push-pop.
+ | a = "zit" // this store is live, so we get `LDC zit; ASOTRE 1; ALOAD 1; ARETURN`.
+ | // we cannot eliminated the store-load sequence, because the local is live (again SI-5313).
+ | a
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+
+ assertSameCode(getMethod(c, "t"), List(
+ Ldc(LDC, "el"), VarOp(ASTORE, 1),
+ Field(GETSTATIC, "scala/Predef$", "MODULE$", "Lscala/Predef$;"), VarOp(ALOAD, 1), Invoke(INVOKEVIRTUAL, "scala/Predef$", "println", "(Ljava/lang/Object;)V", false),
+ Op(ACONST_NULL), VarOp(ASTORE, 1),
+ Ldc(LDC, "zit"), VarOp(ASTORE, 1), VarOp(ALOAD, 1), Op(ARETURN)))
+ }
+
+ @Test
+ def elimUnusedTupleObjectStringBox(): Unit = {
+ val code =
+ """class C {
+ | def t(x: Int, y: Int): Int = {
+ | val a = (x, y) // Tuple2$mcII$sp
+ | val b = (a, y) // Tuple2
+ | val c = (new Object, "krik", new String) // unused java/lang/Object, java/lang/String allocation and string constant is also eliminated
+ | val d = new java.lang.Integer(x)
+ | val e = new String(new Array[Char](23)) // array allocation not eliminated, as it may throw (negative size, SI-8601)
+ | val f = new scala.runtime.IntRef(11)
+ | x + y
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"), List(
+ IntOp(BIPUSH, 23), IntOp(NEWARRAY, 5), Op(POP), VarOp(ILOAD, 1), VarOp(ILOAD, 2), Op(IADD), Op(IRETURN)))
+ }
+
+ @Test
+ def noElimImpureConstructor(): Unit = {
+ val code =
+ """class C {
+ | def t(x: Int, y: Int): Int = {
+ | val a = new java.lang.Integer("nono")
+ | x + y
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"), List(
+ TypeOp(NEW, "java/lang/Integer"), Ldc(LDC, "nono"), Invoke(INVOKESPECIAL, "java/lang/Integer", "<init>", "(Ljava/lang/String;)V", false),
+ VarOp(ILOAD, 1), VarOp(ILOAD, 2), Op(IADD), Op(IRETURN)))
+ }
+
+ @Test
+ def elimUnusedBoxUnbox(): Unit = {
+ val code =
+ """class C {
+ | def t(a: Long): Int = {
+ | val t = 3 + a
+ | val u = a + t
+ | val v: Any = u // scala/runtime/BoxesRunTime.boxToLong
+ |
+ | val w = (v, a) // a Tuple2 (not specialized because first value is Any)
+ | // so calls scala/runtime/BoxesRunTime.boxToLong on the second value
+ |
+ | val x = v.asInstanceOf[Long] // scala/runtime/BoxesRunTime.unboxToLong
+ |
+ | val z = (java.lang.Long.valueOf(a), t) // java box call on the left, scala/runtime/BoxesRunTime.boxToLong on the right
+ |
+ | 0
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"), List(Op(ICONST_0), Op(IRETURN)))
+ }
+
+ @Test
+ def elimUnusedClosure(): Unit = {
+ val code =
+ """class C {
+ | def t(x: Int, y: Int): Int = {
+ | val f = (a: Int) => a + x + y
+ | val g = (b: Int) => b - x
+ | val h = (s: String) => println(s)
+ | f(30)
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(getMethod(c, "t"), List(
+ IntOp(BIPUSH, 30), VarOp(ISTORE, 3), // no constant propagation, so we keep the store (and load below) of a const
+ VarOp(ILOAD, 1),
+ VarOp(ILOAD, 2),
+ VarOp(ILOAD, 3),
+ Invoke(INVOKESTATIC, "C", "$anonfun$t$1", "(III)I", false), Op(IRETURN)))
+ }
+
+ @Test
+ def rewriteSpecializedClosureCall(): Unit = {
+ val code =
+ """class C {
+ | def t = {
+ | val f1 = (x: Int) => println(x) // int-unit specialization
+ | val f2 = (x: Int, y: Long) => x == y // int-long-boolean
+ | f1(1)
+ | f2(3, 4)
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ val t = getMethod(c, "t")
+ assert(!t.instructions.exists(_.opcode == INVOKEDYNAMIC), t)
+ }
+
+ @Test
+ def boxUnboxPrimitive(): Unit = {
+ val code =
+ """class C {
+ | def t1 = {
+ | val a: Any = runtime.BoxesRunTime.boxToInteger(1)
+ | runtime.BoxesRunTime.unboxToInt(a) + 1
+ | }
+ |
+ | // two box and two unbox operations
+ | def t2(b: Boolean) = {
+ | val a = if (b) (3l: Any) else 2l
+ | a.asInstanceOf[Long] + 1 + a.asInstanceOf[Long]
+ | }
+ |
+ | def t3(i: Integer): Int = i.asInstanceOf[Int]
+ |
+ | def t4(l: Long): Any = l
+ |
+ | def t5(i: Int): Int = {
+ | val b = Integer.valueOf(i)
+ | val c: Integer = i
+ | b.asInstanceOf[Int] + c.intValue
+ | }
+ |
+ | def t6: Long = {
+ | val y = new java.lang.Boolean(true)
+ | val i: Integer = if (y) new Integer(10) else 13
+ | val j: java.lang.Long = 3l
+ | j + i
+ | }
+ |
+ | def t7: Int = {
+ | val a: Any = 3
+ | a.asInstanceOf[Int] + a.asInstanceOf[Int]
+ | }
+ |
+ | def t8 = null.asInstanceOf[Int]
+ |
+ | def t9: Int = {
+ | val a = Integer.valueOf(10)
+ | val b = runtime.BoxesRunTime.unboxToInt(a)
+ | a + b
+ | }
+ |
+ | @noinline def escape(a: Any) = ()
+ |
+ | // example E4 in BoxUnbox doc comment
+ | def t10: Int = {
+ | val a = Integer.valueOf(10) // int 10 is stored into local
+ | escape(a)
+ | a // no unbox, 10 is read from local
+ | }
+ |
+ | // the boxes here cannot be eliminated. see doc comment in BoxUnbox, example E1.
+ | def t11(b: Boolean): Int = {
+ | val i = Integer.valueOf(10)
+ | val j = Integer.valueOf(41)
+ | escape(i) // force rewrite method M1 (see doc in BoxUnbox)
+ | val res: Integer = if (b) i else j
+ | res.toInt // cannot be re-written to a local variable read - we don't know which local to read
+ | }
+ |
+ | // both boxes have a single unboxing consumer, and the escape. note that the escape does
+ | // NOT put the two boxes into the same set of rewrite operations: we can rewrite both
+ | // boxes with their unbox individually. in both cases the box also escapes, so method
+ | // M1 will keep the box around.
+ | def t12(b: Boolean): Int = {
+ | val i = Integer.valueOf(10)
+ | val j = Integer.valueOf(32)
+ | escape(if (b) i else j) // force method M1. the escape here is a consumer for both boxes
+ | if (b) i.toInt else j.toInt // both boxes (i, j) have their own unboxing consumer
+ | }
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+
+ assertNoInvoke(getMethod(c, "t1"))
+ assertNoInvoke(getMethod(c, "t2"))
+ assertInvoke(getMethod(c, "t3"), "scala/runtime/BoxesRunTime", "unboxToInt")
+ assertInvoke(getMethod(c, "t4"), "scala/runtime/BoxesRunTime", "boxToLong")
+ assertNoInvoke(getMethod(c, "t5"))
+ assertNoInvoke(getMethod(c, "t6"))
+ assertNoInvoke(getMethod(c, "t7"))
+ assertSameSummary(getMethod(c, "t8"), List(ICONST_0, IRETURN))
+ assertNoInvoke(getMethod(c, "t9"))
+ // t10: no invocation of unbox
+ assertEquals(getInstructions(c, "t10") collect { case Invoke(_, owner, name, _, _) => (owner, name) }, List(
+ ("java/lang/Integer", "valueOf"),
+ ("C", "escape")))
+
+ assertSameSummary(getMethod(c, "t11"), List(
+ BIPUSH, "valueOf", ASTORE /*2*/,
+ BIPUSH, "valueOf", ASTORE /*3*/,
+ ALOAD /*0*/, ALOAD /*2*/, "escape",
+ ILOAD /*1*/, IFEQ /*L1*/, ALOAD /*2*/, GOTO /*L2*/, /*Label L1*/ -1, ALOAD /*3*/, /*Label L2*/ -1,
+ ASTORE /*4*/, GETSTATIC /*Predef*/, ALOAD /*4*/, "Integer2int", IRETURN))
+
+ // no unbox invocations
+ assertEquals(getInstructions(c, "t12") collect { case Invoke(_, owner, name, _, _) => (owner, name) }, List(
+ ("java/lang/Integer", "valueOf"),
+ ("java/lang/Integer", "valueOf"),
+ ("C", "escape")))
+ }
+
+ @Test
+ def refEliminiation(): Unit = {
+ val code =
+ """class C {
+ | import runtime._
+ | @noinline def escape(a: Any) = ()
+ |
+ | def t1 = { // box eliminated
+ | val r = new IntRef(0)
+ | r.elem
+ | }
+ |
+ | def t2(b: Boolean) = {
+ | val r1 = IntRef.zero() // both eliminated
+ | val r2 = IntRef.create(1)
+ | val res: IntRef = if (b) r1 else r2
+ | res.elem
+ | }
+ |
+ | def t3 = {
+ | val r = LongRef.create(10l) // eliminated
+ | r.elem += 3
+ | r.elem
+ | }
+ |
+ | def t4(b: Boolean) = {
+ | val x = BooleanRef.create(false) // eliminated
+ | if (b) x.elem = true
+ | if (x.elem) "a" else "b"
+ | }
+ |
+ | def t5 = {
+ | val r = IntRef.create(10) // not eliminated: the box might be modified in the escape
+ | escape(r)
+ | r.elem
+ | }
+ |
+ | def t6(b: Boolean) = {
+ | val r1 = IntRef.zero()
+ | val r2 = IntRef.create(1)
+ | r1.elem = 39
+ | val res: IntRef = if (b) r1 else r2
+ | res.elem // boxes remain: can't rewrite this read, don't know which local
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameSummary(getMethod(c, "t1"), List(ICONST_0, IRETURN))
+ assertNoInvoke(getMethod(c, "t2"))
+ assertSameSummary(getMethod(c, "t3"), List(LDC, LDC, LADD, LRETURN))
+ assertNoInvoke(getMethod(c, "t4"))
+ assertEquals(getInstructions(c, "t5") collect { case Field(_, owner, name, _) => s"$owner.$name" },
+ List("scala/runtime/IntRef.elem"))
+ assertEquals(getInstructions(c, "t6") collect { case Field(op, owner, name, _) => s"$op $owner.$name" },
+ List(s"$PUTFIELD scala/runtime/IntRef.elem", s"$GETFIELD scala/runtime/IntRef.elem"))
+ }
+
+ @Test
+ def tupleElimination(): Unit = {
+ val code =
+ """class C {
+ | def t1(b: Boolean) = {
+ | val t = ("hi", "fish")
+ | if (b) t._1 else t._2
+ | }
+ |
+ | def t2 = {
+ | val t = (1, 3) // specialized tuple
+ | t._1 + t._2 // specialized accessors (_1$mcII$sp)
+ | }
+ |
+ | def t3 = {
+ | // boxed before tuple creation, a non-specialized tuple is created
+ | val t = (new Integer(3), Integer.valueOf(4))
+ | t._1 + t._2 // invokes the generic `_1` / `_2` getters, both values unboxed by Integer2int
+ | }
+ |
+ | def t4: Any = {
+ | val t = (3, 3) // specialized tuple is created, ints are not boxed
+ | (t: Tuple2[Any, Any])._1 // when eliminating the _1 call, need to insert a boxing operation
+ | }
+ |
+ | // the inverse of t4 also happens: an Tuple[Integer] where _1$mcI$sp is invoked. In this
+ | // case, an unbox operation needs to be added when eliminating the extraction. The only
+ | // way I found to test this is with an inlined generic method, see InlinerTest.tupleElimination.
+ | def tpl[A, B](a: A, b: B) = (a, b)
+ | def t5: Int = tpl(1, 2)._1 // invokes _1$mcI$sp
+ |
+ | def t6 = {
+ | val (a, b) = (1, 2)
+ | a - b
+ | }
+ |
+ | def t7 = {
+ | // this example is more tricky to handle than it looks, see doc comment in BoxUnbox.
+ | val ((a, b), c) = ((1, 2), 3)
+ | a + b + c
+ | }
+ |
+ | def t8 = {
+ | val ((a, b), (c, d)) = ((1, 2), (3, Integer.valueOf(10)))
+ | a + b + c + d
+ | }
+ |
+ | def t9(a: Int, b: Int) = (a, b) match { // tuple is optimized away
+ | case (x, y) if x == y => 0
+ | case (x, y) => x + y
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertNoInvoke(getMethod(c, "t1"))
+ assertSameSummary(getMethod(c, "t2"), List(ICONST_1, ICONST_3, IADD, IRETURN))
+ assertSameSummary(getMethod(c, "t3"), List(ICONST_3, ICONST_4, IADD, IRETURN))
+ assertSameSummary(getMethod(c, "t4"), List(ICONST_3, "boxToInteger", ARETURN))
+ assertEquals(getInstructions(c, "t5") collect { case Invoke(_, owner, name, _, _) => (owner, name) }, List(
+ ("scala/runtime/BoxesRunTime", "boxToInteger"),
+ ("scala/runtime/BoxesRunTime", "boxToInteger"),
+ ("C", "tpl"),
+ ("scala/Tuple2", "_1$mcI$sp")))
+ assertSameSummary(getMethod(c, "t6"), List(ICONST_1, ICONST_2, ISUB, IRETURN))
+ assertSameSummary(getMethod(c, "t7"), List(
+ ICONST_1, ICONST_2, ISTORE, ISTORE,
+ ICONST_3, ISTORE,
+ ILOAD, ILOAD, IADD, ILOAD, IADD, IRETURN))
+ assertNoInvoke(getMethod(c, "t8"))
+ assertNoInvoke(getMethod(c, "t9"))
+ }
+
+ @Test
+ def nullnessOpts(): Unit = {
+ val code =
+ """class C {
+ | def t1 = {
+ | val a = new C
+ | if (a == null)
+ | println() // eliminated
+ | a
+ | }
+ |
+ | def t2 = null.asInstanceOf[Long] // replaced by zero value
+ |
+ | def t3 = {
+ | val t = (1, 3)
+ | val a = null
+ | if (t ne a) t._1
+ | else throw new Error()
+ | }
+ |
+ | def t4 = {
+ | val i = Integer.valueOf(1)
+ | val a = null
+ | if (i eq a) throw new Error()
+ | else i.toInt
+ | }
+ |
+ | def t5 = {
+ | val i = runtime.DoubleRef.zero()
+ | if (i == null) throw new Error()
+ | else i.elem
+ | }
+ |
+ | def t6 = {
+ | var a = null
+ | var i = null
+ | a = i // eliminated (store of null to variable that is already null)
+ | a // replaced by ACONST_NULL (load of variable that is known null)
+ | }
+ |
+ | def t7 = {
+ | val a = null
+ | a.isInstanceOf[String] // eliminated, replaced by 0 (null.isInstanceOf is always false)
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameSummary(getMethod(c, "t1"), List(NEW, DUP, "<init>", ARETURN))
+ assertSameCode(getMethod(c, "t2"), List(Op(LCONST_0), Op(LRETURN)))
+ assertSameCode(getMethod(c, "t3"), List(Op(ICONST_1), Op(IRETURN)))
+ assertSameCode(getMethod(c, "t4"), List(Op(ICONST_1), Op(IRETURN)))
+ assertSameCode(getMethod(c, "t5"), List(Op(DCONST_0), Op(DRETURN)))
+ assertSameCode(getMethod(c, "t6"), List(Op(ACONST_NULL), Op(ARETURN)))
+ assertSameCode(getMethod(c, "t7"), List(Op(ICONST_0), Op(IRETURN)))
+ }
+
+ @Test
+ def elimRedundantNullCheck(): Unit = {
+ val code =
+ """class C {
+ | def t(x: Object) = {
+ | val bool = x == null
+ | if (x != null) 1 else 0
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertSameCode(
+ getMethod(c, "t"), List(
+ VarOp(ALOAD, 1), Jump(IFNULL, Label(6)), Op(ICONST_1), Op(IRETURN), Label(6), Op(ICONST_0), Op(IRETURN)))
+ }
+
+ @Test
+ def t5313(): Unit = {
+ val code =
+ """class C {
+ | def randomBoolean = scala.util.Random.nextInt % 2 == 0
+ |
+ | // 3 stores to kept1 (slot 1), 1 store to result (slot 2)
+ | def t1 = {
+ | var kept1 = new Object
+ | val result = new java.lang.ref.WeakReference(kept1)
+ | kept1 = null // we can't eliminate this assignment because result can observe
+ | // when the object has no more references. See SI-5313
+ | kept1 = new Object // could eliminate this one with a more elaborate analysis (we know it contains null)
+ | // however, such is not implemented: if a var is live, then stores are kept.
+ | result
+ | }
+ |
+ | // only two variables are live: kept2 and kept3. they end up on slots 1 and 2.
+ | // kept2 has 2 stores, kept3 has 1 store.
+ | def t2 = {
+ | var erased2 = null // we can eliminate this store because it's never used
+ | val erased3 = erased2 // and this
+ | var erased4 = erased2 // and this
+ | val erased5 = erased4 // and this
+ | var kept2: Object = new Object // ultimately can't be eliminated
+ | while(randomBoolean) {
+ | val kept3 = kept2
+ | kept2 = null // this can't, because it clobbers kept2, which is used
+ | erased4 = null // safe to eliminate
+ | println(kept3)
+ | }
+ | 0
+ | }
+ |
+ | def t3 = {
+ | var kept4 = new Object // have to keep, it's used
+ | try
+ | println(kept4)
+ | catch {
+ | case _ : Throwable => kept4 = null // have to keep, it clobbers kept4 which is used
+ | }
+ | 0
+ | }
+ |
+ | def t4 = {
+ | var kept5 = new Object
+ | print(kept5)
+ | kept5 = null // can't eliminate it's a clobber and it's used
+ | print(kept5)
+ | kept5 = null // eliminated by nullness analysis (store null to a local that is known to be null)
+ | 0
+ | }
+ |
+ | def t5 = {
+ | while(randomBoolean) {
+ | var kept6: AnyRef = null // not used, but have to keep because it clobbers the next used store
+ | // on the back edge of the loop
+ | kept6 = new Object // used
+ | println(kept6)
+ | }
+ | 0
+ | }
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ def stores(m: String) = getInstructions(c, m).filter(_.opcode == ASTORE)
+
+ assertEquals(locals(c, "t1"), List(("this",0), ("kept1",1), ("result",2)))
+ assert(stores("t1") == List(VarOp(ASTORE, 1), VarOp(ASTORE, 2), VarOp(ASTORE, 1), VarOp(ASTORE, 1)),
+ textify(getAsmMethod(c, "t1")))
+
+ assertEquals(locals(c, "t2"), List(("this",0), ("kept2",1), ("kept3",2)))
+ assert(stores("t2") == List(VarOp(ASTORE, 1), VarOp(ASTORE, 2), VarOp(ASTORE, 1)),
+ textify(getAsmMethod(c, "t2")))
+
+ assertEquals(locals(c, "t3"), List(("this",0), ("kept4",1)))
+ assert(stores("t3") == List(VarOp(ASTORE, 1), VarOp(ASTORE, 1)),
+ textify(getAsmMethod(c, "t3")))
+
+ assertEquals(locals(c, "t4"), List(("this",0), ("kept5",1)))
+ assert(stores("t4") == List(VarOp(ASTORE, 1), VarOp(ASTORE, 1)),
+ textify(getAsmMethod(c, "t4")))
+
+ assertEquals(locals(c, "t5"), List(("this",0), ("kept6",1)))
+ assert(stores("t5") == List(VarOp(ASTORE, 1), VarOp(ASTORE, 1)),
+ textify(getAsmMethod(c, "t5")))
+ }
+
+ @Test
+ def testCpp(): Unit = {
+ // copied from an old test (run/test-cpp.scala)
+ val code =
+ """class C {
+ | import scala.util.Random._
+ |
+ | def t1(x: Int) = {
+ | val y = x
+ | println(y)
+ | }
+ |
+ | def t2 = {
+ | val x = 2
+ | val y = x
+ | println(y)
+ | }
+ |
+ | def t3 = {
+ | val x = this
+ | val y = x
+ | println(y)
+ | }
+ |
+ | def f = nextInt
+ |
+ | def t4 = {
+ | val x = f
+ | val y = x
+ | println(y)
+ | }
+ |
+ | def t5 = {
+ | var x = nextInt
+ | var y = x
+ | println(y)
+ |
+ | y = nextInt
+ | x = y
+ | println(x)
+ | }
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ assertEquals(locals(c, "t1"), List(("this", 0), ("x", 1)))
+
+ assertEquals(locals(c, "t2"), List(("this", 0), ("x", 1)))
+ // we don't have constant propagation (yet).
+ // the local var can't be optimized as a store;laod sequence, there's a GETSTATIC between the two
+ assertSameSummary(getMethod(c, "t2"), List(
+ ICONST_2, ISTORE, GETSTATIC, ILOAD, "boxToInteger", "println", RETURN))
+
+ assertEquals(locals(c, "t3"), List(("this", 0)))
+ assertEquals(locals(c, "t4"), List(("this", 0), ("x", 1)))
+ assertEquals(locals(c, "t5"), List(("this", 0), ("x", 1)))
+ }
+
+ @Test
+ def t7006(): Unit = {
+ val code =
+ """class C {
+ | def t: Unit = {
+ | try {
+ | val x = 3
+ | } finally {
+ | print("hello")
+ | }
+ | while(true) { }
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ val t = getMethod(c, "t")
+ assertEquals(t.handlers, Nil)
+ assertEquals(locals(c, "t"), List(("this", 0)))
+ assertSameSummary(t, List(GETSTATIC, LDC, "print", -1, GOTO))
+ }
+
+ @Test
+ def booleanOrderingCompare(): Unit = {
+ val code =
+ """class C {
+ | def compare(x: Boolean, y: Boolean) = (x, y) match {
+ | case (false, true) => -1
+ | case (true, false) => 1
+ | case _ => 0
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+ assertNoInvoke(getMethod(c, "compare"))
+ }
+
+ @Test
+ def t8790(): Unit = {
+ val code =
+ """class C {
+ | def t(x: Int, y: Int): String = (x, y) match {
+ | case (7, 8) => "a"
+ | case _ => "b"
+ | }
+ |}
+ """.stripMargin
+ val c = compileClass(code)
+
+ assertSameSummary(getMethod(c, "t"), List(
+ BIPUSH, ILOAD, IF_ICMPNE,
+ BIPUSH, ILOAD, IF_ICMPNE,
+ LDC, ASTORE, GOTO,
+ -1, LDC, ASTORE,
+ -1, ALOAD, ARETURN))
+ }
+
+ @Test
+ def elimSamLambda(): Unit = {
+ val code =
+ """class C {
+ | def t1(x: Int) = {
+ | val fun: java.util.function.IntFunction[Int] = y => y + 1
+ | fun(x)
+ | }
+ | def t2(x: Int) = {
+ | val fun: T = i => i + 1
+ | fun.f(x)
+ | }
+ |}
+ |trait T { def f(x: Int): Int }
+ """.stripMargin
+ val List(c, t) = compileClasses(code)
+ assertSameSummary(getMethod(c, "t1"), List(ILOAD, "$anonfun$t1$1", IRETURN))
+ assertSameSummary(getMethod(c, "t2"), List(ILOAD, "$anonfun$t2$1", IRETURN))
+ }
+}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala
index f8e887426b..073eba7aa6 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/ScalaInlineInfoTest.scala
@@ -2,33 +2,49 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-import CodeGenTools._
-import scala.tools.nsc.backend.jvm.BTypes.{MethodInlineInfo, InlineInfo}
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import scala.collection.convert.decorateAsScala._
-
-object ScalaInlineInfoTest {
- var compiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:l:none")
- def clear(): Unit = { compiler = null }
-}
+import scala.collection.JavaConverters._
+import scala.tools.asm.tree.ClassNode
+import scala.tools.nsc.backend.jvm.BTypes.{InlineInfo, MethodInlineInfo}
+import scala.tools.testing.BytecodeTesting
@RunWith(classOf[JUnit4])
-class ScalaInlineInfoTest {
- val compiler = newCompiler()
+class ScalaInlineInfoTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:l:none"
+ import compiler._
+
+ def inlineInfo(c: ClassNode): InlineInfo = c.attrs.asScala.collect({ case a: InlineInfoAttribute => a.inlineInfo }).head
+
+ def mapDiff[A, B](a: Map[A, B], b: Map[A, B]) = {
+ val r = new StringBuilder
+ for ((a, av) <- a) {
+ if (!b.contains(a)) r.append(s"missing in b: $a\n")
+ else if (av != b(a)) r.append(s"different for $a: $av != ${b(a)}\n")
+ }
+ for (b <- b.keys.toList diff a.keys.toList) {
+ r.append(s"missing in a: $b\n")
+ }
+ r.toString
+ }
+
+ def assertSameMethods(c: ClassNode, nameAndSigs: Set[String]): Unit = {
+ val r = new StringBuilder
+ val inClass = c.methods.iterator.asScala.map(m => m.name + m.desc).toSet
+ for (m <- inClass.diff(nameAndSigs)) r.append(s"method in classfile found, but no inline info: $m")
+ for (m <- nameAndSigs.diff(inClass)) r.append(s"inline info found, but no method in classfile: $m")
+ assert(r.isEmpty, r.toString)
+ }
@Test
def traitMembersInlineInfo(): Unit = {
val code =
"""trait T {
| def f1 = 1 // concrete method
- | private def f2 = 1 // implOnly method (does not end up in the interface)
+ | private def f2 = 1 // default method only (not in subclass)
| def f3 = {
| def nest = 0 // nested method (does not end up in the interface)
| nest
@@ -38,13 +54,13 @@ class ScalaInlineInfoTest {
| def f4 = super.toString // super accessor
|
| object O // module accessor (method is generated)
- | def f5 = {
+ | final def f5 = {
| object L { val x = 0 } // nested module (just flattened out)
| L.x
| }
|
| @noinline
- | def f6: Int // abstract method (not in impl class)
+ | def f6: Int // abstract method
|
| // fields
|
@@ -55,31 +71,124 @@ class ScalaInlineInfoTest {
|
| final val x5 = 0
|}
+ |class C extends T {
+ | def f6 = 0
+ | var x3 = 0
+ |}
""".stripMargin
- val cs @ List(t, tl, to, tCls) = compileClasses(compiler)(code)
- val List(info) = t.attrs.asScala.collect({ case a: InlineInfoAttribute => a.inlineInfo }).toList
- val expect = InlineInfo(
- None, // self type
+ val cs @ List(c, t, tl, to) = compileClasses(code)
+ val infoT = inlineInfo(t)
+ val expectT = InlineInfo (
false, // final class
+ None, // not a sam
Map(
- ("O()LT$O$;", MethodInlineInfo(true, false,false,false)),
- ("T$$super$toString()Ljava/lang/String;",MethodInlineInfo(false,false,false,false)),
- ("T$_setter_$x1_$eq(I)V", MethodInlineInfo(false,false,false,false)),
- ("f1()I", MethodInlineInfo(false,true, false,false)),
- ("f3()I", MethodInlineInfo(false,true, false,false)),
- ("f4()Ljava/lang/String;", MethodInlineInfo(false,true, true, false)),
- ("f5()I", MethodInlineInfo(false,true, false,false)),
- ("f6()I", MethodInlineInfo(false,false,false,true )),
- ("x1()I", MethodInlineInfo(false,false,false,false)),
- ("x3()I", MethodInlineInfo(false,false,false,false)),
- ("x3_$eq(I)V", MethodInlineInfo(false,false,false,false)),
- ("x4()I", MethodInlineInfo(false,false,false,false)),
- ("x5()I", MethodInlineInfo(true, false,false,false)),
- ("y2()I", MethodInlineInfo(false,false,false,false)),
- ("y2_$eq(I)V", MethodInlineInfo(false,false,false,false))),
+ ("O()LT$O$;", MethodInlineInfo(false,false,false)),
+ ("T$$super$toString()Ljava/lang/String;", MethodInlineInfo(true ,false,false)),
+ ("T$_setter_$x1_$eq(I)V", MethodInlineInfo(false,false,false)),
+ ("f1()I", MethodInlineInfo(false,false,false)),
+ ("f1$(LT;)I", MethodInlineInfo(true ,false,false)),
+ ("f2()I", MethodInlineInfo(true ,false,false)), // no static impl method for private method f2
+ ("f3()I", MethodInlineInfo(false,false,false)),
+ ("f3$(LT;)I", MethodInlineInfo(true ,false,false)),
+ ("f4()Ljava/lang/String;", MethodInlineInfo(false,true, false)),
+ ("f4$(LT;)Ljava/lang/String;", MethodInlineInfo(true ,true, false)),
+ ("f5()I", MethodInlineInfo(true ,false,false)),
+ ("f5$(LT;)I", MethodInlineInfo(true ,false,false)),
+ ("f6()I", MethodInlineInfo(false,false,true )), // no static impl method for abstract method f6
+ ("x1()I", MethodInlineInfo(false,false,false)),
+ ("y2()I", MethodInlineInfo(false,false,false)),
+ ("y2_$eq(I)V", MethodInlineInfo(false,false,false)),
+ ("x3()I", MethodInlineInfo(false,false,false)),
+ ("x3_$eq(I)V", MethodInlineInfo(false,false,false)),
+ ("x4()I", MethodInlineInfo(false,false,false)),
+ ("x4$(LT;)I", MethodInlineInfo(true ,false,false)),
+ ("x5()I", MethodInlineInfo(true, false,false)),
+ ("x5$(LT;)I", MethodInlineInfo(true ,false,false)),
+ ("L$1(Lscala/runtime/LazyRef;)LT$L$2$;", MethodInlineInfo(true, false,false)),
+ ("nest$1()I", MethodInlineInfo(true, false,false)),
+ ("$init$(LT;)V", MethodInlineInfo(true,false,false)),
+ ("L$lzycompute$1(Lscala/runtime/LazyRef;)LT$L$2$;", MethodInlineInfo(true,false,false))
+ ),
None // warning
)
- assert(info == expect, info)
+
+ assert(infoT == expectT, mapDiff(expectT.methodInfos, infoT.methodInfos) + infoT)
+ assertSameMethods(t, expectT.methodInfos.keySet)
+
+ val infoC = inlineInfo(c)
+ val expectC = InlineInfo(false, None, Map(
+ "O()LT$O$;" -> MethodInlineInfo(true ,false,false),
+ "f1()I" -> MethodInlineInfo(false,false,false),
+ "f3()I" -> MethodInlineInfo(false,false,false),
+ "f4()Ljava/lang/String;" -> MethodInlineInfo(false,true,false),
+ "f5()I" -> MethodInlineInfo(true,false,false),
+ "f6()I" -> MethodInlineInfo(false,false,false),
+ "x1()I" -> MethodInlineInfo(false,false,false),
+ "T$_setter_$x1_$eq(I)V" -> MethodInlineInfo(false,false,false),
+ "y2()I" -> MethodInlineInfo(false,false,false),
+ "y2_$eq(I)V" -> MethodInlineInfo(false,false,false),
+ "x3()I" -> MethodInlineInfo(false,false,false),
+ "x3_$eq(I)V" -> MethodInlineInfo(false,false,false),
+ "x4$lzycompute()I" -> MethodInlineInfo(true ,false,false),
+ "x4()I" -> MethodInlineInfo(false,false,false),
+ "T$$super$toString()Ljava/lang/String;" -> MethodInlineInfo(true ,false,false),
+ "<init>()V" -> MethodInlineInfo(false,false,false),
+ "O$lzycompute$1()V" -> MethodInlineInfo(true,false,false)
+ ),
+ None)
+
+ assert(infoC == expectC, mapDiff(expectC.methodInfos, infoC.methodInfos) + infoC)
+ assertSameMethods(c, expectC.methodInfos.keySet)
+ }
+
+ @Test
+ def inlineInfoSam(): Unit = {
+ val code =
+ """trait C { // expected to be seen as sam: g(I)I
+ | def f = 0
+ | def g(x: Int): Int
+ | val foo = "hi"
+ |}
+ |abstract class D {
+ | val biz: Int
+ |}
+ |trait T { // expected to be seen as sam: h(Ljava/lang/String;)I
+ | def h(a: String): Int
+ |}
+ |trait E extends T { // expected to be seen as sam: h(Ljava/lang/String;)I
+ | def hihi(x: Int) = x
+ |}
+ |class F extends T {
+ | def h(a: String) = 0
+ |}
+ |trait U {
+ | def conc() = 10
+ | def nullary: Int
+ |}
+ """.stripMargin
+ val cs = compileClasses(code)
+ val sams = cs.map(c => (c.name, inlineInfo(c).sam))
+ assertEquals(sams,
+ List(
+ ("C",Some("g(I)I")),
+ ("D",None),
+ ("E",Some("h(Ljava/lang/String;)I")),
+ ("F",None),
+ ("T",Some("h(Ljava/lang/String;)I")),
+ ("U",None)))
+ }
+
+ @Test
+ def lzyComputeInlineInfo(): Unit = {
+ val code = "class C { object O }"
+ val List(c, om) = compileClasses(code)
+ val infoC = inlineInfo(c)
+ val expected = Map(
+ "<init>()V" -> MethodInlineInfo(false,false,false),
+ "O$lzycompute$1()V" -> MethodInlineInfo(true,false,false),
+ "O()LC$O$;" -> MethodInlineInfo(true,false,false))
+ assert(infoC.methodInfos == expected, mapDiff(infoC.methodInfos, expected))
+ assertSameMethods(c, expected.keySet)
}
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/SimplifyJumpsTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/SimplifyJumpsTest.scala
index a685ae7dd5..992a0e541b 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/SimplifyJumpsTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/SimplifyJumpsTest.scala
@@ -2,15 +2,15 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-import CodeGenTools._
+import scala.tools.asm.Opcodes._
import scala.tools.partest.ASMConverters
-import ASMConverters._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
class SimplifyJumpsTest {
@@ -96,10 +96,22 @@ class SimplifyJumpsTest {
instructionsFromMethod(method),
List(VarOp(ILOAD, 1), Jump(IFLT, Label(3))) ::: rest.tail )
- // no label allowed between begin and rest. if there's another label, then there could be a
- // branch that label. eliminating the GOTO would change the behavior.
- val nonOptMethod = genMethod()(begin ::: Label(22) :: rest: _*)
- assertFalse(LocalOptImpls.simplifyJumps(nonOptMethod))
+ // branch over goto is OK even if there's a label in between, if that label is not a jump target
+ val withNonJumpTargetLabel = genMethod()(begin ::: Label(22) :: rest: _*)
+ assertTrue(LocalOptImpls.simplifyJumps(withNonJumpTargetLabel))
+ assertSameCode(
+ instructionsFromMethod(withNonJumpTargetLabel),
+ List(VarOp(ILOAD, 1), Jump(IFLT, Label(3)), Label(22)) ::: rest.tail )
+
+ // if the Label(22) between IFGE and GOTO is the target of some jump, we cannot rewrite the IFGE
+ // and remove the GOTO: removing the GOTO would change semantics. However, the jump that targets
+ // Label(22) will be re-written (jump-chain collapsing), so in a second round, the IFGE is still
+ // rewritten to IFLT
+ val twoRounds = genMethod()(List(VarOp(ILOAD, 1), Jump(IFLE, Label(22))) ::: begin ::: Label(22) :: rest: _*)
+ assertTrue(LocalOptImpls.simplifyJumps(twoRounds))
+ assertSameCode(
+ instructionsFromMethod(twoRounds),
+ List(VarOp(ILOAD, 1), Jump(IFLE, Label(3)), VarOp(ILOAD, 1), Jump(IFLT, Label(3)), Label(22)) ::: rest.tail )
}
@Test
@@ -167,6 +179,9 @@ class SimplifyJumpsTest {
VarOp(ILOAD, 1),
Jump(IFGE, Label(target)),
+ VarOp(ILOAD, 1), // some code to prevent rewriting the conditional jump
+ Op(IRETURN),
+
Label(4),
Jump(GOTO, Label(3)),
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/UnreachableCodeTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/UnreachableCodeTest.scala
index 902af7b7fa..68ce61b48a 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/UnreachableCodeTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/UnreachableCodeTest.scala
@@ -2,49 +2,28 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
+import scala.tools.asm.Opcodes._
+import scala.tools.partest.ASMConverters._
import scala.tools.testing.AssertUtil._
-
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
+import scala.tools.testing.BytecodeTesting._
import scala.tools.testing.ClearAfterClass
-object UnreachableCodeTest extends ClearAfterClass.Clearable {
- // jvm-1.6 enables emitting stack map frames, which impacts the code generation wrt dead basic blocks,
- // see comment in BCodeBodyBuilder
- var methodOptCompiler = newCompiler(extraArgs = "-target:jvm-1.6 -Ybackend:GenBCode -Yopt:l:method")
- var dceCompiler = newCompiler(extraArgs = "-target:jvm-1.6 -Ybackend:GenBCode -Yopt:unreachable-code")
- var noOptCompiler = newCompiler(extraArgs = "-target:jvm-1.6 -Ybackend:GenBCode -Yopt:l:none")
-
- // jvm-1.5 disables computing stack map frames, and it emits dead code as-is. note that this flag triggers a deprecation warning
- var noOptNoFramesCompiler = newCompiler(extraArgs = "-target:jvm-1.5 -Ybackend:GenBCode -Yopt:l:none -deprecation")
-
- def clear(): Unit = {
- methodOptCompiler = null
- dceCompiler = null
- noOptCompiler = null
- noOptNoFramesCompiler = null
- }
-}
-
@RunWith(classOf[JUnit4])
class UnreachableCodeTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = UnreachableCodeTest
-
- val methodOptCompiler = UnreachableCodeTest.methodOptCompiler
- val dceCompiler = UnreachableCodeTest.dceCompiler
- val noOptCompiler = UnreachableCodeTest.noOptCompiler
- val noOptNoFramesCompiler = UnreachableCodeTest.noOptNoFramesCompiler
+ // jvm-1.6 enables emitting stack map frames, which impacts the code generation wrt dead basic blocks,
+ // see comment in BCodeBodyBuilder
+ val methodOptCompiler = cached("methodOptCompiler", () => newCompiler(extraArgs = "-opt:l:method"))
+ val dceCompiler = cached("dceCompiler", () => newCompiler(extraArgs = "-opt:unreachable-code"))
+ val noOptCompiler = cached("noOptCompiler", () => newCompiler(extraArgs = "-opt:l:none"))
def assertEliminateDead(code: (Instruction, Boolean)*): Unit = {
val method = genMethod()(code.map(_._1): _*)
- LocalOptImpls.removeUnreachableCodeImpl(method, "C")
+ dceCompiler.global.genBCode.bTypes.localOpt.removeUnreachableCodeImpl(method, "C")
val nonEliminated = instructionsFromMethod(method)
val expectedLive = code.filter(_._2).map(_._1).toList
assertSameCode(nonEliminated, expectedLive)
@@ -131,10 +110,10 @@ class UnreachableCodeTest extends ClearAfterClass {
@Test
def basicEliminationCompiler(): Unit = {
val code = "def f: Int = { return 1; 2 }"
- val withDce = singleMethodInstructions(dceCompiler)(code)
+ val withDce = dceCompiler.compileInstructions(code)
assertSameCode(withDce.dropNonOp, List(Op(ICONST_1), Op(IRETURN)))
- val noDce = singleMethodInstructions(noOptCompiler)(code)
+ val noDce = noOptCompiler.compileInstructions(code)
// The emitted code is ICONST_1, IRETURN, ICONST_2, IRETURN. The latter two are dead.
//
@@ -152,11 +131,6 @@ class UnreachableCodeTest extends ClearAfterClass {
// Finally, instructions in the dead basic blocks are replaced by ATHROW, as explained in
// a comment in BCodeBodyBuilder.
assertSameCode(noDce.dropNonOp, List(Op(ICONST_1), Op(IRETURN), Op(ATHROW), Op(ATHROW)))
-
- // when NOT computing stack map frames, ASM's ClassWriter does not replace dead code by NOP/ATHROW
- val warn = "target:jvm-1.5 is deprecated"
- val noDceNoFrames = singleMethodInstructions(noOptNoFramesCompiler)(code, allowMessage = _.msg contains warn)
- assertSameCode(noDceNoFrames.dropNonOp, List(Op(ICONST_1), Op(IRETURN), Op(ICONST_2), Op(IRETURN)))
}
@Test
@@ -165,23 +139,23 @@ class UnreachableCodeTest extends ClearAfterClass {
def wrapInDefault(code: Instruction*) = List(Label(0), LineNumber(1, Label(0))) ::: code.toList ::: List(Label(1))
val code = "def f: Int = { return 0; try { 1 } catch { case _: Exception => 2 } }"
- val m = singleMethod(dceCompiler)(code)
+ val m = dceCompiler.compileMethod(code)
assertTrue(m.handlers.isEmpty) // redundant (if code is gone, handler is gone), but done once here for extra safety
assertSameCode(m.instructions,
wrapInDefault(Op(ICONST_0), Op(IRETURN)))
val code2 = "def f: Unit = { try { } catch { case _: Exception => () }; () }"
// requires fixpoint optimization of methodOptCompiler (dce alone is not enough): first the handler is eliminated, then it's dead catch block.
- assertSameCode(singleMethodInstructions(methodOptCompiler)(code2), wrapInDefault(Op(RETURN)))
+ assertSameCode(methodOptCompiler.compileInstructions(code2), wrapInDefault(Op(RETURN)))
val code3 = "def f: Unit = { try { } catch { case _: Exception => try { } catch { case _: Exception => () } }; () }"
- assertSameCode(singleMethodInstructions(methodOptCompiler)(code3), wrapInDefault(Op(RETURN)))
+ assertSameCode(methodOptCompiler.compileInstructions(code3), wrapInDefault(Op(RETURN)))
// this example requires two iterations to get rid of the outer handler.
// the first iteration of DCE cannot remove the inner handler. then the inner (empty) handler is removed.
// then the second iteration of DCE removes the inner catch block, and then the outer handler is removed.
val code4 = "def f: Unit = { try { try { } catch { case _: Exception => () } } catch { case _: Exception => () }; () }"
- assertSameCode(singleMethodInstructions(methodOptCompiler)(code4), wrapInDefault(Op(RETURN)))
+ assertSameCode(methodOptCompiler.compileInstructions(code4), wrapInDefault(Op(RETURN)))
}
@Test // test the dce-testing tools
@@ -198,7 +172,7 @@ class UnreachableCodeTest extends ClearAfterClass {
}
@Test
- def bytecodeEquivalence: Unit = {
+ def bytecodeEquivalence(): Unit = {
assertTrue(List(VarOp(ILOAD, 1)) ===
List(VarOp(ILOAD, 2)))
assertTrue(List(VarOp(ILOAD, 1), VarOp(ISTORE, 1)) ===
@@ -225,4 +199,50 @@ class UnreachableCodeTest extends ClearAfterClass {
assertTrue(List(FrameEntry(F_FULL, List(INTEGER, DOUBLE, Label(3)), List("java/lang/Object", Label(4))), Label(3), Label(4)) ===
List(FrameEntry(F_FULL, List(INTEGER, DOUBLE, Label(1)), List("java/lang/Object", Label(3))), Label(1), Label(3)))
}
+
+ @Test
+ def loadNullNothingBytecode(): Unit = {
+ val code =
+ """class C {
+ | def nl: Null = null
+ | def nt: Nothing = throw new Error("")
+ | def cons(a: Any) = ()
+ |
+ | def t1 = cons(null)
+ | def t2 = cons(nl)
+ | def t3 = cons(throw new Error(""))
+ | def t4 = cons(nt)
+ |}
+ """.stripMargin
+ val c = noOptCompiler.compileClass(code)
+
+ assertSameSummary(getMethod(c, "nl"), List(ACONST_NULL, ARETURN))
+
+ assertSameSummary(getMethod(c, "nt"), List(
+ NEW, DUP, LDC, "<init>", ATHROW))
+
+ assertSameSummary(getMethod(c, "t1"), List(
+ ALOAD, ACONST_NULL, "cons", RETURN))
+
+ // GenBCode introduces POP; ACONST_NULL after loading an expression of type scala.runtime.Null$,
+ // see comment in BCodeBodyBuilder.adapt
+ assertSameSummary(getMethod(c, "t2"), List(
+ ALOAD, ALOAD, "nl", POP, ACONST_NULL, "cons", RETURN))
+
+ // the bytecode generated by GenBCode is ... ATHROW; INVOKEVIRTUAL C.cons; RETURN
+ // the ASM classfile writer creates a new basic block (creates a label) right after the ATHROW
+ // and replaces all instructions by NOP*; ATHROW, see comment in BCodeBodyBuilder.adapt
+ // NOTE: DCE is enabled by default and gets rid of the redundant code (tested below)
+ assertSameSummary(getMethod(c, "t3"), List(
+ ALOAD, NEW, DUP, LDC, "<init>", ATHROW, NOP, NOP, NOP, ATHROW))
+
+ // GenBCode introduces an ATHROW after the invocation of C.nt, see BCodeBodyBuilder.adapt
+ // NOTE: DCE is enabled by default and gets rid of the redundant code (tested below)
+ assertSameSummary(getMethod(c, "t4"), List(
+ ALOAD, ALOAD, "nt", ATHROW, NOP, NOP, NOP, ATHROW))
+
+ val cDCE = dceCompiler.compileClass(code)
+ assertSameSummary(getMethod(cDCE, "t3"), List(ALOAD, NEW, DUP, LDC, "<init>", ATHROW))
+ assertSameSummary(getMethod(cDCE, "t4"), List(ALOAD, ALOAD, "nt", ATHROW))
+ }
}
diff --git a/test/junit/scala/tools/nsc/backend/jvm/opt/UnusedLocalVariablesTest.scala b/test/junit/scala/tools/nsc/backend/jvm/opt/UnusedLocalVariablesTest.scala
index 769736669b..7ca09ff41d 100644
--- a/test/junit/scala/tools/nsc/backend/jvm/opt/UnusedLocalVariablesTest.scala
+++ b/test/junit/scala/tools/nsc/backend/jvm/opt/UnusedLocalVariablesTest.scala
@@ -2,28 +2,20 @@ package scala.tools.nsc
package backend.jvm
package opt
+import org.junit.Assert._
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.junit.Test
-import scala.tools.asm.Opcodes._
-import org.junit.Assert._
-import scala.collection.JavaConverters._
-import CodeGenTools._
-import scala.tools.partest.ASMConverters
-import ASMConverters._
-import scala.tools.testing.ClearAfterClass
-
-object UnusedLocalVariablesTest extends ClearAfterClass.Clearable {
- var dceCompiler = newCompiler(extraArgs = "-Ybackend:GenBCode -Yopt:unreachable-code")
- def clear(): Unit = { dceCompiler = null }
-}
+import scala.collection.JavaConverters._
+import scala.tools.partest.ASMConverters._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
@RunWith(classOf[JUnit4])
-class UnusedLocalVariablesTest extends ClearAfterClass {
- ClearAfterClass.stateToClear = UnusedLocalVariablesTest
-
- val dceCompiler = UnusedLocalVariablesTest.dceCompiler
+class UnusedLocalVariablesTest extends BytecodeTesting {
+ override def compilerArgs = "-opt:unreachable-code"
+ import compiler._
@Test
def removeUnusedVar(): Unit = {
@@ -56,7 +48,7 @@ class UnusedLocalVariablesTest extends ClearAfterClass {
| }
|}
|""".stripMargin
- val cls = compileClasses(dceCompiler)(code).head
+ val cls = compileClass(code)
val m = convertMethod(cls.methods.asScala.toList.find(_.desc == "(I)V").get)
assertTrue(m.localVars.length == 2) // this, a, but not y
@@ -77,19 +69,14 @@ class UnusedLocalVariablesTest extends ClearAfterClass {
|}
""".stripMargin
- val clss2 = compileClasses(dceCompiler)(code2)
- val cls2 = clss2.find(_.name == "C").get
- val companion2 = clss2.find(_.name == "C$").get
-
- val clsConstr = convertMethod(cls2.methods.asScala.toList.find(_.name == "<init>").get)
- val companionConstr = convertMethod(companion2.methods.asScala.toList.find(_.name == "<init>").get)
+ val List(cls2, companion2) = compileClasses(code2)
- assertTrue(clsConstr.localVars.length == 1) // this
- assertTrue(companionConstr.localVars.length == 1) // this
+ assertTrue(getMethod(cls2, "<init>").localVars.length == 1) // this
+ assertTrue(getMethod(companion2, "<init>").localVars.length == 1) // this
}
def assertLocalVarCount(code: String, numVars: Int): Unit = {
- assertTrue(singleMethod(dceCompiler)(code).localVars.length == numVars)
+ assertTrue(compileMethod(code).localVars.length == numVars)
}
}
diff --git a/test/junit/scala/tools/nsc/classpath/AggregateFlatClassPathTest.scala b/test/junit/scala/tools/nsc/classpath/AggregateClassPathTest.scala
index 9a004d5e0e..a7aca31ee3 100644
--- a/test/junit/scala/tools/nsc/classpath/AggregateFlatClassPathTest.scala
+++ b/test/junit/scala/tools/nsc/classpath/AggregateClassPathTest.scala
@@ -10,6 +10,7 @@ import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import scala.reflect.io.VirtualFile
import scala.tools.nsc.io.AbstractFile
+import scala.tools.nsc.util.ClassPath
/**
* Tests whether AggregateFlatClassPath returns correct entries taken from
@@ -17,14 +18,14 @@ import scala.tools.nsc.io.AbstractFile
* (in the case of the repeated entry for a class or a source it returns the first one).
*/
@RunWith(classOf[JUnit4])
-class AggregateFlatClassPathTest {
+class AggregateClassPathTest {
- private class TestFlatClassPath extends FlatClassPath {
+ private abstract class TestClassPathBase extends ClassPath {
override def packages(inPackage: String): Seq[PackageEntry] = unsupported
override def sources(inPackage: String): Seq[SourceFileEntry] = unsupported
override def classes(inPackage: String): Seq[ClassFileEntry] = unsupported
- override def list(inPackage: String): FlatClassPathEntries = unsupported
+ override def list(inPackage: String): ClassPathEntries = unsupported
override def findClassFile(name: String): Option[AbstractFile] = unsupported
override def asClassPathStrings: Seq[String] = unsupported
@@ -32,7 +33,7 @@ class AggregateFlatClassPathTest {
override def asURLs: Seq[URL] = unsupported
}
- private case class TestClassPath(virtualPath: String, classesInPackage: EntryNamesInPackage*) extends TestFlatClassPath {
+ private case class TestClassPath(virtualPath: String, classesInPackage: EntryNamesInPackage*) extends TestClassPathBase {
override def classes(inPackage: String): Seq[ClassFileEntry] =
for {
@@ -43,10 +44,10 @@ class AggregateFlatClassPathTest {
override def sources(inPackage: String): Seq[SourceFileEntry] = Nil
// we'll ignore packages
- override def list(inPackage: String): FlatClassPathEntries = FlatClassPathEntries(Nil, classes(inPackage))
+ override def list(inPackage: String): ClassPathEntries = ClassPathEntries(Nil, classes(inPackage))
}
- private case class TestSourcePath(virtualPath: String, sourcesInPackage: EntryNamesInPackage*) extends TestFlatClassPath {
+ private case class TestSourcePath(virtualPath: String, sourcesInPackage: EntryNamesInPackage*) extends TestClassPathBase {
override def sources(inPackage: String): Seq[SourceFileEntry] =
for {
@@ -57,7 +58,7 @@ class AggregateFlatClassPathTest {
override def classes(inPackage: String): Seq[ClassFileEntry] = Nil
// we'll ignore packages
- override def list(inPackage: String): FlatClassPathEntries = FlatClassPathEntries(Nil, sources(inPackage))
+ override def list(inPackage: String): ClassPathEntries = ClassPathEntries(Nil, sources(inPackage))
}
private case class EntryNamesInPackage(inPackage: String)(val names: String*)
@@ -88,7 +89,7 @@ class AggregateFlatClassPathTest {
private def virtualFile(pathPrefix: String, inPackage: String, fileName: String, extension: String) = {
val packageDirs =
- if (inPackage == FlatClassPath.RootPackage) ""
+ if (inPackage == ClassPath.RootPackage) ""
else inPackage.split('.').mkString("/", "/", "")
new VirtualFile(fileName + extension, s"$pathPrefix$packageDirs/$fileName$extension")
}
@@ -101,12 +102,12 @@ class AggregateFlatClassPathTest {
TestSourcePath(dir2, EntryNamesInPackage(pkg3)("J", "K", "L"))
)
- AggregateFlatClassPath(partialClassPaths)
+ AggregateClassPath(partialClassPaths)
}
@Test
def testGettingPackages: Unit = {
- case class ClassPathWithPackages(packagesInPackage: EntryNamesInPackage*) extends TestFlatClassPath {
+ case class ClassPathWithPackages(packagesInPackage: EntryNamesInPackage*) extends TestClassPathBase {
override def packages(inPackage: String): Seq[PackageEntry] =
packagesInPackage.find(_.inPackage == inPackage).map(_.names).getOrElse(Nil) map PackageEntryImpl
}
@@ -115,7 +116,7 @@ class AggregateFlatClassPathTest {
ClassPathWithPackages(EntryNamesInPackage(pkg1)("pkg1.c", "pkg1.b", "pkg1.a"),
EntryNamesInPackage(pkg2)("pkg2.d", "pkg2.a", "pkg2.e"))
)
- val cp = AggregateFlatClassPath(partialClassPaths)
+ val cp = AggregateClassPath(partialClassPaths)
val packagesInPkg1 = Seq("pkg1.a", "pkg1.d", "pkg1.f", "pkg1.c", "pkg1.b")
assertEquals(packagesInPkg1, cp.packages(pkg1).map(_.name))
@@ -156,7 +157,7 @@ class AggregateFlatClassPathTest {
TestClassPath(dir4, EntryNamesInPackage(pkg2)("A", "H", "I")),
TestClassPath(dir2, EntryNamesInPackage(pkg3)("J", "K", "L"))
)
- val cp = AggregateFlatClassPath(partialClassPaths)
+ val cp = AggregateClassPath(partialClassPaths)
val sourcesInPkg1 = Seq(sourceFileEntry(dir2, pkg1, "C"),
sourceFileEntry(dir2, pkg1, "B"),
@@ -190,7 +191,7 @@ class AggregateFlatClassPathTest {
)
assertEquals(classesAndSourcesInPkg1, cp.list(pkg1).classesAndSources)
- assertEquals(FlatClassPathEntries(Nil, Nil), cp.list(nonexistingPkg))
+ assertEquals(ClassPathEntries(Nil, Nil), cp.list(nonexistingPkg))
}
@Test
diff --git a/test/junit/scala/tools/nsc/classpath/FlatClassPathResolverTest.scala b/test/junit/scala/tools/nsc/classpath/PathResolverBaseTest.scala
index 5dee488285..d3d4289d8b 100644
--- a/test/junit/scala/tools/nsc/classpath/FlatClassPathResolverTest.scala
+++ b/test/junit/scala/tools/nsc/classpath/PathResolverBaseTest.scala
@@ -9,20 +9,17 @@ import org.junit._
import org.junit.rules.TemporaryFolder
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import scala.annotation.tailrec
-import scala.tools.nsc.io.AbstractFile
import scala.tools.nsc.util.ClassPath
import scala.tools.nsc.Settings
-import scala.tools.util.FlatClassPathResolver
import scala.tools.util.PathResolver
@RunWith(classOf[JUnit4])
-class FlatClassPathResolverTest {
+class PathResolverBaseTest {
val tempDir = new TemporaryFolder()
- private val packagesToTest = List(FlatClassPath.RootPackage, "scala", "scala.reflect", "scala.reflect.io")
- private val classFilesToFind = List("scala.tools.util.FlatClassPathResolver",
+ private val packagesToTest = List(ClassPath.RootPackage, "scala", "scala.reflect", "scala.reflect.io")
+ private val classFilesToFind = List("scala.tools.util.PathResolver",
"scala.reflect.io.AbstractFile",
"scala.collection.immutable.List",
"scala.Option",
@@ -60,7 +57,7 @@ class FlatClassPathResolverTest {
def deleteTempDir: Unit = tempDir.delete()
private def createFlatClassPath(settings: Settings) =
- new FlatClassPathResolver(settings).result
+ new PathResolver(settings).result
@Test
def testEntriesFromListOperationAgainstSeparateMethods: Unit = {
@@ -70,7 +67,7 @@ class FlatClassPathResolverTest {
val packages = classPath.packages(inPackage)
val classes = classPath.classes(inPackage)
val sources = classPath.sources(inPackage)
- val FlatClassPathEntries(packagesFromList, classesAndSourcesFromList) = classPath.list(inPackage)
+ val ClassPathEntries(packagesFromList, classesAndSourcesFromList) = classPath.list(inPackage)
val packageNames = packages.map(_.name).sorted
val packageNamesFromList = packagesFromList.map(_.name).sorted
@@ -96,52 +93,6 @@ class FlatClassPathResolverTest {
}
@Test
- def testCreatedEntriesAgainstRecursiveClassPath: Unit = {
- val flatClassPath = createFlatClassPath(settings)
- val recursiveClassPath = new PathResolver(settings).result
-
- def compareEntriesInPackage(inPackage: String): Unit = {
-
- @tailrec
- def traverseToPackage(packageNameParts: Seq[String], cp: ClassPath[AbstractFile]): ClassPath[AbstractFile] = {
- packageNameParts match {
- case Nil => cp
- case h :: t =>
- cp.packages.find(_.name == h) match {
- case Some(nestedCp) => traverseToPackage(t, nestedCp)
- case _ => throw new Exception(s"There's no package $inPackage in recursive classpath - error when searching for '$h'")
- }
- }
- }
-
- val packageNameParts = if (inPackage == FlatClassPath.RootPackage) Nil else inPackage.split('.').toList
- val recursiveClassPathInPackage = traverseToPackage(packageNameParts, recursiveClassPath)
-
- val flatCpPackages = flatClassPath.packages(inPackage).map(_.name)
- val pkgPrefix = PackageNameUtils.packagePrefix(inPackage)
- val recursiveCpPackages = recursiveClassPathInPackage.packages.map(pkgPrefix + _.name)
- assertEquals(s"Packages in package '$inPackage' on flat cp should be the same as on the recursive cp",
- recursiveCpPackages, flatCpPackages)
-
- val flatCpSources = flatClassPath.sources(inPackage).map(_.name).sorted
- val recursiveCpSources = recursiveClassPathInPackage.classes
- .filter(_.source.nonEmpty)
- .map(_.name).sorted
- assertEquals(s"Source entries in package '$inPackage' on flat cp should be the same as on the recursive cp",
- recursiveCpSources, flatCpSources)
-
- val flatCpClasses = flatClassPath.classes(inPackage).map(_.name).sorted
- val recursiveCpClasses = recursiveClassPathInPackage.classes
- .filter(_.binary.nonEmpty)
- .map(_.name).sorted
- assertEquals(s"Class entries in package '$inPackage' on flat cp should be the same as on the recursive cp",
- recursiveCpClasses, flatCpClasses)
- }
-
- packagesToTest foreach compareEntriesInPackage
- }
-
- @Test
def testFindClassFile: Unit = {
val classPath = createFlatClassPath(settings)
classFilesToFind foreach { className =>
diff --git a/test/junit/scala/tools/nsc/interpreter/ScriptedTest.scala b/test/junit/scala/tools/nsc/interpreter/ScriptedTest.scala
new file mode 100644
index 0000000000..01d17110d6
--- /dev/null
+++ b/test/junit/scala/tools/nsc/interpreter/ScriptedTest.scala
@@ -0,0 +1,102 @@
+package scala.tools.nsc
+package interpreter
+
+import org.junit._, Assert._, runner.RunWith, runners.JUnit4
+import scala.tools.testing.AssertUtil.assertThrows
+
+@RunWith(classOf[JUnit4])
+class ScriptedTest {
+ import javax.script._
+ import scala.tools.nsc.interpreter.Scripted
+
+ def scripted: ScriptEngine with Compilable = Scripted()
+ // same as by service discovery
+ //new ScriptEngineManager().getEngineByName("scala").asInstanceOf[ScriptEngine with Compilable]
+
+ // scripted, but also -Yno-predef -Yno-imports
+ def scriptedNoNothing: ScriptEngine with Compilable = {
+ val settings = new Settings()
+ settings.noimports.value = true
+ settings.nopredef.value = true
+ Scripted(settings = settings)
+ }
+
+ @Test def eval() = {
+ val engine = scripted
+ engine.put("foo","bar")
+ assert("bar" == engine.eval("foo"))
+ val bindings = engine.createBindings()
+ bindings.put("foo","baz")
+ assert("baz" == engine.eval("foo", bindings))
+ val c = engine.compile("def f = foo.asInstanceOf[String] ; f * 2")
+ assert("barbar" == c.eval())
+ assert("bazbaz" == c.eval(bindings))
+ }
+ @Test def evalNoNothing() = {
+ val engine = scriptedNoNothing
+ engine.put("foo","bar")
+ assert("bar" == engine.eval("foo"))
+ val bindings = engine.createBindings()
+ bindings.put("foo","baz")
+ assert("baz" == engine.eval("foo", bindings))
+ val c = engine.compile("import scala.Predef.augmentString ; def f = foo.asInstanceOf[java.lang.String] ; f * 2")
+ assert("barbar" == c.eval())
+ assert("bazbaz" == c.eval(bindings))
+ }
+ @Test def `SI-7933 multiple eval compiled script`() = {
+ val engine = scripted
+ val init = """val i = new java.util.concurrent.atomic.AtomicInteger"""
+ val code = """i.getAndIncrement()"""
+ engine eval init
+ val c = engine compile code
+ assert(0 == c.eval())
+ assert(1 == c.eval())
+ }
+ @Test def `SI-8422 captured i/o`() = {
+ import java.io.StringWriter
+ val engine = scripted
+ val ctx = new SimpleScriptContext
+ val w = new StringWriter
+ val code = """print("hello, world")"""
+
+ ctx.setWriter(w)
+ engine.eval(code, ctx)
+ assertEquals("hello, world", w.toString)
+ }
+ @Test def `SI-8422 captured multi i/o`() = {
+ import java.io.{ StringWriter, StringReader }
+ import scala.compat.Platform.EOL
+ val engine = scripted
+ val ctx = new SimpleScriptContext
+ val out = new StringWriter
+ val err = new StringWriter
+ val text =
+ """Now is the time
+ |for all good
+ |dogs to come for supper.""".stripMargin
+ val in = new StringReader(text)
+
+ val code =
+ """var s: String = _
+ |var i: Int = 0
+ |do {
+ | s = scala.io.StdIn.readLine()
+ | val out = if ((i & 1) == 0) Console.out else Console.err
+ | i += 1
+ | Option(s) foreach out.println
+ |} while (s != null)""".stripMargin
+
+ ctx.setWriter(out)
+ ctx.setErrorWriter(err)
+ ctx.setReader(in)
+ engine.eval(code, ctx)
+ val lines = text.lines.toList
+ assertEquals(lines.head + EOL + lines.last + EOL, out.toString)
+ assertEquals(lines(1) + EOL, err.toString)
+ }
+ @Test def `on compile error`(): Unit = {
+ val engine = scripted
+ val err = "not found: value foo in def f = foo at line number 11 at column number 16"
+ assertThrows[ScriptException](engine.compile("def f = foo"), _ == err)
+ }
+}
diff --git a/test/junit/scala/tools/nsc/settings/ScalaVersionTest.scala b/test/junit/scala/tools/nsc/settings/ScalaVersionTest.scala
index 77a2da828e..3717f80362 100644
--- a/test/junit/scala/tools/nsc/settings/ScalaVersionTest.scala
+++ b/test/junit/scala/tools/nsc/settings/ScalaVersionTest.scala
@@ -13,6 +13,57 @@ class ScalaVersionTest {
@Test def versionUnparse() {
val v = "2.11.3"
- assertEquals(ScalaVersion(v).unparse, v)
+ assertEquals(v, ScalaVersion(v).unparse)
+ assertEquals("2.11.3-RC4", ScalaVersion("2.11.3-rc4").unparse)
+ }
+
+ // SI-9167
+ @Test def `version parses with rigor`() {
+ import settings.{ SpecificScalaVersion => V }
+ import ScalaVersion._
+
+ // no-brainers
+ assertEquals(V(2,11,7,Final), ScalaVersion("2.11.7"))
+ assertEquals(V(2,11,7,Final), ScalaVersion("2.11.7-FINAL"))
+ assertEquals(V(2,11,7,Milestone(3)), ScalaVersion("2.11.7-M3"))
+ assertEquals(V(2,11,7,RC(3)), ScalaVersion("2.11.7-RC3"))
+ assertEquals(V(2,11,7,Development("devbuild")), ScalaVersion("2.11.7-devbuild"))
+
+ // partial-brainers
+ assertEquals(V(2,11,7,Milestone(3)), ScalaVersion("2.11.7-m3"))
+ assertEquals(V(2,11,7,RC(3)), ScalaVersion("2.11.7-rc3"))
+ assertEquals(V(2,11,7,Development("maybegood")), ScalaVersion("2.11.7-maybegood"))
+ assertEquals(V(2,11,7,Development("RCCola")), ScalaVersion("2.11.7-RCCola"))
+ assertEquals(V(2,11,7,Development("RC1.5")), ScalaVersion("2.11.7-RC1.5"))
+ assertEquals(V(2,11,7,Development("")), ScalaVersion("2.11.7-"))
+ assertEquals(V(2,11,7,Development("0.5")), ScalaVersion("2.11.7-0.5"))
+ assertEquals(V(2,11,7,Development("devbuild\nSI-9167")), ScalaVersion("2.11.7-devbuild\nSI-9167"))
+ assertEquals(V(2,11,7,Development("final")), ScalaVersion("2.11.7-final"))
+
+ // oh really
+ assertEquals(NoScalaVersion, ScalaVersion("none"))
+ assertEquals(AnyScalaVersion, ScalaVersion("any"))
+
+ assertThrows[NumberFormatException] { ScalaVersion("2.11.7.2") }
+ assertThrows[NumberFormatException] { ScalaVersion("2.11.7.beta") }
+ assertThrows[NumberFormatException] { ScalaVersion("2.x.7") }
+ assertThrows[NumberFormatException] { ScalaVersion("2.-11.7") }
+ assertThrows[NumberFormatException] { ScalaVersion("2. ") }
+ assertThrows[NumberFormatException] { ScalaVersion("2.1 .7") }
+ assertThrows[NumberFormatException] { ScalaVersion("2.") }
+ assertThrows[NumberFormatException] { ScalaVersion("2..") }
+ assertThrows[NumberFormatException] { ScalaVersion("2...") }
+ assertThrows[NumberFormatException] { ScalaVersion("2-") }
+ assertThrows[NumberFormatException] { ScalaVersion("2-.") } // scalacheck territory
+ assertThrows[NumberFormatException] { ScalaVersion("any.7") }
+
+ assertThrows[NumberFormatException] ( ScalaVersion("2.11-ok"), _ ==
+ "Bad version (2.11-ok) not major[.minor[.revision[-suffix]]]" )
+
+ }
+
+ // SI-9377
+ @Test def `missing version is as good as none`() {
+ assertEquals(NoScalaVersion, ScalaVersion(""))
}
}
diff --git a/test/junit/scala/tools/nsc/settings/SettingsTest.scala b/test/junit/scala/tools/nsc/settings/SettingsTest.scala
index 96f83c4c2f..0f2d206273 100644
--- a/test/junit/scala/tools/nsc/settings/SettingsTest.scala
+++ b/test/junit/scala/tools/nsc/settings/SettingsTest.scala
@@ -26,16 +26,16 @@ class SettingsTest {
assertThrows[IllegalArgumentException](check("-Ytest-setting:rubbish"))
}
- @Test def userSettingsHavePrecedenceOverOptimize() {
+ @Test def userSettingsHavePrecedenceOverExperimental() {
def check(args: String*): MutableSettings#BooleanSetting = {
val s = new MutableSettings(msg => throw new IllegalArgumentException(msg))
val (ok, residual) = s.processArguments(args.toList, processAll = true)
assert(residual.isEmpty)
- s.inline // among -optimize
+ s.YpartialUnification // among -Xexperimental
}
- assertTrue(check("-optimise").value)
- assertFalse(check("-optimise", "-Yinline:false").value)
- assertFalse(check("-Yinline:false", "-optimise").value)
+ assertTrue(check("-Xexperimental").value)
+ assertFalse(check("-Xexperimental", "-Ypartial-unification:false").value)
+ assertFalse(check("-Ypartial-unification:false", "-Xexperimental").value)
}
// for the given args, select the desired setting
@@ -172,12 +172,12 @@ class SettingsTest {
assert(residual.isEmpty)
assertTrue(s.source.value == ScalaVersion(expected))
}
- check(expected = "2.11.0") // default
+ check(expected = "2.12.0") // default
check(expected = "2.11.0", "-Xsource:2.11")
check(expected = "2.10", "-Xsource:2.10.0")
check(expected = "2.12", "-Xsource:2.12")
assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource"), _ == "-Xsource requires an argument, the syntax is -Xsource:<version>")
assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource", "2.11"), _ == "-Xsource requires an argument, the syntax is -Xsource:<version>")
- assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource:2.invalid"), _ contains "There was a problem parsing 2.invalid")
+ assertThrows[IllegalArgumentException](check(expected = "2.11", "-Xsource:2.invalid"), _ contains "Bad version (2.invalid)")
}
}
diff --git a/test/junit/scala/tools/nsc/symtab/FlagsTest.scala b/test/junit/scala/tools/nsc/symtab/FlagsTest.scala
index fc0e8b0f6b..e88b3f9e96 100644
--- a/test/junit/scala/tools/nsc/symtab/FlagsTest.scala
+++ b/test/junit/scala/tools/nsc/symtab/FlagsTest.scala
@@ -31,13 +31,7 @@ class FlagsTest {
@Test
def testTimedFlags(): Unit = {
- testLate(lateDEFERRED, _.isDeferred)
- testLate(lateFINAL, _.isFinal)
- testLate(lateINTERFACE, _.isInterface)
- testLate(lateMETHOD, _.isMethod)
- testLate(lateMODULE, _.isModule)
testNot(PROTECTED | notPROTECTED, _.isProtected)
- testNot(OVERRIDE | notOVERRIDE, _.isOverride)
testNot(PRIVATE | notPRIVATE, _.isPrivate)
assertFalse(withFlagMask(AllFlags)(sym.setFlag(PRIVATE | notPRIVATE).isPrivate))
@@ -86,4 +80,11 @@ class FlagsTest {
assertEquals(withFlagMask(AllFlags)(sym.setFlag(lateFlags).flags), lateFlags | lateable)
}
+
+ @Test
+ def javaClassMirrorAnnotationFlag(): Unit = {
+ import scala.reflect.runtime.universe._
+ val dep = typeOf[java.lang.Deprecated].typeSymbol
+ assertTrue(dep.isJavaAnnotation && dep.isJava)
+ }
}
diff --git a/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala b/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala
index 91f94e09b6..5949008d8a 100644
--- a/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala
+++ b/test/junit/scala/tools/nsc/symtab/StdNamesTest.scala
@@ -2,16 +2,17 @@ package scala.tools.nsc
package symtab
import org.junit.Assert._
-import scala.tools.testing.AssertUtil._
-import org.junit.{Ignore, Test}
+import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.tools.testing.AssertUtil._
+
@RunWith(classOf[JUnit4])
class StdNamesTest {
object symbolTable extends SymbolTableForUnitTesting
import symbolTable._
- import nme.{SPECIALIZED_SUFFIX, unspecializedName, splitSpecializedName}
+ import nme.{SPECIALIZED_SUFFIX, splitSpecializedName, unspecializedName}
@Test
def testNewTermNameInvalid(): Unit = {
diff --git a/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala b/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala
index f0f20acf07..fb05ab8d5a 100644
--- a/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala
+++ b/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala
@@ -2,10 +2,7 @@ package scala.tools.nsc
package symtab
import scala.reflect.ClassTag
-import scala.reflect.internal.{Phase, NoPhase, SomePhase}
-import scala.tools.nsc.classpath.FlatClassPath
-import scala.tools.nsc.settings.ClassPathRepresentationType
-import scala.tools.util.FlatClassPathResolver
+import scala.reflect.internal.{NoPhase, Phase, SomePhase}
import scala.tools.util.PathResolver
import util.ClassPath
import io.AbstractFile
@@ -30,8 +27,7 @@ class SymbolTableForUnitTesting extends SymbolTable {
override def isCompilerUniverse: Boolean = true
- def classPath = platform.classPath
- def flatClassPath: FlatClassPath = platform.flatClassPath
+ def classPath: ClassPath = platform.classPath
object platform extends backend.Platform {
val symbolTable: SymbolTableForUnitTesting.this.type = SymbolTableForUnitTesting.this
@@ -39,22 +35,12 @@ class SymbolTableForUnitTesting extends SymbolTable {
def platformPhases: List[SubComponent] = Nil
- lazy val classPath: ClassPath[AbstractFile] = {
- assert(settings.YclasspathImpl.value == ClassPathRepresentationType.Recursive,
- "It's not possible to use the recursive classpath representation, when it's not the chosen classpath scanning method")
- new PathResolver(settings).result
- }
-
- private[nsc] lazy val flatClassPath: FlatClassPath = {
- assert(settings.YclasspathImpl.value == ClassPathRepresentationType.Flat,
- "It's not possible to use the flat classpath representation, when it's not the chosen classpath scanning method")
- new FlatClassPathResolver(settings).result
- }
+ private[nsc] lazy val classPath: ClassPath = new PathResolver(settings).result
def isMaybeBoxed(sym: Symbol): Boolean = ???
def needCompile(bin: AbstractFile, src: AbstractFile): Boolean = ???
def externalEquals: Symbol = ???
- def updateClassPath(subst: Map[ClassPath[AbstractFile], ClassPath[AbstractFile]]): Unit = ???
+ def updateClassPath(subst: Map[ClassPath, ClassPath]): Unit = ???
}
object loaders extends symtab.SymbolLoaders {
@@ -69,10 +55,7 @@ class SymbolTableForUnitTesting extends SymbolTable {
class GlobalMirror extends Roots(NoSymbol) {
val universe: SymbolTableForUnitTesting.this.type = SymbolTableForUnitTesting.this
- def rootLoader: LazyType = settings.YclasspathImpl.value match {
- case ClassPathRepresentationType.Flat => new loaders.PackageLoaderUsingFlatClassPath(FlatClassPath.RootPackage, flatClassPath)
- case ClassPathRepresentationType.Recursive => new loaders.PackageLoader(classPath)
- }
+ def rootLoader: LazyType = new loaders.PackageLoader(ClassPath.RootPackage, classPath)
override def toString = "compiler mirror"
}
@@ -102,7 +85,7 @@ class SymbolTableForUnitTesting extends SymbolTable {
// minimal Run to get Reporting wired
def currentRun = new RunReporting {}
class PerRunReporting extends PerRunReportingBase {
- def deprecationWarning(pos: Position, msg: String): Unit = reporter.warning(pos, msg)
+ def deprecationWarning(pos: Position, msg: String, since: String): Unit = reporter.warning(pos, msg)
}
protected def PerRunReporting = new PerRunReporting
@@ -119,7 +102,9 @@ class SymbolTableForUnitTesting extends SymbolTable {
}
phasesArray
}
- lazy val treeInfo: scala.reflect.internal.TreeInfo{val global: SymbolTableForUnitTesting.this.type} = ???
+ lazy val treeInfo = new scala.reflect.internal.TreeInfo {
+ val global: SymbolTableForUnitTesting.this.type = SymbolTableForUnitTesting.this
+ }
val currentFreshNameCreator = new reflect.internal.util.FreshNameCreator
diff --git a/test/junit/scala/tools/nsc/transform/delambdafy/DelambdafyTest.scala b/test/junit/scala/tools/nsc/transform/delambdafy/DelambdafyTest.scala
index 010078e28a..609f481721 100644
--- a/test/junit/scala/tools/nsc/transform/delambdafy/DelambdafyTest.scala
+++ b/test/junit/scala/tools/nsc/transform/delambdafy/DelambdafyTest.scala
@@ -1,17 +1,15 @@
package scala.tools.nsc.transform.delambdafy
-import scala.reflect.io.Path.jfile2path
-import scala.tools.nsc.backend.jvm.CodeGenTools.getGeneratedClassfiles
-import scala.tools.nsc.backend.jvm.CodeGenTools.makeSourceFile
-import scala.tools.nsc.backend.jvm.CodeGenTools.newCompilerWithoutVirtualOutdir
-import scala.tools.nsc.io.AbstractFile
-import scala.tools.testing.TempDir
-
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.reflect.io.Path.jfile2path
+import scala.tools.nsc.io.AbstractFile
+import scala.tools.testing.BytecodeTesting._
+import scala.tools.testing.TempDir
+
@RunWith(classOf[JUnit4])
class DelambdafyTest {
def compileToMultipleOutputWithDelamdbafyMethod(): List[(String, Array[Byte])] = {
@@ -52,18 +50,18 @@ object Delambdafy {
val srcFile = makeSourceFile(codeForMultiOutput, "delambdafyTest.scala")
val outDir = AbstractFile.getDirectory(TempDir.createTempDir())
val outDirPath = outDir.canonicalPath
- val extraArgs = "-Ybackend:GenBCode -Ydelambdafy:method"
+ val extraArgs = "-Ydelambdafy:method"
val argsWithOutDir = extraArgs + s" -d $outDirPath -cp $outDirPath"
val compiler = newCompilerWithoutVirtualOutdir(extraArgs = argsWithOutDir)
- compiler.settings.outputDirs.add(srcFile.file, outDir)
+ compiler.global.settings.outputDirs.add(srcFile.file, outDir)
- new compiler.Run().compileSources(List(srcFile))
+ new compiler.global.Run().compileSources(List(srcFile))
val classfiles = getGeneratedClassfiles(outDir)
outDir.delete()
classfiles
}
-
+
@Test
def shouldFindOutputFoldersForAllPromotedLambdasAsMethod(): Unit = {
val actual = compileToMultipleOutputWithDelamdbafyMethod()
diff --git a/test/junit/scala/tools/nsc/transform/patmat/PatmatBytecodeTest.scala b/test/junit/scala/tools/nsc/transform/patmat/PatmatBytecodeTest.scala
new file mode 100644
index 0000000000..de18dec344
--- /dev/null
+++ b/test/junit/scala/tools/nsc/transform/patmat/PatmatBytecodeTest.scala
@@ -0,0 +1,182 @@
+package scala.tools.nsc
+package transform.patmat
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.tools.asm.Opcodes._
+import scala.tools.nsc.backend.jvm.AsmUtils._
+import scala.tools.testing.BytecodeTesting
+import scala.tools.testing.BytecodeTesting._
+
+@RunWith(classOf[JUnit4])
+class PatmatBytecodeTest extends BytecodeTesting {
+ val optCompiler = cached("optCompiler", () => newCompiler(extraArgs = "-opt:l:project"))
+
+ import compiler._
+
+ @Test
+ def t6956(): Unit = {
+ val code =
+ """class C {
+ | private[this] final val ONE = 1
+ |
+ | def s1(i: Byte): Int = i match {
+ | case ONE => 1
+ | case 2 => 2
+ | case 3 => 3
+ | case _ => 0
+ | }
+ |
+ | def s2(i: Byte): Int = i match {
+ | case 1 => 1
+ | case 2 => 2
+ | case 3 => 3
+ | case _ => 0
+ | }
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ assert(getInstructions(c, "s1").count(_.opcode == TABLESWITCH) == 1, textify(c))
+ assert(getInstructions(c, "s2").count(_.opcode == TABLESWITCH) == 1, textify(c))
+ }
+
+ @Test
+ def t6955(): Unit = {
+ val code =
+ """class C {
+ | type Tag = Byte
+ |
+ | def s1(i: Tag): Int = i match { // notice type of i is Tag = Byte
+ | case 1 => 1
+ | case 2 => 2
+ | case 3 => 3
+ | case _ => 0
+ | }
+ |
+ | // this worked before, should keep working
+ | def s2(i: Byte): Int = i match {
+ | case 1 => 1
+ | case 2 => 2
+ | case 3 => 3
+ | case _ => 0
+ | }
+ |}
+ """.stripMargin
+
+ val c = compileClass(code)
+ assert(getInstructions(c, "s1").count(_.opcode == TABLESWITCH) == 1, textify(c))
+ assert(getInstructions(c, "s2").count(_.opcode == TABLESWITCH) == 1, textify(c))
+ }
+
+ @Test
+ def optNoPrimitiveTypetest(): Unit = {
+ val code =
+ """case class Foo(x: Int, y: String)
+ |class C {
+ | def a = Foo(1, "a") match {
+ | case Foo(_: Int, y) => y
+ | }
+ |}
+ """.stripMargin
+ val c :: _ = optCompiler.compileClasses(code)
+
+ assertSameSummary(getMethod(c, "a"), List(
+ NEW, DUP, ICONST_1, LDC, "<init>",
+ "y", ARETURN))
+ }
+
+ @Test
+ def optNoNullCheck(): Unit = {
+ val code =
+ """case class Foo(x: Any)
+ |class C {
+ | def a = (Foo(1): Any) match {
+ | case Foo(_: String) =>
+ | }
+ |}
+ """.stripMargin
+ val c :: _ = optCompiler.compileClasses(code)
+ assert(!getInstructions(c, "a").exists(i => i.opcode == IFNULL || i.opcode == IFNONNULL), textify(getAsmMethod(c, "a")))
+ }
+
+ @Test
+ def optNoLoacalForUnderscore(): Unit = {
+ val code =
+ """case class Foo(x: Any, y: String)
+ |class C {
+ | def a = (Foo(1, "a"): @unchecked) match {
+ | case Foo(_: String, y) => y
+ | }
+ |}
+ """.stripMargin
+ val c :: _ = optCompiler.compileClasses(code)
+ assertSameSummary(getMethod(c, "a"), List(
+ NEW, DUP, ICONST_1, "boxToInteger", LDC, "<init>", ASTORE /*1*/,
+ ALOAD /*1*/, "y", ASTORE /*2*/,
+ ALOAD /*1*/, "x", INSTANCEOF, IFNE /*R*/,
+ NEW, DUP, ALOAD /*1*/, "<init>", ATHROW,
+ /*R*/ -1, ALOAD /*2*/, ARETURN))
+ }
+
+ @Test
+ def t6941(): Unit = {
+ val code =
+ """class C {
+ | def a(xs: List[Int]) = xs match {
+ | case x :: _ => x
+ | }
+ | def b(xs: List[Int]) = xs match {
+ | case xs: ::[Int] => xs.head
+ | }
+ |}
+ """.stripMargin
+ val c = optCompiler.compileClass(code, allowMessage = _.msg.contains("may not be exhaustive"))
+
+ val expected = List(
+ ALOAD /*1*/ , INSTANCEOF /*::*/ , IFEQ /*A*/ ,
+ ALOAD, CHECKCAST /*::*/ , "head", "unboxToInt",
+ ISTORE, GOTO /*B*/ ,
+ -1 /*A*/ , NEW /*MatchError*/ , DUP, ALOAD /*1*/ , "<init>", ATHROW,
+ -1 /*B*/ , ILOAD, IRETURN)
+
+ assertSameSummary(getMethod(c, "a"), expected)
+ assertSameSummary(getMethod(c, "b"), expected)
+ }
+
+ @Test
+ def valPatterns(): Unit = {
+ val code =
+ """case class C(a: Any, b: Int) {
+ | def tplCall = ("hi", 3)
+ | @inline final def tplInline = (true, 'z')
+ |
+ | def t1 = { val (a, b) = (1, 2); a + b }
+ | def t2 = { val (a, _) = (1, 3); a }
+ | def t3 = { val (s, i) = tplCall; s.length + i }
+ | def t4 = { val (_, i) = tplCall; i }
+ | def t5 = { val (b, c) = tplInline; b || c == 'e' }
+ | def t6 = { val (_, c) = tplInline; c }
+ |
+ | def t7 = { val C(s: String, b) = this; s.length + b }
+ | def t8 = { val C(_, b) = this; b }
+ | def t9 = { val C(a, _) = C("hi", 23); a.toString }
+ |}
+ """.stripMargin
+ val List(c, cMod) = optCompiler.compileClasses(code)
+ assertSameSummary(getMethod(c, "t1"), List(ICONST_1, ICONST_2, IADD, IRETURN))
+ assertSameSummary(getMethod(c, "t2"), List(ICONST_1, IRETURN))
+ assertInvokedMethods(getMethod(c, "t3"), List("C.tplCall", "scala/Tuple2._1", "scala/Tuple2._2$mcI$sp", "scala/MatchError.<init>", "java/lang/String.length"))
+ assertInvokedMethods(getMethod(c, "t4"), List("C.tplCall", "scala/Tuple2._2$mcI$sp", "scala/MatchError.<init>"))
+ assertNoInvoke(getMethod(c, "t5"))
+ assertSameSummary(getMethod(c, "t6"), List(BIPUSH, IRETURN))
+
+ // MatchError reachable because of the type pattern `s: String`
+ assertInvokedMethods(getMethod(c, "t7"), List("C.a", "C.b", "scala/MatchError.<init>", "java/lang/String.length"))
+ assertSameSummary(getMethod(c, "t8"), List(ALOAD, "b", IRETURN))
+ // C allocation not eliminated - constructor may have side-effects.
+ assertSameSummary(getMethod(c, "t9"), List(NEW, DUP, LDC, BIPUSH, "<init>", "a", "toString", ARETURN))
+ }
+}
diff --git a/test/junit/scala/tools/nsc/util/ClassPathImplComparator.scala b/test/junit/scala/tools/nsc/util/ClassPathImplComparator.scala
deleted file mode 100644
index f2926e3e17..0000000000
--- a/test/junit/scala/tools/nsc/util/ClassPathImplComparator.scala
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2014 Contributor. All rights reserved.
- */
-package scala.tools.nsc.util
-
-import scala.reflect.io.AbstractFile
-import scala.tools.nsc.Settings
-import scala.tools.nsc.settings.ClassPathRepresentationType
-import scala.tools.util.PathResolverFactory
-
-/**
- * Simple application to compare efficiency of the recursive and the flat classpath representations
- */
-object ClassPathImplComparator {
-
- private class TestSettings extends Settings {
- val checkClasses = PathSetting("-checkClasses", "Specify names of classes which should be found separated with ;", "")
- val requiredIterations = IntSetting("-requiredIterations",
- "Repeat tests specified number of times (to check e.g. impact of caches)", 1, Some((1, Int.MaxValue)), (_: String) => None)
- val cpCreationRepetitions = IntSetting("-cpCreationRepetitions",
- "Repeat tests specified number of times (to check e.g. impact of caches)", 1, Some((1, Int.MaxValue)), (_: String) => None)
- val cpLookupRepetitions = IntSetting("-cpLookupRepetitions",
- "Repeat tests specified number of times (to check e.g. impact of caches)", 1, Some((1, Int.MaxValue)), (_: String) => None)
- }
-
- private class DurationStats(name: String) {
- private var sum = 0L
- private var iterations = 0
-
- def noteMeasuredTime(millis: Long): Unit = {
- sum += millis
- iterations += 1
- }
-
- def printResults(): Unit = {
- val avg = if (iterations == 0) 0 else sum.toDouble / iterations
- println(s"$name - total duration: $sum ms; iterations: $iterations; avg: $avg ms")
- }
- }
-
- private lazy val defaultClassesToFind = List(
- "scala.collection.immutable.List",
- "scala.Option",
- "scala.Int",
- "scala.collection.immutable.Vector",
- "scala.util.hashing.MurmurHash3"
- )
-
- private val oldCpCreationStats = new DurationStats("Old classpath - create")
- private val oldCpSearchingStats = new DurationStats("Old classpath - search")
-
- private val flatCpCreationStats = new DurationStats("Flat classpath - create")
- private val flatCpSearchingStats = new DurationStats("Flat classpath - search")
-
- def main(args: Array[String]): Unit = {
-
- if (args contains "-help")
- usage()
- else {
- val oldCpSettings = loadSettings(args.toList, ClassPathRepresentationType.Recursive)
- val flatCpSettings = loadSettings(args.toList, ClassPathRepresentationType.Flat)
-
- val classesToCheck = oldCpSettings.checkClasses.value
- val classesToFind =
- if (classesToCheck.isEmpty) defaultClassesToFind
- else classesToCheck.split(";").toList
-
- def doTest(classPath: => ClassFileLookup[AbstractFile], cpCreationStats: DurationStats, cpSearchingStats: DurationStats,
- cpCreationRepetitions: Int, cpLookupRepetitions: Int)= {
-
- def createClassPaths() = (1 to cpCreationRepetitions).map(_ => classPath).last
- def testClassLookup(cp: ClassFileLookup[AbstractFile]): Boolean = (1 to cpCreationRepetitions).foldLeft(true) {
- case (a, _) => a && checkExistenceOfClasses(classesToFind)(cp)
- }
-
- val cp = withMeasuredTime("Creating classpath", createClassPaths(), cpCreationStats)
- val result = withMeasuredTime("Searching for specified classes", testClassLookup(cp), cpSearchingStats)
- println(s"The end of the test case. All expected classes found = $result \n")
- }
-
- (1 to oldCpSettings.requiredIterations.value) foreach { iteration =>
- if (oldCpSettings.requiredIterations.value > 1)
- println(s"Iteration no $iteration")
-
- println("Recursive (old) classpath representation:")
- doTest(PathResolverFactory.create(oldCpSettings).result, oldCpCreationStats, oldCpSearchingStats,
- oldCpSettings.cpCreationRepetitions.value, oldCpSettings.cpLookupRepetitions.value)
-
- println("Flat classpath representation:")
- doTest(PathResolverFactory.create(flatCpSettings).result, flatCpCreationStats, flatCpSearchingStats,
- flatCpSettings.cpCreationRepetitions.value, flatCpSettings.cpLookupRepetitions.value)
- }
-
- if (oldCpSettings.requiredIterations.value > 1) {
- println("\nOld classpath - summary")
- oldCpCreationStats.printResults()
- oldCpSearchingStats.printResults()
-
- println("\nFlat classpath - summary")
- flatCpCreationStats.printResults()
- flatCpSearchingStats.printResults()
- }
- }
- }
-
- /**
- * Prints usage information
- */
- private def usage(): Unit =
- println("""Use classpath and sourcepath options like in the case of e.g. 'scala' command.
- | There are also two additional options:
- | -checkClasses <semicolon separated class names> Specify names of classes which should be found
- | -requiredIterations <int value> Repeat tests specified count of times (to check e.g. impact of caches)
- | Note: Option -YclasspathImpl will be set automatically for each case.
- """.stripMargin.trim)
-
- private def loadSettings(args: List[String], implType: String) = {
- val settings = new TestSettings()
- settings.processArguments(args, processAll = true)
- settings.YclasspathImpl.value = implType
- if (settings.classpath.isDefault)
- settings.classpath.value = sys.props("java.class.path")
- settings
- }
-
- private def withMeasuredTime[T](operationName: String, f: => T, durationStats: DurationStats): T = {
- val startTime = System.currentTimeMillis()
- val res = f
- val elapsed = System.currentTimeMillis() - startTime
- durationStats.noteMeasuredTime(elapsed)
- println(s"$operationName - elapsed $elapsed ms")
- res
- }
-
- private def checkExistenceOfClasses(classesToCheck: Seq[String])(classPath: ClassFileLookup[AbstractFile]): Boolean =
- classesToCheck.foldLeft(true) {
- case (res, classToCheck) =>
- val found = classPath.findClass(classToCheck).isDefined
- if (!found)
- println(s"Class $classToCheck not found") // of course in this case the measured time will be affected by IO operation
- found
- }
-}
diff --git a/test/junit/scala/tools/testing/BytecodeTesting.scala b/test/junit/scala/tools/testing/BytecodeTesting.scala
new file mode 100644
index 0000000000..c0fdb8010f
--- /dev/null
+++ b/test/junit/scala/tools/testing/BytecodeTesting.scala
@@ -0,0 +1,312 @@
+package scala.tools.testing
+
+import junit.framework.AssertionFailedError
+import org.junit.Assert._
+
+import scala.collection.JavaConverters._
+import scala.collection.mutable.ListBuffer
+import scala.reflect.internal.util.BatchSourceFile
+import scala.reflect.io.VirtualDirectory
+import scala.tools.asm.Opcodes
+import scala.tools.asm.tree.{AbstractInsnNode, ClassNode, MethodNode}
+import scala.tools.cmd.CommandLineParser
+import scala.tools.nsc.backend.jvm.AsmUtils
+import scala.tools.nsc.backend.jvm.AsmUtils._
+import scala.tools.nsc.backend.jvm.opt.BytecodeUtils
+import scala.tools.nsc.io.AbstractFile
+import scala.tools.nsc.reporters.StoreReporter
+import scala.tools.nsc.{Global, Settings}
+import scala.tools.partest.ASMConverters._
+
+trait BytecodeTesting extends ClearAfterClass {
+ def compilerArgs = "" // to be overridden
+ val compiler = cached("compiler", () => BytecodeTesting.newCompiler(extraArgs = compilerArgs))
+}
+
+class Compiler(val global: Global) {
+ import BytecodeTesting._
+
+ def resetOutput(): Unit = {
+ global.settings.outputDirs.setSingleOutput(new VirtualDirectory("(memory)", None))
+ }
+
+ def newRun: global.Run = {
+ global.reporter.reset()
+ resetOutput()
+ new global.Run()
+ }
+
+ private def reporter = global.reporter.asInstanceOf[StoreReporter]
+
+ def checkReport(allowMessage: StoreReporter#Info => Boolean = _ => false): Unit = {
+ val disallowed = reporter.infos.toList.filter(!allowMessage(_)) // toList prevents an infer-non-wildcard-existential warning.
+ if (disallowed.nonEmpty) {
+ val msg = disallowed.mkString("\n")
+ assert(false, "The compiler issued non-allowed warnings or errors:\n" + msg)
+ }
+ }
+
+ def compileToBytes(scalaCode: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): List[(String, Array[Byte])] = {
+ val run = newRun
+ run.compileSources(makeSourceFile(scalaCode, "unitTestSource.scala") :: javaCode.map(p => makeSourceFile(p._1, p._2)))
+ checkReport(allowMessage)
+ getGeneratedClassfiles(global.settings.outputDirs.getSingleOutput.get)
+ }
+
+ def compileClasses(code: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): List[ClassNode] = {
+ readAsmClasses(compileToBytes(code, javaCode, allowMessage))
+ }
+
+ def compileClass(code: String, javaCode: List[(String, String)] = Nil, allowMessage: StoreReporter#Info => Boolean = _ => false): ClassNode = {
+ val List(c) = compileClasses(code, javaCode, allowMessage)
+ c
+ }
+
+ def compileToBytesTransformed(scalaCode: String, javaCode: List[(String, String)] = Nil, beforeBackend: global.Tree => global.Tree): List[(String, Array[Byte])] = {
+ import global._
+ settings.stopBefore.value = "jvm" :: Nil
+ val run = newRun
+ val scalaUnit = newCompilationUnit(scalaCode, "unitTestSource.scala")
+ val javaUnits = javaCode.map(p => newCompilationUnit(p._1, p._2))
+ val units = scalaUnit :: javaUnits
+ run.compileUnits(units, run.parserPhase)
+ settings.stopBefore.value = Nil
+ scalaUnit.body = beforeBackend(scalaUnit.body)
+ checkReport(_ => false)
+ val run1 = newRun
+ run1.compileUnits(units, run1.phaseNamed("jvm"))
+ checkReport(_ => false)
+ getGeneratedClassfiles(settings.outputDirs.getSingleOutput.get)
+ }
+
+ def compileClassesTransformed(scalaCode: String, javaCode: List[(String, String)] = Nil, beforeBackend: global.Tree => global.Tree): List[ClassNode] =
+ readAsmClasses(compileToBytesTransformed(scalaCode, javaCode, beforeBackend))
+
+ def compileAsmMethods(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): List[MethodNode] = {
+ val c = compileClass(s"class C { $code }", allowMessage = allowMessage)
+ getAsmMethods(c, _ != "<init>")
+ }
+
+ def compileAsmMethod(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): MethodNode = {
+ val List(m) = compileAsmMethods(code, allowMessage)
+ m
+ }
+
+ def compileMethods(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): List[Method] =
+ compileAsmMethods(code, allowMessage).map(convertMethod)
+
+ def compileMethod(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): Method = {
+ val List(m) = compileMethods(code, allowMessage = allowMessage)
+ m
+ }
+
+ def compileInstructions(code: String, allowMessage: StoreReporter#Info => Boolean = _ => false): List[Instruction] = {
+ val List(m) = compileMethods(code, allowMessage = allowMessage)
+ m.instructions
+ }
+}
+
+object BytecodeTesting {
+ def genMethod(flags: Int = Opcodes.ACC_PUBLIC,
+ name: String = "m",
+ descriptor: String = "()V",
+ genericSignature: String = null,
+ throwsExceptions: Array[String] = null,
+ handlers: List[ExceptionHandler] = Nil,
+ localVars: List[LocalVariable] = Nil)(body: Instruction*): MethodNode = {
+ val node = new MethodNode(flags, name, descriptor, genericSignature, throwsExceptions)
+ applyToMethod(node, Method(body.toList, handlers, localVars))
+ node
+ }
+
+ def wrapInClass(method: MethodNode): ClassNode = {
+ val cls = new ClassNode()
+ cls.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, "C", null, "java/lang/Object", null)
+ cls.methods.add(method)
+ cls
+ }
+
+ def newCompiler(defaultArgs: String = "-usejavacp", extraArgs: String = ""): Compiler = {
+ val compiler = newCompilerWithoutVirtualOutdir(defaultArgs, extraArgs)
+ compiler.resetOutput()
+ compiler
+ }
+
+ def newCompilerWithoutVirtualOutdir(defaultArgs: String = "-usejavacp", extraArgs: String = ""): Compiler = {
+ def showError(s: String) = throw new Exception(s)
+ val settings = new Settings(showError)
+ val args = (CommandLineParser tokenize defaultArgs) ++ (CommandLineParser tokenize extraArgs)
+ val (_, nonSettingsArgs) = settings.processArguments(args, processAll = true)
+ if (nonSettingsArgs.nonEmpty) showError("invalid compiler flags: " + nonSettingsArgs.mkString(" "))
+ new Compiler(new Global(settings, new StoreReporter))
+ }
+
+ def makeSourceFile(code: String, filename: String): BatchSourceFile = new BatchSourceFile(filename, code)
+
+ def getGeneratedClassfiles(outDir: AbstractFile): List[(String, Array[Byte])] = {
+ def files(dir: AbstractFile): List[(String, Array[Byte])] = {
+ val res = ListBuffer.empty[(String, Array[Byte])]
+ for (f <- dir.iterator) {
+ if (!f.isDirectory) res += ((f.name, f.toByteArray))
+ else if (f.name != "." && f.name != "..") res ++= files(f)
+ }
+ res.toList
+ }
+ files(outDir)
+ }
+
+ /**
+ * Compile multiple Scala files separately into a single output directory.
+ *
+ * Note that a new compiler instance is created for compiling each file because symbols survive
+ * across runs. This makes separate compilation slower.
+ *
+ * The output directory is a physical directory, I have not figured out if / how it's possible to
+ * add a VirtualDirectory to the classpath of a compiler.
+ */
+ def compileToBytesSeparately(codes: List[String], extraArgs: String = "", allowMessage: StoreReporter#Info => Boolean = _ => false, afterEach: AbstractFile => Unit = _ => ()): List[(String, Array[Byte])] = {
+ val outDir = AbstractFile.getDirectory(TempDir.createTempDir())
+ val outDirPath = outDir.canonicalPath
+ val argsWithOutDir = extraArgs + s" -d $outDirPath -cp $outDirPath"
+
+ for (code <- codes) {
+ val compiler = newCompilerWithoutVirtualOutdir(extraArgs = argsWithOutDir)
+ new compiler.global.Run().compileSources(List(makeSourceFile(code, "unitTestSource.scala")))
+ compiler.checkReport(allowMessage)
+ afterEach(outDir)
+ }
+
+ val classfiles = getGeneratedClassfiles(outDir)
+ outDir.delete()
+ classfiles
+ }
+
+ def compileClassesSeparately(codes: List[String], extraArgs: String = "", allowMessage: StoreReporter#Info => Boolean = _ => false, afterEach: AbstractFile => Unit = _ => ()): List[ClassNode] = {
+ readAsmClasses(compileToBytesSeparately(codes, extraArgs, allowMessage, afterEach))
+ }
+
+ def readAsmClasses(classfiles: List[(String, Array[Byte])]) = classfiles.map(p => AsmUtils.readClass(p._2)).sortBy(_.name)
+
+ def assertSameCode(method: Method, expected: List[Instruction]): Unit = assertSameCode(method.instructions.dropNonOp, expected)
+ def assertSameCode(actual: List[Instruction], expected: List[Instruction]): Unit = {
+ assert(actual === expected, s"\nExpected: $expected\nActual : $actual")
+ }
+
+ def assertSameSummary(method: Method, expected: List[Any]): Unit = assertSameSummary(method.instructions, expected)
+ def assertSameSummary(actual: List[Instruction], expected: List[Any]): Unit = {
+ def expectedString = expected.map({
+ case s: String => s""""$s""""
+ case i: Int => opcodeToString(i, i)
+ }).mkString("List(", ", ", ")")
+ assert(actual.summary == expected, s"\nFound : ${actual.summaryText}\nExpected: $expectedString")
+ }
+
+ def assertNoInvoke(m: Method): Unit = assertNoInvoke(m.instructions)
+ def assertNoInvoke(ins: List[Instruction]): Unit = {
+ assert(!ins.exists(_.isInstanceOf[Invoke]), ins.stringLines)
+ }
+
+ def assertInvoke(m: Method, receiver: String, method: String): Unit = assertInvoke(m.instructions, receiver, method)
+ def assertInvoke(l: List[Instruction], receiver: String, method: String): Unit = {
+ assert(l.exists {
+ case Invoke(_, `receiver`, `method`, _, _) => true
+ case _ => false
+ }, l.stringLines)
+ }
+
+ def assertDoesNotInvoke(m: Method, method: String): Unit = assertDoesNotInvoke(m.instructions, method)
+ def assertDoesNotInvoke(l: List[Instruction], method: String): Unit = {
+ assert(!l.exists {
+ case i: Invoke => i.name == method
+ case _ => false
+ }, l.stringLines)
+ }
+
+ def assertInvokedMethods(m: Method, expected: List[String]): Unit = assertInvokedMethods(m.instructions, expected)
+ def assertInvokedMethods(l: List[Instruction], expected: List[String]): Unit = {
+ def quote(l: List[String]) = l.map(s => s""""$s"""").mkString("List(", ", ", ")")
+ val actual = l collect { case i: Invoke => i.owner + "." + i.name }
+ assert(actual == expected, s"\nFound : ${quote(actual)}\nExpected: ${quote(expected)}")
+ }
+
+ def assertNoIndy(m: Method): Unit = assertNoIndy(m.instructions)
+ def assertNoIndy(l: List[Instruction]) = {
+ val indy = l collect { case i: InvokeDynamic => i }
+ assert(indy.isEmpty, indy)
+ }
+
+ def findClass(cs: List[ClassNode], name: String): ClassNode = {
+ val List(c) = cs.filter(_.name == name)
+ c
+ }
+
+ def getAsmMethods(c: ClassNode, p: String => Boolean): List[MethodNode] =
+ c.methods.iterator.asScala.filter(m => p(m.name)).toList.sortBy(_.name)
+
+ def getAsmMethods(c: ClassNode, name: String): List[MethodNode] =
+ getAsmMethods(c, _ == name)
+
+ def getAsmMethod(c: ClassNode, name: String): MethodNode = {
+ val methods = getAsmMethods(c, name)
+ def fail() = {
+ val allNames = getAsmMethods(c, _ => true).map(_.name)
+ throw new AssertionFailedError(s"Could not find method named $name among ${allNames}")
+ }
+ methods match {
+ case List(m) => m
+ case ms @ List(m1, m2) if BytecodeUtils.isInterface(c) =>
+ val (statics, nonStatics) = ms.partition(BytecodeUtils.isStaticMethod)
+ (statics, nonStatics) match {
+ case (List(staticMethod), List(_)) => m1 // prefer the static method of the pair if methods in traits
+ case _ => fail()
+ }
+ case ms => fail()
+ }
+ }
+
+ def getMethods(c: ClassNode, name: String): List[Method] =
+ getAsmMethods(c, name).map(convertMethod)
+
+ def getMethod(c: ClassNode, name: String): Method =
+ convertMethod(getAsmMethod(c, name))
+
+ def getInstructions(c: ClassNode, name: String): List[Instruction] =
+ getMethod(c, name).instructions
+
+ /**
+ * Instructions that match `query` when textified.
+ * If `query` starts with a `+`, the next instruction is returned.
+ */
+ def findInstrs(method: MethodNode, query: String): List[AbstractInsnNode] = {
+ val useNext = query(0) == '+'
+ val instrPart = if (useNext) query.drop(1) else query
+ val insns = method.instructions.iterator.asScala.filter(i => textify(i) contains instrPart).toList
+ if (useNext) insns.map(_.getNext) else insns
+ }
+
+ /**
+ * Instruction that matches `query` when textified.
+ * If `query` starts with a `+`, the next instruction is returned.
+ */
+ def findInstr(method: MethodNode, query: String): AbstractInsnNode = {
+ val List(i) = findInstrs(method, query)
+ i
+ }
+
+ def assertHandlerLabelPostions(h: ExceptionHandler, instructions: List[Instruction], startIndex: Int, endIndex: Int, handlerIndex: Int): Unit = {
+ val insVec = instructions.toVector
+ assertTrue(h.start == insVec(startIndex) && h.end == insVec(endIndex) && h.handler == insVec(handlerIndex))
+ }
+
+ import scala.language.implicitConversions
+
+ implicit def aliveInstruction(ins: Instruction): (Instruction, Boolean) = (ins, true)
+
+ implicit class MortalInstruction(val ins: Instruction) extends AnyVal {
+ def dead: (Instruction, Boolean) = (ins, false)
+ }
+
+ implicit class listStringLines[T](val l: List[T]) extends AnyVal {
+ def stringLines = l.mkString("\n")
+ }
+}
diff --git a/test/junit/scala/tools/testing/ClearAfterClass.java b/test/junit/scala/tools/testing/ClearAfterClass.java
index 232d459c4e..7f87f9a4d7 100644
--- a/test/junit/scala/tools/testing/ClearAfterClass.java
+++ b/test/junit/scala/tools/testing/ClearAfterClass.java
@@ -1,20 +1,54 @@
package scala.tools.testing;
-import org.junit.AfterClass;
+import org.junit.ClassRule;
+import org.junit.rules.TestRule;
+import org.junit.runners.model.Statement;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/**
- * Extend this class to use JUnit's @AfterClass. This annotation only works on static methods,
+ * Extend this class to use JUnit's @ClassRule. This annotation only works on static methods,
* which cannot be written in Scala.
*
* Example: {@link scala.tools.nsc.backend.jvm.opt.InlinerTest}
*/
public class ClearAfterClass {
- public static interface Clearable {
- void clear();
+ private static Map<Class<?>, Map<String, Object>> cache = new ConcurrentHashMap<>();
+
+ @ClassRule
+ public static TestRule clearClassCache() {
+ return (statement, desc) -> new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ ConcurrentHashMap<String, Object> perClassCache = new ConcurrentHashMap<>();
+ cache.put(desc.getTestClass(), perClassCache);
+ try {
+ statement.evaluate();
+ } finally {
+ perClassCache.values().forEach(ClearAfterClass::closeIfClosable);
+ cache.remove(desc.getTestClass());
+ }
+ }
+ };
}
- public static Clearable stateToClear;
+ private static void closeIfClosable(Object o) {
+ if (o instanceof Closeable) {
+ try {
+ ((Closeable) o).close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> T cached(String key, scala.Function0<T> t) {
+ Map<String, Object> perClassCache = cache.get(getClass());
+ return (T) perClassCache.computeIfAbsent(key, s -> t.apply());
+ }
- @AfterClass
- public static void clearState() { stateToClear.clear(); }
}
diff --git a/test/junit/scala/tools/testing/RunTesting.scala b/test/junit/scala/tools/testing/RunTesting.scala
new file mode 100644
index 0000000000..1320db4230
--- /dev/null
+++ b/test/junit/scala/tools/testing/RunTesting.scala
@@ -0,0 +1,17 @@
+package scala.tools.testing
+
+import scala.reflect.runtime._
+import scala.tools.reflect.ToolBox
+
+trait RunTesting extends ClearAfterClass {
+ def compilerArgs = "" // to be overridden
+ val runner = cached("toolbox", () => Runner.make(compilerArgs))
+}
+
+class Runner(val toolBox: ToolBox[universe.type]) {
+ def run[T](code: String): T = toolBox.eval(toolBox.parse(code)).asInstanceOf[T]
+}
+
+object Runner {
+ def make(compilerArgs: String) = new Runner(universe.runtimeMirror(getClass.getClassLoader).mkToolBox(options = compilerArgs))
+}
diff --git a/test/junit/scala/util/SystemPropertiesTest.scala b/test/junit/scala/util/SystemPropertiesTest.scala
new file mode 100644
index 0000000000..38e830eb88
--- /dev/null
+++ b/test/junit/scala/util/SystemPropertiesTest.scala
@@ -0,0 +1,27 @@
+package scala.util
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+import org.junit.Assert._
+
+@RunWith(classOf[JUnit4])
+class SystemPropertiesTest {
+ @Test
+ def filterAll(): Unit = {
+ val isEmpty = sys.props.filter(_ => false).size == 0
+ assertTrue("A filter matching nothing should produce an empty result", isEmpty)
+ }
+
+ @Test
+ def filterNone(): Unit = {
+ val isUnchanged = sys.props.filter(_ => true) == sys.props
+ assertTrue("A filter matching everything should not change the result", isUnchanged)
+ }
+
+ @Test
+ def empty(): Unit = {
+ val hasSize0 = sys.props.empty.size == 0
+ assertTrue("SystemProperties.empty should have size of 0", hasSize0)
+ }
+}
diff --git a/test/junit/scala/util/control/ExceptionTest.scala b/test/junit/scala/util/control/ExceptionTest.scala
new file mode 100644
index 0000000000..5211d31839
--- /dev/null
+++ b/test/junit/scala/util/control/ExceptionTest.scala
@@ -0,0 +1,42 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2016-2016, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+package scala.util
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+import org.junit.Assert._
+
+import scala.collection.mutable.ListBuffer
+
+import scala.util.control.Exception._
+
+@RunWith(classOf[JUnit4])
+class ExceptionTest {
+
+ @Test
+ def andFinally(): Unit = {
+
+ locally {
+ val audit = ListBuffer[Int]()
+ val katch = nonFatalCatch[Unit].andFinally(audit append 1)
+ val result = katch(10)
+ assertEquals(result, 10)
+ assertEquals(audit.toList, 1 :: Nil)
+ }
+
+ locally {
+ val audit = ListBuffer[Int]()
+ val katch = nonFatalCatch[Unit].andFinally(audit append 1).andFinally(audit append 2)
+ val result = katch(20)
+ assertEquals(result, 20)
+ assertEquals(audit.toList, 1 :: 2 :: Nil)
+ }
+ }
+} \ No newline at end of file
diff --git a/test/junit/scala/util/matching/RegexTest.scala b/test/junit/scala/util/matching/RegexTest.scala
index 5b13397d6a..d80e05e512 100644
--- a/test/junit/scala/util/matching/RegexTest.scala
+++ b/test/junit/scala/util/matching/RegexTest.scala
@@ -6,6 +6,8 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import scala.tools.testing.AssertUtil._
+
@RunWith(classOf[JUnit4])
class RegexTest {
@Test def t8022CharSequence(): Unit = {
@@ -44,4 +46,134 @@ class RegexTest {
}
assertEquals(List((1,2),(3,4),(5,6)), z)
}
+
+ @Test def `SI-9666: use inline group names`(): Unit = {
+ val r = new Regex("a(?<Bee>b*)c")
+ val ms = r findAllIn "stuff abbbc more abc and so on"
+ assertTrue(ms.hasNext)
+ assertEquals("abbbc", ms.next())
+ assertEquals("bbb", ms group "Bee")
+ assertTrue(ms.hasNext)
+ assertEquals("abc", ms.next())
+ assertEquals("b", ms group "Bee")
+ assertFalse(ms.hasNext)
+ }
+
+ @Test def `SI-9666: use explicit group names`(): Unit = {
+ val r = new Regex("a(b*)c", "Bee")
+ val ms = r findAllIn "stuff abbbc more abc and so on"
+ assertTrue(ms.hasNext)
+ assertEquals("abbbc", ms.next())
+ assertEquals("bbb", ms group "Bee")
+ assertTrue(ms.hasNext)
+ assertEquals("abc", ms.next())
+ assertEquals("b", ms group "Bee")
+ assertFalse(ms.hasNext)
+ }
+
+ @Test def `SI-9666: fall back to explicit group names`(): Unit = {
+ val r = new Regex("a(?<Bar>b*)c", "Bee")
+ val ms = r findAllIn "stuff abbbc more abc and so on"
+ assertTrue(ms.hasNext)
+ assertEquals("abbbc", ms.next())
+ assertEquals("bbb", ms group "Bee")
+ assertEquals("bbb", ms group "Bar")
+ assertTrue(ms.hasNext)
+ assertEquals("abc", ms.next())
+ assertEquals("b", ms group "Bee")
+ assertEquals("b", ms group "Bar")
+ assertFalse(ms.hasNext)
+ }
+
+ type NoGroup = IllegalArgumentException
+ type NoMatch = NoSuchElementException
+ type NoData = IllegalStateException
+
+ @Test def `SI-9666: throw on bad name`(): Unit = {
+ assertThrows[NoGroup] {
+ val r = new Regex("a(?<Bar>b*)c")
+ val ms = r findAllIn "stuff abbbc more abc and so on"
+ assertTrue(ms.hasNext)
+ ms group "Bee"
+ }
+ assertThrows[NoGroup] {
+ val r = new Regex("a(?<Bar>b*)c", "Bar")
+ val ms = r findAllIn "stuff abbbc more abc and so on"
+ assertTrue(ms.hasNext)
+ ms group "Bee"
+ }
+ assertThrows[NoGroup] {
+ val r = new Regex("a(b*)c", "Bar")
+ val ms = r findAllIn "stuff abbbc more abc and so on"
+ assertTrue(ms.hasNext)
+ ms group "Bee"
+ }
+ }
+
+ @Test def `SI-9827 MatchIterator ergonomics`(): Unit = {
+ val r = "(ab)(cd)".r
+ val s = "xxxabcdyyyabcdzzz"
+ assertEquals(3, r.findAllIn(s).start)
+ assertEquals(5, r.findAllIn(s).start(2))
+ locally {
+ val mi = r.findAllIn(s)
+ assertTrue(mi.hasNext)
+ assertEquals(3, mi.start)
+ assertEquals("abcd", mi.next())
+ assertEquals(3, mi.start)
+ assertTrue(mi.hasNext)
+ assertEquals(10, mi.start)
+ }
+ locally {
+ val mi = r.findAllIn(s)
+ assertEquals("abcd", mi.next())
+ assertEquals(3, mi.start)
+ assertEquals("abcd", mi.next())
+ assertEquals(10, mi.start)
+ assertThrows[NoMatch] { mi.next() }
+ assertThrows[NoData] { mi.start }
+ }
+ locally {
+ val mi = r.findAllIn("")
+ assertThrows[NoData] { mi.start }
+ assertThrows[NoMatch] { mi.next() }
+ }
+ locally {
+ val mi = r.findAllMatchIn(s)
+ val x = mi.next()
+ assertEquals("abcd", x.matched)
+ assertEquals(3, x.start)
+ val y = mi.next()
+ assertEquals("abcd", y.matched)
+ assertEquals(10, y.start)
+ assertThrows[NoMatch] { mi.next() }
+ assertEquals(3, x.start)
+ assertEquals(10, y.start)
+ }
+ locally {
+ val regex = "(foo)-(.*)".r
+ val s = "foo-abc-def"
+ val result = regex.findAllIn(s)
+ //result.toString // comment this line to make it not work
+ val r = (result.group(1), result.group(2))
+ assertEquals(("foo", "abc-def"), r)
+ }
+ locally {
+ val t = "this is a test"
+ val rx = " ".r
+ val m = rx.findAllIn(t)
+ assertEquals(5, rx.findAllIn(t).end)
+ }
+ locally {
+ val data = "<a>aaaaa</a><b>bbbbbb</b><c>ccccccc</c>"
+ val p = "^<a>(.+)</a><b>(.+)</b><c>(.+)</c>$".r
+ val parts = p.findAllIn(data)
+ val aes = parts.group(1)
+ val bes = parts.group(2)
+ val ces = parts.group(3)
+ assertEquals("ccccccc", ces)
+ assertEquals("bbbbbb", bes)
+ assertEquals("aaaaa", aes)
+ }
+ }
}
diff --git a/test/long-running/jvm/memleak2_actor.scala b/test/long-running/jvm/memleak2_actor.scala
deleted file mode 100644
index 1673b12dac..0000000000
--- a/test/long-running/jvm/memleak2_actor.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-import scala.actors._
-import Actor._
-
-case object Start
-case object EndMe
-
-class A extends Actor {
- def act = loop {
- react {
- case Start =>
- case EndMe =>
- exit()
- }
- }
-}
-
-object Test {
-
- def z(in: Long) = if (in / 1024L == 0L) in
- else if (in / (1024L * 1024L) == 0L) (in / 1024L).toString + "K"
- else (in / (1024L * 1024L)).toString + "M"
-
- def main(args: Array[String]) {
- val rt = Runtime.getRuntime()
- for (o <- 1 to 300000) {
- println("Outer [2AN] "+o)
- var a: List[A] = Nil
- for (i <- 1 to 10000) {
- var t = new A
- a = t :: a
- t.start
- t ! Start
- }
- for (act <- a) act ! EndMe
- //rt.gc()
- println("Free "+z(rt.freeMemory())+" total "+z(rt.totalMemory()))
- }
- }
-}
diff --git a/test/partest b/test/partest
index cb07c00e04..d74176aa8a 100755
--- a/test/partest
+++ b/test/partest
@@ -28,7 +28,7 @@ findScalaHome () {
# that runs this script. I don't know why. it may have to do with
# which bash flags are set (-e? -x?) and with bash flags propagating
# from one script to another? not sure. anyway, normally in a CI
-# context we run partest through ant, not through this script, so I'm
+# context we run partest through sbt, not through this script, so I'm
# not investigating further for now.)
term_colors=$(tput colors 2>/dev/null)
if [[ $? == 0 ]] && [[ $term_colors -gt 2 ]]; then
@@ -54,14 +54,14 @@ if $cygwin; then
SCALA_HOME=`cygpath --unix "$SCALA_HOME"`
fi
-# Let ant construct the classpath used to run partest (downloading partest from maven if necessary)
+# Let sbt construct the classpath used to run partest (downloading partest from maven if necessary)
# PARTEST_CLASSPATH=""
if [ -z "$PARTEST_CLASSPATH" ] ; then
- if [ ! -f "$SCALA_HOME/build/pack/partest.properties" ] ; then
- (cd "$SCALA_HOME" && ant -q test.suite.init) # builds pack, downloads partest and writes classpath to build/pack/partest.properties
+ if [ ! -f "$SCALA_HOME/build/quick/partest.properties" ] ; then
+ (cd "$SCALA_HOME" && sbt dist/mkQuick) # builds quick, downloads partest and writes classpath to build/quick/partest.properties
fi
- PARTEST_CLASSPATH=$( cat "$SCALA_HOME/build/pack/partest.properties" | grep partest.classpath | sed -e 's/\\:/:/g' | cut -f2- -d= )
+ PARTEST_CLASSPATH=$( cat "$SCALA_HOME/build/quick/partest.properties" | grep partest.classpath | sed -e 's/\\:/:/g' | cut -f2- -d= )
# sanity check, disabled to save time
# $( javap -classpath $PARTEST_CLASSPATH scala.tools.partest.nest.NestRunner &> /dev/null ) || unset PARTEST_CLASSPATH
@@ -124,10 +124,9 @@ fi
# last arg wins, so if JAVA_OPTS already contains -Xmx or -Xms the
# supplied argument will be used.
-# At this writing it is reported test/partest --all requires 108m permgen.
-JAVA_OPTS="-Xmx1024M -Xms64M -XX:MaxPermSize=128M $JAVA_OPTS"
+JAVA_OPTS="-Xmx1024M -Xms64M $JAVA_OPTS"
-# the ant task doesn't supply any options by default,
+# the sbt task doesn't supply any options by default,
# so don't do that here either -- note that you may want to pass -optimise
# to mimic what happens during nightlies.
# [ -n "$SCALAC_OPTS" ] || SCALAC_OPTS="-deprecation"
diff --git a/test/pending/jvm/actor-executor4.check b/test/pending/jvm/actor-executor4.check
deleted file mode 100644
index da78f45836..0000000000
--- a/test/pending/jvm/actor-executor4.check
+++ /dev/null
@@ -1,21 +0,0 @@
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-Two: OK
-One: OK
-One exited
diff --git a/test/pending/jvm/actor-executor4.scala b/test/pending/jvm/actor-executor4.scala
deleted file mode 100644
index a912d76094..0000000000
--- a/test/pending/jvm/actor-executor4.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-import scala.actors.{Actor, Exit}
-import scala.actors.scheduler.ExecutorScheduler
-import java.util.concurrent.Executors
-
-object One extends AdaptedActor {
- def act() {
- Two.start()
- var i = 0
- loopWhile (i < Test.NUM_MSG) {
- i += 1
- Two ! 'MsgForTwo
- react {
- case 'MsgForOne =>
- if (i % (Test.NUM_MSG/10) == 0)
- println("One: OK")
- }
- }
- }
-}
-
-object Two extends AdaptedActor {
- def act() {
- var i = 0
- loopWhile (i < Test.NUM_MSG) {
- i += 1
- react {
- case 'MsgForTwo =>
- if (i % (Test.NUM_MSG/10) == 0)
- println("Two: OK")
- One ! 'MsgForOne
- }
- }
- }
-}
-
-trait AdaptedActor extends Actor {
- override def scheduler =
- Test.scheduler
-}
-
-object Test {
- val NUM_MSG = 100000
-
- val scheduler =
- ExecutorScheduler(
- Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()),
- false)
-
- def main(args: Array[String]) {
- (new AdaptedActor {
- def act() {
- trapExit = true
- link(One)
- One.start()
-
- receive {
- case Exit(from, reason) =>
- println("One exited")
- Test.scheduler.shutdown()
- }
- }
- }).start()
- }
-}
diff --git a/test/pending/jvm/actor-receive-sender.check b/test/pending/jvm/actor-receive-sender.check
deleted file mode 100644
index 2c94e48371..0000000000
--- a/test/pending/jvm/actor-receive-sender.check
+++ /dev/null
@@ -1,2 +0,0 @@
-OK
-OK
diff --git a/test/pending/jvm/actor-receive-sender.scala b/test/pending/jvm/actor-receive-sender.scala
deleted file mode 100644
index ea7c40cced..0000000000
--- a/test/pending/jvm/actor-receive-sender.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-import scala.actors.{Actor, TIMEOUT, Exit}
-import scala.actors.Actor._
-
-object Test {
-
- val NUM = 2000
-
- def main(args: Array[String]) {
- var b: Actor = null
- var c: Actor = null
-
- val a = actor {
- for (_ <- 0 until NUM)
- receive {
- case 'hello if sender == b => // do nothing
- }
- b ! 'ok
- for (_ <- 0 until NUM)
- receiveWithin (1000) {
- case 'bye if sender == b => // do nothing
- case TIMEOUT => b ! 'fail
- }
- b ! 'ok
- }
-
- b = actor {
- self.trapExit = true
- link(a)
-
- for (_ <- 0 until NUM)
- a ! 'hello
-
- val proceed = receive {
- case Exit(from, reason) => println("FAIL"); false
- case 'ok => println("OK"); true
- case other => println(other); false
- }
-
- if (proceed) {
- for (_ <- 0 until NUM)
- a ! 'bye
- receive {
- case Exit(from, reason) => println("FAIL")
- case 'ok => println("OK")
- case other => println(other)
- }
- }
- }
- }
-
-}
diff --git a/test/pending/jvm/actorgc_leak.check b/test/pending/jvm/actorgc_leak.check
deleted file mode 100644
index a965a70ed4..0000000000
--- a/test/pending/jvm/actorgc_leak.check
+++ /dev/null
@@ -1 +0,0 @@
-Done
diff --git a/test/pending/jvm/actorgc_leak.scala b/test/pending/jvm/actorgc_leak.scala
deleted file mode 100644
index de3e04f1e8..0000000000
--- a/test/pending/jvm/actorgc_leak.scala
+++ /dev/null
@@ -1,63 +0,0 @@
-
-import scala.actors.Actor
-
-object Test {
- class FatActorFactory extends Actor {
- def act() {
- var cnt = 0
- Actor.loopWhile(cnt < fatActors) {
- //if ((cnt % 5) == 0) println(cnt)
- val fa = new FatActor()
- fa.start()
- cnt += 1
- if (cnt == fatActors) Monitor ! 'done
- }
- }
- }
-
- class FatActor extends Actor {
- def act() {
- fat = new Array[Int](fatness)
- react {
- case 'hi => exit()
- }
- }
- private var fat: Array[Int] = _
- }
-
- object Monitor extends Actor {
- private var cnt = 0
- def act() {
- Actor.loop {
- react {
- case 'done => {
- cnt += 1
- if (cnt == factories) System.exit(0) // once GC pressure stops FatActors stop being collected, and as
- } // a result ActorGC never finds out that they are defunct
- }
- }
- }
- }
-
- val factories = 4 // the number of factories to start
- val fatActors = 50 // the number of FatActors for each factory to produce
- val fatness = 1024*1024*10
-
- def main(args: Array[String]) {
- scala.actors.Scheduler.impl.shutdown()
- val sched = {
- val s = new scala.actors.FJTaskScheduler2
- s.start()
- s
- }
- scala.actors.Scheduler.impl = sched
-
- Monitor.start()
- for(i <- 1 to factories) {
- //if ((i % 50) == 0) println(i)
- val fa = new FatActorFactory()
- fa.start()
- }
- println("Done")
- }
-}
diff --git a/test/pending/jvm/constant-optimization/Foo_1.flags b/test/pending/jvm/constant-optimization/Foo_1.flags
new file mode 100644
index 0000000000..432f01c02d
--- /dev/null
+++ b/test/pending/jvm/constant-optimization/Foo_1.flags
@@ -0,0 +1 @@
+// constant otimization not there yet, -opt:nullness-tracking not enough.
diff --git a/test/files/jvm/constant-optimization/Foo_1.scala b/test/pending/jvm/constant-optimization/Foo_1.scala
index cb67ad4e90..6f408044d7 100644
--- a/test/files/jvm/constant-optimization/Foo_1.scala
+++ b/test/pending/jvm/constant-optimization/Foo_1.scala
@@ -1,6 +1,6 @@
class Foo_1 {
def foo() {
- // constant optimization should eliminate all branches
+ // constant optimization should eliminate all branches
val i = 1
val x = if (i != 1) null else "good"
val y = if (x == null) "good" else x + ""
diff --git a/test/files/jvm/constant-optimization/Test.scala b/test/pending/jvm/constant-optimization/Test.scala
index dc0f8f6103..dc0f8f6103 100644
--- a/test/files/jvm/constant-optimization/Test.scala
+++ b/test/pending/jvm/constant-optimization/Test.scala
diff --git a/test/pending/jvm/reactWithinZero.check b/test/pending/jvm/reactWithinZero.check
deleted file mode 100644
index cf2a2facf9..0000000000
--- a/test/pending/jvm/reactWithinZero.check
+++ /dev/null
@@ -1,2 +0,0 @@
-TIMEOUT
-'ack
diff --git a/test/pending/jvm/reactWithinZero.scala b/test/pending/jvm/reactWithinZero.scala
deleted file mode 100644
index 0786ce271d..0000000000
--- a/test/pending/jvm/reactWithinZero.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-import scala.actors.{Actor, TIMEOUT}
-
-class A extends Actor {
- def act() = reactWithin(0) {
- case TIMEOUT =>
- println("TIMEOUT")
- reply('ack)
- act()
- case x => println(x)
- }
-}
-
-object Test {
- def main(args: Array[String]): Unit = {
- val a = new A
- a.start()
- }
-}
diff --git a/test/pending/jvm/receiveWithinZero.check b/test/pending/jvm/receiveWithinZero.check
deleted file mode 100644
index cf2a2facf9..0000000000
--- a/test/pending/jvm/receiveWithinZero.check
+++ /dev/null
@@ -1,2 +0,0 @@
-TIMEOUT
-'ack
diff --git a/test/pending/jvm/receiveWithinZero.scala b/test/pending/jvm/receiveWithinZero.scala
deleted file mode 100644
index 315dd9c86a..0000000000
--- a/test/pending/jvm/receiveWithinZero.scala
+++ /dev/null
@@ -1,18 +0,0 @@
-import scala.actors.{Actor, TIMEOUT}
-
-class A extends Actor {
- def act() = receiveWithin(0) {
- case TIMEOUT =>
- println("TIMEOUT")
- reply('ack)
- act()
- case x => println(x)
- }
-}
-
-object Test {
- def main(args: Array[String]): Unit = {
- val a = new A
- a.start()
- }
-}
diff --git a/test/pending/jvm/t1801.check b/test/pending/jvm/t1801.check
deleted file mode 100644
index bf78a99db9..0000000000
--- a/test/pending/jvm/t1801.check
+++ /dev/null
@@ -1,6 +0,0 @@
-0
-100
-200
-300
-400
-done!
diff --git a/test/pending/jvm/t1801.scala b/test/pending/jvm/t1801.scala
deleted file mode 100644
index 6ed7c56336..0000000000
--- a/test/pending/jvm/t1801.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-import scala.actors.Actor._
-
-object Test {
- val rt = Runtime.getRuntime()
- val sender = actor {
- var cnt = 0
- while(cnt < 500) {
- if ((cnt % 100) == 0) println(cnt)
- receiver ! new Array[Int] (148576)
- cnt += 1
- //println ("Used Mem: " + (((rt.totalMemory() - rt.freeMemory()) / 1048576.) formatted "%.2f") + " Mb")
- }
- receiver ! 'exit
- }
-
- val receiver = actor {
- loop {
- react {
- case x: Array[Int] => ()//println ("received " + x.length)
- case 'exit => {
- println("done!")
- exit()
- }
- }
- }
- }
-
- def main (args: Array[String]) {
- sender
- }
-}
diff --git a/test/pending/jvm/t2515.check b/test/pending/jvm/t2515.check
deleted file mode 100644
index 8cb8bde11e..0000000000
--- a/test/pending/jvm/t2515.check
+++ /dev/null
@@ -1,10 +0,0 @@
-Iteration 1 succeeded
-Iteration 2 succeeded
-Iteration 3 succeeded
-Iteration 4 succeeded
-Iteration 5 succeeded
-Iteration 6 succeeded
-Iteration 7 succeeded
-Iteration 8 succeeded
-Iteration 9 succeeded
-Iteration 10 succeeded
diff --git a/test/pending/jvm/t2515.scala b/test/pending/jvm/t2515.scala
deleted file mode 100644
index ee655967f3..0000000000
--- a/test/pending/jvm/t2515.scala
+++ /dev/null
@@ -1,43 +0,0 @@
-import scala.actors.{Futures, TIMEOUT}
-import scala.actors.Actor._
-
-object Test {
-
- def compute(): Option[Boolean] = {
- val fts = for (j <- 0 until 5) yield Futures.future {
- receiveWithin (100) {
- case TIMEOUT => true
- case other => false
- }
- }
- val done = Futures.awaitAll(2000, fts.toArray: _*) // list to array, as varargs
- if (done.contains(None))
- None
- else
- Some(true)
- }
-
- def main(args:Array[String]) : Unit = {
- val ft = Futures.future {
- val format = new java.text.DecimalFormat("000.00'ms'")
- var iter = 1
- val done = 11
- while (iter < done) {
- val start = System.nanoTime()
- val result = compute()
- val time = System.nanoTime() - start
- result match {
- case Some(result) =>
- //printf("Iteration %2d succeeded after %s %n", iter, format.format(time / 1e6))
- printf("Iteration %2d succeeded%n", iter)
- iter += 1
- case None =>
- printf(">>>> Iteration %2d failed after %s <<<<< %n", iter, format.format(time / 1e6))
- iter = done
- }
- }
- }
- ft()
- }
-
-}
diff --git a/test/pending/jvm/terminateLinked.check b/test/pending/jvm/terminateLinked.check
deleted file mode 100644
index a965a70ed4..0000000000
--- a/test/pending/jvm/terminateLinked.check
+++ /dev/null
@@ -1 +0,0 @@
-Done
diff --git a/test/pending/jvm/terminateLinked.scala b/test/pending/jvm/terminateLinked.scala
deleted file mode 100644
index 2a3b7fb49e..0000000000
--- a/test/pending/jvm/terminateLinked.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-import scala.actors.Actor
-import Actor._
-
-object Test {
- def main(args: Array[String]) {
- val a = actor {
- for (_ <- 1 to 10)
- receive {
- case b: Actor => link(b)
- }
- throw new Exception
- }
-
- for (_ <- 1 to 10)
- actor {
- a ! self
- react {
- case _ =>
- }
- }
-
- println("Done")
- }
-}
diff --git a/test/pending/jvm/timeout.check b/test/pending/jvm/timeout.check
deleted file mode 100644
index d86bac9de5..0000000000
--- a/test/pending/jvm/timeout.check
+++ /dev/null
@@ -1 +0,0 @@
-OK
diff --git a/test/pending/jvm/timeout.scala b/test/pending/jvm/timeout.scala
deleted file mode 100644
index 8f29f8ddbe..0000000000
--- a/test/pending/jvm/timeout.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-// Test is in pending because although it succeeds locally,
-// it takes too long on the machine which runs nightly tests.
-//
-// [partest] EXPECTED: 100 < x < 900
-// [partest] ACTUAL: 1519
-
-import scala.actors.Actor._
-import scala.actors.TIMEOUT
-
-object Test extends Application {
- case class Timing(time: Long)
-
- actor {
- val a = actor {
- react {
- case 'doTiming =>
- val s = sender
- reactWithin(500) {
- case TIMEOUT =>
- s ! Timing(System.currentTimeMillis)
- }
- }
- }
-
- val start = System.currentTimeMillis
- (a !? 'doTiming) match {
- case Timing(end) =>
- val delay = end - start
-
- if (delay > 100 && delay < 900)
- println("OK")
- else {
- println("EXPECTED: 100 < x < 900")
- println("ACTUAL: "+delay)
- }
- }
- }
-}
diff --git a/test/files/neg/t6375.check b/test/pending/neg/t6375.check
index 89d7d8060f..89d7d8060f 100644
--- a/test/files/neg/t6375.check
+++ b/test/pending/neg/t6375.check
diff --git a/test/pending/neg/t6375.flags b/test/pending/neg/t6375.flags
new file mode 100644
index 0000000000..85d8eb2ba2
--- /dev/null
+++ b/test/pending/neg/t6375.flags
@@ -0,0 +1 @@
+-Xfatal-warnings
diff --git a/test/files/neg/t6375.scala b/test/pending/neg/t6375.scala
index 21634df688..21634df688 100644
--- a/test/files/neg/t6375.scala
+++ b/test/pending/neg/t6375.scala
diff --git a/test/pending/neg/t8079d.check b/test/pending/neg/t8079d.check
new file mode 100644
index 0000000000..f63f4902f8
--- /dev/null
+++ b/test/pending/neg/t8079d.check
@@ -0,0 +1,4 @@
+t8079d.scala:3: error: contravariant type I occurs in covariant position in type C.this.X of value b
+ def f2(b: X): Unit
+ ^
+one error found
diff --git a/test/pending/neg/t8079d.scala b/test/pending/neg/t8079d.scala
new file mode 100644
index 0000000000..ad420b99e3
--- /dev/null
+++ b/test/pending/neg/t8079d.scala
@@ -0,0 +1,4 @@
+trait C[-I] {
+ protected[this] type X = C[I]
+ def f2(b: X): Unit
+}
diff --git a/test/pending/pos/t8079c.scala b/test/pending/pos/t8079c.scala
new file mode 100644
index 0000000000..ae7f37e2bf
--- /dev/null
+++ b/test/pending/pos/t8079c.scala
@@ -0,0 +1,7 @@
+trait F1[/* - */T, /* + */ R]
+
+object Test {
+ import scala.annotation.unchecked._
+ private[this] type VariantF1[-T, +R] = F1[T @uncheckedVariance, R @uncheckedVariance]
+ trait C[+T] { def foo: VariantF1[Any, T] }
+}
diff --git a/test/files/run/inline-ex-handlers.check b/test/pending/run/inline-ex-handlers.check
index 7c885d2cc9..fce32771b4 100644
--- a/test/files/run/inline-ex-handlers.check
+++ b/test/pending/run/inline-ex-handlers.check
@@ -7,7 +7,7 @@
startBlock: 1
- blocks: [1,2,3,4]
+ blocks: [1,3,4]
-
+
@@ -186,2 +186,4 @@
92 LOAD_LOCAL(value x$1)
+ 92 STORE_LOCAL(variable boxed1)
@@ -16,50 +16,50 @@
@@ -194,5 +196,2 @@
92 CALL_METHOD MyException.message (dynamic)
- 92 JUMP 2
--
-- 2:
+-
+- 2:
92 RETURN(REF(class Object))
@@ -246,3 +245,3 @@
startBlock: 1
- blocks: [1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18]
+ blocks: [1,2,3,4,5,6,8,11,12,13,14,15,16,17,18]
-
+
@@ -257,5 +256,2 @@
92 SCOPE_ENTER value x1
- 92 JUMP 7
--
-- 7:
+-
+- 7:
92 LOAD_LOCAL(value x1)
-@@ -390,5 +386,5 @@
+@@ -408,5 +404,5 @@
def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, variable result, value ex6, value x4, value x5, value message, value x
+ locals: value args, variable result, value ex6, value x4, value x5, value x
startBlock: 1
- blocks: [1,2,3,4,5,8,10,11,13]
+ blocks: [1,2,3,5,8,10,11,13,14]
-
-@@ -416,4 +412,13 @@
+
+@@ -434,4 +430,13 @@
103 CALL_METHOD MyException.<init> (static-instance)
- 103 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 14
-
-+ 14:
+
++ 14:
+ 101 LOAD_LOCAL(value ex6)
+ 101 STORE_LOCAL(value x4)
+ 101 SCOPE_ENTER value x4
+ 106 LOAD_LOCAL(value x4)
+ 106 IS_INSTANCE REF(class MyException)
+ 106 CZJUMP (BOOL)NE ? 5 : 8
-+
- 13:
-@@ -429,5 +434,2 @@
++
+ 13:
+@@ -447,5 +452,2 @@
101 SCOPE_ENTER value x4
- 101 JUMP 4
--
-- 4:
+-
+- 4:
106 LOAD_LOCAL(value x4)
-@@ -441,8 +443,5 @@
+@@ -459,8 +461,5 @@
106 SCOPE_ENTER value x5
- 106 LOAD_LOCAL(value x5)
- 106 CALL_METHOD MyException.message (dynamic)
@@ -70,47 +70,47 @@
+ ? LOAD_LOCAL(value x5)
+ 106 CALL_METHOD MyException.message (dynamic)
106 CALL_METHOD scala.Predef.println (dynamic)
-@@ -518,3 +517,3 @@
+@@ -536,3 +535,3 @@
startBlock: 1
- blocks: [1,2,3,4,6,7,9,10]
+ blocks: [1,3,4,6,7,9,10,11,12,13]
-
-@@ -547,4 +546,9 @@
+
+@@ -565,4 +564,9 @@
306 CALL_METHOD MyException.<init> (static-instance)
- 306 THROW(MyException)
+ ? JUMP 11
-
-+ 11:
+
++ 11:
+ ? LOAD_LOCAL(variable monitor4)
+ 305 MONITOR_EXIT
+ ? JUMP 12
-+
- 9:
-@@ -553,3 +557,3 @@
++
+ 9:
+@@ -571,3 +575,3 @@
305 MONITOR_EXIT
- ? THROW(Throwable)
+ ? JUMP 12
-
-@@ -559,4 +563,11 @@
+
+@@ -577,4 +581,11 @@
304 MONITOR_EXIT
- ? THROW(Throwable)
+ ? STORE_LOCAL(value t)
+ ? JUMP 13
-
-+ 12:
+
++ 12:
+ ? LOAD_LOCAL(variable monitor3)
+ 304 MONITOR_EXIT
+ ? STORE_LOCAL(value t)
+ ? JUMP 13
-+
- 3:
-@@ -573,5 +584,14 @@
++
+ 3:
+@@ -591,5 +602,14 @@
310 CALL_METHOD scala.Predef.println (dynamic)
- 310 JUMP 2
+ 300 RETURN(UNIT)
-
-- 2:
-+ 13:
+
+- 2:
++ 13:
+ 310 LOAD_MODULE object Predef
+ 310 CALL_PRIMITIVE(StartConcat)
+ 310 CONSTANT("Caught crash: ")
@@ -121,41 +121,41 @@
+ 310 CALL_PRIMITIVE(EndConcat)
+ 310 CALL_METHOD scala.Predef.println (dynamic)
300 RETURN(UNIT)
-@@ -583,6 +603,6 @@
+@@ -601,6 +621,6 @@
with finalizer: null
-- catch (Throwable) in ArrayBuffer(7, 9, 10) starting at: 6
-+ catch (Throwable) in ArrayBuffer(7, 9, 10, 11) starting at: 6
+- catch (Throwable) in Vector(7, 9, 10) starting at: 6
++ catch (Throwable) in Vector(7, 9, 10, 11) starting at: 6
consisting of blocks: List(6)
with finalizer: null
-- catch (Throwable) in ArrayBuffer(4, 6, 7, 9, 10) starting at: 3
-+ catch (Throwable) in ArrayBuffer(4, 6, 7, 9, 10, 11, 12) starting at: 3
+- catch (Throwable) in Vector(4, 6, 7, 9, 10) starting at: 3
++ catch (Throwable) in Vector(4, 6, 7, 9, 10, 11, 12) starting at: 3
consisting of blocks: List(3)
-@@ -618,3 +638,3 @@
+@@ -636,3 +656,3 @@
startBlock: 1
- blocks: [1,3,4,5,6,8,9]
+ blocks: [1,3,4,5,6,8,9,10,11]
-
-@@ -642,4 +662,10 @@
+
+@@ -660,4 +680,10 @@
78 CALL_METHOD java.lang.IllegalArgumentException.<init> (static-instance)
- 78 THROW(IllegalArgumentException)
+ ? STORE_LOCAL(value e)
+ ? JUMP 10
-
-+ 10:
+
++ 10:
+ 81 LOAD_LOCAL(value e)
+ ? STORE_LOCAL(variable exc1)
+ ? JUMP 11
-+
- 8:
-@@ -668,3 +694,4 @@
++
+ 8:
+@@ -686,3 +712,4 @@
81 LOAD_LOCAL(value e)
- 81 THROW(Exception)
+ ? STORE_LOCAL(variable exc1)
+ ? JUMP 11
-
-@@ -685,2 +712,15 @@
-
-+ 11:
+
+@@ -703,2 +730,15 @@
+
++ 11:
+ 83 LOAD_MODULE object Predef
+ 83 CONSTANT("finally")
+ 83 CALL_METHOD scala.Predef.println (dynamic)
@@ -167,35 +167,35 @@
+ 84 STORE_LOCAL(variable result)
+ 84 LOAD_LOCAL(variable exc1)
+ 84 THROW(Throwable)
-+
++
}
-@@ -690,3 +730,3 @@
+@@ -708,3 +748,3 @@
with finalizer: null
-- catch (<none>) in ArrayBuffer(4, 5, 6, 8) starting at: 3
-+ catch (<none>) in ArrayBuffer(4, 5, 6, 8, 10) starting at: 3
+- catch (<none>) in Vector(4, 5, 6, 8) starting at: 3
++ catch (<none>) in Vector(4, 5, 6, 8, 10) starting at: 3
consisting of blocks: List(3)
-@@ -714,5 +754,5 @@
+@@ -732,5 +772,5 @@
def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, variable result, value ex6, variable exc2, value x4, value x5, value message, value x, value ex6, value x4, value x5, value message, value x
+ locals: value args, variable result, value ex6, variable exc2, value x4, value x5, value x, value ex6, value x4, value x5, value x
startBlock: 1
- blocks: [1,3,4,5,6,9,13,14,15,18,20,21,23,24]
+ blocks: [1,3,4,5,6,9,13,14,15,18,20,21,23,24,25,26,27]
-
-@@ -740,4 +780,11 @@
+
+@@ -758,4 +798,11 @@
172 CALL_METHOD MyException.<init> (static-instance)
- 172 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 25
-
-+ 25:
+
++ 25:
+ 170 LOAD_LOCAL(value ex6)
+ 170 STORE_LOCAL(value x4)
+ 170 SCOPE_ENTER value x4
+ 170 JUMP 14
-+
- 23:
-@@ -780,8 +827,5 @@
++
+ 23:
+@@ -798,8 +845,5 @@
175 SCOPE_ENTER value x5
- 175 LOAD_LOCAL(value x5)
- 175 CALL_METHOD MyException.message (dynamic)
@@ -206,7 +206,7 @@
+ ? LOAD_LOCAL(value x5)
+ 176 CALL_METHOD MyException.message (dynamic)
176 CALL_METHOD scala.Predef.println (dynamic)
-@@ -789,5 +833,7 @@
+@@ -807,5 +851,7 @@
177 DUP(REF(class MyException))
- 177 LOAD_LOCAL(value message)
+ ? LOAD_LOCAL(value x5)
@@ -215,23 +215,23 @@
- 177 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 26
-
-@@ -795,3 +841,4 @@
+
+@@ -813,3 +859,4 @@
170 LOAD_LOCAL(value ex6)
- 170 THROW(Throwable)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 26
-
-@@ -805,2 +852,8 @@
-
-+ 26:
+
+@@ -823,2 +870,8 @@
+
++ 26:
+ 169 LOAD_LOCAL(value ex6)
+ 169 STORE_LOCAL(value x4)
+ 169 SCOPE_ENTER value x4
+ 169 JUMP 5
-+
- 5:
-@@ -815,8 +868,5 @@
++
+ 5:
+@@ -833,8 +886,5 @@
180 SCOPE_ENTER value x5
- 180 LOAD_LOCAL(value x5)
- 180 CALL_METHOD MyException.message (dynamic)
@@ -242,7 +242,7 @@
+ ? LOAD_LOCAL(value x5)
+ 181 CALL_METHOD MyException.message (dynamic)
181 CALL_METHOD scala.Predef.println (dynamic)
-@@ -824,5 +874,7 @@
+@@ -842,5 +892,7 @@
182 DUP(REF(class MyException))
- 182 LOAD_LOCAL(value message)
+ ? LOAD_LOCAL(value x5)
@@ -251,16 +251,16 @@
- 182 THROW(MyException)
+ ? STORE_LOCAL(variable exc2)
+ ? JUMP 27
-
-@@ -830,3 +882,4 @@
+
+@@ -848,3 +900,4 @@
169 LOAD_LOCAL(value ex6)
- 169 THROW(Throwable)
+ ? STORE_LOCAL(variable exc2)
+ ? JUMP 27
-
-@@ -847,2 +900,15 @@
-
-+ 27:
+
+@@ -865,2 +918,15 @@
+
++ 27:
+ 184 LOAD_MODULE object Predef
+ 184 CONSTANT("finally")
+ 184 CALL_METHOD scala.Predef.println (dynamic)
@@ -272,39 +272,39 @@
+ 185 STORE_LOCAL(variable result)
+ 185 LOAD_LOCAL(variable exc2)
+ 185 THROW(Throwable)
-+
++
}
-@@ -852,6 +918,6 @@
+@@ -870,6 +936,6 @@
with finalizer: null
-- catch (Throwable) in ArrayBuffer(13, 14, 15, 18, 20, 21, 23) starting at: 4
-+ catch (Throwable) in ArrayBuffer(13, 14, 15, 18, 20, 21, 23, 25) starting at: 4
+- catch (Throwable) in Vector(13, 14, 15, 18, 20, 21, 23) starting at: 4
++ catch (Throwable) in Vector(13, 14, 15, 18, 20, 21, 23, 25) starting at: 4
consisting of blocks: List(9, 8, 6, 5, 4)
with finalizer: null
-- catch (<none>) in ArrayBuffer(4, 5, 6, 9, 13, 14, 15, 18, 20, 21, 23) starting at: 3
-+ catch (<none>) in ArrayBuffer(4, 5, 6, 9, 13, 14, 15, 18, 20, 21, 23, 25, 26) starting at: 3
+- catch (<none>) in Vector(4, 5, 6, 9, 13, 14, 15, 18, 20, 21, 23) starting at: 3
++ catch (<none>) in Vector(4, 5, 6, 9, 13, 14, 15, 18, 20, 21, 23, 25, 26) starting at: 3
consisting of blocks: List(3)
-@@ -879,5 +945,5 @@
+@@ -897,5 +963,5 @@
def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, variable result, value e, value ex6, value x4, value x5, value message, value x
+ locals: value args, variable result, value e, value ex6, value x4, value x5, value x
startBlock: 1
- blocks: [1,2,3,6,7,8,11,13,14,16]
+ blocks: [1,2,3,6,7,8,11,13,14,16,17]
-
-@@ -905,4 +971,11 @@
+
+@@ -923,4 +989,11 @@
124 CALL_METHOD MyException.<init> (static-instance)
- 124 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 17
-
-+ 17:
+
++ 17:
+ 122 LOAD_LOCAL(value ex6)
+ 122 STORE_LOCAL(value x4)
+ 122 SCOPE_ENTER value x4
+ 122 JUMP 7
-+
- 16:
-@@ -930,8 +1003,5 @@
++
+ 16:
+@@ -948,8 +1021,5 @@
127 SCOPE_ENTER value x5
- 127 LOAD_LOCAL(value x5)
- 127 CALL_METHOD MyException.message (dynamic)
@@ -315,41 +315,41 @@
+ ? LOAD_LOCAL(value x5)
+ 127 CALL_METHOD MyException.message (dynamic)
127 CALL_METHOD scala.Predef.println (dynamic)
-@@ -964,3 +1034,3 @@
+@@ -982,3 +1052,3 @@
with finalizer: null
-- catch (IllegalArgumentException) in ArrayBuffer(6, 7, 8, 11, 13, 14, 16) starting at: 3
-+ catch (IllegalArgumentException) in ArrayBuffer(6, 7, 8, 11, 13, 14, 16, 17) starting at: 3
+- catch (IllegalArgumentException) in Vector(6, 7, 8, 11, 13, 14, 16) starting at: 3
++ catch (IllegalArgumentException) in Vector(6, 7, 8, 11, 13, 14, 16, 17) starting at: 3
consisting of blocks: List(3)
-@@ -988,5 +1058,5 @@
+@@ -1006,5 +1076,5 @@
def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, variable result, value ex6, value x4, value x5, value message, value x, value e
+ locals: value args, variable result, value ex6, value x4, value x5, value x, value e
startBlock: 1
- blocks: [1,2,3,4,5,8,12,13,14,16]
+ blocks: [1,2,3,5,8,12,13,14,16,17]
-
-@@ -1014,4 +1084,13 @@
+
+@@ -1032,4 +1102,13 @@
148 CALL_METHOD MyException.<init> (static-instance)
- 148 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 17
-
-+ 17:
+
++ 17:
+ 145 LOAD_LOCAL(value ex6)
+ 145 STORE_LOCAL(value x4)
+ 145 SCOPE_ENTER value x4
+ 154 LOAD_LOCAL(value x4)
+ 154 IS_INSTANCE REF(class MyException)
+ 154 CZJUMP (BOOL)NE ? 5 : 8
-+
- 16:
-@@ -1035,5 +1114,2 @@
++
+ 16:
+@@ -1053,5 +1132,2 @@
145 SCOPE_ENTER value x4
- 145 JUMP 4
--
-- 4:
+-
+- 4:
154 LOAD_LOCAL(value x4)
-@@ -1047,8 +1123,5 @@
+@@ -1065,8 +1141,5 @@
154 SCOPE_ENTER value x5
- 154 LOAD_LOCAL(value x5)
- 154 CALL_METHOD MyException.message (dynamic)
@@ -360,60 +360,60 @@
+ ? LOAD_LOCAL(value x5)
+ 154 CALL_METHOD MyException.message (dynamic)
154 CALL_METHOD scala.Predef.println (dynamic)
-@@ -1269,3 +1342,3 @@
+@@ -1287,3 +1360,3 @@
startBlock: 1
- blocks: [1,2,3,4,5,7]
+ blocks: [1,2,3,4,5,7,8]
-
-@@ -1293,4 +1366,11 @@
+
+@@ -1311,4 +1384,11 @@
38 CALL_METHOD java.lang.IllegalArgumentException.<init> (static-instance)
- 38 THROW(IllegalArgumentException)
+ ? STORE_LOCAL(value e)
+ ? JUMP 8
-
-+ 8:
+
++ 8:
+ 42 LOAD_MODULE object Predef
+ 42 CONSTANT("IllegalArgumentException")
+ 42 CALL_METHOD scala.Predef.println (dynamic)
+ 42 JUMP 2
-+
- 7:
-@@ -1340,5 +1420,5 @@
++
+ 7:
+@@ -1358,5 +1438,5 @@
def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, variable result, value ex6, value x4, value x5, value message, value x
+ locals: value args, variable result, value ex6, value x4, value x5, value x
startBlock: 1
- blocks: [1,2,3,4,5,8,10,11,13,14,16]
+ blocks: [1,2,3,5,8,10,11,13,14,16,17]
-
-@@ -1366,3 +1446,4 @@
+
+@@ -1384,3 +1464,4 @@
203 CALL_METHOD MyException.<init> (static-instance)
- 203 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 17
-
-@@ -1386,4 +1467,13 @@
+
+@@ -1404,4 +1485,13 @@
209 CALL_METHOD MyException.<init> (static-instance)
- 209 THROW(MyException)
+ ? STORE_LOCAL(value ex6)
+ ? JUMP 17
-
-+ 17:
+
++ 17:
+ 200 LOAD_LOCAL(value ex6)
+ 200 STORE_LOCAL(value x4)
+ 200 SCOPE_ENTER value x4
+ 212 LOAD_LOCAL(value x4)
+ 212 IS_INSTANCE REF(class MyException)
+ 212 CZJUMP (BOOL)NE ? 5 : 8
-+
- 16:
-@@ -1399,5 +1489,2 @@
++
+ 16:
+@@ -1417,5 +1507,2 @@
200 SCOPE_ENTER value x4
- 200 JUMP 4
--
-- 4:
+-
+- 4:
212 LOAD_LOCAL(value x4)
-@@ -1411,8 +1498,5 @@
+@@ -1429,8 +1516,5 @@
212 SCOPE_ENTER value x5
- 212 LOAD_LOCAL(value x5)
- 212 CALL_METHOD MyException.message (dynamic)
@@ -424,69 +424,68 @@
+ ? LOAD_LOCAL(value x5)
+ 213 CALL_METHOD MyException.message (dynamic)
213 CALL_METHOD scala.Predef.println (dynamic)
-@@ -1460,3 +1544,3 @@
+@@ -1478,3 +1562,3 @@
startBlock: 1
- blocks: [1,2,3,4,5,7]
+ blocks: [1,2,3,4,5,7,8]
-
-@@ -1484,4 +1568,11 @@
+
+@@ -1502,4 +1586,11 @@
58 CALL_METHOD java.lang.IllegalArgumentException.<init> (static-instance)
- 58 THROW(IllegalArgumentException)
+ ? STORE_LOCAL(value e)
+ ? JUMP 8
-
-+ 8:
+
++ 8:
+ 62 LOAD_MODULE object Predef
+ 62 CONSTANT("RuntimeException")
+ 62 CALL_METHOD scala.Predef.println (dynamic)
+ 62 JUMP 2
-+
- 7:
-@@ -1533,3 +1624,3 @@
++
+ 7:
+@@ -1551,3 +1642,3 @@
startBlock: 1
- blocks: [1,3,4]
+ blocks: [1,3,4,5]
-
-@@ -1553,4 +1644,9 @@
+
+@@ -1571,4 +1662,9 @@
229 CALL_METHOD MyException.<init> (static-instance)
- 229 THROW(MyException)
+ ? JUMP 5
-
-+ 5:
+
++ 5:
+ ? LOAD_LOCAL(variable monitor1)
+ 228 MONITOR_EXIT
+ 228 THROW(Throwable)
-+
- 3:
-@@ -1559,3 +1655,3 @@
++
+ 3:
+@@ -1577,3 +1673,3 @@
228 MONITOR_EXIT
- ? THROW(Throwable)
+ 228 THROW(Throwable)
-
-@@ -1587,5 +1683,5 @@
+
+@@ -1605,5 +1701,5 @@
def main(args: Array[String] (ARRAY[REF(class String)])): Unit {
- locals: value args, variable result, variable monitor2, variable monitorResult1
+ locals: value exception$1, value args, variable result, variable monitor2, variable monitorResult1
startBlock: 1
- blocks: [1,3,4]
+ blocks: [1,3,4,5]
-
-@@ -1612,4 +1708,12 @@
+
+@@ -1630,4 +1726,12 @@
245 CALL_METHOD MyException.<init> (static-instance)
- 245 THROW(MyException)
+ ? STORE_LOCAL(value exception$1)
+ ? DROP ConcatClass
+ ? LOAD_LOCAL(value exception$1)
+ ? JUMP 5
-
-+ 5:
+
++ 5:
+ ? LOAD_LOCAL(variable monitor2)
+ 244 MONITOR_EXIT
+ 244 THROW(Throwable)
-+
- 3:
-@@ -1618,3 +1722,3 @@
++
+ 3:
+@@ -1636,3 +1740,3 @@
244 MONITOR_EXIT
- ? THROW(Throwable)
+ 244 THROW(Throwable)
-
diff --git a/test/files/run/inline-ex-handlers.scala b/test/pending/run/inline-ex-handlers.scala
index 964594d258..964594d258 100644
--- a/test/files/run/inline-ex-handlers.scala
+++ b/test/pending/run/inline-ex-handlers.scala
diff --git a/test/pending/run/origins.check b/test/pending/run/origins.check
new file mode 100644
index 0000000000..af94b549d3
--- /dev/null
+++ b/test/pending/run/origins.check
@@ -0,0 +1,4 @@
+
+>> Origins tag 'boop' logged 65 calls from 1 distinguished sources.
+
+ 65 null
diff --git a/test/files/run/origins.flags b/test/pending/run/origins.flags
index 690753d807..690753d807 100644
--- a/test/files/run/origins.flags
+++ b/test/pending/run/origins.flags
diff --git a/test/files/run/origins.scala b/test/pending/run/origins.scala
index 6529351d3c..6529351d3c 100644
--- a/test/files/run/origins.scala
+++ b/test/pending/run/origins.scala
diff --git a/test/pending/run/t5698/client.scala b/test/pending/run/t5698/client.scala
deleted file mode 100644
index de672c1809..0000000000
--- a/test/pending/run/t5698/client.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-package client
-
-
-
-object Client extends App {
- val peer = actors.remote.Node("localhost", 23456)
- val a = actors.remote.RemoteActor.select(peer, 'test)
- a ! server.TestMsg
-}
diff --git a/test/pending/run/t5698/server.scala b/test/pending/run/t5698/server.scala
deleted file mode 100644
index e8f3cea225..0000000000
--- a/test/pending/run/t5698/server.scala
+++ /dev/null
@@ -1,22 +0,0 @@
-package server
-
-
-
-object Server extends App {
-
- class ServerActor extends actors.Actor {
- def act() {
- actors.remote.RemoteActor.alive(23456)
- actors.remote.RemoteActor.register('test, actors.Actor.self)
- loop {
- react {
- case TestMsg => println("Yay!")
- }
- }
- }
- }
-
- val a = new ServerActor
- a.start()
-
-}
diff --git a/test/pending/run/t5698/testmsg.scala b/test/pending/run/t5698/testmsg.scala
deleted file mode 100644
index 004ff0b8c7..0000000000
--- a/test/pending/run/t5698/testmsg.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package server
-
-
-
-case object TestMsg
diff --git a/test/scaladoc/javascript/test-index.html b/test/scaladoc/javascript/test-index.html
index 42cbc8cc09..91756b5be1 100644
--- a/test/scaladoc/javascript/test-index.html
+++ b/test/scaladoc/javascript/test-index.html
@@ -6,7 +6,6 @@
src="http://code.jquery.com/qunit/git/qunit.js"></script>
<script type="text/javascript"
src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.js"></script>
- <script src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/jquery.layout.js"></script>
<script src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/scheduler.js"></script>
<script type="text/javascript"
src="../../../src/compiler/scala/tools/nsc/doc/html/resource/lib/index.js"></script>
diff --git a/test/scaladoc/resources/SI-4826.java b/test/scaladoc/resources/SI-4826.java
new file mode 100644
index 0000000000..18a1cb86f2
--- /dev/null
+++ b/test/scaladoc/resources/SI-4826.java
@@ -0,0 +1,309 @@
+/**
+ * A package header
+ */
+package test.scaladoc;
+
+/**
+ * Testing java comments. The presence of a :marker:
+ * tag is verified by tests.
+ */
+public class JavaComments {
+
+ /** A field */
+ public final int x;
+ /** A field */
+ protected int y;
+ /** A field */
+ private int z;
+
+ /**
+ * Inner class
+ */
+ public class Inner {
+ /** Inner method */
+ public void foo() {
+ }
+ }
+
+ /**
+ * A typed inner class
+ * @param <T> some type
+ */
+ public class InnerTyped<T> {
+ }
+
+ /**
+ * Compute the answer to the ultimate question of life, the
+ * universe, and everything. :marker:
+ * @param factor scaling factor to the answer
+ * @return the answer to everything (42) scaled by factor
+ */
+ public int answer(int factor) {
+ return 42 * factor;
+ }
+
+ /** Private */
+ private double foo(double value) {
+ return value;
+ }
+
+ /** Protected */
+ protected double bar(double value) {
+ return value;
+ }
+
+ /** No qualifier*/
+ String noqualifier() {
+ return "something";
+ }
+
+ /** Void */
+ public void voidmethod(boolean t) {
+ }
+
+ /**
+ * Typed parameter
+ * @param <A> the parameter type
+ * @param a parameter
+ * @return something
+ */
+ public <A> void tparams(A a) {
+ }
+
+ /**
+ * Typed parameter
+ * @param <A> the return type
+ * @param <B> the parameter typeA
+ * @param b parameter
+ * @return casts B to A
+ */
+ public <A, B extends A> A cast(B b) {
+ return (B) b;
+ }
+
+}
+
+// The following snippet is taken from Akka, it mainly tests interfaces
+
+/**
+ * Class that encapsulates all the Functional Interfaces
+ * used for creating partial functions.
+ *
+ * This is an EXPERIMENTAL feature and is subject to change until it has received more real world testing.
+ */
+public final class FI {
+
+ /** Doc comment on constructor */
+ private FI() {
+ }
+
+ /**
+ * Functional interface for an application.
+ *
+ * @param <I> the input type, that this Apply will be applied to
+ * @param <R> the return type, that the results of the application will have
+ */
+ public static interface Apply<I, R> {
+ /**
+ * The application to perform.
+ *
+ * @param i an instance that the application is performed on
+ * @return the result of the application
+ */
+ public R apply(I i) throws Exception;
+ }
+
+ /**
+ * Functional interface for an application.
+ *
+ * @param <I1> the first input type, that this Apply will be applied to
+ * @param <I2> the second input type, that this Apply will be applied to
+ * @param <R> the return type, that the results of the application will have
+ */
+ public static interface Apply2<I1, I2, R> {
+ /**
+ * The application to perform.
+ *
+ * @param i1 an instance that the application is performed on
+ * @param i2 an instance that the application is performed on
+ * @return the result of the application
+ */
+ public R apply(I1 i1, I2 i2) throws Exception;
+ }
+
+ /**
+ * Functional interface for a predicate.
+ *
+ * @param <T> the type that the predicate will operate on.
+ */
+ public static interface TypedPredicate<T> {
+ /**
+ * The predicate to evaluate.
+ *
+ * @param t an instance that the predicate is evaluated on.
+ * @return the result of the predicate
+ */
+ public boolean defined(T t);
+ }
+
+ /**
+ * Functional interface for a predicate.
+ *
+ * @param <T> the type that the predicate will operate on.
+ * @param <U> the type that the predicate will operate on.
+ */
+ public static interface TypedPredicate2<T, U> {
+ /**
+ * The predicate to evaluate.
+ *
+ * @param t an instance that the predicate is evaluated on.
+ * @param u an instance that the predicate is evaluated on.
+ * @return the result of the predicate
+ */
+ public boolean defined(T t, U u);
+ }
+
+ /**
+ * Functional interface for an application.
+ *
+ * @param <I> the input type, that this Apply will be applied to
+ */
+ public static interface UnitApply<I> {
+ /**
+ * The application to perform.
+ *
+ * @param i an instance that the application is performed on
+ */
+ public void apply(I i) throws Exception;
+ }
+
+ /**
+ * Functional interface for an application.
+ *
+ * @param <I1> the first input type, that this Apply will be applied to
+ * @param <I2> the second input type, that this Apply will be applied to
+ */
+ public static interface UnitApply2<I1, I2> {
+ /**
+ * The application to perform.
+ *
+ * @param i1 an instance that the application is performed on
+ * @param i2 an instance that the application is performed on
+ */
+ public void apply(I1 i1, I2 i2) throws Exception;
+ }
+
+ /**
+ * Functional interface for an application.
+ *
+ * @param <I1> the first input type, that this Apply will be applied to
+ * @param <I2> the second input type, that this Apply will be applied to
+ * @param <I3> the third input type, that this Apply will be applied to
+ */
+ public static interface UnitApply3<I1, I2, I3> {
+ /**
+ * The application to perform.
+ *
+ * @param i1 an instance that the application is performed on
+ * @param i2 an instance that the application is performed on
+ * @param i3 an instance that the application is performed on
+ */
+ public void apply(I1 i1, I2 i2, I3 i3) throws Exception;
+ }
+
+ /**
+ * Functional interface for an application.
+ *
+ * @param <I1> the first input type, that this Apply will be applied to
+ * @param <I2> the second input type, that this Apply will be applied to
+ * @param <I3> the third input type, that this Apply will be applied to
+ * @param <I4> the fourth input type, that this Apply will be applied to
+ */
+ public static interface UnitApply4<I1, I2, I3, I4> {
+ /**
+ * The application to perform.
+ *
+ * @param i1 an instance that the application is performed on
+ * @param i2 an instance that the application is performed on
+ * @param i3 an instance that the application is performed on
+ * @param i4 an instance that the application is performed on
+ */
+ public void apply(I1 i1, I2 i2, I3 i3, I4 i4) throws Exception;
+ }
+
+ /**
+ * Functional interface for an application.
+ */
+ public static interface UnitApplyVoid {
+ /**
+ * The application to perform.
+ */
+ public void apply() throws Exception;
+ }
+
+ /**
+ * Package scoped functional interface for a predicate. Used internally to match against arbitrary types.
+ */
+ static interface Predicate {
+ /**
+ * The predicate to evaluate.
+ *
+ * @param o an instance that the predicate is evaluated on.
+ * @return the result of the predicate
+ */
+ public boolean defined(Object o);
+ }
+
+ /** comment about */
+ /** a comment about */
+ /** a comment */
+ void foo() {}
+
+ /** someone forgot to uncomment */
+ //void thisMethod() {}
+ /** and also this */
+ //void otherMethod() {}
+}
+
+/**
+ * Functional interface for an application.
+ *
+ * @param <I1> the first input type, that this Apply will be applied to
+ * @param <I2> the second input type, that this Apply will be applied to
+ * @param <I3> the third input type, that this Apply will be applied to
+ * @param <I4> the fourth input type, that this Apply will be applied to
+ */
+public interface UnitApply4<I1, I2, I3, I4> {
+ /**
+ * The application to perform.
+ *
+ * @param i1 an instance that the application is performed on
+ * @param i2 an instance that the application is performed on
+ * @param i3 an instance that the application is performed on
+ * @param i4 an instance that the application is performed on
+ */
+ public void apply(I1 i1, I2 i2, I3 i3, I4 i4) throws Exception;
+}
+
+/**
+ * Functional interface for an application.
+ */
+public interface UnitApplyVoid {
+ /**
+ * The application to perform.
+ */
+ public void apply() throws Exception;
+}
+
+/**
+ * Package scoped functional interface for a predicate. Used internally to match against arbitrary types.
+ */
+interface Predicate {
+ /**
+ * The predicate to evaluate.
+ *
+ * @param o an instance that the predicate is evaluated on.
+ * @return the result of the predicate
+ */
+ public boolean defined(Object o);
+}
diff --git a/test/scaladoc/resources/SI-9599.scala b/test/scaladoc/resources/SI-9599.scala
new file mode 100644
index 0000000000..9365243ffb
--- /dev/null
+++ b/test/scaladoc/resources/SI-9599.scala
@@ -0,0 +1,6 @@
+/**
+ * @todo todo1
+ * @todo todo2
+ * @todo todo3
+ */
+class X
diff --git a/test/scaladoc/resources/links.scala b/test/scaladoc/resources/links.scala
index 8e000ab979..b6a6b08209 100644
--- a/test/scaladoc/resources/links.scala
+++ b/test/scaladoc/resources/links.scala
@@ -38,7 +38,7 @@ package scala.test.scaladoc.links {
/**
* Links to the trait:
- * - [[scala.test.scaladoc.links.Target$ object Test]]
+ * - [[scala.test.scaladoc.links.Target$ object Target]]
* - [[scala.test package scala.test]]
* - [[scala.test.scaladoc.links.Target!.T trait Target -> type T]]
* - [[test.scaladoc.links.Target!.S trait Target -> type S]]
@@ -51,7 +51,7 @@ package scala.test.scaladoc.links {
* - [[Target$.foo(z:Str* object Target -> def foo]]
* - [[Target$.bar object Target -> def bar]]
* - [[[[Target$.foo[A[_[_]]]* trait Target -> def foo with 3 nested tparams]]]] (should exercise nested parens)
- * - [[Target.onlyInObject object Target -> def foo]] (should find the object)
+ * - [[Target.onlyInObject object Target -> onlyInObject]]
* - [[Target$.C object Target -> class C]] (should link directly to C, not as a member)
* - [[Target!.C trait Target -> class C]] (should link directly to C, not as a member)
* - [[Target$.baz(c:scala\.test\.scaladoc\.links\.C)* object Target -> def baz]] (should use dots in prefix)
diff --git a/test/scaladoc/run/SI-4826-no-comments.check b/test/scaladoc/run/SI-4826-no-comments.check
new file mode 100644
index 0000000000..3925a0d464
--- /dev/null
+++ b/test/scaladoc/run/SI-4826-no-comments.check
@@ -0,0 +1 @@
+Done. \ No newline at end of file
diff --git a/test/scaladoc/run/SI-4826-no-comments.scala b/test/scaladoc/run/SI-4826-no-comments.scala
new file mode 100644
index 0000000000..217fc29d81
--- /dev/null
+++ b/test/scaladoc/run/SI-4826-no-comments.scala
@@ -0,0 +1,20 @@
+import scala.tools.nsc.doc.Universe
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocJavaModelTest
+
+object Test extends ScaladocJavaModelTest {
+
+ override def resourceFile = "SI-4826.java"
+ override def scaladocSettings = "-no-java-comments"
+
+ def testModel(rootPackage: Package) = {
+ import access._
+
+ val base = rootPackage._package("test")._package("scaladoc")
+ val clazz = base._class("JavaComments")
+ val method = clazz._method("answer")
+
+ assert(clazz.comment == None)
+ assert(method.comment == None)
+ }
+}
diff --git a/test/scaladoc/run/SI-6017.check b/test/scaladoc/run/SI-4826.check
index 619c56180b..619c56180b 100644
--- a/test/scaladoc/run/SI-6017.check
+++ b/test/scaladoc/run/SI-4826.check
diff --git a/test/scaladoc/run/SI-4826.scala b/test/scaladoc/run/SI-4826.scala
new file mode 100644
index 0000000000..6d4b3a6da7
--- /dev/null
+++ b/test/scaladoc/run/SI-4826.scala
@@ -0,0 +1,21 @@
+import scala.tools.nsc.doc.Universe
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocJavaModelTest
+
+object Test extends ScaladocJavaModelTest {
+
+ override def resourceFile = "SI-4826.java"
+ override def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ import access._
+ val Tag = ":marker:"
+
+ val base = rootPackage._package("test")._package("scaladoc")
+ val clazz = base._class("JavaComments")
+ val method = clazz._method("answer")
+
+ assert(extractCommentText(clazz.comment.get).contains(Tag))
+ assert(extractCommentText(method.comment.get).contains(Tag))
+ }
+}
diff --git a/test/scaladoc/run/SI-6017.scala b/test/scaladoc/run/SI-6017.scala
deleted file mode 100644
index 9951534c6d..0000000000
--- a/test/scaladoc/run/SI-6017.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-import scala.tools.nsc.doc
-import scala.tools.nsc.doc.model._
-import scala.tools.nsc.doc.html.page.{Index, ReferenceIndex}
-import scala.tools.partest.ScaladocModelTest
-
-object Test extends ScaladocModelTest {
- override def scaladocSettings = ""
- override def code = """
- class STAR
- class Star
- """
-
- def testModel(rootPackage: Package) {
- model match {
- case Some(universe) => {
- val index = IndexModelFactory.makeIndex(universe)
- // Because "STAR" and "Star" are different
- assert(index.firstLetterIndex('s').keys.toSeq.length == 2)
-
- val indexPage = new Index(universe, index)
- val letters = indexPage.letters
- assert(letters.length > 1)
- assert(letters(0).toString == "<span>#</span>")
- }
- case _ => assert(false)
- }
- }
-}
diff --git a/test/scaladoc/run/SI-6580.scala b/test/scaladoc/run/SI-6580.scala
index c544138f44..55168a060b 100644
--- a/test/scaladoc/run/SI-6580.scala
+++ b/test/scaladoc/run/SI-6580.scala
@@ -1,6 +1,5 @@
import scala.tools.nsc.doc
import scala.tools.nsc.doc.model._
-import scala.tools.nsc.doc.html.page.{Index, ReferenceIndex}
import scala.tools.partest.ScaladocModelTest
object Test extends ScaladocModelTest {
diff --git a/test/scaladoc/run/SI-9620.check b/test/scaladoc/run/SI-9620.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/SI-9620.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/SI-9620.scala b/test/scaladoc/run/SI-9620.scala
new file mode 100644
index 0000000000..cac34d1c18
--- /dev/null
+++ b/test/scaladoc/run/SI-9620.scala
@@ -0,0 +1,42 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+ override def code = """
+ package a
+
+ trait Foo[S] {
+ def foo(t: S): Int = 123
+ }
+
+ /** Boo with only one foo method, hopefully!
+ * @hideImplicitConversion BooShouldNotAppearIsFoo
+ */
+ trait Boo[T]
+
+ object Boo {
+ sealed trait ShouldNotAppear
+ implicit class BooShouldNotAppearIsFoo(boo: Boo[ShouldNotAppear]) extends Foo[ShouldNotAppear]
+ implicit class BooLongIsFoo(boo: Boo[Long]) extends Foo[Long]
+ }
+ """
+
+ def scaladocSettings = "-implicits"
+
+ def testModel(rootPackage: Package) = {
+ import access._
+
+ // Assert Boo only has one implicit conversion
+ val boo = rootPackage._package("a")._trait("Boo")
+ val conversions = boo._conversions("a.Boo.BooShouldNotAppearIsFoo") ++ boo._conversions("a.Boo.BooLongIsFoo")
+ assert(conversions.length == 1, conversions.length + " == 1")
+
+ // Assert that the implicit conversion is not "BooShouldNotAppearIsFoo"
+ assert(conversions.head.conversionShortName == "BooLongIsFoo",
+ conversions.head.conversionShortName + " == BooLongIsFoo")
+
+ // Assert that the same for full path
+ assert(conversions.head.conversionQualifiedName == "a.Boo.BooLongIsFoo",
+ conversions.head.conversionQualifiedName + " == a.Boo.BooLongIsFoo")
+ }
+}
diff --git a/test/scaladoc/run/shortDescription-annotation.check b/test/scaladoc/run/shortDescription-annotation.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/shortDescription-annotation.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/shortDescription-annotation.scala b/test/scaladoc/run/shortDescription-annotation.scala
new file mode 100644
index 0000000000..0e2950f4f9
--- /dev/null
+++ b/test/scaladoc/run/shortDescription-annotation.scala
@@ -0,0 +1,55 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+ override def code = """
+ package a
+
+ /** This comment should not appear
+ * @shortDescription This one should appear
+ */
+ class Foo {
+ /** This comment should appear */
+ def foo: Int = 1
+
+ /** This comment should not appear
+ * @shortDescription This comment should appear
+ */
+ def goo: Int = 2
+ }
+ """
+
+ // no need for special settings
+ def scaladocSettings = ""
+
+ def testModel(rootPackage: Package) = {
+ import scala.tools.nsc.doc.base.comment._
+ import access._
+
+ def inlineToStr(inl: Inline): String = inl match {
+ case Chain(items) => items flatMap (inlineToStr(_)) mkString ""
+ case Italic(in) => inlineToStr(in)
+ case Bold(in) => inlineToStr(in)
+ case Underline(in) => inlineToStr(in)
+ case Monospace(in) => inlineToStr(in)
+ case Text(text) => text
+ case Summary(in) => inlineToStr(in)
+ case EntityLink(Text(text), _) => text
+ case _ => inl.toString
+ }
+
+ val foo = rootPackage._package("a")._class("Foo")
+
+ // Assert that the class has the correct short description
+ val classDesc = inlineToStr(foo.comment.get.short)
+ assert(classDesc == "This one should appear", classDesc)
+
+ // Assert that the `foo` method has the correct short description
+ val fooDesc = inlineToStr(foo._method("foo").comment.get.short)
+ assert(fooDesc == "This comment should appear", fooDesc)
+
+ // Assert that the `goo` method has the correct short description
+ val gooDesc = inlineToStr(foo._method("goo").comment.get.short)
+ assert(gooDesc == "This comment should appear", gooDesc)
+ }
+}
diff --git a/test/scaladoc/run/t7767.scala b/test/scaladoc/run/t7767.scala
index 6c9ceb511d..433fc5c0c4 100644
--- a/test/scaladoc/run/t7767.scala
+++ b/test/scaladoc/run/t7767.scala
@@ -4,15 +4,49 @@ import scala.tools.partest.ScaladocModelTest
object Test extends ScaladocModelTest {
override def code = """
- class Docable extends { /**Doc*/ val foo = 0 } with AnyRef
- """
+ class CEarly extends { /**CEarly_Doc_foo*/ val foo = 0 } with AnyRef
+ trait TEarly extends { /**TEarly_Doc_foo*/ val foo = 0 } with AnyRef
+ class C {
+ /**C_Doc_sigInferred*/ val sigInferred = 0
+ /**C_Doc_const*/ final val const = 0
+ /**C_Doc_varr*/ var varr: Any = null
+ /**C_Doc_abs*/ val abs: Int
+ /**C_Doc_absVar*/ var absVar: Any
+ /**C_Doc_lazyValInferred*/ lazy val lazyValInferred = 0
+ /**C_Doc_lazyValConst*/ final lazy val lazyValConst = 0
+ /**C_Doc_lazyValUnit*/ lazy val lazyValUnit: Unit = println()
+ /**C_Doc_lazyVal*/ lazy val lazyVal: Int = 0
+ }
+ trait T {
+ /**T_Doc_sigInferred*/ val sigInferred = 0
+ /**T_Doc_const*/ final val const = 0
+ /**T_Doc_varr*/ var varr: Any = null
+ /**T_Doc_abs*/ val abs: Int
+ /**T_Doc_absVar*/ var absVar: Any
+ /**T_Doc_lazyValInferred*/ lazy val lazyValInferred = 0
+ /**T_Doc_lazyValConst*/ final lazy val lazyValConst = 0
+ /**T_Doc_lazyValUnit*/ lazy val lazyValUnit: Unit = println()
+ /**T_Doc_lazyVal*/ lazy val lazyVal: Int = 0
+ }"""
// no need for special settings
def scaladocSettings = ""
+ def assertDoc(classEntity: DocTemplateEntity, valName: String) = {
+ import access._
+ val comment = classEntity._value(valName).comment.map(_.body.toString.trim).getOrElse("")
+ val className = classEntity.name
+ val marker = s"${className}_Doc_${valName}"
+ assert(comment.contains(marker), s"Expected $marker in comment for $valName in $className, found: $comment.")
+ }
+
def testModel(rootPackage: Package) = {
import access._
- val comment = rootPackage._class("Docable")._value("foo").comment.map(_.body.toString.trim).getOrElse("")
- assert(comment.contains("Doc"), comment)
+ assertDoc(rootPackage._class("CEarly"), "foo")
+ assertDoc(rootPackage._trait("TEarly"), "foo")
+
+ val valNames = List("sigInferred", "const", "varr", "abs", "absVar", "lazyValInferred", "lazyValConst", "lazyValUnit", "lazyVal")
+ val entities = List(rootPackage._class("C"), rootPackage._trait("T"))
+ for (e <- entities; vn <- valNames) assertDoc(e, vn)
}
}
diff --git a/test/scaladoc/run/t7905.check b/test/scaladoc/run/t7905.check
new file mode 100644
index 0000000000..619c56180b
--- /dev/null
+++ b/test/scaladoc/run/t7905.check
@@ -0,0 +1 @@
+Done.
diff --git a/test/scaladoc/run/t7905.scala b/test/scaladoc/run/t7905.scala
new file mode 100644
index 0000000000..8570724470
--- /dev/null
+++ b/test/scaladoc/run/t7905.scala
@@ -0,0 +1,36 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+ override def code = """
+ object A {
+ val foo = new B {
+ val bar = new C {
+ val baz: A.this.type = A.this
+ }
+ }
+ }
+
+ trait B {
+ type E = bar.D
+
+ val bar: C
+ }
+
+ trait C {
+ trait D
+ }
+
+ trait G {
+ type F = A.foo.E
+
+ def m(f: F) = f match {
+ case _: A.foo.bar.D => // error here
+ }
+ }
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(root: Package) = ()
+}
diff --git a/test/scaladoc/run/t9585.check b/test/scaladoc/run/t9585.check
new file mode 100644
index 0000000000..3784317d54
--- /dev/null
+++ b/test/scaladoc/run/t9585.check
@@ -0,0 +1,6 @@
+warning: there was one feature warning; re-run with -feature for details
+any2stringadd[Box[T]]
+StringFormat[Box[T]]
+Ensuring[Box[T]]
+ArrowAssoc[Box[T]]
+Done.
diff --git a/test/scaladoc/run/t9585.scala b/test/scaladoc/run/t9585.scala
new file mode 100644
index 0000000000..af8350b6cf
--- /dev/null
+++ b/test/scaladoc/run/t9585.scala
@@ -0,0 +1,25 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+ override def code = """
+ object Box {
+
+ implicit def anyToBox[T](t: T): Box[T] = new Box(t)
+
+ }
+
+ class Box[T](val t: T)
+ """
+
+ def scaladocSettings = "-implicits"
+
+ def testModel(root: Package) = {
+ import access._
+
+ // this used to contain the conversion to Box[Box[T]],
+ // but not anymore.
+ val conversions = root._class("Box").conversions
+ println(conversions.map(_.targetType).mkString("\n"))
+ }
+}
diff --git a/test/scaladoc/run/t9752.check b/test/scaladoc/run/t9752.check
new file mode 100644
index 0000000000..daeafb8ecc
--- /dev/null
+++ b/test/scaladoc/run/t9752.check
@@ -0,0 +1,5 @@
+List(Body(List(Paragraph(Chain(List(Summary(Text())))), Code(class A
+
+
+class B))))
+Done.
diff --git a/test/scaladoc/run/t9752.scala b/test/scaladoc/run/t9752.scala
new file mode 100644
index 0000000000..b11c7f5c32
--- /dev/null
+++ b/test/scaladoc/run/t9752.scala
@@ -0,0 +1,28 @@
+import scala.tools.nsc.doc.model._
+import scala.tools.partest.ScaladocModelTest
+
+object Test extends ScaladocModelTest {
+
+ override def code = s"""
+ /**
+ * Foo
+ *
+ * @example
+ * {{{
+ * class A
+ *
+ *
+ * class B
+ * }}}
+ */
+ object Foo
+ """
+
+ def scaladocSettings = ""
+
+ def testModel(root: Package) = {
+ import access._
+ val obj = root._object("Foo")
+ println(obj.comment.get.example)
+ }
+}
diff --git a/test/scaladoc/scalacheck/DeprecatedIndexTest.scala b/test/scaladoc/scalacheck/DeprecatedIndexTest.scala
deleted file mode 100644
index 4a5a2001d4..0000000000
--- a/test/scaladoc/scalacheck/DeprecatedIndexTest.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-import org.scalacheck._
-import org.scalacheck.Prop._
-
-import scala.tools.nsc.doc
-import scala.tools.nsc.doc.html.page.DeprecatedIndex
-import java.net.{URLClassLoader, URLDecoder}
-
-object Test extends Properties("IndexScript") {
-
- def getClasspath = {
- // these things can be tricky
- // this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
- // does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
- // this test _will_ fail again some time in the future.
- // Footnote: java.lang.ClassCastException: org.apache.tools.ant.loader.AntClassLoader5 cannot be cast to java.net.URLClassLoader
- val loader = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader]
- val paths = loader.getURLs.map(u => URLDecoder.decode(u.getPath))
- paths mkString java.io.File.pathSeparator
- }
-
- val docFactory = {
- val settings = new doc.Settings({Console.err.println(_)})
- settings.scaladocQuietRun = true
- settings.nowarn.value = true
- settings.classpath.value = getClasspath
- val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
- new doc.DocFactory(reporter, settings)
- }
-
- val indexModelFactory = doc.model.IndexModelFactory
-
- def createDeprecatedScript(path: String) =
- docFactory.makeUniverse(Left(List(path))) match {
- case Some(universe) => {
- val index = new DeprecatedIndex(universe, indexModelFactory.makeIndex(universe))
- Some(index)
- }
- case _ =>
- None
- }
-
- property("deprecated-list page lists deprecated members") = {
- createDeprecatedScript("test/scaladoc/resources/SI-4476.scala") match {
- case Some(p) =>
- p.deprecatedEntries.find(_._1 == "A").isDefined &&
- p.deprecatedEntries.find(_._1 == "bar").isDefined
- case None => false
- }
- }
-}
diff --git a/test/scaladoc/scalacheck/HtmlFactoryTest.scala b/test/scaladoc/scalacheck/HtmlFactoryTest.scala
index 578e0382eb..ab2c058a03 100644
--- a/test/scaladoc/scalacheck/HtmlFactoryTest.scala
+++ b/test/scaladoc/scalacheck/HtmlFactoryTest.scala
@@ -26,10 +26,9 @@ object Test extends Properties("HtmlFactory") {
final val RESOURCES = "test/scaladoc/resources/"
+ import scala.tools.nsc.ScalaDocReporter
import scala.tools.nsc.doc.{DocFactory, Settings}
- import scala.tools.nsc.doc.model.IndexModelFactory
import scala.tools.nsc.doc.html.HtmlFactory
- import scala.tools.nsc.doc.html.page.ReferenceIndex
def getClasspath = {
// these things can be tricky
@@ -58,8 +57,7 @@ object Test extends Properties("HtmlFactory") {
createFactory.makeUniverse(Left(List(RESOURCES+basename))) match {
case Some(universe) => {
- val index = IndexModelFactory.makeIndex(universe)
- (new HtmlFactory(universe, index)).writeTemplates((page) => {
+ new HtmlFactory(universe, new ScalaDocReporter(universe.settings)).writeTemplates((page) => {
result += (page.absoluteLinkTo(page.path) -> page.body)
})
}
@@ -69,23 +67,6 @@ object Test extends Properties("HtmlFactory") {
result
}
- def createReferenceIndex(basename: String) = {
- createFactory.makeUniverse(Left(List(RESOURCES+basename))) match {
- case Some(universe) => {
- val index = IndexModelFactory.makeIndex(universe)
- val pages = index.firstLetterIndex.map({
- case (key, value) => {
- val page = new ReferenceIndex(key, index, universe)
- page.absoluteLinkTo(page.path) -> page.body
- }
- })
- Some(pages)
- }
- case _ =>
- None
- }
- }
-
def createTemplate(scala: String) = {
val html = scala.stripSuffix(".scala") + ".html"
createTemplates(scala)(html)
@@ -336,27 +317,6 @@ object Test extends Properties("HtmlFactory") {
}
}
- property("Trac #4471") = {
- createReferenceIndex("Trac4471.scala") match {
- case Some(pages) =>
- (pages.get("index/index-f.html") match {
- case Some(node) => node.toString.contains(">A</a></strike>")
- case _ => false
- }) && (pages.get("index/index-b.html") match {
- case Some(node) => node.toString.contains(">bar</strike>")
- case _ => false
- })
- case _ => false
- }
- }
-
- property("SI-4641") = {
- createReferenceIndex("SI_4641.scala") match {
- case Some(pages) => pages.contains("index/index-_.html")
- case _ => false
- }
- }
-
property("SI-4421") = {
createTemplate("SI_4421.scala") match {
case node: scala.xml.Node => {
@@ -723,9 +683,9 @@ object Test extends Properties("HtmlFactory") {
}
case _ => false
}
- property("package") = files.get("com/example/p1/package.html") != None
+ property("package") = files.get("com/example/p1/index.html") != None
- property("package object") = files("com/example/p1/package.html") match {
+ property("package object") = files("com/example/p1/index.html") match {
case node: scala.xml.Node =>
node.toString contains "com.example.p1#packageObjectMethod"
case _ => false
@@ -743,13 +703,13 @@ object Test extends Properties("HtmlFactory") {
property("SI-8514: No inconsistencies") =
checkText("SI-8514.scala")(
- (Some("a/package"),
+ (Some("a/index"),
"""class A extends AnyRef
Some doc here
Some doc here
Annotations @DeveloperApi()
""", true),
- (Some("a/package"),
+ (Some("a/index"),
"""class B extends AnyRef
Annotations @DeveloperApi()
""", true)
@@ -771,12 +731,17 @@ object Test extends Properties("HtmlFactory") {
def assertTypeLink(expectedUrl: String): Boolean = {
val linkElement: NodeSeq = node \\ "div" \@ ("id", "definition") \\ "span" \@ ("class", "permalink") \ "a"
- linkElement \@ "href" == expectedUrl && linkElement \@ "target" == "_top"
+ linkElement \@ "href" == expectedUrl
}
def assertMemberLink(group: String)(memberName: String, expectedUrl: String): Boolean = {
val linkElement: NodeSeq = node \\ "div" \@ ("id", group) \\ "li" \@ ("name", memberName) \\ "span" \@ ("class", "permalink") \ "a"
- linkElement \@ "href" == expectedUrl && linkElement \@ "target" == "_top"
+ linkElement \@ "href" == expectedUrl
+ }
+
+ def assertValuesLink(memberName: String, expectedUrl: String): Boolean = {
+ val linkElement: NodeSeq = node \\ "div" \@ ("class", "values members") \\ "li" \@ ("name", memberName) \\ "span" \@ ("class", "permalink") \ "a"
+ linkElement \@ "href" == expectedUrl
}
}
@@ -789,29 +754,31 @@ object Test extends Properties("HtmlFactory") {
case _ => false
}
- property("SI-8144: Members' permalink - package") = check("some/package.html") { node =>
- ("type link" |: node.assertTypeLink("../index.html#some.package")) &&
- ("member: some.pack" |: node.assertMemberLink("values")("some.pack", "../index.html#some.package@pack"))
- }
-
- property("SI-8144: Members' permalink - inner package") = check("some/pack/package.html") { node =>
- ("type link" |: node.assertTypeLink("../../index.html#some.pack.package")) &&
- ("member: SomeType (object)" |: node.assertMemberLink("values")("some.pack.SomeType", "../../index.html#some.pack.package@SomeType")) &&
- ("member: SomeType (class)" |: node.assertMemberLink("types")("some.pack.SomeType", "../../index.html#some.pack.package@SomeTypeextendsAnyRef"))
+ property("SI-8144: Members' permalink - inner package") = check("some/pack/index.html") { node =>
+ ("type link" |: node.assertTypeLink("../../some/pack/index.html")) &&
+ ("member: SomeType (object)" |: node.assertValuesLink("some.pack.SomeType", "../../some/pack/index.html#SomeType")) &&
+ ("member: SomeType (class)" |: node.assertMemberLink("types")("some.pack.SomeType", "../../some/pack/index.html#SomeTypeextendsAnyRef"))
}
property("SI-8144: Members' permalink - companion object") = check("some/pack/SomeType$.html") { node =>
- ("type link" |: node.assertTypeLink("../../index.html#some.pack.SomeType$")) &&
- ("member: someVal" |: node.assertMemberLink("allMembers")("some.pack.SomeType#someVal", "../../index.html#some.pack.SomeType$@someVal:String"))
+ ("type link" |: node.assertTypeLink("../../some/pack/SomeType$.html")) &&
+ ("member: someVal" |: node.assertMemberLink("allMembers")("some.pack.SomeType#someVal", "../../some/pack/SomeType$.html#someVal:String"))
}
property("SI-8144: Members' permalink - class") = check("some/pack/SomeType.html") { node =>
- ("type link" |: node.assertTypeLink("../../index.html#some.pack.SomeType")) &&
- ("constructor " |: node.assertMemberLink("constructors")("some.pack.SomeType#<init>", "../../index.html#some.pack.SomeType@<init>(arg:String):some.pack.SomeType")) &&
- ( "member: type TypeAlias" |: node.assertMemberLink("types")("some.pack.SomeType.TypeAlias", "../../index.html#some.pack.SomeType@TypeAlias=String")) &&
- ( "member: def >#<():Int " |: node.assertMemberLink("values")("some.pack.SomeType#>#<", "../../index.html#some.pack.SomeType@>#<():Int")) &&
- ( "member: def >@<():TypeAlias " |: node.assertMemberLink("values")("some.pack.SomeType#>@<", "../../index.html#some.pack.SomeType@>@<():SomeType.this.TypeAlias"))
+ ("type link" |: node.assertTypeLink("../../some/pack/SomeType.html")) &&
+ ("constructor " |: node.assertMemberLink("constructors")("some.pack.SomeType#<init>", "../../some/pack/SomeType.html#<init>(arg:String):some.pack.SomeType")) &&
+ ( "member: type TypeAlias" |: node.assertMemberLink("types")("some.pack.SomeType.TypeAlias", "../../some/pack/SomeType.html#TypeAlias=String")) &&
+ ( "member: def >#<():Int " |: node.assertValuesLink("some.pack.SomeType#>#<", "../../some/pack/SomeType.html#>#<():Int")) &&
+ ( "member: def >@<():TypeAlias " |: node.assertValuesLink("some.pack.SomeType#>@<", "../../some/pack/SomeType.html#>@<():SomeType.this.TypeAlias"))
}
}
+
+ property("SI-9599 Multiple @todo formatted with comma on separate line") = {
+ createTemplates("SI-9599.scala")("X.html") match {
+ case node: scala.xml.Node => node.text.contains("todo3todo2todo1")
+ case _ => false
+ }
+ }
}
diff --git a/test/scaladoc/scalacheck/IndexScriptTest.scala b/test/scaladoc/scalacheck/IndexScriptTest.scala
index b8b9f92965..61f462186d 100644
--- a/test/scaladoc/scalacheck/IndexScriptTest.scala
+++ b/test/scaladoc/scalacheck/IndexScriptTest.scala
@@ -31,17 +31,14 @@ object Test extends Properties("IndexScript") {
def createIndexScript(path: String) =
docFactory.makeUniverse(Left(List(path))) match {
- case Some(universe) => {
- val index = new IndexScript(universe,
- indexModelFactory.makeIndex(universe))
- Some(index)
- }
+ case Some(universe) =>
+ Some(new IndexScript(universe))
case _ =>
None
}
property("allPackages") = {
- createIndexScript("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
+ createIndexScript("src/scaladoc/scala/tools/nsc/doc/html/page/IndexScript.scala") match {
case Some(index) =>
index.allPackages.map(_.toString) == List(
"scala",
diff --git a/test/scaladoc/scalacheck/IndexTest.scala b/test/scaladoc/scalacheck/IndexTest.scala
deleted file mode 100644
index 7dbd2103a6..0000000000
--- a/test/scaladoc/scalacheck/IndexTest.scala
+++ /dev/null
@@ -1,95 +0,0 @@
-import org.scalacheck._
-import org.scalacheck.Prop._
-
-import scala.tools.nsc.doc
-import scala.tools.nsc.doc.html.page.Index
-import java.net.{URLClassLoader, URLDecoder}
-
-object Test extends Properties("Index") {
-
- def getClasspath = {
- // these things can be tricky
- // this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
- // does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
- // this test _will_ fail again some time in the future.
- // Footnote: java.lang.ClassCastException: org.apache.tools.ant.loader.AntClassLoader5 cannot be cast to java.net.URLClassLoader
- val loader = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader]
- val paths = loader.getURLs.map(u => URLDecoder.decode(u.getPath))
- paths mkString java.io.File.pathSeparator
- }
-
- val docFactory = {
- val settings = new doc.Settings({Console.err.println(_)})
- settings.scaladocQuietRun = true
- settings.nowarn.value = true
- settings.classpath.value = getClasspath
-
- val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
- new doc.DocFactory(reporter, settings)
- }
-
- val indexModelFactory = doc.model.IndexModelFactory
-
- def createIndex(path: String): Option[Index] = {
-
- val maybeUniverse = {
- //val stream = new java.io.ByteArrayOutputStream
- //val original = Console.out
- //Console.setOut(stream)
-
- val result = docFactory.makeUniverse(Left(List(path)))
-
- // assert(stream.toString == "model contains 2 documentable templates\n")
- //Console.setOut(original)
-
- result
- }
-
- maybeUniverse match {
- case Some(universe) => {
- val index = new Index(universe, indexModelFactory.makeIndex(universe))
- return Some(index)
- }
- case _ => return None
- }
-
- }
-
- property("path") = {
- createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
- case Some(index) =>
- index.path == List("index.html")
- case None => false
- }
- }
-
- property("title") = {
- createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
- case Some(index) =>
- index.title == ""
-
- case None => false
- }
- }
- property("browser contains a script element") = {
- createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
- case Some(index) =>
- (index.browser \ "script").size == 1
-
- case None => false
- }
- }
- property("package objects in index") = {
- createIndex("test/scaladoc/resources/SI-5558.scala") match {
- case Some(index) =>
- index.index.firstLetterIndex('f') isDefinedAt "foo"
- case None => false
- }
- }
- property("index should report if there are deprecated members") = {
- createIndex("test/scaladoc/resources/SI-4476.scala") match {
- case Some(indexPage) => indexPage.index.hasDeprecatedMembers
- case None => false
- }
- }
-}