diff options
-rw-r--r-- | build-ant-macros.xml | 9 | ||||
-rwxr-xr-x | build.xml | 239 | ||||
-rw-r--r-- | doc/LICENSE.md (renamed from docs/LICENSE) | 21 | ||||
-rw-r--r-- | doc/License.rtf | 65 | ||||
-rw-r--r-- | doc/README (renamed from docs/README) | 2 | ||||
-rw-r--r-- | doc/licenses/apache_jansi.txt (renamed from docs/licenses/apache_jansi.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/bsd_asm.txt (renamed from docs/licenses/bsd_asm.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/bsd_jline.txt (renamed from docs/licenses/bsd_jline.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/mit_jquery-layout.txt (renamed from docs/licenses/mit_jquery-layout.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/mit_jquery-ui.txt (renamed from docs/licenses/mit_jquery-ui.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/mit_jquery.txt (renamed from docs/licenses/mit_jquery.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/mit_sizzle.txt (renamed from docs/licenses/mit_sizzle.txt) | 0 | ||||
-rw-r--r-- | doc/licenses/mit_tools.tooltip.txt (renamed from docs/licenses/mit_tools.tooltip.txt) | 0 | ||||
-rw-r--r-- | src/build/maven/maven-deploy.xml | 171 | ||||
-rw-r--r-- | src/build/maven/scala-compiler-pom.xml | 2 | ||||
-rw-r--r-- | src/build/maven/scala-dist-pom.xml | 75 | ||||
-rw-r--r-- | src/build/maven/scala-library-all-pom.xml | 99 | ||||
-rw-r--r-- | src/library/scala/collection/immutable/NumericRange.scala | 33 | ||||
-rw-r--r-- | src/library/scala/collection/immutable/Range.scala | 21 | ||||
-rw-r--r-- | src/library/scala/runtime/AbstractPartialFunction.scala | 12 | ||||
-rw-r--r-- | src/manual/scala/man1/scala.scala | 6 | ||||
-rw-r--r-- | src/manual/scala/man1/scalac.scala | 185 | ||||
-rw-r--r-- | src/swing/scala/swing/Publisher.scala | 174 | ||||
-rw-r--r-- | test/files/scalacheck/range.scala | 41 | ||||
-rw-r--r-- | test/pending/presentation/context-bounds1.check (renamed from test/files/presentation/context-bounds1.check) | 0 | ||||
-rw-r--r-- | test/pending/presentation/context-bounds1/Test.scala (renamed from test/files/presentation/context-bounds1/Test.scala) | 0 | ||||
-rw-r--r-- | test/pending/presentation/context-bounds1/src/ContextBounds.scala (renamed from test/files/presentation/context-bounds1/src/ContextBounds.scala) | 0 | ||||
-rw-r--r-- | test/pending/run/reflection-sync-potpourri.scala (renamed from test/files/run/reflection-sync-potpourri.scala) | 0 | ||||
-rw-r--r-- | versions.properties | 4 |
29 files changed, 755 insertions, 404 deletions
diff --git a/build-ant-macros.xml b/build-ant-macros.xml index 593f93b784..0b92f1dab1 100644 --- a/build-ant-macros.xml +++ b/build-ant-macros.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<project name="build-support"> +<project name="build-support" xmlns:artifact="urn:maven-artifact-ant"> <description> Macros for Scala's ant build </description> <macrodef name="optimized"> @@ -451,8 +451,8 @@ <attribute name="project"/> <sequential> <local name="artifact-base"/> - <property name="artifact-base" value="${maven-base}/${@{project}.dir}${@{project}.name}/${@{project}.name}"/> - <mkdir dir="${maven-base}/${@{project}.dir}${@{project}.name}"/> + <property name="artifact-base" value="${dist.maven}/${@{project}.dir}${@{project}.name}/${@{project}.name}"/> + <mkdir dir="${dist.maven}/${@{project}.dir}${@{project}.name}"/> <copy tofile="${artifact-base}.jar" file="${build-osgi.dir}/org.scala-lang.${@{project}.package}${@{project}.name}${@{project}.namesuffix}.jar" overwrite="true"/> <copy tofile="${artifact-base}-src.jar" file="${build-osgi.dir}/${@{project}.name}-src.jar" overwrite="true"/> <copy tofile="${artifact-base}-pom.xml" file="${src.dir}/build/maven/${@{project}.dir}/${@{project}.name}-pom.xml" overwrite="true"/> @@ -469,7 +469,8 @@ </sequential> </macrodef> - + <!-- TODO inline maven-deploy.xml's macrodefs, remove maven-deploy.xml --> + <include file="src/build/maven/maven-deploy.xml" as="deploy-macros"/> <macrodef name="testSuite"> <attribute name="dir" default="${partest.dir}"/> @@ -4,17 +4,14 @@ xmlns:artifact="urn:maven-artifact-ant" xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors"> <include file="build-ant-macros.xml" as="macros"/> - <include file="src/build/maven/maven-deploy.xml" as="maven-deploy"/> <description> SuperSabbus for Scala core, builds the scala library and compiler. It can also package it as a simple distribution, tests it for stable bootstrapping and against the Scala test suite. </description> <!-- HINTS - - for faster builds, have a build.properties in the same directory as build.xml that says: locker.skip=1 - --> <!-- USAGE FROM JENKINS SCRIPTS IS (CURRENTLY) AS FOLLOWS: @@ -27,11 +24,14 @@ antArgs tend to be: scalacArgs examples: "-Dscalac.args=\"-Yrangepos\" -Dpartest.scalac_opts=\"-Yrangepos\"" -targets exercised: - deploy-core.snapshot publish-opt-nodocs distpack-maven-opt nightly locker.done build build-opt test.suite test.continuations.suite test.scaladoc +supported/exercised targets + to publish: nightly publish-opt-nodocs + to build: build build-opt locker.done + to run tests: test.suite test.scaladoc + +DO NOT RELY ON ANY OTHER TARGETS (ok, you're probably ok assuming the ones defined in the first 100 lines of this file) -NOTE: after distpack-maven-opt, it is expected there's a build file in dists/maven/latest that defines targets deploy and deploy.local -TODO: get rid of this separate step +NOTE: dists/maven/latest/build.xml will soon disappear; call `publish` in this build instead --> <!-- To use Zinc with the ant build: @@ -70,7 +70,6 @@ TODO: <!-- packaging --> <target name="distpack" depends="pack-archives.done, pack-maven.done"/> <target name="distpack-maven" depends="pack-maven.done"/> - <target name="distpack-opt" description="Builds an optimised distribution."> <optimized name="distpack"/></target> <target name="distpack-maven-opt" description="Builds an optimised maven distribution."><optimized name="distpack-maven"/></target> @@ -81,7 +80,6 @@ TODO: <param name="scalac.args.optimise" value="-optimise"/> </antcall> </target> - <target name="publish-core-opt-nodocs" description="Builds an untested, undocumented optimised core (library/reflect/compiler) and publishes to maven."> <antcall target="publish-core"> <param name="docs.skip" value="1"/> @@ -93,24 +91,22 @@ TODO: <param name="docs.skip" value="1"/> </antcall> </target> - <target name="all.done" depends="test.done, distpack"/> - <target name="nightly-nopt" depends="all.done"/> <target name="nightly"><optimized name="nightly-nopt"/></target> - <target name="nightly.checkall"> <antcall target="nightly-nopt"> <param name="partest.scalac_opts" value="-Ycheck:all"/></antcall></target> + <!-- prefer the sbt names, but the dotted names are used in jenkins; + rename there first before dropping the dotted ones --> + <target name="publish-local" depends="publish.local"/> + <target name="publish-signed" depends="publish.signed"/> + <target name="clean" depends="quick.clean" description="Removes binaries of compiler and library. Locker and distributions are untouched."/> <target name="docsclean" depends="docs.clean" description="Removes generated documentation. Distributions are untouched."/> <target name="distclean" depends="dist.clean" description="Removes all distributions. Binaries and documentation are untouched."/> - <target name="test.continuations.suite"> - <echo message="DEPRECATED: the continuations have moved to https://github.com/scala/scala-continuations"/> - </target> - <!-- =========================================================================== PROPERTIES ============================================================================ --> @@ -120,7 +116,7 @@ TODO: <property name="build.sysclasspath" value="ignore"/> <!-- Defines the repository layout --> - <property name="docs.dir" value="${basedir}/docs"/> + <property name="doc.dir" value="${basedir}/doc"/> <property name="lib.dir" value="${basedir}/lib"/> <property name="src.dir" value="${basedir}/src"/> <property name="partest.dir" value="${basedir}/test"/> @@ -151,6 +147,7 @@ TODO: <property name="build-locker.dir" value="${build.dir}/locker"/> <property name="build-quick.dir" value="${build.dir}/quick"/> <property name="build-pack.dir" value="${build.dir}/pack"/> + <property name="build-manual.dir" value="${build.dir}/manual"/> <property name="build-osgi.dir" value="${build.dir}/osgi"/> <property name="build-junit.dir" value="${build.dir}/junit"/> <property name="build-strap.dir" value="${build.dir}/strap"/> @@ -401,6 +398,13 @@ TODO: <property name="version.number" value="${version.major}.${version.minor}.${version.patch}${version.suffix}-${git.commit.date}-${git.commit.sha}"/> </else></if> + <!-- some default in case something went wrong getting the revision --> + <property name="version.number" value="-unknown-"/> + + <property name="dist.name" value="scala-${version.number}"/> + <property name="dist.dir" value="${dists.dir}/${dist.name}"/> + <property name="dist.maven" value="${dists.dir}/maven/${version.number}"/> + <condition property="has.java6"> <equals arg1="${ant.java.version}" arg2="1.6"/> </condition> @@ -445,10 +449,6 @@ TODO: <format property="short" pattern="yyyyMMddHHmmss"/> </tstamp> - <!-- some default in case something went wrong getting the revision --> - <property name="version.number" value="-unknown-"/> - <property name="init.avail" value="yes"/> - <!-- Local libs (developer use.) --> <mkdir dir="${lib-extra.dir}"/> @@ -1559,8 +1559,36 @@ TODO: </staged-docs> </target> - <target name="docs.man" depends="docs.start"> - <staged-uptodate stage="docs" project="manual"> + <target name="docs.core" depends="docs.lib, docs.reflect, docs.comp" unless="docs.skip"/> + <!-- TODO modularize compiler: docs.scaladoc, docs.interactive, --> + <target name="docs.done" depends="docs.core, docs.actors, docs.scalap" unless="docs.skip"/> + +<!-- =========================================================================== + DISTRIBUTION +============================================================================ --> + <!-- bin/ --> + <target name="dist.bin" depends="pack.bin"> + <mkdir dir="${dist.dir}/bin"/> + <copy toDir="${dist.dir}/bin" overwrite="true"> + <fileset dir="${build-pack.dir}/bin"/> + </copy> + <chmod perm="ugo+rx" file="${dist.dir}/bin/scala"/> + <chmod perm="ugo+rx" file="${dist.dir}/bin/scalac"/> + <chmod perm="ugo+rx" file="${dist.dir}/bin/scaladoc"/> + <chmod perm="ugo+rx" file="${dist.dir}/bin/fsc"/> + <chmod perm="ugo+rx" file="${dist.dir}/bin/scalap"/> + </target> + + <!-- doc/ and man/ --> + <target name="dist.doc" depends="scaladoc.task" unless="docs.skip"> <!-- depends on scaladoc.task for scalac taskdef --> + <mkdir dir="${dist.dir}/doc"/> + <copy toDir="${dist.dir}/doc" overwrite="true"> + <fileset dir="${doc.dir}"/> + </copy> + + <mkdir dir="${dist.dir}/doc/tools"/> + <mkdir dir="${dist.dir}/man/man1"/> + <staged-uptodate stage="manual" project="manual"> <check><srcfiles dir="${src.dir}/manual"/></check> <do> <mkdir dir="${build.dir}/manmaker/classes"/> @@ -1570,44 +1598,33 @@ TODO: srcdir="${src.dir}/manual" includes="**/*.scala" addparams="${scalac.args.all} -language:implicitConversions"/> - <mkdir dir="${build-docs.dir}/manual/man/man1"/> - <mkdir dir="${build-docs.dir}/manual/html"/> - <mkdir dir="${build-docs.dir}/manual/genman/man1"/> + <mkdir dir="${build-manual.dir}/genman/man1"/> <taskdef name="genman" classname="scala.tools.docutil.ManMaker" classpathref="manual.build.path"/> <genman command="fsc, scala, scalac, scaladoc, scalap" - htmlout="${build-docs.dir}/manual/html" - manout="${build-docs.dir}/manual/genman"/> - <!-- On Windows source and target files can't be the same ! --> - <fixcrlf - srcdir="${build-docs.dir}/manual/genman" - destdir="${build-docs.dir}/manual/man" - eol="unix" includes="**/*.1"/> - <copy todir="${build-docs.dir}/manual/html" overwrite="true"> - <fileset dir="${src.dir}/manual/scala/tools/docutil/resources"> - <include name="**/*.html"/> - <include name="**/*.css"/> - <include name="**/*.gif"/> - <include name="**/*.png"/> - </fileset> - </copy> + htmlout="${dist.dir}/doc/tools" + manout="${build-manual.dir}/genman"/> </do> </staged-uptodate> - </target> - - <target name="docs.core" depends="docs.lib, docs.reflect, docs.comp" unless="docs.skip"/> - <!-- TODO modularize compiler: docs.scaladoc, docs.interactive, --> - <target name="docs.done" depends="docs.core, docs.actors, docs.scalap" unless="docs.skip"/> - -<!-- =========================================================================== - DISTRIBUTION -============================================================================ --> - <target name="dist.base" depends="osgi.done"> - <property name="dist.name" value="scala-${version.number}"/> - <property name="dist.dir" value="${dists.dir}/${dist.name}"/> + <!-- On Windows source and target files can't be the same ! --> + <fixcrlf + srcdir="${build-manual.dir}/genman" + destdir="${dist.dir}/man" + eol="unix" includes="**/*.1"/> + <copy todir="${dist.dir}/doc/tools" overwrite="true"> + <fileset dir="${src.dir}/manual/scala/tools/docutil/resources"> + <include name="**/*.html"/> + <include name="**/*.css"/> + <include name="**/*.gif"/> + <include name="**/*.png"/> + </fileset> + </copy> + </target> + <!-- lib/ and src/ (jars: classes and sources) --> + <target name="dist.lib" depends="osgi.done"> <mkdir dir="${dist.dir}/lib"/> <mkdir dir="${dist.dir}/src"/> @@ -1637,29 +1654,10 @@ TODO: </fileset> </copy> <jar whenmanifestonly="fail" destfile="${dist.dir}/src/scalap-src.jar" basedir="${src.dir}/scalap"/> - - <mkdir dir="${dist.dir}/bin"/> - <copy toDir="${dist.dir}/bin" overwrite="true"> - <fileset dir="${build-pack.dir}/bin"/> - </copy> - <chmod perm="ugo+rx" file="${dist.dir}/bin/scala"/> - <chmod perm="ugo+rx" file="${dist.dir}/bin/scalac"/> - <chmod perm="ugo+rx" file="${dist.dir}/bin/scaladoc"/> - <chmod perm="ugo+rx" file="${dist.dir}/bin/fsc"/> - <chmod perm="ugo+rx" file="${dist.dir}/bin/scalap"/> </target> - - <target name="dist.doc" depends="dist.base, docs.done"> - <mkdir dir="${dist.dir}/doc"/> - <mkdir dir="${dist.dir}/doc/licenses"/> - <mkdir dir="${dist.dir}/doc/tools"/> - <copy file="${docs.dir}/LICENSE" toDir="${dist.dir}/doc" overwrite="true"/> - <copy file="${docs.dir}/README" toDir="${dist.dir}/doc" overwrite="true"/> - <copy toDir="${dist.dir}/doc/licenses" overwrite="true"> - <fileset dir="${docs.dir}/licenses"/> - </copy> - + <!-- api/ (scaladoc) --> + <target name="dist.api" depends="docs.done" unless="docs.skip"> <mkdir dir="${dist.dir}/api"/> <copy toDir="${dist.dir}/api" overwrite="true"> <fileset dir="${build-docs.dir}/library"/> @@ -1674,20 +1672,7 @@ TODO: </copy> </target> - - <target name="dist.man" depends="dist.base, docs.man"> - <mkdir dir="${dist.dir}/man"/> - <copy toDir="${dist.dir}/man" overwrite="true"> - <fileset dir="${build-docs.dir}/manual/man"/> - </copy> - <mkdir dir="${dist.dir}/doc/scala-devel-docs/tools"/> - <copy toDir="${dist.dir}/doc/scala-devel-docs/tools" overwrite="true"> - <fileset dir="${build-docs.dir}/manual/html"/> - </copy> - </target> - - - <target name="dist.partial" depends="dist.base"> + <target name="dist.partial" depends="dist.lib, dist.bin, dist.doc"> <if><not><os family="windows"/></not><then> <symlink link="${dists.dir}/latest" resource="${dist.name}" overwrite="true"/> </then><else> <!-- XXX THIS PROBABLY DOES NOT WORK: copying must happen last during dist.done! is this guaranteed? --> @@ -1695,12 +1680,13 @@ TODO: </else></if> </target> - <target name="dist.done" depends="dist.doc, dist.man, dist.partial"/> + <target name="dist.done" depends="dist.partial, dist.api"/> <!-- =========================================================================== MAIN DISTRIBUTION PACKAGING ============================================================================ --> + <!-- TODO: get rid of this, it's redundant between maven and github --> <target name="pack-archives.done" depends="dist.done, docs.done"> <mkdir dir="${dists.dir}/archives"/> <property name="archive-base" value="${dists.dir}/archives/${dist.name}"/> @@ -1716,7 +1702,7 @@ MAIN DISTRIBUTION PACKAGING <if><not><isset property="docs.skip"/></not><then> <tarz name="${archive-base}-devel-docs"> - <tarfileset dir="${dist.dir}/doc/scala-devel-docs" prefix="${dist.name}-devel-docs"/> + <tarfileset dir="${dist.dir}/api" prefix="${dist.name}-devel-docs"/> </tarz> </then></if> @@ -1761,13 +1747,13 @@ MAIN DISTRIBUTION PACKAGING </target> <target name="pack-maven.core" depends="osgi.core, docs.core"> - <property name="maven-base" value="${dists.dir}/maven/${version.number}"/> - <mkdir dir="${maven-base}"/> - <mvn-package project="library"/> <mvn-package project="reflect"/> <mvn-package project="compiler"/> + <copy tofile="${dist.maven}/scala-library-all/scala-library-all-pom.xml" + file="${src.dir}/build/maven/scala-library-all-pom.xml" overwrite="true"/> + <!-- for replacestarr --> <if><isset property="update.starr.version"/><then> <echo message="From now on, ${maven.version.number} will be used as STARR (`build.properties`'s `starr.version` was modified)."/> @@ -1777,7 +1763,16 @@ MAIN DISTRIBUTION PACKAGING </then></if> </target> - <target name="pack-maven.base" depends="pack-maven.core, osgi.done, docs.done"> + <target name="pack-maven.dist" depends="dist.bin, dist.doc"> + <copy tofile="${dist.maven}/scala-dist/scala-dist-pom.xml" file="${src.dir}/build/maven/scala-dist-pom.xml" overwrite="true"/> + <jar whenmanifestonly="fail" destfile="${dist.maven}/scala-dist/scala-dist.jar" basedir="${dist.dir}"> + <include name="bin/" /> + <include name="doc/" /> + <include name="man/" /> + </jar> + </target> + + <target name="pack-maven.base" depends="pack-maven.core, osgi.done, docs.done, pack-maven.dist"> <!-- TODO modularize compiler <mvn-package project="interactive"/> <mvn-package project="scaladoc"/> @@ -1786,19 +1781,21 @@ MAIN DISTRIBUTION PACKAGING <mvn-package project="actors"/> <!-- don't bother fitting scalap into the mould: it will move out soon --> - <copy tofile="${maven-base}/scalap/scalap-pom.xml" file="${src.dir}/build/maven/scalap-pom.xml" overwrite="true"/> - <copy tofile="${maven-base}/scalap/scalap.jar" file="${scalap.jar}" overwrite="true"/> - <jar destfile="${maven-base}/scalap/scalap-src.jar" basedir="${src.dir}/scalap" whenmanifestonly="fail"/> + <mkdir dir="${dist.maven}"/> + <copy tofile="${dist.maven}/scalap/scalap-pom.xml" file="${src.dir}/build/maven/scalap-pom.xml" overwrite="true"/> + <copy tofile="${dist.maven}/scalap/scalap.jar" file="${scalap.jar}" overwrite="true"/> + <jar destfile="${dist.maven}/scalap/scalap-src.jar" basedir="${src.dir}/scalap" whenmanifestonly="fail"/> <if><not><isset property="docs.skip"/></not><then> - <jar destfile="${maven-base}/scalap/scalap-docs.jar" basedir="${build-docs.dir}/scalap"/> + <jar destfile="${dist.maven}/scalap/scalap-docs.jar" basedir="${build-docs.dir}/scalap"/> </then></if> </target> + <!-- TODO: remove this target and delete src/build/maven-deploy.xml --> <target name="pack-maven.done" depends="pack-maven.base"> <!-- Create dists/maven/latest alias and copy maven-deploy ant build there. --> <if><isset property="os.win"/><then> <copy todir="${dists.dir}/maven/latest" overwrite="true"> - <fileset dir="${maven-base}"/> + <fileset dir="${dist.maven}"/> </copy> </then><else> <symlink link="${dists.dir}/maven/latest" @@ -1806,17 +1803,17 @@ MAIN DISTRIBUTION PACKAGING overwrite="true"/> </else></if> <!-- copy build file and its dependencies --> - <copy todir="${maven-base}" + <copy todir="${dist.maven}" file="${lib-ant.dir}/ant-contrib.jar" overwrite="true"/> - <copy todir="${maven-base}" + <copy todir="${dist.maven}" file="${lib-ant.dir}/maven-ant-tasks-2.1.1.jar" overwrite="true"/> - <copy tofile="${maven-base}/build.xml" + <copy tofile="${dist.maven}/build.xml" file="${src.dir}/build/maven/maven-deploy.xml"/> <!-- export properties for use when deploying --> - <echoproperties destfile="${maven-base}/build.properties"/> + <echoproperties destfile="${dist.maven}/build.properties"/> </target> - <!-- keep these properties out of ${maven-base}/build.properties, dumped in pack-maven.done --> + <!-- keep these properties out of ${dist.maven}/build.properties, dumped in pack-maven.done --> <target name="init.maven" depends="init"> <property name="remote.snapshot.repository" value="https://oss.sonatype.org/content/repositories/snapshots" /> <property name="remote.release.repository" value="https://oss.sonatype.org/service/local/staging/deploy/maven2" /> @@ -1840,20 +1837,34 @@ MAIN DISTRIBUTION PACKAGING <!-- =========================================================================== MAVEN PUBLISHING ============================================================================ --> - <!-- TODO: inline maven-deploy.xml here and remove it, once jenkins jobs no longer rely on it --> - <target name="publish" depends="pack-maven.base, init.maven" description="Publishes unsigned artifacts to the maven repo."> <deploy dir="${maven-base}/"/> </target> - <target name="publish.local" depends="pack-maven.base, init.maven" description="Publishes unsigned artifacts to the local maven repo."> <deploy dir="${maven-base}/" local="true"/> </target> - <target name="publish.signed" depends="pack-maven.base, init.maven" description="Publishes signed artifacts to the remote maven repo."> <deploy dir="${maven-base}/" signed="true"/> </target> + <target name="publish" depends="pack-maven.base, init.maven" description="Publishes unsigned artifacts to the maven repo."> + <deploy /> + <deploy-pom name="scala-library-all"/> + <deploy-jar name="scala-dist"/> + </target> + + <target name="publish.local" depends="pack-maven.base, init.maven" description="Publishes unsigned artifacts to the local maven repo."> + <deploy local="true"/> + <deploy-pom name="scala-library-all" local="true"/> + <deploy-jar name="scala-dist" local="true"/> + </target> + + <target name="publish.signed" depends="pack-maven.base, init.maven" description="Publishes signed artifacts to the remote maven repo."> + <deploy signed="true"/> + <deploy-pom name="scala-library-all" signed="true"/> + <deploy-jar name="scala-dist" signed="true"/> + </target> <target name="publish-core" depends="pack-maven.core, init.maven"> - <deploy-one dir="${maven-base}/" name="scala-compiler" /> - <deploy-one dir="${maven-base}/" name="scala-library" /> - <deploy-one dir="${maven-base}/" name="scala-reflect" /> + <deploy-one name="scala-compiler" /> + <deploy-one name="scala-library" /> + <deploy-one name="scala-reflect" /> </target> + <target name="publish-core-local" depends="pack-maven.core, init.maven"> - <deploy-one dir="${maven-base}/" name="scala-compiler" local="true"/> - <deploy-one dir="${maven-base}/" name="scala-library" local="true"/> - <deploy-one dir="${maven-base}/" name="scala-reflect" local="true"/> + <deploy-one name="scala-compiler" local="true"/> + <deploy-one name="scala-library" local="true"/> + <deploy-one name="scala-reflect" local="true"/> </target> <target name="publish-core-opt" description="Builds an untested optimised core (library/reflect/compiler) and publishes to maven."> diff --git a/docs/LICENSE b/doc/LICENSE.md index 4daedef581..6b039afd68 100644 --- a/docs/LICENSE +++ b/doc/LICENSE.md @@ -11,14 +11,14 @@ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the EPFL nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the EPFL nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -39,18 +39,22 @@ which are also included in the `licenses/` directory: ### [Apache License](http://www.apache.org/licenses/LICENSE-2.0.html) This license is used by the following third-party libraries: + * jansi ### [BSD License](http://www.opensource.org/licenses/bsd-license.php) This license is used by the following third-party libraries: + * jline ### [BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause) This license is used by the following third-party libraries: + * asm ### [MIT License](http://www.opensource.org/licenses/MIT) This license is used by the following third-party libraries: + * jquery * jquery-ui * jquery-layout @@ -59,5 +63,6 @@ This license is used by the following third-party libraries: ### Public Domain The following libraries are freely available in the public domain: + * forkjoin diff --git a/doc/License.rtf b/doc/License.rtf new file mode 100644 index 0000000000..62ec2d023c --- /dev/null +++ b/doc/License.rtf @@ -0,0 +1,65 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\margl1440\margr1440\vieww25140\viewh18960\viewkind0 +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural + +\f0\fs26 \cf0 Scala is licensed under the {\field{\*\fldinst{HYPERLINK "http://opensource.org/licenses/BSD-3-Clause"}}{\fldrslt BSD 3-Clause License}}.\ +\ + +\fs48 Scala License +\fs40 \ + +\fs26 Copyright (c) 2002-2013 EPFL\ +Copyright (c) 2011-2013 Typesafe, Inc.\ +All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ + \'95 Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\ + \'95 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\ + \'95 Neither the name of the EPFL nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\ +\ +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \'93AS IS\'94 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\ + +\fs52 \ + +\fs48 Other Licenses +\fs52 \ + +\fs26 This software includes projects with the following licenses, which are also included in the +\fs24 licenses/ +\fs26 directory:\ + +\fs30 \ +{\field{\*\fldinst{HYPERLINK "http://www.apache.org/licenses/LICENSE-2.0.html"}}{\fldrslt Apache License}}\ + +\fs26 This license is used by the following third-party libraries:\ + \'95 jansi\ + +\fs30 \ +{\field{\*\fldinst{HYPERLINK "http://www.opensource.org/licenses/bsd-license.php"}}{\fldrslt BSD License}}\ + +\fs26 This license is used by the following third-party libraries:\ + \'95 jline\ + +\fs30 \ +{\field{\*\fldinst{HYPERLINK "http://opensource.org/licenses/BSD-3-Clause"}}{\fldrslt BSD 3-Clause License}}\ + +\fs26 This license is used by the following third-party libraries:\ + \'95 asm\ + +\fs30 \ +{\field{\*\fldinst{HYPERLINK "http://www.opensource.org/licenses/MIT"}}{\fldrslt MIT License}}\ + +\fs26 This license is used by the following third-party libraries:\ + \'95 jquery\ + \'95 jquery-ui\ + \'95 jquery-layout\ + \'95 sizzle\ + \'95 tools tooltip\ + +\fs30 \ +Public Domain\ + +\fs26 The following libraries are freely available in the public domain:\ + \'95 forkjoin}
\ No newline at end of file diff --git a/docs/README b/doc/README index 1d5f553d2e..29f64c9fef 100644 --- a/docs/README +++ b/doc/README @@ -13,7 +13,7 @@ Scala Tools - scalac Scala compiler - fsc Scala resident compiler - scaladoc Scala API documentation generator -- scalap Scala classfile decoder +- scalap Scala classfile decoder Run the command "scalac -help" to display the list of available compiler options. diff --git a/docs/licenses/apache_jansi.txt b/doc/licenses/apache_jansi.txt index 067a5a6a34..067a5a6a34 100644 --- a/docs/licenses/apache_jansi.txt +++ b/doc/licenses/apache_jansi.txt diff --git a/docs/licenses/bsd_asm.txt b/doc/licenses/bsd_asm.txt index 8613cd33a2..8613cd33a2 100644 --- a/docs/licenses/bsd_asm.txt +++ b/doc/licenses/bsd_asm.txt diff --git a/docs/licenses/bsd_jline.txt b/doc/licenses/bsd_jline.txt index 3e5dba75da..3e5dba75da 100644 --- a/docs/licenses/bsd_jline.txt +++ b/doc/licenses/bsd_jline.txt diff --git a/docs/licenses/mit_jquery-layout.txt b/doc/licenses/mit_jquery-layout.txt index 4af6a0a4b0..4af6a0a4b0 100644 --- a/docs/licenses/mit_jquery-layout.txt +++ b/doc/licenses/mit_jquery-layout.txt diff --git a/docs/licenses/mit_jquery-ui.txt b/doc/licenses/mit_jquery-ui.txt index be226805d3..be226805d3 100644 --- a/docs/licenses/mit_jquery-ui.txt +++ b/doc/licenses/mit_jquery-ui.txt diff --git a/docs/licenses/mit_jquery.txt b/doc/licenses/mit_jquery.txt index ef2c570469..ef2c570469 100644 --- a/docs/licenses/mit_jquery.txt +++ b/doc/licenses/mit_jquery.txt diff --git a/docs/licenses/mit_sizzle.txt b/doc/licenses/mit_sizzle.txt index d81d30aa0f..d81d30aa0f 100644 --- a/docs/licenses/mit_sizzle.txt +++ b/doc/licenses/mit_sizzle.txt diff --git a/docs/licenses/mit_tools.tooltip.txt b/doc/licenses/mit_tools.tooltip.txt index 27a4dbc788..27a4dbc788 100644 --- a/docs/licenses/mit_tools.tooltip.txt +++ b/doc/licenses/mit_tools.tooltip.txt diff --git a/src/build/maven/maven-deploy.xml b/src/build/maven/maven-deploy.xml index 412d7caab6..a2c3eefbca 100644 --- a/src/build/maven/maven-deploy.xml +++ b/src/build/maven/maven-deploy.xml @@ -1,21 +1,34 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- +THIS FILE WILL SOON SELF DESTRUCT; DO NOT USE +see publish.* targets in /build.xml +--> <project name="sabbus-maven-deploy" xmlns:artifact="urn:maven-artifact-ant"> <description> SuperSabbus extension for deploying a distribution to Maven. THIS FILE IS MEANT TO BE RUN STANDALONE IN THE MAVEN "distpack" DIRECTORY </description> + <macrodef name="deploy-remote"> <attribute name="jar" default=""/> <attribute name="pom"/> <element name="artifacts" implicit="true" optional="true"/> <sequential> - <artifact:deploy file="@{jar}" settingsFile="${settings.file}"> - <artifact:remoteRepository url="${remote.repository}" id="${repository.credentials.id}" /> - <artifact:pom refid="@{pom}" /> - <artifacts/> - </artifact:deploy> + <if><equals arg1="@{jar}" arg2="true"/><then> + <artifact:deploy settingsFile="${settings.file}"> + <artifact:remoteRepository url="${remote.repository}" id="${repository.credentials.id}" /> + <artifact:pom refid="@{pom}" /> + <artifacts/> + </artifact:deploy> + </then><else> + <artifact:deploy file="@{jar}" settingsFile="${settings.file}"> + <artifact:remoteRepository url="${remote.repository}" id="${repository.credentials.id}" /> + <artifact:pom refid="@{pom}" /> + <artifacts/> + </artifact:deploy> + </else></if> </sequential> </macrodef> @@ -24,11 +37,19 @@ <attribute name="pom"/> <element name="artifacts" implicit="true" optional="true"/> <sequential> - <artifact:install file="@{jar}"> - <artifact:localRepository path="${local.repository}" id="${repository.credentials.id}" /> - <artifact:pom refid="@{pom}" /> - <artifacts/> - </artifact:install> + <if><equals arg1="@{jar}" arg2="true"/><then> + <artifact:install> + <artifact:localRepository path="${local.repository}" id="${repository.credentials.id}" /> + <artifact:pom refid="@{pom}" /> + <artifacts/> + </artifact:install> + </then><else> + <artifact:install file="@{jar}"> + <artifact:localRepository path="${local.repository}" id="${repository.credentials.id}" /> + <artifact:pom refid="@{pom}" /> + <artifacts/> + </artifact:install> + </else></if> </sequential> </macrodef> @@ -46,26 +67,25 @@ </sequential> </macrodef> - <macrodef name="deploy-one"> - <attribute name="dir" default=""/> + <macrodef name="filter-pom"> + <attribute name="path" /> <attribute name="name" /> - <attribute name="local" default="false"/> - <attribute name="signed" default="false"/> <sequential> - <local name="path"/> <property name="path" value="@{dir}@{name}/@{name}"/> - - <echo>Deploying ${path}-[pom.xml|src.jar|docs.jar].</echo> - <copy file="${path}-pom.xml" tofile="${path}-pom-filtered.xml" overwrite="true"> <filterset> <filter token="VERSION" value="${maven.version.number}" /> <filter token="SCALA_BINARY_VERSION" value="${scala.binary.version}" /> <filter token="XML_VERSION" value="${scala-xml.version.number}" /> <filter token="PARSER_COMBINATORS_VERSION" value="${scala-parser-combinators.version.number}" /> + <filter token="CONTINUATIONS_PLUGIN_VERSION" value="${scala-continuations-plugin.version.number}" /> + <filter token="CONTINUATIONS_LIBRARY_VERSION" value="${scala-continuations-library.version.number}" /> + <filter token="SCALA_SWING_VERSION" value="${scala-swing.version.number}" /> <filter token="RELEASE_REPOSITORY" value="${remote.release.repository}" /> <filter token="SNAPSHOT_REPOSITORY" value="${remote.snapshot.repository}" /> <filter token="JLINE_VERSION" value="${jline.version}" /> + <filter token="AKKA_ACTOR_VERSION" value="${akka-actor.version.number}" /> + <filter token="ACTORS_MIGRATION_VERSION" value="${actors-migration.version.number}" /> <!-- TODO modularize compiler. <filter token="SCALA_COMPILER_DOC_VERSION" value="${scala-compiler-doc.version.number}" /> @@ -74,6 +94,20 @@ </filterset> </copy> <artifact:pom id="@{name}.pom" file="${path}-pom-filtered.xml" /> + </sequential> + </macrodef> + + <macrodef name="deploy-one"> + <attribute name="name" /> + <attribute name="local" default="false"/> + <attribute name="signed" default="false"/> + + <sequential> + <local name="path"/> <property name="path" value="${dist.maven}/@{name}/@{name}"/> + + <echo>Deploying ${path}-[pom.xml|src.jar|docs.jar].</echo> + + <filter-pom name="@{name}" path="@{path}"/> <if><equals arg1="@{signed}" arg2="false"/><then> <if><isset property="docs.skip"/><then> @@ -108,26 +142,94 @@ </sequential> </macrodef> + <macrodef name="deploy-jar"> + <attribute name="name" /> + <attribute name="local" default="false"/> + <attribute name="signed" default="false"/> + + <sequential> + <local name="path"/> <property name="path" value="${dist.maven}/@{name}/@{name}"/> + + <echo>Deploying ${path}.jar with ${path}-pom.xml.</echo> + + <filter-pom name="@{name}" path="@{path}"/> + + <if><equals arg1="@{signed}" arg2="false"/><then> + <deploy-to local="@{local}" jar="${path}.jar" pom="@{name}.pom"/> + </then><else> + <local name="repo"/> + <if><equals arg1="@{local}" arg2="false"/><then> + <property name="repo" value="${remote.repository}"/> + </then><else> + <property name="repo" value="${local.repository}"/> + </else></if> + <artifact:mvn failonerror="true"> + <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" /> + <arg value="-Durl=${repo}" /> + <arg value="-DrepositoryId=${repository.credentials.id}" /> + <arg value="-DpomFile=${path}-pom-filtered.xml" /> + <arg value= "-Dfile=${path}.jar" /> + <arg value="-Pgpg" /> + <arg value="-Dgpg.useagent=true" /> + </artifact:mvn> + </else></if> + </sequential> + </macrodef> + + <macrodef name="deploy-pom"> + <attribute name="name" /> + <attribute name="local" default="false"/> + <attribute name="signed" default="false"/> + + <sequential> + <local name="path"/> <property name="path" value="${dist.maven}/@{name}/@{name}"/> + + <echo>Deploying ${path}-pom.xml.</echo> + + <filter-pom name="@{name}" path="@{path}"/> + + <if><equals arg1="@{signed}" arg2="false"/><then> + <deploy-to local="@{local}" pom="@{name}.pom"/> + </then><else> + <local name="repo"/> + <if><equals arg1="@{local}" arg2="false"/><then> + <property name="repo" value="${remote.repository}"/> + </then><else> + <property name="repo" value="${local.repository}"/> + </else></if> + <artifact:mvn failonerror="true"> + <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" /> + <arg value="-Durl=${repo}" /> + <arg value="-DrepositoryId=${repository.credentials.id}" /> + <arg value="-DpomFile=${path}-pom-filtered.xml" /> + <arg value= "-Dfile=${path}-pom-filtered.xml" /> + <arg value="-Pgpg" /> + <arg value="-Dgpg.useagent=true" /> + </artifact:mvn> + </else></if> + </sequential> + </macrodef> + <macrodef name="deploy"> - <attribute name="dir" default=""/> <attribute name="local" default="false"/> <attribute name="signed" default="false"/> <sequential> - <deploy-one dir="@{dir}" name="scala-library" local="@{local}" signed="@{signed}"/> - <deploy-one dir="@{dir}" name="scala-reflect" local="@{local}" signed="@{signed}"/> - <deploy-one dir="@{dir}" name="scala-compiler" local="@{local}" signed="@{signed}"/> + <deploy-one name="scala-library" local="@{local}" signed="@{signed}"/> + <deploy-one name="scala-reflect" local="@{local}" signed="@{signed}"/> + <deploy-one name="scala-compiler" local="@{local}" signed="@{signed}"/> <!-- TODO modularize compiler. - <deploy-one dir="@{dir}" name="scala-compiler-doc" local="@{local}" signed="@{signed}"/> - <deploy-one dir="@{dir}" name="scala-compiler-interactive" local="@{local}" signed="@{signed}"/> + <deploy-one name="scala-compiler-doc" local="@{local}" signed="@{signed}"/> + <deploy-one name="scala-compiler-interactive" local="@{local}" signed="@{signed}"/> --> - <deploy-one dir="@{dir}" name="scala-actors" local="@{local}" signed="@{signed}"/> - <deploy-one dir="@{dir}" name="scalap" local="@{local}" signed="@{signed}"/> + <deploy-one name="scala-actors" local="@{local}" signed="@{signed}"/> + <deploy-one name="scalap" local="@{local}" signed="@{signed}"/> </sequential> </macrodef> + <target name="boot.maven"> <!-- Pull in properties from build --> <property file="build.properties" /> @@ -162,7 +264,18 @@ </echo> </target> - <target name="deploy" depends="init.maven" description="Deploys unsigned artifacts to the maven repo."> <deploy/> </target> - <target name="deploy.local" depends="init.maven" description="Deploys unsigned artifacts to the local maven repo."> <deploy local="true"/> </target> - <target name="deploy.signed" depends="init.maven" description="Deploys signed artifacts to the remote maven repo."> <deploy signed="true"/> </target> + <target name="deploy" depends="init.maven" description="Deploys unsigned artifacts to the maven repo."> + <echo message="WARNING!1! THIS TARGET HAS BEEN DEPRECATED -- CALL `ant publish` FROM /build.xml"/> + <deploy/> + </target> + + <target name="deploy.local" depends="init.maven" description="Deploys unsigned artifacts to the local maven repo."> + <echo message="WARNING!1! THIS TARGET HAS BEEN DEPRECATED -- CALL `ant publish.local` FROM /build.xml"/> + <deploy local="true"/> + </target> + + <target name="deploy.signed" depends="init.maven" description="Deploys signed artifacts to the remote maven repo."> + <echo message="WARNING!1! THIS TARGET HAS BEEN DEPRECATED -- CALL `ant publish.signed` FROM /build.xml"/> + <deploy signed="true"/> + </target> </project> diff --git a/src/build/maven/scala-compiler-pom.xml b/src/build/maven/scala-compiler-pom.xml index a16fe22343..4a000b27a1 100644 --- a/src/build/maven/scala-compiler-pom.xml +++ b/src/build/maven/scala-compiler-pom.xml @@ -50,7 +50,7 @@ <artifactId>scala-parser-combinators_@SCALA_BINARY_VERSION@</artifactId> <version>@PARSER_COMBINATORS_VERSION@</version> </dependency> - <dependency> <!-- for scala-compiler-repl--> + <dependency> <!-- for scala-compiler-repl; once it moves there, make it required --> <groupId>jline</groupId> <artifactId>jline</artifactId> <version>@JLINE_VERSION@</version> diff --git a/src/build/maven/scala-dist-pom.xml b/src/build/maven/scala-dist-pom.xml new file mode 100644 index 0000000000..413da928bb --- /dev/null +++ b/src/build/maven/scala-dist-pom.xml @@ -0,0 +1,75 @@ +<?xml version="1.0"?> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.scala-lang</groupId> + <artifactId>scala-dist</artifactId> + <packaging>jar</packaging> + <version>@VERSION@</version> + <name>Scala Distribution Artifacts</name> + <description>The Artifacts Distributed with Scala</description> + <url>http://www.scala-lang.org/</url> + <inceptionYear>2002</inceptionYear> + <organization> + <name>LAMP/EPFL</name> + <url>http://lamp.epfl.ch/</url> + </organization> + <licenses> + <license> + <name>BSD 3-Clause</name> + <url>http://www.scala-lang.org/license.html</url> + <distribution>repo</distribution> + </license> + </licenses> + <scm> + <connection>scm:git:git://github.com/scala/scala.git</connection> + <url>https://github.com/scala/scala.git</url> + </scm> + <issueManagement> + <system>JIRA</system> + <url>https://issues.scala-lang.org/</url> + </issueManagement> + <dependencies> + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-library-all</artifactId> + <version>@VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-compiler</artifactId> + <version>@VERSION@</version> + </dependency> + <!-- duplicated from scala-compiler, where it's optional, + so that resolving scala-dist's transitive dependencies does not include jline, + even though we need to include it in the dist, but macros depending on the compiler + shouldn't have to require jline... + another reason to modularize and move the dependency to scala-compiler-repl + TODO: remove duplication once we have the scala-compiler-repl module --> + <dependency> + <groupId>jline</groupId> + <artifactId>jline</artifactId> + <version>@JLINE_VERSION@</version> + </dependency> + </dependencies> + <distributionManagement> + <repository> + <id>scala-tools.org</id> + <url>@RELEASE_REPOSITORY@</url> + </repository> + <snapshotRepository> + <id>scala-tools.org</id> + <url>@SNAPSHOT_REPOSITORY@</url> + <uniqueVersion>false</uniqueVersion> + </snapshotRepository> + </distributionManagement> + <developers> + <developer> + <id>lamp</id> + <name>EPFL LAMP</name> + </developer> + <developer> + <id>Typesafe</id> + <name>Typesafe, Inc.</name> + </developer> + </developers> +</project> diff --git a/src/build/maven/scala-library-all-pom.xml b/src/build/maven/scala-library-all-pom.xml new file mode 100644 index 0000000000..f34a28e79a --- /dev/null +++ b/src/build/maven/scala-library-all-pom.xml @@ -0,0 +1,99 @@ +<?xml version="1.0"?> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.scala-lang</groupId> + <artifactId>scala-library-all</artifactId> + <packaging>pom</packaging> + <version>@VERSION@</version> + <name>Scala Library Powerpack</name> + <description>The Scala Standard Library and Official Modules</description> + <url>http://www.scala-lang.org/</url> + <inceptionYear>2002</inceptionYear> + <organization> + <name>LAMP/EPFL</name> + <url>http://lamp.epfl.ch/</url> + </organization> + <licenses> + <license> + <name>BSD 3-Clause</name> + <url>http://www.scala-lang.org/license.html</url> + <distribution>repo</distribution> + </license> + </licenses> + <scm> + <connection>scm:git:git://github.com/scala/scala.git</connection> + <url>https://github.com/scala/scala.git</url> + </scm> + <issueManagement> + <system>JIRA</system> + <url>https://issues.scala-lang.org/</url> + </issueManagement> + <dependencies> + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-library</artifactId> + <version>@VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-reflect</artifactId> + <version>@VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang.modules</groupId> + <artifactId>scala-xml_@SCALA_BINARY_VERSION@</artifactId> + <version>@XML_VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang.modules</groupId> + <artifactId>scala-parser-combinators_@SCALA_BINARY_VERSION@</artifactId> + <version>@PARSER_COMBINATORS_VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang.plugins</groupId> + <artifactId>scala-continuations-plugin_@SCALA_BINARY_VERSION@</artifactId> + <version>@CONTINUATIONS_PLUGIN_VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang.plugins</groupId> + <artifactId>scala-continuations-library_@SCALA_BINARY_VERSION@</artifactId> + <version>@CONTINUATIONS_LIBRARY_VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang.modules</groupId> + <artifactId>scala-swing_@SCALA_BINARY_VERSION@</artifactId> + <version>@SCALA_SWING_VERSION@</version> + </dependency> + <dependency> + <groupId>com.typesafe.akka</groupId> + <artifactId>akka-actor_@SCALA_BINARY_VERSION@</artifactId> + <version>@AKKA_ACTOR_VERSION@</version> + </dependency> + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-actors-migration_@SCALA_BINARY_VERSION@</artifactId> + <version>@ACTORS_MIGRATION_VERSION@</version> + </dependency> + </dependencies> + <distributionManagement> + <repository> + <id>scala-tools.org</id> + <url>@RELEASE_REPOSITORY@</url> + </repository> + <snapshotRepository> + <id>scala-tools.org</id> + <url>@SNAPSHOT_REPOSITORY@</url> + <uniqueVersion>false</uniqueVersion> + </snapshotRepository> + </distributionManagement> + <developers> + <developer> + <id>lamp</id> + <name>EPFL LAMP</name> + </developer> + <developer> + <id>Typesafe</id> + <name>Typesafe, Inc.</name> + </developer> + </developers> +</project> diff --git a/src/library/scala/collection/immutable/NumericRange.scala b/src/library/scala/collection/immutable/NumericRange.scala index 486c2b6c8f..249d76584d 100644 --- a/src/library/scala/collection/immutable/NumericRange.scala +++ b/src/library/scala/collection/immutable/NumericRange.scala @@ -175,9 +175,36 @@ extends AbstractSeq[T] with IndexedSeq[T] with Serializable { catch { case _: ClassCastException => false } final override def sum[B >: T](implicit num: Numeric[B]): B = { - if (isEmpty) this.num fromInt 0 - else if (numRangeElements == 1) head - else ((this.num fromInt numRangeElements) * (head + last) / (this.num fromInt 2)) + // arithmetic series formula can be used for regular addition + if ((num eq scala.math.Numeric.IntIsIntegral)|| + (num eq scala.math.Numeric.BigIntIsIntegral)|| + (num eq scala.math.Numeric.ShortIsIntegral)|| + (num eq scala.math.Numeric.ByteIsIntegral)|| + (num eq scala.math.Numeric.CharIsIntegral)|| + (num eq scala.math.Numeric.LongIsIntegral)|| + (num eq scala.math.Numeric.FloatAsIfIntegral)|| + (num eq scala.math.Numeric.BigDecimalIsFractional)|| + (num eq scala.math.Numeric.DoubleAsIfIntegral)) { + val numAsIntegral = num.asInstanceOf[Integral[B]] + import numAsIntegral._ + if (isEmpty) num fromInt 0 + else if (numRangeElements == 1) head + else ((num fromInt numRangeElements) * (head + last) / (num fromInt 2)) + } else { + // user provided custom Numeric, we cannot rely on arithmetic series formula + if (isEmpty) num.zero + else { + var acc = num.zero + var i = head + var idx = 0 + while(idx < length) { + acc = num.plus(acc, i) + i = i + step + idx = idx + 1 + } + acc + } + } } override lazy val hashCode = super.hashCode() diff --git a/src/library/scala/collection/immutable/Range.scala b/src/library/scala/collection/immutable/Range.scala index 00f398a4b0..786b18cd21 100644 --- a/src/library/scala/collection/immutable/Range.scala +++ b/src/library/scala/collection/immutable/Range.scala @@ -259,9 +259,24 @@ extends scala.collection.AbstractSeq[Int] final def contains(x: Int) = isWithinBoundaries(x) && ((x - start) % step == 0) final override def sum[B >: Int](implicit num: Numeric[B]): Int = { - if (isEmpty) 0 - else if (numRangeElements == 1) head - else (numRangeElements.toLong * (head + last) / 2).toInt + if (num eq scala.math.Numeric.IntIsIntegral) { + // this is normal integer range with usual addition. arithmetic series formula can be used + if (isEmpty) 0 + else if (numRangeElements == 1) head + else (numRangeElements.toLong * (head + last) / 2).toInt + } else { + // user provided custom Numeric, we cannot rely on arithmetic series formula + if (isEmpty) num.toInt(num.zero) + else { + var acc = num.zero + var i = head + while(i != terminalElement) { + acc = num.plus(acc, i) + i = i + step + } + num.toInt(acc) + } + } } override def toIterable = this diff --git a/src/library/scala/runtime/AbstractPartialFunction.scala b/src/library/scala/runtime/AbstractPartialFunction.scala index 7129f22f60..986cd0390f 100644 --- a/src/library/scala/runtime/AbstractPartialFunction.scala +++ b/src/library/scala/runtime/AbstractPartialFunction.scala @@ -35,15 +35,3 @@ abstract class AbstractPartialFunction[@specialized(scala.Int, scala.Long, scala // let's not make it final so as not to confuse anyone /*final*/ def apply(x: T1): R = applyOrElse(x, PartialFunction.empty) } - -// Manual stand-ins for formerly specialized variations. -// Not comprehensive, only sufficent to run scala-check built scala 2.11.0-M5 -// TODO Scala 2.10.0.M6 Remove this once scalacheck is published against M6. -private[runtime] abstract class AbstractPartialFunction$mcIL$sp extends scala.runtime.AbstractPartialFunction[Any, Int] { - override def apply(x: Any): Int = apply$mcIL$sp(x) - def apply$mcIL$sp(x: Any): Int = applyOrElse(x, PartialFunction.empty) -} -private[runtime] abstract class AbstractPartialFunction$mcFL$sp extends scala.runtime.AbstractPartialFunction[Any, Float] { - override def apply(x: Any): Float = apply$mcIL$sp(x) - def apply$mcIL$sp(x: Any): Float = applyOrElse(x, PartialFunction.empty) -} diff --git a/src/manual/scala/man1/scala.scala b/src/manual/scala/man1/scala.scala index f48b99bd5a..6b3be8b77f 100644 --- a/src/manual/scala/man1/scala.scala +++ b/src/manual/scala/man1/scala.scala @@ -39,16 +39,16 @@ object scala extends Command { CmdOptionBound("howtorun:", Argument("how")), "How to execute " & Argument("torun") & ", if it is present. " & "Options for " & Argument("how") & " are " & Mono("guess") & - " (the default), " & Mono("script") & ", and " & Mono("object") & + " (the default), " & Mono("script") & ", " & Mono("jar") & ", and " & Mono("object") & "."), Definition( - CmdOption("i"), + CmdOption("i", Argument("file")), "Requests that a file be pre-loaded. It is only " & "meaningful for interactive shells."), Definition( - CmdOption("e"), + CmdOption("e", Argument("string")), "Requests that its argument be executed as Scala code."), Definition( diff --git a/src/manual/scala/man1/scalac.scala b/src/manual/scala/man1/scalac.scala index 1c0c7c4a96..52e918595c 100644 --- a/src/manual/scala/man1/scalac.scala +++ b/src/manual/scala/man1/scalac.scala @@ -109,6 +109,9 @@ object scalac extends Command { CmdOption("extdirs", Argument("dirs")), "Override location of installed extensions."), Definition( + CmdOption("feature"), + "Emit warning and location for usages of features that should be imported explicitly."), + Definition( CmdOptionBound("g:", "{none,source,line,vars,notailcalls}"), SeqPara( Mono("\"none\"") & " generates no debugging info,", @@ -128,6 +131,9 @@ object scalac extends Command { CmdOption("javaextdirs", Argument("path")), "Override Java extdirs classpath."), Definition( + CmdOptionBound("language:", Argument("feature")), + "Enable one or more language features."), + Definition( CmdOption("no-specialization"), "Ignore " & MItalic("@specialize") & " annotations."), Definition( @@ -146,6 +152,12 @@ object scalac extends Command { CmdOption("sourcepath", Argument("path")), "Specify location(s) of source files."), Definition( + CmdOptionBound("target:", "{jvm-1.5,jvm-1.6,jvm-1.7}"), + SeqPara( + Mono("\"jvm-1.5\"") & " target JVM 1.5 (deprecated),", + Mono("\"jvm-1.6\"") & " target JVM 1.6 (default),", + Mono("\"jvm-1.7\"") & " target JVM 1.7,")), + Definition( CmdOption("toolcp", Argument("path")), "Add to the runner classpath."), Definition( @@ -159,6 +171,12 @@ object scalac extends Command { CmdOption("uniqid"), "Uniquely tag all identifiers in debugging output."), Definition( + CmdOption("usejavacp"), + "Utilize the java.class.path in classpath resolution."), + Definition( + CmdOption("usemanifestcp"), + "Utilize the manifest in classpath resolution."), + Definition( CmdOption("verbose"), "Output messages about what the compiler is doing"), Definition( @@ -175,11 +193,11 @@ object scalac extends Command { Section("Advanced Options", DefinitionList( Definition( - CmdOption("Xcheck-null"), - "Warn upon selection of nullable reference"), - Definition( CmdOption("Xcheckinit"), "Wrap field accessors to throw an exception on uninitialized access."), + Definition( + CmdOption("Xdev"), + "Enable warnings for developers working on the Scala compiler"), Definition( CmdOption("Xdisable-assertions"), "Generate no assertions and assumptions"), @@ -193,6 +211,9 @@ object scalac extends Command { Definition( CmdOption("Xfatal-warnings"), "Fail the compilation if there are any warnings."), + Definition( + CmdOption("Xfull-lubs"), + "Retain pre 2.10 behavior of less aggressive truncation of least upper bounds."), Definition( CmdOption("Xfuture"), "Turn on future language features."), @@ -202,18 +223,39 @@ object scalac extends Command { Definition( CmdOption("Xlint"), "Enable recommended additional warnings."), + Definition( + CmdOption("Xlog-free-terms"), + "Print a message when reification creates a free term."), + Definition( + CmdOption("Xlog-free-types"), + "Print a message when reification resorts to generating a free type."), + Definition( + CmdOption("Xlog-implicit-conversions"), + "Print a message whenever an implicit conversion is inserted."), Definition( CmdOption("Xlog-implicits"), "Show more detail on why some implicits are not applicable."), + Definition( + CmdOption("Xlog-reflective-calls"), + "Print a message when a reflective method call is generated."), + Definition( + CmdOptionBound("Xmacro-settings:", Argument("option")), + "Custom settings for macros."), + Definition( + CmdOption("Xmain-class", Argument("path")), + "Class for manifest's Main-Class entry (only useful with -d <jar>)."), Definition( CmdOption("Xmax-classfile-name", Argument("n")), "Maximum filename length for generated classes."), Definition( - CmdOption("Xmigration"), - "Warn about constructs whose behavior may have changed between 2.7 and 2.8."), + CmdOptionBound("Xmigration:", Argument("version")), + "Warn about constructs whose behavior may have changed since" & Argument("version") & "."), Definition( CmdOption("Xno-forwarders"), "Do not generate static forwarders in mirror classes."), + Definition( + CmdOption("Xno-patmat-analysis"), + "Don't perform exhaustivity/unreachability analysis. Also, ignore " & MItalic("@switch") & " annotation."), Definition( CmdOption("Xno-uescape"), "Disable handling of " & BSlash & "u unicode escapes"), @@ -221,26 +263,26 @@ object scalac extends Command { CmdOption("Xnojline"), "Do not use JLine for editing."), Definition( - CmdOptionBound("Xplugin:", Argument("file")), - "Load a plugin from a file"), + CmdOptionBound("Xplugin:", Argument("paths")), + "Load a plugin from each classpath."), Definition( CmdOptionBound("Xplugin-disable:", Argument("plugin")), - "Disable a plugin"), + "Disable plugins by name."), Definition( CmdOption("Xplugin-list"), - "Print a synopsis of loaded plugins"), + "Print a synopsis of loaded plugins."), Definition( CmdOptionBound("Xplugin-require:", Argument("plugin")), - "Abort unless the given plugin(s) are available"), + "Abort if a named plugin is not loaded."), Definition( CmdOption("Xpluginsdir", Argument("path")), - "Path to search compiler plugins."), + "Path to search for plugin archives."), Definition( CmdOptionBound("Xprint:", Argument("phases")), "Print out program after " & Argument("phases") & " (see below)."), Definition( - CmdOption("Xprint-icode"), - "Log internal icode to *.icode files."), + CmdOptionBound("Xprint-icode", "[:" & Argument("phases") & "]"), + "Log internal icode to *.icode files after" & Argument("phases") & " (default: icode)."), Definition( CmdOption("Xprint-pos"), "Print tree positions, as offsets."), @@ -269,9 +311,12 @@ object scalac extends Command { Definition( CmdOption("Xsource-reader", Argument("classname")), "Specify a custom method for reading source files."), + Definition( + CmdOption("Xstrict-inference"), + "Don't infer known-unsound types."), Definition( CmdOption("Xverify"), - "Verify generic signatures in generated bytecode."), + "Verify generic signatures in generated bytecode (asm backend only)."), Definition( CmdOption("Y"), "Print a synopsis of private options.") @@ -281,65 +326,101 @@ object scalac extends Command { Section("Compilation Phases", DefinitionList( Definition( - MItalic("initial"), - "initializing compiler"), - Definition( - MItalic("parse"), - "parse source files"), + MItalic("parser"), + "parse source into ASTs, perform simple desugaring"), Definition( MItalic("namer"), - "create symbols"), + "resolve names, attach symbols to named trees"), + Definition( + MItalic("packageobjects"), + "load package objects"), + Definition( + MItalic("typer"), + "the meat and potatoes: type the trees"), + Definition( + MItalic("patmat"), + "translate match expressions"), + Definition( + MItalic("superaccessors"), + "add super accessors in traits and nested classes"), + Definition( + MItalic("extmethods"), + "add extension methods for inline classes"), + Definition( + MItalic("pickler"), + "serialize symbol tables"), + Definition( + MItalic("refchecks"), + "reference/override checking, translate nested objects"), + Definition( + MItalic("selectiveanf"), + "ANF pre-transform for " & MItalic("@cps") & " (CPS plugin)"), + Definition( + MItalic("selectivecps"), + MItalic("@cps") & "-driven transform of selectiveanf assignements (CPS plugin)"), + Definition( + MItalic("uncurry"), + "uncurry, translate function values to anonymous classes"), Definition( - MItalic("analyze"), - "name and type analysis"), + MItalic("tailcalls"), + "replace tail calls by jumps"), Definition( - MItalic("refcheck"), - "reference checking"), + MItalic("specialize"), + MItalic("@specialized") & "-driven class and method specialization"), Definition( - MItalic("uncurry"), - "uncurry function types and applications"), + MItalic("explicitouter"), + "this refs to outer pointers, translate patterns"), + Definition( + MItalic("erasure"), + "erase types, add interfaces for traits"), + Definition( + MItalic("posterasure"), + "clean up erased inline classes"), + Definition( + MItalic("lazyvals"), + "allocate bitmaps, translate lazy vals into lazified defs"), Definition( MItalic("lambdalift"), - "lambda lifter"), + "move nested functions to top level"), Definition( - MItalic("typesasvalues"), - "represent types as values"), + MItalic("constructors"), + "move field definitions into constructors"), Definition( - MItalic("addaccessors"), - "add accessors for constructor arguments"), + MItalic("flatten"), + "eliminate inner classes"), Definition( - MItalic("explicitouterclasses"), - "make links from inner classes to enclosing one explicit"), + MItalic("mixin"), + "mixin composition"), Definition( - MItalic("addconstructors"), - "add explicit constructor for each class"), + MItalic("cleanup"), + "platform-specific cleanups, generate reflective calls"), Definition( - MItalic("tailcall"), - "add tail-calls"), + MItalic("delambdafy"), + "remove lambdas"), Definition( - MItalic("wholeprog"), - "perform whole program analysis"), + MItalic("icode"), + "generate portable intermediate code"), Definition( - MItalic("addinterfaces"), - "add one interface per class"), + MItalic("inliner"), + "optimization: do inlining"), Definition( - MItalic("expandmixins"), - "expand mixins by code copying"), + MItalic("inlineHandlers"), + "optimization: inline exception handlers"), Definition( - MItalic("boxing"), - "makes boxing explicit"), + MItalic("closelim"), + "optimization: eliminate uncalled closures"), Definition( - MItalic("erasure"), - "type eraser"), + MItalic("constopt"), + "optimization: optimize null and other constants"), Definition( - MItalic("icode"), - "generate icode"), + MItalic("dce"), + "optimization: eliminate dead code"), Definition( - MItalic("codegen"), - "enable code generation"), + MItalic("jvm"), + "generate JVM bytecode"), Definition( MItalic("terminal"), - "compilation terminated"), + "the last phase in the compiler chain"), Definition( MItalic("all"), "matches all phases")))) diff --git a/src/swing/scala/swing/Publisher.scala b/src/swing/scala/swing/Publisher.scala deleted file mode 100644 index 578ef71e09..0000000000 --- a/src/swing/scala/swing/Publisher.scala +++ /dev/null @@ -1,174 +0,0 @@ -/* __ *\ -** ________ ___ / / ___ Scala API ** -** / __/ __// _ | / / / _ | (c) 2007-2013, LAMP/EPFL ** -** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** -** /____/\___/_/ |_/____/_/ | | ** -** |/ ** -\* */ - -package scala.swing - -import scala.collection.mutable -import mutable.Buffer -import event.Event - -/** <p> - * Notifies registered reactions when an event is published. Publishers are - * also reactors and listen to themselves per default as a convenience. - * </p> - * <p> - * In order to reduce memory leaks, reactions are weakly referenced by default, - * unless they implement <code>Reactions.StronglyReferenced</code>. That way, - * the lifetime of reactions are more easily bound to the registering object, - * which are reactors in common client code and hold strong references to their - * reactions. As a result, reactors can be garbage collected even though they - * still have reactions registered at some publisher, but not vice versa - * since reactors (strongly) reference publishers they are interested in. - * </p> - */ -trait Publisher extends Reactor { - import Reactions._ - - protected val listeners = new RefSet[Reaction] { - import scala.ref._ - val underlying = new mutable.HashSet[Reference[Reaction]] - protected def Ref(a: Reaction) = a match { - case a: StronglyReferenced => new StrongReference[Reaction](a) with super.Ref[Reaction] - case _ => new WeakReference[Reaction](a, referenceQueue) with super.Ref[Reaction] - } - } - - private[swing] def subscribe(listener: Reaction) { listeners += listener } - private[swing] def unsubscribe(listener: Reaction) { listeners -= listener } - - /** - * Notify all registered reactions. - */ - def publish(e: Event) { for (l <- listeners) if (l.isDefinedAt(e)) l(e) } - - listenTo(this) -} - -/** - * A publisher that subscribes itself to an underlying event source not before the first - * reaction is installed. Can unsubscribe itself when the last reaction is uninstalled. - */ -private[swing] trait LazyPublisher extends Publisher { - import Reactions._ - - protected def onFirstSubscribe() - protected def onLastUnsubscribe() - - override def subscribe(listener: Reaction) { - if(listeners.size == 1) onFirstSubscribe() - super.subscribe(listener) - } - override def unsubscribe(listener: Reaction) { - super.unsubscribe(listener) - if(listeners.size == 1) onLastUnsubscribe() - } -} - - - -import scala.ref._ - -private[swing] trait SingleRefCollection[+A <: AnyRef] extends Iterable[A] { self => - - trait Ref[+A <: AnyRef] extends Reference[A] { - override def hashCode() = get match { - case Some(x) => x.## - case _ => 0 - } - override def equals(that: Any) = that match { - case that: ReferenceWrapper[_] => - val v1 = this.get - val v2 = that.get - v1 == v2 - case _ => false - } - } - - //type Ref <: Reference[A] // TODO: could use higher kinded types, but currently crashes - protected[this] def Ref(a: A): Ref[A] - protected[this] val referenceQueue = new ReferenceQueue[A] - - protected val underlying: Iterable[Reference[A]] - - def purgeReferences() { - var ref = referenceQueue.poll - while (ref != None) { - removeReference(ref.get.asInstanceOf[Reference[A]]) - ref = referenceQueue.poll - } - } - - protected[this] def removeReference(ref: Reference[A]) - - def iterator = new Iterator[A] { - private val elems = self.underlying.iterator - private var hd: A = _ - private var ahead: Boolean = false - private def skip(): Unit = - while (!ahead && elems.hasNext) { - // make sure we have a reference to the next element, - // otherwise it might be garbage collected - val next = elems.next.get - ahead = next != None - if (ahead) hd = next.get - } - def hasNext: Boolean = { skip; ahead } - def next(): A = - if (hasNext) { ahead = false; hd } - else throw new NoSuchElementException("next on empty iterator") - } -} - -private[swing] class StrongReference[+T <: AnyRef](value: T) extends Reference[T] { - private[this] var ref: Option[T] = Some(value) - def isValid: Boolean = ref != None - def apply(): T = ref.get - def get : Option[T] = ref - override def toString = get.map(_.toString).getOrElse("<deleted>") - def clear() { ref = None } - def enqueue(): Boolean = false - def isEnqueued(): Boolean = false - } - -abstract class RefBuffer[A <: AnyRef] extends Buffer[A] with SingleRefCollection[A] { self => - protected val underlying: Buffer[Reference[A]] - - def +=(el: A): this.type = { purgeReferences(); underlying += Ref(el); this } - def +=:(el: A) = { purgeReferences(); Ref(el) +=: underlying; this } - def remove(el: A) { underlying -= Ref(el); purgeReferences(); } - def remove(n: Int) = { val el = apply(n); remove(el); el } - def insertAll(n: Int, iter: Iterable[A]) { - purgeReferences() - underlying.insertAll(n, iter.view.map(Ref(_))) - } - def update(n: Int, el: A) { purgeReferences(); underlying(n) = Ref(el) } - def apply(n: Int) = { - purgeReferences() - var el = underlying(n).get - while (el == None) { - purgeReferences(); el = underlying(n).get - } - el.get - } - - def length = { purgeReferences(); underlying.length } - def clear() { underlying.clear(); purgeReferences() } - - protected[this] def removeReference(ref: Reference[A]) { underlying -= ref } -} - -private[swing] abstract class RefSet[A <: AnyRef] extends mutable.Set[A] with SingleRefCollection[A] { self => - protected val underlying: mutable.Set[Reference[A]] - - def -=(el: A): this.type = { underlying -= Ref(el); purgeReferences(); this } - def +=(el: A): this.type = { purgeReferences(); underlying += Ref(el); this } - def contains(el: A): Boolean = { purgeReferences(); underlying.contains(Ref(el)) } - override def size = { purgeReferences(); underlying.size } - - protected[this] def removeReference(ref: Reference[A]) { underlying -= ref } -} diff --git a/test/files/scalacheck/range.scala b/test/files/scalacheck/range.scala index 6c7c32bfdf..1eb186f303 100644 --- a/test/files/scalacheck/range.scala +++ b/test/files/scalacheck/range.scala @@ -127,6 +127,47 @@ abstract class RangeTest(kind: String) extends Properties("Range "+kind) { (visited == expectedSize(r)) :| str(r) } + property("sum") = forAll(myGen) { r => +// println("----------") +// println("sum "+str(r)) + val rSum = r.sum + val expected = r.length match { + case 0 => 0 + case 1 => r.head + case _ => ((r.head + r.last).toLong * r.length / 2).toInt + } +// println("size: " + r.length) +// println("expected: " + expected) +// println("obtained: " + rSum) + + (rSum == expected) :| str(r) + } + +/* checks that sum respects custom Numeric */ + property("sumCustomNumeric") = forAll(myGen) { r => + val mod = 65536 + object mynum extends Numeric[Int] { + def plus(x: Int, y: Int): Int = (x + y) % mod + override def zero = 0 + + def fromInt(x: Int): Int = ??? + def minus(x: Int, y: Int): Int = ??? + def negate(x: Int): Int = ??? + def times(x: Int, y: Int): Int = ??? + def toDouble(x: Int): Double = ??? + def toFloat(x: Int): Float = ??? + def toInt(x: Int): Int = ((x % mod) + mod * 2) % mod + def toLong(x: Int): Long = ??? + def compare(x: Int, y: Int): Int = ??? + } + + val rSum = r.sum(mynum) + val expected = mynum.toInt(r.sum) + + (rSum == expected) :| str(r) + } + + property("length") = forAll(myGen suchThat (r => expectedSize(r).toInt == expectedSize(r))) { r => // println("length "+str(r)) (r.length == expectedSize(r)) :| str(r) diff --git a/test/files/presentation/context-bounds1.check b/test/pending/presentation/context-bounds1.check index b444de59a4..b444de59a4 100644 --- a/test/files/presentation/context-bounds1.check +++ b/test/pending/presentation/context-bounds1.check diff --git a/test/files/presentation/context-bounds1/Test.scala b/test/pending/presentation/context-bounds1/Test.scala index bec1131c4c..bec1131c4c 100644 --- a/test/files/presentation/context-bounds1/Test.scala +++ b/test/pending/presentation/context-bounds1/Test.scala diff --git a/test/files/presentation/context-bounds1/src/ContextBounds.scala b/test/pending/presentation/context-bounds1/src/ContextBounds.scala index 72a8f694a3..72a8f694a3 100644 --- a/test/files/presentation/context-bounds1/src/ContextBounds.scala +++ b/test/pending/presentation/context-bounds1/src/ContextBounds.scala diff --git a/test/files/run/reflection-sync-potpourri.scala b/test/pending/run/reflection-sync-potpourri.scala index 0ad5f2ab66..0ad5f2ab66 100644 --- a/test/files/run/reflection-sync-potpourri.scala +++ b/test/pending/run/reflection-sync-potpourri.scala diff --git a/versions.properties b/versions.properties index 90448dc49a..62ba7ac379 100644 --- a/versions.properties +++ b/versions.properties @@ -12,6 +12,10 @@ scala-continuations-plugin.version.number=1.0.0-RC2 scala-continuations-library.version.number=1.0.0-RC2 scala-swing.version.number=1.0.0-RC2 +# these ship with distribution (and scala-library-all depends on them) +akka-actor.version.number=2.2.3 +actors-migration.version.number=1.0.0 + # external modules, used internally (not shipped) partest.version.number=1.0.0-RC8 scalacheck.version.number=1.11.1 |