blob: d3b2ea40b9473a3a8082f13626d2539fbd699b0d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
(ns cljcc.util
(:require [clojure.java.shell :refer [sh]]
[cljcc.log :as log]))
(defn make-file-name
([^String filename ^String ext]
(str filename "." ext))
([directory filename ext]
(str directory "/" filename "." ext)))
(defn get-os []
(let [os-name (.toLowerCase (System/getProperty "os.name"))]
(cond
(.contains os-name "mac") :mac
(.contains os-name "linux") :linux
:else :unsupported)))
(defn mac-aarch64? []
(and (= :mac (get-os)) (= (System/getProperty "os.arch") "aarch64")))
(defn handle-sh
"Preprends arch -x86_64 if running under Mac M chips."
[command & args]
(if (mac-aarch64?)
(apply sh "arch" "-x86_64" command args)
(apply sh command args)))
(defn exit [status msg]
(if (= status 0)
(log/info msg)
(log/error msg))
(System/exit status))
(defn letter? [^Character ch]
(or (= \_ ch)
(Character/isLetter ch)))
(defn letter-digit? [^Character ch]
(or (= \_ ch)
(Character/isLetterOrDigit ch)))
(defn digit? [^Character ch]
(Character/isDigit ch))
(defn newline? [ch]
(= \newline ch))
(defn whitespace? [^Character ch]
(Character/isWhitespace ch))
(defn read-number [str]
(try
(Double/parseDouble str)
(catch Exception e
(throw (ex-info "Lexer error. Malformed number." {:message (.getMessage e)})))))
|