├── SwiftiesREPL.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── swiftpm
│ │ └── Package.resolved
├── xcuserdata
│ └── codr7.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── SwiftiesREPL
└── main.swift
└── README.md
/SwiftiesREPL.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftiesREPL.xcodeproj/xcuserdata/codr7.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/SwiftiesREPL.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftiesREPL.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "object": {
3 | "pins": [
4 | {
5 | "package": "Swifties",
6 | "repositoryURL": "https://github.com/codr7/swifties.git",
7 | "state": {
8 | "branch": "main",
9 | "revision": "b2ed5b86ac6671b5ea733a0b91a4c1c1a79c086f",
10 | "version": null
11 | }
12 | }
13 | ]
14 | },
15 | "version": 1
16 | }
17 |
--------------------------------------------------------------------------------
/SwiftiesREPL.xcodeproj/xcuserdata/codr7.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | SwiftiesREPL.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/SwiftiesREPL/main.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import Swifties
3 |
4 | print("Swifties v\(SWIFTIES_VERSION)\n")
5 | print("Return evaluates completed forms,")
6 | print("(reset) clears the stack and Ctrl+D quits.\n")
7 |
8 | let env = Env()
9 | env.begin()
10 | let initPos = Pos("repl init")
11 | try env.initCoreLib(pos: initPos)
12 | try env.coreLib!.bind(pos: initPos)
13 | try MathLib(env: env, pos: initPos).bind(pos: initPos)
14 |
15 | let parser = Parser(env: env, source: "repl",
16 | prefix: [spaceReader,
17 | callReader,
18 | intReader,
19 | charReader,
20 | stringReader,
21 | stackReader,
22 | quoteReader,
23 | spliceReader,
24 | idReader],
25 | suffix: [pairReader])
26 |
27 | var prompt = 1
28 | var input = ""
29 |
30 | while true {
31 | print("\(prompt) ", terminator: "")
32 | let line = readLine(strippingNewline: false)
33 | if line == nil { break }
34 |
35 | do {
36 | try parser.slurp(line!)
37 | } catch {
38 | continue
39 | }
40 |
41 | let forms = parser.forms
42 |
43 | if parser.input.count == 0 {
44 | if forms.count > 0 {
45 | let startPc = env.pc
46 |
47 | do {
48 | for f in forms { try f.emit() }
49 | env.emit(STOP)
50 | try env.eval(startPc)
51 | } catch {
52 | print(error)
53 | }
54 | }
55 |
56 | prompt += 1
57 | print(env.stack.dump())
58 | parser.reset()
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Swifties REPL
2 |
3 | ### intro
4 | This projects aims to demonstrate how to implement a custom Lisp REPL using [Swifties](https://github.com/codr7/swifties).
5 |
6 | ```
7 | Swifties v5
8 |
9 | Return evaluates completed forms,
10 | (reset) clears the stack and Ctrl+D quits.
11 |
12 | (func fibrec [n:Int] [Int]
13 | (if (< $n 2) $n (+ (fibrec (-- $n)) (fibrec (- $n 2)))))
14 |
15 | (fibrec 10)
16 | [55]
17 | ```
18 |
19 | ### quirks
20 | - The stack is directly exposed to user code, just like in Forth.
21 | - Primitives, Macros and Functions are called on reference outside of call forms.
22 | - Parens are used for calls only, brackets for lists of things.
23 |
24 | ### stacks
25 | `c` swaps the specified number of items.
26 |
27 | ```
28 | 1 2 3 cc
29 | [1 2 3 2 3]
30 | ```
31 |
32 | `d` drops the specified number of items.
33 |
34 | ```
35 | 1 2 3 4 dd
36 | [1 2]
37 | ```
38 |
39 | `s` swaps the specified number of items.
40 |
41 | ```
42 | 1 2 3 4 5 ss
43 | [1 4 5 2 3]
44 | ```
45 |
46 | `stash` replaces the the stack with its contents as a single item.
47 |
48 | ```
49 | 1 2 3 stash
50 | [[1 2 3]]
51 | ```
52 |
53 | Stack literals are enclosed in brackets.
54 |
55 | ```
56 | [1 2 3]
57 | [[1 2 3]]
58 | ```
59 |
60 | `splat` replaces the top item (which is required to be iterable) with its items.
61 |
62 | ```
63 | (splat [1 2 3])
64 | [1 2 3]
65 | ```
66 |
67 | ### bindings
68 | Values may be bound to identifiers using `let`.
69 |
70 | ```
71 | (let [x 35 y 7]
72 | (+ $x $y))
73 | [42]
74 | ```
75 |
76 | ### functions
77 | New functions may be defined using `func`.
78 |
79 | ```
80 | (func fibrec [n:Int] [Int]
81 | (if (< $n 2) $n (+ (fibrec (-- $n)) (fibrec (- $n 2)))))
82 |
83 | (fibrec 10)
84 | [55]
85 | ```
86 |
87 | The same thing could be accomplished without bindings by manipulating the stack, if one was so inclined.
88 |
89 | ```
90 | (func fibrecs [Int] [Int]
91 | c (if (< _ 2) _ (do -- c fibrecs s -- fibrecs +)))
92 |
93 | (fibrecs 10)
94 | [55]
95 | ```
96 |
97 | It also runs somewhat faster.
98 |
99 | ```
100 | (bench 100 (fibrec 10))
101 | [366]
102 |
103 | (bench 100 (fibrecs 10))
104 | [366 357]
105 | ```
106 |
107 | The algorithm can definitely be improved, note that I had to change `n` from `10` to `50` to even get something worth measuring.
108 |
109 | ```
110 | (func fibtail1 [n:Int a:Int b:Int] [Int]
111 | (if (z? $n) $a (if (one? $n) $b (fibtail1 (-- $n) $b (+ $a $b)))))
112 |
113 | (bench 100 (fibtail1 50 0 1))
114 | [149]
115 | ```
116 |
117 | Since the recursive call is in tail position, `recall` may be used to trigger tail call optimization.
118 |
119 | ```
120 | (func fibtail2 [n:Int a:Int b:Int] [Int]
121 | (if (z? $n) $a (if (one? $n) $b (recall (-- $n) $b (+ $a $b)))))
122 |
123 | (bench 100 (fibtail2 50 0 1))
124 | [149 115]
125 | ```
126 |
127 | #### dots
128 | `.` may be used to shift arguments to the left of the target syntactically.
129 |
130 | ```
131 | (1.+ 2)
132 | [3]
133 | ```
134 |
135 | ### multimethods
136 | Functions are upgraded to multimethods as soon as multiple definitions share the same name.
137 | Multimethods delegate to the most specific applicable function, this makes them somewhat more expensive to call.
138 |
139 | ```
140 | (func foo [] [String] "n/a")
141 | (func foo [_:Int] [String] "Int")
142 | (func foo [_:Any] [String] "Any")
143 |
144 | (foo 42)
145 | ["Int"]
146 |
147 | (foo t)
148 | ["Int" "Any"]
149 |
150 | (foo)
151 | ["Int" "Any" "n/a"]
152 | ```
153 |
154 | ### booleans
155 | Every value has a boolean representation; most are true, but integers are false when zero, strings and stacks when empty etc.
156 |
157 | `and` returns the first argument if false, else the last.
158 |
159 | ```
160 | (and 0 t)
161 | [0]
162 |
163 | (and t 42)
164 | [0 42]
165 | ```
166 |
167 | `or` returns the first argument if true, else the last.
168 |
169 | ```
170 | (or 42 f)
171 | [42]
172 |
173 | (or f 42)
174 | [42 42]
175 | ```
176 |
177 | `not`returns `t` if the argument is false, else `f`.
178 |
179 | ```
180 | (not 0)
181 | [t]
182 |
183 | (not 42)
184 | [t f]
185 | ```
186 |
187 | ### strings
188 | String literals are enclosed in double quotes.
189 |
190 | ```
191 | "foo"
192 | ["foo"]
193 | ```
194 |
195 | ### characters
196 | Character literals are prefixed with `\`.
197 |
198 | ```
199 | \a
200 | [\a]
201 | ```
202 |
203 | ### quotes
204 | Forms may be quoted by prefixing with `'`.
205 |
206 | ```
207 | 'foo '(x y z)
208 | ['foo '(x y z)]
209 | ```
210 | `,` may be used to splice values into quoted expressions.
211 |
212 | ```
213 | (let [foo 42] '[,$foo])
214 | ['[42]]
215 | ```
216 | Splicing multiple values is just as easy.
217 |
218 | ```
219 | (let [foo [1 2 3]] '[,(splat $foo)])
220 | ['[1 2 3]]
221 | ```
222 |
223 | ### pairs
224 | Pairs may be formed using `:`.
225 |
226 | ```
227 | 1:2
228 | [1:2]
229 | ```
230 |
231 | ### iterators
232 | `for` may be used to iterate any sequence.
233 |
234 | ```
235 | (for 3)
236 | [0 1 2]
237 | ```
238 |
239 | `:` may be used to bind the current value within the loop body.
240 |
241 | ```
242 | (for c:"foo" $c)
243 | [\f \o \o]
244 | ```
245 |
246 | `map` may be used to transform sequences.
247 |
248 | ```
249 | (map &++ [1 2 3])
250 | [Iter]
251 |
252 | (splat _)
253 | [2 3 4]
254 | ```
255 |
256 | ### continuations
257 | The current continuation may be captured using `suspend` and evaluated using `restore`.
258 |
259 | ```
260 | (suspend "was here") 42
261 | [Cont(2) "was here"]
262 |
263 | d (restore _)
264 | [42]
265 | ```
266 |
267 | ### todo
268 | - add macros
269 |
--------------------------------------------------------------------------------
/SwiftiesREPL.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 52;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 86A47DFE26B7377300DFE052 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86A47DFD26B7377300DFE052 /* main.swift */; };
11 | 86A47E0C26B749C700DFE052 /* Swifties in Frameworks */ = {isa = PBXBuildFile; productRef = 86A47E0B26B749C700DFE052 /* Swifties */; };
12 | /* End PBXBuildFile section */
13 |
14 | /* Begin PBXCopyFilesBuildPhase section */
15 | 86A47DF826B7377300DFE052 /* CopyFiles */ = {
16 | isa = PBXCopyFilesBuildPhase;
17 | buildActionMask = 2147483647;
18 | dstPath = /usr/share/man/man1/;
19 | dstSubfolderSpec = 0;
20 | files = (
21 | );
22 | runOnlyForDeploymentPostprocessing = 1;
23 | };
24 | /* End PBXCopyFilesBuildPhase section */
25 |
26 | /* Begin PBXFileReference section */
27 | 86A47DFA26B7377300DFE052 /* SwiftiesREPL */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SwiftiesREPL; sourceTree = BUILT_PRODUCTS_DIR; };
28 | 86A47DFD26B7377300DFE052 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
29 | 86D48D8C26BC39E100704F7D /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
30 | /* End PBXFileReference section */
31 |
32 | /* Begin PBXFrameworksBuildPhase section */
33 | 86A47DF726B7377300DFE052 /* Frameworks */ = {
34 | isa = PBXFrameworksBuildPhase;
35 | buildActionMask = 2147483647;
36 | files = (
37 | 86A47E0C26B749C700DFE052 /* Swifties in Frameworks */,
38 | );
39 | runOnlyForDeploymentPostprocessing = 0;
40 | };
41 | /* End PBXFrameworksBuildPhase section */
42 |
43 | /* Begin PBXGroup section */
44 | 86A47DF126B7377300DFE052 = {
45 | isa = PBXGroup;
46 | children = (
47 | 86D48D8C26BC39E100704F7D /* README.md */,
48 | 86A47DFC26B7377300DFE052 /* SwiftiesREPL */,
49 | 86A47DFB26B7377300DFE052 /* Products */,
50 | );
51 | sourceTree = "";
52 | };
53 | 86A47DFB26B7377300DFE052 /* Products */ = {
54 | isa = PBXGroup;
55 | children = (
56 | 86A47DFA26B7377300DFE052 /* SwiftiesREPL */,
57 | );
58 | name = Products;
59 | sourceTree = "";
60 | };
61 | 86A47DFC26B7377300DFE052 /* SwiftiesREPL */ = {
62 | isa = PBXGroup;
63 | children = (
64 | 86A47DFD26B7377300DFE052 /* main.swift */,
65 | );
66 | path = SwiftiesREPL;
67 | sourceTree = "";
68 | };
69 | /* End PBXGroup section */
70 |
71 | /* Begin PBXNativeTarget section */
72 | 86A47DF926B7377300DFE052 /* SwiftiesREPL */ = {
73 | isa = PBXNativeTarget;
74 | buildConfigurationList = 86A47E0126B7377300DFE052 /* Build configuration list for PBXNativeTarget "SwiftiesREPL" */;
75 | buildPhases = (
76 | 86A47DF626B7377300DFE052 /* Sources */,
77 | 86A47DF726B7377300DFE052 /* Frameworks */,
78 | 86A47DF826B7377300DFE052 /* CopyFiles */,
79 | );
80 | buildRules = (
81 | );
82 | dependencies = (
83 | );
84 | name = SwiftiesREPL;
85 | packageProductDependencies = (
86 | 86A47E0B26B749C700DFE052 /* Swifties */,
87 | );
88 | productName = SwiftiesREPL;
89 | productReference = 86A47DFA26B7377300DFE052 /* SwiftiesREPL */;
90 | productType = "com.apple.product-type.tool";
91 | };
92 | /* End PBXNativeTarget section */
93 |
94 | /* Begin PBXProject section */
95 | 86A47DF226B7377300DFE052 /* Project object */ = {
96 | isa = PBXProject;
97 | attributes = {
98 | LastSwiftUpdateCheck = 1240;
99 | LastUpgradeCheck = 1250;
100 | TargetAttributes = {
101 | 86A47DF926B7377300DFE052 = {
102 | CreatedOnToolsVersion = 12.4;
103 | };
104 | };
105 | };
106 | buildConfigurationList = 86A47DF526B7377300DFE052 /* Build configuration list for PBXProject "SwiftiesREPL" */;
107 | compatibilityVersion = "Xcode 9.3";
108 | developmentRegion = en;
109 | hasScannedForEncodings = 0;
110 | knownRegions = (
111 | en,
112 | Base,
113 | );
114 | mainGroup = 86A47DF126B7377300DFE052;
115 | packageReferences = (
116 | 86A47E0A26B749C700DFE052 /* XCRemoteSwiftPackageReference "swifties" */,
117 | );
118 | productRefGroup = 86A47DFB26B7377300DFE052 /* Products */;
119 | projectDirPath = "";
120 | projectRoot = "";
121 | targets = (
122 | 86A47DF926B7377300DFE052 /* SwiftiesREPL */,
123 | );
124 | };
125 | /* End PBXProject section */
126 |
127 | /* Begin PBXSourcesBuildPhase section */
128 | 86A47DF626B7377300DFE052 /* Sources */ = {
129 | isa = PBXSourcesBuildPhase;
130 | buildActionMask = 2147483647;
131 | files = (
132 | 86A47DFE26B7377300DFE052 /* main.swift in Sources */,
133 | );
134 | runOnlyForDeploymentPostprocessing = 0;
135 | };
136 | /* End PBXSourcesBuildPhase section */
137 |
138 | /* Begin XCBuildConfiguration section */
139 | 86A47DFF26B7377300DFE052 /* Debug */ = {
140 | isa = XCBuildConfiguration;
141 | buildSettings = {
142 | ALWAYS_SEARCH_USER_PATHS = NO;
143 | CLANG_ANALYZER_NONNULL = YES;
144 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
145 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
146 | CLANG_CXX_LIBRARY = "libc++";
147 | CLANG_ENABLE_MODULES = YES;
148 | CLANG_ENABLE_OBJC_ARC = YES;
149 | CLANG_ENABLE_OBJC_WEAK = YES;
150 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
151 | CLANG_WARN_BOOL_CONVERSION = YES;
152 | CLANG_WARN_COMMA = YES;
153 | CLANG_WARN_CONSTANT_CONVERSION = YES;
154 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
155 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
156 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
157 | CLANG_WARN_EMPTY_BODY = YES;
158 | CLANG_WARN_ENUM_CONVERSION = YES;
159 | CLANG_WARN_INFINITE_RECURSION = YES;
160 | CLANG_WARN_INT_CONVERSION = YES;
161 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
162 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
163 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
164 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
165 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
166 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
167 | CLANG_WARN_STRICT_PROTOTYPES = YES;
168 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
169 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
170 | CLANG_WARN_UNREACHABLE_CODE = YES;
171 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
172 | COPY_PHASE_STRIP = NO;
173 | DEBUG_INFORMATION_FORMAT = dwarf;
174 | ENABLE_STRICT_OBJC_MSGSEND = YES;
175 | ENABLE_TESTABILITY = YES;
176 | GCC_C_LANGUAGE_STANDARD = gnu11;
177 | GCC_DYNAMIC_NO_PIC = NO;
178 | GCC_NO_COMMON_BLOCKS = YES;
179 | GCC_OPTIMIZATION_LEVEL = 0;
180 | GCC_PREPROCESSOR_DEFINITIONS = (
181 | "DEBUG=1",
182 | "$(inherited)",
183 | );
184 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
185 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
186 | GCC_WARN_UNDECLARED_SELECTOR = YES;
187 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
188 | GCC_WARN_UNUSED_FUNCTION = YES;
189 | GCC_WARN_UNUSED_VARIABLE = YES;
190 | MACOSX_DEPLOYMENT_TARGET = 11.1;
191 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
192 | MTL_FAST_MATH = YES;
193 | ONLY_ACTIVE_ARCH = YES;
194 | SDKROOT = macosx;
195 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
196 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
197 | SWIFT_VERSION = 5.0;
198 | };
199 | name = Debug;
200 | };
201 | 86A47E0026B7377300DFE052 /* Release */ = {
202 | isa = XCBuildConfiguration;
203 | buildSettings = {
204 | ALWAYS_SEARCH_USER_PATHS = NO;
205 | CLANG_ANALYZER_NONNULL = YES;
206 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
207 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
208 | CLANG_CXX_LIBRARY = "libc++";
209 | CLANG_ENABLE_MODULES = YES;
210 | CLANG_ENABLE_OBJC_ARC = YES;
211 | CLANG_ENABLE_OBJC_WEAK = YES;
212 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
213 | CLANG_WARN_BOOL_CONVERSION = YES;
214 | CLANG_WARN_COMMA = YES;
215 | CLANG_WARN_CONSTANT_CONVERSION = YES;
216 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
217 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
218 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
219 | CLANG_WARN_EMPTY_BODY = YES;
220 | CLANG_WARN_ENUM_CONVERSION = YES;
221 | CLANG_WARN_INFINITE_RECURSION = YES;
222 | CLANG_WARN_INT_CONVERSION = YES;
223 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
224 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
225 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
226 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
227 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
228 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
229 | CLANG_WARN_STRICT_PROTOTYPES = YES;
230 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
231 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
232 | CLANG_WARN_UNREACHABLE_CODE = YES;
233 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
234 | COPY_PHASE_STRIP = NO;
235 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
236 | ENABLE_NS_ASSERTIONS = NO;
237 | ENABLE_STRICT_OBJC_MSGSEND = YES;
238 | GCC_C_LANGUAGE_STANDARD = gnu11;
239 | GCC_NO_COMMON_BLOCKS = YES;
240 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
241 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
242 | GCC_WARN_UNDECLARED_SELECTOR = YES;
243 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
244 | GCC_WARN_UNUSED_FUNCTION = YES;
245 | GCC_WARN_UNUSED_VARIABLE = YES;
246 | MACOSX_DEPLOYMENT_TARGET = 11.1;
247 | MTL_ENABLE_DEBUG_INFO = NO;
248 | MTL_FAST_MATH = YES;
249 | SDKROOT = macosx;
250 | SWIFT_COMPILATION_MODE = wholemodule;
251 | SWIFT_OPTIMIZATION_LEVEL = "-O";
252 | SWIFT_VERSION = 5.0;
253 | };
254 | name = Release;
255 | };
256 | 86A47E0226B7377300DFE052 /* Debug */ = {
257 | isa = XCBuildConfiguration;
258 | buildSettings = {
259 | CODE_SIGN_IDENTITY = "-";
260 | CODE_SIGN_STYLE = Automatic;
261 | PRODUCT_NAME = "$(TARGET_NAME)";
262 | SWIFT_VERSION = 5.0;
263 | };
264 | name = Debug;
265 | };
266 | 86A47E0326B7377300DFE052 /* Release */ = {
267 | isa = XCBuildConfiguration;
268 | buildSettings = {
269 | CODE_SIGN_IDENTITY = "-";
270 | CODE_SIGN_STYLE = Automatic;
271 | PRODUCT_NAME = "$(TARGET_NAME)";
272 | SWIFT_VERSION = 5.0;
273 | };
274 | name = Release;
275 | };
276 | /* End XCBuildConfiguration section */
277 |
278 | /* Begin XCConfigurationList section */
279 | 86A47DF526B7377300DFE052 /* Build configuration list for PBXProject "SwiftiesREPL" */ = {
280 | isa = XCConfigurationList;
281 | buildConfigurations = (
282 | 86A47DFF26B7377300DFE052 /* Debug */,
283 | 86A47E0026B7377300DFE052 /* Release */,
284 | );
285 | defaultConfigurationIsVisible = 0;
286 | defaultConfigurationName = Release;
287 | };
288 | 86A47E0126B7377300DFE052 /* Build configuration list for PBXNativeTarget "SwiftiesREPL" */ = {
289 | isa = XCConfigurationList;
290 | buildConfigurations = (
291 | 86A47E0226B7377300DFE052 /* Debug */,
292 | 86A47E0326B7377300DFE052 /* Release */,
293 | );
294 | defaultConfigurationIsVisible = 0;
295 | defaultConfigurationName = Release;
296 | };
297 | /* End XCConfigurationList section */
298 |
299 | /* Begin XCRemoteSwiftPackageReference section */
300 | 86A47E0A26B749C700DFE052 /* XCRemoteSwiftPackageReference "swifties" */ = {
301 | isa = XCRemoteSwiftPackageReference;
302 | repositoryURL = "https://github.com/codr7/swifties.git";
303 | requirement = {
304 | branch = main;
305 | kind = branch;
306 | };
307 | };
308 | /* End XCRemoteSwiftPackageReference section */
309 |
310 | /* Begin XCSwiftPackageProductDependency section */
311 | 86A47E0B26B749C700DFE052 /* Swifties */ = {
312 | isa = XCSwiftPackageProductDependency;
313 | package = 86A47E0A26B749C700DFE052 /* XCRemoteSwiftPackageReference "swifties" */;
314 | productName = Swifties;
315 | };
316 | /* End XCSwiftPackageProductDependency section */
317 | };
318 | rootObject = 86A47DF226B7377300DFE052 /* Project object */;
319 | }
320 |
--------------------------------------------------------------------------------