Showing preview only (3,518K chars total). Download the full file or copy to clipboard to get everything.
Repository: galdolber/clojure-objc
Branch: master
Commit: a56dca4ea382
Files: 349
Total size: 3.3 MB
Directory structure:
gitextract_r576sy1c/
├── .gitignore
├── CONTRIBUTING.md
├── KNOWN_ISSUES
├── antsetup.sh
├── build.clj
├── build.xml
├── changes.md
├── clojure.iml
├── doc/
│ └── clojure/
│ └── pprint/
│ ├── CommonLispFormat.markdown
│ └── PrettyPrinting.markdown
├── epl-v10.html
├── pom.xml
├── readme.md
├── release.sh
├── src/
│ ├── assembly/
│ │ ├── distribution.xml
│ │ └── slim.xml
│ ├── clj/
│ │ └── clojure/
│ │ ├── core/
│ │ │ ├── protocols.clj
│ │ │ └── reducers.clj
│ │ ├── core.clj
│ │ ├── core_deftype.clj
│ │ ├── core_objc.clj
│ │ ├── core_print.clj
│ │ ├── core_proxy.clj
│ │ ├── data.clj
│ │ ├── edn.clj
│ │ ├── genclass.clj
│ │ ├── gvec.clj
│ │ ├── inspector.clj
│ │ ├── instant.clj
│ │ ├── java/
│ │ │ ├── browse.clj
│ │ │ ├── browse_ui.clj
│ │ │ ├── io.clj
│ │ │ ├── javadoc.clj
│ │ │ └── shell.clj
│ │ ├── main.clj
│ │ ├── parallel.clj
│ │ ├── pprint/
│ │ │ ├── cl_format.clj
│ │ │ ├── column_writer.clj
│ │ │ ├── dispatch.clj
│ │ │ ├── pprint_base.clj
│ │ │ ├── pretty_writer.clj
│ │ │ ├── print_table.clj
│ │ │ └── utilities.clj
│ │ ├── pprint.clj
│ │ ├── reflect/
│ │ │ └── java.clj
│ │ ├── reflect.clj
│ │ ├── remoterepl.clj
│ │ ├── repl.clj
│ │ ├── set.clj
│ │ ├── stacktrace.clj
│ │ ├── string.clj
│ │ ├── template.clj
│ │ ├── test/
│ │ │ ├── junit.clj
│ │ │ └── tap.clj
│ │ ├── test.clj
│ │ ├── uuid.clj
│ │ ├── walk.clj
│ │ ├── xml.clj
│ │ └── zip.clj
│ ├── ffi/
│ │ ├── ffi.h
│ │ ├── ffi_arm64.h
│ │ ├── ffi_armv7.h
│ │ ├── ffi_common.h
│ │ ├── ffi_i386.h
│ │ ├── ffi_x86_64.h
│ │ ├── fficonfig.h
│ │ ├── fficonfig_arm64.h
│ │ ├── fficonfig_armv7.h
│ │ ├── fficonfig_i386.h
│ │ ├── fficonfig_x86_64.h
│ │ ├── ffitarget.h
│ │ ├── ffitarget_arm64.h
│ │ ├── ffitarget_armv7.h
│ │ ├── ffitarget_i386.h
│ │ ├── ffitarget_x86_64.h
│ │ └── libffi.a
│ ├── jvm/
│ │ ├── clojure/
│ │ │ ├── asm/
│ │ │ │ ├── AnnotationVisitor.java
│ │ │ │ ├── AnnotationWriter.java
│ │ │ │ ├── Attribute.java
│ │ │ │ ├── ByteVector.java
│ │ │ │ ├── ClassReader.java
│ │ │ │ ├── ClassVisitor.java
│ │ │ │ ├── ClassWriter.java
│ │ │ │ ├── Context.java
│ │ │ │ ├── Edge.java
│ │ │ │ ├── FieldVisitor.java
│ │ │ │ ├── FieldWriter.java
│ │ │ │ ├── Frame.java
│ │ │ │ ├── Handle.java
│ │ │ │ ├── Handler.java
│ │ │ │ ├── Item.java
│ │ │ │ ├── Label.java
│ │ │ │ ├── MethodVisitor.java
│ │ │ │ ├── MethodWriter.java
│ │ │ │ ├── Opcodes.java
│ │ │ │ ├── Type.java
│ │ │ │ ├── commons/
│ │ │ │ │ ├── AdviceAdapter.java
│ │ │ │ │ ├── AnalyzerAdapter.java
│ │ │ │ │ ├── CodeSizeEvaluator.java
│ │ │ │ │ ├── GeneratorAdapter.java
│ │ │ │ │ ├── InstructionAdapter.java
│ │ │ │ │ ├── LocalVariablesSorter.java
│ │ │ │ │ ├── Method.java
│ │ │ │ │ ├── SerialVersionUIDAdder.java
│ │ │ │ │ ├── StaticInitMerger.java
│ │ │ │ │ ├── TableSwitchGenerator.java
│ │ │ │ │ └── package.html
│ │ │ │ └── package.html
│ │ │ ├── java/
│ │ │ │ └── api/
│ │ │ │ ├── Clojure.java
│ │ │ │ └── package.html
│ │ │ ├── lang/
│ │ │ │ ├── AFn.java
│ │ │ │ ├── AFunction.java
│ │ │ │ ├── AMapEntry.java
│ │ │ │ ├── APersistentMap.java
│ │ │ │ ├── APersistentSet.java
│ │ │ │ ├── APersistentVector.java
│ │ │ │ ├── ARef.java
│ │ │ │ ├── AReference.java
│ │ │ │ ├── ASeq.java
│ │ │ │ ├── ATransientMap.java
│ │ │ │ ├── ATransientSet.java
│ │ │ │ ├── Agent.java
│ │ │ │ ├── ArityException.java
│ │ │ │ ├── ArrayChunk.java
│ │ │ │ ├── ArrayIter.java
│ │ │ │ ├── ArraySeq.java
│ │ │ │ ├── Associative.java
│ │ │ │ ├── Atom.java
│ │ │ │ ├── BigInt.java
│ │ │ │ ├── Binding.java
│ │ │ │ ├── Box.java
│ │ │ │ ├── ChunkBuffer.java
│ │ │ │ ├── ChunkedCons.java
│ │ │ │ ├── Compile.java
│ │ │ │ ├── Compiler.java
│ │ │ │ ├── Cons.java
│ │ │ │ ├── Counted.java
│ │ │ │ ├── Cycle.java
│ │ │ │ ├── Delay.java
│ │ │ │ ├── DynamicClassLoader.java
│ │ │ │ ├── EdnReader.java
│ │ │ │ ├── EnumerationSeq.java
│ │ │ │ ├── ExceptionInfo.java
│ │ │ │ ├── Fn.java
│ │ │ │ ├── FnLoaderThunk.java
│ │ │ │ ├── IAtom.java
│ │ │ │ ├── IBlockingDeref.java
│ │ │ │ ├── IChunk.java
│ │ │ │ ├── IChunkedSeq.java
│ │ │ │ ├── IDeref.java
│ │ │ │ ├── IEditableCollection.java
│ │ │ │ ├── IExceptionInfo.java
│ │ │ │ ├── IFn.java
│ │ │ │ ├── IHashEq.java
│ │ │ │ ├── IKeywordLookup.java
│ │ │ │ ├── ILookup.java
│ │ │ │ ├── ILookupSite.java
│ │ │ │ ├── ILookupThunk.java
│ │ │ │ ├── IMapEntry.java
│ │ │ │ ├── IMapIterable.java
│ │ │ │ ├── IMeta.java
│ │ │ │ ├── IObj.java
│ │ │ │ ├── IPending.java
│ │ │ │ ├── IPersistentCollection.java
│ │ │ │ ├── IPersistentList.java
│ │ │ │ ├── IPersistentMap.java
│ │ │ │ ├── IPersistentSet.java
│ │ │ │ ├── IPersistentStack.java
│ │ │ │ ├── IPersistentVector.java
│ │ │ │ ├── IProxy.java
│ │ │ │ ├── IRecord.java
│ │ │ │ ├── IReduce.java
│ │ │ │ ├── IReduceInit.java
│ │ │ │ ├── IRef.java
│ │ │ │ ├── IReference.java
│ │ │ │ ├── ISeq.java
│ │ │ │ ├── ITransientAssociative.java
│ │ │ │ ├── ITransientCollection.java
│ │ │ │ ├── ITransientMap.java
│ │ │ │ ├── ITransientSet.java
│ │ │ │ ├── ITransientVector.java
│ │ │ │ ├── IType.java
│ │ │ │ ├── IllegalAccessError.java
│ │ │ │ ├── Indexed.java
│ │ │ │ ├── IndexedSeq.java
│ │ │ │ ├── Intrinsics.java
│ │ │ │ ├── Iterate.java
│ │ │ │ ├── IteratorSeq.java
│ │ │ │ ├── Keyword.java
│ │ │ │ ├── KeywordLookupSite.java
│ │ │ │ ├── LazilyPersistentVector.java
│ │ │ │ ├── LazySeq.java
│ │ │ │ ├── LineNumberingPushbackReader.java
│ │ │ │ ├── LispReader.java
│ │ │ │ ├── LockingTransaction.java
│ │ │ │ ├── LongRange.java
│ │ │ │ ├── MapEntry.java
│ │ │ │ ├── MapEquivalence.java
│ │ │ │ ├── MethodImplCache.java
│ │ │ │ ├── MultiFn.java
│ │ │ │ ├── Murmur3.java
│ │ │ │ ├── Named.java
│ │ │ │ ├── Namespace.java
│ │ │ │ ├── Numbers.java
│ │ │ │ ├── Obj.java
│ │ │ │ ├── ObjC.java
│ │ │ │ ├── ObjCClass.java
│ │ │ │ ├── PersistentArrayMap.java
│ │ │ │ ├── PersistentHashMap.java
│ │ │ │ ├── PersistentHashSet.java
│ │ │ │ ├── PersistentList.java
│ │ │ │ ├── PersistentQueue.java
│ │ │ │ ├── PersistentStructMap.java
│ │ │ │ ├── PersistentTreeMap.java
│ │ │ │ ├── PersistentTreeSet.java
│ │ │ │ ├── PersistentVector.java
│ │ │ │ ├── ProxyHandler.java
│ │ │ │ ├── RT.java
│ │ │ │ ├── Range.java
│ │ │ │ ├── Ratio.java
│ │ │ │ ├── ReaderConditional.java
│ │ │ │ ├── RecordIterator.java
│ │ │ │ ├── Reduced.java
│ │ │ │ ├── Ref.java
│ │ │ │ ├── Reflector.java
│ │ │ │ ├── RemoteRef.java
│ │ │ │ ├── RemoteRepl.java
│ │ │ │ ├── Repeat.java
│ │ │ │ ├── RestFn.java
│ │ │ │ ├── RestFnWithMeta.java
│ │ │ │ ├── Reversible.java
│ │ │ │ ├── Selector.java
│ │ │ │ ├── SeqEnumeration.java
│ │ │ │ ├── SeqIterator.java
│ │ │ │ ├── Seqable.java
│ │ │ │ ├── Sequential.java
│ │ │ │ ├── Settable.java
│ │ │ │ ├── Sorted.java
│ │ │ │ ├── SourceGenIntrinsics.java
│ │ │ │ ├── SourceWriter.java
│ │ │ │ ├── StringEscapeUtils.java
│ │ │ │ ├── StringSeq.java
│ │ │ │ ├── Symbol.java
│ │ │ │ ├── TaggedLiteral.java
│ │ │ │ ├── ThreadFactory.java
│ │ │ │ ├── TransactionalHashMap.java
│ │ │ │ ├── TransformerIterator.java
│ │ │ │ ├── URLClassLoader.java
│ │ │ │ ├── Util.java
│ │ │ │ ├── Var.java
│ │ │ │ ├── Volatile.java
│ │ │ │ ├── WarnBoxedMath.java
│ │ │ │ ├── XMLHandler.java
│ │ │ │ └── package.html
│ │ │ └── main.java
│ │ └── com/
│ │ └── google/
│ │ └── j2objc/
│ │ └── annotations/
│ │ └── ReflectionSupport.java
│ ├── objc/
│ │ ├── Cst502Socket.h
│ │ ├── Cst502Socket.m
│ │ ├── NSCommon.h
│ │ ├── NSCommon.m
│ │ ├── NSProxyImpl.h
│ │ ├── NSProxyImpl.m
│ │ ├── NSSocketImpl.h
│ │ ├── NSSocketImpl.m
│ │ ├── NSTypeImpl.h
│ │ ├── NSTypeImpl.m
│ │ ├── ReplClient.h
│ │ ├── ReplClient.m
│ │ ├── WeakRef.h
│ │ └── WeakRef.m
│ ├── resources/
│ │ └── clojure/
│ │ └── version.properties
│ └── script/
│ ├── run_test.clj
│ └── run_test_generative.clj
└── test/
├── clojure/
│ ├── test_clojure/
│ │ ├── agents.clj
│ │ ├── annotations/
│ │ │ ├── java_5.clj
│ │ │ └── java_6.clj
│ │ ├── annotations.clj
│ │ ├── api.clj
│ │ ├── atoms.clj
│ │ ├── clojure_set.clj
│ │ ├── clojure_walk.clj
│ │ ├── clojure_xml.clj
│ │ ├── clojure_zip.clj
│ │ ├── compilation/
│ │ │ ├── examples.clj
│ │ │ └── line_number_examples.clj
│ │ ├── compilation.clj
│ │ ├── control.clj
│ │ ├── data.clj
│ │ ├── data_structures.clj
│ │ ├── def.clj
│ │ ├── delays.clj
│ │ ├── edn.clj
│ │ ├── errors.clj
│ │ ├── evaluation.clj
│ │ ├── fn.clj
│ │ ├── for.clj
│ │ ├── genclass/
│ │ │ └── examples.clj
│ │ ├── genclass.clj
│ │ ├── generators.clj
│ │ ├── java/
│ │ │ ├── io.clj
│ │ │ ├── javadoc.clj
│ │ │ └── shell.clj
│ │ ├── java_interop.clj
│ │ ├── keywords.clj
│ │ ├── logic.clj
│ │ ├── macros.clj
│ │ ├── main.clj
│ │ ├── metadata.clj
│ │ ├── multimethods.clj
│ │ ├── ns_libs.clj
│ │ ├── numbers.clj
│ │ ├── other_functions.clj
│ │ ├── parallel.clj
│ │ ├── pprint/
│ │ │ ├── test_cl_format.clj
│ │ │ ├── test_helper.clj
│ │ │ └── test_pretty.clj
│ │ ├── pprint.clj
│ │ ├── predicates.clj
│ │ ├── printer.clj
│ │ ├── protocols/
│ │ │ ├── examples.clj
│ │ │ ├── hash_collisions.clj
│ │ │ └── more_examples.clj
│ │ ├── protocols.clj
│ │ ├── reader.cljc
│ │ ├── reducers.clj
│ │ ├── reflect.clj
│ │ ├── refs.clj
│ │ ├── repl/
│ │ │ └── example.clj
│ │ ├── repl.clj
│ │ ├── rt.clj
│ │ ├── sequences.clj
│ │ ├── serialization.clj
│ │ ├── special.clj
│ │ ├── string.clj
│ │ ├── test.clj
│ │ ├── test_fixtures.clj
│ │ ├── transducers.clj
│ │ ├── transients.clj
│ │ ├── try_catch.clj
│ │ ├── vars.clj
│ │ ├── vectors.clj
│ │ └── volatiles.clj
│ └── test_helper.clj
├── java/
│ ├── clojure/
│ │ └── test/
│ │ └── ReflectorTryCatchFixture.java
│ ├── compilation/
│ │ └── TestDispatch.java
│ └── java/
│ └── util/
│ └── jar/
│ ├── JarEntry.java
│ └── JarFile.java
└── objc/
├── NSCommonTest.h
└── NSCommonTest.m
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.jar
target
clojure.iws
clojure.ipr
nbproject/private/
maven-classpath
maven-classpath.properties
coclojure/*
.settings/*
.classpath
.project
xcode
.idea/
settings.xml
upload-github.sh
================================================
FILE: CONTRIBUTING.md
================================================
If you'd like to submit a patch, please follow the [contributing guidelines](http://clojure.org/contributing).
================================================
FILE: KNOWN_ISSUES
================================================
- Dividing by zero doesn't throw an exception in objc, it fails with EXC_ARITHMETIC
- NullPointerException and ClassCastException are not reliable, as they are emulated by j2objc
- Empty regular expressions throw an exception
- pr-str a date have a bad Timezone format: https://code.google.com/p/j2objc/issues/detail?id=321
================================================
FILE: antsetup.sh
================================================
#!/bin/bash
mvn -q dependency:build-classpath -Dmdep.outputFile=maven-classpath
cat <<EOF >maven-classpath.properties
maven.compile.classpath=`cat maven-classpath`
maven.test.classpath=`cat maven-classpath`
EOF
echo "Wrote maven-classpath.properties for standalone ant use"
================================================
FILE: build.clj
================================================
(use '[clojure.java.shell :only [sh with-sh-dir]])
(use '[clojure.java.io :only [delete-file file]])
(require '[clojure.string :as st])
(import '[java.io File])
(def j2objc-home (System/getenv "J2OBJC_HOME"))
(def iphone-os-sdk "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk")
(def iphone-simulator-sdk "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk")
(def frameworks "-framework UIKit -framework Foundation")
(def opts "-g -miphoneos-version-min=6.1 -fmessage-length=0 -fmacro-backtrace-limit=0 -std=gnu99 -fpascal-strings -O3 -DDEBUG=1 -Wno-unsequenced")
(let [a (agent nil)]
(defn println+ [& other]
(send a (fn [_] (apply println other)))))
(defn walk [^File dir]
(let [children (.listFiles dir)
subdirs (filter #(.isDirectory %) children)
files (filter #(.isFile %) children)]
(concat files (mapcat walk subdirs))))
(defn find-files [folder extension]
(filter #(.endsWith (.getName %) (str "." extension)) (walk (file folder))))
(defn sh+ [& args]
(let [silent (= :silent (first args))
_ (when-not silent
(println+ "Running: " (reduce str (interpose " " args))))
args (map #(clojure.string/split % #" ")
(if silent (next args) args))
r (apply sh (flatten args))]
(when-not (zero? (:exit r))
(println+ "FAILED" (:err r)))))
(defn makeoname [f]
(str (st/replace f #"/" ".") ".o"))
(defn clang [id params sdk target f]
(println+ id (.getName f))
(sh+ :silent "clang" "-x" "objective-c" params opts "-isysroot" sdk
(str "-I" target "/../src/ffi")
(str "-I" target "/objc")
(str "-I" j2objc-home "/include")
"-c" (.getCanonicalPath f) "-o" (makeoname (.getPath f))))
(defn build [id params sdk]
(let [target (File. "target")
tcn (.getCanonicalPath target)]
(with-sh-dir target
(println+ "Compiling" id)
(sh+ "rm" "-Rf" id)
(sh+ "mkdir" id)
(with-sh-dir (File. (str "target/" id))
(doall (pmap (partial clang id params sdk tcn)
(find-files "target/objc" "m")))
(spit (str tcn "/" id "/files.LinkFileList") (reduce str (interpose "\n" (find-files (str tcn "/" id) "o"))))
(sh+ "libtool" "-static" "-syslibroot" sdk "-filelist"
"files.LinkFileList" frameworks "-o" "libclojure-objc.a")))))
(sh+ "mvn" "compile" "test-compile")
(sh+ "rm" "-Rf" "target/objc")
(sh+ "mkdir" "target/objc")
(sh+ "cp" "-R" "src/objc/." "target/objc")
(sh+ "cp" "-R" "src/ffi/." "target/objc")
(sh+ "zip" "-r" "target/objc.jar" "target/gen" "src/jvm" "test/java")
(sh+ (str j2objc-home "/j2objc") "-d" "target/objc" "--final-methods-as-functions" "--batch-translate-max=500" "-J-Xmx2G" "-classpath"
"target/classes:target/test-classes"
"target/objc.jar")
(let [i (File. "target/include")]
(when-not (.exists i)
(.mkdirs i)))
(with-sh-dir (File. "target/objc")
(sh "rsync" "-avm" "--delete" "--include" "*.h" "-f"
"hide,! */" "." "../include"))
(build "iphoneos" "-arch armv7 -arch armv7s -arch arm64" iphone-os-sdk)
(build "iphonesimulator" "-arch i386 -arch x86_64" iphone-simulator-sdk)
(let [a (File. "target/libclojure-objc.a")]
(when (.exists a)
(.delete a))
(sh+ "lipo" "-create" "-output" "target/libclojure-objc.a" "target/iphoneos/libclojure-objc.a" "target/iphonesimulator/libclojure-objc.a"))
================================================
FILE: build.xml
================================================
<project name="clojure" default="all">
<description>
Build with "ant" and then start the
REPL with: "java -cp clojure.jar clojure.main".
</description>
<property name="src" location="src"/>
<property name="test" location="test"/>
<property name="jsrc" location="${src}/jvm"/>
<property name="jtestsrc" location="${test}/java"/>
<property name="cljsrc" location="${src}/clj"/>
<property name="cljscript" location="${src}/script"/>
<property name="test-script" location="${cljscript}/run_test.clj"/>
<property name="test-generative-script" location="${cljscript}/run_test_generative.clj"/>
<property name="compile-script" location="${cljscript}/bootstrap_compile.clj"/>
<property name="target" location="target"/>
<property name="build" location="${target}/classes"/>
<property name="test-classes" location="${target}/test-classes"/>
<property name="dist" location="dist"/>
<property file="maven-classpath.properties"/>
<!-- Get the version string out of the POM -->
<xmlproperty file="pom.xml" prefix="pom"/>
<property name="clojure.version.label" value="${pom.project.version}"/>
<property name="version.properties" value="${build}/clojure/version.properties"/>
<property name="clojure_jar" location="clojure-${clojure.version.label}.jar"/>
<property name="clojure_noversion_jar" location="clojure.jar"/>
<target name="init" depends="clean">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${build}/clojure"/>
<echo file="${version.properties}">version=${clojure.version.label}</echo>
</target>
<target name="compile-java" depends="init"
description="Compile Java sources.">
<javac srcdir="${jsrc}" destdir="${build}" includeJavaRuntime="yes"
includeAntRuntime="false"
debug="true" source="1.6" target="1.6"/>
</target>
<target name="compile-clojure"
description="Compile Clojure sources.">
<java classname="clojure.lang.Compile"
classpath="${maven.compile.classpath}:${build}:${cljsrc}"
failonerror="true"
fork="true">
<sysproperty key="clojure.compile.path" value="${build}"/>
<!-- <sysproperty key="clojure.compiler.elide-meta" value="[]"/>-->
<!-- <sysproperty key="clojure.compiler.disable-locals-clearing" value="true"/>-->
<!-- <sysproperty key="clojure.compile.warn-on-reflection" value="true"/> -->
<sysproperty key="java.awt.headless" value="true"/>
<arg value="clojure.core"/>
<arg value="clojure.core.protocols"/>
<arg value="clojure.set"/>
<arg value="clojure.edn"/>
<arg value="clojure.string"/>
<arg value="clojure.data"/>
<arg value="clojure.remoterepl" />
<arg value="clojure.pprint"/>
<arg value="clojure.java.io"/>
<arg value="clojure.walk"/>
<arg value="clojure.zip"/>
<arg value="clojure.xml"/>
<arg value="clojure.template"/>
<arg value="clojure.test"/>
<arg value="clojure.test.tap"/>
<!--arg value="clojure.stacktrace"/>
<arg value="clojure.reflect" /-->
</java>
</target>
<target name="compile-tests"
description="Compile the subset of tests that require compilation."
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"/>
<java classname="clojure.lang.Compile"
classpath="${maven.compile.classpath}:${maven.test.classpath}:${test-classes}:${test}:${build}:${cljsrc}"
failonerror="true"
fork="true">
<sysproperty key="clojure.compile.path" value="${test-classes}"/>
<!--<sysproperty key="clojure.compiler.elide-meta" value="[:doc]"/>-->
<!--<sysproperty key="clojure.compiler.disable-locals-clearing" value="true"/>-->
<arg value="clojure.test-clojure.protocols.examples" />
<arg value="clojure.test-clojure.genclass.examples" />
<!--arg value="clojure.test-clojure.agents" />
<arg value="clojure.test-clojure.annotations" />
<arg value="clojure.test-clojure.api" />
<arg value="clojure.test-clojure.atoms" />
<arg value="clojure.test-clojure.clojure-set" />
<arg value="clojure.test-clojure.clojure-walk" />
<arg value="clojure.test-clojure.clojure-xml" />
<arg value="clojure.test-clojure.clojure-zip" />
<arg value="clojure.test-clojure.control" />
<arg value="clojure.test-clojure.data" />
<arg value="clojure.test-clojure.data-structures" />
<arg value="clojure.test-clojure.delays" />
<arg value="clojure.test-clojure.edn" />
<arg value="clojure.test-clojure.errors" />
<arg value="clojure.test-clojure.fn" />
<arg value="clojure.test-clojure.for" />
<arg value="clojure.test-clojure.generators" />
<arg value="clojure.test-clojure.keywords" />
<arg value="clojure.test-clojure.logic" />
<arg value="clojure.test-clojure.macros" />
<arg value="clojure.test-clojure.multimethods" />
<arg value="clojure.test-clojure.other-functions" />
<arg value="clojure.test-clojure.parallel" />
<arg value="clojure.test-clojure.printer" />
<arg value="clojure.test-clojure.reader" />
<arg value="clojure.test-clojure.refs" />
<arg value="clojure.test-clojure.sequences" />
<arg value="clojure.test-clojure.special" />
<arg value="clojure.test-clojure.string" />
<arg value="clojure.test-clojure.test" />
<arg value="clojure.test-clojure.test-fixtures" />
<arg value="clojure.test-clojure.transducers" />
<arg value="clojure.test-clojure.transients" />
<arg value="clojure.test-clojure.try-catch" />
<arg value="clojure.test-clojure.vectors" />
<arg value="clojure.test-clojure.volatiles" />
<arg value="clojure.test-helper" /-->
</java>
</target>
<target name="test-example"
description="Run clojure tests without recompiling clojure."
depends="compile-tests"
unless="maven.test.skip">
<java classname="clojure.main" failonerror="true" fork="true">
<classpath>
<pathelement path="${maven.test.classpath}"/>
<path location="${test-classes}"/>
<path location="${test}"/>
<path location="${build}"/>
<path location="${cljsrc}"/>
</classpath>
<arg value="${test-script}"/>
</java>
</target>
<target name="test-generative"
description="Run test generative tests without recompiling clojure."
depends="compile-tests"
unless="maven.test.skip">
<java classname="clojure.main" failonerror="true" fork="true">
<classpath>
<pathelement path="${maven.test.classpath}"/>
<path location="${test-classes}"/>
<path location="${test}"/>
<path location="${build}"/>
<path location="${cljsrc}"/>
</classpath>
<arg value="${test-generative-script}"/>
</java>
</target>
<target name="test"
description="Run all the tests"
depends="test-example,test-generative"/>
<target name="build"
description="Build Clojure (compilation only, no tests)."
depends="compile-java, compile-clojure"/>
<target name="jar" depends="build"
description="Create clojure jar file.">
<jar jarfile="${clojure_jar}" basedir="${build}">
<fileset dir="${cljsrc}">
<include name="**/*.clj"/>
</fileset>
<manifest>
<attribute name="Main-Class" value="clojure.main"/>
<attribute name="Class-Path" value="."/>
</manifest>
</jar>
<copy file="${clojure_jar}" tofile="${clojure_noversion_jar}"/>
</target>
<target name="javadoc"
description="Creates javadoc for Clojure API.">
<copy file="src/jvm/clojure/lang/IFn.java" tofile="target/tmpjd/IFn.java"/>
<copy file="src/jvm/clojure/lang/package.html" tofile="target/tmpjd/package.html"/>
<replaceregexp file="target/tmpjd/IFn.java" match="(static public interface .*})" replace="" byline="true"/>
<javadoc destdir="target/javadoc"
nodeprecatedlist="true" nohelp="true" nonavbar="true" notree="true"
link="http://docs.oracle.com/javase/7/docs/api/"
windowtitle="Clojure API">
<classpath>
<path location="${build}"/>
</classpath>
<fileset dir="${basedir}">
<include name="src/jvm/clojure/java/api/Clojure.java"/>
<include name="target/tmpjd/IFn.java"/>
</fileset>
</javadoc>
</target>
<target name="all" depends="build,test,jar"/>
<target name="clean"
description="Remove autogenerated files and directories.">
<delete dir="${target}"/>
<delete verbose="true">
<fileset dir="${basedir}" includes="*.jar"/>
<fileset dir="${basedir}" includes="*.zip"/>
</delete>
</target>
</project>
================================================
FILE: changes.md
================================================
<!-- -*- mode: markdown ; mode: visual-line ; coding: utf-8 -*- -->
# Changes to Clojure in Version 1.7
## 1 Compatibility Notes
Please be aware of the following issues when upgrading to Clojure 1.7.
### Seqs on Java iterators that return the same mutating object
Seqs are fundamentally incompatible with Java iterators that return
the same mutating object on every call to next(). Some Clojure
libraries incorrectly rely on calling seq on such iterators.
In 1.7, iterator-seqs are chunked, which will cause many of these
incorrect usages to return incorrect results immediately.
The `seq` and `iterator-seq` docstrings have been updated to include
an explicit warning. Libraries that incorrectly use `seq` and
`iterator-seq` will need to be fixed before running against 1.7.
* [CLJ-1669](http://dev.clojure.org/jira/browse/CLJ-1669)
* [CLJ-1738](http://dev.clojure.org/jira/browse/CLJ-1738)
### Thread owner check removed on transients
Prior to Clojure 1.7, transients would allow modification only from the
thread that created the transient. This check has been removed. It is
still a requirement that transients should be updated by only a single
thread at a time.
This constraint was relaxed to allow transients to be used in cases where
code is multiplexed across multiple threads in a pool (such as go blocks
in core.async).
### keys/vals require custom map type to implement Iterable
Invoking `keys` or `vals` on a custom map type that implements IPersistentMap
will now use the Iterable iterator() method instead of accessing entries
via the seq of the map. There have been no changes in the type hierarchy
(IPersistentMap has always extended Iterable) but former map-like instances
may have skipped implementing this method in the past.
* [CLJ-1602](http://dev.clojure.org/jira/browse/CLJ-1602)
## 2 New and Improved Features
### 2.1 Transducers
Transducers is a new way to decouple algorithmic transformations from their
application in different contexts. Transducers are functions that transform
reducing functions to build up a "recipe" for transformation.
Also see: http://clojure.org/transducers
Many existing sequence functions now have a new arity (one fewer argument
than before). This arity will return a transducer that represents the same
logic but is independent of lazy sequence processing. Functions included are:
* map
* mapcat
* filter
* remove
* take
* take-while
* drop
* drop-while
* take-nth
* replace
* partition-by
* partition-all
* keep
* keep-indexed
* map-indexed
* distinct
* interpose
Additionally some new transducer functions have been added:
* cat - concatenates the contents of each input
* dedupe - removes consecutive duplicated values
* random-sample - returns items from coll with random probability
And this function can be used to make completing transforms:
* completing
There are also several new or modified functions that can be used to apply
transducers in different ways:
* sequence - takes a transformation and a coll and produces a lazy seq
* transduce - reduce with a transformation (eager)
* eduction - returns a reducible/iterable of applications of the transducer to items in coll. Applications are re-performed with every reduce/iterator.
There have been a number of internal changes to support transducers:
* volatiles - there are a new set of functions (volatile!, vswap!, vreset!, volatile?) to create and use volatile "boxes" to hold state in stateful transducers. Volatiles are faster than atoms but give up atomicity guarantees so should only be used with thread isolation.
* array iterators - added support for iterators over arrays
* conj can be used as a reducing function and will conj to []
Some related issues addressed during development:
* [CLJ-1511](http://dev.clojure.org/jira/browse/CLJ-1511)
* [CLJ-1497](http://dev.clojure.org/jira/browse/CLJ-1497)
* [CLJ-1549](http://dev.clojure.org/jira/browse/CLJ-1549)
* [CLJ-1537](http://dev.clojure.org/jira/browse/CLJ-1537)
* [CLJ-1554](http://dev.clojure.org/jira/browse/CLJ-1554)
* [CLJ-1601](http://dev.clojure.org/jira/browse/CLJ-1601)
* [CLJ-1606](http://dev.clojure.org/jira/browse/CLJ-1606)
* [CLJ-1621](http://dev.clojure.org/jira/browse/CLJ-1621)
* [CLJ-1600](http://dev.clojure.org/jira/browse/CLJ-1600)
* [CLJ-1635](http://dev.clojure.org/jira/browse/CLJ-1635)
* [CLJ-1683](http://dev.clojure.org/jira/browse/CLJ-1683)
* [CLJ-1669](http://dev.clojure.org/jira/browse/CLJ-1669)
* [CLJ-1723](http://dev.clojure.org/jira/browse/CLJ-1723)
### 2.2 Reader Conditionals
Reader Conditionals are a new capability to support portable code that
can run on multiple Clojure platforms with only small changes. In
particular, this feature aims to support the increasingly common case
of libraries targeting both Clojure and ClojureScript.
Code intended to be common across multiple platforms should use a new
supported file extension: ".cljc". When requested to load a namespace,
the platform-specific file extension (.clj, .cljs) will be checked
prior to .cljc.
A new reader form can be used to specify "reader conditional" code in
cljc files (and *only* cljc files). Each platform defines a feature
identifying the platform (:clj, :cljs, :cljr). The reader conditional
specifies code that is read conditionally based on the feature. The
REPL also allows reader conditionals.
Form #? takes a list of alternating feature and expression. These are
checked like cond and the selected expression is read and returned. Other
branches are read but skipped. If no branch is selected, the reader reads
nothing (not nil, but literally as if reading no form). An optional
`:default` branch can be used as a fallthrough.
Reader conditional with 2 features and a default:
#?(:clj Double/NaN
:cljs js/NaN
:default nil)
There is also a reader conditional splicing form. The evaluated expression
should be sequential and will be spliced into the surrounded code, similar
to unquote-splicing.
For example:
[1 2 #?@(:clj [3 4] :cljs [5 6])]
This form would read as [1 2 3 4] on Clojure, [1 2 5 6] on ClojureScript,
and [1 2] on any other platform. Splicing is not allowed at the top level.
Additionally, the reader can now be invoked with options for the features
to use and how to interpret reader conditionals. By default, reader conditionals
are not allowed, but that can be turned on, or a "preserve" mode can be used to
preserve all branches (most likely useful for tooling or source transforms).
In the preserve mode, the reader conditional itself and any tagged literals
within the unselected branches are returned as tagged literal data.
For more information, see:
http://dev.clojure.org/display/design/Reader+Conditionals
* [CLJ-1424](http://dev.clojure.org/jira/browse/CLJ-1424)
* [CLJ-1685](http://dev.clojure.org/jira/browse/CLJ-1685)
* [CLJ-1698](http://dev.clojure.org/jira/browse/CLJ-1698)
* [CLJ-1699](http://dev.clojure.org/jira/browse/CLJ-1699)
* [CLJ-1700](http://dev.clojure.org/jira/browse/CLJ-1700)
* [CLJ-1728](http://dev.clojure.org/jira/browse/CLJ-1728)
* [CLJ-1706](http://dev.clojure.org/jira/browse/CLJ-1706)
### 2.3 Keyword and Symbol Construction
In response to issues raised in [CLJ-1439](http://dev.clojure.org/jira/browse/CLJ-1439),
several changes have been made in symbol and keyword construction:
1) The main bottleneck in construction of symbols (which also occurs inside keywords) was
interning of the name and namespace strings. This interning has been removed, resulting
in a performance increase.
2) Keywords are cached and keyword construction includes a cache check. A change was made
to only clear the cache reference queue when there is a cache miss.
### 2.4 Warn on Boxed Math
One source of performance issues is the (unintended) use of arithmetic operations on
boxed numbers. To make detecting the presence of boxed math easier, a warning will now
be emitted about boxed math if \*unchecked-math* is set to :warn-on-boxed (any truthy
value will enable unchecked-math, only this specific value enables the warning).
Example use:
user> (defn plus-2 [x] (+ x 2)) ;; no warning, but boxed
#'user/plus-2
user> (set! *unchecked-math* :warn-on-boxed)
true
user> (defn plus-2 [x] (+ x 2)) ;; now we see a warning
Boxed math warning, NO_SOURCE_PATH:10:18 - call: public static java.lang.Number
clojure.lang.Numbers.unchecked_add(java.lang.Object,long).
#'user/plus-2
user> (defn plus-2 [^long x] (+ x 2)) ;; use a hint to avoid boxing
#'user/plus-2
* [CLJ-1325](http://dev.clojure.org/jira/browse/CLJ-1325)
* [CLJ-1535](http://dev.clojure.org/jira/browse/CLJ-1535)
* [CLJ-1642](http://dev.clojure.org/jira/browse/CLJ-1642)
### 2.5 update - like update-in for first level
`update` is a new function that is like update-in specifically for first-level keys:
(update m k f args...)
Example use:
user> (update {:a 1} :a inc)
{:a 2}
user> (update {:a 1} :a + 2)
{:a 3}
user> (update {} :a identity) ;; missing returns nil
{:a nil}
* [CLJ-1251](http://dev.clojure.org/jira/browse/CLJ-1251)
### 2.6 Faster reduce and iterator paths
Several important Clojure functions now return sequences that also
contain fast reduce() (or in some cases iterator()) paths. In many
cases, the new implementations are also faster for lazy sequences
* repeat - now implements IReduce
* cycle - implements IReduceInit
* iterate - implements IReduceInit
* range - implements IReduce, specialized case handles common case of all longs
* keys - iterates directly over the keys of a map, without seq or MapEntry allocation
* vals - iterates directly over the vals of a map, without seq or MapEntry allocation
* iterator-seq - creates a chunked sequence when previously it was unchunked
Additionally, hash-maps and hash-sets now provide iterators that walk
the data structure directly rather than via a sequence.
A new interface (IMapIterable) for direct key and val iterators on maps
was added. External data structures can use this interface to provide
direct key and val iterators via keys and vals.
These enhancements are particularly effective when used
in tandem with transducers via transduce, sequence, into, and
eduction.
* [CLJ-1603](http://dev.clojure.org/jira/browse/CLJ-1603)
* [CLJ-1515](http://dev.clojure.org/jira/browse/CLJ-1515)
* [CLJ-1602](http://dev.clojure.org/jira/browse/CLJ-1602)
* [CLJ-1669](http://dev.clojure.org/jira/browse/CLJ-1669)
* [CLJ-1692](http://dev.clojure.org/jira/browse/CLJ-1692)
* [CLJ-1694](http://dev.clojure.org/jira/browse/CLJ-1694)
* [CLJ-1711](http://dev.clojure.org/jira/browse/CLJ-1711)
* [CLJ-1709](http://dev.clojure.org/jira/browse/CLJ-1709)
* [CLJ-1713](http://dev.clojure.org/jira/browse/CLJ-1713)
* [CLJ-1726](http://dev.clojure.org/jira/browse/CLJ-1726)
* [CLJ-1727](http://dev.clojure.org/jira/browse/CLJ-1727)
### 2.7 Printing as data
There have been enhancements in how the REPL prints values without a
print-method, specifically Throwable and the fallthrough Object case.
Both cases now print in a tagged literal data form that can be read
by the reader.
Unhandled objects print with the class, hash code, and toString:
user=> *ns*
#object[clojure.lang.Namespace 0x55aa628 "user"]
Thrown exceptions will still be printed in the normal way by the default
REPL but printing them to a stream will show a different form:
user=> (/ 1 0)
ArithmeticException Divide by zero clojure.lang.Numbers.divide (Numbers.java:158)
user=> (println *e)
#error {
:cause Divide by zero
:via
[{:type java.lang.ArithmeticException
:message Divide by zero
:at [clojure.lang.Numbers divide Numbers.java 158]}]
:trace
[[clojure.lang.Numbers divide Numbers.java 158]
[clojure.lang.Numbers divide Numbers.java 3808]
;; ... elided frames
]}
Additionally, there is a new function available to obtain a Throwable as
map data: `Throwable->map`.
* [CLJ-1703](http://dev.clojure.org/jira/browse/CLJ-1703)
* [CLJ-1716](http://dev.clojure.org/jira/browse/CLJ-1716)
* [CLJ-1735](http://dev.clojure.org/jira/browse/CLJ-1735)
### 2.8 run!
run! is a new function that takes a side effect reducing function and runs
it for all items in a collection via reduce. The accumulator is ignored and
nil is returned.
(run! println (range 10))
## 3 Enhancements
### 3.1 Error messages
* [CLJ-1261](http://dev.clojure.org/jira/browse/CLJ-1261)
Invalid defrecord results in exception attributed to consuming ns instead of defrecord ns
* [CLJ-1297](http://dev.clojure.org/jira/browse/CLJ-1297)
Give more specific hint if namespace with "-" not found to check file uses "_"
### 3.2 Documentation strings
* [CLJ-1417](http://dev.clojure.org/jira/browse/CLJ-1417)
clojure.java.io/input-stream has incorrect docstring
* [CLJ-1357](http://dev.clojure.org/jira/browse/CLJ-1357)
Fix typo in gen-class doc-string
* [CLJ-1479](http://dev.clojure.org/jira/browse/CLJ-1479)
Fix typo in filterv example
* [CLJ-1480](http://dev.clojure.org/jira/browse/CLJ-1480)
Fix typo in defmulti docstring
* [CLJ-1477](http://dev.clojure.org/jira/browse/CLJ-1477)
Fix typo in deftype docstring
* [CLJ-1478](http://dev.clojure.org/jira/browse/CLJ-1378)
Fix typo in clojure.main usage
* [CLJ-1738](http://dev.clojure.org/jira/browse/CLJ-1738)
Clarify usage on Java iterators in seq and iterator-seq
### 3.3 Performance
* [CLJ-1430](http://dev.clojure.org/jira/browse/CLJ-1430)
Improve performance of partial with more unrolling
* [CLJ-1384](http://dev.clojure.org/jira/browse/CLJ-1384)
clojure.core/set should use transients for better performance
* [CLJ-1429](http://dev.clojure.org/jira/browse/CLJ-1429)
Cache unknown multimethod value default dispatch
* [CLJ-1529](http://dev.clojure.org/jira/browse/CLJ-1529)
Reduce compile times by avoiding unnecessary calls to Class.forName()
* [CLJ-1546](http://dev.clojure.org/jira/browse/CLJ-1546)
vec is now faster on almost all inputs
* [CLJ-1618](http://dev.clojure.org/jira/browse/CLJ-1618)
set is now faster on almost all inputs
* [CLJ-1695](http://dev.clojure.org/jira/browse/CLJ-1695)
Fixed reflection call in variadic vector-of constructor
### 3.4 Other enhancements
* [CLJ-1191](http://dev.clojure.org/jira/browse/CLJ-1191)
Improve apropos to show some indication of namespace of symbols found
* [CLJ-1378](http://dev.clojure.org/jira/browse/CLJ-1378)
Hints don't work with #() form of function
* [CLJ-1498](http://dev.clojure.org/jira/browse/CLJ-1498)
Removes owner-thread check from transients - this check was preventing some valid usage of transients in core.async where a transient is created on one thread and then used again in another pooled thread (while still maintaining thread isolation).
* [CLJ-803](http://dev.clojure.org/jira/browse/CLJ-803)
Extracted IAtom interface implemented by Atom.
* [CLJ-1315](http://dev.clojure.org/jira/browse/CLJ-1315)
Don't initialize classes when importing them
* [CLJ-1330](http://dev.clojure.org/jira/browse/CLJ-1330)
Class name clash between top-level functions and defn'ed ones
* [CLJ-1349](http://dev.clojure.org/jira/browse/CLJ-1349)
Update to latest test.generative and add dependency on test.check
* [CLJ-1546](http://dev.clojure.org/jira/browse/CLJ-1546)
vec now works with things that only implement Iterable or IReduceInit
* [CLJ-1618](http://dev.clojure.org/jira/browse/CLJ-1618)
set now works with things that only implement Iterable or IReduceInit
* [CLJ-1633](http://dev.clojure.org/jira/browse/CLJ-1633)
PersistentList/creator doesn't handle ArraySeqs correctly
* [CLJ-1589](http://dev.clojure.org/jira/browse/CLJ-1589)
Clean up unused paths in InternalReduce
* [CLJ-1677](http://dev.clojure.org/jira/browse/CLJ-1677)
Add setLineNumber() to LineNumberingPushbackReader
* [CLJ-1667](http://dev.clojure.org/jira/browse/CLJ-1667)
Change test to avoid using hard-coded socket port
* [CLJ-1683](http://dev.clojure.org/jira/browse/CLJ-1683)
Change reduce tests to better catch reduce without init bugs
## 4 Bug Fixes
* [CLJ-1362](http://dev.clojure.org/jira/browse/CLJ-1362)
Reduce broken on some primitive vectors
* [CLJ-1388](http://dev.clojure.org/jira/browse/CLJ-1388)
Equality bug on records created with nested calls to map->record
* [CLJ-1274](http://dev.clojure.org/jira/browse/CLJ-1274)
Unable to set compiler options via system properties except for AOT compilation
* [CLJ-1241](http://dev.clojure.org/jira/browse/CLJ-1241)
NPE when AOTing overrided clojure.core functions
* [CLJ-1185](http://dev.clojure.org/jira/browse/CLJ-1185)
reductions does not check for reduced value
* [CLJ-1039](http://dev.clojure.org/jira/browse/CLJ-1039)
Using def with metadata {:type :anything} throws ClassCastException during printing
* [CLJ-887](http://dev.clojure.org/jira/browse/CLJ-887)
Error when calling primitive functions with destructuring in the arg vector
* [CLJ-823](http://dev.clojure.org/jira/browse/CLJ-823)
Piping seque into seque can deadlock
* [CLJ-738](http://dev.clojure.org/jira/browse/CLJ-738)
<= is incorrect when args include Double/NaN
* [CLJ-1408](http://dev.clojure.org/jira/browse/CLJ-1408)
Make cached string value of Keyword and Symbol transient
* [CLJ-1466](http://dev.clojure.org/jira/browse/CLJ-1466)
clojure.core/bean should implement Iterable
* [CLJ-1578](http://dev.clojure.org/jira/browse/CLJ-1578)
Make refer of Clojure core function not throw exception on reload
* [CLJ-1501](http://dev.clojure.org/jira/browse/CLJ-1501)
LazySeq equals() should not use equiv() logic
* [CLJ-1572](http://dev.clojure.org/jira/browse/CLJ-1572)
into (and other fns that rely on reduce) require only IReduceInit
* [CLJ-1619](http://dev.clojure.org/jira/browse/CLJ-1619)
PersistentVector now directly implements reduce without init
* [CLJ-1580](http://dev.clojure.org/jira/browse/CLJ-1580)
Transient collections should guarantee thread visibility
* [CLJ-1590](http://dev.clojure.org/jira/browse/CLJ-1590)
Some IReduce/IReduceInit implementors don't respect reduced
* [CLJ-979](http://dev.clojure.org/jira/browse/CLJ-979)
Clojure resolves to wrong deftype classes when AOT compiling or reloading
* [CLJ-1636](http://dev.clojure.org/jira/browse/CLJ-1636)
Fix intermittent SeqIterator problem by removing use of this as a sentinel
* [CLJ-1637](http://dev.clojure.org/jira/browse/CLJ-1636)
Fix regression from CLJ-1546 that broke vec on MapEntry
* [CLJ-1663](http://dev.clojure.org/jira/browse/CLJ-1663)
Fix regression from CLJ-979 for DynamicClassLoader classloader delegation
* [CLJ-1604](http://dev.clojure.org/jira/browse/CLJ-1604)
Fix error from AOT'ed code defining a var with a clojure.core symbol name
* [CLJ-1561](http://dev.clojure.org/jira/browse/CLJ-1561)
Fix incorrect line number reporting for error locations
* [CLJ-1568](http://dev.clojure.org/jira/browse/CLJ-1568)
Fix incorrect line number reporting for error locations
* [CLJ-1638](http://dev.clojure.org/jira/browse/CLJ-1638)
Fix regression from CLJ-1546 removed PersistentVector.create(List) method
* [CLJ-1681](http://dev.clojure.org/jira/browse/CLJ-1681)
Fix regression from CLJ-1248 (1.6) in reflection warning with literal nil argument
* [CLJ-1648](http://dev.clojure.org/jira/browse/CLJ-1648)
Use equals() instead of == when resolving Symbol
* [CLJ-1195](http://dev.clojure.org/jira/browse/CLJ-1195)
emit-hinted-impl expands to ns-qualified invocation of fn
* [CLJ-1237](http://dev.clojure.org/jira/browse/CLJ-1237)
reduce of sequence that switches between chunked and unchunked many times throws StackOverflow
# Changes to Clojure in Version 1.6
## CONTENTS
## 1 Compatibility and Dependencies
## 1.1 JDK Version Update
Clojure now builds with Java SE 1.6 and emits bytecode requiring Java
SE 1.6 instead of Java SE 1.5. [CLJ-1268]
## 1.2 ASM Library Update
The embedded version of the ASM bytecode library has been upgraded to
ASM 4.1. [CLJ-713]
## 1.3 Promoted "Alpha" Features
The following features are no longer marked Alpha in Clojure:
* Watches - add-watch, remove-watch
* Transients - transient, persistent!, conj!, assoc!, dissoc!, pop!, disj!
* Exception data - ex-info, ex-data
* Promises - promise, deliver
* Records - defrecord
* Types - deftype
* Pretty-print tables - print-table
## 2 New and Improved Features
### 2.1 Java API
The clojure.java.api package provides a minimal interface to bootstrap
Clojure access from other JVM languages. It does this by providing:
1. The ability to use Clojure's namespaces to locate an arbitrary var,
returning the var's clojure.lang.IFn interface.
2. A convenience method read for reading data using Clojure's edn
reader.
IFns provide complete access to Clojure's APIs. You can also access
any other library written in Clojure, after adding either its source
or compiled form to the classpath.
The public Java API for Clojure consists of the following classes and interfaces:
* clojure.java.api.Clojure
* clojure.lang.IFn
All other Java classes should be treated as implementation details,
and applications should avoid relying on them.
To look up and call a Clojure function:
IFn plus = Clojure.var("clojure.core", "+");
plus.invoke(1, 2);
Functions in clojure.core are automatically loaded. Other namespaces
can be loaded via require:
IFn require = Clojure.var("clojure.core", "require");
require.invoke(Clojure.read("clojure.set"));
IFns can be passed to higher order functions, e.g. the example below
passes plus to read:
IFn map = Clojure.var("clojure.core", "map");
IFn inc = Clojure.var("clojure.core", "inc");
map.invoke(inc, Clojure.read("[1 2 3]"));
Most IFns in Clojure refer to functions. A few, however, refer to
non-function data values. To access these, use deref instead of fn:
IFn printLength = Clojure.var("clojure.core", "*print-length*");
Clojure.var("clojure.core", "deref").invoke(printLength);
### 2.2 Map destructuring extended to support namespaced keys
* [CLJ-1318](http://dev.clojure.org/jira/browse/CLJ-1318)
In the past, map destructuring with :keys and :syms would not work
with maps containing namespaced keys or symbols. The :keys and :syms
forms have been updated to allow them to match namespaced keys and
bind to a local variable based on the name.
Examples:
(let [m {:x/a 1, :y/b 2}
{:keys [x/a y/b]} m]
(+ a b))
(let [m {'x/a 1, 'y/b 2}
{:syms [x/a y/b]} m]
(+ a b))
Additionally, the :keys form can now take keywords instead of symbols.
This provides support specifically for auto-resolved keywords:
(let [m {:x/a 1, :y/b 2}
{:keys [:x/a :y/b]} m]
(+ a b))
(let [m {::x 1}
{:keys [::x]} m]
x)
### 2.3 New "some" operations
Many conditional functions rely on logical truth (where "falsey"
values are nil or false). Sometimes it is useful to have functions
that rely on "not nilness" instead. These functions have been added to
support these cases [CLJ-1343]:
* some? - same as (not (nil? x))
* if-some - like if-let, but checks (some? test) instead of test
* when-some - like when-let, but checks (some? test) instead of test
### 2.4 Hashing
Clojure 1.6 provides new hashing algorithms for primitives and
collections, accessible via IHashEq/hasheq (in Java) or the
clojure.core/hash function (in Clojure). In general, these changes
should be transparent to users, except hash codes used inside hashed
collections like maps and sets will have better properties.
Hash codes returned by the Java .hashCode() method are unchanged and
continue to match Java behavior or conform to the Java specification
as appropriate.
Any collections implementing IHashEq or wishing to interoperate with
Clojure collections should conform to the hashing algorithms specified
in http://clojure.org/data_structures#hash and use the new function
`mix-collection-hash` for the final mixing operation. Alternatively,
you may call the helper functions `hash-ordered-coll` and
`hash-unordered-coll`.
Any details of the current hashing algorithm not specified on that
page should be considered subject to future change.
Related tickets for dev and regressions:
* [CLJ-1328](http://dev.clojure.org/jira/browse/CLJ-1328)
Make several Clojure tests independent of ordering
* [CLJ-1331](http://dev.clojure.org/jira/browse/CLJ-1331)
Update primitive vectors to use Murmur3 hash
* [CLJ-1335](http://dev.clojure.org/jira/browse/CLJ-1335)
Update hash for empty PersistentList and LazySeq
* [CLJ-1336](http://dev.clojure.org/jira/browse/CLJ-1336)
Make hashing mixing functions available in Clojure
* [CLJ-1338](http://dev.clojure.org/jira/browse/CLJ-1338)
Make Murmur3 class public
* [CLJ-1344](http://dev.clojure.org/jira/browse/CLJ-1344)
Update mapHasheq to call Murmur3 algorithm
* [CLJ-1348](http://dev.clojure.org/jira/browse/CLJ-1348)
Add hash-ordered-coll and hash-unordered-coll
* [CLJ-1355](http://dev.clojure.org/jira/browse/CLJ-1355)
Restore cached hashCode for Symbol and (uncached) hashCode for Keyword
* [CLJ-1365](http://dev.clojure.org/jira/browse/CLJ-1365)
Add type hints for new collection hash functions
### 2.5 bitops
* [CLJ-827](http://dev.clojure.org/jira/browse/CLJ-827) - unsigned-bit-shift-right
A new unsigned-bit-shift-right (Java's >>>) has been added to the core
library. The shift distance is truncated to the least 6 bits (per the
Java specification for long >>>).
Examples:
(unsigned-bit-shift-right 2r100 1) ;; 2r010
(unsigned-bit-shift-right 2r100 2) ;; 2r001
(unsigned-bit-shift-right 2r100 3) ;; 2r000
### 2.6 clojure.test
* [CLJ-866](http://dev.clojure.org/jira/browse/CLJ-866) - test-vars
* [CLJ-1352](http://dev.clojure.org/jira/browse/CLJ-1352) - fix
regression in CLJ-866
Added a new clojure.test/test-vars function that takes a list of vars, groups them by namespace, and
runs them *with their fixtures*.
## 3 Enhancements
### 3.1 Printing
* [CLJ-908](http://dev.clojure.org/jira/browse/CLJ-908)
Print metadata for functions when *print-meta* is true and remove errant space at beginning.
* [CLJ-937](http://dev.clojure.org/jira/browse/CLJ-937)
pprint cl-format now supports E, F, and G formats for ratios.
### 3.2 Error messages
* [CLJ-1248](http://dev.clojure.org/jira/browse/CLJ-1248)
Include type information in reflection warning messages
* [CLJ-1099](http://dev.clojure.org/jira/browse/CLJ-1099)
If non-seq passed where seq is needed, error message now is an
ExceptionInfo with the instance value, retrievable via ex-data.
* [CLJ-1083](http://dev.clojure.org/jira/browse/CLJ-1083)
Fix error message reporting for "munged" function names (like a->b).
* [CLJ-1056](http://dev.clojure.org/jira/browse/CLJ-1056)
Handle more cases and improve error message for errors in defprotocol definitions.
* [CLJ-1102](http://dev.clojure.org/jira/browse/CLJ-1102)
Better handling of exceptions with empty stack traces.
* [CLJ-939](http://dev.clojure.org/jira/browse/CLJ-939)
Exceptions thrown in the top level ns form are reported without file or line number.
### 3.3 Documentation strings
* [CLJ-1164](http://dev.clojure.org/jira/browse/CLJ-1164)
Fix typos in clojure.instant/validated and other internal instant functions.
* [CLJ-1143](http://dev.clojure.org/jira/browse/CLJ-1143)
Correct doc string for ns macro.
* [CLJ-196](http://dev.clojure.org/jira/browse/CLJ-196)
Clarify value of *file* is undefined in the REPL.
* [CLJ-1228](http://dev.clojure.org/jira/browse/CLJ-1228)
Fix a number of spelling errors in namespace and doc strings.
* [CLJ-835](http://dev.clojure.org/jira/browse/CLJ-835)
Update defmulti doc to clarify expectations for hierarchy argument.
* [CLJ-1304](http://dev.clojure.org/jira/browse/CLJ-1304)
Fix minor typos in documentation and comments
* [CLJ-1302](http://dev.clojure.org/jira/browse/CLJ-1302)
Mention that keys and vals order are consistent with seq order
### 3.4 Performance
* [CLJ-858](http://dev.clojure.org/jira/browse/CLJ-858)
Improve speed of STM by removing System.currentTimeMillis.
* [CLJ-669](http://dev.clojure.org/jira/browse/CLJ-669)
clojure.java.io/do-copy: use java.nio for Files
* [commit](https://github.com/clojure/clojure/commit/0b73494c3c855e54b1da591eeb687f24f608f346)
Reduce overhead of protocol callsites by removing unneeded generated
cache fields.
### 3.5 Other enhancements
* [CLJ-908](http://dev.clojure.org/jira/browse/CLJ-908)
Make *default-data-reader-fn* set!-able in REPL, similar to *data-readers*.
* [CLJ-783](http://dev.clojure.org/jira/browse/CLJ-783)
Make clojure.inspector/inspect-tree work on sets.
* [CLJ-896](http://dev.clojure.org/jira/browse/CLJ-896)
Make browse-url aware of xdg-open.
* [CLJ-1160](http://dev.clojure.org/jira/browse/CLJ-1160)
Fix clojure.core.reducers/mapcat does not stop on reduced? values.
* [CLJ-1121](http://dev.clojure.org/jira/browse/CLJ-1121)
-> and ->> have been rewritten to work with a broader set of macros.
* [CLJ-1105](http://dev.clojure.org/jira/browse/CLJ-1105)
clojure.walk now supports records.
* [CLJ-949](http://dev.clojure.org/jira/browse/CLJ-949)
Removed all unnecessary cases of sneakyThrow.
* [CLJ-1238](http://dev.clojure.org/jira/browse/CLJ-1238)
Allow EdnReader to read foo// (matches LispReader behavior).
* [CLJ-1264](http://dev.clojure.org/jira/browse/CLJ-1264)
Remove uses of _ as a var in the Java code (causes warning in Java 8).
* [CLJ-394](http://dev.clojure.org/jira/browse/CLJ-394)
Add record? predicate.
* [CLJ-1200](http://dev.clojure.org/jira/browse/CLJ-1200)
ArraySeq dead code cleanup, ArraySeq_short support added.
* [CLJ-1331](http://dev.clojure.org/jira/browse/CLJ-1331)
Primitive vectors should implement hasheq and use new hash algorithm
* [CLJ-1354](http://dev.clojure.org/jira/browse/CLJ-1354)
Make APersistentVector.SubVector public so other collections can access
* [CLJ-1353](http://dev.clojure.org/jira/browse/CLJ-1353)
Make awt run headless during the build process
## 4 Bug Fixes
* [CLJ-1018](http://dev.clojure.org/jira/browse/CLJ-1018)
Make range consistently return infinite sequence of start with a step of 0.
* [CLJ-863](http://dev.clojure.org/jira/browse/CLJ-863)
Make interleave return () on 0 args and identity on 1 args.
* [CLJ-1072](http://dev.clojure.org/jira/browse/CLJ-1072)
Update internal usages of the old metadata reader syntax to new syntax.
* [CLJ-1193](http://dev.clojure.org/jira/browse/CLJ-1193)
Make bigint and biginteger functions work on double values outside long range.
* [CLJ-1154](http://dev.clojure.org/jira/browse/CLJ-1154)
Make Compile.java flush but not close stdout so errors can be reported.
* [CLJ-1161](http://dev.clojure.org/jira/browse/CLJ-1161)
Remove bad version.properties from sources jar.
* [CLJ-1175](http://dev.clojure.org/jira/browse/CLJ-1175)
Fix invalid behavior of Delay/deref if an exception is thrown - exception will
now be rethrown on subsequent calls and not enter a corrupted state.
* [CLJ-1171](http://dev.clojure.org/jira/browse/CLJ-1171)
Fix several issues with instance? to make it consistent when used with apply.
* [CLJ-1202](http://dev.clojure.org/jira/browse/CLJ-1202)
Protocol fns with dashes may get incorrectly compiled into field accesses.
* [CLJ-850](http://dev.clojure.org/jira/browse/CLJ-850)
Add check to emit invokePrim with return type of double or long if type-hinted.
* [CLJ-1177](http://dev.clojure.org/jira/browse/CLJ-1177)
clojure.java.io URL to File coercion corrupts path containing UTF-8 characters.
* [CLJ-1234](http://dev.clojure.org/jira/browse/CLJ-1234)
Accept whitespace in Record and Type reader forms (similar to data literals).
* [CLJ-1233](http://dev.clojure.org/jira/browse/CLJ-1233)
Allow ** as a valid symbol name without triggering dynamic warnings.
* [CLJ-1246](http://dev.clojure.org/jira/browse/CLJ-1246)
Add support to clojure.reflect for classes with annotations.
* [CLJ-1184](http://dev.clojure.org/jira/browse/CLJ-1184)
Evaling #{do ...} or [do ...] is treated as do special form.
* [CLJ-1090](http://dev.clojure.org/jira/browse/CLJ-1090)
Indirect function calls through Var instances fail to clear locals.
* [CLJ-1076](http://dev.clojure.org/jira/browse/CLJ-1076)
pprint tests fail on Windows, expecting \n.
* [CLJ-766](http://dev.clojure.org/jira/browse/CLJ-766)
Make into-array work consistently with short-array and byte-array on
bigger types.
* [CLJ-1285](http://dev.clojure.org/jira/browse/CLJ-1285)
Data structure invariants are violated after persistent operations when
collision node created by transients.
* [CLJ-1222](http://dev.clojure.org/jira/browse/CLJ-1222)
Multiplication overflow issues around Long/MIN_VALUE
* [CLJ-1118](http://dev.clojure.org/jira/browse/CLJ-1118)
Inconsistent numeric comparison semantics between BigDecimals and other numerics
* [CLJ-1125](http://dev.clojure.org/jira/browse/CLJ-1125)
Clojure can leak memory in a servlet container when using dynamic
bindings or STM transactions.
* [CLJ-1082](http://dev.clojure.org/jira/browse/CLJ-1082)
Subvecs of primitve vectors cannot be reduced
* [CLJ-1301](http://dev.clojure.org/jira/browse/CLJ-1301)
Case expressions use a mixture of hashCode and hasheq, potentially
leading to missed case matches when these differ.
* [CLJ-983](http://dev.clojure.org/jira/browse/CLJ-983)
proxy-super does not restore original binding if call throws exception
* [CLJ-1176](http://dev.clojure.org/jira/browse/CLJ-1176)
clojure.repl/source errors when *read-eval* bound to :unknown
* [CLJ-935](http://dev.clojure.org/jira/browse/CLJ-935)
clojure.string/trim uses different definition of whitespace than
triml and trimr
* [CLJ-1058](http://dev.clojure.org/jira/browse/CLJ-1058)
StackOverflowError on exception in reducef for PersistentHashMap
fold
* [CLJ-1328](http://dev.clojure.org/jira/browse/CLJ-1328)
Fix some tests in the Clojure test suite to make their names unique
and independent of hashing order
* [CLJ-1339](http://dev.clojure.org/jira/browse/CLJ-1339)
Empty primitive vectors throw NPE on .equals with non-vector
sequential types
* [CLJ-1363](http://dev.clojure.org/jira/browse/CLJ-1363)
Field access via .- in reflective case does not work
* [CLJ-944](http://dev.clojure.org/jira/browse/CLJ-944)
Compiler gives constant collections types which mismatch their
runtime values
* [CLJ-1387](http://dev.clojure.org/jira/browse/CLJ-1387)
reduce-kv on large hash maps ignores reduced result
# Changes to Clojure in Version 1.5.1
* fix for leak caused by ddc65a96fdb1163b
# Changes to Clojure in Version 1.5
## CONTENTS
<pre>
1 Deprecated and Removed Features
1.1 Clojure 1.5 reducers library requires Java 6 or later
2 New and Improved Features
2.1 Reducers
2.2 Reader Literals improved
2.3 clojure.core/set-agent-send-executor!, set-agent-send-off-executor!, and send-via
2.4 New threading macros
2.5 Column metadata captured by reader
2.6 gen-class improvements
2.7 Support added for marker protocols
2.8 clojure.pprint/print-table output compatible with Emacs Org mode
2.9 clojure.string/replace and replace-first handle special characters more predictably
2.10 Set and map constructor functions allow duplicates
2.11 More functions preserve metadata
2.12 New edn reader, improvements to *read-eval*
3 Performance Enhancements
4 Improved error messages
5 Improved documentation strings
6 Bug Fixes
7 Binary Compatibility Notes
</pre>
## 1 Deprecated and Removed Features
### 1.1 Clojure 1.5 reducers library requires Java 6 or later
The new reducers library (see below) requires Java 6 plus a ForkJoin
library, or Java 7 or later. Clojure 1.5 can still be compiled and
run with Java 5. The only limitations with Java 5 are that the new
reducers library will not work, and building Clojure requires skipping
the test suite (e.g. by using the command "ant jar").
## 2 New and Improved Features
### 2.1 Reducers
Reducers provide a set of high performance functions for working with collections. The actual fold/reduce algorithms are specified via the collection being reduced. This allows each collection to define the most efficient way to reduce its contents.
The implementation details of reducers are available at the [Clojure blog](http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html) and therefore won't be repeated in these change notes. However, as a summary:
* There is a new namespace: clojure.core.reducers
* It contains new versions of map, filter etc based upon transforming reducing functions - reducers
* It contains a new function, fold, which is a parallel reduce+combine
fold uses fork/join when working with (the existing!) Clojure vectors and maps
* Your new parallel code has exactly the same shape as your existing seq-based code
* The reducers are composable
* Reducer implementations are primarily functional - no iterators
* The model uses regular data structures, not 'parallel collections' or other OO malarkey
* It's fast, and can become faster still
* This is work-in-progress
Examples:
user=> (require '[clojure.core.reducers :as r])
user=> (reduce + (r/filter even? (r/map inc [1 1 1 2])))
;=> 6
;;red is a reducer awaiting a collection
user=> (def red (comp (r/filter even?) (r/map inc)))
user=> (reduce + (red [1 1 1 2]))
;=> 6
user=> (into #{} (r/filter even? (r/map inc [1 1 1 2])))
;=> #{2}
### 2.2 Reader Literals improved
* [CLJ-1034](http://dev.clojure.org/jira/browse/CLJ-1034)
"Conflicting data-reader mapping" should no longer be thrown where there really isn't a conflict. Until this patch, having data_readers.clj on the classpath twice would cause the above exception.
* [CLJ-927](http://dev.clojure.org/jira/browse/CLJ-927)
Added `*default-data-reader-fn*` to clojure.core. When no data reader is found for a tag and `*default-data-reader-fn*`is non-nil, it will be called with two arguments, the tag and the value. If `*default-data-reader-fn*` is nil (the default), an exception will be thrown for the unknown tag.
### 2.3 clojure.core/set-agent-send-executor!, set-agent-send-off-executor!, and send-via
Added two new functions:
* clojure.core/set-agent-send-executor!
Allows the user to set the `java.util.concurrent.Executor` used when calling `clojure.core/send`. Defaults to a fixed thread pool of size: (numCores + 2)
* clojure.core/set-agent-send-off-executor!
Allows the user to set the `java.util.concurrent.Executor` used when calling `clojure.core/send-off`. Defaults to a cached thread pool.
* clojure.core/send-via
Like `send`, and `send-off`, except the first argument to this function is an executor to use when sending.
### 2.4 New threading macros
* clojure.core/cond-> [expr & clauses]
Takes an expression and a set of test/form pairs. Threads the expression (via ->) through each form for which the corresponding test expression (not threaded) is true.
Example:
user=> (cond-> 1
true inc
false (* 42)
(= 2 2) (* 3))
6
* clojure.core/cond->> [expr & clauses]
Takes an expression and a set of test/form pairs. Threads expr (via ->>)
through each form for which the corresponding test expression (not threaded) is true.
Example:
user=> (def d [0 1 2 3])
#'user/d
user=> (cond->> d
true (map inc)
(seq? d) (map dec)
(= (count d) 4) (reduce +)) ;; no threading in the test expr
;; so d must be passed in explicitly
10
* clojure.core/as-> [expr name & forms]
Binds name to expr, evaluates the first form in the lexical context of that binding, then binds name to that result, repeating for each successive form
Note: this form does not actually perform any threading. Instead it allows the user to assign a name and lexical context to a value created by a parent threading form.
Example:
user=> (-> 84
(/ 4)
(as-> twenty-one ;; uses the value from ->
(* 2 twenty-one))) ;; no threading here
42
* clojure.core/some-> [expr & forms]
When expr is not nil, threads it into the first form (via ->),
and when that result is not nil, through the next etc.
Example:
user=> (defn die [x] (assert false))
#'user/die
user=> (-> 1 inc range next next next die)
AssertionError Assert failed: false user/die (NO_SOURCE_FILE:65)
user=> (some-> 1 inc range next next next die)
nil
* clojure.core/some->> [expr & forms]
When expr is not nil, threads it into the first form (via ->>),
and when that result is not nil, through the next etc.
Same as some-> except the value is threaded as the last argument in each form.
### 2.5 Column metadata captured by reader
* [CLJ-960](http://dev.clojure.org/jira/browse/CLJ-960)
Data read by the clojure reader is now tagged with :column in addition to :line.
### 2.6 gen-class improvements
* [CLJ-745](http://dev.clojure.org/jira/browse/CLJ-745)
It is now possible to expose protected final methods via `:exposes-methods` in `gen-class`. This allows Clojure classes created via gen-class to access protected methods of its parent class.
Example:
(gen-class :name clojure.test_clojure.genclass.examples.ProtectedFinalTester
:extends java.lang.ClassLoader
:main false
:prefix "pf-"
:exposes-methods {findSystemClass superFindSystemClass})
* [CLJ-948](http://dev.clojure.org/jira/browse/CLJ-948)
It is now possible to annotate constructors via `gen-class`.
Example:
(gen-class :name foo.Bar
:extends clojure.lang.Box
:constructors {^{Deprecated true} [Object] [Object]}
:init init
:prefix "foo")
### 2.7 Support added for marker protocols
* [CLJ-966](http://dev.clojure.org/jira/browse/CLJ-966)
`defprotocol` no longer requires that at least one method be given in the definition of the protocol. This allows for marker protocols, whose sole reason of existence is to allow `satisfies?` to be true for a given type.
Example:
user=> (defprotocol P (hi [_]))
P
user=> (defprotocol M) ; marker protocol
M
user=> (deftype T [a] M P (hi [_] "hi there"))
user.T
user=> (satisfies? P (T. 1))
true
user=> (satisfies? M (T. 1))
true
user=> (hi (T. 1))
"hi there"
user=> (defprotocol M2 "marker for 2") ; marker protocol again
M2
user=> (extend-type T M2)
nil
user=> (satisfies? M2 (T. 1))
true
### 2.8 clojure.pprint/print-table output compatible with Emacs Org mode
For the convenience of those that use Emacs Org mode,
`clojure.pprint/print-table` now prints tables in the form used by
that mode. Emacs Org mode has features to make it easy to edit such
tables, and even to do spreadsheet-like calculations on their
contents. See the [Org mode documentation on
tables](http://orgmode.org/manual/Tables.html) for details.
user=> (clojure.pprint/print-table [:name :initial-impression]
[{:name "Rich" :initial-impression "rock star"}
{:name "Andy" :initial-impression "engineer"}])
| :name | :initial-impression |
|-------+---------------------|
| Rich | rock star |
| Andy | engineer |
### 2.9 clojure.string/replace and replace-first handle special characters more predictably
`clojure.string/replace` and `clojure.string/replace-first` are now
consistent in the way that they handle the replacement strings: all
characters in the replacement strings are treated literally, including
backslash and dollar sign characters.
user=> (require '[clojure.string :as s])
user=> (s/replace-first "munge.this" "." "$")
;=> "munge$this"
user=> (s/replace "/my/home/dir" #"/" (fn [s] "\\"))
;=> "\\my\\home\\dir"
There is one exception, which is described in the doc strings. If you
call these functions with a regex to search for and a string as the
replacement, then dollar sign and backslash characters in the
replacement string are treated specially. Occurrences of `$1` in the
replacement string are replaced with the string that matched the first
parenthesized subexpression of the regex, occurrences of `$2` are
replaced with the match of the second parenthesized subexpression,
etc.
user=> (s/replace "x12, b4" #"([a-z]+)([0-9]+)" "$1 <- $2")
;=> "x <- 12, b <- 4"
Individual occurrences of `$` or `\` in the replacement string that
you wish to be treated literally can be escaped by prefixing them with
a `\`. If you wish your replacement string to be treated literally
and its contents are unknown to you at compile time (or you don't wish
to tarnish your constant string with lots of backslashes), you can use
the new function `clojure.string/re-quote-replacement` to do the
necessary escaping of special characters for you.
user=> (s/replace "x12, b4" #"([a-z]+)([0-9]+)"
(s/re-quote-replacement "$1 <- $2"))
;=> "$1 <- $2, $1 <- $2"
### 2.10 Set and map constructor functions allow duplicates
All of the functions that construct sets such as `set` and
`sorted-set` allow duplicate elements to appear in their arguments,
and they are documented to treat this case as if by repeated uses of
`conj`.
Similarly, all map constructor functions such as `hash-map`,
`array-map`, and `sorted-map` allow duplicate keys, and are documented
to treat this case as if by repeated uses of `assoc`.
As before, literal sets, e.g. `#{1 2 3}`, do not allow duplicate
elements, and while elements can be expressions evaluated at run time
such as `#{(inc x) (dec y)}`, this leads to a check for duplicates at
run time whenever the set needs to be constructed, throwing an
exception if any duplicates are found.
Similarly, literal maps do not allow duplicate keys. New to Clojure
1.5 is a performance optimization: if all keys are compile time
constants but one or more values are expressions requiring evaluation
at run time, duplicate keys are checked for once at compile time only,
not each time a map is constructed at run time.
* [CLJ-1065](http://dev.clojure.org/jira/browse/CLJ-1065)
Allow duplicate set elements and map keys for all set and map constructors
### 2.11 More functions preserve metadata
Most functions that take a collection and return a "modified" version
of that collection preserve the metadata that was on the input
collection, e.g. `conj`, `assoc`, `dissoc`, etc. One notable
exception was `into`, which would return a collection with metadata
`nil` for several common types of input collections.
Now the functions `into`, `select-keys`, `clojure.set/project`, and
`clojure.set/rename` return collections with the same metadata as
their input collections.
### 2.12 New edn reader, improvements to `*read-eval*`
The new `clojure.edn` namespace reads edn (http://edn-format.org) data,
and should be used for reading data from untrusted sources.
Clojure's core read* functions can evaluate code, and should not be
used to read data from untrusted sources. As of 1.5, `*read-eval*`
supports a documented set of thread-local bindings, see the doc string
for details.
`*read-eval*`'s default can be set to false by setting a system property:
-Dclojure.read.eval=false
## 3 Performance and Memory Enhancements
* [CLJ-988](http://dev.clojure.org/jira/browse/CLJ-988)
Multimethod tables are now protected by a read/write lock instead of a synchronized method. This should result in a performance boost for multithreaded code using multimethods.
* [CLJ-1061](http://dev.clojure.org/jira/browse/CLJ-1061)
`when-first` now evaluates its expression only once.
* [CLJ-1084](http://dev.clojure.org/jira/browse/CLJ-1084)
`PersistentVector$ChunkedSeq` now implements `Counted` interface, to avoid some cases where vector elements were being counted by iterating over their elements.
* [CLJ-867](http://dev.clojure.org/jira/browse/CLJ-867)
Records with same fields and field values, but different types, now usually hash to different values.
* [CLJ-1000](http://dev.clojure.org/jira/browse/CLJ-1000)
Cache hasheq() for seqs, sets, vectors, maps and queues
* (no ticket) array-map perf tweaks
* [CLJ-1111](http://dev.clojure.org/jira/browse/CLJ-1111)
Allows loop to evaluate to primitive values
* (no ticket) Move loop locals into same clearing context as loop body
## 4 Improved error messages
* [CLJ-103](http://dev.clojure.org/jira/browse/CLJ-103)
Improved if-let error message when form has a improperly defined body.
* [CLJ-897](http://dev.clojure.org/jira/browse/CLJ-897)
Don't use destructuring in defrecord/deftype arglists to get a slightly better error message when forgetting to specify the fields vector
* [CLJ-788](http://dev.clojure.org/jira/browse/CLJ-788)
Add source and line members and getters to CompilerException
* [CLJ-157](http://dev.clojure.org/jira/browse/CLJ-157)
Better error messages for syntax errors w/ defn and fn
* [CLJ-940](http://dev.clojure.org/jira/browse/CLJ-940)
Passing a non-sequence to refer :only results in uninformative exception
* [CLJ-1052](http://dev.clojure.org/jira/browse/CLJ-1052)
`assoc` now throws an exception if the last key argument is missing a value.
## 5 Improved documentation strings
* [CLJ-893](http://dev.clojure.org/jira/browse/CLJ-893)
Document that vec will alias Java arrays
* [CLJ-892](http://dev.clojure.org/jira/browse/CLJ-892)
Clarify doc strings of sort and sort-by: they will modify Java array arguments
* [CLJ-1019](http://dev.clojure.org/jira/browse/CLJ-1019)
ns-resolve doc has a typo
* [CLJ-1038](http://dev.clojure.org/jira/browse/CLJ-1038)
Docstring for deliver doesn't match behavior
* [CLJ-1055](http://dev.clojure.org/jira/browse/CLJ-1055)
"be come" should be "become"
* [CLJ-917](http://dev.clojure.org/jira/browse/CLJ-917)
clojure.core/definterface is not included in the API docs
* (no ticket) clojure.core/read, read-string, and *read-eval* all have more extensive documentation.
## 6 Bug Fixes
* [CLJ-962](http://dev.clojure.org/jira/browse/CLJ-962)
Vectors returned by subvec allow access at negative indices
* [CLJ-952](http://dev.clojure.org/jira/browse/CLJ-952)
bigdec does not properly convert a clojure.lang.BigInt
* [CLJ-975](http://dev.clojure.org/jira/browse/CLJ-975)
inconsistent destructuring behaviour when using nested maps
* [CLJ-954](http://dev.clojure.org/jira/browse/CLJ-954)
TAP support in clojure.test.tap Needs Updating
* [CLJ-881](http://dev.clojure.org/jira/browse/CLJ-881)
exception when cl-format is given some ~f directive/value combinations
* [CLJ-763](http://dev.clojure.org/jira/browse/CLJ-763)
Do not check for duplicates in destructuring map creation
* [CLJ-667](http://dev.clojure.org/jira/browse/CLJ-667)
Allow loops fully nested in catch/finally
* [CLJ-768](http://dev.clojure.org/jira/browse/CLJ-768)
cl-format bug in ~f formatting
* [CLJ-844](http://dev.clojure.org/jira/browse/CLJ-844)
NPE calling keyword on map from bean
* [CLJ-934](http://dev.clojure.org/jira/browse/CLJ-934)
disj! Throws exception when attempting to remove multiple items in one call
* [CLJ-943](http://dev.clojure.org/jira/browse/CLJ-943)
When load-lib fails, a namespace is still created
* [CLJ-981](http://dev.clojure.org/jira/browse/CLJ-981)
clojure.set/rename-keys deletes keys when there's a collision
* [CLJ-961](http://dev.clojure.org/jira/browse/CLJ-961)
with-redefs loses a Var's root binding if the Var is thread-bound
* [CLJ-1032](http://dev.clojure.org/jira/browse/CLJ-1032)
seque leaks threads from the send-off pool
* [CLJ-1041](http://dev.clojure.org/jira/browse/CLJ-1041)
reduce-kv on sorted maps should stop on seeing a Reduced value
* [CLJ-1011](http://dev.clojure.org/jira/browse/CLJ-1011)
clojure.data/diff should cope with null and false values in maps
* [CLJ-977](http://dev.clojure.org/jira/browse/CLJ-977)
(int \a) returns a value, (long \a) throws an exception
* [CLJ-964](http://dev.clojure.org/jira/browse/CLJ-964)
test-clojure/rt.clj has undeclared dependency on clojure.set
* [CLJ-923](http://dev.clojure.org/jira/browse/CLJ-923)
Reading ratios prefixed by + is not working
* [CLJ-1012](http://dev.clojure.org/jira/browse/CLJ-1012)
partial function should also accept 1 arg (just f)
* [CLJ-932](http://dev.clojure.org/jira/browse/CLJ-932)
contains? Should throw exception on non-keyed collections
* [CLJ-730](http://dev.clojure.org/jira/browse/CLJ-730) Create test suite for functional fns (e.g. juxt, comp, partial, etc.)
* [CLJ-757](http://dev.clojure.org/jira/browse/CLJ-757)
Empty transient maps/sets return wrong value for .contains
* [CLJ-828](http://dev.clojure.org/jira/browse/CLJ-828)
clojure.core/bases returns a cons when passed a class and a Java array when passed an interface
* [CLJ-1062](http://dev.clojure.org/jira/browse/CLJ-1062)
CLJ-940 breaks compilation of namespaces that don't have any public functions
* [CLJ-1070](http://dev.clojure.org/jira/browse/CLJ-1070)
PersistentQueue's hash function does not match its equality
* [CLJ-987](http://dev.clojure.org/jira/browse/CLJ-987)
pprint doesn't flush the underlying stream
* [CLJ-963](http://dev.clojure.org/jira/browse/CLJ-963)
Support pretty printing namespace declarations under code-dispatch
* [CLJ-902](http://dev.clojure.org/jira/browse/CLJ-902)
doc macro broken for namespaces
* [CLJ-909](http://dev.clojure.org/jira/browse/CLJ-909) Make LineNumberingPushbackReader's buffer size configurable
* [CLJ-910](http://dev.clojure.org/jira/browse/CLJ-910) Allow for type-hinting the method receiver in memfn
* [CLJ-1048](http://dev.clojure.org/jira/browse/CLJ-1048) add test.generative to Clojure's tests
* [CLJ-1071](http://dev.clojure.org/jira/browse/CLJ-1071) ExceptionInfo does no abstraction
* [CLJ-1085](http://dev.clojure.org/jira/browse/CLJ-1085) clojure.main/repl unconditionally refers REPL utilities into `*ns*`
* (no ticket) Rich Hickey fix: syntax-quote was walking records, returning maps
* [CLJ-1116](http://dev.clojure.org/jira/browse/CLJ-1116) More REPL-friendly 'ns macro
* (no ticket) Rich Hickey fix: deref any j.u.c.Future
* [CLJ-1092](http://dev.clojure.org/jira/browse/CLJ-1092) New function re-quote-replacement has incorrect :added metadata
* [CLJ-1098](http://dev.clojure.org/jira/browse/CLJ-1098) Implement IKVReduce and CollFold for nil
* (no ticket) Rich Hickey fix: impose once semantics on fabricated closures for e.g. loops
* [CLJ-1140](http://dev.clojure.org/jira/browse/CLJ-1140) Restore {:as x} destructuring for empty lists
* [CLJ-1150](http://dev.clojure.org/jira/browse/CLJ-1150) Make some PersistentVector's and APersistentVector.SubVector's internals public
* (no ticket) Rich Hickey fix: use non-loading classForName
* [CLJ-1106](http://dev.clojure.org/jira/browse/CLJ-1106) Fixing set equality
## 7 Binary Compatibility Notes
* `public static inner class LispReader.ReaderException(int line, Throwable cause)`
Constructor changed to `ReaderException(int line, int column, Throwable cause)`
* `public Object clojure.lang.Agent.dispatch(IFn fn, ISeq args, boolean solo)`
Replaced with `dispatch(IFn fn, ISeq args, Executor exec)`
# Changes to Clojure in Version 1.4
## CONTENTS
<pre>
1 Deprecated and Removed Features
1.1 Fields that Start With a Dash Can No Longer Be Accessed Using Dot Syntax
2 New/Improved Features
2.1 Reader Literals
2.2 clojure.core/mapv
2.3 clojure.core/filterv
2.4 clojure.core/ex-info and clojure.core/ex-data
2.5 clojure.core/reduce-kv
2.6 clojure.core/contains? Improved
2.7 clojure.core/min and clojure.core/max prefer NaN
2.8 clojure.java.io/as-file and clojure.java.io/as-url Handle URL-Escaping Better
2.9 New Dot Syntax for Record and Type Field Access
2.10 Record Factory Methods Available Inside defrecord
2.11 assert-args Displays Namespace and Line Number on Errors
2.12 File and Line Number Added to Earmuff Dynamic Warning
2.13 require Can Take a :refer Option
2.14 *compiler-options* Var
2.15 Improved Reporting of Invalid Characters in Unicode String Literals
2.16 clojure.core/hash No Longer Relies on .hashCode
2.17 Java 7 Documentation
2.18 loadLibrary Loads Library Using System ClassLoader
2.19 Java int is boxed as java.lang.Integer
3 Performance Enhancements
4 Bug Fixes
</pre>
## 1 Deprecated and Removed Features
### 1.1 Record and Type Fields that Start With a Dash Can No Longer Be Accessed Using Dot Syntax
Clojure 1.4 introduces a field accessor syntax for the dot special form that aligns Clojure field lookup syntax with ClojureScript's.
For example, in Clojure 1.3, one can declare a record with a field starting with dash and access it like this:
(defrecord Bar [-a]) ;=> user.Bar
(.-a (Bar. 10)) ;=> 10
In 1.4, the above code results in `IllegalArgumentException No matching field found: a for class user.Bar`
However, the field may still be accessed as a keyword:
(:-a (Bar. 10)) ;=> 10
## 2 New and Improved Features
### 2.1 Reader Literals
Clojure 1.4 supports reader literals, which are data structures tagged
by a symbol to denote how they will be read.
When Clojure starts, it searches for files named `data_readers.clj`
at the root of the classpath. Each such file must contain a Clojure
map of symbols, like this:
{foo/bar my.project.foo/bar
foo/baz my.project/baz}
The key in each pair is a tag that will be recognized by
the Clojure reader. The value in the pair is the
fully-qualified name of a Var which will be invoked by the reader to
parse the form following the tag. For example, given the
data_readers.clj file above, the Clojure reader would parse this
form:
#foo/bar [1 2 3]
by invoking the Var `#'my.project.foo/bar` on the vector `[1 2 3]`. The
data reader function is invoked on the form AFTER it has been read
as a normal Clojure data structure by the reader.
Reader tags without namespace qualifiers are reserved for Clojure. Default
reader tags are defined in `clojure.core/default-data-readers` but may be
overridden in `data_readers.clj` or by rebinding `*data-readers*`.
#### 2.1.1 Instant Literals
Clojure supports literals for instants in the form
`#inst "yyyy-mm-ddThh:mm:ss.fff+hh:mm"`. These literals are parsed as `java.util.Date`s
by default. They can be parsed as `java.util.Calendar`s or `java.util.Timestamp`s
by binding `*data-readers*` to use `clojure.instant/read-instant-calendar` or
`clojure.instant/read-instant-timestamp`.
(def instant "#inst \"@2010-11-12T13:14:15.666\"")
; Instants are read as java.util.Date by default
(= java.util.Date (class (read-string instant)))
;=> true
; Instants can be read as java.util.Calendar or java.util.Timestamp
(binding [*data-readers* {'inst read-instant-calendar}]
(= java.util.Calendar (class (read-string instant))))
;=> true
(binding [*data-readers* {'inst read-instant-timestamp}]
(= java.util.Timestamp (class (read-string instant))))
;=> true
#### 2.1.2 UUID Literals
Clojure supports literals for UUIDs in the form `#uuid "uuid-string"`. These
literals are parsed as `java.util.UUID`s.
### 2.2 clojure.core/mapv
`mapv` takes a function `f` and one or more collections and returns a
vector consisting of the result of applying `f` to the set of first items of
each collection, followed by applying `f` to the set of second items in each
collection, until any one of the collections is exhausted. Any remaining
items in other collections are ignored. `f` should accept a number of arguments
equal to the number of collections.
(= [1 2 3] (mapv + [1 2 3]))
;=> true
(= [2 3 4] (mapv + [1 2 3] (repeat 1)))
;=> true
### 2.3 clojure.core/filterv
`filterv` takes a predicate `pred` and a collection and returns a vector
of the items in the collection for which `(pred item)` returns true. `pred`
must be free of side-effects.
(= [] (filterv even? [1 3 5]))
;=> true
(= [2 4] (filterv even? [1 2 3 4 5]))
;=> true
### 2.4 clojure.core/ex-info and clojure.core/ex-data
`ex-info` creates an instance of `ExceptionInfo`. `ExceptionInfo` is a
`RuntimeException` subclass that takes a string `msg` and a map of data.
(ex-info "Invalid use of robots" {:robots false})
;=> #<ExceptionInfo clojure.lang.ExceptionInfo: Invalid use of robots {:robots false}>
`ex-data` is called with an exception and will retrieve that map of data
if the exception is an instance of `ExceptionInfo`.
(ex-data (ex-info "Invalid use of robots" {:robots false}))
;=> {:robots false}
### 2.5 clojure.core/reduce-kv
`reduce-kv` reduces an associative collection. It takes a function `f`,
an initial value `init` and an associative collection `coll`. `f` should
be a function of 3 arguments. Returns the result of applying `f` to `init`,
the first key and the first value in `coll`, then applying `f` to that result
and the 2nd key and value, etc. If `coll` contains no entries, returns `init`
and f is not called. Note that `reduce-kv` is supported on vectors,
where the keys will be the ordinals.
(reduce-kv str "Hello " {:w \o :r \l :d \!})
;=> "Hello :rl:d!:wo"
(reduce-kv str "Hello " [\w \o \r \l \d \!])
;=> "Hello 0w1o2r3l4d5!"
### 2.6 clojure.core/contains? Improved
`contains?` now works with `java.util.Set`.
### 2.7 clojure.core/min and clojure.core/max prefer NaN
`min` and `max` now give preference to returning NaN if either of their
arguments is NaN.
### 2.8 clojure.java.io/as-file and clojure.java.io/as-url Handle URL-Escaping Better
`as-file` and `as-url` now handle URL-escaping in both directions.
### 2.9 New Dot Syntax for Record and Type Field Access
Clojure 1.4 introduces a field accessor syntax for the dot special
form that aligns Clojure field lookup syntax with ClojureScript's.
In 1.4, to declare a record type and access its property `x`, one can
write:
(defrecord Foo [x]) ;=> user.Foo
(.-x (Foo. 10)) ;=> 10
This addition makes it easier to write code that will run as expected
in both Clojure and ClojureScript.
### 2.10 Record Factory Methods Available Inside defrecord
Prior to 1.4, you could not use the factory functions (`->RecordClass`
and `map->RecordClass`) to construct a new record from inside a
`defrecord` definition.
The following example did not work prior to 1.4, but is now
valid. This example makes use of `->Mean` which would have not yet
been available.
(defrecord Mean [last-winner]
Player
(choose [_] (if last-winner last-winner (random-choice)))
(update-strategy [_ me you] (->Mean (when (iwon? me you) me))))
### 2.11 assert-args Displays Namespace and Line Number on Errors
`assert-args` now uses &form to report the namespace and line number where
macro syntax errors occur.
### 2.12 File and Line Number Added to Earmuff Dynamic Warning
When a variable is defined using earmuffs but is not declared dynamic,
Clojure emits a warning. That warning now includes the file and line
number.
### 2.13 require Can Take a :refer Option
`require` can now take a `:refer` option. `:refer` takes a list of symbols
to refer from the namespace or `:all` to bring in all public vars.
### 2.14 \*compiler-options\* Var
The dynamic var `*compiler-options*` contains a map of options to send
to the Clojure compiler.
Supported options:
* `:elide-meta`: Have certain metadata elided during compilation. This
should be set to a collection of keywords.
* `:disable-locals-clearing`: Set to true to disable clearing. Useful for
using a debugger.
The main function of the Clojure compiler sets the
`*compiler-options*` from properties prefixed by `clojure.compiler`,
e.g.
java -Dclojure.compiler.elide-meta='[:doc :file :line]'
### 2.15 Improved Reporting of Invalid Characters in Unicode String Literals
When the reader finds an invalid character in a Unicode string literal, it
now reports the character instead of its numerical representation.
### 2.16 clojure.core/hash No Longer Relies on .hashCode
`hash` no longer directly uses .hashCode() to return the hash of a Clojure
data structure. It calls `clojure.lang.Util.hasheq`, which has its own implementation
for Integer, Short, Byte, and Clojure collections. This ensures that the hash code
returned is consistent with `=`.
### 2.17 Java 7 Documentation
`*core-java-api*` will now return the URL for the Java 7 Javadoc when you are
running Java 7.
### 2.18 loadLibrary Loads Library Using System ClassLoader
A static method, `loadLibrary`, was added to `clojure.lang.RT` to load a
library using the system ClassLoader instead of Clojure's class loader.
### 2.19 Java int is Boxed As java.lang.Integer
Java `int`s are now boxed as `java.lang.Integer`s. See
[the discussion on clojure-dev](https://groups.google.com/forum/#!msg/clojure/7-hARL5c1lI/ntnnOweEGfUJ)
for more information.
## 3 Performance Enhancements
* `(= char char)` is now optimized
* `equiv` is inlined in variadic =
* `toString` cached on keywords and symbols
## 4 Bug Fixes
* [CLJ-829](http://dev.clojure.org/jira/browse/CLJ-829)
Transient hashmaps mishandle hash collisions
* [CLJ-773](http://dev.clojure.org/jira/browse/CLJ-773)
Macros that are expanded away still have their vars referenced in the emitted byte code
* [CLJ-837](http://dev.clojure.org/jira/browse/CLJ-837)
java.lang.VerifyError when compiling deftype or defrecord with argument name starting with double underscore characters
* [CLJ-369](http://dev.clojure.org/jira/browse/CLJ-369)
Check for invalid interface method names
* [CLJ-845](http://dev.clojure.org/jira/browse/CLJ-845)
Unexpected interaction between protocol extension and namespaced method keyword/symbols
* Ignoring namespace portion of symbols used to name methods in extend-type and extend-protocol
* [CLJ-852](http://dev.clojure.org/jira/browse/CLJ-852)
IllegalArgumentException thrown when defining a var whose value is calculated with a primitive fn
* [CLJ-855](http://dev.clojure.org/jira/browse/CLJ-855)
catch receives a RuntimeException rather than the expected checked exception
* [CLJ-876](http://dev.clojure.org/jira/browse/CLJ-876)
#^:dynamic vars declared in a nested form are not immediately dynamic
* [CLJ-886](http://dev.clojure.org/jira/browse/CLJ-886)
java.io/do-copy can garble multibyte characters
* [CLJ-895](http://dev.clojure.org/jira/browse/CLJ-895)
Collection.toArray implementations do not conform to Java API docs
* obey contract for toArray return type
* [CLJ-898](http://dev.clojure.org/jira/browse/CLJ-898)
Agent sends consume heap
* Only capture a shallow copy of the current Frame in binding-conveyor-fn, so that sends in agent actions don't build infinite Frame stacks
* [CLJ-928](http://dev.clojure.org/jira/browse/CLJ-928)
Instant literal for Date and Timestamp should print in UTC
* [CLJ-931](http://dev.clojure.org/jira/browse/CLJ-933)
Syntactically broken clojure.test/are tests succeed
* [CLJ-933](http://dev.clojure.org/jira/browse/CLJ-933)
Compiler warning on clojure.test-clojure.require-scratch
# Changes to Clojure in Version 1.3
## CONTENTS
<pre>
1 Deprecated and Removed Features
1.1 Earmuffed Vars are No Longer Automatically Considered Dynamic
1.2 ISeq No Longer Inherits from Sequential
1.3 Removed Bit Operation Support for Boxed Numbers
1.4 Ancillary Namespaces No Longer Auto-Load on Startup
1.5 Replicate Deprecated
2 New/Improved Features
2.1 Enhanced Primitive Support
2.2 defrecord and deftype Improvements
2.3 Better Exception Reporting
2.4 clojure.reflect/reflect
2.5 clojure.data/diff
2.6 clojure.core/every-pred and clojure.core/some-fn Combinators
2.7 clojure.core/realized?
2.8 clojure.core/with-redefs-fn & with-redefs
2.9 clojure.core/find-keyword
2.10 clojure.repl/pst
2.11 clojure.pprint/print-table
2.12 pprint respects *print-length*
2.13 compilation and deployment via Maven
2.14 internal keyword map uses weak refs
2.15 ^:const defs
2.16 Message Bearing Assert
2.17 Error Checking for defmulti Options
2.18 Removed Checked Exceptions
2.19 vector-of Takes Multiple Arguments
2.20 deref with timeout
2.21 Walk Support for sorted-by Collections
2.22 string.join Enhanced to Work with Sets
2.23 clojure.test-helper
2.24 Newline outputs platform-specific newline sequence
2.25 init-proxy and update-proxy return proxy
2.26 doc & find-doc moved to REPL
2.27 clojure.java.shell/sh accepts as input anything that clojure.java.io/copy does
2.28 InterruptedHandler Promoted to clojure.repl
2.29 Add support for running -main namespaces from clojure.main
2.30 Set thread names on agent thread pools
2.31 Add docstring support to def
2.32 Comp function returns identity when called with zero arity
2.33 Type hints can be applied to arg vectors
2.34 Binding Conveyance
3 Performance Enhancements
4 Bug Fixes
5 Modular Contrib
</pre>
## 1 Deprecated and Removed Features
### 1.1 Earmuffed Vars Are No Longer Automatically Considered Dynamic.
(def *fred*)
=> Warning: *fred* not declared dynamic and thus is not dynamically rebindable, but its name suggests otherwise. Please either indicate ^:dynamic ** or change the name.
### 1.2 ISeq No Longer Inherits From Sequential
This allows ISeq implementers to be in the map or set equality partition.
### 1.3 Removed Bit Operation Support for Boxed Numbers
Bit Operations map directly to primitive operations
### 1.4 Ancillary Namespaces No Longer Auto-Load on Startup
The following namespaces are no longer loaded on startup: clojure.set, clojure.xml, clojure.zip
### 1.5 Replicate Deprecated
Use repeat instead.
## 2 New/Improved Features
### 2.1 Enhanced Primitive Support
Full details here:
- [Enhanced Primitive Support][EPS]
- [Documentation for 1.3 Numerics][NUM]
[EPS]: http://dev.clojure.org/display/doc/Enhanced+Primitive+Support
[NUM]: http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics
### 2.2 defrecord and deftype Improvements
Details here: [Defrecord Improvements](http://dev.clojure.org/display/design/defrecord+improvements)
### 2.3 Better Exception Reporting
Details here: [Error Handling](http://dev.clojure.org/display/design/Error+Handling)
Additionally:
Better error messages:
* When calling macros with arity
* For Invalid Map Literals
* For alias function if using unknown namespace
* In the REPL
* Add "starting at <line>" to EOF while reading exceptions
* Better compilation error reporting
### 2.4 clojure.reflect/reflect
Full details here: [Reflection API](http://dev.clojure.org/display/design/Reflection+API)
### 2.5 clojure.data/diff
Recursively compares a and b, returning a tuple of [things-only-in-a things-only-in-b things-in-both]
(diff {:a 1 :b 2} {:a 1 :b 22 :c 3})
=> ({:b 2} {:c 3, :b 22} {:a 1})
### 2.6 clojure.core/every-pred and clojure.core/some-fn Combinators
every-pred takes a set of predicates and returns a function f that returns true if all of its composing predicates return a logical true value against all of its arguments, else it returns false.
((every-pred even?) 2 4 6)
=> true
((every-pred even?) 2 4 5)
=>false
some-fn takes a set of predicates and returns a function f that returns the first logical true value returned by one of its composing predicates against any of its arguments, else it returns logical false.
((some-fn even?) 2 4 5)
=> true
((some-fn odd?) 2 4 6)
=> false
### 2.7 clojure.core/realized?
Returns true if a value has been produced for a promise, delay, future or lazy sequence.
(let [x (range 5)]
(println (realized? x))
(first x)
(println (realized? x)))
=> false
=> true
### 2.8 clojure.core/with-redefs-fn & clojure.core/with-redefs
with-redefs-fn temporarily redefines Vars during a call to func. with-redefs temporarily redefines Vars while executing the body.
(with-redefs [nil? :temp] (println nil?))
=> :temp
### 2.9 clojure.core/find-keyword
Returns a Keyword with the given namespace and name if one already exists.
(find-keyword "def")
=> :def
(find-keyword "fred")
=> nil
### 2.10 clojure.repl/pst
Prints a stack trace of the exception
(pst (IllegalArgumentException.))
IllegalArgumentException
user/eval27 (NO_SOURCE_FILE:18)
clojure.lang.Compiler.eval (Compiler.java:6355)
clojure.lang.Compiler.eval (Compiler.java:6322)
clojure.core/eval (core.clj:2699)
clojure.main/repl/read-eval-print--5906 (main.clj:244)
clojure.main/repl/fn--5911 (main.clj:265)
clojure.main/repl (main.clj:265)
clojure.main/repl-opt (main.clj:331)
clojure.main/main (main.clj:427)
clojure.lang.Var.invoke (Var.java:397)
clojure.lang.Var.applyTo (Var.java:518)
clojure.main.main (main.java:37)
### 2.11 clojure.pprint/print-table
Prints a collection of maps in a textual table.
(print-table [:fred :barney]
[{:fred "ethel"}
{:fred "wilma" :barney "betty"}])
===============
:fred | :barney
===============
ethel |
wilma | betty
===============
### 2.12 pprint respects \*print-length\*
Assigning \*print-length\* now affects output of pprint
### 2.13 compilation and deployment via Maven
See the following pages for more information:
- [Maven Settings and Repositories][MSR]
- [Why Maven?][WM]
- [Common Contrib Build][CCB]
- [How to Make Releases][HMR]
[MSR]: http://dev.clojure.org/display/doc/Maven+Settings+and+Repositories
[WM]: http://dev.clojure.org/pages/viewpage.action?pageId=950842
[CCB]: http://dev.clojure.org/display/design/Common+Contrib+Build
[HMR]:http://dev.clojure.org/display/design/How+to+Make+Releases
### 2.14 internal keyword map uses weak refs
### 2.15 ^:const defs
^:const lets you name primitive values with speedier reference.
(def constants
{:pi 3.14
:e 2.71})
(def ^:const pi (:pi constants))
(def ^:const e (:e constants))
The overhead of looking up :e and :pi in the map happens at compile time, as (:pi constants) and (:e constants) are evaluated when their parent def forms are evaluated.
### 2.16 Message Bearing Assert
Assert can take a second argument which will be printed when the assert fails
(assert (= 1 2) "1 is not equal to 2")
=> AssertionError Assert failed: 1 is not equal to 2
### 2.17 Error Checking for defmulti Options
defmulti will check to verify that its options are valid. For example, the following code will throw an exception:
(defmulti fred :ethel :lucy :ricky)
=> IllegalArgumentException
### 2.18 Removed Checked Exceptions
Clojure does not throw checked exceptions
### 2.19 vector-of Takes Multiple Args
vector-of takes multiple args used to populate the array
(vector-of :int 1 2 3)
=> [1 2 3]
### 2.20 deref with timeout
deref now takes a timeout option - when given with a blocking reference, will return the timeout-val if the timeout (in milliseconds) is reached before value is available.
(deref (promise) 10 :ethel)
=> :ethel
### 2.21 Walk Support for sorted-by Collections
Walk modified to work on sorted-by collections
let [x (sorted-set-by > 1 2 3)] (walk inc reverse x))
=> (2 3 4)
### 2.22 string.join Enhanced to Work with Sets
Just like join works on other collections
(join " and " #{:fred :ethel :lucy})
=> ":lucy and :fred and :ethel"
### 2.23 clojure.test-helper
All test helpers moved into clojure.test-helper
### 2.24 Newline outputs platform-specific newline sequence
Newline sequence is output as \r\n on Windows now.
### 2.25 init-proxy and update-proxy return proxy
Now you can chain calls on the proxy
### 2.26 doc & find-doc moved to REPL
Adds special form docs to the REPL
### 2.27 clojure.java.shell/sh accepts as input anything that clojure.java.io/copy does
This adds InputStream, Reader, File, byte[] to the list of inputs for clojure.java.shell/sh
### 2.28 Interrupt Handler Promoted to clojure.repl
Promoting this library eliminates the need for a dependency on old contrib.
### 2.29 Add support for running -main namespaces from clojure.main
This patch allows clojure.main to accept an argument pointing to a namespace to look for a -main function in. This allows users to write -main functions that will work the same whether the code is AOT-compiled for use in an executable jar or just run from source.
### 2.30 Set thread names on agent thread pools
It's a best practice to name the threads in an executor thread pool with a custom ThreadFactory so that the purpose of these threads is clear in thread dumps and other runtime operational tools.
Patch causes thread names like:
clojure-agent-send-pool-%d (should be fixed # of threads)
clojure-agent-send-off-pool-%d (will be added and removed over time)
### 2.31 Add docstring support to def
A def can now have a docstring between name and value.
(def foo "a foo" :foo)
### 2.32 Comp function returns identity when called with zero arity
(= (comp) identity)
=> true
### 2.33 Type hints can be applied to arg vectors
You can hint different arities separately:
(defn hinted
(^String [])
(^Integer [a])
(^java.util.List [a & args]))
This is preferred over hinting the function name. Hinting the function name is still allowed for backward compatibility, but will likely be deprecated in a future release.
### 2.34 Binding Conveyance
Clojure APIs that pass work off to other threads (e.g. send, send-off, pmap, future) now convey the dynamic bindings of the calling thread:
(def ^:dynamic *num* 1)
(binding [*num* 2] (future (println *num*)))
;; prints "2", not "1"
## 3 Performance Enhancements
* Code path for using vars is now much faster for the common case
* Improved startup time
* Fix performance on some numeric overloads
See [CLJ-380](http://dev.clojure.org/jira/browse/CLJ-5) for more information
* Promises are lock free
* Functions only get metadata support code when metadata explicitly supplied
* definterface/gen-interface accepts array type hints
* inline nil?
* inline bit-functions & math ops
* inline n-ary min & max
* PersistentQueue count is now O(1)
* Intrinsics: unchecked math operators now emit bytecodes directly where possible
## 4 Bug Fixes
[Complete list of Tickets for 1.3 Release][ISSUES].
[ISSUES]: http://dev.clojure.org/jira/secure/IssueNavigator.jspa?mode=hide&requestId=10052
* [CLJ-8](http://dev.clojure.org/jira/browse/CLJ-8)
detect and report cyclic load dependencies
* Patch restore detection of cyclic load dependencies
* [CLJ-31](http://dev.clojure.org/jira/browse/CLJ-31)
compiler now correctly rejects attempts to recur across try
(fn [x] (try (recur 1)))
=> CompilerException
* [CLJ-286](http://dev.clojure.org/jira/browse/CLJ-286)
\*out\* being used as java.io.PrintWriter
* Patch fixes using Writer instead of PrintWriter
* fix clojure.main to not assume that *err* is a PrintWriter
* [CLJ-292](http://dev.clojure.org/jira/browse/CLJ-292)
LazySeq.sval() nests RuntimeExceptions
* Patch causes only the original RuntimeException to be thrown
* [CLJ-390](http://dev.clojure.org/jira/browse/CLJ-390)
sends from agent error-handlers should be allowed
* Patch allows agent error-handler to send successfully
* [CLJ-426](http://dev.clojure.org/jira/browse/CLJ-426)
case should handle hash collision
* There were situations where a hash collision would occur with case and an exception would be thrown. See [discussion](https://groups.google.com/d/topic/clojure/m4ZDWKSfmfo/discussion) for more details
* [CLJ-430](http://dev.clojure.org/jira/browse/CLJ-430)
clojure.java.io URL Coercion throws java.lang.ClassCastException
* Patch correct exception to be thrown
* [CLJ-432](http://dev.clojure.org/jira/browse/CLJ-432)
deftype does not work if containing ns contains dashes
* Patch munges namespaces with dashes properly
* [CLJ-433](http://dev.clojure.org/jira/browse/CLJ-433)
munge should not munge $ (which isJavaIdentifierPart), should munge ' (which is not)
* [CLJ-435](http://dev.clojure.org/jira/browse/CLJ-435)
stackoverflow exception in printing meta with :type
* Patch fixes exception being thrown on certain type metadata
(with-meta {:value 2} {:type Object})
=> No message. [Thrown class java.lang.StackOverflowError]
* [CLJ-437](http://dev.clojure.org/jira/browse/CLJ-437)
Bugs in clojure.set/subset? and superset? for sets with false/nil elements
* Patch fixes failing on subset? and superset? for sets with false/nil elements
* [CLJ-439](http://dev.clojure.org/jira/browse/CLJ-439)
Automatic type translation from Integer to Long
* Patch fixes increase coercion from Integer to Long
* [CLJ-444](http://dev.clojure.org/jira/browse/CLJ-444)
Infinite recursion in Keyword.intern leads to stack overflow
* No more infinite recursion with patch
* [CLJ-673](http://dev.clojure.org/jira/browse/CLJ-673)
use system class loader when base loader is null
* facilitates placing Clojure on bootclasspath
* [CLJ-678](http://dev.clojure.org/jira/browse/CLJ-678)
into-array should work with all primitive types
* [CLJ-680](http://dev.clojure.org/jira/browse/CLJ-680)
printing promises should not block
* Patch allows printing of promises without blocking
* [CLJ-682](http://dev.clojure.org/jira/browse/CLJ-682)
cl-format: ~w throws an exception when not wrapped in a pretty-writer
* Patch fixes the following bug in cl-format with ~w:
* [CLJ-693](http://dev.clojure.org/jira/browse/CLJ-693)
VerifyError with symbol metadata, macros, and defrecord
* [CLJ-702](http://dev.clojure.org/jira/browse/CLJ-702)
case gives NPE when used with nil
* Patch allows nil to be used with case
* [CLJ-734](http://dev.clojure.org/jira/browse/CLJ-734)
starting scope of let bindings seems incorrect from jdi perspective
* Patch fixes local variables table to have the correct code index for let bindings.
* [CLJ-739](http://dev.clojure.org/jira/browse/CLJ-739)
version.properties file is not closed
* Patch properly closes version.properties file
* [CLJ-751](http://dev.clojure.org/jira/browse/CLJ-751)
cl-format: ~( throws an exception with an empty string
* Patch fixes the following bug in cl-format when format is nil
(cl-format nil "~:(~a~)" "")
=> NullPointerException
* [CLJ-780](http://dev.clojure.org/jira/browse/CLJ-780)
race condition in reference cache on Java 5
* Map.Entry instances can have null values prior to Java 6. This patch provides a workaround.
* floats were being boxed as Doubles, now they are boxed as Floats
* several "holding onto head" fixes
* Stop top-level defs from hanging onto the head of an expression that uses a lazy seq
* Stop multimethods from holding onto heads of their arguments
## 5 Modular Contrib
In 1.3, the monolithic clojure-contrib.jar has been replaced by a modular system of contrib libraries, so that production systems can include only the code they actually need. This also allows individual contribs to have their own release cycles. Many contribs have moved forward by several point versions already. Documentation for updating applications to use the new contrib libraries is at http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
Important Note: Many of the new modular contribs are compatible with both 1.2 and 1.3. This offers an incremental migration path: First, upgrade your contrib libraries while holding Clojure at 1.2, Then, in a separate step, upgrade to Clojure 1.3.
================================================
FILE: clojure.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Clojure" name="Clojure">
<configuration />
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/clj" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/jvm" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
<excludeFolder url="file://$MODULE_DIR$/test-classes" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.jsr166-mirror:jsr166y:1.7.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.clojure:test.generative:0.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.clojure:tools.namespace:0.1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.clojure:java.classpath:0.1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.clojure:data.generators:0.1.2" level="project" />
</component>
</module>
================================================
FILE: doc/clojure/pprint/CommonLispFormat.markdown
================================================
# A Common Lisp-compatible Format Function
cl-format is an implementation of the incredibly baroque Common Lisp format function as specified
in [Common Lisp, the Language, 2nd edition, Chapter 22](http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000).
Format gives you an easy and powerful way to format text and data for output. It supports rich
formatting of strings and numbers, loops, conditionals, embedded formats, etc. It is really a
domain-specific language for formatting.
This implementation for clojure has the following goals:
* Support the full feature set of the Common Lisp format function (including the X3J13 extensions) with the only exception being concepts that make no sense or are differently interpreted in Clojure.
* Make porting code from Common Lisp easier.
* Provide a more native feeling solution for Clojure programmers than the Java format method and its relatives.
* Be fast. This includes the ability to precompile formats that are going to be used repetitively.
* Include useful error handling and comprehensive documentation.
## Why would I use cl-format?
For some people the answer to this question is that they are used to
Common Lisp and, therefore, they already know the syntax of format
strings and all the directives.
A more interesting answer is that cl-format provides a way of
rendering strings that is much more suited to Lisp and its data
structures.
Because iteration and conditionals are built into the directive
structure of cl-format, it is possible to render sequences and other
complex data structures directly without having to loop over the data
structure.
For example, to print the elements of a sequence separated by commas,
you simply say:
(cl-format true "~{~a~^, ~}" aseq)
(This example is taken from
[Practical Common Lisp](http://www.gigamonkeys.com/book/)
by Peter Seibel.)
The corresponding output using Clojure's Java-based _format_ function
would involve a nasty loop/recur with some code to figure out about
the commas. Yuck!
## Current Status of cl-format
cl-format is 100% compatible with the Common Lisp standard as
specified in CLtLv2.
This includes all of the functionality of Common
Lisp's format function including iteration, conditionals,
text justification and rich
options for displaying real and integer values. It also includes the
directives to support pretty printing structured output.
If you find a bug in a directive, drop me a line
with a chunk of code that exhibits the bug and the version of
cl-format you found it in and I'll try to get it fixed.
I also intend to have good built-in documentation for the directives,
but I haven't built that yet.
The following directives are
not yet supported: ~:T and ~@:T (but all other forms of ~T work)
and extensions with ~/.
The pretty printer interface is similar, but not identical to the
interface in Common Lisp.
Next up:
* Support for ~/
* True compiled formats
* Restructure unit tests into modular chunks.
* Import tests from CLISP and SBCL.
* Unit tests for exception conditions.
* Interactive documentation
## How to use cl-format
### Loading cl-format in your program
Once cl-format is in your path, adding it to your code is easy:
(ns your-namespace-here
(:use [clojure.pprint :only (cl-format)]))
If you want to refer to the cl-format function as "format" (rather
than using the clojure function of that name), you can use this idiom:
(ns your-namespace-here
(:refer-clojure :exclude [format])
(:use clojure.pprint))
(def format cl-format)
You might want to do this in code that you've ported from Common Lisp,
for instance, or maybe just because old habits die hard.
From the REPL, you can grab it using (use):
(use 'clojure.pprint)
### Calling cl-format
cl-format is a standard clojure function that takes a variable number
of arguments. You call it like this:
(cl-format stream format args...)
_stream_ can be any Java Writer (that is java.io.Writer) or the values
_true_, _false_, or _nil_. The argument _true_ is identical to using
`*`out`*` while _false_ or _nil_ indicate that cl-format should return
its result as a string rather than writing it to a stream.
_format_ is either a format string or a compiled format (see
below). The format string controls the output that's written in a way
that's similar to (but much more powerful than) the standard Clojure
API format function (which is based on Java's
java.lang.String.Format).
Format strings consist of characters that are to be written to the
output stream plus directives (which are marked by ~) as in "The
answer is ~,2f". Format strings are documented in detail in
[*Common Lisp the Language*, 2nd edition, Chapter 22](http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html#SECTION002633000000000000000).
_args_ is a set of arguments whose use is defined by the format.
## Using column aware streams across format invocations
Writers in Java have no real idea of current column or device page width, so the format
directives that want to work relative to the current position on the
page have nothing to work with. To deal with this, cl-format contains
an extension to writer called pretty-writer. A pretty-writer watches the
output and keeps track of what column the current output is going to.
When you call format and your format includes a directive that cares
about what column it's in (~T, ~&, ~<...~>), cl-format will
automatically wrap the Writer you passed in with a pretty-writer. This
means that by default all cl-format statements act like they begin on
a fresh line and have a page width of 72.
For many applications, these assumptions are fine and you need to do
nothing more. But sometimes you want to use multiple cl-format calls
that output partial lines. You may also want to mix cl-format calls
with the native clojure calls like print. If you want stay
column-aware while doing this you need to create a pretty-writer of
your own (and possibly bind it to `*`out`*`).
As an example of this, this function takes a nested list and prints it
as a table (returning the result as a string):
(defn list-to-table [aseq column-width]
(let [string-writer (java.io.StringWriter.)
stream (get-pretty-writer string-writer)]
(binding [*out* stream]
(doseq [row aseq]
(doseq [col row]
(cl-format true "~4D~7,vT" col column-width))
(prn)))
(.flush stream)
(.toString string-writer)))
(In reality, you'd probably do this as a single call to cl-format.)
The get-pretty-writer function takes the Writer to wrap and
(optionally) the page width (in columns) for use with ~<...~>.
## Examples
The following function uses cl-format to dump a columnized table of the Java system properties:
(defn show-props [stream]
(let [p (mapcat
#(vector (key %) (val %))
(sort-by key (System/getProperties)))]
(cl-format stream "~30A~A~%~{~20,,,'-A~10A~}~%~{~30A~S~%~}"
"Property" "Value" ["" "" "" ""] p)))
There are some more examples in the pretty print examples gallery at
http://github.com/tomfaulhaber/pprint-examples:
* hexdump - a program that uses cl-format to create a standard formatted hexdump of the requested stream.
* multiply - a function to show a formatted multiplication table in a very "first-order" way.
* props - the show-props example shown above.
* show_doc - some utilities for showing documentation from various name spaces.
## Differences from the Common Lisp format function
The floating point directives that show exponents (~E, ~G) show E for
the exponent character in all cases (unless overridden with an
_exponentchar_). Clojure does not distinguish between floats and
doubles in its printed representation and neither does cl-format.
The ~A and ~S directives accept the colon prefix, but ignore it since
() and nil are not equivalent in Clojure.
Clojure has 3 different reader syntaxes for characters. The ~@c
directive to cl-format has an argument extension to let you choose:
* ~@c (with no argument) prints "\c" (backslash followed by the printed representation of the character or \newline, \space, \tab, \backspace, \return)
* ~'o@c prints "\oDDD" where DDD are the octal digits representing the character.
* ~'u@c prints "\uXXXX" prints the hex Unicode representation of the character.
================================================
FILE: doc/clojure/pprint/PrettyPrinting.markdown
================================================
# A Pretty Printer for Clojure
## Overview
This namespace adds a new feature to Clojure: a generalized pretty
printer.
The pretty printer is easy to use:
user=> (println (for [x (range 10)] (range x)))
(() (0) (0 1) (0 1 2) (0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5) (0 1 2 3 4 5 6) (0 1 2 3 4 5 6 7) (0 1 2 3 4 5 6 7 8))
nil
user=> (use 'clojure.pprint)
nil
user=> (pprint (for [x (range 10)] (range x)))
(()
(0)
(0 1)
(0 1 2)
(0 1 2 3)
(0 1 2 3 4)
(0 1 2 3 4 5)
(0 1 2 3 4 5 6)
(0 1 2 3 4 5 6 7)
(0 1 2 3 4 5 6 7 8))
nil
user=>
The pretty printer supports two modes: _code_ which has special
formatting for special forms and core macros and _simple_ (the
default) which formats the various Clojure data structures as
appropriate for raw data. In fact, the pretty printer is
highly customizable, but basic use is pretty simple.
All the functions and variables described here are in the
clojure.pprint namespace. Using them is as simple as adding a
`(:use clojure.pprint)` to
your namespace declarations. Or, better practice would be
`(:use [clojure.pprint :only (<functions you wish to use>)])`.
pprint is being developed by Tom Faulhaber (to mail me you can use
my first name at my domain which is infolace.com).
As with the rest of Clojure, the pretty printer is licensed under the
[http://opensource.org/licenses/eclipse-1.0.php Eclipse Public License 1.0].
Future development is guided by those using it, so send feedback about
what's working and not working for you and what you'd like to see in the
pretty printer.
## Pretty Printing Basics
Pretty printing is primarily implemented with the function
pprint. pprint takes a single argument and formats it according to the
settings of several special variables.
Generally, the defaults are fine for pretty printing and you can
simply use:
(pprint obj)
to print your object. If you wish to write to
another stream besides `*`out`*`, you can use:
(write obj :pretty true :stream foo)
where foo is the stream to which you wish to write. (The write
function has a lot more options which are not yet documented. Stay
tuned.)
When at the REPL, the pp macro pretty prints the last output
value. This is useful when you get something too complex to read
comfortably. Just type:
user=> (pp)
and you'll get a pretty printed version of the last thing output (the
magic variable `*`1).
## Dispatch tables and code formatting
The behavior of the pretty printer can be finely controlled through
the use of _dispatch tables_ that contain descriptions for how
different structures should be formatted.
Using custom dispatch tables, the pretty printer can create formatted
output for data structures that is customized for the
application. This allows pretty printing to be baked into any
structured output. For information and examples, see below in
[#Custom_Dispatch_Functions Custom Dispatch Functions].
The pretty printer comes with two pre-defined dispatch tables to cover
the most common situations:
`*`simple-dispatch`*` - supports basic representation of data in various
Clojure structures: seqs, maps, vectors, etc. in a fairly standard
way. When structures need to be broken across lines, following lines
are indented to line up with the first element. `*`simple-dispatch`*` is
the default and is good for showing the output of most operations.
`*`code-dispatch`*` - has special representation for various structures
found in code: defn, condp, binding vectors, anonymous functions,
etc. This dispatch indents following lines of a list one more space as
appropriate for a function/argument type of list.
An example formatted with code dispatch:
user=> (def code '(defn cl-format
"An implementation of a Common Lisp compatible format function"
[stream format-in & args] (let [compiled-format (if (string? format-in)
(compile-format format-in) format-in) navigator (init-navigator args)]
(execute-format stream compiled-format navigator))))
#'user/code
user=> (with-pprint-dispatch *code-dispatch* (pprint code))
(defn cl-format
"An implementation of a Common Lisp compatible format function"
[stream format-in & args]
(let [compiled-format (if (string? format-in)
(compile-format format-in)
format-in)
navigator (init-navigator args)]
(execute-format stream compiled-format navigator)))
nil
user=>
There are three ways to set the current dispatch: set it to a specific
table permanently with set-pprint-dispatch, bind it with
with-pprint-dispatch (as shown in the example above), or use the
:dispatch keyword argument to write.
## Control variables
The operation of pretty printing is also controlled by a set of variables
that control general parameters of how the pretty printer makes
decisions. The current list is as follows:
*`*`print-pretty`*`*: Default: *true*
Bind to true if you want write to use pretty printing. (pprint and pp automatically
bind this to true.)
*`*`print-right-margin`*`*: Default: *72*
Pretty printing will try to avoid anything going beyond this column.
*`*`print-miser-width`*`*: Default: *40*
The column at which to enter miser style. Depending on the dispatch table,
miser style add newlines in more places to try to keep lines short allowing for further
levels of nesting. For example, in the code dispatch table, the pretty printer will
insert a newline between the "if" and its condition when in miser style.
*`*`print-suppress-namespaces`*`*: Default: *false*
Don't print namespaces with symbols. This is particularly useful when
pretty printing the results of macro expansions
*`*`print-level`*`*: Default: *nil*
As with the regular Clojure print function, this variable controls the
depth of structure that is printed. The argument itself is level 0,
the first level of a collection is level 1, etc. When the structure
gets deeper than the specified `*`print-level`*`, a hash sign (#) is
printed.
For example:
user=> (binding [*print-level* 2] (pprint '(a b (c d) ((e) ((f d) g)))))
(a b (c d) (# #))
nil
user=>
*`*`print-length`*`*: Default: *nil*
As with the regular Clojure print function, this variable controls the
number of items that are printed at each layer of structure. When a
layer has too many items, ellipses (...) are displayed.
For example:
user=> (defn foo [x] (for [i (range x) ] (range 1 (- x (dec i)))))
#'user/foo
user=> (binding [*print-length* 6] (pprint (foo 10)))
((1 2 3 4 5 6 ...)
(1 2 3 4 5 6 ...)
(1 2 3 4 5 6 ...)
(1 2 3 4 5 6 ...)
(1 2 3 4 5 6)
(1 2 3 4 5)
...)
nil
user=>
## Custom Dispatch Functions
Using custom dispatch, you can easily create your own formatted output
for structured data. Examples included with the pretty printer show
how to use custom dispatch to translate simple Clojure structures into
nicely formatted JSON and XML.
### Basic Concepts of Pretty Printing
In order to create custom dispatch functions, you need to understand
the fundamentals of pretty printing. The clojure pretty printer is
based on the XP pretty printer algorithm (used in many Lisps including
Common Lisp) which supports sophisticated decision-making about line
breaking and indentation with reasonable performance even for very
large structures. The XP algorithm is documented in the paper,
[http://dspace.mit.edu/handle/1721.1/6504 XP. A Common Lisp Pretty
Printing System].
The Clojure implementation of XP is similar in spirit to the Common
Lisp implementation, but the details of the interface are somewhat
different. The result is that writing custom dispatch in Clojure is
more "Clojure-y."
There are three key concepts to understand when creating custom pretty
printing functions: _logical blocks_, _conditional newlines_, and
_indentation_.
A _logical block_ marks a set of output that should be thought about
as a single unit by the pretty printer. Logical blocks can contain
other logical blocks (that is, they nest). As a simple example, when
printing list structure, every sublist will typically be a logical
block.
_Conditional newlines_ tell the pretty printer where it can insert
line breaks and how to make the decisions about when to do it. There
are four types of conditional newline:
* Linear newlines tell the pretty printer to insert a newline in a
place whenever the enclosing logical block won't fit on a single
line. Linear newlines are an all-or-nothing proposition; if the
logical block doesn't fit on a single line, *all* the linear
newlines are emitted as actual newlines.
* Fill newlines tell the pretty printer that it should fit as many
chunks of the logical block as possible on this line and then emit
a newline.
* Mandatory newlines tell the pretty printer to emit a newline
regardless of where it is in the output line.
* Miser newlines tell the pretty printer to emit a newline if the
output column is in the miser region (as defined by the pretty
printer variable `*`pprint-miser-width`*`). This allows you to
define special behavior as the output gets heavily nested near the
right margin.
_Indentation_ commands allow you to specify how wrapped lines should
be indented. Indentation can be relative to either the start column of
the current logical block or the current column position of the output.
(This section is still incomplete...)
## Current limitations and future plans
This is an early version release of the pretty printer and there is
plenty that is yet to come.
Here are some examples:
* Support all the types and forms in Clojure (most of the way there now).
* Support for limiting pretty printing based on line counts.
* Support for circular and shared substructure detection.
* Finishing the integration with the format function (support for ~/ and tabular pretty printing).
* Performance! (Not much thought has been made to making this go fast, but there are a bunch of pretty obvious speedups to be had.)
* Handle Java objects intelligently
Please let me know about anything that's not working right, anything that
should work differently, or the feature you think should be at the top
of my list.
================================================
FILE: epl-v10.html
================================================
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Eclipse Public License - Version 1.0</title>
<style type="text/css">
body {
size: 8.5in 11.0in;
margin: 0.25in 0.5in 0.25in 0.5in;
tab-interval: 0.5in;
}
p {
margin-left: auto;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
p.list {
margin-left: 0.5in;
margin-top: 0.05em;
margin-bottom: 0.05em;
}
</style>
</head>
<body lang="EN-US">
<p align=center><b>Eclipse Public License - v 1.0</b></p>
<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
AGREEMENT.</p>
<p><b>1. DEFINITIONS</b></p>
<p>"Contribution" means:</p>
<p class="list">a) in the case of the initial Contributor, the initial
code and documentation distributed under this Agreement, and</p>
<p class="list">b) in the case of each subsequent Contributor:</p>
<p class="list">i) changes to the Program, and</p>
<p class="list">ii) additions to the Program;</p>
<p class="list">where such changes and/or additions to the Program
originate from and are distributed by that particular Contributor. A
Contribution 'originates' from a Contributor if it was added to the
Program by such Contributor itself or anyone acting on such
Contributor's behalf. Contributions do not include additions to the
Program which: (i) are separate modules of software distributed in
conjunction with the Program under their own license agreement, and (ii)
are not derivative works of the Program.</p>
<p>"Contributor" means any person or entity that distributes
the Program.</p>
<p>"Licensed Patents" mean patent claims licensable by a
Contributor which are necessarily infringed by the use or sale of its
Contribution alone or when combined with the Program.</p>
<p>"Program" means the Contributions distributed in accordance
with this Agreement.</p>
<p>"Recipient" means anyone who receives the Program under
this Agreement, including all Contributors.</p>
<p><b>2. GRANT OF RIGHTS</b></p>
<p class="list">a) Subject to the terms of this Agreement, each
Contributor hereby grants Recipient a non-exclusive, worldwide,
royalty-free copyright license to reproduce, prepare derivative works
of, publicly display, publicly perform, distribute and sublicense the
Contribution of such Contributor, if any, and such derivative works, in
source code and object code form.</p>
<p class="list">b) Subject to the terms of this Agreement, each
Contributor hereby grants Recipient a non-exclusive, worldwide,
royalty-free patent license under Licensed Patents to make, use, sell,
offer to sell, import and otherwise transfer the Contribution of such
Contributor, if any, in source code and object code form. This patent
license shall apply to the combination of the Contribution and the
Program if, at the time the Contribution is added by the Contributor,
such addition of the Contribution causes such combination to be covered
by the Licensed Patents. The patent license shall not apply to any other
combinations which include the Contribution. No hardware per se is
licensed hereunder.</p>
<p class="list">c) Recipient understands that although each Contributor
grants the licenses to its Contributions set forth herein, no assurances
are provided by any Contributor that the Program does not infringe the
patent or other intellectual property rights of any other entity. Each
Contributor disclaims any liability to Recipient for claims brought by
any other entity based on infringement of intellectual property rights
or otherwise. As a condition to exercising the rights and licenses
granted hereunder, each Recipient hereby assumes sole responsibility to
secure any other intellectual property rights needed, if any. For
example, if a third party patent license is required to allow Recipient
to distribute the Program, it is Recipient's responsibility to acquire
that license before distributing the Program.</p>
<p class="list">d) Each Contributor represents that to its knowledge it
has sufficient copyright rights in its Contribution, if any, to grant
the copyright license set forth in this Agreement.</p>
<p><b>3. REQUIREMENTS</b></p>
<p>A Contributor may choose to distribute the Program in object code
form under its own license agreement, provided that:</p>
<p class="list">a) it complies with the terms and conditions of this
Agreement; and</p>
<p class="list">b) its license agreement:</p>
<p class="list">i) effectively disclaims on behalf of all Contributors
all warranties and conditions, express and implied, including warranties
or conditions of title and non-infringement, and implied warranties or
conditions of merchantability and fitness for a particular purpose;</p>
<p class="list">ii) effectively excludes on behalf of all Contributors
all liability for damages, including direct, indirect, special,
incidental and consequential damages, such as lost profits;</p>
<p class="list">iii) states that any provisions which differ from this
Agreement are offered by that Contributor alone and not by any other
party; and</p>
<p class="list">iv) states that source code for the Program is available
from such Contributor, and informs licensees how to obtain it in a
reasonable manner on or through a medium customarily used for software
exchange.</p>
<p>When the Program is made available in source code form:</p>
<p class="list">a) it must be made available under this Agreement; and</p>
<p class="list">b) a copy of this Agreement must be included with each
copy of the Program.</p>
<p>Contributors may not remove or alter any copyright notices contained
within the Program.</p>
<p>Each Contributor must identify itself as the originator of its
Contribution, if any, in a manner that reasonably allows subsequent
Recipients to identify the originator of the Contribution.</p>
<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
<p>Commercial distributors of software may accept certain
responsibilities with respect to end users, business partners and the
like. While this license is intended to facilitate the commercial use of
the Program, the Contributor who includes the Program in a commercial
product offering should do so in a manner which does not create
potential liability for other Contributors. Therefore, if a Contributor
includes the Program in a commercial product offering, such Contributor
("Commercial Contributor") hereby agrees to defend and
indemnify every other Contributor ("Indemnified Contributor")
against any losses, damages and costs (collectively "Losses")
arising from claims, lawsuits and other legal actions brought by a third
party against the Indemnified Contributor to the extent caused by the
acts or omissions of such Commercial Contributor in connection with its
distribution of the Program in a commercial product offering. The
obligations in this section do not apply to any claims or Losses
relating to any actual or alleged intellectual property infringement. In
order to qualify, an Indemnified Contributor must: a) promptly notify
the Commercial Contributor in writing of such claim, and b) allow the
Commercial Contributor to control, and cooperate with the Commercial
Contributor in, the defense and any related settlement negotiations. The
Indemnified Contributor may participate in any such claim at its own
expense.</p>
<p>For example, a Contributor might include the Program in a commercial
product offering, Product X. That Contributor is then a Commercial
Contributor. If that Commercial Contributor then makes performance
claims, or offers warranties related to Product X, those performance
claims and warranties are such Commercial Contributor's responsibility
alone. Under this section, the Commercial Contributor would have to
defend claims against the other Contributors related to those
performance claims and warranties, and if a court requires any other
Contributor to pay any damages as a result, the Commercial Contributor
must pay those damages.</p>
<p><b>5. NO WARRANTY</b></p>
<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
responsible for determining the appropriateness of using and
distributing the Program and assumes all risks associated with its
exercise of rights under this Agreement , including but not limited to
the risks and costs of program errors, compliance with applicable laws,
damage to or loss of data, programs or equipment, and unavailability or
interruption of operations.</p>
<p><b>6. DISCLAIMER OF LIABILITY</b></p>
<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
WITHOUT LIMITATION LOST PROFITS), 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 OR
DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
<p><b>7. GENERAL</b></p>
<p>If any provision of this Agreement is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this Agreement, and without further action
by the parties hereto, such provision shall be reformed to the minimum
extent necessary to make such provision valid and enforceable.</p>
<p>If Recipient institutes patent litigation against any entity
(including a cross-claim or counterclaim in a lawsuit) alleging that the
Program itself (excluding combinations of the Program with other
software or hardware) infringes such Recipient's patent(s), then such
Recipient's rights granted under Section 2(b) shall terminate as of the
date such litigation is filed.</p>
<p>All Recipient's rights under this Agreement shall terminate if it
fails to comply with any of the material terms or conditions of this
Agreement and does not cure such failure in a reasonable period of time
after becoming aware of such noncompliance. If all Recipient's rights
under this Agreement terminate, Recipient agrees to cease use and
distribution of the Program as soon as reasonably practicable. However,
Recipient's obligations under this Agreement and any licenses granted by
Recipient relating to the Program shall continue and survive.</p>
<p>Everyone is permitted to copy and distribute copies of this
Agreement, but in order to avoid inconsistency the Agreement is
copyrighted and may only be modified in the following manner. The
Agreement Steward reserves the right to publish new versions (including
revisions) of this Agreement from time to time. No one other than the
Agreement Steward has the right to modify this Agreement. The Eclipse
Foundation is the initial Agreement Steward. The Eclipse Foundation may
assign the responsibility to serve as the Agreement Steward to a
suitable separate entity. Each new version of the Agreement will be
given a distinguishing version number. The Program (including
Contributions) may always be distributed subject to the version of the
Agreement under which it was received. In addition, after a new version
of the Agreement is published, Contributor may elect to distribute the
Program (including its Contributions) under the new version. Except as
expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
rights or licenses to the intellectual property of any Contributor under
this Agreement, whether expressly, by implication, estoppel or
otherwise. All rights in the Program not expressly granted under this
Agreement are reserved.</p>
<p>This Agreement is governed by the laws of the State of New York and
the intellectual property laws of the United States of America. No party
to this Agreement will bring a legal action under this Agreement more
than one year after the cause of action arose. Each party waives its
rights to a jury trial in any resulting litigation.</p>
</body>
</html>
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>galdolber</groupId>
<artifactId>clojure-objc</artifactId>
<name>clojure-objc</name>
<packaging>jar</packaging>
<version>1.7.0-RC2</version>
<distributionManagement>
<repository>
<id>clojars</id>
<name>Clojars repository</name>
<url>https://clojars.org/repo</url>
</repository>
</distributionManagement>
<url>http://clojure.org/</url>
<description>Clojure core environment and runtime library.</description>
<developers>
<developer>
<name>Rich Hickey</name>
<email>richhickey@gmail.com</email>
<timezone>-5</timezone>
</developer>
</developers>
<licenses>
<license>
<name>Eclipse Public License 1.0</name>
<url>http://opensource.org/licenses/eclipse-1.0.php</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<connection>scm:git:git@github.com:galdolber/clojure-objc.git</connection>
<developerConnection>scm:git:git@github.com:galdolber/clojure-objc.git</developerConnection>
<url>git@github.com:galdolber/clojure-objc.git</url>
</scm>
<dependencies>
<dependency>
<groupId>org.codehaus.jsr166-mirror</groupId>
<artifactId>jsr166y</artifactId>
<version>1.7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.clojure</groupId>
<artifactId>test.generative</artifactId>
<version>0.5.2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.clojure</groupId>
<artifactId>clojure</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.clojure</groupId>
<artifactId>test.check</artifactId>
<version>0.5.9</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.clojure</groupId>
<artifactId>clojure</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/clj</directory>
</resource>
</resources>
<testSourceDirectory>test/java</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>clojure-compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="maven.compile.classpath" refid="maven.compile.classpath" />
<ant target="compile-clojure" />
</target>
</configuration>
</execution>
<execution>
<id>clojure-test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<property name="maven.test.classpath" refid="maven.test.classpath" />
<ant target="test" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>add-clojure-source-dirs</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/jvm</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>clojure-slim-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/assembly/slim.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>clojure.main</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<mainClass>clojure.main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>sources-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<excludes>
<exclude>clojure/version.properties</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- do not push SCM changes to upstream repository; prevents pushing
tags/commits for failed releases; instead, push SCM changes in Hudson configuration -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
<configuration>
<pushChanges>false</pushChanges>
<localCheckout>true</localCheckout>
</configuration>
</plugin>
<plugin>
<!-- disable the Surefire testing plugin -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: readme.md
================================================
# clojure-objc
A Clojure compiler that targets objc runtimes.
* Write native apps in Clojure
* Strong iOS support
* Future proof: shares 99.99% of the code base with clojure for the jvm
* Distribute clojure-objc libs using maven
* Most existing Clojure libs should just work
* ObjC interop
* C interop
* ObjC subclassing
* REPL!

## Leiningen plugin
https://github.com/galdolber/lein-objcbuild
## Dependency
[](http://clojars.org/galdolber/clojure-objc)
## Memory management
All generated code manage memory automagically, but if you alloc with interop you need to release!
## ObjC interop
;; calling objc methods
(defn say-hi [name]
(-> ($ UIAlertView)
($ :alloc)
($ :initWithTitle (str "Hello " name)
:message "Hi! from clojure"
:delegate nil
:cancelButtonTitle "Cancelar"
:otherButtonTitles nil)
($ :autorelease)
($ :show)))
;; extend objc class
(defnstype UIKitController UIViewController
([^:id self :initWith ^:id [view s]]
(doto ($$ self :init)
($ :setView ($ view :retain))
(objc-set! :scope s)
(#(post-notification ($ % :view) :init)))))
;; c interop
(defc NSLog :void [:id &]) ; & for variadic
(NSLog "%@ %@ %d" "Hello" "World" 13)
;; proxy objc class
(nsproxy
([^:bool self :textFieldShouldReturn ^:id field]
($ field :resignFirstResponder)
true))
## Presentations
http://www.slideshare.net/GalDolber/clojureobjc-47500127
## Discuss
https://groups.google.com/d/forum/clojure-objc-discuss
## How to build dist
lein exec build.clj
## License
Portions of this project derived from Clojure:
Copyright © 2006-2015 Rich Hickey
Original code and Clojure modifications:
Copyright © 2014-2015 Gal Dolber
Both are distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.
================================================
FILE: release.sh
================================================
export KEEP_META=false
rm -Rf target/release
mkdir target/release
cp target/libclojure-objc.a target/release/
cp $J2OBJC_HOME/lib/libjre_emul.a target/release/
cp src/ffi/libffi.a target/release/
mkdir target/release/include
rsync -a $J2OBJC_HOME/include target/release
rsync -a target/include target/release
cp $J2OBJC_HOME/j2objc target/release/
mkdir target/release/lib
cp $J2OBJC_HOME/lib/j2objc_annotations.jar target/release/lib
cp $J2OBJC_HOME/lib/j2objc.jar target/release/lib
cp $J2OBJC_HOME/lib/jre_emul.jar target/release/lib
cd ./target/release
zip -r ../release.zip .
================================================
FILE: src/assembly/distribution.xml
================================================
<assembly>
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src</directory>
<outputDirectory>src</outputDirectory>
</fileSet>
<fileSet>
<directory>doc</directory>
<outputDirectory>doc</outputDirectory>
</fileSet>
<fileSet>
<directory>test</directory>
<outputDirectory>test</outputDirectory>
</fileSet>
<fileSet>
<directory>target</directory>
<outputDirectory>/</outputDirectory>
<filtered>false</filtered>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<files>
<file>
<source>pom.xml</source>
</file>
<file>
<source>build.xml</source>
</file>
<file>
<source>readme.txt</source>
<filtered>true</filtered>
</file>
<file>
<source>changes.md</source>
</file>
<file>
<source>clojure.iml</source>
</file>
<file>
<source>epl-v10.html</source>
</file>
</files>
</assembly>
================================================
FILE: src/assembly/slim.xml
================================================
<assembly>
<id>slim</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/clj</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/resources</directory>
<outputDirectory>/</outputDirectory>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>target/classes/clojure/asm</directory>
<outputDirectory>clojure/asm</outputDirectory>
</fileSet>
<fileSet>
<directory>target/classes/clojure/lang</directory>
<outputDirectory>clojure/lang</outputDirectory>
</fileSet>
</fileSets>
<files>
<file>
<source>target/classes/clojure/main.class</source>
<outputDirectory>clojure</outputDirectory>
</file>
</files>
</assembly>
================================================
FILE: src/clj/clojure/core/protocols.clj
================================================
; Copyright (c) Rich Hickey. All rights reserved.
; The use and distribution terms for this software are covered by the
; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
; which can be found in the file epl-v10.html at the root of this distribution.
; By using this software in any fashion, you are agreeing to be bound by
; the terms of this license.
; You must not remove this notice, or any other, from this software.
(ns clojure.core.protocols)
(set! *warn-on-reflection* true)
(defprotocol CollReduce
"Protocol for collection types that can implement reduce faster than
first/next recursion. Called by clojure.core/reduce. Baseline
implementation defined in terms of Iterable."
(coll-reduce [coll f] [coll f val]))
(defprotocol InternalReduce
"Protocol for concrete seq types that can reduce themselves
faster than first/next recursion. Called by clojure.core/reduce."
(internal-reduce [seq f start]))
(defn- seq-reduce
([coll f]
(if-let [s (seq coll)]
(internal-reduce (next s) f (first s))
(f)))
([coll f val]
(let [s (seq coll)]
(internal-reduce s f val))))
(defn- iter-reduce
([^java.lang.Iterable coll f]
(let [iter (.iterator coll)]
(if (.hasNext iter)
(loop [ret (.next iter)]
(if (.hasNext iter)
(let [ret (f ret (.next iter))]
(if (reduced? ret)
@ret
(recur ret)))
ret))
(f))))
([^java.lang.Iterable coll f val]
(let [iter (.iterator coll)]
(loop [ret val]
(if (.hasNext iter)
(let [ret (f ret (.next iter))]
(if (reduced? ret)
@ret
(recur ret)))
ret)))))
(defn- naive-seq-reduce
"Reduces a seq, ignoring any opportunities to switch to a more
specialized implementation."
[s f val]
(loop [s (seq s)
val val]
(if s
(let [ret (f val (first s))]
(if (reduced? ret)
@ret
(recur (next s) ret)))
val)))
(defn- interface-or-naive-reduce
"Reduces via IReduceInit if possible, else naively."
[coll f val]
(if (instance? clojure.lang.IReduceInit coll)
(.reduce ^clojure.lang.IReduceInit coll f val)
(naive-seq-reduce coll f val)))
(extend-protocol CollReduce
nil
(coll-reduce
([coll f] (f))
([coll f val] val))
Object
(coll-reduce
([coll f] (seq-reduce coll f))
([coll f val] (seq-reduce coll f val)))
clojure.lang.IReduceInit
(coll-reduce
([coll f] (.reduce ^clojure.lang.IReduce coll f))
([coll f val] (.reduce coll f val)))
;;aseqs are iterable, masking internal-reducers
clojure.lang.ASeq
(coll-reduce
([coll f] (seq-reduce coll f))
([coll f val] (seq-reduce coll f val)))
;;for range
clojure.lang.LazySeq
(coll-reduce
([coll f] (seq-reduce coll f))
([coll f val] (seq-reduce coll f val)))
;;vector's chunked seq is faster than its iter
clojure.lang.PersistentVector
(coll-reduce
([coll f] (seq-reduce coll f))
([coll f val] (seq-reduce coll f val)))
Iterable
(coll-reduce
([coll f] (iter-reduce coll f))
([coll f val] (iter-reduce coll f val)))
clojure.lang.APersistentMap$KeySeq
(coll-reduce
([coll f] (iter-reduce coll f))
([coll f val] (iter-reduce coll f val)))
clojure.lang.APersistentMap$ValSeq
(coll-reduce
([coll f] (iter-reduce coll f))
([coll f val] (iter-reduce coll f val))))
(extend-protocol InternalReduce
nil
(internal-reduce
[s f val]
val)
;; handles vectors and ranges
clojure.lang.IChunkedSeq
(internal-reduce
[s f val]
(if-let [s (seq s)]
(if (chunked-seq? s)
(let [ret (.reduce (chunk-first s) f val)]
(if (reduced? ret)
@ret
(recur (chunk-next s)
f
ret)))
(interface-or-naive-reduce s f val))
val))
clojure.lang.StringSeq
(internal-reduce
[str-seq f val]
(let [s (.s str-seq)]
(loop [i (.i str-seq)
val val]
(if (< i (.length s))
(let [ret (f val (.charAt s i))]
(if (reduced? ret)
@ret
(recur (inc i) ret)))
val))))
java.lang.Object
(internal-reduce
[s f val]
(loop [cls (class s)
s s
f f
val val]
(if-let [s (seq s)]
(if (identical? (class s) cls)
(let [ret (f val (first s))]
(if (reduced? ret)
@ret
(recur cls (next s) f ret)))
(interface-or-naive-reduce s f val))
val))))
(defprotocol IKVReduce
"Protocol for concrete associative types that can reduce themselves
via a function of key and val faster than first/next recursion over map
entries. Called by clojure.core/reduce-kv, and has same
semantics (just different arg order)."
(kv-reduce [amap f init]))
================================================
FILE: src/clj/clojure/core/reducers.clj
================================================
; Copyright (c) Rich Hickey. All rights reserved.
; The use and distribution terms for this software are covered by the
; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
; which can be found in the file epl-v10.html at the root of this distribution.
; By using this software in any fashion, you are agreeing to be bound by
; the terms of this license.
; You must not remove this notice, or any other, from this software.
(ns ^{:doc
"A library for reduction and parallel folding. Alpha and subject
to change. Note that fold and its derivatives require Java 7+ or
Java 6 + jsr166y.jar for fork/join support. See Clojure's pom.xml for the
dependency info."
:author "Rich Hickey"}
clojure.core.reducers
(:refer-clojure :exclude [reduce map mapcat filter remove take take-while drop flatten cat])
(:require [clojure.walk :as walk]))
(alias 'core 'clojure.core)
(set! *warn-on-reflection* true)
;;;;;;;;;;;;;; some fj stuff ;;;;;;;;;;
(defmacro ^:private compile-if
"Evaluate `exp` and if it returns logical true and doesn't error, expand to
`then`. Else expand to `else`.
(compile-if (Class/forName \"java.util.concurrent.ForkJoinTask\")
(do-cool-stuff-with-fork-join)
(fall-back-to-executor-services))"
[exp then else]
(if (try (eval exp)
(catch Throwable _ false))
`(do ~then)
`(do ~else)))
(compile-if
(Class/forName "java.util.concurrent.ForkJoinTask")
;; We're running a JDK 7+
(do
(def pool (delay (java.util.concurrent.ForkJoinPool.)))
(defn fjtask [^Callable f]
(java.util.concurrent.ForkJoinTask/adapt f))
(defn- fjinvoke [f]
(if (java.util.concurrent.ForkJoinTask/inForkJoinPool)
(f)
(.invoke ^java.util.concurrent.ForkJoinPool @pool ^java.util.concurrent.ForkJoinTask (fjtask f))))
(defn- fjfork [task] (.fork ^java.util.concurrent.ForkJoinTask task))
(defn- fjjoin [task] (.join ^java.util.concurrent.ForkJoinTask task)))
;; We're running a JDK <7
(do
(def pool (delay (jsr166y.ForkJoinPool.)))
(defn fjtask [^Callable f]
(jsr166y.ForkJoinTask/adapt f))
(defn- fjinvoke [f]
(if (jsr166y.ForkJoinTask/inForkJoinPool)
(f)
(.invoke ^jsr166y.ForkJoinPool @pool ^jsr166y.ForkJoinTask (fjtask f))))
(defn- fjfork [task] (.fork ^jsr166y.ForkJoinTask task))
(defn- fjjoin [task] (.join ^jsr166y.ForkJoinTask task))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn reduce
"Like core/reduce except:
When init is not provided, (f) is used.
Maps are reduced with reduce-kv"
([f coll] (reduce f (f) coll))
([f init coll]
(if (instance? java.util.Map coll)
(clojure.core.protocols/kv-reduce coll f init)
(clojure.core.protocols/coll-reduce coll f init))))
(defprotocol CollFold
(coll-fold [coll n combinef reducef]))
(defn fold
"Reduces a collection using a (potentially parallel) reduce-combine
strategy. The collection is partitioned into groups of approximately
n (default 512), each of which is reduced with reducef (with a seed
value obtained by calling (combinef) with no arguments). The results
of these reductions are then reduced with combinef (default
reducef). combinef must be associative, and, when called with no
arguments, (combinef) must produce its identity element. These
operations may be performed in parallel, but the results will
preserve order."
{:added "1.5"}
([reducef coll] (fold reducef reducef coll))
([combinef reducef coll] (fold 512 combinef reducef coll))
([n combinef reducef coll]
(coll-fold coll n combinef reducef)))
(defn reducer
"Given a reducible collection, and a transformation function xf,
returns a reducible collection, where any supplied reducing
fn will be transformed by xf. xf is a function of reducing fn to
reducing fn."
{:added "1.5"}
([coll xf]
(reify
clojure.core.protocols/CollReduce
(coll-reduce [this f1]
(clojure.core.protocols/coll-reduce this f1 (f1)))
(coll-reduce [_ f1 init]
(clojure.core.protocols/coll-reduce coll (xf f1) init)))))
(defn folder
"Given a foldable collection, and a transformation function xf,
returns a foldable collection, where any supplied reducing
fn will be transformed by xf. xf is a function of reducing fn to
reducing fn."
{:added "1.5"}
([coll xf]
(reify
clojure.core.protocols/CollReduce
(coll-reduce [_ f1]
(clojure.core.protocols/coll-reduce coll (xf f1) (f1)))
(coll-reduce [_ f1 init]
(clojure.core.protocols/coll-reduce coll (xf f1) init))
CollFold
(coll-fold [_ n combinef reducef]
(coll-fold coll n combinef (xf reducef))))))
(defn- do-curried
[name doc meta args body]
(let [cargs (vec (butlast args))]
`(defn ~name ~doc ~meta
(~cargs (fn [x#] (~name ~@cargs x#)))
(~args ~@body))))
(defmacro ^:private defcurried
"Builds another arity of the fn that returns a fn awaiting the last
param"
[name doc meta args & body]
(do-curried name doc meta args body))
(defn- do-rfn [f1 k fkv]
`(fn
([] (~f1))
~(clojure.walk/postwalk
#(if (sequential? %)
((if (vector? %) vec identity)
(core/remove #{k} %))
%)
fkv)
~fkv))
(defmacro ^:private rfn
"Builds 3-arity reducing fn given names of wrapped fn and key, and k/v impl."
[[f1 k] fkv]
(do-rfn f1 k fkv))
(defcurried map
"Applies f to every value in the reduction of coll. Foldable."
{:added "1.5"}
[f coll]
(folder coll
(fn [f1]
(rfn [f1 k]
([ret k v]
(f1 ret (f k v)))))))
(defcurried mapcat
"Applies f to every value in the reduction of coll, concatenating the result
colls of (f val). Foldable."
{:added "1.5"}
[f coll]
(folder coll
(fn [f1]
(let [f1 (fn
([ret v]
(let [x (f1 ret v)] (if (reduced? x) (reduced x) x)))
([ret k v]
(let [x (f1 ret k v)] (if (reduced? x) (reduced x) x))))]
(rfn [f1 k]
([ret k v]
(reduce f1 ret (f k v))))))))
(defcurried filter
"Retains values in the reduction of coll for which (pred val)
returns logical true. Foldable."
{:added "1.5"}
[pred coll]
(folder coll
(fn [f1]
(rfn [f1 k]
([ret k v]
(if (pred k v)
(f1 ret k v)
ret))))))
(defcurried remove
"Removes values in the reduction of coll for which (pred val)
returns logical true. Foldable."
{:added "1.5"}
[pred coll]
(filter (complement pred) coll))
(defcurried flatten
"Takes any nested combination of sequential things (lists, vectors,
etc.) and returns their contents as a single, flat foldable
collection."
{:added "1.5"}
[coll]
(folder coll
(fn [f1]
(fn
([] (f1))
([ret v]
(if (sequential? v)
(clojure.core.protocols/coll-reduce (flatten v) f1 ret)
(f1 ret v)))))))
(defcurried take-while
"Ends the reduction of coll when (pred val) returns logical false."
{:added "1.5"}
[pred coll]
(reducer coll
(fn [f1]
(rfn [f1 k]
([ret k v]
(if (pred k v)
(f1 ret k v)
(reduced ret)))))))
(defcurried take
"Ends the reduction of coll after consuming n values."
{:added "1.5"}
[n coll]
(reducer coll
(fn [f1]
(let [cnt (atom n)]
(rfn [f1 k]
([ret k v]
(swap! cnt dec)
(if (neg? @cnt)
(reduced ret)
(f1 ret k v))))))))
(defcurried drop
"Elides the first n values from the reduction of coll."
{:added "1.5"}
[n coll]
(reducer coll
(fn [f1]
(let [cnt (atom n)]
(rfn [f1 k]
([ret k v]
(swap! cnt dec)
(if (neg? @cnt)
(f1 ret k v)
ret)))))))
;;do not construct this directly, use cat
(deftype Cat [cnt left right]
clojure.lang.Counted
(count [_] cnt)
clojure.lang.Seqable
(seq [_] (concat (seq left) (seq right)))
clojure.core.protocols/CollReduce
(coll-reduce [this f1] (clojure.core.protocols/coll-reduce this f1 (f1)))
(coll-reduce
[_ f1 init]
(clojure.core.protocols/coll-reduce
right f1
(clojure.core.protocols/coll-reduce left f1 init)))
CollFold
(coll-fold
[_ n combinef reducef]
(fjinvoke
(fn []
(let [rt (fjfork (fjtask #(coll-fold right n combinef reducef)))]
(combinef
(coll-fold left n combinef reducef)
(fjjoin rt)))))))
(defn cat
"A high-performance combining fn that yields the catenation of the
reduced values. The result is reducible, foldable, seqable and
counted, providing the identity collections are reducible, seqable
and counted. The single argument version will build a combining fn
with the supplied identity constructor. Tests for identity
with (zero? (count x)). See also foldcat."
{:added "1.5"}
([] (java.util.ArrayList.))
([ctor]
(fn
([] (ctor))
([left right] (cat left right))))
([left right]
(cond
(zero? (count left)) right
(zero? (count right)) left
:else
(Cat. (+ (count left) (count right)) left right))))
(defn append!
".adds x to acc and returns acc"
{:added "1.5"}
[^java.util.Collection acc x]
(doto acc (.add x)))
(defn foldcat
"Equivalent to (fold cat append! coll)"
{:added "1.5"}
[coll]
(fold cat append! coll))
(defn monoid
"Builds a combining fn out of the supplied operator and identity
constructor. op must be associative and ctor called with no args
must return an identity value for it."
{:added "1.5"}
[op ctor]
(fn m
([] (ctor))
([a b] (op a b))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fold impls ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- foldvec
[v n combinef reducef]
(cond
(empty? v) (combinef)
(<= (count v) n) (reduce reducef (combinef) v)
:else
(let [split (quot (count v) 2)
v1 (subvec v 0 split)
v2 (subvec v split (count v))
fc (fn [child] #(foldvec child n combinef reducef))]
(fjinvoke
#(let [f1 (fc v1)
t2 (fjtask (fc v2))]
(fjfork t2)
(combinef (f1) (fjjoin t2)))))))
(extend-protocol CollFold
nil
(coll-fold
[coll n combinef reducef]
(combinef))
Object
(coll-fold
[coll n combinef reducef]
;;can't fold, single reduce
(reduce reducef (combinef) coll))
clojure.lang.IPersistentVector
(coll-fold
[v n combinef reducef]
(foldvec v n combinef reducef))
clojure.lang.PersistentHashMap
(coll-fold
[m n combinef reducef]
(.fold m n combinef reducef fjinvoke fjtask fjfork fjjoin)))
================================================
FILE: src/clj/clojure/core.clj
================================================
; Copyright (c) Rich Hickey. All rights reserved.
; The use and distribution terms for this software are covered by the
; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
; which can be found in the file epl-v10.html at the root of this distribution.
; By using this software in any fashion, you are agreeing to be bound by
; the terms of this license.
; You must not remove this notice, or any other, from this software.
(ns ^{:doc "The core Clojure language."
:author "Rich Hickey"}
clojure.core)
(def unquote)
(def unquote-splicing)
(def
^{:arglists '([& items])
:doc "Creates a new list containing the items."
:added "1.0"}
list (. clojure.lang.PersistentList creator))
(def
^{:arglists '([x seq])
:doc "Returns a new seq where x is the first element and seq is
the rest."
:added "1.0"
:static true}
cons (fn* ^:static cons [x seq] (. clojure.lang.RT (cons x seq))))
;during bootstrap we don't have destructuring let, loop or fn, will redefine later
(def
^{:macro true
:added "1.0"}
let (fn* let [&form &env & decl] (cons 'let* decl)))
(def
^{:macro true
:added "1.0"}
loop (fn* loop [&form &env & decl] (cons 'loop* decl)))
(def
^{:macro true
:added "1.0"}
fn (fn* fn [&form &env & decl]
(.withMeta ^clojure.lang.IObj (cons 'fn* decl)
(.meta ^clojure.lang.IMeta &form))))
(def
^{:arglists '([coll])
:doc "Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil."
:added "1.0"
:static true}
first (fn ^:static first [coll] (. clojure.lang.RT (first coll))))
(def
^{:arglists '([coll])
:tag clojure.lang.ISeq
:doc "Returns a seq of the items after the first. Calls seq on its
argument. If there are no more items, returns nil."
:added "1.0"
:static true}
next (fn ^:static next [x] (. clojure.lang.RT (next x))))
(def
^{:arglists '([coll])
:tag clojure.lang.ISeq
:doc "Returns a possibly empty seq of the items after the first. Calls seq on its
argument."
:added "1.0"
:static true}
rest (fn ^:static rest [x] (. clojure.lang.RT (more x))))
(def
^{:arglists '([coll x] [coll x & xs])
:doc "conj[oin]. Returns a new collection with the xs
'added'. (conj nil item) returns (item). The 'addition' may
happen at different 'places' depending on the concrete type."
:added "1.0"
:static true}
conj (fn ^:static conj
([] [])
([coll] coll)
([coll x] (. clojure.lang.RT (conj coll x)))
([coll x & xs]
(if xs
(recur (conj coll x) (first xs) (next xs))
(conj coll x)))))
(def
^{:doc "Same as (first (next x))"
:arglists '([x])
:added "1.0"
:static true}
second (fn ^:static second [x] (first (next x))))
(def
^{:doc "Same as (first (first x))"
:arglists '([x])
:added "1.0"
:static true}
ffirst (fn ^:static ffirst [x] (first (first x))))
(def
^{:doc "Same as (next (first x))"
:arglists '([x])
:added "1.0"
:static true}
nfirst (fn ^:static nfirst [x] (next (first x))))
(def
^{:doc "Same as (first (next x))"
:arglists '([x])
:added "1.0"
:static true}
fnext (fn ^:static fnext [x] (first (next x))))
(def
^{:doc "Same as (next (next x))"
:arglists '([x])
:added "1.0"
:static true}
nnext (fn ^:static nnext [x] (next (next x))))
(def
^{:arglists '(^clojure.lang.ISeq [coll])
:doc "Returns a seq on the collection. If the collection is
empty, returns nil. (seq nil) returns nil. seq also works on
Strings, native Java arrays (of reference types) and any objects
that implement Iterable. Note that seqs cache values, thus seq
should not be used on any Iterable whose iterator repeatedly
returns the same mutable object."
:tag clojure.lang.ISeq
:added "1.0"
:static true}
seq (fn ^:static seq ^clojure.lang.ISeq [coll] (. clojure.lang.RT (seq coll))))
(def
^{:arglists '([^Class c x])
:doc "Evaluates x and tests if it is an instance of the class
c. Returns true or false"
:added "1.0"}
instance? (fn instance? [^Class c x] (. c (isInstance x))))
(def
^{:arglists '([x])
:doc "Return true if x implements ISeq"
:added "1.0"
:static true}
seq? (fn ^:static seq? [x] (instance? clojure.lang.ISeq x)))
(def
^{:arglists '([x])
:doc "Return true if x is a Character"
:added "1.0"
:static true}
char? (fn ^:static char? [x] (instance? Character x)))
(def
^{:arglists '([x])
:doc "Return true if x is a String"
:added "1.0"
:static true}
string? (fn ^:static string? [x] (instance? String x)))
(def
^{:arglists '([x])
:doc "Return true if x implements IPersistentMap"
:added "1.0"
:static true}
map? (fn ^:static map? [x] (instance? clojure.lang.IPersistentMap x)))
(def
^{:arglists '([x])
:doc "Return true if x implements IPersistentVector"
:added "1.0"
:static true}
vector? (fn ^:static vector? [x] (instance? clojure.lang.IPersistentVector x)))
(def
^{:arglists '([map key val] [map key val & kvs])
:doc "assoc[iate]. When applied to a map, returns a new map of the
same (hashed/sorted) type, that contains the mapping of key(s) to
val(s). When applied to a vector, returns a new vector that
contains val at index. Note - index must be <= (count vector)."
:added "1.0"
:static true}
assoc
(fn ^:static assoc
([map key val] (. clojure.lang.RT (assoc map key val)))
([map key val & kvs]
(let [ret (assoc map key val)]
(if kvs
(if (next kvs)
(recur ret (first kvs) (second kvs) (nnext kvs))
(throw (IllegalArgumentException.
"assoc expects even number of arguments after map/vector, found odd number")))
ret)))))
;;;;;;;;;;;;;;;;; metadata ;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def
^{:arglists '([obj])
:doc "Returns the metadata of obj, returns nil if there is no metadata."
:added "1.0"
:static true}
meta (fn ^:static meta [x]
(if (instance? clojure.lang.IMeta x)
(. ^clojure.lang.IMeta x (meta)))))
(def
^{:arglists '([^clojure.lang.IObj obj m])
:doc "Returns an object of the same type and value as obj, with
map m as its metadata."
:added "1.0"
:static true}
with-meta (fn ^:static with-meta [^clojure.lang.IObj x m]
(. x (withMeta m))))
(def ^{:private true :dynamic true}
assert-valid-fdecl (fn [fdecl]))
(def
^{:private true}
sigs
(fn [fdecl]
(assert-valid-fdecl fdecl)
(let [asig
(fn [fdecl]
(let [arglist (first fdecl)
;elide implicit macro args
arglist (if (clojure.lang.Util/equals '&form (first arglist))
(clojure.lang.RT/subvec arglist 2 (clojure.lang.RT/count arglist))
arglist)
body (next fdecl)]
(if (map? (first body))
(if (next body)
(with-meta arglist (conj (if (meta arglist) (meta arglist) {}) (first body)))
arglist)
arglist)))]
(if (seq? (first fdecl))
(loop [ret [] fdecls fdecl]
(if fdecls
(recur (conj ret (asig (first fdecls))) (next fdecls))
(seq ret)))
(list (asig fdecl))))))
(def
^{:arglists '([coll])
:doc "Return the last item in coll, in linear time"
:added "1.0"
:static true}
last (fn ^:static last [s]
(if (next s)
(recur (next s))
(first s))))
(def
^{:arglists '([coll])
:doc "Return a seq of all but the last item in coll, in linear time"
:added "1.0"
:static true}
butlast (fn ^:static butlast [s]
(loop [ret [] s s]
(if (next s)
(recur (conj ret (first s)) (next s))
(seq ret)))))
(def
^{:doc "Same as (def name (fn [params* ] exprs*)) or (def
name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
to the var metadata. prepost-map defines a map with optional keys
:pre and :post that contain collections of pre or post conditions."
:arglists '([name doc-string? attr-map? [params*] prepost-map? body]
[name doc-string? attr-map? ([params*] prepost-map? body)+ attr-map?])
:added "1.0"
:macro true}
defn (fn defn [&form &env name & fdecl]
;; Note: Cannot delegate this check to def because of the call to (with-meta name ..)
(if (instance? clojure.lang.Symbol name)
nil
(throw (IllegalArgumentException. "First argument to defn must be a symbol")))
(let [m (if (string? (first fdecl))
{:doc (first fdecl)}
{})
fdecl (if (string? (first fdecl))
(next fdecl)
fdecl)
m (if (map? (first fdecl))
(conj m (first fdecl))
m)
fdecl (if (map? (first fdecl))
(next fdecl)
fdecl)
fdecl (if (vector? (first fdecl))
(list fdecl)
fdecl)
m (if (map? (last fdecl))
(conj m (last fdecl))
m)
fdecl (if (map? (last fdecl))
(butlast fdecl)
fdecl)
m (conj {:arglists (list 'quote (sigs fdecl))} m)
m (let [inline (:inline m)
ifn (first inline)
iname (second inline)]
;; same as: (if (and (= 'fn ifn) (not (symbol? iname))) ...)
(if (if (clojure.lang.Util/equiv 'fn ifn)
(if (instance? clojure.lang.Symbol iname) false true))
;; inserts the same fn name to the inline fn if it does not have one
(assoc m :inline (cons ifn (cons (clojure.lang.Symbol/intern (.concat (.getName ^clojure.lang.Symbol name) "__inliner"))
(next inline))))
m))
m (conj (if (meta name) (meta name) {}) m)]
(list 'def (with-meta name m)
;;todo - restore propagation of fn name
;;must figure out how to convey primitive hints to self calls first
(cons `fn fdecl) ))))
(defn to-array
"Returns an array of Objects containing the contents of coll, which
can be any Collection. Maps to java.util.Collection.toArray()."
{:tag "[Ljava.lang.Object;"
:added "1.0"
:static true}
[coll] (. clojure.lang.RT (toArray coll)))
(defn cast
"Throws a ClassCastException if x is not a c, else returns x."
{:added "1.0"
:static true}
[^Class c x]
(. c (cast x)))
(defn vector
"Creates a new vector containing the args."
{:added "1.0"
:static true}
([] [])
([a] [a])
([a b] [a b])
([a b c] [a b c])
([a b c d] [a b c d])
([a b c d & args]
(. clojure.lang.LazilyPersistentVector (create (cons a (cons b (cons c (cons d args))))))))
(defn vec
"Creates a new vector containing the contents of coll. Java arrays
will be aliased and should not be modified."
{:added "1.0"
:static true}
([coll]
(if (vector? coll)
(if (instance? clojure.lang.IObj coll)
(with-meta coll nil)
(clojure.lang.LazilyPersistentVector/create coll))
(clojure.lang.LazilyPersistentVector/create coll))))
(defn hash-map
"keyval => key val
Returns a new hash map with supplied mappings. If any keys are
equal, they are handled as if by repeated uses of assoc."
{:added "1.0"
:static true}
([] {})
([& keyvals]
(. clojure.lang.PersistentHashMap (create keyvals))))
(defn hash-set
"Returns a new hash set with supplied keys. Any equal keys are
handled as if by repeated uses of conj."
{:added "1.0"
:static true}
([] #{})
([& keys]
(clojure.lang.PersistentHashSet/create keys)))
(defn sorted-map
"keyval => key val
Returns a new sorted map with supplied mappings. If any keys are
equal, they are handled as if by repeated uses of assoc."
{:added "1.0"
:static true}
([& keyvals]
(clojure.lang.PersistentTreeMap/create keyvals)))
(defn sorted-map-by
"keyval => key val
Returns a new sorted map with supplied mappings, using the supplied
comparator. If any keys are equal, they are handled as if by
repeated uses of assoc."
{:added "1.0"
:static true}
([comparator & keyvals]
(clojure.lang.PersistentTreeMap/create comparator keyvals)))
(defn sorted-set
"Returns a new sorted set with supplied keys. Any equal keys are
handled as if by repeated uses of conj."
{:added "1.0"
:static true}
([& keys]
(clojure.lang.PersistentTreeSet/create keys)))
(defn sorted-set-by
"Returns a new sorted set with supplied keys, using the supplied
comparator. Any equal keys are handled as if by repeated uses of
conj."
{:added "1.1"
:static true}
([comparator & keys]
(clojure.lang.PersistentTreeSet/create comparator keys)))
;;;;;;;;;;;;;;;;;;;;
(defn nil?
"Returns true if x is nil, false otherwise."
{:tag Boolean
:added "1.0"
:static true
:inline (fn [x] (list 'clojure.lang.Util/identical x nil))}
[x] (clojure.lang.Util/identical x nil))
(def
^{:doc "Like defn, but the resulting function name is declared as a
macro and will be used as a macro by the compiler when it is
called."
:arglists '([name doc-string? attr-map? [params*] body]
[name doc-string? attr-map? ([params*] body)+ attr-map?])
:added "1.0"
:macro true}
defmacro (fn [&form &env
name & args]
(let [prefix (loop [p (list name) args args]
(let [f (first args)]
(if (string? f)
(recur (cons f p) (next args))
(if (map? f)
(recur (cons f p) (next args))
p))))
fdecl (loop [fd args]
(if (string? (first fd))
(recur (next fd))
(if (map? (first fd))
(recur (next fd))
fd)))
fdecl (if (vector? (first fdecl))
(list fdecl)
fdecl)
add-implicit-args (fn [fd]
(let [args (first fd)]
(cons (vec (cons '&form (cons '&env args))) (next fd))))
add-args (fn [acc ds]
(if (nil? ds)
acc
(let [d (first ds)]
(if (map? d)
(conj acc d)
(recur (conj acc (add-implicit-args d)) (next ds))))))
fdecl (seq (add-args [] fdecl))
decl (loop [p prefix d fdecl]
(if p
(recur (next p) (cons (first p) d))
d))
sym (with-meta (first decl) (assoc (meta (first decl)) :macro true))
decl (cons sym (next decl))]
(cons `defn decl))))
(defmacro when
"Evaluates test. If logical true, evaluates body in an implicit do."
{:added "1.0"}
[test & body]
(list 'if test (cons 'do body)))
(defmacro when-not
"Evaluates test. If logical false, evaluates body in an implicit do."
{:added "1.0"}
[test & body]
(list 'if test nil (cons 'do body)))
(defn false?
"Returns true if x is the value false, false otherwise."
{:tag Boolean,
:added "1.0"
:static true}
[x] (clojure.lang.Util/identical x false))
(defn true?
"Returns true if x is the value true, false otherwise."
{:tag Boolean,
:added "1.0"
:static true}
[x] (clojure.lang.Util/identical x true))
(defn not
"Returns true if x is logical false, false otherwise."
{:tag Boolean
:added "1.0"
:static true}
[x] (if x false true))
(defn some?
"Returns true if x is not nil, false otherwise."
{:tag Boolean
:added "1.6"
:static true}
[x] (not (nil? x)))
(defn str
"With no args, returns the empty string. With one arg x, returns
x.toString(). (str nil) returns the empty string. With more than
one arg, returns the concatenation of the str values of the args."
{:tag String
:added "1.0"
:static true}
(^String [] "")
(^String [^Object x]
(if (nil? x) "" (. x (toString))))
(^String [x & ys]
((fn [^StringBuilder sb more]
(if more
(recur (. sb (append (str (first more)))) (next more))
(str sb)))
(new StringBuilder (str x)) ys)))
(defn symbol?
"Return true if x is a Symbol"
{:added "1.0"
:static true}
[x] (instance? clojure.lang.Symbol x))
(defn keyword?
"Return true if x is a Keyword"
{:added "1.0"
:static true}
[x] (instance? clojure.lang.Keyword x))
(defn symbol
"Returns a Symbol with the given namespace and name."
{:tag clojure.lang.Symbol
:added "1.0"
:static true}
([name] (if (symbol? name) name (clojure.lang.Symbol/intern name)))
([ns name] (clojure.lang.Symbol/intern ns name)))
(defn gensym
"Returns a new symbol with a unique name. If a prefix string is
supplied, the name is prefix# where # is some unique number. If
prefix is not supplied, the prefix is 'G__'."
{:added "1.0"
:static true}
([] (gensym "G__"))
([prefix-string] (. clojure.lang.Symbol (intern (str prefix-string (str (. clojure.lang.RT (nextID))))))))
(defmacro cond
"Takes a set of test/expr pairs. It evaluates each test one at a
time. If a test returns logical true, cond evaluates and returns
the value of the corresponding expr and doesn't evaluate any of the
other tests or exprs. (cond) returns nil."
{:added "1.0"}
[& clauses]
(when clauses
(list 'if (first clauses)
(if (next clauses)
(second clauses)
(throw (IllegalArgumentException.
"cond requires an even number of forms")))
(cons 'clojure.core/cond (next (next clauses))))))
(defn keyword
"Returns a Keyword with the given namespace and name. Do not use :
in the keyword strings, it will be added automatically."
{:tag clojure.lang.Keyword
:added "1.0"
:static true}
([name] (cond (keyword? name) name
(symbol? name) (clojure.lang.Keyword/intern ^clojure.lang.Symbol name)
(string? name) (clojure.lang.Keyword/intern ^String name)))
([ns name] (clojure.lang.Keyword/intern ns name)))
(defn find-keyword
"Returns a Keyword with the given namespace and name if one already
exists. This function will not intern a new keyword. If the keyword
has not already been interned, it will return nil. Do not use :
in the keyword strings, it will be added automatically."
{:tag clojure.lang.Keyword
:added "1.3"
:static true}
([name] (cond (keyword? name) name
(symbol? name) (clojure.lang.Keyword/find ^clojure.lang.Symbol name)
(string? name) (clojure.lang.Keyword/find ^String name)))
([ns name] (clojure.lang.Keyword/find ns name)))
(defn spread
{:private true
:static true}
[arglist]
(cond
(nil? arglist) nil
(nil? (next arglist)) (seq (first arglist))
:else (cons (first arglist) (spread (next arglist)))))
(defn list*
"Creates a new list containing the items prepended to the rest, the
last of which will be treated as a sequence."
{:added "1.0"
:static true}
([args] (seq args))
([a args] (cons a args))
([a b args] (cons a (cons b args)))
([a b c args] (cons a (cons b (cons c args))))
([a b c d & more]
(cons a (cons b (cons c (cons d (spread more)))))))
(defn apply
"Applies fn f to the argument list formed by prepending intervening arguments to args."
{:added "1.0"
:static true}
([^clojure.lang.IFn f args]
(. f (applyTo (seq args))))
([^clojure.lang.IFn f x args]
(. f (applyTo (list* x args))))
([^clojure.lang.IFn f x y args]
(. f (applyTo (list* x y args))))
([^clojure.lang.IFn f x y z args]
(. f (applyTo (list* x y z args))))
([^clojure.lang.IFn f a b c d & args]
(. f (applyTo (cons a (cons b (cons c (cons d (spread args)))))))))
(defn vary-meta
"Returns an object of the same type and value as obj, with
(apply f (meta obj) args) as its metadata."
{:added "1.0"
:static true}
[obj f & args]
(with-meta obj (apply f (meta obj) args)))
(defmacro lazy-seq
"Takes a body of expressions that returns an ISeq or nil, and yields
a Seqable object that will invoke the body only the first time seq
is called, and will cache the result and return it on all subsequent
seq calls. See also - realized?"
{:added "1.0"}
[& body]
(list 'new 'clojure.lang.LazySeq (list* '^{:once true} fn* [] body)))
(defn ^:static ^clojure.lang.ChunkBuffer chunk-buffer ^clojure.lang.ChunkBuffer [capacity]
(clojure.lang.ChunkBuffer. capacity))
(defn ^:static chunk-append [^clojure.lang.ChunkBuffer b x]
(.add b x))
(defn ^:static ^clojure.lang.IChunk chunk [^clojure.lang.ChunkBuffer b]
(.chunk b))
(defn ^:static ^clojure.lang.IChunk chunk-first ^clojure.lang.IChunk [^clojure.lang.IChunkedSeq s]
(.chunkedFirst s))
(defn ^:static ^clojure.lang.ISeq chunk-rest ^clojure.lang.ISeq [^clojure.lang.IChunkedSeq s]
(.chunkedMore s))
(defn ^:static ^clojure.lang.ISeq chunk-next ^clojure.lang.ISeq [^clojure.lang.IChunkedSeq s]
(.chunkedNext s))
(defn ^:static chunk-cons [chunk rest]
(if (clojure.lang.Numbers/isZero (clojure.lang.RT/count chunk))
rest
(clojure.lang.ChunkedCons. chunk rest)))
(defn ^:static chunked-seq? [s]
(instance? clojure.lang.IChunkedSeq s))
(defn concat
"Returns a lazy seq representing the concatenation of the elements in the supplied colls."
{:added "1.0"
:static true}
([] (lazy-seq nil))
([x] (lazy-seq x))
([x y]
(lazy-seq
(let [s (seq x)]
(if s
(if (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s) y))
(cons (first s) (concat (rest s) y)))
y))))
([x y & zs]
(let [cat (fn cat [xys zs]
(lazy-seq
(let [xys (seq xys)]
(if xys
(if (chunked-seq? xys)
(chunk-cons (chunk-first xys)
(cat (chunk-rest xys) zs))
(cons (first xys) (cat (rest xys) zs)))
(when zs
(cat (first zs) (next zs)))))))]
(cat (concat x y) zs))))
;;;;;;;;;;;;;;;;at this point all the support for syntax-quote exists;;;;;;;;;;;;;;;;;;;;;;
(defmacro delay
"Takes a body of expressions and yields a Delay object that will
invoke the body only the first time it is forced (with force or deref/@), and
will cache the result and return it on all subsequent force
calls. See also - realized?"
{:added "1.0"}
[& body]
(list 'new 'clojure.lang.Delay (list* `^{:once true} fn* [] body)))
(defn delay?
"returns true if x is a Delay created with delay"
{:added "1.0"
:static true}
[x] (instance? clojure.lang.Delay x))
(defn force
"If x is a Delay, returns the (possibly cached) value of its expression, else returns x"
{:added "1.0"
:static true}
[x] (. clojure.lang.Delay (force x)))
(defmacro if-not
"Evaluates test. If logical false, evaluates and returns then expr,
otherwise else expr, if supplied, else nil."
{:added "1.0"}
([test then] `(if-not ~test ~then nil))
([test then else]
`(if (not ~test) ~then ~else)))
(defn identical?
"Tests if 2 arguments are the same object"
{:inline (fn [x y] `(. clojure.lang.Util identical ~x ~y))
:inline-arities #{2}
:added "1.0"}
([x y] (clojure.lang.Util/identical x y)))
;equiv-based
(defn =
"Equality. Returns true if x equals y, false if not. Same as
Java x.equals(y) except it also works for nil, and compares
numbers and collections in a type-independent manner. Clojure's immutable data
structures define equals() (and thus =) as a value, not an identity,
comparison."
{:inline (fn [x y] `(. clojure.lang.Util equiv ~x ~y))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (clojure.lang.Util/equiv x y))
([x y & more]
(if (clojure.lang.Util/equiv x y)
(if (next more)
(recur y (first more) (next more))
(clojure.lang.Util/equiv y (first more)))
false)))
;equals-based
#_(defn =
"Equality. Returns true if x equals y, false if not. Same as Java
x.equals(y) except it also works for nil. Boxed numbers must have
same type. Clojure's immutable data structures define equals() (and
thus =) as a value, not an identity, comparison."
{:inline (fn [x y] `(. clojure.lang.Util equals ~x ~y))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (clojure.lang.Util/equals x y))
([x y & more]
(if (= x y)
(if (next more)
(recur y (first more) (next more))
(= y (first more)))
false)))
(defn not=
"Same as (not (= obj1 obj2))"
{:tag Boolean
:added "1.0"
:static true}
([x] false)
([x y] (not (= x y)))
([x y & more]
(not (apply = x y more))))
(defn compare
"Comparator. Returns a negative number, zero, or a positive number
when x is logically 'less than', 'equal to', or 'greater than'
y. Same as Java x.compareTo(y) except it also works for nil, and
compares numbers and collections in a type-independent manner. x
must implement Comparable"
{
:inline (fn [x y] `(. clojure.lang.Util compare ~x ~y))
:added "1.0"}
[x y] (. clojure.lang.Util (compare x y)))
(defmacro and
"Evaluates exprs one at a time, from left to right. If a form
returns logical false (nil or false), and returns that value and
doesn't evaluate any of the other expressions, otherwise it returns
the value of the last expr. (and) returns true."
{:added "1.0"}
([] true)
([x] x)
([x & next]
`(let [and# ~x]
(if and# (and ~@next) and#))))
(defmacro or
"Evaluates exprs one at a time, from left to right. If a form
returns a logical true value, or returns that value and doesn't
evaluate any of the other expressions, otherwise it returns the
value of the last expression. (or) returns nil."
{:added "1.0"}
([] nil)
([x] x)
([x & next]
`(let [or# ~x]
(if or# or# (or ~@next)))))
;;;;;;;;;;;;;;;;;;; sequence fns ;;;;;;;;;;;;;;;;;;;;;;;
(defn zero?
"Returns true if num is zero, else false"
{
:inline (fn [x] `(. clojure.lang.Numbers (isZero ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (isZero x)))
(defn count
"Returns the number of items in the collection. (count nil) returns
0. Also works on strings, arrays, and Java Collections and Maps"
{
:inline (fn [x] `(. clojure.lang.RT (count ~x)))
:added "1.0"}
[coll] (clojure.lang.RT/count coll))
(defn int
"Coerce to int"
{
:inline (fn [x] `(. clojure.lang.RT (~(if *unchecked-math* 'uncheckedIntCast 'intCast) ~x)))
:added "1.0"}
[x] (. clojure.lang.RT (intCast x)))
(defn nth
"Returns the value at the index. get returns nil if index out of
bounds, nth throws an exception unless not-found is supplied. nth
also works for strings, Java arrays, regex Matchers and Lists, and,
in O(n) time, for sequences."
{:inline (fn [c i & nf] `(. clojure.lang.RT (nth ~c ~i ~@nf)))
:inline-arities #{2 3}
:added "1.0"}
([coll index] (. clojure.lang.RT (nth coll index)))
([coll index not-found] (. clojure.lang.RT (nth coll index not-found))))
(defn <
"Returns non-nil if nums are in monotonically increasing order,
otherwise false."
{:inline (fn [x y] `(. clojure.lang.Numbers (lt ~x ~y)))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (. clojure.lang.Numbers (lt x y)))
([x y & more]
(if (< x y)
(if (next more)
(recur y (first more) (next more))
(< y (first more)))
false)))
(defn inc'
"Returns a number one greater than num. Supports arbitrary precision.
See also: inc"
{:inline (fn [x] `(. clojure.lang.Numbers (incP ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (incP x)))
(defn inc
"Returns a number one greater than num. Does not auto-promote
longs, will throw on overflow. See also: inc'"
{:inline (fn [x] `(. clojure.lang.Numbers (~(if *unchecked-math* 'unchecked_inc 'inc) ~x)))
:added "1.2"}
[x] (. clojure.lang.Numbers (inc x)))
;; reduce is defined again later after InternalReduce loads
(defn ^:private ^:static
reduce1
([f coll]
(let [s (seq coll)]
(if s
(reduce1 f (first s) (next s))
(f))))
([f val coll]
(let [s (seq coll)]
(if s
(if (chunked-seq? s)
(recur f
(.reduce (chunk-first s) f val)
(chunk-next s))
(recur f (f val (first s)) (next s)))
val))))
(defn reverse
"Returns a seq of the items in coll in reverse order. Not lazy."
{:added "1.0"
:static true}
[coll]
(reduce1 conj () coll))
;;math stuff
(defn ^:private nary-inline
([op] (nary-inline op op))
([op unchecked-op]
(fn
([x] (let [op (if *unchecked-math* unchecked-op op)]
`(. clojure.lang.Numbers (~op ~x))))
([x y] (let [op (if *unchecked-math* unchecked-op op)]
`(. clojure.lang.Numbers (~op ~x ~y))))
([x y & more]
(let [op (if *unchecked-math* unchecked-op op)]
(reduce1
(fn [a b] `(. clojure.lang.Numbers (~op ~a ~b)))
`(. clojure.lang.Numbers (~op ~x ~y)) more))))))
(defn ^:private >1? [n] (clojure.lang.Numbers/gt n 1))
(defn ^:private >0? [n] (clojure.lang.Numbers/gt n 0))
(defn +'
"Returns the sum of nums. (+) returns 0. Supports arbitrary precision.
See also: +"
{:inline (nary-inline 'addP)
:inline-arities >1?
:added "1.0"}
([] 0)
([x] (cast Number x))
([x y] (. clojure.lang.Numbers (addP x y)))
([x y & more]
(reduce1 +' (+' x y) more)))
(defn +
"Returns the sum of nums. (+) returns 0. Does not auto-promote
longs, will throw on overflow. See also: +'"
{:inline (nary-inline 'add 'unchecked_add)
:inline-arities >1?
:added "1.2"}
([] 0)
([x] (cast Number x))
([x y] (. clojure.lang.Numbers (add x y)))
([x y & more]
(reduce1 + (+ x y) more)))
(defn *'
"Returns the product of nums. (*) returns 1. Supports arbitrary precision.
See also: *"
{:inline (nary-inline 'multiplyP)
:inline-arities >1?
:added "1.0"}
([] 1)
([x] (cast Number x))
([x y] (. clojure.lang.Numbers (multiplyP x y)))
([x y & more]
(reduce1 *' (*' x y) more)))
(defn *
"Returns the product of nums. (*) returns 1. Does not auto-promote
longs, will throw on overflow. See also: *'"
{:inline (nary-inline 'multiply 'unchecked_multiply)
:inline-arities >1?
:added "1.2"}
([] 1)
([x] (cast Number x))
([x y] (. clojure.lang.Numbers (multiply x y)))
([x y & more]
(reduce1 * (* x y) more)))
(defn /
"If no denominators are supplied, returns 1/numerator,
else returns numerator divided by all of the denominators."
{:inline (nary-inline 'divide)
:inline-arities >1?
:added "1.0"}
([x] (/ 1 x))
([x y] (. clojure.lang.Numbers (divide x y)))
([x y & more]
(reduce1 / (/ x y) more)))
(defn -'
"If no ys are supplied, returns the negation of x, else subtracts
the ys from x and returns the result. Supports arbitrary precision.
See also: -"
{:inline (nary-inline 'minusP)
:inline-arities >0?
:added "1.0"}
([x] (. clojure.lang.Numbers (minusP x)))
([x y] (. clojure.lang.Numbers (minusP x y)))
([x y & more]
(reduce1 -' (-' x y) more)))
(defn -
"If no ys are supplied, returns the negation of x, else subtracts
the ys from x and returns the result. Does not auto-promote
longs, will throw on overflow. See also: -'"
{:inline (nary-inline 'minus 'unchecked_minus)
:inline-arities >0?
:added "1.2"}
([x] (. clojure.lang.Numbers (minus x)))
([x y] (. clojure.lang.Numbers (minus x y)))
([x y & more]
(reduce1 - (- x y) more)))
(defn <=
"Returns non-nil if nums are in monotonically non-decreasing order,
otherwise false."
{:inline (fn [x y] `(. clojure.lang.Numbers (lte ~x ~y)))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (. clojure.lang.Numbers (lte x y)))
([x y & more]
(if (<= x y)
(if (next more)
(recur y (first more) (next more))
(<= y (first more)))
false)))
(defn >
"Returns non-nil if nums are in monotonically decreasing order,
otherwise false."
{:inline (fn [x y] `(. clojure.lang.Numbers (gt ~x ~y)))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (. clojure.lang.Numbers (gt x y)))
([x y & more]
(if (> x y)
(if (next more)
(recur y (first more) (next more))
(> y (first more)))
false)))
(defn >=
"Returns non-nil if nums are in monotonically non-increasing order,
otherwise false."
{:inline (fn [x y] `(. clojure.lang.Numbers (gte ~x ~y)))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (. clojure.lang.Numbers (gte x y)))
([x y & more]
(if (>= x y)
(if (next more)
(recur y (first more) (next more))
(>= y (first more)))
false)))
(defn ==
"Returns non-nil if nums all have the equivalent
value (type-independent), otherwise false"
{:inline (fn [x y] `(. clojure.lang.Numbers (equiv ~x ~y)))
:inline-arities #{2}
:added "1.0"}
([x] true)
([x y] (. clojure.lang.Numbers (equiv x y)))
([x y & more]
(if (== x y)
(if (next more)
(recur y (first more) (next more))
(== y (first more)))
false)))
(defn max
"Returns the greatest of the nums."
{:added "1.0"
:inline-arities >1?
:inline (nary-inline 'max)}
([x] x)
([x y] (. clojure.lang.Numbers (max x y)))
([x y & more]
(reduce1 max (max x y) more)))
(defn min
"Returns the least of the nums."
{:added "1.0"
:inline-arities >1?
:inline (nary-inline 'min)}
([x] x)
([x y] (. clojure.lang.Numbers (min x y)))
([x y & more]
(reduce1 min (min x y) more)))
(defn dec'
"Returns a number one less than num. Supports arbitrary precision.
See also: dec"
{:inline (fn [x] `(. clojure.lang.Numbers (decP ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (decP x)))
(defn dec
"Returns a number one less than num. Does not auto-promote
longs, will throw on overflow. See also: dec'"
{:inline (fn [x] `(. clojure.lang.Numbers (~(if *unchecked-math* 'unchecked_dec 'dec) ~x)))
:added "1.2"}
[x] (. clojure.lang.Numbers (dec x)))
(defn unchecked-inc-int
"Returns a number one greater than x, an int.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x] `(. clojure.lang.Numbers (unchecked_int_inc ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (unchecked_int_inc x)))
(defn unchecked-inc
"Returns a number one greater than x, a long.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x] `(. clojure.lang.Numbers (unchecked_inc ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (unchecked_inc x)))
(defn unchecked-dec-int
"Returns a number one less than x, an int.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x] `(. clojure.lang.Numbers (unchecked_int_dec ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (unchecked_int_dec x)))
(defn unchecked-dec
"Returns a number one less than x, a long.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x] `(. clojure.lang.Numbers (unchecked_dec ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (unchecked_dec x)))
(defn unchecked-negate-int
"Returns the negation of x, an int.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x] `(. clojure.lang.Numbers (unchecked_int_negate ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (unchecked_int_negate x)))
(defn unchecked-negate
"Returns the negation of x, a long.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x] `(. clojure.lang.Numbers (unchecked_minus ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (unchecked_minus x)))
(defn unchecked-add-int
"Returns the sum of x and y, both int.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_int_add ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_int_add x y)))
(defn unchecked-add
"Returns the sum of x and y, both long.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_add ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_add x y)))
(defn unchecked-subtract-int
"Returns the difference of x and y, both int.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_int_subtract ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_int_subtract x y)))
(defn unchecked-subtract
"Returns the difference of x and y, both long.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_minus ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_minus x y)))
(defn unchecked-multiply-int
"Returns the product of x and y, both int.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_int_multiply ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_int_multiply x y)))
(defn unchecked-multiply
"Returns the product of x and y, both long.
Note - uses a primitive operator subject to overflow."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_multiply ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_multiply x y)))
(defn unchecked-divide-int
"Returns the division of x by y, both int.
Note - uses a primitive operator subject to truncation."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_int_divide ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_int_divide x y)))
(defn unchecked-remainder-int
"Returns the remainder of division of x by y, both int.
Note - uses a primitive operator subject to truncation."
{:inline (fn [x y] `(. clojure.lang.Numbers (unchecked_int_remainder ~x ~y)))
:added "1.0"}
[x y] (. clojure.lang.Numbers (unchecked_int_remainder x y)))
(defn pos?
"Returns true if num is greater than zero, else false"
{
:inline (fn [x] `(. clojure.lang.Numbers (isPos ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (isPos x)))
(defn neg?
"Returns true if num is less than zero, else false"
{
:inline (fn [x] `(. clojure.lang.Numbers (isNeg ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers (isNeg x)))
(defn quot
"quot[ient] of dividing numerator by denominator."
{:added "1.0"
:static true
:inline (fn [x y] `(. clojure.lang.Numbers (quotient ~x ~y)))}
[num div]
(. clojure.lang.Numbers (quotient num div)))
(defn rem
"remainder of dividing numerator by denominator."
{:added "1.0"
:static true
:inline (fn [x y] `(. clojure.lang.Numbers (remainder ~x ~y)))}
[num div]
(. clojure.lang.Numbers (remainder num div)))
(defn rationalize
"returns the rational value of num"
{:added "1.0"
:static true}
[num]
(. clojure.lang.Numbers (rationalize num)))
;;Bit ops
(defn bit-not
"Bitwise complement"
{:inline (fn [x] `(. clojure.lang.Numbers (not ~x)))
:added "1.0"}
[x] (. clojure.lang.Numbers not x))
(defn bit-and
"Bitwise and"
{:inline (nary-inline 'and)
:inline-arities >1?
:added "1.0"}
([x y] (. clojure.lang.Numbers and x y))
([x y & more]
(reduce1 bit-and (bit-and x y) more)))
(defn bit-or
"Bitwise or"
{:inline (nary-inline 'or)
:inline-arities >1?
:added "1.0"}
([x y] (. clojure.lang.Numbers or x y))
([x y & more]
(reduce1 bit-or (bit-or x y) more)))
(defn bit-xor
"Bitwise exclusive or"
{:inline (nary-inline 'xor)
:inline-arities >1?
:added "1.0"}
([x y] (. clojure.lang.Numbers xor x y))
([x y & more]
(reduce1 bit-xor (bit-xor x y) more)))
(defn bit-and-not
"Bitwise and with complement"
{:inline (nary-inline 'andNot)
:inline-arities >1?
:added "1.0"
:static true}
([x y] (. clojure.lang.Numbers andNot x y))
([x y & more]
(reduce1 bit-and-not (bit-and-not x y) more)))
(defn bit-clear
"Clear bit at index n"
{:added "1.0"
:static true}
[x n] (. clojure.lang.Numbers clearBit x n))
(defn bit-set
"Set bit at index n"
{:added "1.0"
:static true}
[x n] (. clojure.lang.Numbers setBit x n))
(defn bit-flip
"Flip bit at index n"
{:added "1.0"
:static true}
[x n] (. clojure.lang.Numbers f
gitextract_r576sy1c/
├── .gitignore
├── CONTRIBUTING.md
├── KNOWN_ISSUES
├── antsetup.sh
├── build.clj
├── build.xml
├── changes.md
├── clojure.iml
├── doc/
│ └── clojure/
│ └── pprint/
│ ├── CommonLispFormat.markdown
│ └── PrettyPrinting.markdown
├── epl-v10.html
├── pom.xml
├── readme.md
├── release.sh
├── src/
│ ├── assembly/
│ │ ├── distribution.xml
│ │ └── slim.xml
│ ├── clj/
│ │ └── clojure/
│ │ ├── core/
│ │ │ ├── protocols.clj
│ │ │ └── reducers.clj
│ │ ├── core.clj
│ │ ├── core_deftype.clj
│ │ ├── core_objc.clj
│ │ ├── core_print.clj
│ │ ├── core_proxy.clj
│ │ ├── data.clj
│ │ ├── edn.clj
│ │ ├── genclass.clj
│ │ ├── gvec.clj
│ │ ├── inspector.clj
│ │ ├── instant.clj
│ │ ├── java/
│ │ │ ├── browse.clj
│ │ │ ├── browse_ui.clj
│ │ │ ├── io.clj
│ │ │ ├── javadoc.clj
│ │ │ └── shell.clj
│ │ ├── main.clj
│ │ ├── parallel.clj
│ │ ├── pprint/
│ │ │ ├── cl_format.clj
│ │ │ ├── column_writer.clj
│ │ │ ├── dispatch.clj
│ │ │ ├── pprint_base.clj
│ │ │ ├── pretty_writer.clj
│ │ │ ├── print_table.clj
│ │ │ └── utilities.clj
│ │ ├── pprint.clj
│ │ ├── reflect/
│ │ │ └── java.clj
│ │ ├── reflect.clj
│ │ ├── remoterepl.clj
│ │ ├── repl.clj
│ │ ├── set.clj
│ │ ├── stacktrace.clj
│ │ ├── string.clj
│ │ ├── template.clj
│ │ ├── test/
│ │ │ ├── junit.clj
│ │ │ └── tap.clj
│ │ ├── test.clj
│ │ ├── uuid.clj
│ │ ├── walk.clj
│ │ ├── xml.clj
│ │ └── zip.clj
│ ├── ffi/
│ │ ├── ffi.h
│ │ ├── ffi_arm64.h
│ │ ├── ffi_armv7.h
│ │ ├── ffi_common.h
│ │ ├── ffi_i386.h
│ │ ├── ffi_x86_64.h
│ │ ├── fficonfig.h
│ │ ├── fficonfig_arm64.h
│ │ ├── fficonfig_armv7.h
│ │ ├── fficonfig_i386.h
│ │ ├── fficonfig_x86_64.h
│ │ ├── ffitarget.h
│ │ ├── ffitarget_arm64.h
│ │ ├── ffitarget_armv7.h
│ │ ├── ffitarget_i386.h
│ │ ├── ffitarget_x86_64.h
│ │ └── libffi.a
│ ├── jvm/
│ │ ├── clojure/
│ │ │ ├── asm/
│ │ │ │ ├── AnnotationVisitor.java
│ │ │ │ ├── AnnotationWriter.java
│ │ │ │ ├── Attribute.java
│ │ │ │ ├── ByteVector.java
│ │ │ │ ├── ClassReader.java
│ │ │ │ ├── ClassVisitor.java
│ │ │ │ ├── ClassWriter.java
│ │ │ │ ├── Context.java
│ │ │ │ ├── Edge.java
│ │ │ │ ├── FieldVisitor.java
│ │ │ │ ├── FieldWriter.java
│ │ │ │ ├── Frame.java
│ │ │ │ ├── Handle.java
│ │ │ │ ├── Handler.java
│ │ │ │ ├── Item.java
│ │ │ │ ├── Label.java
│ │ │ │ ├── MethodVisitor.java
│ │ │ │ ├── MethodWriter.java
│ │ │ │ ├── Opcodes.java
│ │ │ │ ├── Type.java
│ │ │ │ ├── commons/
│ │ │ │ │ ├── AdviceAdapter.java
│ │ │ │ │ ├── AnalyzerAdapter.java
│ │ │ │ │ ├── CodeSizeEvaluator.java
│ │ │ │ │ ├── GeneratorAdapter.java
│ │ │ │ │ ├── InstructionAdapter.java
│ │ │ │ │ ├── LocalVariablesSorter.java
│ │ │ │ │ ├── Method.java
│ │ │ │ │ ├── SerialVersionUIDAdder.java
│ │ │ │ │ ├── StaticInitMerger.java
│ │ │ │ │ ├── TableSwitchGenerator.java
│ │ │ │ │ └── package.html
│ │ │ │ └── package.html
│ │ │ ├── java/
│ │ │ │ └── api/
│ │ │ │ ├── Clojure.java
│ │ │ │ └── package.html
│ │ │ ├── lang/
│ │ │ │ ├── AFn.java
│ │ │ │ ├── AFunction.java
│ │ │ │ ├── AMapEntry.java
│ │ │ │ ├── APersistentMap.java
│ │ │ │ ├── APersistentSet.java
│ │ │ │ ├── APersistentVector.java
│ │ │ │ ├── ARef.java
│ │ │ │ ├── AReference.java
│ │ │ │ ├── ASeq.java
│ │ │ │ ├── ATransientMap.java
│ │ │ │ ├── ATransientSet.java
│ │ │ │ ├── Agent.java
│ │ │ │ ├── ArityException.java
│ │ │ │ ├── ArrayChunk.java
│ │ │ │ ├── ArrayIter.java
│ │ │ │ ├── ArraySeq.java
│ │ │ │ ├── Associative.java
│ │ │ │ ├── Atom.java
│ │ │ │ ├── BigInt.java
│ │ │ │ ├── Binding.java
│ │ │ │ ├── Box.java
│ │ │ │ ├── ChunkBuffer.java
│ │ │ │ ├── ChunkedCons.java
│ │ │ │ ├── Compile.java
│ │ │ │ ├── Compiler.java
│ │ │ │ ├── Cons.java
│ │ │ │ ├── Counted.java
│ │ │ │ ├── Cycle.java
│ │ │ │ ├── Delay.java
│ │ │ │ ├── DynamicClassLoader.java
│ │ │ │ ├── EdnReader.java
│ │ │ │ ├── EnumerationSeq.java
│ │ │ │ ├── ExceptionInfo.java
│ │ │ │ ├── Fn.java
│ │ │ │ ├── FnLoaderThunk.java
│ │ │ │ ├── IAtom.java
│ │ │ │ ├── IBlockingDeref.java
│ │ │ │ ├── IChunk.java
│ │ │ │ ├── IChunkedSeq.java
│ │ │ │ ├── IDeref.java
│ │ │ │ ├── IEditableCollection.java
│ │ │ │ ├── IExceptionInfo.java
│ │ │ │ ├── IFn.java
│ │ │ │ ├── IHashEq.java
│ │ │ │ ├── IKeywordLookup.java
│ │ │ │ ├── ILookup.java
│ │ │ │ ├── ILookupSite.java
│ │ │ │ ├── ILookupThunk.java
│ │ │ │ ├── IMapEntry.java
│ │ │ │ ├── IMapIterable.java
│ │ │ │ ├── IMeta.java
│ │ │ │ ├── IObj.java
│ │ │ │ ├── IPending.java
│ │ │ │ ├── IPersistentCollection.java
│ │ │ │ ├── IPersistentList.java
│ │ │ │ ├── IPersistentMap.java
│ │ │ │ ├── IPersistentSet.java
│ │ │ │ ├── IPersistentStack.java
│ │ │ │ ├── IPersistentVector.java
│ │ │ │ ├── IProxy.java
│ │ │ │ ├── IRecord.java
│ │ │ │ ├── IReduce.java
│ │ │ │ ├── IReduceInit.java
│ │ │ │ ├── IRef.java
│ │ │ │ ├── IReference.java
│ │ │ │ ├── ISeq.java
│ │ │ │ ├── ITransientAssociative.java
│ │ │ │ ├── ITransientCollection.java
│ │ │ │ ├── ITransientMap.java
│ │ │ │ ├── ITransientSet.java
│ │ │ │ ├── ITransientVector.java
│ │ │ │ ├── IType.java
│ │ │ │ ├── IllegalAccessError.java
│ │ │ │ ├── Indexed.java
│ │ │ │ ├── IndexedSeq.java
│ │ │ │ ├── Intrinsics.java
│ │ │ │ ├── Iterate.java
│ │ │ │ ├── IteratorSeq.java
│ │ │ │ ├── Keyword.java
│ │ │ │ ├── KeywordLookupSite.java
│ │ │ │ ├── LazilyPersistentVector.java
│ │ │ │ ├── LazySeq.java
│ │ │ │ ├── LineNumberingPushbackReader.java
│ │ │ │ ├── LispReader.java
│ │ │ │ ├── LockingTransaction.java
│ │ │ │ ├── LongRange.java
│ │ │ │ ├── MapEntry.java
│ │ │ │ ├── MapEquivalence.java
│ │ │ │ ├── MethodImplCache.java
│ │ │ │ ├── MultiFn.java
│ │ │ │ ├── Murmur3.java
│ │ │ │ ├── Named.java
│ │ │ │ ├── Namespace.java
│ │ │ │ ├── Numbers.java
│ │ │ │ ├── Obj.java
│ │ │ │ ├── ObjC.java
│ │ │ │ ├── ObjCClass.java
│ │ │ │ ├── PersistentArrayMap.java
│ │ │ │ ├── PersistentHashMap.java
│ │ │ │ ├── PersistentHashSet.java
│ │ │ │ ├── PersistentList.java
│ │ │ │ ├── PersistentQueue.java
│ │ │ │ ├── PersistentStructMap.java
│ │ │ │ ├── PersistentTreeMap.java
│ │ │ │ ├── PersistentTreeSet.java
│ │ │ │ ├── PersistentVector.java
│ │ │ │ ├── ProxyHandler.java
│ │ │ │ ├── RT.java
│ │ │ │ ├── Range.java
│ │ │ │ ├── Ratio.java
│ │ │ │ ├── ReaderConditional.java
│ │ │ │ ├── RecordIterator.java
│ │ │ │ ├── Reduced.java
│ │ │ │ ├── Ref.java
│ │ │ │ ├── Reflector.java
│ │ │ │ ├── RemoteRef.java
│ │ │ │ ├── RemoteRepl.java
│ │ │ │ ├── Repeat.java
│ │ │ │ ├── RestFn.java
│ │ │ │ ├── RestFnWithMeta.java
│ │ │ │ ├── Reversible.java
│ │ │ │ ├── Selector.java
│ │ │ │ ├── SeqEnumeration.java
│ │ │ │ ├── SeqIterator.java
│ │ │ │ ├── Seqable.java
│ │ │ │ ├── Sequential.java
│ │ │ │ ├── Settable.java
│ │ │ │ ├── Sorted.java
│ │ │ │ ├── SourceGenIntrinsics.java
│ │ │ │ ├── SourceWriter.java
│ │ │ │ ├── StringEscapeUtils.java
│ │ │ │ ├── StringSeq.java
│ │ │ │ ├── Symbol.java
│ │ │ │ ├── TaggedLiteral.java
│ │ │ │ ├── ThreadFactory.java
│ │ │ │ ├── TransactionalHashMap.java
│ │ │ │ ├── TransformerIterator.java
│ │ │ │ ├── URLClassLoader.java
│ │ │ │ ├── Util.java
│ │ │ │ ├── Var.java
│ │ │ │ ├── Volatile.java
│ │ │ │ ├── WarnBoxedMath.java
│ │ │ │ ├── XMLHandler.java
│ │ │ │ └── package.html
│ │ │ └── main.java
│ │ └── com/
│ │ └── google/
│ │ └── j2objc/
│ │ └── annotations/
│ │ └── ReflectionSupport.java
│ ├── objc/
│ │ ├── Cst502Socket.h
│ │ ├── Cst502Socket.m
│ │ ├── NSCommon.h
│ │ ├── NSCommon.m
│ │ ├── NSProxyImpl.h
│ │ ├── NSProxyImpl.m
│ │ ├── NSSocketImpl.h
│ │ ├── NSSocketImpl.m
│ │ ├── NSTypeImpl.h
│ │ ├── NSTypeImpl.m
│ │ ├── ReplClient.h
│ │ ├── ReplClient.m
│ │ ├── WeakRef.h
│ │ └── WeakRef.m
│ ├── resources/
│ │ └── clojure/
│ │ └── version.properties
│ └── script/
│ ├── run_test.clj
│ └── run_test_generative.clj
└── test/
├── clojure/
│ ├── test_clojure/
│ │ ├── agents.clj
│ │ ├── annotations/
│ │ │ ├── java_5.clj
│ │ │ └── java_6.clj
│ │ ├── annotations.clj
│ │ ├── api.clj
│ │ ├── atoms.clj
│ │ ├── clojure_set.clj
│ │ ├── clojure_walk.clj
│ │ ├── clojure_xml.clj
│ │ ├── clojure_zip.clj
│ │ ├── compilation/
│ │ │ ├── examples.clj
│ │ │ └── line_number_examples.clj
│ │ ├── compilation.clj
│ │ ├── control.clj
│ │ ├── data.clj
│ │ ├── data_structures.clj
│ │ ├── def.clj
│ │ ├── delays.clj
│ │ ├── edn.clj
│ │ ├── errors.clj
│ │ ├── evaluation.clj
│ │ ├── fn.clj
│ │ ├── for.clj
│ │ ├── genclass/
│ │ │ └── examples.clj
│ │ ├── genclass.clj
│ │ ├── generators.clj
│ │ ├── java/
│ │ │ ├── io.clj
│ │ │ ├── javadoc.clj
│ │ │ └── shell.clj
│ │ ├── java_interop.clj
│ │ ├── keywords.clj
│ │ ├── logic.clj
│ │ ├── macros.clj
│ │ ├── main.clj
│ │ ├── metadata.clj
│ │ ├── multimethods.clj
│ │ ├── ns_libs.clj
│ │ ├── numbers.clj
│ │ ├── other_functions.clj
│ │ ├── parallel.clj
│ │ ├── pprint/
│ │ │ ├── test_cl_format.clj
│ │ │ ├── test_helper.clj
│ │ │ └── test_pretty.clj
│ │ ├── pprint.clj
│ │ ├── predicates.clj
│ │ ├── printer.clj
│ │ ├── protocols/
│ │ │ ├── examples.clj
│ │ │ ├── hash_collisions.clj
│ │ │ └── more_examples.clj
│ │ ├── protocols.clj
│ │ ├── reader.cljc
│ │ ├── reducers.clj
│ │ ├── reflect.clj
│ │ ├── refs.clj
│ │ ├── repl/
│ │ │ └── example.clj
│ │ ├── repl.clj
│ │ ├── rt.clj
│ │ ├── sequences.clj
│ │ ├── serialization.clj
│ │ ├── special.clj
│ │ ├── string.clj
│ │ ├── test.clj
│ │ ├── test_fixtures.clj
│ │ ├── transducers.clj
│ │ ├── transients.clj
│ │ ├── try_catch.clj
│ │ ├── vars.clj
│ │ ├── vectors.clj
│ │ └── volatiles.clj
│ └── test_helper.clj
├── java/
│ ├── clojure/
│ │ └── test/
│ │ └── ReflectorTryCatchFixture.java
│ ├── compilation/
│ │ └── TestDispatch.java
│ └── java/
│ └── util/
│ └── jar/
│ ├── JarEntry.java
│ └── JarFile.java
└── objc/
├── NSCommonTest.h
└── NSCommonTest.m
Showing preview only (406K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4960 symbols across 189 files)
FILE: src/ffi/ffi_arm64.h
type ffi_type (line 114) | typedef struct _ffi_type
type ffi_status (line 206) | typedef enum {
type FFI_TYPE (line 212) | typedef unsigned FFI_TYPE;
type ffi_cif (line 214) | typedef struct {
type ffi_raw (line 254) | typedef union {
type ffi_java_raw (line 265) | typedef union {
type ffi_raw (line 273) | typedef ffi_raw ffi_java_raw;
type ffi_closure (line 306) | typedef struct {
type ffi_raw_closure (line 344) | typedef struct {
type ffi_java_raw_closure (line 369) | typedef struct {
FILE: src/ffi/ffi_armv7.h
type ffi_type (line 114) | typedef struct _ffi_type
type ffi_status (line 206) | typedef enum {
type FFI_TYPE (line 212) | typedef unsigned FFI_TYPE;
type ffi_cif (line 214) | typedef struct {
type ffi_raw (line 254) | typedef union {
type ffi_java_raw (line 265) | typedef union {
type ffi_raw (line 273) | typedef ffi_raw ffi_java_raw;
type ffi_closure (line 306) | typedef struct {
type ffi_raw_closure (line 344) | typedef struct {
type ffi_java_raw_closure (line 369) | typedef struct {
FILE: src/ffi/ffi_common.h
type extended_cif (line 86) | typedef struct
type UINT8 (line 95) | typedef unsigned char UINT8;
type SINT8 (line 96) | typedef signed char SINT8;
type UINT16 (line 97) | typedef unsigned short UINT16;
type SINT16 (line 98) | typedef signed short SINT16;
type UINT32 (line 99) | typedef unsigned int UINT32;
type SINT32 (line 100) | typedef signed int SINT32;
type UINT64 (line 102) | typedef unsigned __int64 UINT64;
type SINT64 (line 103) | typedef signed __int64 SINT64;
type UINT64 (line 106) | typedef uint64_t UINT64;
type SINT64 (line 107) | typedef int64_t SINT64;
type UINT8 (line 110) | typedef unsigned int UINT8 __attribute__((__mode__(__QI__)));
type SINT8 (line 111) | typedef signed int SINT8 __attribute__((__mode__(__QI__)));
type UINT16 (line 112) | typedef unsigned int UINT16 __attribute__((__mode__(__HI__)));
type SINT16 (line 113) | typedef signed int SINT16 __attribute__((__mode__(__HI__)));
type UINT32 (line 114) | typedef unsigned int UINT32 __attribute__((__mode__(__SI__)));
type SINT32 (line 115) | typedef signed int SINT32 __attribute__((__mode__(__SI__)));
type UINT64 (line 116) | typedef unsigned int UINT64 __attribute__((__mode__(__DI__)));
type SINT64 (line 117) | typedef signed int SINT64 __attribute__((__mode__(__DI__)));
type FLOAT32 (line 120) | typedef float FLOAT32;
FILE: src/ffi/ffi_i386.h
type ffi_type (line 114) | typedef struct _ffi_type
type ffi_status (line 206) | typedef enum {
type FFI_TYPE (line 212) | typedef unsigned FFI_TYPE;
type ffi_cif (line 214) | typedef struct {
type ffi_raw (line 254) | typedef union {
type ffi_java_raw (line 265) | typedef union {
type ffi_raw (line 273) | typedef ffi_raw ffi_java_raw;
type ffi_closure (line 306) | typedef struct {
type ffi_raw_closure (line 344) | typedef struct {
type ffi_java_raw_closure (line 369) | typedef struct {
FILE: src/ffi/ffi_x86_64.h
type ffi_type (line 114) | typedef struct _ffi_type
type ffi_status (line 206) | typedef enum {
type FFI_TYPE (line 212) | typedef unsigned FFI_TYPE;
type ffi_cif (line 214) | typedef struct {
type ffi_raw (line 254) | typedef union {
type ffi_java_raw (line 265) | typedef union {
type ffi_raw (line 273) | typedef ffi_raw ffi_java_raw;
type ffi_closure (line 306) | typedef struct {
type ffi_raw_closure (line 344) | typedef struct {
type ffi_java_raw_closure (line 369) | typedef struct {
FILE: src/ffi/ffitarget_arm64.h
type ffi_arg (line 32) | typedef unsigned long ffi_arg;
type ffi_sarg (line 33) | typedef signed long ffi_sarg;
type ffi_abi (line 35) | typedef enum ffi_abi
FILE: src/ffi/ffitarget_armv7.h
type ffi_arg (line 40) | typedef unsigned long ffi_arg;
type ffi_sarg (line 41) | typedef signed long ffi_sarg;
type ffi_abi (line 43) | typedef enum ffi_abi {
FILE: src/ffi/ffitarget_i386.h
type ffi_arg (line 59) | typedef unsigned __int64 ffi_arg;
type __int64 (line 60) | typedef __int64 ffi_sarg;
type ffi_arg (line 62) | typedef unsigned long long ffi_arg;
type ffi_sarg (line 63) | typedef long long ffi_sarg;
type ffi_arg (line 69) | typedef unsigned long long ffi_arg;
type ffi_sarg (line 70) | typedef long long ffi_sarg;
type ffi_arg (line 72) | typedef unsigned long ffi_arg;
type ffi_sarg (line 73) | typedef signed long ffi_sarg;
type ffi_abi (line 77) | typedef enum ffi_abi {
FILE: src/ffi/ffitarget_x86_64.h
type ffi_arg (line 59) | typedef unsigned __int64 ffi_arg;
type __int64 (line 60) | typedef __int64 ffi_sarg;
type ffi_arg (line 62) | typedef unsigned long long ffi_arg;
type ffi_sarg (line 63) | typedef long long ffi_sarg;
type ffi_arg (line 69) | typedef unsigned long long ffi_arg;
type ffi_sarg (line 70) | typedef long long ffi_sarg;
type ffi_arg (line 72) | typedef unsigned long ffi_arg;
type ffi_sarg (line 73) | typedef signed long ffi_sarg;
type ffi_abi (line 77) | typedef enum ffi_abi {
FILE: src/jvm/clojure/asm/AnnotationVisitor.java
class AnnotationVisitor (line 40) | public abstract class AnnotationVisitor {
method AnnotationVisitor (line 61) | public AnnotationVisitor(final int api) {
method AnnotationVisitor (line 75) | public AnnotationVisitor(final int api, final AnnotationVisitor av) {
method visit (line 98) | public void visit(String name, Object value) {
method visitEnum (line 114) | public void visitEnum(String name, String desc, String value) {
method visitAnnotation (line 133) | public AnnotationVisitor visitAnnotation(String name, String desc) {
method visitArray (line 154) | public AnnotationVisitor visitArray(String name) {
method visitEnd (line 164) | public void visitEnd() {
FILE: src/jvm/clojure/asm/AnnotationWriter.java
class AnnotationWriter (line 38) | final class AnnotationWriter extends AnnotationVisitor {
method AnnotationWriter (line 105) | AnnotationWriter(final ClassWriter cw, final boolean named,
method visit (line 119) | @Override
method visitEnum (line 192) | @Override
method visitAnnotation (line 202) | @Override
method visitArray (line 214) | @Override
method visitEnd (line 225) | @Override
method getSize (line 243) | int getSize() {
method put (line 260) | void put(final ByteVector out) {
method put (line 292) | static void put(final AnnotationWriter[] panns, final int off,
FILE: src/jvm/clojure/asm/Attribute.java
class Attribute (line 38) | public class Attribute {
method Attribute (line 61) | protected Attribute(final String type) {
method isUnknown (line 71) | public boolean isUnknown() {
method isCodeAttribute (line 80) | public boolean isCodeAttribute() {
method getLabels (line 90) | protected Label[] getLabels() {
method read (line 125) | protected Attribute read(final ClassReader cr, final int off,
method write (line 159) | protected ByteVector write(final ClassWriter cw, final byte[] code,
method getCount (line 172) | final int getCount() {
method getSize (line 207) | final int getSize(final ClassWriter cw, final byte[] code, final int len,
method put (line 245) | final void put(final ClassWriter cw, final byte[] code, final int len,
FILE: src/jvm/clojure/asm/ByteVector.java
class ByteVector (line 38) | public class ByteVector {
method ByteVector (line 54) | public ByteVector() {
method ByteVector (line 65) | public ByteVector(final int initialSize) {
method putByte (line 77) | public ByteVector putByte(final int b) {
method put11 (line 97) | ByteVector put11(final int b1, final int b2) {
method putShort (line 117) | public ByteVector putShort(final int s) {
method put12 (line 139) | ByteVector put12(final int b, final int s) {
method putInt (line 160) | public ByteVector putInt(final int i) {
method putLong (line 182) | public ByteVector putLong(final long l) {
method putUTF8 (line 210) | public ByteVector putUTF8(final String s) {
method putByteArray (line 281) | public ByteVector putByteArray(final byte[] b, final int off, final in...
method enlarge (line 299) | private void enlarge(final int size) {
FILE: src/jvm/clojure/asm/ClassReader.java
class ClassReader (line 44) | public class ClassReader {
method ClassReader (line 152) | public ClassReader(final byte[] b) {
method ClassReader (line 166) | public ClassReader(final byte[] b, final int off, final int len) {
method getAccess (line 228) | public int getAccess() {
method getClassName (line 240) | public String getClassName() {
method getSuperName (line 254) | public String getSuperName() {
method getInterfaces (line 267) | public String[] getInterfaces() {
method copyPool (line 288) | void copyPool(final ClassWriter classWriter) {
method copyBootstrapMethods (line 376) | private void copyBootstrapMethods(final ClassWriter classWriter,
method ClassReader (line 423) | public ClassReader(final InputStream is) throws IOException {
method ClassReader (line 435) | public ClassReader(final String name) throws IOException {
method readClass (line 452) | private static byte[] readClass(final InputStream is, boolean close)
method accept (line 505) | public void accept(final ClassVisitor classVisitor, final int flags) {
method accept (line 530) | public void accept(final ClassVisitor classVisitor,
method readField (line 687) | private int readField(final ClassVisitor classVisitor,
method readMethod (line 781) | private int readMethod(final ClassVisitor classVisitor,
method readCode (line 957) | private void readCode(final MethodVisitor mv, final Context context, i...
method readParameterAnnotations (line 1429) | private void readParameterAnnotations(int v, final String desc,
method readAnnotationValues (line 1475) | private int readAnnotationValues(int v, final char[] buf,
method readAnnotationValue (line 1510) | private int readAnnotationValue(int v, final char[] buf, final String ...
method getImplicitFrame (line 1666) | private void getImplicitFrame(final Context frame) {
method readFrame (line 1740) | private int readFrame(int stackMap, boolean zip, boolean unzip,
method readFrameType (line 1830) | private int readFrameType(final Object[] frame, final int index, int v,
method readLabel (line 1879) | protected Label readLabel(int offset, Label[] labels) {
method getAttributes (line 1891) | private int getAttributes() {
method readAttribute (line 1945) | private Attribute readAttribute(final Attribute[] attrs, final String ...
method getItemCount (line 1965) | public int getItemCount() {
method getItem (line 1979) | public int getItem(final int item) {
method getMaxStringLength (line 1990) | public int getMaxStringLength() {
method readByte (line 2003) | public int readByte(final int index) {
method readUnsignedShort (line 2016) | public int readUnsignedShort(final int index) {
method readShort (line 2030) | public short readShort(final int index) {
method readInt (line 2044) | public int readInt(final int index) {
method readLong (line 2059) | public long readLong(final int index) {
method readUTF8 (line 2078) | public String readUTF8(int index, final char[] buf) {
method readUTF (line 2103) | private String readUTF(int index, final int utfLen, final char[] buf) {
method readClass (line 2153) | public String readClass(final int index, final char[] buf) {
method readConst (line 2174) | public Object readConst(final int item, final char[] buf) {
FILE: src/jvm/clojure/asm/ClassVisitor.java
class ClassVisitor (line 41) | public abstract class ClassVisitor {
method ClassVisitor (line 62) | public ClassVisitor(final int api) {
method ClassVisitor (line 76) | public ClassVisitor(final int api, final ClassVisitor cv) {
method visit (line 109) | public void visit(int version, int access, String name, String signature,
method visitSource (line 127) | public void visitSource(String source, String debug) {
method visitOuterClass (line 148) | public void visitOuterClass(String owner, String name, String desc) {
method visitAnnotation (line 164) | public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
method visitAttribute (line 177) | public void visitAttribute(Attribute attr) {
method visitInnerClass (line 201) | public void visitInnerClass(String name, String outerName,
method visitField (line 235) | public FieldVisitor visitField(int access, String name, String desc,
method visitMethod (line 268) | public MethodVisitor visitMethod(int access, String name, String desc,
method visitEnd (line 281) | public void visitEnd() {
FILE: src/jvm/clojure/asm/ClassWriter.java
class ClassWriter (line 43) | public class ClassWriter extends ClassVisitor {
method ClassWriter (line 601) | public ClassWriter(final int flags) {
method ClassWriter (line 648) | public ClassWriter(final ClassReader classReader, final int flags) {
method visit (line 658) | @Override
method visitSource (line 679) | @Override
method visitOuterClass (line 689) | @Override
method visitAnnotation (line 698) | @Override
method visitAttribute (line 718) | @Override
method visitInnerClass (line 724) | @Override
method visitField (line 737) | @Override
method visitMethod (line 743) | @Override
method visitEnd (line 750) | @Override
method toByteArray (line 763) | public byte[] toByteArray() {
method newConstItem (line 938) | Item newConstItem(final Object cst) {
method newConst (line 996) | public int newConst(final Object cst) {
method newUTF8 (line 1010) | public int newUTF8(final String value) {
method newClassItem (line 1031) | Item newClassItem(final String value) {
method newClass (line 1052) | public int newClass(final String value) {
method newMethodTypeItem (line 1066) | Item newMethodTypeItem(final String methodDesc) {
method newMethodType (line 1088) | public int newMethodType(final String methodDesc) {
method newHandleItem (line 1114) | Item newHandleItem(final int tag, final String owner, final String name,
method newHandle (line 1156) | public int newHandle(final int tag, final String owner, final String n...
method newInvokeDynamicItem (line 1178) | Item newInvokeDynamicItem(final String name, final String desc,
method newInvokeDynamic (line 1263) | public int newInvokeDynamic(final String name, final String desc,
method newFieldItem (line 1280) | Item newFieldItem(final String owner, final String name, final String ...
method newField (line 1305) | public int newField(final String owner, final String name, final Strin...
method newMethodItem (line 1323) | Item newMethodItem(final String owner, final String name,
method newMethod (line 1352) | public int newMethod(final String owner, final String name,
method newInteger (line 1365) | Item newInteger(final int value) {
method newFloat (line 1384) | Item newFloat(final float value) {
method newLong (line 1403) | Item newLong(final long value) {
method newDouble (line 1423) | Item newDouble(final double value) {
method newString (line 1443) | private Item newString(final String value) {
method newNameType (line 1466) | public int newNameType(final String name, final String desc) {
method newNameTypeItem (line 1480) | Item newNameTypeItem(final String name, final String desc) {
method addType (line 1499) | int addType(final String type) {
method addUninitializedType (line 1520) | int addUninitializedType(final String type, final int offset) {
method addType (line 1540) | private Item addType(final Item item) {
method getMergedType (line 1568) | int getMergedType(final int type1, final int type2) {
method getCommonSuperClass (line 1599) | protected String getCommonSuperClass(final String type1, final String ...
method get (line 1633) | private Item get(final Item key) {
method put (line 1648) | private void put(final Item i) {
method put122 (line 1681) | private void put122(final int b, final int s1, final int s2) {
method put112 (line 1695) | private void put112(final int b1, final int b2, final int s) {
method getSc (line 1699) | public SourceWriter getSc() {
FILE: src/jvm/clojure/asm/Context.java
class Context (line 38) | class Context {
FILE: src/jvm/clojure/asm/Edge.java
class Edge (line 37) | class Edge {
FILE: src/jvm/clojure/asm/FieldVisitor.java
class FieldVisitor (line 39) | public abstract class FieldVisitor {
method FieldVisitor (line 60) | public FieldVisitor(final int api) {
method FieldVisitor (line 74) | public FieldVisitor(final int api, final FieldVisitor fv) {
method visitAnnotation (line 92) | public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
method visitAttribute (line 105) | public void visitAttribute(Attribute attr) {
method visitEnd (line 116) | public void visitEnd() {
FILE: src/jvm/clojure/asm/FieldWriter.java
class FieldWriter (line 37) | final class FieldWriter extends FieldVisitor {
method FieldWriter (line 108) | FieldWriter(final ClassWriter cw, final int access, final String name,
method visitAnnotation (line 133) | @Override
method visitAttribute (line 153) | @Override
method visitEnd (line 159) | @Override
method getSize (line 172) | int getSize() {
method put (line 213) | void put(final ByteVector out) {
FILE: src/jvm/clojure/asm/Frame.java
class Frame (line 37) | final class Frame {
method get (line 530) | private int get(final int local) {
method set (line 554) | private void set(final int local, final int type) {
method push (line 575) | private void push(final int type) {
method push (line 605) | private void push(final ClassWriter cw, final String desc) {
method type (line 624) | private static int type(final ClassWriter cw, final String desc) {
method pop (line 694) | private int pop() {
method pop (line 709) | private void pop(final int elements) {
method pop (line 729) | private void pop(final String desc) {
method init (line 747) | private void init(final int var) {
method init (line 773) | private int init(final ClassWriter cw, final int t) {
method initInputFrame (line 812) | void initInputFrame(final ClassWriter cw, final int access,
method execute (line 848) | void execute(final int opcode, final int arg, final ClassWriter cw,
method merge (line 1286) | boolean merge(final ClassWriter cw, final Frame frame, final int edge) {
method merge (line 1395) | private static boolean merge(final ClassWriter cw, int t,
FILE: src/jvm/clojure/asm/Handle.java
class Handle (line 39) | public final class Handle {
method Handle (line 87) | public Handle(int tag, String owner, String name, String desc) {
method getTag (line 104) | public int getTag() {
method getOwner (line 113) | public String getOwner() {
method getName (line 122) | public String getName() {
method getDesc (line 131) | public String getDesc() {
method equals (line 135) | @Override
method hashCode (line 148) | @Override
method toString (line 163) | @Override
FILE: src/jvm/clojure/asm/Handler.java
class Handler (line 37) | class Handler {
method remove (line 83) | static Handler remove(Handler h, Label start, Label end) {
FILE: src/jvm/clojure/asm/Item.java
class Item (line 38) | final class Item {
method Item (line 111) | Item() {
method Item (line 121) | Item(final int index) {
method Item (line 133) | Item(final int index, final Item i) {
method set (line 150) | void set(final int intVal) {
method set (line 162) | void set(final long longVal) {
method set (line 174) | void set(final float floatVal) {
method set (line 186) | void set(final double doubleVal) {
method set (line 204) | void set(final int type, final String strVal1, final String strVal2,
method set (line 243) | void set(String name, String desc, int bsmIndex) {
method set (line 262) | void set(int position, int hashCode) {
method isEqualTo (line 278) | boolean isEqualTo(final Item i) {
FILE: src/jvm/clojure/asm/Label.java
class Label (line 41) | public class Label {
method Label (line 255) | public Label() {
method getOffset (line 272) | public int getOffset() {
method put (line 299) | void put(final MethodWriter owner, final ByteVector out, final int sou...
method addReference (line 331) | private void addReference(final int sourcePosition,
method resolve (line 369) | boolean resolve(final MethodWriter owner, final int position,
method getFirst (line 422) | Label getFirst() {
method inSubroutine (line 437) | boolean inSubroutine(final long id) {
method inSameSubroutine (line 453) | boolean inSameSubroutine(final Label block) {
method addToSubroutine (line 473) | void addToSubroutine(final long id, final int nbSubroutines) {
method visitSubroutine (line 496) | void visitSubroutine(final Label JSR, final long id, final int nbSubro...
method toString (line 556) | @Override
FILE: src/jvm/clojure/asm/MethodVisitor.java
class MethodVisitor (line 49) | public abstract class MethodVisitor {
method MethodVisitor (line 70) | public MethodVisitor(final int api) {
method MethodVisitor (line 84) | public MethodVisitor(final int api, final MethodVisitor mv) {
method visitAnnotationDefault (line 106) | public AnnotationVisitor visitAnnotationDefault() {
method visitAnnotation (line 123) | public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
method visitParameterAnnotation (line 142) | public AnnotationVisitor visitParameterAnnotation(int parameter,
method visitAttribute (line 156) | public void visitAttribute(Attribute attr) {
method visitCode (line 165) | public void visitCode() {
method visitFrame (line 244) | public void visitFrame(int type, int nLocal, Object[] local, int nStack,
method visitInsn (line 275) | public void visitInsn(int opcode) {
method visitIntInsn (line 299) | public void visitIntInsn(int opcode, int operand) {
method visitVarInsn (line 317) | public void visitVarInsn(int opcode, int var) {
method visitTypeInsn (line 335) | public void visitTypeInsn(int opcode, String type) {
method visitFieldInsn (line 356) | public void visitFieldInsn(int opcode, String owner, String name,
method visitMethodInsn (line 379) | public void visitMethodInsn(int opcode, String owner, String name,
method visitInvokeDynamicInsn (line 402) | public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
method visitJumpInsn (line 423) | public void visitJumpInsn(int opcode, Label label) {
method visitLabel (line 436) | public void visitLabel(Label label) {
method visitLdcInsn (line 490) | public void visitLdcInsn(Object cst) {
method visitIincInsn (line 504) | public void visitIincInsn(int var, int increment) {
method visitTableSwitchInsn (line 523) | public void visitTableSwitchInsn(int min, int max, Label dflt,
method visitLookupSwitchInsn (line 541) | public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labe...
method visitMultiANewArrayInsn (line 555) | public void visitMultiANewArrayInsn(String desc, int dims) {
method visitTryCatchBlock (line 582) | public void visitTryCatchBlock(Label start, Label end, Label handler,
method visitLocalVariable (line 612) | public void visitLocalVariable(String name, String desc, String signat...
method visitLineNumber (line 631) | public void visitLineNumber(int line, Label start) {
method visitMaxs (line 646) | public void visitMaxs(int maxStack, int maxLocals) {
method visitEnd (line 657) | public void visitEnd() {
FILE: src/jvm/clojure/asm/MethodWriter.java
class MethodWriter (line 40) | class MethodWriter extends MethodVisitor {
method MethodWriter (line 415) | MethodWriter(final ClassWriter cw, final int access, final String name,
method visitAnnotationDefault (line 464) | @Override
method visitAnnotation (line 473) | @Override
method visitParameterAnnotation (line 493) | @Override
method visitAttribute (line 525) | @Override
method visitCode (line 536) | @Override
method visitFrame (line 540) | @Override
method visitInsn (line 643) | @Override
method visitIntInsn (line 668) | @Override
method visitVarInsn (line 692) | @Override
method visitTypeInsn (line 750) | @Override
method visitFieldInsn (line 771) | @Override
method visitMethodInsn (line 809) | @Override
method visitInvokeDynamicInsn (line 861) | @Override
method visitJumpInsn (line 901) | @Override
method visitLabel (line 991) | @Override
method visitLdcInsn (line 1046) | @Override
method visitIincInsn (line 1079) | @Override
method visitTableSwitchInsn (line 1102) | @Override
method visitLookupSwitchInsn (line 1118) | @Override
method visitSwitchInsn (line 1135) | private void visitSwitchInsn(final Label dflt, final Label[] labels) {
method visitMultiANewArrayInsn (line 1161) | @Override
method visitTryCatchBlock (line 1178) | @Override
method visitLocalVariable (line 1196) | @Override
method visitLineNumber (line 1228) | @Override
method visitMaxs (line 1238) | @Override
method visitEnd (line 1478) | @Override
method addSuccessor (line 1494) | private void addSuccessor(final int info, final Label successor) {
method noSuccessor (line 1508) | private void noSuccessor() {
method visitFrame (line 1532) | private void visitFrame(final Frame f) {
method visitImplicitFirstFrame (line 1584) | private void visitImplicitFirstFrame() {
method startFrame (line 1653) | private int startFrame(final int offset, final int nLocal, final int n...
method endFrame (line 1668) | private void endFrame() {
method writeFrame (line 1684) | private void writeFrame() {
method writeFrameTypes (line 1779) | private void writeFrameTypes(final int start, final int end) {
method writeFrameType (line 1838) | private void writeFrameType(final Object type) {
method getSize (line 1857) | final int getSize() {
method put (line 1957) | final void put(final ByteVector out) {
method resizeInstructions (line 2145) | private void resizeInstructions() {
method readUnsignedShort (line 2570) | static int readUnsignedShort(final byte[] b, final int index) {
method readShort (line 2583) | static short readShort(final byte[] b, final int index) {
method readInt (line 2596) | static int readInt(final byte[] b, final int index) {
method writeShort (line 2611) | static void writeShort(final byte[] b, final int index, final int s) {
method getNewOffset (line 2643) | static int getNewOffset(final int[] indexes, final int[] sizes,
method getNewOffset (line 2678) | static void getNewOffset(final int[] indexes, final int[] sizes,
FILE: src/jvm/clojure/asm/Opcodes.java
type Opcodes (line 44) | public interface Opcodes {
FILE: src/jvm/clojure/asm/Type.java
class Type (line 42) | public class Type {
method Type (line 202) | private Type(final int sort, final char[] buf, final int off, final in...
method getType (line 216) | public static Type getType(final String typeDescriptor) {
method getObjectType (line 227) | public static Type getObjectType(final String internalName) {
method getMethodType (line 240) | public static Type getMethodType(final String methodDescriptor) {
method getMethodType (line 255) | public static Type getMethodType(final Type returnType,
method getType (line 267) | public static Type getType(final Class<?> c) {
method getType (line 300) | public static Type getType(final Constructor<?> c) {
method getType (line 311) | public static Type getType(final Method m) {
method getArgumentTypes (line 324) | public static Type[] getArgumentTypes(final String methodDescriptor) {
method getArgumentTypes (line 360) | public static Type[] getArgumentTypes(final Method method) {
method getReturnType (line 378) | public static Type getReturnType(final String methodDescriptor) {
method getReturnType (line 392) | public static Type getReturnType(final Method method) {
method getArgumentsAndReturnSizes (line 407) | public static int getArgumentsAndReturnSizes(final String desc) {
method getType (line 446) | private static Type getType(final char[] buf, final int off) {
method getSort (line 504) | public int getSort() {
method getDimensions (line 514) | public int getDimensions() {
method getElementType (line 528) | public Type getElementType() {
method getClassName (line 538) | public String getClassName() {
method getInternalName (line 579) | public String getInternalName() {
method getArgumentTypes (line 589) | public Type[] getArgumentTypes() {
method getReturnType (line 599) | public Type getReturnType() {
method getArgumentsAndReturnSizes (line 613) | public int getArgumentsAndReturnSizes() {
method getDescriptor (line 626) | public String getDescriptor() {
method getMethodDescriptor (line 643) | public static String getMethodDescriptor(final Type returnType,
method getDescriptor (line 662) | private void getDescriptor(final StringBuffer buf) {
method getInternalName (line 690) | public static String getInternalName(final Class<?> c) {
method getDescriptor (line 701) | public static String getDescriptor(final Class<?> c) {
method getConstructorDescriptor (line 714) | public static String getConstructorDescriptor(final Constructor<?> c) {
method getMethodDescriptor (line 731) | public static String getMethodDescriptor(final Method m) {
method getDescriptor (line 751) | private static void getDescriptor(final StringBuffer buf, final Class<...
method getSize (line 805) | public int getSize() {
method getOpcode (line 822) | public int getOpcode(final int opcode) {
method equals (line 845) | @Override
method hashCode (line 875) | @Override
method toString (line 891) | @Override
FILE: src/jvm/clojure/asm/commons/AdviceAdapter.java
class AdviceAdapter (line 63) | public abstract class AdviceAdapter extends GeneratorAdapter implements ...
method AdviceAdapter (line 96) | protected AdviceAdapter(final int api, final MethodVisitor mv,
method visitCode (line 104) | @Override
method visitLabel (line 116) | @Override
method visitInsn (line 128) | @Override
method visitVarInsn (line 310) | @Override
method visitFieldInsn (line 341) | @Override
method visitIntInsn (line 377) | @Override
method visitLdcInsn (line 385) | @Override
method visitMultiANewArrayInsn (line 396) | @Override
method visitTypeInsn (line 407) | @Override
method visitMethodInsn (line 416) | @Override
method visitInvokeDynamicInsn (line 457) | @Override
method visitJumpInsn (line 480) | @Override
method visitLookupSwitchInsn (line 514) | @Override
method visitTableSwitchInsn (line 524) | @Override
method visitTryCatchBlock (line 534) | @Override
method addBranches (line 545) | private void addBranches(final Label dflt, final Label[] labels) {
method addBranch (line 552) | private void addBranch(final Label label) {
method popValue (line 559) | private Object popValue() {
method peekValue (line 563) | private Object peekValue() {
method pushValue (line 567) | private void pushValue(final Object o) {
method onMethodEnter (line 579) | protected void onMethodEnter() {
method onMethodExit (line 621) | protected void onMethodExit(int opcode) {
FILE: src/jvm/clojure/asm/commons/AnalyzerAdapter.java
class AnalyzerAdapter (line 62) | public class AnalyzerAdapter extends MethodVisitor {
method AnalyzerAdapter (line 140) | public AnalyzerAdapter(final String owner, final int access,
method AnalyzerAdapter (line 163) | protected AnalyzerAdapter(final int api, final String owner,
method visitFrame (line 211) | @Override
method visitFrameTypes (line 235) | private static void visitFrameTypes(final int n, final Object[] types,
method visitInsn (line 246) | @Override
method visitIntInsn (line 259) | @Override
method visitVarInsn (line 267) | @Override
method visitTypeInsn (line 275) | @Override
method visitFieldInsn (line 296) | @Override
method visitMethodInsn (line 305) | @Override
method visitInvokeDynamicInsn (line 341) | @Override
method visitJumpInsn (line 356) | @Override
method visitLabel (line 368) | @Override
method visitLdcInsn (line 379) | @Override
method visitIincInsn (line 417) | @Override
method visitTableSwitchInsn (line 425) | @Override
method visitLookupSwitchInsn (line 436) | @Override
method visitMultiANewArrayInsn (line 447) | @Override
method visitMaxs (line 455) | @Override
method get (line 466) | private Object get(final int local) {
method set (line 471) | private void set(final int local, final Object type) {
method push (line 479) | private void push(final Object type) {
method pushDesc (line 484) | private void pushDesc(final String desc) {
method pop (line 524) | private Object pop() {
method pop (line 528) | private void pop(final int n) {
method pop (line 536) | private void pop(final String desc) {
method execute (line 552) | private void execute(final int opcode, final int iarg, final String sa...
FILE: src/jvm/clojure/asm/commons/CodeSizeEvaluator.java
class CodeSizeEvaluator (line 42) | public class CodeSizeEvaluator extends MethodVisitor implements Opcodes {
method CodeSizeEvaluator (line 48) | public CodeSizeEvaluator(final MethodVisitor mv) {
method CodeSizeEvaluator (line 52) | protected CodeSizeEvaluator(final int api, final MethodVisitor mv) {
method getMinSize (line 56) | public int getMinSize() {
method getMaxSize (line 60) | public int getMaxSize() {
method visitInsn (line 64) | @Override
method visitIntInsn (line 73) | @Override
method visitVarInsn (line 87) | @Override
method visitTypeInsn (line 104) | @Override
method visitFieldInsn (line 113) | @Override
method visitMethodInsn (line 123) | @Override
method visitInvokeDynamicInsn (line 138) | @Override
method visitJumpInsn (line 148) | @Override
method visitLdcInsn (line 161) | @Override
method visitIincInsn (line 175) | @Override
method visitTableSwitchInsn (line 189) | @Override
method visitLookupSwitchInsn (line 199) | @Override
method visitMultiANewArrayInsn (line 209) | @Override
FILE: src/jvm/clojure/asm/commons/GeneratorAdapter.java
class GeneratorAdapter (line 85) | public class GeneratorAdapter extends LocalVariablesSorter {
method GeneratorAdapter (line 259) | public GeneratorAdapter(final MethodVisitor mv, final int access,
method GeneratorAdapter (line 279) | protected GeneratorAdapter(final int api, final MethodVisitor mv,
method GeneratorAdapter (line 300) | public GeneratorAdapter(final int access, final Method method,
method GeneratorAdapter (line 323) | public GeneratorAdapter(final int access, final Method method,
method getInternalNames (line 338) | private static String[] getInternalNames(final Type[] types) {
method push (line 359) | public void push(final boolean value) {
method push (line 369) | public void push(final int value) {
method push (line 387) | public void push(final long value) {
method push (line 401) | public void push(final float value) {
method push (line 416) | public void push(final double value) {
method push (line 431) | public void push(final String value) {
method push (line 445) | public void push(final Type value) {
method push (line 494) | public void push(final Handle handle) {
method getArgIndex (line 511) | private int getArgIndex(final int arg) {
method loadInsn (line 527) | private void loadInsn(final Type type, final int index) {
method storeInsn (line 540) | private void storeInsn(final Type type, final int index) {
method loadThis (line 547) | public void loadThis() {
method loadArg (line 561) | public void loadArg(final int arg) {
method loadArgs (line 574) | public void loadArgs(final int arg, final int count) {
method loadArgs (line 586) | public void loadArgs() {
method loadArgArray (line 594) | public void loadArgArray() {
method storeArg (line 613) | public void storeArg(final int arg) {
method getLocalType (line 629) | public Type getLocalType(final int local) {
method setLocalType (line 633) | @Override
method loadLocal (line 649) | public void loadLocal(final int local) {
method loadLocal (line 662) | public void loadLocal(final int local, final Type type) {
method storeLocal (line 675) | public void storeLocal(final int local) {
method storeLocal (line 689) | public void storeLocal(final int local, final Type type) {
method arrayLoad (line 700) | public void arrayLoad(final Type type) {
method arrayStore (line 710) | public void arrayStore(final Type type) {
method pop (line 721) | public void pop() {
method pop2 (line 728) | public void pop2() {
method dup (line 735) | public void dup() {
method dup2 (line 742) | public void dup2() {
method dupX1 (line 749) | public void dupX1() {
method dupX2 (line 756) | public void dupX2() {
method dup2X1 (line 763) | public void dup2X1() {
method dup2X2 (line 770) | public void dup2X2() {
method swap (line 777) | public void swap() {
method swap (line 789) | public void swap(final Type prev, final Type type) {
method math (line 822) | public void math(final int op, final Type type) {
method not (line 830) | public void not() {
method iinc (line 843) | public void iinc(final int local, final int amount) {
method cast (line 856) | public void cast(final Type from, final Type to) {
method getBoxedType (line 907) | private static Type getBoxedType(final Type type) {
method box (line 936) | public String box(final Type type, String val) {
method valueOf (line 970) | public void valueOf(final Type type) {
method unbox (line 990) | public void unbox(final Type type) {
method unbox (line 1026) | public String unbox(final Type type, String value) {
method newLabel (line 1071) | public Label newLabel() {
method mark (line 1081) | public void mark(final Label label) {
method mark (line 1090) | public Label mark() {
method ifCmp (line 1108) | public void ifCmp(final Type type, final int mode, final Label label) {
method ifICmp (line 1171) | public void ifICmp(final int mode, final Label label) {
method ifZCmp (line 1185) | public void ifZCmp(final int mode, final Label label) {
method ifNull (line 1196) | public void ifNull(final Label label) {
method ifNonNull (line 1207) | public void ifNonNull(final Label label) {
method goTo (line 1217) | public void goTo(final Label label) {
method ret (line 1228) | public void ret(final int local) {
method tableSwitch (line 1240) | public void tableSwitch(final int[] keys,
method tableSwitch (line 1263) | public void tableSwitch(final int[] keys,
method returnValue (line 1312) | public void returnValue() {
method fieldInsn (line 1332) | private void fieldInsn(final int opcode, final Type ownerType,
method getStatic (line 1349) | public void getStatic(final Type owner, final String name, final Type ...
method putStatic (line 1363) | public void putStatic(final Type owner, final String name, final Type ...
method getField (line 1378) | public void getField(final Type owner, final String name, final Type t...
method putField (line 1393) | public void putField(final Type owner, final String name, final Type t...
method invokeInsn (line 1411) | private void invokeInsn(final int opcode, final Type type,
method invokeVirtual (line 1427) | public void invokeVirtual(final Type owner, final Method method) {
method invokeConstructor (line 1439) | public void invokeConstructor(final Type type, final Method method) {
method invokeStatic (line 1451) | public void invokeStatic(final Type owner, final Method method) {
method invokeInterface (line 1463) | public void invokeInterface(final Type owner, final Method method) {
method invokeDynamic (line 1483) | public void invokeDynamic(String name, String desc, Handle bsm,
method typeInsn (line 1500) | private void typeInsn(final int opcode, final Type type) {
method newInstance (line 1510) | public void newInstance(final Type type) {
method newArray (line 1520) | public void newArray(final Type type) {
method arrayLength (line 1561) | public void arrayLength() {
method throwException (line 1568) | public void throwException() {
method throwException (line 1581) | public void throwException(final Type type, final String msg) {
method checkCast (line 1596) | public void checkCast(final Type type) {
method instanceOf (line 1609) | public void instanceOf(final Type type) {
method monitorEnter (line 1616) | public void monitorEnter() {
method monitorExit (line 1623) | public void monitorExit() {
method endMethod (line 1634) | public void endMethod() {
method catchException (line 1652) | public void catchException(final Label start, final Label end,
FILE: src/jvm/clojure/asm/commons/InstructionAdapter.java
class InstructionAdapter (line 45) | public class InstructionAdapter extends MethodVisitor {
method InstructionAdapter (line 57) | public InstructionAdapter(final MethodVisitor mv) {
method InstructionAdapter (line 70) | protected InstructionAdapter(final int api, final MethodVisitor mv) {
method visitInsn (line 74) | @Override
method visitIntInsn (line 383) | @Override
method visitVarInsn (line 427) | @Override
method visitTypeInsn (line 468) | @Override
method visitFieldInsn (line 489) | @Override
method visitMethodInsn (line 510) | @Override
method visitInvokeDynamicInsn (line 531) | @Override
method visitJumpInsn (line 537) | @Override
method visitLabel (line 599) | @Override
method visitLdcInsn (line 604) | @Override
method visitIincInsn (line 641) | @Override
method visitTableSwitchInsn (line 646) | @Override
method visitLookupSwitchInsn (line 652) | @Override
method visitMultiANewArrayInsn (line 658) | @Override
method nop (line 665) | public void nop() {
method aconst (line 669) | public void aconst(final Object cst) {
method iconst (line 677) | public void iconst(final int cst) {
method lconst (line 689) | public void lconst(final long cst) {
method fconst (line 697) | public void fconst(final float cst) {
method dconst (line 706) | public void dconst(final double cst) {
method tconst (line 715) | public void tconst(final Type type) {
method hconst (line 719) | public void hconst(final Handle handle) {
method load (line 723) | public void load(final int var, final Type type) {
method aload (line 727) | public void aload(final Type type) {
method store (line 731) | public void store(final int var, final Type type) {
method astore (line 735) | public void astore(final Type type) {
method pop (line 739) | public void pop() {
method pop2 (line 743) | public void pop2() {
method dup (line 747) | public void dup() {
method dup2 (line 751) | public void dup2() {
method dupX1 (line 755) | public void dupX1() {
method dupX2 (line 759) | public void dupX2() {
method dup2X1 (line 763) | public void dup2X1() {
method dup2X2 (line 767) | public void dup2X2() {
method swap (line 771) | public void swap() {
method add (line 775) | public void add(final Type type) {
method sub (line 779) | public void sub(final Type type) {
method mul (line 783) | public void mul(final Type type) {
method div (line 787) | public void div(final Type type) {
method rem (line 791) | public void rem(final Type type) {
method neg (line 795) | public void neg(final Type type) {
method shl (line 799) | public void shl(final Type type) {
method shr (line 803) | public void shr(final Type type) {
method ushr (line 807) | public void ushr(final Type type) {
method and (line 811) | public void and(final Type type) {
method or (line 815) | public void or(final Type type) {
method xor (line 819) | public void xor(final Type type) {
method iinc (line 823) | public void iinc(final int var, final int increment) {
method cast (line 827) | public void cast(final Type from, final Type to) {
method lcmp (line 874) | public void lcmp() {
method cmpl (line 878) | public void cmpl(final Type type) {
method cmpg (line 882) | public void cmpg(final Type type) {
method ifeq (line 886) | public void ifeq(final Label label) {
method ifne (line 890) | public void ifne(final Label label) {
method iflt (line 894) | public void iflt(final Label label) {
method ifge (line 898) | public void ifge(final Label label) {
method ifgt (line 902) | public void ifgt(final Label label) {
method ifle (line 906) | public void ifle(final Label label) {
method ificmpeq (line 910) | public void ificmpeq(final Label label) {
method ificmpne (line 914) | public void ificmpne(final Label label) {
method ificmplt (line 918) | public void ificmplt(final Label label) {
method ificmpge (line 922) | public void ificmpge(final Label label) {
method ificmpgt (line 926) | public void ificmpgt(final Label label) {
method ificmple (line 930) | public void ificmple(final Label label) {
method ifacmpeq (line 934) | public void ifacmpeq(final Label label) {
method ifacmpne (line 938) | public void ifacmpne(final Label label) {
method goTo (line 942) | public void goTo(final Label label) {
method jsr (line 946) | public void jsr(final Label label) {
method ret (line 950) | public void ret(final int var) {
method tableswitch (line 954) | public void tableswitch(final int min, final int max, final Label dflt,
method lookupswitch (line 959) | public void lookupswitch(final Label dflt, final int[] keys,
method areturn (line 964) | public void areturn(final Type t) {
method getstatic (line 968) | public void getstatic(final String owner, final String name,
method putstatic (line 973) | public void putstatic(final String owner, final String name,
method getfield (line 978) | public void getfield(final String owner, final String name,
method putfield (line 983) | public void putfield(final String owner, final String name,
method invokevirtual (line 988) | public void invokevirtual(final String owner, final String name,
method invokespecial (line 993) | public void invokespecial(final String owner, final String name,
method invokestatic (line 998) | public void invokestatic(final String owner, final String name,
method invokeinterface (line 1003) | public void invokeinterface(final String owner, final String name,
method invokedynamic (line 1008) | public void invokedynamic(String name, String desc, Handle bsm,
method anew (line 1013) | public void anew(final Type type) {
method newarray (line 1017) | public void newarray(final Type type) {
method arraylength (line 1051) | public void arraylength() {
method athrow (line 1055) | public void athrow() {
method checkcast (line 1059) | public void checkcast(final Type type) {
method instanceOf (line 1063) | public void instanceOf(final Type type) {
method monitorenter (line 1067) | public void monitorenter() {
method monitorexit (line 1071) | public void monitorexit() {
method multianewarray (line 1075) | public void multianewarray(final String desc, final int dims) {
method ifnull (line 1079) | public void ifnull(final Label label) {
method ifnonnull (line 1083) | public void ifnonnull(final Label label) {
method mark (line 1087) | public void mark(final Label label) {
FILE: src/jvm/clojure/asm/commons/LocalVariablesSorter.java
class LocalVariablesSorter (line 49) | public class LocalVariablesSorter extends MethodVisitor {
method LocalVariablesSorter (line 93) | public LocalVariablesSorter(final int access, final String desc,
method LocalVariablesSorter (line 111) | protected LocalVariablesSorter(final int api, final int access,
method visitVarInsn (line 122) | @Override
method visitIincInsn (line 156) | @Override
method visitMaxs (line 161) | @Override
method visitLocalVariable (line 166) | @Override
method visitFrame (line 174) | @Override
method newLocal (line 252) | public int newLocal(final Type type) {
method updateNewLocals (line 304) | protected void updateNewLocals(Object[] newLocals) {
method setLocalType (line 317) | protected void setLocalType(final int local, final Type type) {
method setFrameLocal (line 320) | private void setFrameLocal(final int local, final Object type) {
method remap (line 330) | private int remap(final int var, final Type type) {
method newLocalMapping (line 355) | protected int newLocalMapping(final Type type) {
FILE: src/jvm/clojure/asm/commons/Method.java
class Method (line 44) | public class Method {
method Method (line 82) | public Method(final String name, final String desc) {
method Method (line 97) | public Method(final String name, final Type returnType,
method getMethod (line 110) | public static Method getMethod(java.lang.reflect.Method m) {
method getMethod (line 122) | public static Method getMethod(java.lang.reflect.Constructor<?> c) {
method getMethod (line 142) | public static Method getMethod(final String method)
method getMethod (line 169) | public static Method getMethod(final String method,
method map (line 198) | private static String map(final String type, final boolean defaultPack...
method getName (line 233) | public String getName() {
method getDescriptor (line 242) | public String getDescriptor() {
method getReturnType (line 251) | public Type getReturnType() {
method getArgumentTypes (line 260) | public Type[] getArgumentTypes() {
method toString (line 264) | @Override
method equals (line 269) | @Override
method hashCode (line 278) | @Override
FILE: src/jvm/clojure/asm/commons/SerialVersionUIDAdder.java
class SerialVersionUIDAdder (line 114) | public class SerialVersionUIDAdder extends ClassVisitor {
method SerialVersionUIDAdder (line 171) | public SerialVersionUIDAdder(final ClassVisitor cv) {
method SerialVersionUIDAdder (line 185) | protected SerialVersionUIDAdder(final int api, final ClassVisitor cv) {
method visit (line 200) | @Override
method visitMethod (line 219) | @Override
method visitField (line 256) | @Override
method visitInnerClass (line 291) | @Override
method visitEnd (line 303) | @Override
method hasSVUID (line 328) | public boolean hasSVUID() {
method addSVUID (line 332) | protected void addSVUID(long svuid) {
method computeSVUID (line 348) | protected long computeSVUID() throws IOException {
method computeSHAdigest (line 462) | protected byte[] computeSHAdigest(final byte[] value) {
method writeItems (line 485) | private static void writeItems(final Collection<Item> itemCollection,
class Item (line 502) | private static class Item implements Comparable<Item> {
method Item (line 510) | Item(final String name, final int access, final String desc) {
method compareTo (line 516) | public int compareTo(final Item other) {
method equals (line 524) | @Override
method hashCode (line 532) | @Override
FILE: src/jvm/clojure/asm/commons/StaticInitMerger.java
class StaticInitMerger (line 41) | public class StaticInitMerger extends ClassVisitor {
method StaticInitMerger (line 51) | public StaticInitMerger(final String prefix, final ClassVisitor cv) {
method StaticInitMerger (line 55) | protected StaticInitMerger(final int api, final String prefix,
method visit (line 61) | @Override
method visitMethod (line 69) | @Override
method visitEnd (line 88) | @Override
FILE: src/jvm/clojure/asm/commons/TableSwitchGenerator.java
type TableSwitchGenerator (line 41) | public interface TableSwitchGenerator {
method generateCase (line 51) | void generateCase(int key, Label end);
method generateDefault (line 56) | void generateDefault();
FILE: src/jvm/clojure/java/api/Clojure.java
class Clojure (line 50) | public class Clojure {
method Clojure (line 51) | private Clojure() {}
method asSym (line 53) | private static Symbol asSym(Object o) {
method var (line 69) | public static IFn var(Object qualifiedName) {
method var (line 81) | public static IFn var(Object ns, Object name) {
method read (line 91) | public static Object read(String s) {
FILE: src/jvm/clojure/lang/AFn.java
class AFn (line 15) | public abstract class AFn implements IFn {
method call (line 17) | public Object call() {
method run (line 21) | public void run(){
method invoke (line 27) | public Object invoke() {
method invoke (line 31) | public Object invoke(Object arg1) {
method invoke (line 35) | public Object invoke(Object arg1, Object arg2) {
method invoke (line 39) | public Object invoke(Object arg1, Object arg2, Object arg3) {
method invoke (line 43) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 47) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 51) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 55) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 60) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 65) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 70) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 75) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 80) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 85) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 91) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 97) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 103) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 109) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 115) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 121) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 127) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 135) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method applyTo (line 143) | public Object applyTo(ISeq arglist) {
method applyToHelper (line 147) | static public Object applyToHelper(IFn ifn, ISeq arglist) {
method throwArity (line 427) | public Object throwArity(int n){
FILE: src/jvm/clojure/lang/AFunction.java
class AFunction (line 18) | public abstract class AFunction extends AFn implements IObj, Comparator,...
method meta (line 22) | public IPersistentMap meta(){
method withMeta (line 26) | public IObj withMeta(final IPersistentMap meta){
method compare (line 30) | public int compare(Object o1, Object o2){
method equals (line 44) | @Override
FILE: src/jvm/clojure/lang/AMapEntry.java
class AMapEntry (line 17) | public abstract class AMapEntry extends APersistentVector implements IMa...
method nth (line 19) | public Object nth(int i){
method asVector (line 28) | private IPersistentVector asVector(){
method assocN (line 32) | public IPersistentVector assocN(int i, Object val){
method count (line 36) | public int count(){
method seq (line 40) | public ISeq seq(){
method cons (line 44) | public IPersistentVector cons(Object o){
method empty (line 48) | public IPersistentCollection empty(){
method pop (line 52) | public IPersistentStack pop(){
method setValue (line 56) | public Object setValue(Object value){
FILE: src/jvm/clojure/lang/APersistentMap.java
class APersistentMap (line 16) | public abstract class APersistentMap extends AFn implements IPersistentM...
method toString (line 20) | public String toString(){
method cons (line 24) | public IPersistentCollection cons(Object o){
method equals (line 48) | public boolean equals(Object obj){
method mapEquals (line 52) | static public boolean mapEquals(IPersistentMap m1, Object obj){
method equiv (line 73) | public boolean equiv(Object obj){
method hashCode (line 95) | public int hashCode(){
method mapHash (line 103) | static public int mapHash(IPersistentMap m){
method hasheq (line 114) | public int hasheq(){
method mapHasheq (line 123) | static public int mapHasheq(IPersistentMap m) {
class KeySeq (line 135) | static public class KeySeq extends ASeq{
method create (line 139) | static public KeySeq create(ISeq seq){
method createFromMap (line 145) | static public KeySeq createFromMap(IPersistentMap map){
method KeySeq (line 154) | private KeySeq(ISeq seq, Iterable iterable){
method KeySeq (line 159) | private KeySeq(IPersistentMap meta, ISeq seq, Iterable iterable){
method first (line 165) | public Object first(){
method next (line 169) | public ISeq next(){
method withMeta (line 173) | public KeySeq withMeta(IPersistentMap meta){
method iterator (line 177) | public Iterator iterator(){
class ValSeq (line 201) | static public class ValSeq extends ASeq{
method create (line 205) | static public ValSeq create(ISeq seq){
method createFromMap (line 211) | static public ValSeq createFromMap(IPersistentMap map) {
method ValSeq (line 220) | private ValSeq(ISeq seq, Iterable iterable){
method ValSeq (line 225) | private ValSeq(IPersistentMap meta, ISeq seq, Iterable iterable){
method first (line 231) | public Object first(){
method next (line 235) | public ISeq next(){
method withMeta (line 239) | public ValSeq withMeta(IPersistentMap meta){
method iterator (line 243) | public Iterator iterator(){
method invoke (line 268) | public Object invoke(Object key, Object val) {
method invoke (line 274) | public Object invoke(Object key, Object val) {
method invoke (line 280) | public Object invoke(Object key, Object val) {
method invoke (line 285) | public Object invoke(Object arg1) {
method invoke (line 289) | public Object invoke(Object arg1, Object notFound) {
method clear (line 295) | public void clear(){
method containsValue (line 299) | public boolean containsValue(Object value){
method entrySet (line 303) | public Set entrySet(){
method get (line 331) | public Object get(Object key){
method isEmpty (line 335) | public boolean isEmpty(){
method keySet (line 339) | public Set keySet(){
method put (line 373) | public Object put(Object key, Object value){
method putAll (line 377) | public void putAll(Map t){
method remove (line 381) | public Object remove(Object key){
method size (line 385) | public int size(){
method values (line 389) | public Collection values(){
FILE: src/jvm/clojure/lang/APersistentSet.java
class APersistentSet (line 20) | public abstract class APersistentSet extends AFn implements IPersistentS...
method APersistentSet (line 25) | protected APersistentSet(IPersistentMap impl){
method toString (line 29) | public String toString(){
method contains (line 33) | public boolean contains(Object key){
method get (line 37) | public Object get(Object key){
method count (line 41) | public int count(){
method seq (line 45) | public ISeq seq(){
method invoke (line 49) | public Object invoke(Object arg1) {
method equals (line 53) | public boolean equals(Object obj){
method setEquals (line 57) | static public boolean setEquals(IPersistentSet s1, Object obj) {
method equiv (line 75) | public boolean equiv(Object obj){
method hashCode (line 93) | public int hashCode(){
method hasheq (line 109) | public int hasheq(){
method toArray (line 123) | public Object[] toArray(){
method add (line 127) | public boolean add(Object o){
method remove (line 131) | public boolean remove(Object o){
method addAll (line 135) | public boolean addAll(Collection c){
method clear (line 139) | public void clear(){
method retainAll (line 143) | public boolean retainAll(Collection c){
method removeAll (line 147) | public boolean removeAll(Collection c){
method containsAll (line 151) | public boolean containsAll(Collection c){
method toArray (line 160) | public Object[] toArray(Object[] a){
method size (line 164) | public int size(){
method isEmpty (line 168) | public boolean isEmpty(){
method iterator (line 172) | public Iterator iterator(){
FILE: src/jvm/clojure/lang/APersistentVector.java
class APersistentVector (line 18) | public abstract class APersistentVector extends AFn implements IPersiste...
method toString (line 25) | public String toString(){
method seq (line 29) | public ISeq seq(){
method rseq (line 35) | public ISeq rseq(){
method doEquals (line 41) | static boolean doEquals(IPersistentVector v, Object obj){
method doEquiv (line 85) | static boolean doEquiv(IPersistentVector v, Object obj){
method equals (line 128) | public boolean equals(Object obj){
method equiv (line 132) | public boolean equiv(Object obj){
method hashCode (line 136) | public int hashCode(){
method hasheq (line 156) | public int hasheq(){
method get (line 171) | public Object get(int index){
method nth (line 175) | public Object nth(int i, Object notFound){
method remove (line 181) | public Object remove(int i){
method indexOf (line 185) | public int indexOf(Object o){
method lastIndexOf (line 192) | public int lastIndexOf(Object o){
method listIterator (line 199) | public ListIterator listIterator(){
method listIterator (line 203) | public ListIterator listIterator(final int index){
method rangedIterator (line 245) | Iterator rangedIterator(final int start, final int end){
method subList (line 263) | public List subList(int fromIndex, int toIndex){
method set (line 268) | public Object set(int i, Object o){
method add (line 272) | public void add(int i, Object o){
method addAll (line 276) | public boolean addAll(int i, Collection c){
method invoke (line 281) | public Object invoke(Object arg1) {
method iterator (line 287) | public Iterator iterator(){
method peek (line 306) | public Object peek(){
method containsKey (line 312) | public boolean containsKey(Object key){
method entryAt (line 319) | public IMapEntry entryAt(Object key){
method assoc (line 329) | public IPersistentVector assoc(Object key, Object val){
method valAt (line 338) | public Object valAt(Object key, Object notFound){
method valAt (line 348) | public Object valAt(Object key){
method toArray (line 354) | public Object[] toArray(){
method add (line 358) | public boolean add(Object o){
method remove (line 362) | public boolean remove(Object o){
method addAll (line 366) | public boolean addAll(Collection c){
method clear (line 370) | public void clear(){
method retainAll (line 374) | public boolean retainAll(Collection c){
method removeAll (line 378) | public boolean removeAll(Collection c){
method containsAll (line 382) | public boolean containsAll(Collection c){
method toArray (line 391) | public Object[] toArray(Object[] a){
method size (line 395) | public int size(){
method isEmpty (line 399) | public boolean isEmpty(){
method contains (line 403) | public boolean contains(Object o){
method length (line 412) | public int length(){
method compareTo (line 416) | public int compareTo(Object o){
class Seq (line 431) | static class Seq extends ASeq implements IndexedSeq, IReduce{
method Seq (line 437) | public Seq(IPersistentVector v, int i){
method Seq (line 442) | Seq(IPersistentMap meta, IPersistentVector v, int i){
method first (line 448) | public Object first(){
method next (line 452) | public ISeq next(){
method index (line 458) | public int index(){
method count (line 462) | public int count(){
method withMeta (line 466) | public APersistentVector.Seq withMeta(IPersistentMap meta){
method reduce (line 470) | public Object reduce(IFn f) {
method reduce (line 479) | public Object reduce(IFn f, Object start) {
class RSeq (line 490) | public static class RSeq extends ASeq implements IndexedSeq, Counted{
method RSeq (line 494) | public RSeq(IPersistentVector vector, int i){
method RSeq (line 499) | RSeq(IPersistentMap meta, IPersistentVector v, int i){
method first (line 505) | public Object first(){
method next (line 509) | public ISeq next(){
method index (line 515) | public int index(){
method count (line 519) | public int count(){
method withMeta (line 523) | public APersistentVector.RSeq withMeta(IPersistentMap meta){
class SubVector (line 528) | public static class SubVector extends APersistentVector implements IObj{
method SubVector (line 536) | public SubVector(IPersistentMap meta, IPersistentVector v, int start...
method iterator (line 551) | public Iterator iterator(){
method nth (line 558) | public Object nth(int i){
method assocN (line 564) | public IPersistentVector assocN(int i, Object val){
method count (line 572) | public int count(){
method cons (line 576) | public IPersistentVector cons(Object o){
method empty (line 580) | public IPersistentCollection empty(){
method pop (line 584) | public IPersistentStack pop(){
method withMeta (line 592) | public SubVector withMeta(IPersistentMap meta){
method meta (line 598) | public IPersistentMap meta(){
FILE: src/jvm/clojure/lang/ARef.java
class ARef (line 17) | public abstract class ARef extends AReference implements IRef{
method ARef (line 21) | public ARef(){
method ARef (line 25) | public ARef(IPersistentMap meta){
method validate (line 29) | void validate(IFn vf, Object val){
method validate (line 45) | void validate(Object val){
method setValidator (line 49) | public void setValidator(IFn vf){
method getValidator (line 54) | public IFn getValidator(){
method getWatches (line 58) | public IPersistentMap getWatches(){
method addWatch (line 62) | synchronized public IRef addWatch(Object key, IFn callback){
method removeWatch (line 67) | synchronized public IRef removeWatch(Object key){
method notifyWatches (line 72) | public void notifyWatches(Object oldval, Object newval){
FILE: src/jvm/clojure/lang/AReference.java
class AReference (line 15) | public class AReference implements IReference {
method AReference (line 18) | public AReference() {
method AReference (line 22) | public AReference(IPersistentMap meta) {
method meta (line 26) | synchronized public IPersistentMap meta() {
method alterMeta (line 30) | synchronized public IPersistentMap alterMeta(IFn alter, ISeq args) {
method resetMeta (line 35) | synchronized public IPersistentMap resetMeta(IPersistentMap m) {
FILE: src/jvm/clojure/lang/ASeq.java
class ASeq (line 16) | public abstract class ASeq extends Obj implements ISeq, Sequential, List...
method toString (line 20) | public String toString(){
method empty (line 24) | public IPersistentCollection empty(){
method ASeq (line 28) | protected ASeq(IPersistentMap meta){
method ASeq (line 33) | protected ASeq(){
method equiv (line 36) | public boolean equiv(Object obj){
method equals (line 50) | public boolean equals(Object obj){
method hashCode (line 64) | public int hashCode(){
method hasheq (line 77) | public int hasheq(){
method count (line 114) | public int count(){
method seq (line 122) | final public ISeq seq(){
method cons (line 126) | public ISeq cons(Object o){
method more (line 130) | public ISeq more(){
method toArray (line 146) | public Object[] toArray(){
method add (line 150) | public boolean add(Object o){
method remove (line 154) | public boolean remove(Object o){
method addAll (line 158) | public boolean addAll(Collection c){
method clear (line 162) | public void clear(){
method retainAll (line 166) | public boolean retainAll(Collection c){
method removeAll (line 170) | public boolean removeAll(Collection c){
method containsAll (line 174) | public boolean containsAll(Collection c){
method toArray (line 183) | public Object[] toArray(Object[] a){
method size (line 187) | public int size(){
method isEmpty (line 191) | public boolean isEmpty(){
method contains (line 195) | public boolean contains(Object o){
method iterator (line 205) | public Iterator iterator(){
method reify (line 212) | private List reify(){
method subList (line 216) | public List subList(int fromIndex, int toIndex){
method set (line 220) | public Object set(int index, Object element){
method remove (line 224) | public Object remove(int index){
method indexOf (line 228) | public int indexOf(Object o){
method lastIndexOf (line 238) | public int lastIndexOf(Object o){
method listIterator (line 242) | public ListIterator listIterator(){
method listIterator (line 246) | public ListIterator listIterator(int index){
method get (line 250) | public Object get(int index){
method add (line 254) | public void add(int index, Object element){
method addAll (line 258) | public boolean addAll(int index, Collection c){
FILE: src/jvm/clojure/lang/ATransientMap.java
class ATransientMap (line 17) | abstract class ATransientMap extends AFn implements ITransientMap {
method ensureEditable (line 18) | abstract void ensureEditable();
method doAssoc (line 19) | abstract ITransientMap doAssoc(Object key, Object val);
method doWithout (line 20) | abstract ITransientMap doWithout(Object key);
method doValAt (line 21) | abstract Object doValAt(Object key, Object notFound);
method doCount (line 22) | abstract int doCount();
method doPersistent (line 23) | abstract IPersistentMap doPersistent();
method conj (line 25) | public ITransientMap conj(Object o) {
method invoke (line 50) | public final Object invoke(Object arg1) {
method invoke (line 54) | public final Object invoke(Object arg1, Object notFound) {
method valAt (line 58) | public final Object valAt(Object key) {
method assoc (line 62) | public final ITransientMap assoc(Object key, Object val) {
method without (line 67) | public final ITransientMap without(Object key) {
method persistent (line 72) | public final IPersistentMap persistent() {
method valAt (line 77) | public final Object valAt(Object key, Object notFound) {
method count (line 82) | public final int count() {
FILE: src/jvm/clojure/lang/ATransientSet.java
class ATransientSet (line 15) | public abstract class ATransientSet extends AFn implements ITransientSet{
method ATransientSet (line 18) | ATransientSet(ITransientMap impl) {
method count (line 22) | public int count() {
method conj (line 26) | public ITransientSet conj(Object val) {
method contains (line 32) | public boolean contains(Object key) {
method disjoin (line 36) | public ITransientSet disjoin(Object key) {
method get (line 42) | public Object get(Object key) {
method invoke (line 46) | public Object invoke(Object key, Object notFound) {
method invoke (line 50) | public Object invoke(Object key) {
FILE: src/jvm/clojure/lang/Agent.java
class Agent (line 19) | public class Agent extends ARef {
class ActionQueue (line 21) | static class ActionQueue {
method ActionQueue (line 26) | public ActionQueue( IPersistentStack q, Throwable error )
method shutdown (line 65) | public static void shutdown(){
class Action (line 70) | static class Action implements Runnable{
method Action (line 77) | public Action(Agent agent, IFn fn, ISeq args, Executor exec){
method execute (line 84) | void execute(){
method doRun (line 102) | static void doRun(Action action){
method run (line 159) | public void run(){
method Agent (line 164) | public Agent(Object state) {
method Agent (line 168) | public Agent(Object state, IPersistentMap meta) {
method setState (line 173) | boolean setState(Object newState) {
method deref (line 180) | public Object deref() {
method getError (line 184) | public Throwable getError(){
method setErrorMode (line 188) | public void setErrorMode(Keyword k){
method getErrorMode (line 192) | public Keyword getErrorMode(){
method setErrorHandler (line 196) | public void setErrorHandler(IFn f){
method getErrorHandler (line 200) | public IFn getErrorHandler(){
method restart (line 204) | synchronized public Object restart(Object newState, boolean clearActio...
method dispatch (line 231) | public Object dispatch(IFn fn, ISeq args, Executor exec) {
method dispatchAction (line 243) | static void dispatchAction(Action action){
method enqueue (line 255) | void enqueue(Action action){
method getQueueCount (line 268) | public int getQueueCount(){
method releasePendingSends (line 272) | static public int releasePendingSends(){
FILE: src/jvm/clojure/lang/ArityException.java
class ArityException (line 16) | public class ArityException extends IllegalArgumentException {
method ArityException (line 22) | public ArityException(int actual, String name) {
method ArityException (line 26) | public ArityException(int actual, String name, Throwable cause) {
FILE: src/jvm/clojure/lang/ArrayChunk.java
class ArrayChunk (line 17) | public final class ArrayChunk implements IChunk, Serializable {
method ArrayChunk (line 23) | public ArrayChunk(Object[] array){
method ArrayChunk (line 27) | public ArrayChunk(Object[] array, int off){
method ArrayChunk (line 31) | public ArrayChunk(Object[] array, int off, int end){
method nth (line 37) | public Object nth(int i){
method nth (line 41) | public Object nth(int i, Object notFound){
method count (line 47) | public int count(){
method dropFirst (line 51) | public IChunk dropFirst(){
method reduce (line 57) | public Object reduce(IFn f, Object start) {
FILE: src/jvm/clojure/lang/ArrayIter.java
class ArrayIter (line 16) | public class ArrayIter implements Iterator {
method hasNext (line 21) | public boolean hasNext() { return false; }
method next (line 22) | public Object next() { return null; }
method remove (line 23) | public void remove() { throw new UnsupportedOperationException("remove...
method create (line 26) | static public Iterator create(){
method create (line 30) | static public Iterator create(Object... array){
method createFromObject (line 36) | static public Iterator createFromObject(Object array){
method ArrayIter (line 59) | ArrayIter(Object array, int i){
method hasNext (line 64) | public boolean hasNext() {
method next (line 68) | public Object next() {
method remove (line 74) | public void remove() {
class ArrayIter_int (line 80) | static public class ArrayIter_int implements Iterator<Long> {
method ArrayIter_int (line 84) | ArrayIter_int(int[] array, int i){
method hasNext (line 89) | public boolean hasNext() {
method next (line 93) | public Long next() {
method remove (line 99) | public void remove() {
class ArrayIter_float (line 104) | static public class ArrayIter_float implements Iterator<Double> {
method ArrayIter_float (line 108) | ArrayIter_float(float[] array, int i){
method hasNext (line 113) | public boolean hasNext() {
method next (line 117) | public Double next() {
method remove (line 123) | public void remove() {
class ArrayIter_double (line 128) | static public class ArrayIter_double implements Iterator<Double> {
method ArrayIter_double (line 132) | ArrayIter_double(double[] array, int i){
method hasNext (line 137) | public boolean hasNext() {
method next (line 141) | public Double next() {
method remove (line 147) | public void remove() {
class ArrayIter_long (line 153) | static public class ArrayIter_long implements Iterator<Long> {
method ArrayIter_long (line 157) | ArrayIter_long(long[] array, int i){
method hasNext (line 162) | public boolean hasNext() {
method next (line 166) | public Long next() {
method remove (line 172) | public void remove() {
class ArrayIter_byte (line 178) | static public class ArrayIter_byte implements Iterator<Byte> {
method ArrayIter_byte (line 182) | ArrayIter_byte(byte[] array, int i){
method hasNext (line 187) | public boolean hasNext() {
method next (line 191) | public Byte next() {
method remove (line 197) | public void remove() {
class ArrayIter_char (line 203) | static public class ArrayIter_char implements Iterator<Character> {
method ArrayIter_char (line 207) | ArrayIter_char(char[] array, int i){
method hasNext (line 212) | public boolean hasNext() {
method next (line 216) | public Character next() {
method remove (line 222) | public void remove() {
class ArrayIter_short (line 228) | static public class ArrayIter_short implements Iterator<Long> {
method ArrayIter_short (line 232) | ArrayIter_short(short[] array, int i){
method hasNext (line 237) | public boolean hasNext() {
method next (line 241) | public Long next() {
method remove (line 247) | public void remove() {
class ArrayIter_boolean (line 253) | static public class ArrayIter_boolean implements Iterator<Boolean> {
method ArrayIter_boolean (line 257) | ArrayIter_boolean(boolean[] array, int i){
method hasNext (line 262) | public boolean hasNext() {
method next (line 266) | public Boolean next() {
method remove (line 272) | public void remove() {
FILE: src/jvm/clojure/lang/ArraySeq.java
class ArraySeq (line 17) | public class ArraySeq extends ASeq implements IndexedSeq, IReduce{
method create (line 22) | static public ArraySeq create(){
method create (line 26) | static public ArraySeq create(Object... array){
method createFromObject (line 32) | static ISeq createFromObject(Object array){
method ArraySeq (line 55) | ArraySeq(Object array, int i){
method ArraySeq (line 61) | ArraySeq(IPersistentMap meta, Object array, int i){
method first (line 67) | public Object first(){
method next (line 73) | public ISeq next(){
method count (line 79) | public int count(){
method index (line 85) | public int index(){
method withMeta (line 89) | public ArraySeq withMeta(IPersistentMap meta){
method reduce (line 93) | public Object reduce(IFn f) {
method reduce (line 107) | public Object reduce(IFn f, Object start) {
method indexOf (line 123) | public int indexOf(Object o) {
method lastIndexOf (line 130) | public int lastIndexOf(Object o) {
class ArraySeq_int (line 145) | static public class ArraySeq_int extends ASeq implements IndexedSeq, I...
method ArraySeq_int (line 149) | ArraySeq_int(IPersistentMap meta, int[] array, int i){
method first (line 155) | public Object first(){
method next (line 159) | public ISeq next(){
method count (line 165) | public int count(){
method index (line 169) | public int index(){
method withMeta (line 173) | public ArraySeq_int withMeta(IPersistentMap meta){
method reduce (line 177) | public Object reduce(IFn f) {
method reduce (line 188) | public Object reduce(IFn f, Object start) {
method indexOf (line 201) | public int indexOf(Object o) {
method lastIndexOf (line 211) | public int lastIndexOf(Object o) {
class ArraySeq_float (line 223) | static public class ArraySeq_float extends ASeq implements IndexedSeq,...
method ArraySeq_float (line 227) | ArraySeq_float(IPersistentMap meta, float[] array, int i){
method first (line 233) | public Object first(){
method next (line 237) | public ISeq next(){
method count (line 243) | public int count(){
method index (line 247) | public int index(){
method withMeta (line 251) | public ArraySeq_float withMeta(IPersistentMap meta){
method reduce (line 255) | public Object reduce(IFn f) {
method reduce (line 266) | public Object reduce(IFn f, Object start) {
method indexOf (line 279) | public int indexOf(Object o) {
method lastIndexOf (line 288) | public int lastIndexOf(Object o) {
class ArraySeq_double (line 298) | static public class ArraySeq_double extends ASeq implements IndexedSeq...
method ArraySeq_double (line 302) | ArraySeq_double(IPersistentMap meta, double[] array, int i){
method first (line 308) | public Object first(){
method next (line 312) | public ISeq next(){
method count (line 318) | public int count(){
method index (line 322) | public int index(){
method withMeta (line 326) | public ArraySeq_double withMeta(IPersistentMap meta){
method reduce (line 330) | public Object reduce(IFn f) {
method reduce (line 341) | public Object reduce(IFn f, Object start) {
method indexOf (line 354) | public int indexOf(Object o) {
method lastIndexOf (line 364) | public int lastIndexOf(Object o) {
class ArraySeq_long (line 375) | static public class ArraySeq_long extends ASeq implements IndexedSeq, ...
method ArraySeq_long (line 379) | ArraySeq_long(IPersistentMap meta, long[] array, int i){
method first (line 385) | public Object first(){
method next (line 389) | public ISeq next(){
method count (line 395) | public int count(){
method index (line 399) | public int index(){
method withMeta (line 403) | public ArraySeq_long withMeta(IPersistentMap meta){
method reduce (line 407) | public Object reduce(IFn f) {
method reduce (line 418) | public Object reduce(IFn f, Object start) {
method indexOf (line 431) | public int indexOf(Object o) {
method lastIndexOf (line 441) | public int lastIndexOf(Object o) {
class ArraySeq_byte (line 452) | static public class ArraySeq_byte extends ASeq implements IndexedSeq, ...
method ArraySeq_byte (line 456) | ArraySeq_byte(IPersistentMap meta, byte[] array, int i){
method first (line 462) | public Object first(){
method next (line 466) | public ISeq next(){
method count (line 472) | public int count(){
method index (line 476) | public int index(){
method withMeta (line 480) | public ArraySeq_byte withMeta(IPersistentMap meta){
method reduce (line 484) | public Object reduce(IFn f) {
method reduce (line 495) | public Object reduce(IFn f, Object start) {
method indexOf (line 508) | public int indexOf(Object o) {
method lastIndexOf (line 522) | public int lastIndexOf(Object o) {
class ArraySeq_char (line 537) | static public class ArraySeq_char extends ASeq implements IndexedSeq, ...
method ArraySeq_char (line 541) | ArraySeq_char(IPersistentMap meta, char[] array, int i){
method first (line 547) | public Object first(){
method next (line 551) | public ISeq next(){
method count (line 557) | public int count(){
method index (line 561) | public int index(){
method withMeta (line 565) | public ArraySeq_char withMeta(IPersistentMap meta){
method reduce (line 569) | public Object reduce(IFn f) {
method reduce (line 580) | public Object reduce(IFn f, Object start) {
method indexOf (line 593) | public int indexOf(Object o) {
method lastIndexOf (line 607) | public int lastIndexOf(Object o) {
class ArraySeq_short (line 622) | static public class ArraySeq_short extends ASeq implements IndexedSeq,...
method ArraySeq_short (line 626) | ArraySeq_short(IPersistentMap meta, short[] array, int i){
method first (line 632) | public Object first(){
method next (line 636) | public ISeq next(){
method count (line 642) | public int count(){
method index (line 646) | public int index(){
method withMeta (line 650) | public ArraySeq_short withMeta(IPersistentMap meta){
method reduce (line 654) | public Object reduce(IFn f) {
method reduce (line 665) | public Object reduce(IFn f, Object start) {
method indexOf (line 678) | public int indexOf(Object o) {
method lastIndexOf (line 692) | public int lastIndexOf(Object o) {
class ArraySeq_boolean (line 707) | static public class ArraySeq_boolean extends ASeq implements IndexedSe...
method ArraySeq_boolean (line 711) | ArraySeq_boolean(IPersistentMap meta, boolean[] array, int i){
method first (line 717) | public Object first(){
method next (line 721) | public ISeq next(){
method count (line 727) | public int count(){
method index (line 731) | public int index(){
method withMeta (line 735) | public ArraySeq_boolean withMeta(IPersistentMap meta){
method reduce (line 739) | public Object reduce(IFn f) {
method reduce (line 750) | public Object reduce(IFn f, Object start) {
method indexOf (line 763) | public int indexOf(Object o) {
method lastIndexOf (line 777) | public int lastIndexOf(Object o) {
FILE: src/jvm/clojure/lang/Associative.java
type Associative (line 12) | public interface Associative extends IPersistentCollection, ILookup{
method containsKey (line 13) | boolean containsKey(Object key);
method entryAt (line 15) | IMapEntry entryAt(Object key);
method assoc (line 17) | Associative assoc(Object key, Object val);
FILE: src/jvm/clojure/lang/Atom.java
class Atom (line 17) | final public class Atom extends ARef implements IAtom{
method Atom (line 20) | public Atom(Object state){
method Atom (line 24) | public Atom(Object state, IPersistentMap meta){
method deref (line 29) | public Object deref(){
method swap (line 33) | public Object swap(IFn f) {
method swap (line 47) | public Object swap(IFn f, Object arg) {
method swap (line 61) | public Object swap(IFn f, Object arg1, Object arg2) {
method swap (line 75) | public Object swap(IFn f, Object x, Object y, ISeq args) {
method compareAndSet (line 89) | public boolean compareAndSet(Object oldv, Object newv){
method reset (line 97) | public Object reset(Object newval){
FILE: src/jvm/clojure/lang/BigInt.java
class BigInt (line 18) | public final class BigInt extends Number implements IHashEq{
method hashCode (line 28) | public int hashCode(){
method hasheq (line 34) | public int hasheq(){
method equals (line 41) | public boolean equals(Object obj){
method BigInt (line 54) | private BigInt(long lpart, BigInteger bipart){
method fromBigInteger (line 59) | public static BigInt fromBigInteger(BigInteger val){
method fromLong (line 66) | public static BigInt fromLong(long val){
method toBigInteger (line 70) | public BigInteger toBigInteger(){
method toBigDecimal (line 77) | public BigDecimal toBigDecimal(){
method intValue (line 86) | public int intValue(){
method longValue (line 93) | public long longValue(){
method floatValue (line 100) | public float floatValue(){
method doubleValue (line 107) | public double doubleValue(){
method byteValue (line 114) | public byte byteValue(){
method shortValue (line 121) | public short shortValue(){
method valueOf (line 128) | public static BigInt valueOf(long val){
method toString (line 132) | public String toString(){
method bitLength (line 138) | public int bitLength(){
method add (line 142) | public BigInt add(BigInt y) {
method multiply (line 151) | public BigInt multiply(BigInt y) {
method quotient (line 161) | public BigInt quotient(BigInt y) {
method remainder (line 168) | public BigInt remainder(BigInt y) {
method lt (line 175) | public boolean lt(BigInt y) {
FILE: src/jvm/clojure/lang/Binding.java
class Binding (line 13) | public class Binding<T>{
method Binding (line 17) | public Binding(T val){
method Binding (line 22) | public Binding(T val, Binding rest){
FILE: src/jvm/clojure/lang/Box.java
class Box (line 15) | public class Box{
method Box (line 19) | public Box(Object val){
FILE: src/jvm/clojure/lang/ChunkBuffer.java
class ChunkBuffer (line 15) | final public class ChunkBuffer implements Counted{
method ChunkBuffer (line 19) | public ChunkBuffer(int capacity){
method add (line 24) | public void add(Object o){
method chunk (line 28) | public IChunk chunk(){
method count (line 34) | public int count(){
FILE: src/jvm/clojure/lang/ChunkedCons.java
class ChunkedCons (line 15) | final public class ChunkedCons extends ASeq implements IChunkedSeq{
method ChunkedCons (line 20) | ChunkedCons(IPersistentMap meta, IChunk chunk, ISeq more){
method ChunkedCons (line 26) | public ChunkedCons(IChunk chunk, ISeq more){
method withMeta (line 30) | public Obj withMeta(IPersistentMap meta){
method first (line 36) | public Object first(){
method next (line 40) | public ISeq next(){
method more (line 46) | public ISeq more(){
method chunkedFirst (line 54) | public IChunk chunkedFirst(){
method chunkedNext (line 58) | public ISeq chunkedNext(){
method chunkedMore (line 62) | public ISeq chunkedMore(){
FILE: src/jvm/clojure/lang/Compile.java
class Compile (line 25) | public class Compile {
method main (line 37) | public static void main(String[] args) throws Exception {
FILE: src/jvm/clojure/lang/Compiler.java
class Compiler (line 60) | public class Compiler implements Opcodes {
method emitSource (line 305) | public static void emitSource(String source) {
method nextScopedID (line 329) | public static int nextScopedID() {
method emitSource (line 336) | public static void emitSource() {
method tab (line 343) | public static void tab() {
method untab (line 350) | public static void untab() {
method getCompilerOption (line 357) | static public Object getCompilerOption(Keyword k) {
method elideMeta (line 379) | static Object elideMeta(Object m) {
method lineDeref (line 395) | static int lineDeref() {
method columnDeref (line 399) | static int columnDeref() {
type C (line 427) | public enum C {
class Recur (line 434) | private class Recur {
type Expr (line 439) | interface Expr {
method eval (line 440) | Object eval();
method emit (line 442) | String emit(C context, ObjExpr objx, GeneratorAdapter gen);
method hasJavaClass (line 444) | boolean hasJavaClass();
method getJavaClass (line 446) | Class getJavaClass();
class UntypedExpr (line 449) | public static abstract class UntypedExpr implements Expr {
method getJavaClass (line 451) | public Class getJavaClass() {
method hasJavaClass (line 455) | public boolean hasJavaClass() {
type IParser (line 460) | interface IParser {
method parse (line 461) | Expr parse(C context, Object form);
method isSpecial (line 464) | static boolean isSpecial(Object sym) {
method printClass (line 468) | public static String printClass(Object c) {
method resolveSymbol (line 480) | static Symbol resolveSymbol(Symbol sym) {
class DefExpr (line 503) | static class DefExpr implements Expr {
method DefExpr (line 526) | public DefExpr(C c, String source, int line, int column, Var var,
method eval (line 551) | public Object eval() {
method emit (line 571) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 624) | public boolean hasJavaClass() {
method getJavaClass (line 628) | public Class getJavaClass() {
class Parser (line 632) | static class Parser implements IParser {
method parse (line 633) | public Expr parse(C context, Object form) {
class AssignExpr (line 724) | public static class AssignExpr implements Expr {
method AssignExpr (line 728) | public AssignExpr(AssignableExpr target, Expr val) {
method eval (line 733) | public Object eval() {
method emit (line 737) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 741) | public boolean hasJavaClass() {
method getJavaClass (line 745) | public Class getJavaClass() {
class Parser (line 749) | static class Parser implements IParser {
method parse (line 750) | public Expr parse(C context, Object frm) {
class VarExpr (line 764) | public static class VarExpr implements Expr, AssignableExpr {
method VarExpr (line 770) | public VarExpr(Var var, Symbol tag) {
method eval (line 775) | public Object eval() {
method emit (line 779) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 789) | public boolean hasJavaClass() {
method getJavaClass (line 793) | public Class getJavaClass() {
method evalAssign (line 797) | public Object evalAssign(Expr val) {
method emitAssign (line 801) | public String emitAssign(C context, ObjExpr objx, GeneratorAdapter gen,
class TheVarExpr (line 813) | public static class TheVarExpr implements Expr {
method TheVarExpr (line 816) | public TheVarExpr(Var var) {
method eval (line 820) | public Object eval() {
method emit (line 824) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 834) | public boolean hasJavaClass() {
method getJavaClass (line 838) | public Class getJavaClass() {
class Parser (line 842) | static class Parser implements IParser {
method parse (line 843) | public Expr parse(C context, Object form) {
class KeywordExpr (line 854) | public static class KeywordExpr extends LiteralExpr {
method KeywordExpr (line 857) | public KeywordExpr(Keyword k) {
method val (line 861) | Object val() {
method eval (line 865) | public Object eval() {
method emit (line 869) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 879) | public boolean hasJavaClass() {
method getJavaClass (line 883) | public Class getJavaClass() {
class ImportExpr (line 888) | public static class ImportExpr implements Expr {
method ImportExpr (line 896) | public ImportExpr(String c) {
method eval (line 900) | public Object eval() {
method emit (line 906) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 932) | public boolean hasJavaClass() {
method getJavaClass (line 936) | public Class getJavaClass() {
class Parser (line 940) | static class Parser implements IParser {
method parse (line 941) | public Expr parse(C context, Object form) {
class LiteralExpr (line 947) | public static abstract class LiteralExpr implements Expr {
method val (line 948) | abstract Object val();
method eval (line 950) | public Object eval() {
type AssignableExpr (line 955) | static interface AssignableExpr {
method evalAssign (line 956) | Object evalAssign(Expr val);
method emitAssign (line 958) | String emitAssign(C context, ObjExpr objx, GeneratorAdapter gen, Exp...
type MaybePrimitiveExpr (line 961) | static public interface MaybePrimitiveExpr extends Expr {
method canEmitPrimitive (line 962) | public boolean canEmitPrimitive();
method emitUnboxed (line 964) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
class HostExpr (line 967) | static public abstract class HostExpr implements Expr, MaybePrimitiveE...
method emitBoxReturn (line 1015) | public static String emitBoxReturn(ObjExpr objx, GeneratorAdapter gen,
method emitUnboxArg (line 1068) | public static String emitUnboxArg(ObjExpr objx, GeneratorAdapter gen,
class Parser (line 1126) | static class Parser implements IParser {
method parse (line 1127) | public Expr parse(C context, Object frm) {
method maybeClass (line 1197) | private static Class maybeClass(Object form, boolean stringOk) {
method tagToClass (line 1240) | static Class tagToClass(Object tag) {
method tagToCanonical (line 1289) | public static String tagToCanonical(Object tag) {
class FieldExpr (line 1298) | static abstract class FieldExpr extends HostExpr {
class InstanceFieldExpr (line 1301) | static class InstanceFieldExpr extends FieldExpr implements Assignable...
method InstanceFieldExpr (line 1315) | public InstanceFieldExpr(int line, int column, Expr target,
method eval (line 1342) | public Object eval() {
method canEmitPrimitive (line 1347) | public boolean canEmitPrimitive() {
method emitUnboxed (line 1352) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 1366) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 1397) | public boolean hasJavaClass() {
method getJavaClass (line 1401) | public Class getJavaClass() {
method evalAssign (line 1405) | public Object evalAssign(Expr val) {
method emitAssign (line 1409) | public String emitAssign(C context, ObjExpr objx, GeneratorAdapter gen,
class StaticFieldExpr (line 1443) | static class StaticFieldExpr extends FieldExpr implements AssignableEx...
method StaticFieldExpr (line 1456) | public StaticFieldExpr(int line, int column, Class c, String fieldName,
method eval (line 1472) | public Object eval() {
method canEmitPrimitive (line 1476) | public boolean canEmitPrimitive() {
method emitUnboxed (line 1480) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 1487) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 1506) | public boolean hasJavaClass() {
method getJavaClass (line 1510) | public Class getJavaClass() {
method evalAssign (line 1516) | public Object evalAssign(Expr val) {
method emitAssign (line 1520) | public String emitAssign(C context, ObjExpr objx, GeneratorAdapter gen,
method maybePrimitiveType (line 1539) | static Class maybePrimitiveType(Expr e) {
method maybeJavaClass (line 1549) | static Class maybeJavaClass(Collection<Expr> exprs) {
class MethodExpr (line 1569) | static abstract class MethodExpr extends HostExpr {
method emitArgsAsArray (line 1570) | static String emitArgsAsArray(IPersistentVector args, ObjExpr objx,
method combineArgs (line 1587) | public static String combineArgs(List<String> a) {
method emitTypedArgs (line 1598) | public static List<String> emitTypedArgs(ObjExpr objx,
class InstanceMethodExpr (line 1650) | static class InstanceMethodExpr extends MethodExpr {
method InstanceMethodExpr (line 1663) | public InstanceMethodExpr(String source, int line, int column, Symbo...
method eval (line 1721) | public Object eval() {
method canEmitPrimitive (line 1742) | public boolean canEmitPrimitive() {
method emitUnboxed (line 1746) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 1772) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 1827) | public boolean hasJavaClass() {
method getJavaClass (line 1831) | public Class getJavaClass() {
class StaticMethodExpr (line 1836) | static class StaticMethodExpr extends MethodExpr {
method StaticMethodExpr (line 1852) | public StaticMethodExpr(String source, int line, int column, Symbol ...
method isBoxedMath (line 1910) | public static boolean isBoxedMath(java.lang.reflect.Method m) {
method eval (line 1925) | public Object eval() {
method canEmitPrimitive (line 1944) | public boolean canEmitPrimitive() {
method canEmitIntrinsicPredicate (line 1948) | public boolean canEmitIntrinsicPredicate() {
method emitIntrinsicPredicate (line 1953) | public String emitIntrinsicPredicate(C context, ObjExpr objx,
method emitUnboxed (line 1984) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 2030) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2077) | public boolean hasJavaClass() {
method getJavaClass (line 2081) | public Class getJavaClass() {
class UnresolvedVarExpr (line 2086) | static class UnresolvedVarExpr implements Expr {
method UnresolvedVarExpr (line 2089) | public UnresolvedVarExpr(Symbol symbol) {
method hasJavaClass (line 2093) | public boolean hasJavaClass() {
method getJavaClass (line 2097) | public Class getJavaClass() {
method emit (line 2101) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method eval (line 2105) | public Object eval() {
class NumberExpr (line 2110) | static class NumberExpr extends LiteralExpr implements MaybePrimitiveE...
method NumberExpr (line 2114) | public NumberExpr(Number n) {
method val (line 2119) | Object val() {
method emit (line 2123) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2132) | public boolean hasJavaClass() {
method getJavaClass (line 2136) | public Class getJavaClass() {
method canEmitPrimitive (line 2148) | public boolean canEmitPrimitive() {
method emitUnboxed (line 2152) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method parse (line 2166) | static public Expr parse(Number form) {
class ConstantExpr (line 2175) | static class ConstantExpr extends LiteralExpr {
method ConstantExpr (line 2181) | public ConstantExpr(Object v) {
method val (line 2189) | Object val() {
method emit (line 2193) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2210) | public boolean hasJavaClass() {
method getJavaClass (line 2215) | public Class getJavaClass() {
class Parser (line 2227) | static class Parser implements IParser {
method parse (line 2228) | public Expr parse(C context, Object form) {
class NilExpr (line 2250) | static class NilExpr extends LiteralExpr {
method val (line 2251) | Object val() {
method emit (line 2255) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2264) | public boolean hasJavaClass() {
method getJavaClass (line 2268) | public Class getJavaClass() {
class BooleanExpr (line 2275) | static class BooleanExpr extends LiteralExpr {
method BooleanExpr (line 2278) | public BooleanExpr(boolean val) {
method val (line 2282) | Object val() {
method emit (line 2286) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2298) | public boolean hasJavaClass() {
method getJavaClass (line 2302) | public Class getJavaClass() {
class StringExpr (line 2310) | static class StringExpr extends LiteralExpr {
method StringExpr (line 2313) | public StringExpr(String str) {
method val (line 2317) | Object val() {
method emit (line 2321) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2330) | public boolean hasJavaClass() {
method getJavaClass (line 2334) | public Class getJavaClass() {
class MonitorEnterExpr (line 2339) | static class MonitorEnterExpr extends UntypedExpr {
method MonitorEnterExpr (line 2342) | public MonitorEnterExpr(Expr target) {
method eval (line 2346) | public Object eval() {
method emit (line 2350) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
class Parser (line 2357) | static class Parser implements IParser {
method parse (line 2358) | public Expr parse(C context, Object form) {
class MonitorExitExpr (line 2364) | static class MonitorExitExpr extends UntypedExpr {
method MonitorExitExpr (line 2367) | public MonitorExitExpr(Expr target) {
method eval (line 2371) | public Object eval() {
method emit (line 2375) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
class Parser (line 2382) | static class Parser implements IParser {
method parse (line 2383) | public Expr parse(C context, Object form) {
class TryExpr (line 2390) | public static class TryExpr implements Expr {
class CatchClause (line 2397) | public static class CatchClause {
method CatchClause (line 2405) | public CatchClause(Class c, LocalBinding lb, Expr handler) {
method TryExpr (line 2412) | public TryExpr(Expr tryExpr, PersistentVector catchExprs, Expr final...
method eval (line 2421) | public Object eval() {
method emit (line 2425) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2569) | public boolean hasJavaClass() {
method getJavaClass (line 2573) | public Class getJavaClass() {
class Parser (line 2577) | static class Parser implements IParser {
method parse (line 2579) | public Expr parse(C context, Object frm) {
class ThrowExpr (line 2730) | static class ThrowExpr extends UntypedExpr {
method ThrowExpr (line 2733) | public ThrowExpr(Expr excExpr) {
method eval (line 2737) | public Object eval() {
method emit (line 2741) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
class Parser (line 2749) | static class Parser implements IParser {
method parse (line 2750) | public Expr parse(C context, Object form) {
method subsumes (line 2759) | static public boolean subsumes(Class[] c1, Class[] c2) {
method getMatchingParams (line 2776) | static int getMatchingParams(String methodName,
class NewExpr (line 2825) | public static class NewExpr implements Expr {
method NewExpr (line 2834) | public NewExpr(Class c, IPersistentVector args, int line, int column) {
method eval (line 2878) | public Object eval() {
method emit (line 2893) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2927) | public boolean hasJavaClass() {
method getJavaClass (line 2931) | public Class getJavaClass() {
class Parser (line 2935) | static class Parser implements IParser {
method parse (line 2936) | public Expr parse(C context, Object frm) {
class MetaExpr (line 2958) | public static class MetaExpr implements Expr {
method MetaExpr (line 2965) | public MetaExpr(Expr expr, Expr meta) {
method eval (line 2970) | public Object eval() {
method emit (line 2974) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 2987) | public boolean hasJavaClass() {
method getJavaClass (line 2991) | public Class getJavaClass() {
class IfExpr (line 2996) | public static class IfExpr implements Expr, MaybePrimitiveExpr {
method IfExpr (line 3003) | public IfExpr(int line, int column, Expr testExpr, Expr thenExpr,
method eval (line 3012) | public Object eval() {
method emit (line 3019) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method emitUnboxed (line 3023) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method doEmit (line 3027) | public String doEmit(C context, ObjExpr objx, GeneratorAdapter gen,
method asBoxClass (line 3112) | private Class asBoxClass(Class cast) {
method hasJavaClass (line 3135) | public boolean hasJavaClass() {
method canEmitPrimitive (line 3146) | public boolean canEmitPrimitive() {
method getJavaClass (line 3160) | public Class getJavaClass() {
class Parser (line 3167) | static class Parser implements IParser {
method parse (line 3168) | public Expr parse(C context, Object frm) {
method compare (line 3221) | public int compare(Object s1, Object s2) {
method munge (line 3239) | static public String munge(String name) {
method demunge (line 3251) | static public String demunge(String mungedName) {
method getTypeStringForArgs (line 3270) | static String getTypeStringForArgs(IPersistentVector args) {
class EmptyExpr (line 3281) | public static class EmptyExpr implements Expr {
method EmptyExpr (line 3290) | public EmptyExpr(Object coll) {
method eval (line 3294) | public Object eval() {
method emit (line 3298) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3323) | public boolean hasJavaClass() {
method getJavaClass (line 3327) | public Class getJavaClass() {
class ListExpr (line 3341) | public static class ListExpr implements Expr {
method ListExpr (line 3346) | public ListExpr(IPersistentVector args) {
method eval (line 3350) | public Object eval() {
method emit (line 3357) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3365) | public boolean hasJavaClass() {
method getJavaClass (line 3369) | public Class getJavaClass() {
class MapExpr (line 3375) | public static class MapExpr implements Expr {
method MapExpr (line 3382) | public MapExpr(IPersistentVector keyvals) {
method eval (line 3386) | public Object eval() {
method emit (line 3393) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3425) | public boolean hasJavaClass() {
method getJavaClass (line 3429) | public Class getJavaClass() {
method parse (line 3433) | static public Expr parse(C context, IPersistentMap form) {
class SetExpr (line 3480) | public static class SetExpr implements Expr {
method SetExpr (line 3485) | public SetExpr(IPersistentVector keys) {
method eval (line 3489) | public Object eval() {
method emit (line 3496) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3505) | public boolean hasJavaClass() {
method getJavaClass (line 3509) | public Class getJavaClass() {
method parse (line 3513) | static public Expr parse(C context, IPersistentSet form) {
class VectorExpr (line 3541) | public static class VectorExpr implements Expr {
method VectorExpr (line 3546) | public VectorExpr(IPersistentVector args) {
method eval (line 3550) | public Object eval() {
method emit (line 3557) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3569) | public boolean hasJavaClass() {
method getJavaClass (line 3573) | public Class getJavaClass() {
method parse (line 3577) | static public Expr parse(C context, IPersistentVector form) {
class KeywordInvokeExpr (line 3606) | static class KeywordInvokeExpr implements Expr {
method KeywordInvokeExpr (line 3616) | public KeywordInvokeExpr(String source, int line, int column, Symbol...
method eval (line 3627) | public Object eval() {
method emit (line 3638) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3703) | public boolean hasJavaClass() {
method getJavaClass (line 3707) | public Class getJavaClass() {
class InstanceOfExpr (line 3770) | public static class InstanceOfExpr implements Expr, MaybePrimitiveExpr {
method InstanceOfExpr (line 3774) | public InstanceOfExpr(Class c, Expr expr) {
method eval (line 3779) | public Object eval() {
method canEmitPrimitive (line 3785) | public boolean canEmitPrimitive() {
method emitUnboxed (line 3789) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 3795) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3803) | public boolean hasJavaClass() {
method getJavaClass (line 3807) | public Class getJavaClass() {
class StaticInvokeExpr (line 3813) | static class StaticInvokeExpr implements Expr, MaybePrimitiveExpr {
method StaticInvokeExpr (line 3822) | StaticInvokeExpr(Type target, Class retClass, Class[] paramclasses,
method eval (line 3833) | public Object eval() {
method emit (line 3837) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 3850) | public boolean hasJavaClass() {
method getJavaClass (line 3854) | public Class getJavaClass() {
method canEmitPrimitive (line 3858) | public boolean canEmitPrimitive() {
method emitUnboxed (line 3862) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method getReturnType (line 3895) | private Type getReturnType() {
method parse (line 3899) | public static Expr parse(Var v, ISeq args, Symbol tag) {
class InvokeExpr (line 3964) | static class InvokeExpr implements Expr {
method InvokeExpr (line 3979) | public InvokeExpr(String source, int line, int column, Symbol tag,
method eval (line 4042) | public Object eval() {
method emit (line 4057) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method emitProto (line 4076) | public String emitProto(C context, ObjExpr objx, GeneratorAdapter ge...
method emitArgsAndCall (line 4167) | String emitArgsAndCall(int firstArgToEmit, C context, ObjExpr objx,
method hasJavaClass (line 4196) | public boolean hasJavaClass() {
method getJavaClass (line 4200) | public Class getJavaClass() {
method parse (line 4204) | static public Expr parse(C context, ISeq form) {
class SourceDebugExtensionAttribute (line 4269) | static class SourceDebugExtensionAttribute extends Attribute {
method SourceDebugExtensionAttribute (line 4270) | public SourceDebugExtensionAttribute() {
method writeSMAP (line 4274) | void writeSMAP(ClassWriter cw, String smap) {
class FnExpr (line 4280) | static public class FnExpr extends ObjExpr {
method FnExpr (line 4291) | public FnExpr(Object tag) {
method hasJavaClass (line 4295) | public boolean hasJavaClass() {
method supportsMeta (line 4299) | boolean supportsMeta() {
method getJavaClass (line 4303) | public Class getJavaClass() {
method emitMethods (line 4307) | protected void emitMethods(ClassVisitor cv) {
method parse (line 4329) | static Expr parse(C context, ISeq form, String name, Object defConte...
method maybeSelfContain (line 4480) | private static void maybeSelfContain(C context, ObjExpr fn,
method variadicMethod (line 4492) | public final ObjMethod variadicMethod() {
method isVariadic (line 4496) | boolean isVariadic() {
method methods (line 4500) | public final IPersistentCollection methods() {
method emitForDefn (line 4504) | public String emitForDefn(ObjExpr objx, GeneratorAdapter gen) {
class ObjExpr (line 4521) | static public class ObjExpr implements Expr {
method name (line 4567) | public final String name() {
method internalName (line 4575) | public final String internalName() {
method thisName (line 4579) | public final String thisName() {
method objtype (line 4583) | public final Type objtype() {
method closes (line 4587) | public final IPersistentMap closes() {
method keywords (line 4591) | public final IPersistentMap keywords() {
method vars (line 4595) | public final IPersistentMap vars() {
method compiledClass (line 4599) | public final Class compiledClass() {
method line (line 4603) | public final int line() {
method column (line 4607) | public final int column() {
method constants (line 4611) | public final PersistentVector constants() {
method constantsID (line 4615) | public final int constantsID() {
method ObjExpr (line 4644) | public ObjExpr(Object tag) {
method trimGenID (line 4648) | static String trimGenID(String name) {
method ctorTypes (line 4653) | Type[] ctorTypes() {
method compile (line 4669) | void compile(String superName, String[] interfaceNames, boolean oneT...
method emitKeywordCallsites (line 5184) | private void emitKeywordCallsites(GeneratorAdapter clinitgen) {
method emitStatics (line 5203) | protected void emitStatics(ClassVisitor gen) {
method emitMethods (line 5206) | protected void emitMethods(ClassVisitor gen) {
method emitListAsObjectArray (line 5209) | String emitListAsObjectArray(Object value, GeneratorAdapter gen) {
method emitValue (line 5226) | String emitValue(Object value, GeneratorAdapter gen) {
method maybeClassWithVAR (line 5481) | private String maybeClassWithVAR(Var var) {
method emitConstants (line 5493) | void emitConstants(GeneratorAdapter clinitgen) {
method isMutable (line 5509) | boolean isMutable(LocalBinding lb) {
method isVolatile (line 5516) | boolean isVolatile(LocalBinding lb) {
method isDeftype (line 5522) | boolean isDeftype() {
method supportsMeta (line 5526) | boolean supportsMeta() {
method emitClearCloses (line 5530) | void emitClearCloses(GeneratorAdapter gen) {
method getCompiledClass (line 5545) | synchronized Class getCompiledClass() {
method eval (line 5557) | public Object eval() {
method emitLetFnInits (line 5567) | public void emitLetFnInits(GeneratorAdapter gen, ObjExpr objx,
method emit (line 5590) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 5631) | public boolean hasJavaClass() {
method getJavaClass (line 5635) | public Class getJavaClass() {
method emitAssignLocal (line 5640) | public void emitAssignLocal(GeneratorAdapter gen, LocalBinding lb, E...
method emitLocal (line 5662) | private String emitLocal(GeneratorAdapter gen, LocalBinding lb,
method emitUnboxedLocal (line 5735) | private String emitUnboxedLocal(GeneratorAdapter gen, LocalBinding l...
method emitVar (line 5749) | public String emitVar(GeneratorAdapter gen, Var var) {
method emitVarValue (line 5759) | public String emitVarValue(GeneratorAdapter gen, Var v) {
method emitKeyword (line 5772) | public String emitKeyword(GeneratorAdapter gen, Keyword k) {
method emitConstant (line 5778) | public String emitConstant(GeneratorAdapter gen, int id) {
method constantName (line 5786) | String constantName(int id) {
method siteName (line 5790) | String siteName(int n) {
method siteNameStatic (line 5794) | String siteNameStatic(int n) {
method thunkName (line 5798) | String thunkName(int n) {
method cachedClassName (line 5802) | String cachedClassName(int n) {
method cachedVarName (line 5806) | String cachedVarName(int n) {
method varCallsiteName (line 5810) | String varCallsiteName(int n) {
method thunkNameStatic (line 5814) | String thunkNameStatic(int n) {
method constantRealType (line 5818) | Class constantRealType(int id) {
method constantType (line 5831) | Type constantType(int id) {
type PATHTYPE (line 5869) | enum PATHTYPE {
class PathNode (line 5873) | static class PathNode {
method PathNode (line 5877) | PathNode(PATHTYPE type, PathNode parent) {
method clearPathRoot (line 5883) | static PathNode clearPathRoot() {
method escapeString (line 5887) | public static String escapeString(String value) {
type PSTATE (line 5891) | enum PSTATE {
class FnMethod (line 5895) | public static class FnMethod extends ObjMethod {
method FnMethod (line 5905) | public FnMethod(ObjExpr objx, ObjMethod parent) {
method classChar (line 5909) | static public char classChar(Object x) {
method primInterface (line 5925) | static public String primInterface(IPersistentVector arglist) {
method parse (line 5940) | static FnMethod parse(ObjExpr objx, ISeq form, boolean isStatic) {
method emit (line 6063) | public void emit(ObjExpr fn, ClassVisitor cv) {
method doEmitStatic (line 6073) | public void doEmitStatic(ObjExpr fn, ClassVisitor cv) {
method doEmitPrim (line 6122) | public void doEmitPrim(ObjExpr fn, ClassVisitor cv) {
method doEmit (line 6225) | public void doEmit(ObjExpr fn, ClassVisitor cv) {
method reqParms (line 6296) | public final PersistentVector reqParms() {
method restParm (line 6300) | public final LocalBinding restParm() {
method isVariadic (line 6304) | boolean isVariadic() {
method numParams (line 6308) | int numParams() {
method getMethodName (line 6312) | String getMethodName() {
method getReturnType (line 6316) | Type getReturnType() {
method getArgTypes (line 6322) | Type[] getArgTypes() {
method emitClearLocals (line 6332) | void emitClearLocals(GeneratorAdapter gen) {
class ObjMethod (line 6360) | abstract public static class ObjMethod {
method locals (line 6379) | public final IPersistentMap locals() {
method body (line 6383) | public final Expr body() {
method objx (line 6387) | public final ObjExpr objx() {
method argLocals (line 6391) | public final PersistentVector argLocals() {
method maxLocal (line 6395) | public final int maxLocal() {
method line (line 6399) | public final int line() {
method column (line 6403) | public final int column() {
method ObjMethod (line 6407) | public ObjMethod(ObjExpr objx, ObjMethod parent) {
method emitBody (line 6412) | static String emitBody(ObjExpr objx, GeneratorAdapter gen, Class ret...
method numParams (line 6451) | abstract int numParams();
method getMethodName (line 6453) | abstract String getMethodName();
method getReturnType (line 6455) | abstract Type getReturnType();
method getArgTypes (line 6457) | abstract Type[] getArgTypes();
method emit (line 6459) | public void emit(ObjExpr fn, ClassVisitor cv) {
method emitClearLocals (line 6526) | void emitClearLocals(GeneratorAdapter gen) {
method emitClearLocalsOld (line 6529) | void emitClearLocalsOld(GeneratorAdapter gen) {
class LocalBinding (line 6559) | public static class LocalBinding {
method LocalBinding (line 6571) | public LocalBinding(int num, Symbol sym, Symbol tag, Expr init,
method hasJavaClass (line 6585) | public boolean hasJavaClass() {
method getJavaClass (line 6593) | public Class getJavaClass() {
method getPrimitiveType (line 6597) | public Class getPrimitiveType() {
method print (line 6601) | public String print() {
class LocalBindingExpr (line 6610) | public static class LocalBindingExpr implements Expr, MaybePrimitiveExpr,
method LocalBindingExpr (line 6619) | public LocalBindingExpr(LocalBinding b, Symbol tag) {
method eval (line 6655) | public Object eval() {
method canEmitPrimitive (line 6659) | public boolean canEmitPrimitive() {
method emitUnboxed (line 6663) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 6667) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method evalAssign (line 6673) | public Object evalAssign(Expr val) {
method emitAssign (line 6677) | public String emitAssign(C context, ObjExpr objx, GeneratorAdapter gen,
method hasJavaClass (line 6685) | public boolean hasJavaClass() {
method getJavaClass (line 6689) | public Class getJavaClass() {
class BodyExpr (line 6697) | public static class BodyExpr implements Expr, MaybePrimitiveExpr {
method exprs (line 6700) | public final PersistentVector exprs() {
method BodyExpr (line 6704) | public BodyExpr(PersistentVector exprs) {
class Parser (line 6708) | static class Parser implements IParser {
method parse (line 6709) | public Expr parse(C context, Object frms) {
method eval (line 6726) | public Object eval() {
method canEmitPrimitive (line 6735) | public boolean canEmitPrimitive() {
method emitUnboxed (line 6740) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method emit (line 6754) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 6767) | public boolean hasJavaClass() {
method getJavaClass (line 6771) | public Class getJavaClass() {
method lastExpr (line 6775) | private Expr lastExpr() {
class BindingInit (line 6780) | public static class BindingInit {
method binding (line 6784) | public final LocalBinding binding() {
method init (line 6788) | public final Expr init() {
method BindingInit (line 6792) | public BindingInit(LocalBinding binding, Expr init) {
class LetFnExpr (line 6798) | public static class LetFnExpr implements Expr {
method LetFnExpr (line 6802) | public LetFnExpr(PersistentVector bindingInits, Expr body) {
class Parser (line 6807) | static class Parser implements IParser {
method parse (line 6808) | public Expr parse(C context, Object frm) {
method eval (line 6863) | public Object eval() {
method emit (line 6867) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 6920) | public boolean hasJavaClass() {
method getJavaClass (line 6924) | public Class getJavaClass() {
class LetExpr (line 6929) | public static class LetExpr implements Expr, MaybePrimitiveExpr {
method LetExpr (line 6934) | public LetExpr(PersistentVector bindingInits, Expr body, boolean isL...
class Parser (line 6940) | static class Parser implements IParser {
method parse (line 6941) | public Expr parse(C context, Object frm) {
method eval (line 7067) | public Object eval() {
method emit (line 7071) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method emitUnboxed (line 7075) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method doEmit (line 7079) | public String doEmit(C context, ObjExpr objx, GeneratorAdapter gen,
method hasJavaClass (line 7181) | public boolean hasJavaClass() {
method getJavaClass (line 7185) | public Class getJavaClass() {
method canEmitPrimitive (line 7189) | public boolean canEmitPrimitive() {
class RecurExpr (line 7196) | public static class RecurExpr implements Expr, MaybePrimitiveExpr {
method RecurExpr (line 7203) | public RecurExpr(IPersistentVector loopLocals, IPersistentVector args,
method eval (line 7212) | public Object eval() {
method emit (line 7216) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 7293) | public boolean hasJavaClass() {
method getJavaClass (line 7297) | public Class getJavaClass() {
class Parser (line 7301) | static class Parser implements IParser {
method parse (line 7302) | public Expr parse(C context, Object frm) {
method canEmitPrimitive (line 7355) | public boolean canEmitPrimitive() {
method emitUnboxed (line 7359) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method registerLocal (line 7364) | private static LocalBinding registerLocal(Symbol sym, Symbol tag, Expr...
method registerTemp (line 7379) | private static String registerTemp() {
method getAndIncLocalNum (line 7383) | private static int getAndIncLocalNum() {
method analyze (line 7392) | public static Expr analyze(C context, Object form) {
method analyze (line 7396) | private static Expr analyze(C context, Object form, String name) {
method analyze (line 7400) | private static Expr analyze(C context, Object form, String name,
class CompilerException (line 7458) | static public class CompilerException extends RuntimeException {
method CompilerException (line 7463) | public CompilerException(String source, int line, int column,
method toString (line 7470) | public String toString() {
method isMacro (line 7475) | static public Var isMacro(Object op) {
method isInline (line 7491) | static public IFn isInline(Object op, int arity) {
method namesStaticMember (line 7511) | public static boolean namesStaticMember(Symbol sym) {
method preserveTag (line 7515) | public static Object preserveTag(ISeq src, Object dst) {
method macroexpand1 (line 7525) | public static Object macroexpand1(Object x) {
method macroexpand (line 7588) | static Object macroexpand(Object form) {
method analyzeSeq (line 7595) | private static Expr analyzeSeq(C context, ISeq form, String name,
method errorMsg (line 7634) | static String errorMsg(String source, int line, int column, String s) {
method eval (line 7638) | public static Object eval(Object form) {
method eval (line 7642) | public static Object eval(Object form, boolean freshLoader) {
method registerConstant (line 7686) | private static int registerConstant(Object o) {
method registerKeyword (line 7700) | private static KeywordExpr registerKeyword(Keyword keyword) {
method registerKeywordCallsite (line 7717) | private static int registerKeywordCallsite(Keyword keyword) {
method registerProtocolCallsite (line 7729) | private static int registerProtocolCallsite(Var v) {
method fwdPath (line 7753) | static ISeq fwdPath(PathNode p1) {
method commonPath (line 7760) | static PathNode commonPath(PathNode n1, PathNode n2) {
method addAnnotation (line 7772) | static void addAnnotation(Object visitor, IPersistentMap meta) {
method addParameterAnnotation (line 7777) | static void addParameterAnnotation(Object visitor, IPersistentMap meta...
method analyzeSymbol (line 7782) | private static Expr analyzeSymbol(Symbol sym) {
method destubClassName (line 7826) | static String destubClassName(String className) {
method getType (line 7833) | static Type getType(Class c) {
method resolve (line 7840) | static Object resolve(Symbol sym, boolean allowPrivate) {
method resolve (line 7844) | static Object resolve(Symbol sym) {
method namespaceFor (line 7848) | static Namespace namespaceFor(Symbol sym) {
method namespaceFor (line 7852) | static Namespace namespaceFor(Namespace inns, Symbol sym) {
method resolveIn (line 7864) | static public Object resolveIn(Namespace n, Symbol sym, boolean allowP...
method maybeResolveIn (line 7899) | static public Object maybeResolveIn(Namespace n, Symbol sym) {
method lookupVar (line 7922) | static Var lookupVar(Symbol sym, boolean internNew, boolean registerMa...
method lookupVar (line 7959) | static Var lookupVar(Symbol sym, boolean internNew) {
method registerVar (line 7963) | private static void registerVar(Var var) {
method currentNS (line 7975) | static Namespace currentNS() {
method closeOver (line 7979) | static void closeOver(LocalBinding b, ObjMethod method) {
method referenceLocal (line 7992) | static LocalBinding referenceLocal(Symbol sym) {
method tagOf (line 8003) | private static Symbol tagOf(Object o) {
method loadFile (line 8012) | public static Object loadFile(String file) throws IOException {
method load (line 8026) | public static Object load(Reader rdr) {
method consumeWhitespaces (line 8030) | static void consumeWhitespaces(LineNumberingPushbackReader pushbackRea...
method readerOpts (line 8038) | private static Object readerOpts(String sourceName) {
method load (line 8045) | public static Object load(Reader rdr, String sourcePath, String source...
method writeClassFile (line 8085) | static public void writeClassFile(String internalName, byte[] bytecode)
method readFileAsString (line 8109) | private static String readFileAsString(String filePath) throws IOExcep...
method writeSourceFile (line 8122) | static public void writeSourceFile(String internalName, String source)
method pushNS (line 8149) | public static void pushNS() {
method pushNSandLoader (line 8155) | public static void pushNSandLoader(ClassLoader loader) {
method getLookupThunk (line 8161) | public static ILookupThunk getLookupThunk(Object target, Keyword k) {
method compile1 (line 8166) | static void compile1(GeneratorAdapter gen, ObjExpr objx, Object form) {
method compile (line 8195) | public static Object compile(Reader rdr, String sourcePath, String sou...
class NewInstanceExpr (line 8400) | static public class NewInstanceExpr extends ObjExpr {
method NewInstanceExpr (line 8409) | public NewInstanceExpr(Object tag) {
class DeftypeParser (line 8413) | static class DeftypeParser implements IParser {
method parse (line 8414) | public Expr parse(C context, final Object frm) {
class ReifyParser (line 8437) | static class ReifyParser implements IParser {
method parse (line 8438) | public Expr parse(C context, Object frm) {
method build (line 8464) | static ObjExpr build(IPersistentVector interfaceSyms,
method compileStub (line 8598) | static Class compileStub(String superName, NewInstanceExpr ret,
method interfaceNames (line 8755) | static String[] interfaceNames(IPersistentVector interfaces) {
method slashname (line 8763) | static String slashname(Class c) {
method emitStatics (line 8767) | protected void emitStatics(ClassVisitor cv) {
method emitMethods (line 8872) | protected void emitMethods(ClassVisitor cv) {
method msig (line 8935) | static public IPersistentVector msig(java.lang.reflect.Method m) {
method considerMethod (line 8940) | static void considerMethod(java.lang.reflect.Method m, Map mm) {
method gatherMethods (line 8951) | static void gatherMethods(Class c, Map mm) {
method gatherMethods (line 8960) | static public Map[] gatherMethods(Class sc, ISeq interfaces) {
class NewInstanceMethod (line 9019) | public static class NewInstanceMethod extends ObjMethod {
method NewInstanceMethod (line 9031) | public NewInstanceMethod(ObjExpr objx, ObjMethod parent) {
method numParams (line 9035) | int numParams() {
method getMethodName (line 9039) | String getMethodName() {
method getReturnType (line 9043) | Type getReturnType() {
method getArgTypes (line 9047) | Type[] getArgTypes() {
method msig (line 9051) | static public IPersistentVector msig(String name,
method parse (line 9056) | static NewInstanceMethod parse(ObjExpr objx, ISeq form, Symbol thistag,
method findMethodsWithNameAndArity (line 9205) | private static Map findMethodsWithNameAndArity(String name, int arity,
method emit (line 9228) | public void emit(ObjExpr obj, ClassVisitor cv) {
method primClass (line 9322) | static Class primClass(Symbol sym) {
method tagClass (line 9347) | static Class tagClass(Object tag) {
method primClass (line 9358) | static Class primClass(Class c) {
method boxClass (line 9362) | static Class boxClass(Class p) {
class MethodParamExpr (line 9388) | static public class MethodParamExpr implements Expr, MaybePrimitiveExpr {
method MethodParamExpr (line 9391) | public MethodParamExpr(Class c) {
method eval (line 9395) | public Object eval() {
method emit (line 9399) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method hasJavaClass (line 9403) | public boolean hasJavaClass() {
method getJavaClass (line 9407) | public Class getJavaClass() {
method canEmitPrimitive (line 9411) | public boolean canEmitPrimitive() {
method emitUnboxed (line 9415) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
class CaseExpr (line 9420) | public static class CaseExpr implements Expr, MaybePrimitiveExpr {
method CaseExpr (line 9449) | public CaseExpr(int line, int column, LocalBindingExpr expr, int shift,
method hasJavaClass (line 9485) | public boolean hasJavaClass() {
method canEmitPrimitive (line 9489) | public boolean canEmitPrimitive() {
method getJavaClass (line 9493) | public Class getJavaClass() {
method eval (line 9497) | public Object eval() {
method emit (line 9501) | public String emit(C context, ObjExpr objx, GeneratorAdapter gen) {
method emitUnboxed (line 9505) | public String emitUnboxed(C context, ObjExpr objx, GeneratorAdapter ...
method doEmit (line 9509) | public String doEmit(C context, ObjExpr objx, GeneratorAdapter gen,
method isShiftMasked (line 9594) | private boolean isShiftMasked() {
method emitShiftMask (line 9598) | private String emitShiftMask(GeneratorAdapter gen, String v) {
method emitExprForInts (line 9610) | private String emitExprForInts(ObjExpr objx, GeneratorAdapter gen,
method emitThenForInts (line 9637) | private void emitThenForInts(C context, String r, ObjExpr objx,
method emitExprForHashes (line 9707) | private String emitExprForHashes(ObjExpr objx, GeneratorAdapter gen) {
method emitThenForHashes (line 9713) | private void emitThenForHashes(C context, String r, ObjExpr objx,
method emitExpr (line 9740) | private static String emitExpr(C context, ObjExpr objx, GeneratorAda...
class Parser (line 9748) | static class Parser implements IParser {
method parse (line 9754) | public Expr parse(C context, Object frm) {
method emptyVarCallSites (line 9820) | static IPersistentCollection emptyVarCallSites() {
method wrap (line 9824) | private static String wrap(C context, String v) {
method unboxVal (line 9837) | public static String unboxVal(Class c, String v) {
method emitAssigRet (line 9874) | private static void emitAssigRet(C context, String r, String body) {
FILE: src/jvm/clojure/lang/Cons.java
class Cons (line 17) | final public class Cons extends ASeq implements Serializable {
method Cons (line 22) | public Cons(Object first, ISeq _more){
method Cons (line 28) | public Cons(IPersistentMap meta, Object _first, ISeq _more){
method first (line 34) | public Object first(){
method next (line 38) | public ISeq next(){
method more (line 42) | public ISeq more(){
method count (line 48) | public int count(){
method withMeta (line 52) | public Cons withMeta(IPersistentMap meta){
FILE: src/jvm/clojure/lang/Counted.java
type Counted (line 16) | public interface Counted {
method count (line 17) | int count();
FILE: src/jvm/clojure/lang/Cycle.java
class Cycle (line 15) | public class Cycle extends ASeq implements IReduce, IPending {
method Cycle (line 22) | private Cycle(ISeq all, ISeq prev, ISeq current){
method Cycle (line 28) | private Cycle(IPersistentMap meta, ISeq all, ISeq prev, ISeq current, ...
method create (line 36) | public static ISeq create(ISeq vals){
method current (line 43) | private ISeq current() {
method isRealized (line 51) | public boolean isRealized() {
method first (line 55) | public Object first(){
method next (line 59) | public ISeq next(){
method withMeta (line 65) | public Cycle withMeta(IPersistentMap meta){
method reduce (line 69) | public Object reduce(IFn f){
method reduce (line 82) | public Object reduce(IFn f, Object start){
FILE: src/jvm/clojure/lang/Delay.java
class Delay (line 15) | public class Delay implements IDeref, IPending{
method Delay (line 20) | public Delay(IFn fn){
method force (line 26) | static public Object force(Object x) {
method deref (line 32) | synchronized public Object deref() {
method isRealized (line 50) | synchronized public boolean isRealized(){
FILE: src/jvm/clojure/lang/DynamicClassLoader.java
class DynamicClassLoader (line 22) | public class DynamicClassLoader extends URLClassLoader{
method DynamicClassLoader (line 31) | public DynamicClassLoader(){
method DynamicClassLoader (line 38) | public DynamicClassLoader(ClassLoader parent){
method defineClass (line 42) | public Class defineClass(String name, byte[] bytes, Object srcForm){
method findInMemoryClass (line 49) | static Class<?> findInMemoryClass(String name) {
method findClass (line 62) | protected Class<?>findClass(String name) throws ClassNotFoundException {
method loadClass (line 70) | protected synchronized Class<?> loadClass(String name, boolean resolve...
method registerConstants (line 82) | public void registerConstants(int id, Object[] val){
method getConstants (line 86) | public Object[] getConstants(int id){
method addURL (line 90) | public void addURL(URL url){
FILE: src/jvm/clojure/lang/EdnReader.java
class EdnReader (line 23) | public class EdnReader{
method nonConstituent (line 58) | static boolean nonConstituent(int ch){
method readString (line 62) | static public Object readString(String s, IPersistentMap opts){
method isWhitespace (line 67) | static boolean isWhitespace(int ch){
method unread (line 71) | static void unread(PushbackReader r, int ch) {
class ReaderException (line 83) | public static class ReaderException extends RuntimeException{
method ReaderException (line 87) | public ReaderException(int line, int column, Throwable cause){
method read1 (line 94) | static public int read1(Reader r){
method read (line 107) | static public Object read(PushbackReader r, IPersistentMap opts){
method read (line 111) | static public Object read(PushbackReader r, boolean eofIsError, Object...
method readToken (line 181) | static private String readToken(PushbackReader r, char initch, boolean...
method readNumber (line 203) | static private Object readNumber(PushbackReader r, char initch) {
method readUnicodeChar (line 225) | static private int readUnicodeChar(String token, int offset, int lengt...
method readUnicodeChar (line 239) | static private int readUnicodeChar(PushbackReader r, int initch, int b...
method interpretToken (line 262) | static private Object interpretToken(String s) {
method matchSymbol (line 286) | private static Object matchSymbol(String s){
method matchNumber (line 311) | private static Object matchNumber(String s){
method getMacro (line 362) | static private IFn getMacro(int ch){
method isMacro (line 368) | static private boolean isMacro(int ch){
method isTerminatingMacro (line 372) | static private boolean isTerminatingMacro(int ch){
class StringReader (line 402) | public static class StringReader extends AFn{
method invoke (line 403) | public Object invoke(Object reader, Object doublequote, Object opts) {
class CommentReader (line 464) | public static class CommentReader extends AFn{
method invoke (line 465) | public Object invoke(Object reader, Object semicolon, Object opts) {
class DiscardReader (line 477) | public static class DiscardReader extends AFn{
method invoke (line 478) | public Object invoke(Object reader, Object underscore, Object opts) {
class DispatchReader (line 485) | public static class DispatchReader extends AFn{
method invoke (line 486) | public Object invoke(Object reader, Object hash, Object opts) {
class MetaReader (line 506) | public static class MetaReader extends AFn{
method invoke (line 507) | public Object invoke(Object reader, Object caret, Object opts) {
class CharacterReader (line 549) | public static class CharacterReader extends AFn{
method invoke (line 550) | public Object invoke(Object reader, Object backslash, Object opts) {
class ListReader (line 592) | public static class ListReader extends AFn{
method invoke (line 593) | public Object invoke(Object reader, Object leftparen, Object opts) {
class VectorReader (line 617) | public static class VectorReader extends AFn{
method invoke (line 618) | public Object invoke(Object reader, Object leftparen, Object opts) {
class MapReader (line 625) | public static class MapReader extends AFn{
method invoke (line 626) | public Object invoke(Object reader, Object leftparen, Object opts) {
class SetReader (line 636) | public static class SetReader extends AFn{
method invoke (line 637) | public Object invoke(Object reader, Object leftbracket, Object opts) {
class UnmatchedDelimiterReader (line 644) | public static class UnmatchedDelimiterReader extends AFn{
method invoke (line 645) | public Object invoke(Object reader, Object rightdelim, Object opts) {
class UnreadableReader (line 651) | public static class UnreadableReader extends AFn{
method invoke (line 652) | public Object invoke(Object reader, Object leftangle, Object opts) {
method readDelimitedList (line 657) | public static List readDelimitedList(char delim, PushbackReader r, boo...
class TaggedReader (line 704) | public static class TaggedReader extends AFn{
method invoke (line 705) | public Object invoke(Object reader, Object firstChar, Object opts){
method readTagged (line 717) | private Object readTagged(PushbackReader reader, Symbol tag, IPersis...
FILE: src/jvm/clojure/lang/EnumerationSeq.java
class EnumerationSeq (line 19) | public class EnumerationSeq extends ASeq{
class State (line 23) | static class State{
method create (line 28) | public static EnumerationSeq create(Enumeration iter){
method EnumerationSeq (line 34) | EnumerationSeq(Enumeration iter){
method EnumerationSeq (line 41) | EnumerationSeq(IPersistentMap meta, Enumeration iter, State state){
method first (line 47) | public Object first(){
method next (line 57) | public ISeq next(){
method withMeta (line 70) | public EnumerationSeq withMeta(IPersistentMap meta){
method writeObject (line 74) | private void writeObject (java.io.ObjectOutputStream out) throws IOExc...
FILE: src/jvm/clojure/lang/ExceptionInfo.java
class ExceptionInfo (line 18) | public class ExceptionInfo extends RuntimeException implements IExceptio...
method ExceptionInfo (line 21) | public ExceptionInfo(String s, IPersistentMap data) {
method ExceptionInfo (line 30) | public ExceptionInfo(String s, IPersistentMap data, Throwable throwabl...
method getData (line 35) | public IPersistentMap getData() {
method toString (line 39) | public String toString() {
FILE: src/jvm/clojure/lang/Fn.java
type Fn (line 15) | public interface Fn{
FILE: src/jvm/clojure/lang/FnLoaderThunk.java
class FnLoaderThunk (line 15) | public class FnLoaderThunk extends RestFn{
method FnLoaderThunk (line 22) | public FnLoaderThunk(Var v, String fnClassName){
method invoke (line 29) | public Object invoke(Object arg1) {
method invoke (line 34) | public Object invoke(Object arg1, Object arg2) {
method invoke (line 39) | public Object invoke(Object arg1, Object arg2, Object arg3) {
method doInvoke (line 44) | protected Object doInvoke(Object args) {
method load (line 49) | private void load() {
method getRequiredArity (line 64) | public int getRequiredArity(){
method withMeta (line 68) | public IObj withMeta(IPersistentMap meta){
method meta (line 72) | public IPersistentMap meta(){
FILE: src/jvm/clojure/lang/IAtom.java
type IAtom (line 15) | public interface IAtom{
method swap (line 16) | Object swap(IFn f);
method swap (line 18) | Object swap(IFn f, Object arg);
method swap (line 20) | Object swap(IFn f, Object arg1, Object arg2);
method swap (line 22) | Object swap(IFn f, Object x, Object y, ISeq args);
method compareAndSet (line 24) | boolean compareAndSet(Object oldv, Object newv);
method reset (line 26) | Object reset(Object newval);
FILE: src/jvm/clojure/lang/IBlockingDeref.java
type IBlockingDeref (line 15) | public interface IBlockingDeref{
method deref (line 16) | Object deref(long ms, Object timeoutValue) ;
FILE: src/jvm/clojure/lang/IChunk.java
type IChunk (line 15) | public interface IChunk extends Indexed{
method dropFirst (line 17) | IChunk dropFirst();
method reduce (line 19) | Object reduce(IFn f, Object start) ;
FILE: src/jvm/clojure/lang/IChunkedSeq.java
type IChunkedSeq (line 15) | public interface IChunkedSeq extends ISeq, Sequential {
method chunkedFirst (line 17) | IChunk chunkedFirst() ;
method chunkedNext (line 19) | ISeq chunkedNext() ;
method chunkedMore (line 21) | ISeq chunkedMore() ;
FILE: src/jvm/clojure/lang/IDeref.java
type IDeref (line 15) | public interface IDeref{
method deref (line 16) | Object deref() ;
FILE: src/jvm/clojure/lang/IEditableCollection.java
type IEditableCollection (line 15) | public interface IEditableCollection{
method asTransient (line 16) | ITransientCollection asTransient();
FILE: src/jvm/clojure/lang/IExceptionInfo.java
type IExceptionInfo (line 18) | public interface IExceptionInfo {
method getData (line 19) | public IPersistentMap getData();
FILE: src/jvm/clojure/lang/IFn.java
type IFn (line 23) | public interface IFn extends Callable, Runnable{
method invoke (line 25) | public Object invoke() ;
method invoke (line 27) | public Object invoke(Object arg1) ;
method invoke (line 29) | public Object invoke(Object arg1, Object arg2) ;
method invoke (line 31) | public Object invoke(Object arg1, Object arg2, Object arg3) ;
method invoke (line 33) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 35) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 37) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 39) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 42) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 45) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 48) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 51) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 54) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 57) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 60) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 64) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 68) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 72) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 76) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 80) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 84) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method invoke (line 89) | public Object invoke(Object arg1, Object arg2, Object arg3, Object arg...
method applyTo (line 95) | public Object applyTo(ISeq arglist) ;
type L (line 97) | static public interface L{long invokePrim();}
method invokePrim (line 97) | long invokePrim();
type D (line 98) | static public interface D{double invokePrim();}
method invokePrim (line 98) | double invokePrim();
type OL (line 99) | static public interface OL{long invokePrim(Object arg0);}
method invokePrim (line 99) | long invokePrim(Object arg0);
type OD (line 100) | static public interface OD{double invokePrim(Object arg0);}
method invokePrim (line 100) | double invokePrim(Object arg0);
type LO (line 101) | static public interface LO{Object invokePrim(long arg0);}
method invokePrim (line 101) | Object invokePrim(long arg0);
type LL (line 102) | static public interface LL{long invokePrim(long arg0);}
method invokePrim (line 102) | long invokePrim(long arg0);
type LD (line 103) | static public interface LD{double invokePrim(long arg0);}
method invokePrim (line 103) | double invokePrim(long arg0);
type DO (line 104) | static public interface DO{Object invokePrim(double arg0);}
method invokePrim (line 104) | Object invokePrim(double arg0);
type DL (line 105) | static public interface DL{long invokePrim(double arg0);}
method invokePrim (line 105) | long invokePrim(double arg0);
type DD (line 106) | static public interface DD{double invokePrim(double arg0);}
method invokePrim (line 106) | double invokePrim(double arg0);
type OOL (line 107) | static public interface OOL{long invokePrim(Object arg0, Object arg1);}
method invokePrim (line 107) | long invokePrim(Object arg0, Object arg1);
type OOD (line 108) | static public interface OOD{double invokePrim(Object arg0, Object arg1);}
method invokePrim (line 108) | double invokePrim(Object arg0, Object arg1);
type OLO (line 109) | static public interface OLO{Object invokePrim(Object arg0, long arg1);}
method invokePrim (line 109) | Object invokePrim(Object arg0, long arg1);
type OLL (line 110) | static public interface OLL{long invokePrim(Object arg0, long arg1);}
method invokePrim (line 110) | long invokePrim(Object arg0, long arg1);
type OLD (line 111) | static public interface OLD{double invokePrim(Object arg0, long arg1);}
method invokePrim (line 111) | double invokePrim(Object arg0, long arg1);
type ODO (line 112) | static public interface ODO{Object invokePrim(Object arg0, double arg1);}
method invokePrim (line 112) | Object invokePrim(Object arg0, double arg1);
type ODL (line 113) | static public interface ODL{long invokePrim(Object arg0, double arg1);}
method invokePrim (line 113) | long invokePrim(Object arg0, double arg1);
type ODD (line 114) | static public interface ODD{double invokePrim(Object arg0, double arg1);}
method invokePrim (line 114) | double invokePrim(Object arg0, double arg1);
type LOO (line 115) | static public interface LOO{Object invokePrim(long arg0, Object arg1);}
method invokePrim (line 115) | Object invokePrim(long arg0, Object arg1);
type LOL (line 116) | static public interface LOL{long invokePrim(long arg0, Object arg1);}
method invokePrim (line 116) | long invokePrim(long arg0, Object arg1);
type LOD (line 117) | static public interface LOD{double invokePrim(long arg0, Object arg1);}
method invokePrim (line 117) | double invokePrim(long arg0, Object arg1);
type LLO (line 118) | static public interface LLO{Object invokePrim(long arg0, long arg1);}
method invokePrim (line 118) | Object invokePrim(long arg0, long arg1);
type LLL (line 119) | static public interface LLL{long invokePrim(long arg0, long arg1);}
method invokePrim (line 119) | long invokePrim(long arg0, long arg1);
type LLD (line 120) | static public interface LLD{double invokePrim(long arg0, long arg1);}
method invokePrim (line 120) | double invokePrim(long arg0, long arg1);
type LDO (line 121) | static public interface LDO{Object invokePrim(long arg0, double arg1);}
method invokePrim (line 121) | Object invokePrim(long arg0, double arg1);
type LDL (line 122) | static public interface LDL{long invokePrim(long arg0, double arg1);}
method invokePrim (line 122) | long invokePrim(long arg0, double arg1);
type LDD (line 123) | static public interface LDD{double invokePrim(long arg0, double arg1);}
method invokePrim (line 123) | double invokePrim(long arg0, double arg1);
type DOO (line 124) | static public interface DOO{Object invokePrim(double arg0, Object arg1);}
method invokePrim (line 124) | Object invokePrim(double arg0, Object arg1);
type DOL (line 125) | static public interface DOL{long invokePrim(double arg0, Object arg1);}
method invokePrim (line 125) | long invokePrim(double arg0, Object arg1);
type DOD (line 126) | static public interface DOD{double invokePrim(double arg0, Object arg1);}
method invokePrim (line 126) | double invokePrim(double arg0, Object arg1);
type DLO (line 127) | static public interface DLO{Object invokePrim(double arg0, long arg1);}
method invokePrim (line 127) | Object invokePrim(double arg0, long arg1);
type DLL (line 128) | static public interface DLL{long invokePrim(double arg0, long arg1);}
method invokePrim (line 128) | long invokePrim(double arg0, long arg1);
type DLD (line 129) | static public interface DLD{double invokePrim(double arg0, long arg1);}
method invokePrim (line 129) | double invokePrim(double arg0, long arg1);
type DDO (line 130) | static public interface DDO{Object invokePrim(double arg0, double arg1);}
method invokePrim (line 130) | Object invokePrim(double arg0, double arg1);
type DDL (line 131) | static public interface DDL{long invokePrim(double arg0, double arg1);}
method invokePrim (line 131) | long invokePrim(double arg0, double arg1);
type DDD (line 132) | static public interface DDD{double invokePrim(double arg0, double arg1);}
method invokePrim (line 132) | double invokePrim(double arg0, double arg1);
type OOOL (line 133) | static public interface OOOL{long invokePrim(Object arg0, Object arg1,...
method invokePrim (line 133) | long invokePrim(Object arg0, Object arg1, Object arg2);
type OOOD (line 134) | static public interface OOOD{double invokePrim(Object arg0, Object arg...
method invokePrim (line 134) | double invokePrim(Object arg0, Object arg1, Object arg2);
type OOLO (line 135) | static public interface OOLO{Object invokePrim(Object arg0, Object arg...
method invokePrim (line 135) | Object invokePrim(Object arg0, Object arg1, long arg2);
type OOLL (line 136) | static public interface OOLL{long invokePrim(Object arg0, Object arg1,...
method invokePrim (line 136) | long invokePrim(Object arg0, Object arg1, long arg2);
type OOLD (line 137) | static public interface OOLD{double invokePrim(Object arg0, Object arg...
method invokePrim (line 137) | double invokePrim(Object arg0, Object arg1, long arg2);
type OODO (line 138) | static public interface OODO{Object invokePrim(Object arg0, Object arg...
method invokePrim (line 138) | Object invokePrim(Object arg0, Object arg1, double arg2);
type OODL (line 139) | static public interface OODL{long invokePrim(Object arg0, Object arg1,...
method invokePrim (line 139) | long invokePrim(Object arg0, Object arg1, double arg2);
type OODD (line 140) | static public interface OODD{double invokePrim(Object arg0, Object arg...
method invokePrim (line 140) | double invokePrim(Object arg0, Object arg1, double arg2);
type OLOO (line 141) | static public interface OLOO{Object invokePrim(Object arg0, long arg1,...
method invokePrim (line 141) | Object invokePrim(Object arg0, long arg1, Object arg2);
type OLOL (line 142) | static public interface OLOL{long invokePrim(Object arg0, long arg1, O...
method invokePrim (line 142) | long invokePrim(Object arg0, long arg1, Object arg2);
type OLOD (line 143) | static public interface OLOD{double invokePrim(Object arg0, long arg1,...
method invokePrim (line 143) | double invokePrim(Object arg0, long arg1, Object arg2);
type OLLO (line 144) | static public interface OLLO{Object invokePrim(Object arg0, long arg1,...
method invokePrim (line 144) | Object invokePrim(Object arg0, long arg1, long arg2);
type OLLL (line 145) | static public interface OLLL{long invokePrim(Object arg0, long arg1, l...
method invokePrim (line 145) | long invokePrim(Object arg0, long arg1, long arg2);
type OLLD (line 146) | static public interface OLLD{double invokePrim(Object arg0, long arg1,...
method invokePrim (line 146) | double invokePrim(Object arg0, long arg1, long arg2);
type OLDO (line 147) | static public interface OLDO{Object invokePrim(Object arg0, long arg1,...
method invokePrim (line 147) | Object invokePrim(Object arg0, long arg1, double arg2);
type OLDL (line 148) | static public interface OLDL{long invokePrim(Object arg0, long arg1, d...
method invokePrim (line 148) | long invokePrim(Object arg0, long arg1, double arg2);
type OLDD (line 149) | static public interface OLDD{double invokePrim(Object arg0, long arg1,...
method invokePrim (line 149) | double invokePrim(Object arg0, long arg1, double arg2);
type ODOO (line 150) | static public interface ODOO{Object invokePrim(Object arg0, double arg...
method invokePrim (line 150) | Object invokePrim(Object arg0, double arg1, Object arg2);
type ODOL (line 151) | static public interface ODOL{long invokePrim(Object arg0, double arg1,...
method invokePrim (line 151) | long invokePrim(Object arg0, double arg1, Object arg2);
type ODOD (line 152) | static public interface ODOD{double invokePrim(Object arg0, double arg...
method invokePrim (line 152) | double invokePrim(Object arg0, double arg1, Object arg2);
type ODLO (line 153) | static public interface ODLO{Object invokePrim(Object arg0, double arg...
method invokePrim (line 153) | Object invokePrim(Object arg0, double arg1, long arg2);
type ODLL (line 154) | static public interface ODLL{long invokePrim(Object arg0, double arg1,...
method invokePrim (line 154) | long invokePrim(Object arg0, double arg1, long arg2);
type ODLD (line 155) | static public interface ODLD{double invokePrim(Object arg0, double arg...
method invokePrim (line 155) | double invokePrim(Object arg0, double arg1, long arg2);
type ODDO (line 156) | static public interface ODDO{Object invokePrim(Object arg0, double arg...
method invokePrim (line 156) | Object invokePrim(Object arg0, double arg1, double arg2);
type ODDL (line 157) | static public interface ODDL{long invokePrim(Object arg0, double arg1,...
method invokePrim (line 157) | long invokePrim(Object arg0, double arg1, double arg2);
type ODDD (line 158) | static public interface ODDD{double invokePrim(Object arg0, double arg...
method invokePrim (line 158) | double invokePrim(Object arg0, double arg1, double arg2);
type LOOO (line 159) | static public interface LOOO{Object invokePrim(long arg0, Object arg1,...
method invokePrim (line 159) | Object invokePrim(long arg0, Object arg1, Object arg2);
type LOOL (line 160) | static public interface LOOL{long invokePrim(long arg0, Object arg1, O...
method invokePrim (line 160) | long invokePrim(long arg0, Object arg1, Object arg2);
type LOOD (line 161) | static public interface LOOD{double invokePrim(long arg0, Object arg1,...
method invokePrim (line 161) | double invokePrim(long arg0, Object arg1, Object arg2);
type LOLO (line 162) | static public interface LOLO{Object invokePrim(long arg0, Object arg1,...
method invokePrim (line 162) | Object invokePrim(long arg0, Object arg1, long arg2);
type LOLL (line 163) | static public interface LOLL{long invokePrim(long arg0, Object arg1, l...
method invokePrim (line 163) | long invokePrim(long arg0, Object arg1, long arg2);
type LOLD (line 164) | static public interface LOLD{double invokePrim(long arg0, Object arg1,...
method invokePrim (line 164) | double invokePrim(long arg0, Object arg1, long arg2);
type LODO (line 165) | static public interface LODO{Object invokePrim(long arg0, Object arg1,...
method invokePrim (line 165) | Object invokePrim(long arg0, Object arg1, double arg2);
type LODL (line 166) | static public interface LODL{long invokePrim(long arg0, Object arg1, d...
method invokePrim (line 166) | long invokePrim(long arg0, Object arg1, double arg2);
type LODD (line 167) | static public interface LODD{double invokePrim(long arg0, Object arg1,...
method invokePrim (line 167) | double invokePrim(long arg0, Object arg1, double arg2);
type LLOO (line 168) | static public interface LLOO{Object invokePrim(long arg0, long arg1, O...
method invokePrim (line 168) | Object invokePrim(long arg0, long arg1, Object arg2);
type LLOL (line 169) | static public interface LLOL{long invokePrim(long arg0, long arg1, Obj...
method invokePrim (line 169) | long invokePrim(long arg0, long arg1, Object arg2);
type LLOD (line 170) | static public interface LLOD{double invokePrim(long arg0, long arg1, O...
method invokePrim (line 170) | double invokePrim(long arg0, long arg1, Object arg2);
type LLLO (line 171) | static public interface LLLO{Object invokePrim(long arg0, long arg1, l...
method invokePrim (line 171) | Object invokePrim(long arg0, long arg1, long arg2);
type LLLL (line 172) | static public interface LLLL{long invokePrim(long arg0, long arg1, lon...
method invokePrim (line 172) | long invokePrim(long arg0, long arg1, long arg2);
type LLLD (line 173) | static public interface LLLD{double invokePrim(long arg0, long arg1, l...
method invokePrim (line 173) | double invokePrim(long arg0, long arg1, long arg2);
type LLDO (line 174) | static public interface LLDO{Object invokePrim(long arg0, long arg1, d...
method invokePrim (line 174) | Object invokePrim(long arg0, long arg1, double arg2);
type LLDL (line 175) | static public interface LLDL{long invokePrim(long arg0, long arg1, dou...
method invokePrim (line 175) | long invokePrim(long arg0, long arg1, double arg2);
type LLDD (line 176) | static public interface LLDD{double invokePrim(long arg0, long arg1, d...
method invokePrim (line 176) | double invokePrim(long arg0, long arg1, double arg2);
type LDOO (line 177) | static public interface LDOO{Object invokePrim(long arg0, double arg1,...
method invokePrim (line 177) | Object invokePrim(long arg0, double arg1, Object arg2);
type LDOL (line 178) | static public interface LDOL{long invokePrim(long arg0, double arg1, O...
method invokePrim (line 178) | long invokePrim(long arg0, double arg1, Object arg2);
type LDOD (line 179) | static public interface LDOD{double invokePrim(long arg0, double arg1,...
method invokePrim (line 179) | double invokePrim(long arg0, double arg1, Object arg2);
type LDLO (line 180) | static public interface LDLO{Object invokePrim(long arg0, double arg1,...
method invokePrim (line 180) | Object invokePrim(long arg0, double arg1, long arg2);
type LDLL (line 181) | static public interface LDLL{long invokePrim(long arg0, double arg1, l...
method invokePrim (line 181) | long invokePrim(long arg0, double arg1, long arg2);
type LDLD (line 182) | static public interface LDLD{double invokePrim(long arg0, double arg1,...
method invokePrim (line 182) | double invokePrim(long arg0, double arg1, long arg2);
type LDDO (line 183) | static public interface LDDO{Object invokePrim(long arg0, double arg1,...
method invokePrim (line 183) | Object invokePrim(long arg0, double arg1, double arg2);
type LDDL (line 184) | static public interface LDDL{long invokePrim(long arg0, double arg1, d...
method invokePrim (line 184) | long invokePrim(long arg0, double arg1, double arg2);
type LDDD (line 185) | static public interface LDDD{double invokePrim(long arg0, double arg1,...
method invokePrim (line 185) | double invokePrim(long arg0, double arg1, double arg2);
type DOOO (line 186) | static public interface DOOO{Object invokePrim(double arg0, Object arg...
method invokePrim (line 186) | Object invokePrim(double arg0, Object arg1, Object arg2);
type DOOL (line 187) | static public interface DOOL{long invokePrim(double arg0, Object arg1,...
method invokePrim (line 187) | long invokePrim(double arg0, Object arg1, Object arg2);
type DOOD (line 188) | static public interface DOOD{double invokePrim(double arg0, Object arg...
method invokePrim (line 188) | double invokePrim(double arg0, Object arg1, Object arg2);
type DOLO (line 189) | static public interface DOLO{Object invokePrim(double arg0, Object arg...
method invokePrim (line 189) | Object invokePrim(double arg0, Object arg1, long arg2);
type DOLL (line 190) | static public interface DOLL{long invokePrim(double arg0, Object arg1,...
method invokePrim (line 190) | long invokePrim(double arg0, Object arg1, long arg2);
type DOLD (line 191) | static public interface DOLD{double invokePrim(double arg0, Object arg...
method invokePrim (line 191) | double invokePrim(double arg0, Object arg1, long arg2);
type DODO (line 192) | static public interface DODO{Object invokePrim(double arg0, Object arg...
method invokePrim (line 192) | Object invokePrim(double arg0, Object arg1, double arg2);
type DODL (line 193) | static public interface DODL{long invokePrim(double arg0, Object arg1,...
method invokePrim (line 193) | long invokePrim(double arg0, Object arg1, double arg2);
type DODD (line 194) | static public interface DODD{double invokePrim(double arg0, Object arg...
method invokePrim (line 194) | double invokePrim(double arg0, Object arg1, double arg2);
type DLOO (line 195) | static public interface DLOO{Object invokePrim(double arg0, long arg1,...
method invokePrim (line 195) | Object invokePrim(double arg0, long arg1, Object arg2);
type DLOL (line 196) | static public interface DLOL{long invokePrim(double arg0, long arg1, O...
method invokePrim (line 196) | long invokePrim(double arg0, long arg1, Object arg2);
type DLOD (line 197) | static public interface DLOD{double invokePrim(double arg0, long arg1,...
method invokePrim (line 197) | double invokePrim(double arg0, long arg1, Object arg2);
type DLLO (line 198) | static public interface DLLO{Object invokePrim(double arg0, long arg1,...
method invokePrim (line 198) | Object invokePrim(double arg0, long arg1, long arg2);
type DLLL (line 199) | static public interface DLLL{long invokePrim(double arg0, long arg1, l...
method invokePrim (line 199) | long invokePrim(double arg0, long arg1, long arg2);
type DLLD (line 200) | static public interface DLLD{double invokePrim(double arg0, long arg1,...
method invokePrim (line 200) | double invokePrim(double arg0, long arg1, long arg2);
type DLDO (line 201) | static public interface DLDO{Object invokePrim(double arg0, long arg1,...
method invokePrim (line 201) | Object invokePrim(double arg0, long arg1, double arg2);
type DLDL (line 202) | static public interface DLDL{long invokePrim(double arg0, long arg1, d...
method invokePrim (line 202) | long invokePrim(double arg0, long arg1, double arg2);
type DLDD (line 203) | static public interface DLDD{double invokePrim(double arg0, long arg1,...
method invokePrim (line 203) | double invokePrim(double arg0, long arg1, double arg2);
type DDOO (line 204) | static public interface DDOO{Object invokePrim(double arg0, double arg...
method invokePrim (line 204) | Object invokePrim(double arg0, double arg1, Object arg2);
type DDOL (line 205) | static public interface DDOL{long invokePrim(double arg0, double arg1,...
method invokePrim (line 205) | long invokePrim(double arg0, double arg1, Object arg2);
type DDOD (line 206) | static public interface DDOD{double invokePrim(double arg0, double arg...
method invokePrim (line 206) | double invokePrim(double arg0, double arg1, Object arg2);
type DDLO (line 207) | static public interface DDLO{Object invokePrim(double arg0, double arg...
method invokePrim (line 207) | Object invokePrim(double arg0, double arg1, long arg2);
type DDLL (line 208) | static public interface DDLL{long invokePrim(double arg0, double arg1,...
method invokePrim (line 208) | long invokePrim(double arg0, double arg1, long arg2);
type DDLD (line 209) | static public interface DDLD{double invokePrim(double arg0, double arg...
method invokePrim (line 209) | double invokePrim(double arg0, double arg1, long arg2);
type DDDO (line 210) | static public interface DDDO{Object invokePrim(double arg0, double arg...
method invokePrim (line 210) | Object invokePrim(double arg0, double arg1, double arg2);
type DDDL (line 211) | static public interface DDDL{long invokePrim(double arg0, double arg1,...
method invokePrim (line 211) | long invokePrim(double arg0, double arg1, double arg2);
type DDDD (line 212) | static public interface DDDD{double invokePrim(double arg0, double arg...
method invokePrim (line 212) | double invokePrim(double arg0, double arg1, double arg2);
type OOOOL (line 213) | static public interface OOOOL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 213) | long invokePrim(Object arg0, Object arg1, Object arg2, Object arg3);
type OOOOD (line 214) | static public interface OOOOD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 214) | double invokePrim(Object arg0, Object arg1, Object arg2, Object arg3);
type OOOLO (line 215) | static public interface OOOLO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 215) | Object invokePrim(Object arg0, Object arg1, Object arg2, long arg3);
type OOOLL (line 216) | static public interface OOOLL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 216) | long invokePrim(Object arg0, Object arg1, Object arg2, long arg3);
type OOOLD (line 217) | static public interface OOOLD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 217) | double invokePrim(Object arg0, Object arg1, Object arg2, long arg3);
type OOODO (line 218) | static public interface OOODO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 218) | Object invokePrim(Object arg0, Object arg1, Object arg2, double arg3);
type OOODL (line 219) | static public interface OOODL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 219) | long invokePrim(Object arg0, Object arg1, Object arg2, double arg3);
type OOODD (line 220) | static public interface OOODD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 220) | double invokePrim(Object arg0, Object arg1, Object arg2, double arg3);
type OOLOO (line 221) | static public interface OOLOO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 221) | Object invokePrim(Object arg0, Object arg1, long arg2, Object arg3);
type OOLOL (line 222) | static public interface OOLOL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 222) | long invokePrim(Object arg0, Object arg1, long arg2, Object arg3);
type OOLOD (line 223) | static public interface OOLOD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 223) | double invokePrim(Object arg0, Object arg1, long arg2, Object arg3);
type OOLLO (line 224) | static public interface OOLLO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 224) | Object invokePrim(Object arg0, Object arg1, long arg2, long arg3);
type OOLLL (line 225) | static public interface OOLLL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 225) | long invokePrim(Object arg0, Object arg1, long arg2, long arg3);
type OOLLD (line 226) | static public interface OOLLD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 226) | double invokePrim(Object arg0, Object arg1, long arg2, long arg3);
type OOLDO (line 227) | static public interface OOLDO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 227) | Object invokePrim(Object arg0, Object arg1, long arg2, double arg3);
type OOLDL (line 228) | static public interface OOLDL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 228) | long invokePrim(Object arg0, Object arg1, long arg2, double arg3);
type OOLDD (line 229) | static public interface OOLDD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 229) | double invokePrim(Object arg0, Object arg1, long arg2, double arg3);
type OODOO (line 230) | static public interface OODOO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 230) | Object invokePrim(Object arg0, Object arg1, double arg2, Object arg3);
type OODOL (line 231) | static public interface OODOL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 231) | long invokePrim(Object arg0, Object arg1, double arg2, Object arg3);
type OODOD (line 232) | static public interface OODOD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 232) | double invokePrim(Object arg0, Object arg1, double arg2, Object arg3);
type OODLO (line 233) | static public interface OODLO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 233) | Object invokePrim(Object arg0, Object arg1, double arg2, long arg3);
type OODLL (line 234) | static public interface OODLL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 234) | long invokePrim(Object arg0, Object arg1, double arg2, long arg3);
type OODLD (line 235) | static public interface OODLD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 235) | double invokePrim(Object arg0, Object arg1, double arg2, long arg3);
type OODDO (line 236) | static public interface OODDO{Object invokePrim(Object arg0, Object ar...
method invokePrim (line 236) | Object invokePrim(Object arg0, Object arg1, double arg2, double arg3);
type OODDL (line 237) | static public interface OODDL{long invokePrim(Object arg0, Object arg1...
method invokePrim (line 237) | long invokePrim(Object arg0, Object arg1, double arg2, double arg3);
type OODDD (line 238) | static public interface OODDD{double invokePrim(Object arg0, Object ar...
method invokePrim (line 238) | double invokePrim(Object arg0, Object arg1, double arg2, double arg3);
type OLOOO (line 239) | static public interface OLOOO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 239) | Object invokePrim(Object arg0, long arg1, Object arg2, Object arg3);
type OLOOL (line 240) | static public interface OLOOL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 240) | long invokePrim(Object arg0, long arg1, Object arg2, Object arg3);
type OLOOD (line 241) | static public interface OLOOD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 241) | double invokePrim(Object arg0, long arg1, Object arg2, Object arg3);
type OLOLO (line 242) | static public interface OLOLO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 242) | Object invokePrim(Object arg0, long arg1, Object arg2, long arg3);
type OLOLL (line 243) | static public interface OLOLL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 243) | long invokePrim(Object arg0, long arg1, Object arg2, long arg3);
type OLOLD (line 244) | static public interface OLOLD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 244) | double invokePrim(Object arg0, long arg1, Object arg2, long arg3);
type OLODO (line 245) | static public interface OLODO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 245) | Object invokePrim(Object arg0, long arg1, Object arg2, double arg3);
type OLODL (line 246) | static public interface OLODL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 246) | long invokePrim(Object arg0, long arg1, Object arg2, double arg3);
type OLODD (line 247) | static public interface OLODD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 247) | double invokePrim(Object arg0, long arg1, Object arg2, double arg3);
type OLLOO (line 248) | static public interface OLLOO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 248) | Object invokePrim(Object arg0, long arg1, long arg2, Object arg3);
type OLLOL (line 249) | static public interface OLLOL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 249) | long invokePrim(Object arg0, long arg1, long arg2, Object arg3);
type OLLOD (line 250) | static public interface OLLOD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 250) | double invokePrim(Object arg0, long arg1, long arg2, Object arg3);
type OLLLO (line 251) | static public interface OLLLO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 251) | Object invokePrim(Object arg0, long arg1, long arg2, long arg3);
type OLLLL (line 252) | static public interface OLLLL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 252) | long invokePrim(Object arg0, long arg1, long arg2, long arg3);
type OLLLD (line 253) | static public interface OLLLD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 253) | double invokePrim(Object arg0, long arg1, long arg2, long arg3);
type OLLDO (line 254) | static public interface OLLDO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 254) | Object invokePrim(Object arg0, long arg1, long arg2, double arg3);
type OLLDL (line 255) | static public interface OLLDL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 255) | long invokePrim(Object arg0, long arg1, long arg2, double arg3);
type OLLDD (line 256) | static public interface OLLDD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 256) | double invokePrim(Object arg0, long arg1, long arg2, double arg3);
type OLDOO (line 257) | static public interface OLDOO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 257) | Object invokePrim(Object arg0, long arg1, double arg2, Object arg3);
type OLDOL (line 258) | static public interface OLDOL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 258) | long invokePrim(Object arg0, long arg1, double arg2, Object arg3);
type OLDOD (line 259) | static public interface OLDOD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 259) | double invokePrim(Object arg0, long arg1, double arg2, Object arg3);
type OLDLO (line 260) | static public interface OLDLO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 260) | Object invokePrim(Object arg0, long arg1, double arg2, long arg3);
type OLDLL (line 261) | static public interface OLDLL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 261) | long invokePrim(Object arg0, long arg1, double arg2, long arg3);
type OLDLD (line 262) | static public interface OLDLD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 262) | double invokePrim(Object arg0, long arg1, double arg2, long arg3);
type OLDDO (line 263) | static public interface OLDDO{Object invokePrim(Object arg0, long arg1...
method invokePrim (line 263) | Object invokePrim(Object arg0, long arg1, double arg2, double arg3);
type OLDDL (line 264) | static public interface OLDDL{long invokePrim(Object arg0, long arg1, ...
method invokePrim (line 264) | long invokePrim(Object arg0, long arg1, double arg2, double arg3);
type OLDDD (line 265) | static public interface OLDDD{double invokePrim(Object arg0, long arg1...
method invokePrim (line 265) | double invokePrim(Object arg0, long arg1, double arg2, double arg3);
type ODOOO (line 266) | static public interface ODOOO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 266) | Object invokePrim(Object arg0, double arg1, Object arg2, Object arg3);
type ODOOL (line 267) | static public interface ODOOL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 267) | long invokePrim(Object arg0, double arg1, Object arg2, Object arg3);
type ODOOD (line 268) | static public interface ODOOD{double invokePrim(Object arg0, double ar...
method invokePrim (line 268) | double invokePrim(Object arg0, double arg1, Object arg2, Object arg3);
type ODOLO (line 269) | static public interface ODOLO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 269) | Object invokePrim(Object arg0, double arg1, Object arg2, long arg3);
type ODOLL (line 270) | static public interface ODOLL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 270) | long invokePrim(Object arg0, double arg1, Object arg2, long arg3);
type ODOLD (line 271) | static public interface ODOLD{double invokePrim(Object arg0, double ar...
method invokePrim (line 271) | double invokePrim(Object arg0, double arg1, Object arg2, long arg3);
type ODODO (line 272) | static public interface ODODO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 272) | Object invokePrim(Object arg0, double arg1, Object arg2, double arg3);
type ODODL (line 273) | static public interface ODODL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 273) | long invokePrim(Object arg0, double arg1, Object arg2, double arg3);
type ODODD (line 274) | static public interface ODODD{double invokePrim(Object arg0, double ar...
method invokePrim (line 274) | double invokePrim(Object arg0, double arg1, Object arg2, double arg3);
type ODLOO (line 275) | static public interface ODLOO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 275) | Object invokePrim(Object arg0, double arg1, long arg2, Object arg3);
type ODLOL (line 276) | static public interface ODLOL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 276) | long invokePrim(Object arg0, double arg1, long arg2, Object arg3);
type ODLOD (line 277) | static public interface ODLOD{double invokePrim(Object arg0, double ar...
method invokePrim (line 277) | double invokePrim(Object arg0, double arg1, long arg2, Object arg3);
type ODLLO (line 278) | static public interface ODLLO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 278) | Object invokePrim(Object arg0, double arg1, long arg2, long arg3);
type ODLLL (line 279) | static public interface ODLLL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 279) | long invokePrim(Object arg0, double arg1, long arg2, long arg3);
type ODLLD (line 280) | static public interface ODLLD{double invokePrim(Object arg0, double ar...
method invokePrim (line 280) | double invokePrim(Object arg0, double arg1, long arg2, long arg3);
type ODLDO (line 281) | static public interface ODLDO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 281) | Object invokePrim(Object arg0, double arg1, long arg2, double arg3);
type ODLDL (line 282) | static public interface ODLDL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 282) | long invokePrim(Object arg0, double arg1, long arg2, double arg3);
type ODLDD (line 283) | static public interface ODLDD{double invokePrim(Object arg0, double ar...
method invokePrim (line 283) | double invokePrim(Object arg0, double arg1, long arg2, double arg3);
type ODDOO (line 284) | static public interface ODDOO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 284) | Object invokePrim(Object arg0, double arg1, double arg2, Object arg3);
type ODDOL (line 285) | static public interface ODDOL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 285) | long invokePrim(Object arg0, double arg1, double arg2, Object arg3);
type ODDOD (line 286) | static public interface ODDOD{double invokePrim(Object arg0, double ar...
method invokePrim (line 286) | double invokePrim(Object arg0, double arg1, double arg2, Object arg3);
type ODDLO (line 287) | static public interface ODDLO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 287) | Object invokePrim(Object arg0, double arg1, double arg2, long arg3);
type ODDLL (line 288) | static public interface ODDLL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 288) | long invokePrim(Object arg0, double arg1, double arg2, long arg3);
type ODDLD (line 289) | static public interface ODDLD{double invokePrim(Object arg0, double ar...
method invokePrim (line 289) | double invokePrim(Object arg0, double arg1, double arg2, long arg3);
type ODDDO (line 290) | static public interface ODDDO{Object invokePrim(Object arg0, double ar...
method invokePrim (line 290) | Object invokePrim(Object arg0, double arg1, double arg2, double arg3);
type ODDDL (line 291) | static public interface ODDDL{long invokePrim(Object arg0, double arg1...
method invokePrim (line 291) | long invokePrim(Object arg0, double arg1, double arg2, double arg3);
type ODDDD (line 292) | static public interface ODDDD{double invokePrim(Object arg0, double ar...
method invokePrim (line 292) | double invokePrim(Object arg0, double arg1, double arg2, double arg3);
type LOOOO (line 293) | static public interface LOOOO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 293) | Object invokePrim(long arg0, Object arg1, Object arg2, Object arg3);
type LOOOL (line 294) | static public interface LOOOL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 294) | long invokePrim(long arg0, Object arg1, Object arg2, Object arg3);
type LOOOD (line 295) | static public interface LOOOD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 295) | double invokePrim(long arg0, Object arg1, Object arg2, Object arg3);
type LOOLO (line 296) | static public interface LOOLO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 296) | Object invokePrim(long arg0, Object arg1, Object arg2, long arg3);
type LOOLL (line 297) | static public interface LOOLL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 297) | long invokePrim(long arg0, Object arg1, Object arg2, long arg3);
type LOOLD (line 298) | static public interface LOOLD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 298) | double invokePrim(long arg0, Object arg1, Object arg2, long arg3);
type LOODO (line 299) | static public interface LOODO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 299) | Object invokePrim(long arg0, Object arg1, Object arg2, double arg3);
type LOODL (line 300) | static public interface LOODL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 300) | long invokePrim(long arg0, Object arg1, Object arg2, double arg3);
type LOODD (line 301) | static public interface LOODD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 301) | double invokePrim(long arg0, Object arg1, Object arg2, double arg3);
type LOLOO (line 302) | static public interface LOLOO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 302) | Object invokePrim(long arg0, Object arg1, long arg2, Object arg3);
type LOLOL (line 303) | static public interface LOLOL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 303) | long invokePrim(long arg0, Object arg1, long arg2, Object arg3);
type LOLOD (line 304) | static public interface LOLOD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 304) | double invokePrim(long arg0, Object arg1, long arg2, Object arg3);
type LOLLO (line 305) | static public interface LOLLO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 305) | Object invokePrim(long arg0, Object arg1, long arg2, long arg3);
type LOLLL (line 306) | static public interface LOLLL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 306) | long invokePrim(long arg0, Object arg1, long arg2, long arg3);
type LOLLD (line 307) | static public interface LOLLD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 307) | double invokePrim(long arg0, Object arg1, long arg2, long arg3);
type LOLDO (line 308) | static public interface LOLDO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 308) | Object invokePrim(long arg0, Object arg1, long arg2, double arg3);
type LOLDL (line 309) | static public interface LOLDL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 309) | long invokePrim(long arg0, Object arg1, long arg2, double arg3);
type LOLDD (line 310) | static public interface LOLDD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 310) | double invokePrim(long arg0, Object arg1, long arg2, double arg3);
type LODOO (line 311) | static public interface LODOO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 311) | Object invokePrim(long arg0, Object arg1, double arg2, Object arg3);
type LODOL (line 312) | static public interface LODOL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 312) | long invokePrim(long arg0, Object arg1, double arg2, Object arg3);
type LODOD (line 313) | static public interface LODOD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 313) | double invokePrim(long arg0, Object arg1, double arg2, Object arg3);
type LODLO (line 314) | static public interface LODLO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 314) | Object invokePrim(long arg0, Object arg1, double arg2, long arg3);
type LODLL (line 315) | static public interface LODLL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 315) | long invokePrim(long arg0, Object arg1, double arg2, long arg3);
type LODLD (line 316) | static public interface LODLD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 316) | double invokePrim(long arg0, Object arg1, double arg2, long arg3);
type LODDO (line 317) | static public interface LODDO{Object invokePrim(long arg0, Object arg1...
method invokePrim (line 317) | Object invokePrim(long arg0, Object arg1, double arg2, double arg3);
type LODDL (line 318) | static public interface LODDL{long invokePrim(long arg0, Object arg1, ...
method invokePrim (line 318) | long invokePrim(long arg0, Object arg1, double arg2, double arg3);
type LODDD (line 319) | static public interface LODDD{double invokePrim(long arg0, Object arg1...
method invokePrim (line 319) | double invokePrim(long arg0, Object arg1, double arg2, double arg3);
type LLOOO (line 320) | static public interface LLOOO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 320) | Object invokePrim(long arg0, long arg1, Object arg2, Object arg3);
type LLOOL (line 321) | static public interface LLOOL{long invokePrim(long arg0, long arg1, Ob...
method invokePrim (line 321) | long invokePrim(long arg0, long arg1, Object arg2, Object arg3);
type LLOOD (line 322) | static public interface LLOOD{double invokePrim(long arg0, long arg1, ...
method invokePrim (line 322) | double invokePrim(long arg0, long arg1, Object arg2, Object arg3);
type LLOLO (line 323) | static public interface LLOLO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 323) | Object invokePrim(long arg0, long arg1, Object arg2, long arg3);
type LLOLL (line 324) | static public interface LLOLL{long invokePrim(long arg0, long arg1, Ob...
method invokePrim (line 324) | long invokePrim(long arg0, long arg1, Object arg2, long arg3);
type LLOLD (line 325) | static public interface LLOLD{double invokePrim(long arg0, long arg1, ...
method invokePrim (line 325) | double invokePrim(long arg0, long arg1, Object arg2, long arg3);
type LLODO (line 326) | static public interface LLODO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 326) | Object invokePrim(long arg0, long arg1, Object arg2, double arg3);
type LLODL (line 327) | static public interface LLODL{long invokePrim(long arg0, long arg1, Ob...
method invokePrim (line 327) | long invokePrim(long arg0, long arg1, Object arg2, double arg3);
type LLODD (line 328) | static public interface LLODD{double invokePrim(long arg0, long arg1, ...
method invokePrim (line 328) | double invokePrim(long arg0, long arg1, Object arg2, double arg3);
type LLLOO (line 329) | static public interface LLLOO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 329) | Object invokePrim(long arg0, long arg1, long arg2, Object arg3);
type LLLOL (line 330) | static public interface LLLOL{long invokePrim(long arg0, long arg1, lo...
method invokePrim (line 330) | long invokePrim(long arg0, long arg1, long arg2, Object arg3);
type LLLOD (line 331) | static public interface LLLOD{double invokePrim(long arg0, long arg1, ...
method invokePrim (line 331) | double invokePrim(long arg0, long arg1, long arg2, Object arg3);
type LLLLO (line 332) | static public interface LLLLO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 332) | Object invokePrim(long arg0, long arg1, long arg2, long arg3);
type LLLLL (line 333) | static public interface LLLLL{long invokePrim(long arg0, long arg1, lo...
method invokePrim (line 333) | long invokePrim(long arg0, long arg1, long arg2, long arg3);
type LLLLD (line 334) | static public interface LLLLD{double invokePrim(long arg0, long arg1, ...
method invokePrim (line 334) | double invokePrim(long arg0, long arg1, long arg2, long arg3);
type LLLDO (line 335) | static public interface LLLDO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 335) | Object invokePrim(long arg0, long arg1, long arg2, double arg3);
type LLLDL (line 336) | static public interface LLLDL{long invokePrim(long arg0, long arg1, lo...
method invokePrim (line 336) | long invokePrim(long arg0, long arg1, long arg2, double arg3);
type LLLDD (line 337) | static public interface LLLDD{double invokePrim(long arg0, long arg1, ...
method invokePrim (line 337) | double invokePrim(long arg0, long arg1, long arg2, double arg3);
type LLDOO (line 338) | static public interface LLDOO{Object invokePrim(long arg0, long arg1, ...
method invokePrim (line 338) | Object invokePrim(long arg0, long arg1, double arg2, Object arg3);
type LLDOL (line 339) | static public interface LLDOL{long invokePrim(long arg0, long arg1, do...
method invokePrim (line 339) | long invokePrim
Condensed preview — 349 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,632K chars).
[
{
"path": ".gitignore",
"chars": 188,
"preview": "*.jar\ntarget\nclojure.iws\nclojure.ipr\nnbproject/private/\nmaven-classpath\nmaven-classpath.properties\ncoclojure/*\n.settings"
},
{
"path": "CONTRIBUTING.md",
"chars": 111,
"preview": "If you'd like to submit a patch, please follow the [contributing guidelines](http://clojure.org/contributing).\n"
},
{
"path": "KNOWN_ISSUES",
"chars": 323,
"preview": "- Dividing by zero doesn't throw an exception in objc, it fails with EXC_ARITHMETIC\n- NullPointerException and ClassCast"
},
{
"path": "antsetup.sh",
"chars": 276,
"preview": "#!/bin/bash\n\nmvn -q dependency:build-classpath -Dmdep.outputFile=maven-classpath\ncat <<EOF >maven-classpath.properties \n"
},
{
"path": "build.clj",
"chars": 3475,
"preview": "(use '[clojure.java.shell :only [sh with-sh-dir]])\n(use '[clojure.java.io :only [delete-file file]])\n(require '[clojure."
},
{
"path": "build.xml",
"chars": 8852,
"preview": "<project name=\"clojure\" default=\"all\">\n\n\t<description>\n Build with \"ant\" and then start the\n REPL with: \"java -cp "
},
{
"path": "changes.md",
"chars": 83631,
"preview": "<!-- -*- mode: markdown ; mode: visual-line ; coding: utf-8 -*- -->\n\n# Changes to Clojure in Version 1.7\n\n## 1 Compatibi"
},
{
"path": "clojure.iml",
"chars": 1683,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule=\"true"
},
{
"path": "doc/clojure/pprint/CommonLispFormat.markdown",
"chars": 8504,
"preview": "# A Common Lisp-compatible Format Function\ncl-format is an implementation of the incredibly baroque Common Lisp format f"
},
{
"path": "doc/clojure/pprint/PrettyPrinting.markdown",
"chars": 10313,
"preview": "# A Pretty Printer for Clojure\n\n## Overview\n\nThis namespace adds a new feature to Clojure: a generalized pretty\nprinter."
},
{
"path": "epl-v10.html",
"chars": 12917,
"preview": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www"
},
{
"path": "pom.xml",
"chars": 5939,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "readme.md",
"chars": 2158,
"preview": "# clojure-objc\n\nA Clojure compiler that targets objc runtimes.\n\n * Write native apps in Clojure\n * Strong iOS support\n *"
},
{
"path": "release.sh",
"chars": 581,
"preview": "export KEEP_META=false\nrm -Rf target/release\nmkdir target/release\ncp target/libclojure-objc.a target/release/\ncp $J2OBJC"
},
{
"path": "src/assembly/distribution.xml",
"chars": 1043,
"preview": "<assembly>\n <id>distribution</id>\n <formats>\n <format>zip</format>\n </formats>\n <fileSets>\n <fileSet>\n <d"
},
{
"path": "src/assembly/slim.xml",
"chars": 853,
"preview": "<assembly>\n <id>slim</id>\n <formats>\n <format>jar</format>\n </formats>\n <includeBaseDirectory>false</includeBaseD"
},
{
"path": "src/clj/clojure/core/protocols.clj",
"chars": 4917,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/core/reducers.clj",
"chars": 10769,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/core.clj",
"chars": 251026,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/core_deftype.clj",
"chars": 35545,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/core_objc.clj",
"chars": 9120,
"preview": "(in-ns 'clojure.core)\n\n(require 'clojure.string)\n\n(def ^:dynamic dispatch-class)\n\n(def ^:dynamic force-main-thread)\n\n(de"
},
{
"path": "src/clj/clojure/core_print.clj",
"chars": 16311,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/core_proxy.clj",
"chars": 24642,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/data.clj",
"chars": 4036,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/edn.clj",
"chars": 1776,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/genclass.clj",
"chars": 44322,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/gvec.clj",
"chars": 17296,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/inspector.clj",
"chars": 5760,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/instant.clj",
"chars": 11210,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/java/browse.clj",
"chars": 2789,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/java/browse_ui.clj",
"chars": 1369,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/java/io.clj",
"chars": 15730,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/java/javadoc.clj",
"chars": 3283,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/java/shell.clj",
"chars": 5202,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/main.clj",
"chars": 15154,
"preview": ";; Copyright (c) Rich Hickey All rights reserved. The use and\n;; distribution terms for this software are covered by the"
},
{
"path": "src/clj/clojure/parallel.clj",
"chars": 8829,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/pprint/cl_format.clj",
"chars": 76374,
"preview": ";;; cl_format.clj -- part of the pretty printer for Clojure\n\n; Copyright (c) Rich Hickey. All rights reserved.\n; The"
},
{
"path": "src/clj/clojure/pprint/column_writer.clj",
"chars": 2782,
"preview": ";;; column_writer.clj -- part of the pretty printer for Clojure\n\n\n; Copyright (c) Rich Hickey. All rights reserved.\n; "
},
{
"path": "src/clj/clojure/pprint/dispatch.clj",
"chars": 21322,
"preview": ";; dispatch.clj -- part of the pretty printer for Clojure\n\n; Copyright (c) Rich Hickey. All rights reserved.\n; The u"
},
{
"path": "src/clj/clojure/pprint/pprint_base.clj",
"chars": 15647,
"preview": ";;; pprint_base.clj -- part of the pretty printer for Clojure\n\n; Copyright (c) Rich Hickey. All rights reserved.\n; T"
},
{
"path": "src/clj/clojure/pprint/pretty_writer.clj",
"chars": 17274,
"preview": ";;; pretty_writer.clj -- part of the pretty printer for Clojure\n\n; Copyright (c) Rich Hickey. All rights reserved.\n; "
},
{
"path": "src/clj/clojure/pprint/print_table.clj",
"chars": 1706,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/pprint/utilities.clj",
"chars": 3740,
"preview": ";;; utilities.clj -- part of the pretty printer for Clojure\n\n; Copyright (c) Rich Hickey. All rights reserved.\n; The"
},
{
"path": "src/clj/clojure/pprint.clj",
"chars": 2078,
"preview": ";;; pprint.clj -- Pretty printer and Common Lisp compatible format function (cl-format) for Clojure\n\n; Copyright (c) R"
},
{
"path": "src/clj/clojure/reflect/java.clj",
"chars": 9480,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/reflect.clj",
"chars": 4832,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/remoterepl.clj",
"chars": 2752,
"preview": "(ns clojure.remoterepl\n (:import [java.net ServerSocket Socket]\n [clojure.lang LineNumberingPushbackReader]\n "
},
{
"path": "src/clj/clojure/repl.clj",
"chars": 11282,
"preview": "; Copyright (c) Chris Houser, Dec 2008. All rights reserved.\n; The use and distribution terms for this software are "
},
{
"path": "src/clj/clojure/set.clj",
"chars": 5275,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/stacktrace.clj",
"chars": 2594,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/string.clj",
"chars": 10728,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/template.clj",
"chars": 1938,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/test/junit.clj",
"chars": 5450,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/test/tap.clj",
"chars": 3591,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/test.clj",
"chars": 25652,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/uuid.clj",
"chars": 756,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/walk.clj",
"chars": 4324,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/xml.clj",
"chars": 4536,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/clj/clojure/zip.clj",
"chars": 9539,
"preview": "; Copyright (c) Rich Hickey. All rights reserved.\n; The use and distribution terms for this software are covered by "
},
{
"path": "src/ffi/ffi.h",
"chars": 198,
"preview": "#ifdef __arm64__\n\n#include \"ffi_arm64.h\"\n\n\n#endif\n#ifdef __i386__\n\n#include \"ffi_i386.h\"\n\n\n#endif\n#ifdef __arm__\n\n#inclu"
},
{
"path": "src/ffi/ffi_arm64.h",
"chars": 13066,
"preview": "#ifdef __arm64__\n\n/* -----------------------------------------------------------------*-C-*-\n libffi 3.1-rc1 - Copyrig"
},
{
"path": "src/ffi/ffi_armv7.h",
"chars": 13056,
"preview": "#ifdef __arm__\n\n/* -----------------------------------------------------------------*-C-*-\n libffi 3.1-rc1 - Copyright"
},
{
"path": "src/ffi/ffi_common.h",
"chars": 3486,
"preview": "/* -----------------------------------------------------------------------\n ffi_common.h - Copyright (C) 2011, 2012, 2"
},
{
"path": "src/ffi/ffi_i386.h",
"chars": 13071,
"preview": "#ifdef __i386__\n\n/* -----------------------------------------------------------------*-C-*-\n libffi 3.1-rc1 - Copyrigh"
},
{
"path": "src/ffi/ffi_x86_64.h",
"chars": 13073,
"preview": "#ifdef __x86_64__\n\n/* -----------------------------------------------------------------*-C-*-\n libffi 3.1-rc1 - Copyri"
},
{
"path": "src/ffi/fficonfig.h",
"chars": 222,
"preview": "#ifdef __arm64__\n\n#include <fficonfig_arm64.h>\n\n\n#endif\n#ifdef __i386__\n\n#include <fficonfig_i386.h>\n\n\n#endif\n#ifdef __a"
},
{
"path": "src/ffi/fficonfig_arm64.h",
"chars": 6120,
"preview": "#ifdef __arm64__\n\n/* fficonfig.h. Generated from fficonfig.h.in by configure. */\n/* fficonfig.h.in. Generated from co"
},
{
"path": "src/ffi/fficonfig_armv7.h",
"chars": 6118,
"preview": "#ifdef __arm__\n\n/* fficonfig.h. Generated from fficonfig.h.in by configure. */\n/* fficonfig.h.in. Generated from conf"
},
{
"path": "src/ffi/fficonfig_i386.h",
"chars": 6117,
"preview": "#ifdef __i386__\n\n/* fficonfig.h. Generated from fficonfig.h.in by configure. */\n/* fficonfig.h.in. Generated from con"
},
{
"path": "src/ffi/fficonfig_x86_64.h",
"chars": 6119,
"preview": "#ifdef __x86_64__\n\n/* fficonfig.h. Generated from fficonfig.h.in by configure. */\n/* fficonfig.h.in. Generated from c"
},
{
"path": "src/ffi/ffitarget.h",
"chars": 222,
"preview": "#ifdef __arm64__\n\n#include \"ffitarget_arm64.h\"\n\n\n#endif\n#ifdef __i386__\n\n#include \"ffitarget_i386.h\"\n\n\n#endif\n#ifdef __a"
},
{
"path": "src/ffi/ffitarget_arm64.h",
"chars": 1899,
"preview": "#ifdef __arm64__\n\n/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.\n\nPermission is hereby granted, free of charge, to any"
},
{
"path": "src/ffi/ffitarget_armv7.h",
"chars": 2382,
"preview": "#ifdef __arm__\n\n/* -----------------------------------------------------------------*-C-*-\n ffitarget.h - Copyright (c"
},
{
"path": "src/ffi/ffitarget_i386.h",
"chars": 3972,
"preview": "#ifdef __i386__\n\n/* -----------------------------------------------------------------*-C-*-\n ffitarget.h - Copyright ("
},
{
"path": "src/ffi/ffitarget_x86_64.h",
"chars": 3974,
"preview": "#ifdef __x86_64__\n\n/* -----------------------------------------------------------------*-C-*-\n ffitarget.h - Copyright"
},
{
"path": "src/jvm/clojure/asm/AnnotationVisitor.java",
"chars": 6272,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/AnnotationWriter.java",
"chars": 11156,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Attribute.java",
"chars": 10231,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/ByteVector.java",
"chars": 10058,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/ClassReader.java",
"chars": 84921,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/ClassVisitor.java",
"chars": 11346,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/ClassWriter.java",
"chars": 59012,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Context.java",
"chars": 3300,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Edge.java",
"chars": 3163,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/FieldVisitor.java",
"chars": 4251,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/FieldWriter.java",
"chars": 9215,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Frame.java",
"chars": 47597,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Handle.java",
"chars": 5757,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Handler.java",
"chars": 4195,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Item.java",
"chars": 10189,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Label.java",
"chars": 22323,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/MethodVisitor.java",
"chars": 26341,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/MethodWriter.java",
"chars": 102919,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Opcodes.java",
"chars": 11106,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/Type.java",
"chars": 29267,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/AdviceAdapter.java",
"chars": 19089,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/AnalyzerAdapter.java",
"chars": 28478,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/CodeSizeEvaluator.java",
"chars": 6366,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/GeneratorAdapter.java",
"chars": 51441,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/InstructionAdapter.java",
"chars": 31368,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/LocalVariablesSorter.java",
"chars": 12747,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/Method.java",
"chars": 9513,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/SerialVersionUIDAdder.java",
"chars": 20242,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/StaticInitMerger.java",
"chars": 3586,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/TableSwitchGenerator.java",
"chars": 2257,
"preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
},
{
"path": "src/jvm/clojure/asm/commons/package.html",
"chars": 2871,
"preview": "<html>\n<!--\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France "
},
{
"path": "src/jvm/clojure/asm/package.html",
"chars": 4285,
"preview": "<html>\n<!--\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France "
},
{
"path": "src/jvm/clojure/java/api/Clojure.java",
"chars": 3223,
"preview": "/**\n * Copyright (c) Rich Hickey and Contributors. All rights reserved.\n * The use and distribution terms for this s"
},
{
"path": "src/jvm/clojure/java/api/package.html",
"chars": 2483,
"preview": "<html>\n\n<!--\nCopyright (c) Rich Hickey and Contributors. All rights reserved.\nThe use and distribution terms for this so"
},
{
"path": "src/jvm/clojure/lang/AFn.java",
"chars": 16197,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/AFunction.java",
"chars": 1285,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/AMapEntry.java",
"chars": 2873,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/APersistentMap.java",
"chars": 9673,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/APersistentSet.java",
"chars": 3775,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/APersistentVector.java",
"chars": 12038,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ARef.java",
"chars": 1913,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/AReference.java",
"chars": 1104,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ASeq.java",
"chars": 5109,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ATransientMap.java",
"chars": 2245,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ATransientSet.java",
"chars": 1323,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Agent.java",
"chars": 6557,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ArityException.java",
"chars": 919,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ArrayChunk.java",
"chars": 1558,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ArrayIter.java",
"chars": 6327,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ArraySeq.java",
"chars": 16914,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Associative.java",
"chars": 687,
"preview": "package clojure.lang;\r\n\r\n/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for "
},
{
"path": "src/jvm/clojure/lang/Atom.java",
"chars": 2159,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/BigInt.java",
"chars": 4115,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Binding.java",
"chars": 735,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are cov"
},
{
"path": "src/jvm/clojure/lang/Box.java",
"chars": 623,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ChunkBuffer.java",
"chars": 879,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ChunkedCons.java",
"chars": 1486,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Compile.java",
"chars": 3138,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Compiler.java",
"chars": 343668,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Cons.java",
"chars": 1211,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Counted.java",
"chars": 648,
"preview": "package clojure.lang;\n\n/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this"
},
{
"path": "src/jvm/clojure/lang/Cycle.java",
"chars": 2337,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Delay.java",
"chars": 1124,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/DynamicClassLoader.java",
"chars": 2680,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/EdnReader.java",
"chars": 18976,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/EnumerationSeq.java",
"chars": 1782,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ExceptionInfo.java",
"chars": 1434,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are covered b"
},
{
"path": "src/jvm/clojure/lang/Fn.java",
"chars": 551,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/FnLoaderThunk.java",
"chars": 1525,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IAtom.java",
"chars": 785,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IBlockingDeref.java",
"chars": 603,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IChunk.java",
"chars": 630,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IChunkedSeq.java",
"chars": 656,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IDeref.java",
"chars": 571,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IEditableCollection.java",
"chars": 604,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IExceptionInfo.java",
"chars": 783,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are covered b"
},
{
"path": "src/jvm/clojure/lang/IFn.java",
"chars": 38158,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IHashEq.java",
"chars": 566,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IKeywordLookup.java",
"chars": 603,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ILookup.java",
"chars": 625,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ILookupSite.java",
"chars": 596,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ILookupThunk.java",
"chars": 589,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IMapEntry.java",
"chars": 607,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are covered"
},
{
"path": "src/jvm/clojure/lang/IMapIterable.java",
"chars": 723,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IMeta.java",
"chars": 582,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IObj.java",
"chars": 611,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are cov"
},
{
"path": "src/jvm/clojure/lang/IPending.java",
"chars": 558,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IPersistentCollection.java",
"chars": 682,
"preview": "package clojure.lang;\r\n\r\n/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for "
},
{
"path": "src/jvm/clojure/lang/IPersistentList.java",
"chars": 579,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are covered"
},
{
"path": "src/jvm/clojure/lang/IPersistentMap.java",
"chars": 700,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are covered b"
},
{
"path": "src/jvm/clojure/lang/IPersistentSet.java",
"chars": 716,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IPersistentStack.java",
"chars": 635,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IPersistentVector.java",
"chars": 713,
"preview": "package clojure.lang;\r\n\r\n/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for "
},
{
"path": "src/jvm/clojure/lang/IProxy.java",
"chars": 729,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IRecord.java",
"chars": 532,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IReduce.java",
"chars": 599,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IReduceInit.java",
"chars": 572,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IRef.java",
"chars": 738,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IReference.java",
"chars": 675,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ISeq.java",
"chars": 803,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are covered"
},
{
"path": "src/jvm/clojure/lang/ITransientAssociative.java",
"chars": 662,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ITransientCollection.java",
"chars": 646,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ITransientMap.java",
"chars": 714,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ITransientSet.java",
"chars": 713,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/ITransientVector.java",
"chars": 674,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IType.java",
"chars": 530,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IllegalAccessError.java",
"chars": 208,
"preview": "package clojure.lang;\n\nimport java.lang.RuntimeException;\nimport java.lang.String;\n\npublic class IllegalAccessError exte"
},
{
"path": "src/jvm/clojure/lang/Indexed.java",
"chars": 628,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IndexedSeq.java",
"chars": 589,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are covered"
},
{
"path": "src/jvm/clojure/lang/Intrinsics.java",
"chars": 8530,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Iterate.java",
"chars": 2182,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/IteratorSeq.java",
"chars": 1781,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are cov"
},
{
"path": "src/jvm/clojure/lang/Keyword.java",
"chars": 8027,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/KeywordLookupSite.java",
"chars": 1450,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/LazilyPersistentVector.java",
"chars": 1217,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/LazySeq.java",
"chars": 4504,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/LineNumberingPushbackReader.java",
"chars": 2492,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are covered"
},
{
"path": "src/jvm/clojure/lang/LispReader.java",
"chars": 44911,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/LockingTransaction.java",
"chars": 14766,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/LongRange.java",
"chars": 8849,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/MapEntry.java",
"chars": 895,
"preview": "/**\r\n * Copyright (c) Rich Hickey. All rights reserved.\r\n * The use and distribution terms for this software are cov"
},
{
"path": "src/jvm/clojure/lang/MapEquivalence.java",
"chars": 581,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/MethodImplCache.java",
"chars": 2130,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/MultiFn.java",
"chars": 22802,
"preview": "/**\n * Copyright (c) Rich Hickey. All rights reserved.\n * The use and distribution terms for this software are cover"
},
{
"path": "src/jvm/clojure/lang/Murmur3.java",
"chars": 3298,
"preview": "/*\n * Copyright (C) 2011 The Guava Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may"
}
]
// ... and 149 more files (download for full content)
About this extraction
This page contains the full source code of the galdolber/clojure-objc GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 349 files (3.3 MB), approximately 880.5k tokens, and a symbol index with 4960 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.