|
| 1 | +// @ts-check |
| 2 | + |
| 3 | +/** |
| 4 | + * @fileoverview Common enums shared amongst parts of the compiler. |
| 5 | + */ |
| 6 | + |
| 7 | + |
| 8 | +/** |
| 9 | + * Enum for the type of the value that is returned by reporter blocks and stored in constants. |
| 10 | + * |
| 11 | + * At compile time, often we don't know exactly type a value will be but we can tell it must be one of a |
| 12 | + * set of types. For this reason, the number value of each type represents a possibility space, where set |
| 13 | + * bits indicate that their corropoding type *could* be encountered at runtime. |
| 14 | + * For example, a type of InputType.NUMBER | InputType.STRING means the value will be either a number or |
| 15 | + * a string at runtime, the compiler can't tell which, but we do know that it's not a boolean or NaN as |
| 16 | + * those bits are not set. |
| 17 | + * |
| 18 | + * @readonly |
| 19 | + * @enum {number} |
| 20 | + */ |
| 21 | +const InputType = { |
| 22 | + /** The value Infinity */ |
| 23 | + NUMBER_POS_INF: 0x001, |
| 24 | + /** Any natural number */ |
| 25 | + NUMBER_POS_INT: 0x002, |
| 26 | + /** Any positive fractional number, excluding integers. */ |
| 27 | + NUMBER_POS_FRACT: 0x004, |
| 28 | + /** Any positive number excluding 0 and Infinity. Equal to NUMBER_POS_INT | NUMBER_POS_FRACT */ |
| 29 | + NUMBER_POS_REAL: 0x006, |
| 30 | + /** The value 0 */ |
| 31 | + NUMBER_ZERO: 0x008, |
| 32 | + /** The value -0 */ |
| 33 | + NUMBER_NEG_ZERO: 0x010, |
| 34 | + /** Any negitive integer excluding -0 */ |
| 35 | + NUMBER_NEG_INT: 0x020, |
| 36 | + /** Any negitive fractional number, excluding integers. */ |
| 37 | + NUMBER_NEG_FRACT: 0x040, |
| 38 | + /** Any negitive number excluding -0 and -Infinity. Equal to NUMBER_NEG_INT | NUMBER_NEG_FRACT */ |
| 39 | + NUMBER_NEG_REAL: 0x060, |
| 40 | + /** The value -Infinity */ |
| 41 | + NUMBER_NEG_INF: 0x080, |
| 42 | + |
| 43 | + /** The value NaN */ |
| 44 | + NUMBER_NAN: 0x100, |
| 45 | + |
| 46 | + /** Either 0 or -0. Equal to NUMBER_ZERO | NUMBER_NEG_ZERO */ |
| 47 | + NUMBER_ANY_ZERO: 0x018, |
| 48 | + /** Either Infinity or -Infinity. Equal to NUMBER_POS_INF | NUMBER_NEG_INF */ |
| 49 | + NUMBER_INF: 0x081, |
| 50 | + /** Any positive number, excluding 0. Equal to NUMBER_POS_REAL | NUMBER_POS_INF */ |
| 51 | + NUMBER_POS: 0x007, |
| 52 | + /** Any negitive number, excluding -0. Equal to NUMBER_NEG_REAL | NUMBER_NEG_INF */ |
| 53 | + NUMBER_NEG: 0x0E0, |
| 54 | + /** Any whole number. Equal to NUMBER_POS_INT | NUMBER_ZERO */ |
| 55 | + NUMBER_WHOLE: 0x00A, |
| 56 | + /** Any integer. Equal to NUMBER_POS_INT | NUMBER_ANY_ZERO | NUMBER_NEG_INT */ |
| 57 | + NUMBER_INT: 0x03A, |
| 58 | + /** Any number that works as an array index. Equal to NUMBER_INT | NUMBER_INF | NUMBER_NAN */ |
| 59 | + NUMBER_INDEX: 0x1BB, |
| 60 | + /** Any fractional non-integer numbers. Equal to NUMBER_POS_FRACT | NUMBER_NEG_FRACT */ |
| 61 | + NUMBER_FRACT: 0x44, |
| 62 | + /** Any real number. Equal to NUMBER_POS_REAL | NUMBER_ANY_ZERO | NUMBER_NEG_REAL */ |
| 63 | + NUMBER_REAL: 0x07E, |
| 64 | + |
| 65 | + /** Any number, excluding NaN. Equal to NUMBER_REAL | NUMBER_INF */ |
| 66 | + NUMBER: 0x0FF, |
| 67 | + /** Any number, including NaN. Equal to NUMBER | NUMBER_NAN */ |
| 68 | + NUMBER_OR_NAN: 0x1FF, |
| 69 | + /** Anything that can be interperated as a number. Equal to NUMBER | STRING_NUM | BOOLEAN */ |
| 70 | + NUMBER_INTERPRETABLE: 0x12FF, |
| 71 | + |
| 72 | + /** Any string which as a non-NaN neumeric interpretation, excluding ''. */ |
| 73 | + STRING_NUM: 0x200, |
| 74 | + /** Any string which has no non-NaN neumeric interpretation, including ''. */ |
| 75 | + STRING_NAN: 0x400, |
| 76 | + /** Either of the strings 'true' or 'false'. */ |
| 77 | + STRING_BOOLEAN: 0x800, |
| 78 | + |
| 79 | + /** Any string. Equal to STRING_NUM | STRING_NAN | STRING_BOOLEAN */ |
| 80 | + STRING: 0xE00, |
| 81 | + |
| 82 | + /** Any boolean. */ |
| 83 | + BOOLEAN: 0x1000, |
| 84 | + /** Any input that can be interperated as a boolean. Equal to BOOLEAN | STRING_BOOLEAN */ |
| 85 | + BOOLEAN_INTERPRETABLE: 0x1800, |
| 86 | + |
| 87 | + /** Any value type (a type a scratch variable can hold). Equal to NUMBER_OR_NAN | STRING | BOOLEAN */ |
| 88 | + ANY: 0x1FFF, |
| 89 | + |
| 90 | + /** An array of values in the form [R, G, B] */ |
| 91 | + COLOR: 0x2000 |
| 92 | +}; |
| 93 | + |
| 94 | +/** |
| 95 | + * Enum for the opcodes of the stackable blocks used in the IR AST. |
| 96 | + * @readonly |
| 97 | + * @enum {string} |
| 98 | + */ |
| 99 | +const StackOpcode = { |
| 100 | + NOP: 'noop', |
| 101 | + |
| 102 | + ADDON_CALL: 'addons.call', |
| 103 | + DEBUGGER: 'tw.debugger', |
| 104 | + VISUAL_REPORT: 'visualReport', |
| 105 | + COMPATIBILITY_LAYER: 'compat', |
| 106 | + |
| 107 | + HAT_EDGE: 'hat.edge', |
| 108 | + HAT_PREDICATE: 'hat.predicate', |
| 109 | + |
| 110 | + CONTROL_IF_ELSE: 'control.if', |
| 111 | + CONTROL_CLONE_CREATE: 'control.createClone', |
| 112 | + CONTROL_CLONE_DELETE: 'control.deleteClone', |
| 113 | + CONTROL_WHILE: 'control.while', |
| 114 | + CONTROL_FOR: 'control.for', |
| 115 | + CONTROL_REPEAT: 'control.repeat', |
| 116 | + CONTROL_STOP_ALL: 'control.stopAll', |
| 117 | + CONTROL_STOP_OTHERS: 'control.stopOthers', |
| 118 | + CONTROL_STOP_SCRIPT: 'control.stopScript', |
| 119 | + CONTROL_WAIT: 'control.wait', |
| 120 | + CONTROL_WAIT_UNTIL: 'control.waitUntil', |
| 121 | + CONTROL_CLEAR_COUNTER: 'control.counterClear', |
| 122 | + CONTORL_INCR_COUNTER: 'control.counterIncr', |
| 123 | + |
| 124 | + LIST_ADD: 'list.add', |
| 125 | + LIST_INSERT: 'list.instert', |
| 126 | + LIST_REPLACE: 'list.replace', |
| 127 | + LIST_DELETE_ALL: 'list.deleteAll', |
| 128 | + LIST_DELETE: 'list.delete', |
| 129 | + LIST_SHOW: 'list.show', |
| 130 | + LIST_HIDE: 'list.hide', |
| 131 | + |
| 132 | + VAR_SET: 'var.set', |
| 133 | + VAR_SHOW: 'var.show', |
| 134 | + VAR_HIDE: 'var.hide', |
| 135 | + |
| 136 | + EVENT_BROADCAST: 'event.broadcast', |
| 137 | + EVENT_BROADCAST_AND_WAIT: 'event.broadcastAndWait', |
| 138 | + |
| 139 | + LOOKS_EFFECT_SET: 'looks.setEffect', |
| 140 | + LOOKS_EFFECT_CHANGE: 'looks.changeEffect', |
| 141 | + LOOKS_EFFECT_CLEAR: 'looks.clearEffects', |
| 142 | + LOOKS_SIZE_CHANGE: 'looks.changeSize', |
| 143 | + LOOKS_SIZE_SET: 'looks.setSize', |
| 144 | + LOOKS_LAYER_FORWARD: 'looks.forwardLayers', |
| 145 | + LOOKS_LAYER_BACKWARD: 'looks.backwardLayers', |
| 146 | + LOOKS_LAYER_FRONT: 'looks.goToFront', |
| 147 | + LOOKS_LAYER_BACK: 'looks.goToBack', |
| 148 | + LOOKS_HIDE: 'looks.hide', |
| 149 | + LOOKS_SHOW: 'looks.show', |
| 150 | + LOOKS_BACKDROP_NEXT: 'looks.nextBackdrop', |
| 151 | + LOOKS_BACKDROP_SET: 'looks.switchBackdrop', |
| 152 | + LOOKS_COSTUME_NEXT: 'looks.nextCostume', |
| 153 | + LOOKS_COSTUME_SET: 'looks.switchCostume', |
| 154 | + |
| 155 | + MOTION_X_SET: 'motion.setX', |
| 156 | + MOTION_X_CHANGE: 'motion.changeX', |
| 157 | + MOTION_Y_SET: 'motion.setY', |
| 158 | + MOTION_Y_CHANGE: 'motion.changeY', |
| 159 | + MOTION_XY_SET: 'motion.setXY', |
| 160 | + MOTION_IF_ON_EDGE_BOUNCE: 'motion.ifOnEdgeBounce', |
| 161 | + MOTION_STEP: 'motion.step', |
| 162 | + MOTION_ROTATION_STYLE_SET: 'motion.setRotationStyle', |
| 163 | + MOTION_DIRECTION_SET: 'motion.setDirection', |
| 164 | + |
| 165 | + PEN_UP: 'pen.up', |
| 166 | + PEN_DOWN: 'pen.down', |
| 167 | + PEN_CLEAR: 'pen.clear', |
| 168 | + PEN_COLOR_PARAM_SET: 'pen.setParam', |
| 169 | + PEN_COLOR_PARAM_CHANGE: 'pen.changeParam', |
| 170 | + PEN_COLOR_HUE_CHANGE_LEGACY: 'pen.legacyChangeHue', |
| 171 | + PEN_COLOR_HUE_SET_LEGACY: 'pen_setPenHueToNumber', |
| 172 | + PEN_COLOR_SHADE_CHANGE_LEGACY: 'pen.legacyChangeShade', |
| 173 | + PEN_COLOR_SHADE_SET_LEGACY: 'pen.legacySetShade', |
| 174 | + PEN_COLOR_SET: 'pen.setColor', |
| 175 | + PEN_SIZE_SET: 'pen.setSize', |
| 176 | + PEN_SIZE_CHANGE: 'pen.changeSize', |
| 177 | + PEN_STAMP: 'pen.stamp', |
| 178 | + |
| 179 | + SENSING_TIMER_RESET: 'timer.reset', |
| 180 | + |
| 181 | + PROCEDURE_RETURN: 'procedures.return', |
| 182 | + PROCEDURE_CALL: 'procedures.call' |
| 183 | +}; |
| 184 | + |
| 185 | +/** |
| 186 | + * Enum for the opcodes of the reporter blocks used in the IR AST. |
| 187 | + * @readonly |
| 188 | + * @enum {string} |
| 189 | + */ |
| 190 | +const InputOpcode = { |
| 191 | + NOP: 'noop', |
| 192 | + |
| 193 | + ADDON_CALL: 'addons.call', |
| 194 | + CONSTANT: 'constant', |
| 195 | + |
| 196 | + CAST_NUMBER: 'cast.toNumber', |
| 197 | + CAST_NUMBER_INDEX: 'cast.toInteger', |
| 198 | + CAST_NUMBER_OR_NAN: 'cast.toNumberOrNaN', |
| 199 | + CAST_STRING: 'cast.toString', |
| 200 | + CAST_BOOLEAN: 'cast.toBoolean', |
| 201 | + CAST_COLOR: 'cast.toColor', |
| 202 | + |
| 203 | + COMPATIBILITY_LAYER: 'compat', |
| 204 | + |
| 205 | + LOOKS_BACKDROP_NUMBER: 'looks.backdropNumber', |
| 206 | + LOOKS_BACKDROP_NAME: 'looks.backdropName', |
| 207 | + LOOKS_COSTUME_NUMBER: 'looks.costumeNumber', |
| 208 | + LOOKS_COSTUME_NAME: 'looks.costumeName', |
| 209 | + LOOKS_SIZE_GET: 'looks.size', |
| 210 | + |
| 211 | + VAR_GET: 'var.get', |
| 212 | + |
| 213 | + LIST_GET: 'list.get', |
| 214 | + LIST_LENGTH: 'list.length', |
| 215 | + LIST_CONTAINS: 'list.contains', |
| 216 | + LIST_INDEX_OF: 'list.indexOf', |
| 217 | + LIST_CONTENTS: 'list.contents', |
| 218 | + |
| 219 | + MOTION_X_GET: 'motion.x', |
| 220 | + MOTION_Y_GET: 'motion.y', |
| 221 | + MOTION_DIRECTION_GET: 'motion.direction', |
| 222 | + |
| 223 | + OP_ADD: 'op.add', |
| 224 | + OP_AND: 'op.and', |
| 225 | + OP_CONTAINS: 'op.contains', |
| 226 | + OP_DIVIDE: 'op.divide', |
| 227 | + OP_EQUALS: 'op.equals', |
| 228 | + OP_GREATER: 'op.greater', |
| 229 | + OP_LESS: 'op.less', |
| 230 | + OP_JOIN: 'op.join', |
| 231 | + OP_LENGTH: 'op.length', |
| 232 | + OP_LETTER_OF: 'op.letterOf', |
| 233 | + OP_ABS: 'op.abs', |
| 234 | + OP_FLOOR: 'op.floor', |
| 235 | + OP_CEILING: 'op.ceiling', |
| 236 | + OP_SQRT: 'op.sqrt', |
| 237 | + OP_SIN: 'op.sin', |
| 238 | + OP_COS: 'op.cos', |
| 239 | + OP_TAN: 'op.tan', |
| 240 | + OP_ASIN: 'op.asin', |
| 241 | + OP_ACOS: 'op.acos', |
| 242 | + OP_ATAN: 'op.atan', |
| 243 | + OP_LOG_E: 'op.ln', |
| 244 | + OP_LOG_10: 'op.log', |
| 245 | + OP_POW_E: 'op.e^', |
| 246 | + OP_POW_10: 'op.10^', |
| 247 | + OP_MOD: 'op.mod', |
| 248 | + OP_MULTIPLY: 'op.multiply', |
| 249 | + OP_NOT: 'op.not', |
| 250 | + OP_OR: 'op.or', |
| 251 | + OP_RANDOM: 'op.random', |
| 252 | + OP_ROUND: 'op.round', |
| 253 | + OP_SUBTRACT: 'op.subtract', |
| 254 | + |
| 255 | + SENSING_ANSWER: 'sensing.answer', |
| 256 | + SENSING_COLOR_TOUCHING_COLOR: 'sensing.colorTouchingColor', |
| 257 | + SENSING_TIME_YEAR: 'sensing.year', |
| 258 | + SENSING_TIME_MONTH: 'sensing.month', |
| 259 | + SENSING_TIME_DATE: 'sensing.date', |
| 260 | + SENSING_TIME_WEEKDAY: 'sensing.dayofweek', |
| 261 | + SENSING_TIME_HOUR: 'sensing.hour', |
| 262 | + SENSING_TIME_MINUTE: 'sensing.minute', |
| 263 | + SENSING_TIME_SECOND: 'sensing.second', |
| 264 | + SENSING_TIME_DAYS_SINCE_2000: 'sensing.daysSince2000', |
| 265 | + SENSING_DISTANCE: 'sensing.distance', |
| 266 | + SENSING_KEY_DOWN: 'keyboard.pressed', |
| 267 | + SENSING_MOUSE_DOWN: 'mouse.down', |
| 268 | + SENSING_MOUSE_X: 'mouse.x', |
| 269 | + SENSING_MOUSE_Y: 'mouse.y', |
| 270 | + SENSING_OF: 'sensing.of', |
| 271 | + SENSING_OF_BACKDROP_NAME: 'sensing.of.backdropName', |
| 272 | + SENSING_OF_BACKDROP_NUMBER: 'sensing.of.backdropNumber', |
| 273 | + SENSING_OF_COSTUME_NAME: 'sensing.of.costumeName', |
| 274 | + SENSING_OF_COSTUME_NUMBER: 'sensing.of.costumeNumber', |
| 275 | + SENSING_OF_VOLUME: 'sensing.of.volume', |
| 276 | + SENSING_OF_POS_X: 'sensing.of.x', |
| 277 | + SENSING_OF_POS_Y: 'sensing.of.y', |
| 278 | + SENSING_OF_DIRECTION: 'sensing.of.direction', |
| 279 | + SENSING_OF_SIZE: 'sensing.of.size', |
| 280 | + SENSING_OF_VAR: 'sensing.of.var', |
| 281 | + SENSING_TIMER_GET: 'timer.get', |
| 282 | + SENSING_TOUCHING_COLOR: 'sensing.touchingColor', |
| 283 | + SENSING_TOUCHING_OBJECT: 'sensing.touching', |
| 284 | + SENSING_USERNAME: 'sensing.username', |
| 285 | + |
| 286 | + PROCEDURE_CALL: 'procedures.call', |
| 287 | + PROCEDURE_ARGUMENT: 'procedures.argument', |
| 288 | + |
| 289 | + CONTROL_COUNTER: 'control.counter', |
| 290 | + |
| 291 | + TW_KEY_LAST_PRESSED: 'tw.lastKeyPressed' |
| 292 | +}; |
| 293 | + |
| 294 | +module.exports = { |
| 295 | + StackOpcode, |
| 296 | + InputOpcode, |
| 297 | + InputType |
| 298 | +}; |
0 commit comments