Virtual Machine used to represent, run, and maintain the state of programs for Scratch 3.0
Find a file
Tim Mickel 1ab391281d Merge pull request #48 from tmickel/feature/dev-playground
Add framework for a demo/dev playground; show auto-updating block representation.
2016-06-01 13:16:50 -04:00
playground Update to use syntax highlighting in block explorer 2016-06-01 13:13:52 -04:00
src Add "stack click" event handler to VM 2016-06-01 10:26:06 -04:00
test Updating timer test for timeElapsed 2016-04-26 17:03:22 -04:00
.eslintrc Fix eslint errors 2016-05-02 11:56:52 -07:00
.gitignore Initial commit 2016-04-08 13:10:37 -04:00
.travis.yml Add travis config 2016-04-18 17:22:23 -04:00
LICENSE Initial commit 2016-03-28 12:53:44 -04:00
Makefile All tests passing 2016-04-26 09:54:14 -04:00
package.json Absolute version number for highlightjs dependency 2016-06-01 13:13:52 -04:00
README.md Update README.md 2016-05-17 18:09:15 -07:00
TRADEMARK Initial commit 2016-03-28 12:53:44 -04:00
vm.js Update build for "stack click" 2016-06-01 10:27:11 -04:00
vm.min.js Update build for "stack click" 2016-06-01 10:27:11 -04:00
webpack.config.js AST create / change / move / delete from blockly 2016-04-26 09:49:52 -04:00

scratch-vm

Scratch VM is a library for representing, running, and maintaining the state of computer programs written using Scratch Blocks.

Build Status Dependency Status devDependency Status

Installation

npm install scratch-vm

Setup

var VirtualMachine = require('scratch-vm');
var vm = new VirtualMachine();

// Block events
workspace.addChangeListener(function(e) {
    // Handle "tapping" a block
    if (e instanceof Blockly.Events.Ui && e.element === 'click') {
        var stackBlock = workspace.getBlockById(e.blockId).getRootBlock().id;
        vm.runtime.toggleStack(stackBlock);
    // Otherwise, pass along to the block listener
    } else {
        vm.blockListener(e);
    }
});

// Run threads
vm.runtime.start();

Standalone Build

make build
<script src="/path/to/vm.js"></script>
<script>
    var vm = new window.VirtualMachine();
    // do things
</script>

Abstract Syntax Tree

Overview

The Virtual Machine constructs and maintains the state of an Abstract Syntax Tree (AST) by listening to events emitted by the scratch-blocks workspace via the blockListener. At any time, the current state of the AST can be viewed by inspecting the vm.runtime.blocks object.

Anatomy of a Block

{
    "id": "^1r~63Gdl7;Dh?I*OP3_",
    "opcode": "wedo_motorclockwise",
    "next": null,
    "fields": {
        "DURATION": {
            "name": "DURATION",
            "value": null,
            "blocks": {
                "1?P=eV(OiDY3vMk!24Ip": {
                    "id": "1?P=eV(OiDY3vMk!24Ip",
                    "opcode": "math_number",
                    "next": null,
                    "fields": {
                        "NUM": {
                            "name": "NUM",
                            "value": "10",
                            "blocks": null
                        }
                    }
                }
            }
        },
        "SUBSTACK": {
            "name": "SUBSTACK",
            "value": "@1ln(HsUO4!]*2*%BrE|",
            "blocks": null
        }
    }
}

Testing

make test
make coverage

Donate

We provide Scratch free of charge, and want to keep it that way! Please consider making a donation to support our continued engineering, design, community, and resource development efforts. Donations of any size are appreciated. Thank you!