import { VM } from "./vm"
import gibberish from "./audio/gibberish"
import waa from "./audio/waa"
import stdlib from "./ext/stdlib"
import random from "./ext/random"
import debug from "./ext/debug"
import compatibility from "./ext/compatibility"import { VM } from "./vm"
import gibberish from "./audio/gibberish"
import waa from "./audio/waa"
import stdlib from "./ext/stdlib"
import random from "./ext/random"
import debug from "./ext/debug"
import compatibility from "./ext/compatibility"The main purpose of the virtual machine is to run processes concurrently.
It holds a commands object (that maps instruction names to functions)
and schedules a collection of processes. Each process has an values stack
and operations stack (to be executed).
export function initGibberish (Gibberish, options) {
return init(gibberish, Gibberish, options)
}
export function initWebAudio (context, options) {
return init(waa, context, options)
}the init function creates a vm controlled by Gibberish
export function init (driver, audio, options = {}) {
const { plugins } = optionsCreate the virtual machine
const vm = new VM(options)Install the audio driver
driver(audio, options).start(vm)Include all the commands
vm.addCommands(stdlib)
vm.addCommands(random(options))
vm.addCommands(debug(options))
vm.addCommands(compatibility(options))Add the plugins if any
if (plugins) plugins.forEach(cmds => vm.addCommands(cmds))
return vm
}