• Jump To … +
    asm-llvm.js bcompile.js binterp.js browsercanvas.js bytecode-table.js canvastest.js ccanvas.js crender-styles.js crender.js ctiles.js events.js eventtests.js extensions.js global-es5.js global.js html-escape.js jcompile.js json2.js nodemain.js parse.js render.js render2.js require.js stdlib.js str-escape.js tdop.js tests.js text.js tiles.js tokenize.js top-level.js ts.js write-lua-bytecode.js write-lua-ops.js write-php-bytecode.js write-php-ops.js write-rust-bytecode.js write-rust-ops.js
  • write-lua-ops.js

  • ¶

    Utility to write out the opcode mapping from bytecode-table.js as a Lua file

    Run it under node with the CLI in bin/write-lua-ops.js

    define(['./bytecode-table'], function(bytecode_table) {
        var bops = [];
        while(true) {
            var bc = bytecode_table.for_num(bops.length);
            if (!bc) { break; }
            bops.push(bc);
        }
        var comma = function(i) { return (i < (bops.length-1)) ? ',' : ''; };
        var luaName = function(bc) {
            var name = bc.name.toUpperCase();
            if (name==='2DUP') { return 'DUP2'; }
            return name;
        };
    
        console.log('-- generated by TurtleScript write-lua-ops.js');
        console.log('');
        console.log('local ops = {}');
        console.log('');
  • ¶

    Emit Op enumeration.

        console.log('ops.byname = {');
        bops.forEach(function(bc, i) {
            console.log('  ["' + luaName(bc) + '"] = ' + i + comma(i));
        });
        console.log('}');
        console.log('');
    
        console.log('ops.bynum = {}');
        console.log('');
        console.log('-- invert byname into bynum, and combine both into root export');
        console.log('for name,val in pairs(ops.byname) do');
        console.log('  ops.bynum[val] = name');
        console.log('  ops[name] = val');
        console.log('end');
        console.log('');
    
        console.log('return ops');
    });