Showing with 19,875 additions and 18,549 deletions.
  1. +3 −2 build.xml
  2. +201 −0 changes.md
  3. +12 −12 pom.xml
  4. +27 −29 readme.txt
  5. +151 −27 src/clj/clojure/core.clj
  6. +22 −0 src/clj/clojure/core/protocols.clj
  7. +10 −43 src/clj/clojure/core/reducers.clj
  8. +161 −5 src/clj/clojure/core/server.clj
  9. +37 −15 src/clj/clojure/core_deftype.clj
  10. +0 −17 src/clj/clojure/core_instant18.clj
  11. +47 −13 src/clj/clojure/core_print.clj
  12. +1 −1 src/clj/clojure/core_proxy.clj
  13. +62 −0 src/clj/clojure/datafy.clj
  14. +4 −4 src/clj/clojure/genclass.clj
  15. +1 −1 src/clj/clojure/gvec.clj
  16. +15 −12 src/clj/clojure/instant.clj
  17. +1 −1 src/clj/clojure/java/browse_ui.clj
  18. +3 −2 src/clj/clojure/java/javadoc.clj
  19. +195 −21 src/clj/clojure/main.clj
  20. +1 −1 src/clj/clojure/pprint/cl_format.clj
  21. +17 −5 src/clj/clojure/reflect/java.clj
  22. +3 −0 src/clj/clojure/repl.clj
  23. +6 −2 src/clj/clojure/stacktrace.clj
  24. +2 −1 src/clj/clojure/test.clj
  25. +2 −1 src/clj/clojure/walk.clj
  26. +126 −145 src/jvm/clojure/asm/AnnotationVisitor.java
  27. +381 −281 src/jvm/clojure/asm/AnnotationWriter.java
  28. +297 −229 src/jvm/clojure/asm/Attribute.java
  29. +328 −274 src/jvm/clojure/asm/ByteVector.java
  30. +3,479 −2,114 src/jvm/clojure/asm/ClassReader.java
  31. +309 −254 src/jvm/clojure/asm/ClassVisitor.java
  32. +962 −1,684 src/jvm/clojure/asm/ClassWriter.java
  33. +147 −0 src/jvm/clojure/asm/ConstantDynamic.java
  34. +177 −0 src/jvm/clojure/asm/Constants.java
  35. +129 −102 src/jvm/clojure/asm/Context.java
  36. +56 −0 src/jvm/clojure/asm/CurrentFrame.java
  37. +79 −63 src/jvm/clojure/asm/Edge.java
  38. +117 −100 src/jvm/clojure/asm/FieldVisitor.java
  39. +315 −242 src/jvm/clojure/asm/FieldWriter.java
  40. +1,358 −1,344 src/jvm/clojure/asm/Frame.java
  41. +169 −147 src/jvm/clojure/asm/Handle.java
  42. +183 −106 src/jvm/clojure/asm/Handler.java
  43. +0 −311 src/jvm/clojure/asm/Item.java
  44. +598 −537 src/jvm/clojure/asm/Label.java
  45. +776 −652 src/jvm/clojure/asm/MethodVisitor.java
  46. +2,359 −2,631 src/jvm/clojure/asm/MethodWriter.java
  47. +175 −0 src/jvm/clojure/asm/ModuleVisitor.java
  48. +253 −0 src/jvm/clojure/asm/ModuleWriter.java
  49. +316 −327 src/jvm/clojure/asm/Opcodes.java
  50. +240 −0 src/jvm/clojure/asm/Symbol.java
  51. +1,277 −0 src/jvm/clojure/asm/SymbolTable.java
  52. +869 −858 src/jvm/clojure/asm/Type.java
  53. +201 −0 src/jvm/clojure/asm/TypePath.java
  54. +436 −0 src/jvm/clojure/asm/TypeReference.java
  55. +0 −625 src/jvm/clojure/asm/commons/AdviceAdapter.java
  56. +0 −920 src/jvm/clojure/asm/commons/AnalyzerAdapter.java
  57. +0 −217 src/jvm/clojure/asm/commons/CodeSizeEvaluator.java
  58. +1,317 −1,513 src/jvm/clojure/asm/commons/GeneratorAdapter.java
  59. +0 −1,090 src/jvm/clojure/asm/commons/InstructionAdapter.java
  60. +318 −327 src/jvm/clojure/asm/commons/LocalVariablesSorter.java
  61. +224 −243 src/jvm/clojure/asm/commons/Method.java
  62. +0 −533 src/jvm/clojure/asm/commons/SerialVersionUIDAdder.java
  63. +0 −96 src/jvm/clojure/asm/commons/StaticInitMerger.java
  64. +36 −42 src/jvm/clojure/asm/commons/TableSwitchGenerator.java
  65. +0 −48 src/jvm/clojure/asm/commons/package.html
  66. +0 −87 src/jvm/clojure/asm/package.html
  67. +2 −2 src/jvm/clojure/lang/AFn.java
  68. +6 −2 src/jvm/clojure/lang/AFunction.java
  69. +4 −0 src/jvm/clojure/lang/APersistentMap.java
  70. +4 −0 src/jvm/clojure/lang/APersistentVector.java
  71. +1 −1 src/jvm/clojure/lang/ArityException.java
  72. +18 −0 src/jvm/clojure/lang/ArraySeq.java
  73. +162 −28 src/jvm/clojure/lang/Compiler.java
  74. +2 −0 src/jvm/clojure/lang/Cons.java
  75. +2 −0 src/jvm/clojure/lang/Cycle.java
  76. +2 −0 src/jvm/clojure/lang/EnumerationSeq.java
  77. +3 −4 src/jvm/clojure/lang/ISeq.java
  78. +2 −0 src/jvm/clojure/lang/Iterate.java
  79. +2 −0 src/jvm/clojure/lang/IteratorSeq.java
  80. +0 −1 src/jvm/clojure/lang/Keyword.java
  81. +2 −0 src/jvm/clojure/lang/LazySeq.java
  82. +45 −24 src/jvm/clojure/lang/LineNumberingPushbackReader.java
  83. +19 −5 src/jvm/clojure/lang/LispReader.java
  84. +7 −4 src/jvm/clojure/lang/MethodImplCache.java
  85. +80 −12 src/jvm/clojure/lang/Numbers.java
  86. +14 −10 src/jvm/clojure/lang/PersistentArrayMap.java
  87. +12 −6 src/jvm/clojure/lang/PersistentHashMap.java
  88. +2 −0 src/jvm/clojure/lang/PersistentHashSet.java
  89. +4 −0 src/jvm/clojure/lang/PersistentQueue.java
  90. +11 −4 src/jvm/clojure/lang/PersistentTreeMap.java
  91. +2 −0 src/jvm/clojure/lang/PersistentTreeSet.java
  92. +2 −0 src/jvm/clojure/lang/PersistentVector.java
  93. +6 −3 src/jvm/clojure/lang/RT.java
  94. +136 −11 src/jvm/clojure/lang/Reflector.java
  95. +2 −0 src/jvm/clojure/lang/Repeat.java
  96. +2 −0 src/jvm/clojure/lang/Symbol.java
  97. +3 −0 src/jvm/clojure/lang/Var.java
  98. +3 −1 test/clojure/test_clojure/annotations.clj
  99. +6 −5 test/clojure/test_clojure/annotations/{java_6.clj → java_8.clj}
  100. +26 −6 test/clojure/test_clojure/annotations/{java_5.clj → java_9.clj}
  101. +5 −0 test/clojure/test_clojure/clojure_walk.clj
  102. +21 −12 test/clojure/test_clojure/compilation.clj
  103. +5 −2 test/clojure/test_clojure/control.clj
  104. +20 −4 test/clojure/test_clojure/data_structures.clj
  105. +23 −4 test/clojure/test_clojure/errors.clj
  106. +7 −7 test/clojure/test_clojure/evaluation.clj
  107. +21 −6 test/clojure/test_clojure/java_interop.clj
  108. +27 −0 test/clojure/test_clojure/main.clj
  109. +4 −4 test/clojure/test_clojure/ns_libs.clj
  110. +51 −0 test/clojure/test_clojure/numbers.clj
  111. +6 −6 test/clojure/test_clojure/protocols.clj
  112. +28 −3 test/clojure/test_clojure/reader.cljc
  113. +16 −1 test/clojure/test_clojure/reflect.clj
  114. +11 −4 test/clojure/test_clojure/sequences.clj
  115. +13 −3 test/clojure/test_clojure/serialization.clj
  116. +7 −7 test/clojure/test_clojure/special.clj
  117. +19 −0 test/clojure/test_helper.clj
  118. +6 −0 test/java/compilation/JDK8InterfaceMethods.java
5 changes: 3 additions & 2 deletions build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
description="Compile Java sources.">
<javac srcdir="${jsrc}" destdir="${build}" includeJavaRuntime="yes"
includeAntRuntime="false"
debug="true" source="1.6" target="1.6"/>
debug="true" source="1.8" target="1.8"/>
</target>

<target name="compile-clojure"
Expand Down Expand Up @@ -81,6 +81,7 @@
<arg value="clojure.string"/>
<arg value="clojure.data"/>
<arg value="clojure.reflect"/>
<arg value="clojure.datafy"/>
</java>
</target>

Expand All @@ -89,7 +90,7 @@
unless="maven.test.skip">
<mkdir dir="${test-classes}"/>
<javac srcdir="${jtestsrc}" destdir="${test-classes}" includeJavaRuntime="yes"
debug="true" source="1.6" target="1.6" includeantruntime="no"/>
debug="true" source="1.8" target="1.8" includeantruntime="no"/>
<echo>Direct linking = ${directlinking}</echo>
<java classname="clojure.lang.Compile"
classpath="${test-classes}:${test}:${build}:${cljsrc}:${maven.test.classpath}"
Expand Down
201 changes: 201 additions & 0 deletions changes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,206 @@
<!-- -*- mode: markdown ; mode: visual-line ; coding: utf-8 -*- -->

# Changes to Clojure in Version 1.10

## 1 Compatibility and Dependencies

### 1.1 Java

Clojure 1.10 now requires Java 8 or above. There were a number of updates related to this change and/or Java compatibility fixes for Java 8, 9, 10, and 11:

* [CLJ-2363](http://dev.clojure.org/jira/browse/CLJ-2363)
Bump to Java 8 as minimum requirement, update embedded ASM to 6.2,
remove reliance on jsr166 jar, update javadoc links, and remove
conditional logic.
* [CLJ-2367](http://dev.clojure.org/jira/browse/CLJ-2367)
ASM regression fix
* [CLJ-2284](http://dev.clojure.org/jira/browse/CLJ-2284)
Fix invalid bytecode generation for static interface method calls in Java 9+
* [CLJ-2066](http://dev.clojure.org/jira/browse/CLJ-2066)
Add reflection fallback for --illegal-access warnings in Java 9+
* [CLJ-2330](http://dev.clojure.org/jira/browse/CLJ-2330)
Fix brittle test that fails on Java 10 build due to serialization drift
* [CLJ-2374](http://dev.clojure.org/jira/browse/CLJ-2374)
Add type hint to address reflection ambiguity in JDK 11
* [CLJ-2375](http://dev.clojure.org/jira/browse/CLJ-2375)
Fix usage of deprecated JDK apis
* [CLJ-2414](http://dev.clojure.org/jira/browse/CLJ-2414)
Regression in reflectively finding default methods

### 1.2 Dependencies

Updated dependencies:

* spec.alpha dependency to 0.2.176 - [changes](https://github.com/clojure/spec.alpha/blob/master/CHANGES.md)
* core.specs.alpha dependency to 0.2.44 - [changes](https://github.com/clojure/core.specs.alpha/blob/master/CHANGES.md)

## 2 Features and major changes

### 2.1 Error messages

Clojure errors can occur in several distinct "phases" - reading source, macroexpansion, compilation, execution, and result printing. Clojure (and the REPL) now identify these phases in the exception and the message.

The read/macroexpand/compile phases produce a CompilerException and indicate the location in the caller source code where the problem occurred (previously macroexpansion reported the error in the macroexpansion stack). CompilerException now implements IExceptionInfo and ex-data will report exception data including the following (optional) keys:

* :clojure.error/phase - phase (:read-source, :macro-syntax-check, :macroexpansion, :compile-syntax-check, :compilation, :execution, :read-eval-result, :print-eval-result)
* :clojure.error/source - source file
* :clojure.error/line - line in source file
* :clojure.error/column - column of line in source file
* :clojure.error/symbol - symbol being macroexpanded or compiled
* :clojure.error/class - cause exception class symbol
* :clojure.error/cause - cause exception message
* :clojure.error/spec - explain-data for spec errors

clojure.main also contains two new functions: `ex-triage` and `ex-str` that can be used by external tools to mimic some or all of the Clojure repl reporting. `ex-triage` takes the output of `Throwable->map` and produces a concise analysis of the error phase, cause, etc (same keys as above). `ex-str` takes that analysis data and produces a message to print at the repl.

* [CLJ-2373](http://dev.clojure.org/jira/browse/CLJ-2373)
Detect phase and overhaul exception message and printing
* [CLJ-2415](http://dev.clojure.org/jira/browse/CLJ-2415)
Error cause should always be on 2nd line of error message
* [CLJ-2420](http://dev.clojure.org/jira/browse/CLJ-2420)
Refinement of error phases, `ex-triage`, execution error line reporting
* [CLJ-2427](http://dev.clojure.org/jira/browse/CLJ-2427)
CompilerException.toString() can throw if making message during initialization
* [CLJ-2430](http://dev.clojure.org/jira/browse/CLJ-2430)
Elevate phase in throwable data and conveyance for prepl
* [CLJ-2435](http://dev.clojure.org/jira/browse/CLJ-2435)
Include root cause class name in compilation and macroexpansion error phases
* [CLJ-2438](http://dev.clojure.org/jira/browse/CLJ-2438)
Demunge source symbol in execution error messages


### 2.2 Protocol extension by metadata

`defprotocol` has a new option `:extend-via-metadata`. When :extend-via-metadata is true, values can extend protocols by adding metadata where keys are fully-qualified protocol function symbols and values are function implementations. Protocol implementations are checked first for direct definitions (defrecord, deftype, reify), then metadata definitions, then external extensions (extend, extend-type, extend-protocol).

### 2.3 tap

tap is a shared, globally accessible system for distributing a series of informational or diagnostic values to a set of (presumably effectful) handler functions. It can be used as a better debug prn, or for facilities like logging etc.

`tap>` sends a value to the set of taps. Taps can be added with `add-tap` and will be called with any value sent to `tap>`. The tap function may (briefly) block (e.g. for streams) and will never impede calls to `tap>`, but blocking indefinitely may cause tap values to be dropped. If no taps are registered, `tap>` discards. Remove taps with `remove-tap`.

### 2.4 Read string capture mode

`read+string` is a new function that mimics `read` but also captures the string that is read and returns both the read value and the (whitespace-trimmed) read string. `read+string` requires a LineNumberingPushbackReader.

### 2.5 prepl (alpha)

prepl is a new stream-based REPL with structured output (suitable for programmatic use). Forms are read from the reader, evaluated, and return data maps for the return value (if successful), output to `*out*` (possibly many), output to `*err*` (possibly many), or tap> values (possibly many).

New functions in clojure.core.server:

* `prepl` - the repl
* `io-prepl` - a prepl bound to `*in*` and `*out*` suitable for use with the Clojure socket server
* `remote-prepl` - a prepl that can be connected to a remote prepl over a socket

prepl is alpha and subject to change.

### 2.6 datafy and nav

clojure.datafy is a facility for object to data transformation. The `datafy` and `nav` functions can be used used to transform and (lazily) navigate through object graphs. The data transformation process can be influenced by consumers using protocols or metadata.

datafy is alpha and subject to change.

* [CLJ-2429](http://dev.clojure.org/jira/browse/CLJ-2429)
Datafy JavaReflector


### 2.6 Other new functions in core

These functions have been added to match existing functions in ClojureScript to increase the portability of error-handling code:

* `ex-cause` - extract the cause exception
* `ex-message` - extract the cause message

This function has been added to construct a PrintWriter implementation whose behavior on flush and close is provided as functions:

* `PrintWriter-on` - create a PrintWriter from flush-fn and close-fn

The following function has been added, extending `resolve`:

* `requiring-resolve` - resolve or, if needed, require symbol's namespace, then resolve
* `serialized-require` - like `require` but for use in asynchronous load uses

## 3 Enhancements

### 3.1 Error messages

* [CLJ-1279](http://dev.clojure.org/jira/browse/CLJ-1279)
Report correct arity count for function arity errors inside macros
* [CLJ-2386](http://dev.clojure.org/jira/browse/CLJ-2386)
Omit ex-info construction frames
* [CLJ-2394](http://dev.clojure.org/jira/browse/CLJ-2394)
Warn in pst that stack trace for syntax error failed before execution
* [CLJ-2396](http://dev.clojure.org/jira/browse/CLJ-2396)
Omit :in clauses when printing spec function errors if using default explain printer
* [CLJ-1797](http://dev.clojure.org/jira/browse/CLJ-1797)
Mention cljc in error when require fails
* [CLJ-1130](http://dev.clojure.org/jira/browse/CLJ-1130)
Improve error message when unable to match static method

### 3.2 Documentation

* [CLJ-2044](http://dev.clojure.org/jira/browse/CLJ-2044)
clojure.instant - add arglist meta for functions
* [CLJ-2257](http://dev.clojure.org/jira/browse/CLJ-2257)
`proxy` - fix typo
* [CLJ-2332](http://dev.clojure.org/jira/browse/CLJ-2332)
`remove-tap` - fix repetition
* [CLJ-2122](http://dev.clojure.org/jira/browse/CLJ-2122)
`flatten` - describe result as lazy

### 3.3 Performance

* [CLJ-1654](http://dev.clojure.org/jira/browse/CLJ-1654)
Reuse seq in `some`
* [CLJ-1366](http://dev.clojure.org/jira/browse/CLJ-1366)
The empty map literal is read as a different map each time
* [CLJ-2362](http://dev.clojure.org/jira/browse/CLJ-2362)
`with-meta` should return identity when new meta is identical to prior

### 3.4 Other enhancements

* `symbol` can now take a var or a keyword argument
* [CLJ-1209](http://dev.clojure.org/jira/browse/CLJ-1209)
Print ex-data in clojure.test error reports
* [CLJ-2163](http://dev.clojure.org/jira/browse/CLJ-2163)
Add test for var serialization
* [CLJ-2417](http://dev.clojure.org/jira/browse/CLJ-2417)
`sort` and `sort-by` should retain meta

## 4 Fixes

### 4.1 Collections

* [CLJ-2297](http://dev.clojure.org/jira/browse/CLJ-2297)
PersistentHashMap leaks memory when keys are removed with `without`
* [CLJ-1587](http://dev.clojure.org/jira/browse/CLJ-1587)
PersistentArrayMap’s assoc doesn’t respect HASHTABLE_THRESHOLD
* [CLJ-2050](http://dev.clojure.org/jira/browse/CLJ-2050)
Remove redundant key comparisons in HashCollisionNode
* [CLJ-2089](http://dev.clojure.org/jira/browse/CLJ-2089)
Sorted colls with default comparator don’t check that first element is Comparable

### 4.2 API

* [CLJ-2031](http://dev.clojure.org/jira/browse/CLJ-2031)
clojure.walk/postwalk does not preserve MapEntry type objects
* [CLJ-2349](http://dev.clojure.org/jira/browse/CLJ-2349)
Report correct line number for uncaught ExceptionInfo in clojure.test
* [CLJ-1764](http://dev.clojure.org/jira/browse/CLJ-1764)
partition-by runs infinite loop when one element of infinite partition is accessed
* [CLJ-1832](http://dev.clojure.org/jira/browse/CLJ-1832)
unchecked-* functions have different behavior on primitive longs vs boxed Longs

### 4.3 Other

* [CLJ-1403](http://dev.clojure.org/jira/browse/CLJ-1403)
ns-resolve might throw ClassNotFoundException but should return nil
* [CLJ-2407](http://dev.clojure.org/jira/browse/CLJ-2407)
Fix bugs in Clojure unit tests
* [CLJ-1079](http://dev.clojure.org/jira/browse/CLJ-1079)
In reader, don't ignore explicit :line :col meta

# Changes to Clojure in Version 1.9

## 1 New and Improved Features
Expand Down
24 changes: 12 additions & 12 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<artifactId>clojure</artifactId>
<name>clojure</name>
<packaging>jar</packaging>
<version>1.9.0</version>
<version>1.10.0</version>

<url>http://clojure.org/</url>
<description>Clojure core environment and runtime library.</description>
Expand All @@ -30,7 +30,7 @@
<connection>scm:git:git@github.com:clojure/clojure.git</connection>
<developerConnection>scm:git:git@github.com:clojure/clojure.git</developerConnection>
<url>git@github.com:clojure/clojure.git</url>
<tag>clojure-1.9.0</tag>
<tag>clojure-1.10.0</tag>
</scm>

<properties>
Expand All @@ -41,18 +41,12 @@
<dependency>
<groupId>org.clojure</groupId>
<artifactId>spec.alpha</artifactId>
<version>0.1.143</version>
<version>0.2.176</version>
</dependency>
<dependency>
<groupId>org.clojure</groupId>
<artifactId>core.specs.alpha</artifactId>
<version>0.1.24</version>
</dependency>
<dependency>
<groupId>org.codehaus.jsr166-mirror</groupId>
<artifactId>jsr166y</artifactId>
<version>1.7.0</version>
<scope>provided</scope>
<version>0.2.44</version>
</dependency>
<dependency>
<groupId>org.clojure</groupId>
Expand All @@ -78,6 +72,12 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>

<distributionManagement>
Expand Down Expand Up @@ -105,8 +105,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
Expand Down
56 changes: 27 additions & 29 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,35 +38,33 @@ To build locally with Maven:
This program uses the ASM bytecode engineering library which is distributed
with the following notice:

Copyright (c) 2000-2005 INRIA, France Telecom
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

2. 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.

3. Neither the name of the copyright holders 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 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.
ASM: a very small and fast Java bytecode manipulation framework
Copyright (c) 2000-2011 INRIA, France Telecom
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. 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.
3. Neither the name of the copyright holders 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 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.



Expand Down
Loading