Skip to content

Instantly share code, notes, and snippets.

View tjw's full-sized avatar

Timothy J. Wood tjw

View GitHub Profile
func f(code:Void -> Void) {
print("no throw version called")
code()
}
func f<Result>(code:Void throws -> Result) rethrows -> Result {
print("rethrow version called")
return try code()
}
@tjw
tjw / Radar-27365520.swift
Created July 15, 2016 04:04
Radar 27365520
import JavaScriptCore
let ctx = JSGlobalContextCreate(nil)
let trueValue = JSValueMakeBoolean(ctx, true)
// This returns false in both Xcode 7.3.1 and 8.0 b2.
JSValueIsObject(ctx, trueValue)
// This returns true in Xcode 7.3.1, and false in 8.0 b2.
JSValueIsBoolean(ctx, trueValue)
@tjw
tjw / Swift on Pi 3.md
Created August 23, 2016 08:32
Swift on Pi 3
import Foundation
/*
xcrun swift objc-throwing-block.swift
objc-throwing-block.swift:20:13: error: method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C
@objc func access(accessor: Accessor) {}
^
objc-throwing-block.swift:20:30: note: throwing function types cannot be represented in Objective-C
import Foundation
let u = URL(fileURLWithPath: "/tmp/missing-path", isDirectory: true)
let d = FileManager.default.enumerator(at:u, includingPropertiesForKeys: nil, errorHandler: {_,_ in return false})!
print("d \(d)") // --> d <NSURLDirectoryEnumerator: 0x100a01940>
// Crashes, unless the error handler above is replaced with nil
for _ in d {}
@tjw
tjw / instantiate-from-class.swift
Created July 20, 2015 03:29
instantiate-from-class.swift
protocol P {
static var name: String { get }
init(i:Int)
}
class A: P {
static var name: String {
get { return "A" }
}
required init(i:Int) {}
@tjw
tjw / steps.txt
Created October 15, 2017 18:19
Building swift for iOS?
% ./utils/build-script --release-debuginfo --debug-swift
#### hours pass ####
% ../build/Ninja-RelWithDebInfoAssert+swift-DebugAssert/swift-macosx-x86_64/bin/swift -sdk /Applications/Xcode-9.1b2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk -target arm64-apple-ios11.1 /Users/bungi/Desktop/TransitiveAppExtensionAvailable/Example.swift
<unknown>:0: error: unable to load standard library for target 'arm64-apple-ios11.1'
@tjw
tjw / .swift-build-presets
Last active October 16, 2017 19:34
iOS swift preset file
# Trying to get the fastest incremental build times for small changes to the swift compiler.
# This still rebuilds the stdlib on each change to the compiler (no --skip option I see to avoid that).
[preset: ios]
release
debug-swift
ios
skip-build-ios-simulator
skip-test-ios-simulator
skip-build-osx
skip-test-osx
@tjw
tjw / SetPrototype.swift
Created February 14, 2018 23:40
Regression in JSObjectSetPrototype for the global object in a context.
/*
swift SetPrototype.swift
On 10.13.4, the result is 'undefined', but it should be '5'.
*/
import Foundation
import JavaScriptCore
var definition:JSClassDefinition = kJSClassDefinitionEmpty
@tjw
tjw / DispatchWriteSource.m
Created March 28, 2018 22:23
A dispatch write source that is connected to a UNIX domain socket with a full write buffer will fire forever, instead of waiting to fire until there is room in the buffer to write more data.
//
// main.m
// DispatchWriteSource
//
// Created by Timothy J. Wood on 3/27/18.
// Copyright © 2018 The Omni Group. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <unistd.h>