soiz1's picture
Upload 811 files
30c32c8 verified
raw
history blame
2.79 kB
/**
* @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
};