Virtual Machine used to represent, run, and maintain the state of programs for Scratch 3.0
Find a file
Christopher Willis-Ford e8089cd2a5 Don't check for methods on window.native
It turns out that `window.native.someMethod` always evaluates as
`undefined` -- even if calling that method would succeed. This change
removes checks for such methods so that the WeDo2 blocks can work.
Note that the hat blocks are still unimplemented, and some assumptions
are made about the form that arguments and `util` will take.
2016-05-03 09:48:26 -07:00
src Don't check for methods on window.native 2016-05-03 09:48:26 -07: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 All tests passing 2016-04-26 09:54:14 -04:00
README.md AST create / change / move / delete from blockly 2016-04-26 09:49:52 -04:00
TRADEMARK Initial commit 2016-03-28 12:53:44 -04:00
vm.js Recompile 2016-05-03 11:26:53 -04:00
vm.min.js Recompile 2016-05-03 11:26:53 -04:00
webpack.config.js AST create / change / move / delete from blockly 2016-04-26 09:49:52 -04:00

scratch-vm

Build Status

Installation

npm install scratch-vm

Setup

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

// Block events

// UI events

// Listen for events

Standalone Build

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

Abstract Syntax Tree

Overview

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
make benchmark