├── 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 | --------------------------------------------------------------------------------