Created
March 13, 2017 22:23
-
-
Save oleksii-demedetskyi/9a2089b9fed6266517687d73fd9e4d6b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//: 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