E.num/Sources/E/Control.swift

50 lines
1.2 KiB
Swift

//
// Control.swift
// E
//
// Created by Zach Eriksen on 9/29/20.
//
public enum Control {
case `if`(Bool, Function)
case `else`(Bool, Function)
case ifElse(Bool, Function, Function)
case loop(ClosedRange<Int>, Function)
case forEach([Variable], Function)
case forever(Function)
}
public extension Control {
func run() {
switch self {
case .if(let condition, let function):
if condition {
function()
}
case .else(let condition, let function):
if !condition {
function()
}
case .ifElse(let condition, let trueFunction, let falseFunction):
if condition {
trueFunction()
} else {
falseFunction()
}
case .loop(let range, let function):
for value in range {
function.run(.int(value))
}
case .forEach(let values, let function):
for value in values {
function.run(value)
}
case .forever(let function):
while true {
function()
}
}
}
}