fix #1144: cannot create multidimensional arrays (#1145)

This commit is contained in:
Michiel Borkent 2022-01-16 12:42:10 +01:00 committed by GitHub
parent cc728e5748
commit da31e9c61c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 17 deletions

View file

@ -54,14 +54,11 @@
{:extra-paths ["process/src" "process/test" "test-resources/lib_tests"] {:extra-paths ["process/src" "process/test" "test-resources/lib_tests"]
:extra-deps {org.clj-commons/clj-http-lite {:mvn/version "0.4.392"} :extra-deps {org.clj-commons/clj-http-lite {:mvn/version "0.4.392"}
org.babashka/spec.alpha {:git/url "https://github.com/babashka/spec.alpha" org.babashka/spec.alpha {:git/url "https://github.com/babashka/spec.alpha"
:sha "1deb5702da3747a42f3aff769307672e59fc8ed8"} :sha "0dec1f88cbde74a0470b454396f09a03adb4ae39"}
lambdaisland/regal {:git/url "https://github.com/lambdaisland/regal" lambdaisland/regal {:mvn/version "0.0.143"}
:sha "f902d2c43121f9e1c48603d6eb99f5900eb6a9f6"}
weavejester/medley {:git/url "https://github.com/weavejester/medley"
:sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}
cprop/cprop {:mvn/version "0.1.16"} cprop/cprop {:mvn/version "0.1.16"}
comb/comb {:mvn/version "0.1.1"} comb/comb {:mvn/version "0.1.1"}
mvxcvi/arrangement {:mvn/version "1.2.0"} mvxcvi/arrangement {:mvn/version "2.0.0"}
org.clojure/data.zip {:mvn/version "1.0.0"} org.clojure/data.zip {:mvn/version "1.0.0"}
clojure-csv/clojure-csv {:mvn/version "2.0.2"} clojure-csv/clojure-csv {:mvn/version "2.0.2"}
org.clojure/math.combinatorics {:mvn/version "0.1.6"} org.clojure/math.combinatorics {:mvn/version "0.1.6"}
@ -69,16 +66,16 @@
henryw374/cljc.java-time henryw374/cljc.java-time
{:git/url "https://github.com/henryw374/cljc.java-time.git" {:git/url "https://github.com/henryw374/cljc.java-time.git"
:sha "e3d184b78e933322b3fcaa6ca66cbb8f42a6b35c"} :sha "e3d184b78e933322b3fcaa6ca66cbb8f42a6b35c"}
camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.1"} camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.2"}
aero/aero {:mvn/version "1.1.6"} aero/aero {:mvn/version "1.1.6"}
org.clojure/data.generators {:mvn/version "1.0.0"} org.clojure/data.generators {:mvn/version "1.0.0"}
honeysql/honeysql {:mvn/version "1.0.444"} honeysql/honeysql {:mvn/version "1.0.461"}
com.github.seancorfield/honeysql {:mvn/version "2.0.0-rc2"} com.github.seancorfield/honeysql {:mvn/version "2.2.840"}
minimallist/minimallist {:mvn/version "0.0.6"} minimallist/minimallist {:mvn/version "0.0.10"}
circleci/bond {:mvn/version "0.4.0"} circleci/bond {:mvn/version "0.6.0"}
version-clj/version-clj {:mvn/version "2.0.1"} version-clj/version-clj {:mvn/version "2.0.2"}
gaka/gaka {:mvn/version "0.3.0"} gaka/gaka {:mvn/version "0.3.0"}
failjure/failjure {:mvn/version "2.1.1"} failjure/failjure {:mvn/version "2.2.0"}
io.helins/binf {:mvn/version "1.1.0-beta0"} io.helins/binf {:mvn/version "1.1.0-beta0"}
rm-hull/jasentaa {:mvn/version "0.2.5"} rm-hull/jasentaa {:mvn/version "0.2.5"}
slingshot/slingshot {:mvn/version "0.12.2"} slingshot/slingshot {:mvn/version "0.12.2"}
@ -95,11 +92,29 @@
hato/hato {:mvn/version "0.8.2"} hato/hato {:mvn/version "0.8.2"}
better-cond/better-cond {:mvn/version "2.1.1"} better-cond/better-cond {:mvn/version "2.1.1"}
org.clojure/core.specs.alpha {:mvn/version "0.2.62"} org.clojure/core.specs.alpha {:mvn/version "0.2.62"}
reifyhealth/specmonstah {:mvn/version "2.0.0"} reifyhealth/specmonstah {:git/url "https://github.com/reifyhealth/specmonstah", :sha "a2b357009a3aa99a0c2d2361f3bbcd0b0e36505e"}
exoscale/coax {:mvn/version "1.0.0-alpha14"} exoscale/coax {:mvn/version "1.0.0-alpha14"}
orchestra/orchestra {:mvn/version "2021.01.01-1"} orchestra/orchestra {:mvn/version "2021.01.01-1"}
expound/expound {:mvn/version "0.8.10"} expound/expound {:mvn/version "0.8.10"}
integrant/integrant {:mvn/version "0.8.0"}} integrant/integrant {:mvn/version "0.8.0"}
com.stuartsierra/dependency {:mvn/version "1.0.0"}
listora/again {:mvn/version "1.0.0"}
org.clojure/tools.gitlibs {:mvn/version "2.4.172"}
environ/environ {:mvn/version "1.2.0"}
table/table {:git/url "https://github.com/cldwalker/table", :sha "f6293c5f3dac1dd6f525a80fc80930f8ccdf16b7"}
markdown-clj/markdown-clj {:mvn/version "1.10.8"}
org.clojure/tools.namespace {:git/url "https://github.com/babashka/tools.namespace", :sha "a13b037215e21a2e71aa34b27e1dd52c801a2a7b"}
medley/medley {:mvn/version "1.3.0"}
io.github.cognitect-labs/test-runner {:git/tag "v0.5.0", :git/sha "b3fd0d2"}
borkdude/missing.test.assertions {:git/url "https://github.com/borkdude/missing.test.assertions", :sha "603cb01bee72fb17addacc53c34c85612684ad70"}
dev.nubank/docopt {:mvn/version "0.6.1-fix7"}
testdoc/testdoc {:mvn/version "1.4.1"}
org.clojars.lispyclouds/contajners {:mvn/version "0.0.4"}
borkdude/rewrite-edn {:mvn/version "0.1.0"}
clojure-term-colors/clojure-term-colors {:mvn/version "0.1.0"}
io.aviso/pretty {:mvn/version "1.1.1"}
progrock/progrock {:mvn/version "0.1.2"}
djblue/portal {:mvn/version "0.19.0"}}
:classpath-overrides {org.clojure/clojure nil :classpath-overrides {org.clojure/clojure nil
org.clojure/spec.alpha nil}} org.clojure/spec.alpha nil}}
:clj-nvd :clj-nvd

View file

@ -1,7 +1,7 @@
(ns babashka.impl.clojure.core (ns babashka.impl.clojure.core
{:no-doc true} {:no-doc true}
(:refer-clojure :exclude [future read+string clojure-version with-precision (:refer-clojure :exclude [future read+string clojure-version with-precision
send-via send send-off sync]) send-via send send-off sync into-array])
(:require [babashka.impl.common :as common] (:require [babashka.impl.common :as common]
[borkdude.graal.locking :as locking] [borkdude.graal.locking :as locking]
[clojure.core :as c] [clojure.core :as c]
@ -142,6 +142,21 @@
[_flags-ignored-for-now & body] [_flags-ignored-for-now & body]
`(clojure.core/-run-in-transaction (fn [] ~@body))) `(clojure.core/-run-in-transaction (fn [] ~@body)))
(defn into-array
"Returns an array with components set to the values in aseq. The array's
component type is type if provided, or the type of the first value in
aseq if present, or Object. All values in aseq must be compatible with
the component type. Class objects for the primitive types can be obtained
using, e.g., Integer/TYPE."
{:added "1.0"
:static true}
([aseq]
(try (clojure.lang.RT/seqToTypedArray (seq aseq))
(catch IllegalArgumentException _
(clojure.lang.RT/seqToTypedArray Object (seq aseq)))))
([type aseq]
(clojure.lang.RT/seqToTypedArray type (seq aseq))))
(def core-extras (def core-extras
{;; agents {;; agents
'agent (copy-core-var agent) 'agent (copy-core-var agent)
@ -202,5 +217,6 @@
'NaN? (sci/copy-var NaN? clojure-core-ns) 'NaN? (sci/copy-var NaN? clojure-core-ns)
'infinite? (sci/copy-var infinite? clojure-core-ns) 'infinite? (sci/copy-var infinite? clojure-core-ns)
'StackTraceElement->vec (sci/copy-var StackTraceElement->vec clojure-core-ns) 'StackTraceElement->vec (sci/copy-var StackTraceElement->vec clojure-core-ns)
'memfn (sci/copy-var memfn clojure-core-ns)} 'memfn (sci/copy-var memfn clojure-core-ns)
'into-array (sci/copy-var into-array clojure-core-ns)}
) )

View file

@ -813,6 +813,10 @@ true")))
(deftest aget-test (deftest aget-test
(is (= 1 (bb nil "(def array-2d (into-array [(int-array [1 2]) (int-array [3 4])])) (aget array-2d 0 0)")))) (is (= 1 (bb nil "(def array-2d (into-array [(int-array [1 2]) (int-array [3 4])])) (aget array-2d 0 0)"))))
(deftest into-array-fallback-test
(is (= :f (bb nil "(first (into-array [:f]))")))
(is (= :f (bb nil "(first (first (into-array [(into-array [:f])])))"))))
;;;; Scratch ;;;; Scratch
(comment (comment