Skip to content

Instantly share code, notes, and snippets.

@oleksii-demedetskyi
Created March 13, 2017 22:23
Show Gist options
  • Save oleksii-demedetskyi/9a2089b9fed6266517687d73fd9e4d6b to your computer and use it in GitHub Desktop.
Save oleksii-demedetskyi/9a2089b9fed6266517687d73fd9e4d6b to your computer and use it in GitHub Desktop.
//: Playground - noun: a place where people can play
import Cocoa
struct AST {
let declarations: [Statement]
}
enum Statement {
case expression(Expression)
case declaration(Declaration)
case loop(LoopStatement)
case branch(BranchStatement)
case labeled(LabeledStatement)
case controlTransfer(ControlTransferStatement)
case `defer`(DeferStatement)
case `do`(DoStatement)
case compilerControl(CompilerControlStatement)
}
extension Statement {
var isExpression: Bool {
if case .expression = self { return true }
else { return false }
}
var isDeclaration: Bool {
if case .declaration = self { return true }
else { return false }
}
var isLoopStatement: Bool {
if case .loop = self { return true }
else { return false }
}
var isBranchStatement: Bool {
if case .branch = self { return true }
else { return false }
}
var isLabeledStatement: Bool {
if case .labeled = self { return true }
else { return false }
}
var isControlTransferStatement: Bool {
if case .controlTransfer = self { return true }
else { return false }
}
var isDeferStatement: Bool {
if case .defer = self { return true }
else { return false }
}
var isDoStatement: Bool {
if case .do = self { return true }
else { return false }
}
var isCompilerControlStatement: Bool {
if case .compilerControl = self { return true }
else { return false }
}
}
struct Expression {}
struct Declaration {}
struct LoopStatement {}
struct BranchStatement {}
struct LabeledStatement {}
struct ControlTransferStatement {}
struct DeferStatement {}
struct DoStatement {}
struct CompilerControlStatement {}
func numberOfIfs(in ast: AST) -> Int {
return ast.declarations.filter { $0.isBranchStatement }.count
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment