Spaces:
Running
Running
File size: 2,787 Bytes
30c32c8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
/**
* @fileoverview Common intermediates shared amongst parts of the compiler.
*/
/**
* An IntermediateScript describes a single script.
* Scripts do not necessarily have hats.
*/
class IntermediateScript {
constructor () {
/**
* The ID of the top block of this script.
* @type {string}
*/
this.topBlockId = null;
/**
* List of nodes that make up this script.
* @type {Array|null}
*/
this.stack = null;
/**
* Whether this script is a procedure.
* @type {boolean}
*/
this.isProcedure = false;
/**
* This procedure's code, if any.
* @type {string}
*/
this.procedureCode = '';
/**
* List of names of arguments accepted by this function, if it is a procedure.
* @type {string[]}
*/
this.arguments = [];
/**
* Whether this script should be run in warp mode.
* @type {boolean}
*/
this.isWarp = false;
/**
* pm: Whether this script should use dangerous optimizations.
* @type {boolean}
*/
this.isOptimized = false;
/**
* pm: An object containing stuff for optimization.
* @type {object}
*/
this.optimizationUtil = {};
/**
* Whether this script can `yield`
* If false, this script will be compiled as a regular JavaScript function (function)
* If true, this script will be compiled as a generator function (function*)
* @type {boolean}
*/
this.yields = true;
/**
* Whether this script should use the "warp timer"
* @type {boolean}
*/
this.warpTimer = false;
/**
* List of procedure IDs that this script needs.
* @readonly
*/
this.dependedProcedures = [];
/**
* Cached result of compiling this script.
* @type {Function|null}
*/
this.cachedCompileResult = null;
/**
* Whether the top block of this script is an executable hat.
* @type {boolean}
*/
this.executableHat = false;
}
}
/**
* An IntermediateRepresentation contains scripts.
*/
class IntermediateRepresentation {
constructor () {
/**
* The entry point of this IR.
* @type {IntermediateScript}
*/
this.entry = null;
/**
* Maps procedure variants to their intermediate script.
* @type {Object.<string, IntermediateScript>}
*/
this.procedures = {};
}
}
module.exports = {
IntermediateScript,
IntermediateRepresentation
};
|