UNPKG

762 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.es.js","sources":["../src/compile/sb/JumpTable.ts","../src/compile/pc/ProgramCounter.ts","../src/compile/pc/DeferredProgramCounter.ts","../src/compile/pc/Jump.ts","../src/compile/pc/Call.ts","../src/compile/pc/Jmp.ts","../src/compile/pc/KnownProgramCounter.ts","../src/compile/pc/LastProgramCounter.ts","../src/compile/pc/ProgramCounterHelper.ts","../src/compile/NodeCompiler.ts","../src/compile/helper/Helper.ts","../src/compile/helper/common/ArrFilterHelper.ts","../src/compile/helper/common/ArrForEachHelper.ts","../src/compile/helper/common/ArrMapHelper.ts","../src/compile/helper/common/CloneArrayHelper.ts","../src/compile/helper/common/ExtendArrayHelper.ts","../src/compile/helper/common/ForTypeHelper.ts","../src/compile/helper/common/serialize.ts","../src/compile/helper/function/ArgumentsHelper.ts","../src/compile/helper/function/InternalFunctionProperties.ts","../src/compile/helper/function/BindFunctionObjectThisHelper.ts","../src/compile/helper/function/BindFunctionThisHelper.ts","../src/compile/helper/function/CallHelper.ts","../src/compile/helper/function/CloneFunctionHelper.ts","../src/compile/helper/function/CloneFunctionObjectHelper.ts","../src/compile/helper/function/CreateCallArrayHelper.ts","../src/compile/helper/function/CreateConstructArrayHelper.ts","../src/compile/helper/function/CreateFunctionArrayHelper.ts","../src/compile/helper/function/CreateFunctionObjectHelper.ts","../src/compile/helper/function/FunctionHelper.ts","../src/compile/helper/function/InvokeCallHelper.ts","../src/compile/helper/function/InvokeConstructHelper.ts","../src/compile/helper/function/NewHelper.ts","../src/compile/helper/function/ParametersHelper.ts","../src/compile/helper/common/GenericDeserializeHelper.ts","../src/compile/helper/common/GenericSerializeHelper.ts","../src/compile/helper/common/TypedHelper.ts","../src/compile/helper/completionRecord/CreateCompletionHelper.ts","../src/compile/helper/completionRecord/CreateNormalCompletionHelper.ts","../src/compile/helper/completionRecord/CreateThrowCompletionHelper.ts","../src/compile/helper/completionRecord/GetCompletionBaseHelper.ts","../src/compile/helper/completionRecord/GetCompletionErrorHelper.ts","../src/compile/helper/completionRecord/GetCompletionValHelper.ts","../src/DiagnosticCode.ts","../src/constants.ts","../src/compile/helper/completionRecord/HandleCompletionHelper.ts","../src/compile/helper/completionRecord/PickCompletionValHelper.ts","../src/compile/helper/error/ThrowHelper.ts","../src/compile/helper/error/ThrowTypeErrorHelper.ts","../src/compile/helper/statement/CaseHelper.ts","../src/compile/helper/statement/ForLoopHelper.ts","../src/compile/helper/statement/IfHelper.ts","../src/compile/helper/statement/ProcessStatementsHelper.ts","../src/compile/helper/types/CreatePrimitiveHelper.ts","../src/compile/helper/types/Types.ts","../src/compile/helper/types/boolean/CreateBooleanHelper.ts","../src/compile/helper/types/GetPrimitiveHelper.ts","../src/compile/helper/types/boolean/GetBooleanHelper.ts","../src/compile/helper/types/IsHelper.ts","../src/compile/helper/types/boolean/IsBooleanHelper.ts","../src/typeUtils.ts","../src/compile/helper/types/boolean/ToBooleanHelper.ts","../src/compile/helper/types/null/CreateNullHelper.ts","../src/compile/helper/types/null/IsNullHelper.ts","../src/compile/helper/types/number/CreateNumberHelper.ts","../src/compile/helper/types/number/GetNumberHelper.ts","../src/compile/helper/types/number/IsNumberHelper.ts","../src/compile/helper/types/number/ToNumberHelper.ts","../src/compile/helper/types/object/CreateObjectHelper.ts","../src/compile/helper/types/object/CreatePropertyObjectHelper.ts","../src/compile/helper/types/object/ElementAccessHelper.ts","../src/compile/helper/types/object/FindObjectPropertyHelper.ts","../src/compile/helper/types/object/GetObjectHelperBase.ts","../src/compile/helper/types/object/GetInternalObjectHelper.ts","../src/compile/helper/types/object/GetInternalObjectPropertyHelper.ts","../src/compile/helper/types/object/GetObjectHelper.ts","../src/compile/helper/types/object/GetPropertyObjectHelper.ts","../src/compile/helper/types/object/GetObjectPropertyHelperBase.ts","../src/compile/helper/types/object/GetPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/GetSymbolObjectHelper.ts","../src/compile/helper/types/object/GetSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/InstanceofHelper.ts","../src/compile/helper/types/object/IsObjectHelper.ts","../src/compile/helper/types/object/SetObjectAccessorPropertyHelperBase.ts","../src/compile/helper/types/object/SetAccessorPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/SetAccessorSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/SetObjectDataPropertyHelperBase.ts","../src/compile/helper/types/object/SetDataPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/SetDataSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/SetInternalObjectPropertyHelper.ts","../src/compile/helper/types/object/SetObjectPropertyHelperBase.ts","../src/compile/helper/types/object/SetPropertyObjectPropertyHelper.ts","../src/compile/helper/types/object/SetSymbolObjectPropertyHelper.ts","../src/compile/helper/types/object/ShallowCloneObjectHelper.ts","../src/compile/helper/types/object/ShallowCloneObjHelper.ts","../src/compile/helper/types/object/ToObjectHelper.ts","../src/compile/helper/types/string/CreateStringHelper.ts","../src/compile/helper/types/string/GetStringHelper.ts","../src/compile/helper/types/string/IsStringHelper.ts","../src/compile/helper/types/string/ToStringHelper.ts","../src/compile/helper/types/symbol/CreateSymbolHelper.ts","../src/compile/helper/types/symbol/GetSymbolHelper.ts","../src/compile/helper/types/symbol/IsSymbolHelper.ts","../src/compile/helper/types/undefined/CreateUndefinedHelper.ts","../src/compile/helper/types/undefined/IsUndefinedHelper.ts","../src/compile/helper/types/IsNullOrUndefinedHelper.ts","../src/compile/helper/types/IsSameTypeHelper.ts","../src/compile/helper/types/ToPrimitiveHelper.ts","../src/compile/helper/types/UnwrapTypeHelper.ts","../src/compile/helper/types/UnwrapValHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsNumberHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsSameTypeHelper.ts","../src/compile/helper/relational/EqualsEqualsEqualsUnknownHelper.ts","../src/compile/helper/relational/EqualsEqualsHelper.ts","../src/compile/helper/relational/LessThanHelper.ts","../src/compile/helper/global/constants.ts","../src/compile/helper/global/InternalGlobalProperties.ts","../src/compile/helper/global/AddArgumentsHelper.ts","../src/compile/helper/global/AddConstructorObjectHelper.ts","../src/compile/helper/global/AddArrayObjectHelper.ts","../src/compile/helper/global/AddBufferObjectHelper.ts","../src/compile/helper/global/AddBooleanObjectHelper.ts","../src/compile/helper/global/AddErrorObjectHelper.ts","../src/compile/helper/global/AddModulesHelper.ts","../src/compile/helper/global/AddNumberObjectHelper.ts","../src/compile/helper/global/AddObjectObjectHelper.ts","../src/compile/helper/global/AddStringObjectHelper.ts","../src/compile/helper/global/AddSymbolObjectHelper.ts","../src/compile/helper/global/SetGlobalObjectHelper.ts","../src/compile/helper/global/GetArgumentHelper.ts","../src/compile/helper/global/GetGlobalPropertyHelper.ts","../src/compile/helper/array/CreateArrayHelper.ts","../src/compile/helper/array/GetArrayIndexHelper.ts","../src/compile/helper/array/InternalArrayProperties.ts","../src/compile/helper/array/GetArrayValueHelper.ts","../src/compile/helper/array/SetArrayIndexHelper.ts","../src/compile/helper/array/SetArrayValueHelper.ts","../src/compile/helper/array/UnwrapArrayHelper.ts","../src/compile/helper/array/WrapArrayHelper.ts","../src/compile/helper/module/AddEmptyModuleHelper.ts","../src/compile/helper/module/ExportHelper.ts","../src/compile/helper/module/ExportSingleHelper.ts","../src/compile/helper/module/GetCurrentModuleHelper.ts","../src/compile/helper/module/GetModuleHelper.ts","../src/compile/helper/module/GetModulesHelper.ts","../src/compile/helper/blockchain/InternalBlockchainInterfaceProperties.ts","../src/compile/helper/blockchain/IsBlockchainInterfaceHelper.ts","../src/compile/helper/blockchain/UnwrapBlockchainInterfaceHelper.ts","../src/compile/helper/blockchain/WrapBlockchainInterfaceHelper.ts","../src/compile/helper/buffer/CreateBufferHelper.ts","../src/compile/helper/buffer/InternalBufferProperties.ts","../src/compile/helper/buffer/GetBufferValueHelper.ts","../src/compile/helper/buffer/SetBufferValueHelper.ts","../src/compile/helper/buffer/UnwrapBufferHelper.ts","../src/compile/helper/buffer/WrapBufferHelper.ts","../src/compile/helper/createHelpers.ts","../src/compile/declaration/ClassDeclarationCompiler.ts","../src/compile/declaration/EnumDeclarationCompiler.ts","../src/compile/declaration/EnumMemberCompiler.ts","../src/compile/declaration/ExportAssignmentCompiler.ts","../src/compile/declaration/ExportDeclarationCompiler.ts","../src/compile/declaration/FunctionDeclarationCompiler.ts","../src/compile/declaration/ImportDeclarationCompiler.ts","../src/compile/declaration/TypeAliasDeclarationCompiler.ts","../src/compile/declaration/VariableDeclarationCompiler.ts","../src/compile/declaration/VariableDeclarationListCompiler.ts","../src/compile/declaration/index.ts","../src/compile/decorator/DecoratorCompiler.ts","../src/compile/decorator/index.ts","../src/compile/expression/ArrayLiteralExpressionCompiler.ts","../src/compile/expression/ArrowFunctionCompiler.ts","../src/compile/expression/AsExpressionCompiler.ts","../src/compile/expression/AwaitExpressionCompiler.ts","../src/compile/expression/BinaryExpressionCompiler.ts","../src/compile/expression/BooleanLiteralCompiler.ts","../src/compile/syscalls.ts","../src/compile/expression/CallExpressionCompiler.ts","../src/compile/expression/CommaListExpressionCompiler.ts","../src/compile/expression/ConditionalExpressionCompiler.ts","../src/compile/expression/DeleteExpressionCompiler.ts","../src/compile/expression/ElementAccessExpressionCompiler.ts","../src/compile/expression/FunctionExpressionCompiler.ts","../src/compile/expression/IdentifierCompiler.ts","../src/compile/expression/ImportExpressionCompiler.ts","../src/compile/expression/MetaPropertyCompiler.ts","../src/compile/expression/NewExpressionCompiler.ts","../src/compile/expression/NonNullExpressionCompiler.ts","../src/compile/expression/NoSubstitutionTemplateLiteralCompiler.ts","../src/compile/expression/NullLiteralCompiler.ts","../src/compile/expression/NumericLiteralCompiler.ts","../src/compile/expression/ObjectLiteralExpressionCompiler.ts","../src/compile/expression/OmittedExpressionCompiler.ts","../src/compile/expression/ParenthesizedExpressionCompiler.ts","../src/compile/expression/PartiallyEmittedExpressionCompiler.ts","../src/compile/expression/PostfixUnaryExpressionCompiler.ts","../src/compile/expression/PrefixUnaryExpressionCompiler.ts","../src/compile/expression/PropertyAccessExpressionCompiler.ts","../src/compile/expression/RegularExpressionLiteralCompiler.ts","../src/compile/expression/SpreadElementCompiler.ts","../src/compile/expression/StringLiteralCompiler.ts","../src/compile/expression/SuperExpressionCompiler.ts","../src/compile/expression/TaggedTemplateExpressionCompiler.ts","../src/compile/expression/ThisExpressionCompiler.ts","../src/compile/expression/TypeAssertionCompiler.ts","../src/compile/expression/TypeOfExpressionCompiler.ts","../src/compile/expression/VoidExpressionCompiler.ts","../src/compile/expression/YieldExpressionCompiler.ts","../src/compile/expression/index.ts","../src/compile/file/SourceFileCompiler.ts","../src/compile/file/index.ts","../src/compile/statement/BlockCompiler.ts","../src/compile/statement/BreakStatementCompiler.ts","../src/compile/statement/CaseBlockCompiler.ts","../src/compile/statement/CaseClauseCompiler.ts","../src/compile/statement/CatchClauseCompiler.ts","../src/compile/statement/ContinueStatementCompiler.ts","../src/compile/statement/DebuggerStatementCompiler.ts","../src/compile/statement/DefaultClauseCompiler.ts","../src/compile/statement/DoStatementCompiler.ts","../src/compile/statement/EmptyStatementCompiler.ts","../src/compile/statement/ExpressionStatementCompiler.ts","../src/compile/statement/ForInStatementCompiler.ts","../src/compile/statement/ForOfStatementCompiler.ts","../src/compile/statement/ForStatementCompiler.ts","../src/compile/statement/IfStatementCompiler.ts","../src/compile/statement/LabeledStatementCompiler.ts","../src/compile/statement/NotEmittedStatementCompiler.ts","../src/compile/statement/ReturnStatementCompiler.ts","../src/compile/statement/SwitchStatementCompiler.ts","../src/compile/statement/ThrowStatementCompiler.ts","../src/compile/statement/TryStatementCompiler.ts","../src/compile/statement/VariableStatementCompiler.ts","../src/compile/statement/WhileStatementCompiler.ts","../src/compile/statement/WithStatementCompiler.ts","../src/compile/statement/index.ts","../src/compile/sb/JumpResolver.ts","../src/compile/sb/BaseScriptBuilder.ts","../src/compile/scope/ResolvedScope.ts","../src/compile/scope/CapturingScope.ts","../src/compile/sb/ScopeCapturingScriptBuilder.ts","../src/compile/sb/EmittingScriptBuilder.ts","../src/compile/sb/HelperCapturingScriptBuilder.ts","../src/CompilerDiagnostic.ts","../src/Context.ts","../src/symbols.ts","../src/compile/compile.ts","../src/utils.ts","../src/compile/compileScript.ts","../src/transpile/NodeTranspiler.ts","../src/transpile/declaration/ClassDeclarationTranspiler.ts","../src/transpile/declaration/index.ts","../src/nodeUtils.ts","../src/transpile/transpiler/NEOTranspiler.ts","../src/transpile/transpile.ts","../src/compileContract.ts","../src/executeScript.ts","../src/scan.ts","../src/findContract.ts"],"sourcesContent":["import { Node } from 'ts-simple-ast';\n\nimport { Bytecode, ScriptBuilder } from '../sb';\n\ninterface JumpResult {\n node: Node;\n jumpNumber: number;\n bytecode: Bytecode;\n}\n\nexport class JumpTable {\n private jumpNumber: number = 0;\n private readonly table: JumpResult[] = [];\n\n public add(sb: ScriptBuilder, node: Node, body: () => void): number {\n const jumpNumber = this.jumpNumber;\n this.jumpNumber += 1;\n const { bytecode } = sb.capture(() => {\n body();\n });\n this.table.push({ jumpNumber, node, bytecode });\n\n return jumpNumber;\n }\n\n public emitTable(sb: ScriptBuilder, outerNode: Node): void {\n // TODO: Binary search over table - O(logn) ops vs O(n) currently\n this.table.forEach(({ node, jumpNumber, bytecode }) => {\n sb.emitHelper(\n node,\n {},\n sb.helpers.if({\n condition: () => {\n sb.emitOp(node, 'DUP');\n sb.emitPushInt(node, jumpNumber);\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n sb.emitOp(node, 'DROP');\n sb.emitBytecode(bytecode);\n },\n }),\n );\n });\n\n sb.emitOp(outerNode, 'THROW');\n }\n}\n","export abstract class ProgramCounter {\n public abstract plus(value: number): ProgramCounter;\n public abstract equals(other: ProgramCounter): boolean;\n public abstract getPC(): number;\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport class DeferredProgramCounter extends ProgramCounter {\n private pc: ProgramCounter | undefined;\n\n constructor(private readonly offset?: number) {\n super();\n }\n\n public plus(offset: number): ProgramCounter {\n return new DeferredProgramCounter((this.offset || 0) + offset);\n }\n\n public equals(other: ProgramCounter): boolean {\n return this === other;\n }\n\n public setPC(pc: ProgramCounter): void {\n this.pc = pc;\n }\n\n public getPC(): number {\n if (this.pc == null) {\n throw new Error('Unknown PC');\n }\n\n return this.pc.getPC() + (this.offset || 0);\n }\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport type JumpOp = 'CALL' | 'JMP' | 'JMPIF' | 'JMPIFNOT';\n\nexport abstract class Jump<TOp extends JumpOp = JumpOp> {\n constructor(public readonly op: TOp, public readonly pc: ProgramCounter) {}\n\n public abstract plus(pc: number): Jump<TOp>;\n}\n","import { Jump } from './Jump';\nimport { ProgramCounter } from './ProgramCounter';\n\nexport class Call extends Jump {\n constructor(pc: ProgramCounter) {\n super('CALL', pc);\n }\n\n public plus(pc: number): Call {\n return new Call(this.pc.plus(pc));\n }\n}\n","import { Jump } from './Jump';\nimport { ProgramCounter } from './ProgramCounter';\n\nexport type JmpOp = 'JMP' | 'JMPIF' | 'JMPIFNOT';\n\nexport class Jmp extends Jump<JmpOp> {\n constructor(op: JmpOp, pc: ProgramCounter) {\n super(op, pc);\n }\n\n public plus(pc: number): Jmp {\n return new Jmp(this.op, this.pc.plus(pc));\n }\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport class KnownProgramCounter extends ProgramCounter {\n constructor(private readonly pc: number) {\n super();\n }\n\n public plus(offset: number): ProgramCounter {\n return new KnownProgramCounter(this.pc + offset);\n }\n\n public equals(other: ProgramCounter): boolean {\n return other instanceof KnownProgramCounter && this.pc === other.pc;\n }\n\n public getPC(): number {\n return this.pc;\n }\n}\n","import { ProgramCounter } from './ProgramCounter';\n\nexport class LastProgramCounter extends ProgramCounter {\n private pc: number | undefined;\n private readonly children: LastProgramCounter[] = [];\n\n constructor(\n private readonly startPC: number,\n private readonly offset?: number,\n ) {\n super();\n }\n\n public plus(offset: number): ProgramCounter {\n const pc = new LastProgramCounter(\n this.startPC,\n (this.offset || 0) + offset,\n );\n this.children.push(pc);\n if (this.pc != null) {\n pc.setPC(this.pc);\n }\n return pc;\n }\n\n public equals(other: ProgramCounter): boolean {\n return (\n other instanceof LastProgramCounter &&\n this.startPC === other.startPC &&\n this.offset === other.offset\n );\n }\n\n public setPC(pc: number): void {\n this.pc = pc;\n this.children.forEach((child) => {\n child.setPC(pc);\n });\n }\n\n public getPC(): number {\n if (this.pc == null) {\n throw new Error('Unknown PC');\n }\n\n return this.pc + (this.offset || 0);\n }\n}\n","import { KnownProgramCounter } from './KnownProgramCounter';\nimport { LastProgramCounter } from './LastProgramCounter';\nimport { ProgramCounter } from './ProgramCounter';\n\nexport class ProgramCounterHelper {\n private readonly pc: () => number;\n private readonly first: KnownProgramCounter;\n private readonly last: LastProgramCounter;\n\n constructor(pc: () => number) {\n this.pc = pc;\n this.first = new KnownProgramCounter(this.pc());\n this.last = new LastProgramCounter(this.pc());\n }\n\n public getFirst(): ProgramCounter {\n return this.first;\n }\n\n public getCurrent(): ProgramCounter {\n return new KnownProgramCounter(this.pc());\n }\n\n public getLast(): ProgramCounter {\n return this.last;\n }\n\n public setLast(): void {\n this.last.setPC(this.pc());\n }\n}\n","import { SyntaxKind } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from './sb';\nimport { VisitOptions } from './types';\n\nexport abstract class NodeCompiler<TNode> {\n public abstract readonly kind: SyntaxKind;\n\n public abstract visitNode(\n sb: ScriptBuilder,\n node: TNode,\n options: VisitOptions,\n ): void;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport abstract class Helper<T extends Node = Node> {\n public emitGlobal(sb: ScriptBuilder, node: T, options: VisitOptions): void {\n // do nothing\n }\n\n public abstract emit(sb: ScriptBuilder, node: T, options: VisitOptions): void;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ArrFilterHelperOptions {\n map: () => void;\n withIndex?: boolean;\n}\n\n// Input: [array]\n// Output: [array]\nexport class ArrFilterHelper extends Helper {\n private readonly map: () => void;\n private readonly withIndex: boolean;\n\n constructor(options: ArrFilterHelperOptions) {\n super();\n this.map = options.map;\n this.withIndex = options.withIndex || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [size, ...array]\n sb.emitOp(node, 'UNPACK');\n // [0, size, ...array]\n sb.emitPushInt(node, 0);\n // [arr, size, ...array]\n sb.emitOp(node, 'NEWARRAY');\n // [size, arr, ...array]\n sb.emitOp(node, 'SWAP');\n // [idx, size, arr, ...array]\n sb.emitPushInt(node, 0);\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [size, idx, arr, ...array]\n sb.emitOp(node, 'SWAP');\n // [size, idx, size, arr, ...array]\n sb.emitOp(node, 'TUCK');\n // [idx, size, idx, size, arr, ...array]\n sb.emitOp(node, 'OVER');\n // size > idx\n // [size > idx, idx, size, arr, ...array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [arr, idx, size, ...array]\n sb.emitOp(node, 'ROT');\n // [idx, arr, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n if (this.withIndex) {\n // [4, idx, arr, idx, size, ...array]\n sb.emitPushInt(node, 4);\n // [value, idx, arr, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n // [value, idx, value, arr, idx, size, ...array]\n sb.emitOp(node, 'TUCK');\n } else {\n // [3, arr, idx, size, ...array]\n sb.emitPushInt(node, 3);\n // [value, arr, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n // [value, value, arr, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [keepVal, value, arr, idx, size, ...array]\n this.map();\n // TODO: This should be toBoolean\n // [keep, value, arr, idx, size, ...array]\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n whenTrue: () => {\n // [arr, value, arr, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // [value, arr, arr, idx, size, ...array]\n sb.emitOp(node, 'SWAP');\n // [arr, idx, size, ...array]\n sb.emitOp(node, 'APPEND');\n },\n whenFalse: () => {\n // [arr, idx, size, ...array]\n sb.emitOp(node, 'DROP');\n },\n }),\n );\n // [size, arr, idx, ...array]\n sb.emitOp(node, 'ROT');\n // [idx, size, arr, ...array]\n sb.emitOp(node, 'ROT');\n },\n incrementor: () => {\n // [idx, size, arr, ...array]\n sb.emitOp(node, 'INC');\n },\n }),\n );\n // [size, arr]\n sb.emitOp(node, 'DROP');\n // [arr]\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ArrForEachHelperOptions {\n each: () => void;\n withIndex?: boolean;\n}\n\n// Input: [array]\n// Output: []\nexport class ArrForEachHelper extends Helper {\n private readonly each: () => void;\n private readonly withIndex: boolean;\n\n constructor(options: ArrForEachHelperOptions) {\n super();\n this.each = options.each;\n this.withIndex = options.withIndex || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [size, ...array]\n sb.emitOp(node, 'UNPACK');\n // [idx, size, ...array]\n sb.emitPushInt(node, 0);\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [size, idx, ...array]\n sb.emitOp(node, 'SWAP');\n // [size, idx, size, ...array]\n sb.emitOp(node, 'TUCK');\n // [idx, size, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // size > idx\n // [size > idx, idx, size, ...array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [value, idx, size, ...array]\n sb.emitOp(node, 'ROT');\n if (this.withIndex) {\n // [idx, value, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // [value, idx, idx, size, ...array]\n sb.emitOp(node, 'SWAP');\n }\n // [idx, size, ...array]\n this.each();\n },\n incrementor: () => {\n // [idx, size, ...array]\n sb.emitOp(node, 'INC');\n },\n }),\n );\n // [size]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ArrMapHelperOptions {\n map: () => void;\n withIndex?: boolean;\n}\n\n// Input: [array]\n// Output: [array]\nexport class ArrMapHelper extends Helper {\n private readonly map: () => void;\n private readonly withIndex: boolean;\n\n constructor(options: ArrMapHelperOptions) {\n super();\n this.map = options.map;\n this.withIndex = options.withIndex || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [size, ...array]\n sb.emitOp(node, 'UNPACK');\n // [idx, size, ...array]\n sb.emitPushInt(node, 0);\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [size, idx, ...array]\n sb.emitOp(node, 'SWAP');\n // [size, idx, size, ...array]\n sb.emitOp(node, 'TUCK');\n // [idx, size, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // size > idx\n // [size > idx, idx, size, ...array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [idx, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n // [3, idx, idx, size, ...array]\n sb.emitPushInt(node, 3);\n // [idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ADD');\n if (this.withIndex) {\n // [idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'OVER');\n // [idx, idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n // [4, idx, idx, idx + 3, idx, size, ...array]\n sb.emitPushInt(node, 4);\n // [idx + 4, idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ADD');\n // [value, idx, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n } else {\n // [idx + 3, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'DUP');\n // [value, idx + 3, idx, size, ...array]\n sb.emitOp(node, 'ROLL');\n }\n // [value, idx + 3, idx, size, ...array]\n this.map();\n // [idx + 3, value, idx, size, ...array]\n sb.emitOp(node, 'SWAP');\n // [value, idx, size, ...array]\n sb.emitOp(node, 'XTUCK');\n // [idx, size, ...array]\n sb.emitOp(node, 'DROP');\n },\n incrementor: () => {\n // [idx, size, ...array]\n sb.emitOp(node, 'INC');\n },\n }),\n );\n // [size, ...array]\n sb.emitOp(node, 'DROP');\n // [array]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [array]\n// Output: [array]\nexport class CloneArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [array]\n sb.emitOp(node, 'UNPACK');\n // [...array]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [length, arr]\n// Output: []\nexport class ExtendArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [arr, length, arr]\n sb.emitOp(node, 'OVER');\n // [currentLength, length, arr]\n sb.emitOp(node, 'ARRAYSIZE');\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [currentLength, length, currentLength, arr]\n sb.emitOp(node, 'TUCK');\n // [length, currentLength, length, currentLength, arr]\n sb.emitOp(node, 'OVER');\n // [expectedLengthGTCurrentLength, length, currentLength, arr]\n sb.emitOp(node, 'LT');\n },\n each: () => {\n // [arr, length, currentLength]\n sb.emitOp(node, 'ROT');\n // [arr, arr, length, currentLength]\n sb.emitOp(node, 'DUP');\n // [undefinedVal, arr, arr, length, currentLength]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [arr, length, currentLength]\n sb.emitOp(node, 'APPEND');\n },\n incrementor: () => {\n // [currentLength, arr, length]\n sb.emitOp(node, 'ROT');\n // [currentLength, arr, length]\n sb.emitOp(node, 'INC');\n // [length, currentLength, arr]\n sb.emitOp(node, 'ROT');\n // [currentLength, length, arr]\n sb.emitOp(node, 'SWAP');\n },\n }),\n );\n // [length, arr]\n sb.emitOp(node, 'DROP');\n // [arr]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ForType {\n isType: (type?: Type) => boolean;\n isRuntimeType: (options: VisitOptions) => void;\n process: (options: VisitOptions) => void;\n}\n\nexport interface ForTypeHelperOptions {\n types: ForType[];\n defaultCase?: (options: VisitOptions) => void;\n}\n\n// Input: [val]\n// Output: []\nexport class ForTypeHelper extends Helper {\n private readonly types: ForType[];\n private readonly defaultCase: ((options: VisitOptions) => void) | undefined;\n\n constructor({ types, defaultCase }: ForTypeHelperOptions) {\n super();\n this.types = types;\n this.defaultCase = defaultCase;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const noCastOptions = sb.noCastOptions(optionsIn);\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n let type = optionsIn.cast;\n if (type == null) {\n type = sb.getType(node);\n }\n\n const types = this.types.filter((testType) => testType.isType(type));\n const defaultCase =\n this.defaultCase ||\n ((innerOptions) => {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);\n });\n if (types.length === 0) {\n defaultCase(noCastOptions);\n } else if (types.length === 1) {\n types[0].process(noCastOptions);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n types.map((forType) => ({\n condition: () => {\n sb.emitOp(node, 'DUP');\n forType.isRuntimeType(options);\n },\n whenTrue: () => {\n forType.process(noCastOptions);\n },\n })),\n () => {\n defaultCase(noCastOptions);\n },\n ),\n );\n }\n }\n}\n","import { Node, ts } from 'ts-simple-ast';\n\nimport { VisitOptions } from '../../types';\nimport { ScriptBuilder } from '../../sb';\n\nexport enum SerializableType {\n Array = 7,\n Buffer = 8,\n}\n\nconst invokeGlobal = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n name: string,\n) => {\n // [1, val]\n sb.emitPushInt(node, 1);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n // [globalObjectVal, argsarr]\n sb.scope.getGlobal(sb, node, options);\n // [name, globalObjectVal, argsarr]\n sb.emitPushString(node, name);\n // [objectVal, argsarr]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n};\n\nexport const SERIALIZE_NAME = 'genericSerialize';\n\nexport const invokeSerialize = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => invokeGlobal(sb, node, options, SERIALIZE_NAME);\n\nexport const DESERIALIZE_NAME = 'genericDeserialize';\n\nexport const invokeDeserialize = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => invokeGlobal(sb, node, options, DESERIALIZE_NAME);\n\nexport const serializeType = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n type: SerializableType,\n) => {\n // [type, arr]\n sb.emitPushInt(node, type);\n // [2, type, arr]\n sb.emitPushInt(node, 2);\n // [arr]\n sb.emitOp(node, 'PACK');\n};\n\nexport const deserializeType = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => {\n // [1, arr]\n sb.emitPushInt(node, 1);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n};\n\nconst isSerializedType = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n type: SerializableType,\n) => {\n // [0, val]\n sb.emitPushInt(node, 0);\n // [type]\n sb.emitOp(node, 'PICKITEM');\n // [type, type]\n sb.emitPushInt(node, type);\n // [isSerializedType]\n sb.emitOp(node, 'NUMEQUAL');\n};\n\nexport const getTypes = (\n sb: ScriptBuilder,\n node: Node<ts.Node>,\n options: VisitOptions,\n) => [\n {\n isRuntimeType: () => {\n // [isBoolean]\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n },\n serialize: () => {\n // do nothing\n },\n isSerializedType: () => {\n // [isBoolean]\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n },\n deserialize: () => {\n // do nothing\n },\n },\n {\n isRuntimeType: () => {\n // [isString]\n sb.emitHelper(node, options, sb.helpers.isString);\n },\n serialize: () => {\n // do nothing\n },\n isSerializedType: () => {\n // [isString]\n sb.emitHelper(node, options, sb.helpers.isString);\n },\n deserialize: () => {\n // do nothing\n },\n },\n {\n isRuntimeType: () => {\n // [isNumber]\n sb.emitHelper(node, options, sb.helpers.isNumber);\n },\n serialize: () => {\n // do nothing\n },\n isSerializedType: () => {\n // [isNumber]\n sb.emitHelper(node, options, sb.helpers.isNumber);\n },\n deserialize: () => {\n // do nothing\n },\n },\n {\n isRuntimeType: () => {\n // [Array, val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Buffer' }),\n );\n // [val instanceof Array]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n },\n serialize: () => {\n // [bytearray]\n sb.emitHelper(node, options, sb.helpers.unwrapBuffer);\n // [arr]\n serializeType(sb, node, options, SerializableType.Buffer);\n },\n isSerializedType: () => {\n isSerializedType(sb, node, options, SerializableType.Buffer);\n },\n deserialize: () => {\n deserializeType(sb, node, options);\n // [val]\n sb.emitHelper(node, options, sb.helpers.wrapBuffer);\n },\n },\n {\n isRuntimeType: () => {\n // [Array, val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [val instanceof Array]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n },\n serialize: () => {\n // [arr]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [arr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n invokeSerialize(sb, node, options);\n },\n }),\n );\n // [value]\n serializeType(sb, node, options, SerializableType.Array);\n },\n isSerializedType: () => {\n isSerializedType(sb, node, options, SerializableType.Array);\n },\n deserialize: () => {\n // [arr]\n deserializeType(sb, node, options);\n // [arr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n invokeDeserialize(sb, node, options);\n },\n }),\n );\n // [val]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n },\n },\n];\n","import { ArgumentedNode, Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [argsArray]\nexport class ArgumentsHelper extends Helper<Node & ArgumentedNode> {\n public emit(\n sb: ScriptBuilder,\n node: Node & ArgumentedNode,\n options: VisitOptions,\n ): void {\n // Push the arguments\n const args = [...node.getArguments()].reverse();\n for (const arg of args) {\n sb.visit(arg, sb.pushValueOptions(options));\n }\n // [length, ...args]\n sb.emitPushInt(node, args.length);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n }\n}\n","export type FuncProperty = 'call' | 'construct';\n\nexport enum InternalFunctionProperties {\n CALL = 'call',\n CONSTRUCT = 'construct',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport {\n FuncProperty,\n InternalFunctionProperties,\n} from './InternalFunctionProperties';\n\n// Input: [objectVal, this]\n// Output: [objectVal]\nexport interface BindSingleFunctionHelperOptions {\n type: 'single';\n property: FuncProperty;\n overwrite: boolean;\n}\nexport interface BindBothFunctionHelperOptions {\n type: 'both';\n overwrite: boolean;\n}\n\nexport type BindFunctionObjectThisHelperOptions =\n | BindSingleFunctionHelperOptions\n | BindBothFunctionHelperOptions;\n\n// Input: [objectVal, this]\n// Output: [objectVal]\nexport class BindFunctionObjectThisHelper extends Helper {\n private property: FuncProperty;\n private both: boolean;\n private overwrite: boolean;\n\n constructor(options: BindFunctionObjectThisHelperOptions) {\n super();\n if (options.type === 'both') {\n this.property = InternalFunctionProperties.CALL;\n this.both = true;\n } else {\n this.property = options.property;\n this.both = false;\n }\n this.overwrite = options.overwrite;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, this]\n sb.emitHelper(\n node,\n options,\n sb.helpers.cloneFunctionObject(\n this.both\n ? { type: 'both' }\n : { type: 'single', property: this.property },\n ),\n );\n // [this, objectVal]\n sb.emitOp(node, 'SWAP');\n\n if (this.both) {\n this.bindThis(sb, node, options, InternalFunctionProperties.CALL);\n this.bindThis(sb, node, options, InternalFunctionProperties.CONSTRUCT);\n } else {\n this.bindThis(sb, node, options, this.property);\n }\n\n sb.emitOp(node, 'DROP');\n }\n\n private bindThis(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n property: FuncProperty,\n ): void {\n // [this, objectVal, this]\n sb.emitOp(node, 'TUCK');\n // [objectVal, this, objectVal, this]\n sb.emitOp(node, 'OVER');\n // [property, objectVal, this, objectVal, this]\n sb.emitPushString(node, property);\n // [func, this, objectVal, this]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [func, objectVal, this]\n sb.emitHelper(\n node,\n options,\n sb.helpers.bindFunctionThis({ overwrite: this.overwrite }),\n );\n // [objectVal, this]\n sb.emitOp(node, 'DROP');\n // [this, objectVal]\n sb.emitOp(node, 'SWAP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface BindFunctionThisHelperOptions {\n overwrite: boolean;\n}\n\n// Input: [func, this]\n// Output: [func]\nexport class BindFunctionThisHelper extends Helper {\n private overwrite: boolean;\n\n constructor(options: BindFunctionThisHelperOptions) {\n super();\n this.overwrite = options.overwrite;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n let whenTrue;\n if (this.overwrite) {\n whenTrue = () => {\n // [this, func, func]\n sb.emitOp(node, 'SWAP');\n // [2, this, func, func]\n sb.emitPushInt(node, 2);\n // [func]\n sb.emitOp(node, 'SETITEM');\n };\n } else {\n whenTrue = () => {\n // [this, func]\n sb.emitOp(node, 'DROP');\n // [func]\n sb.emitOp(node, 'DROP');\n };\n }\n\n // [func, this]\n sb.emitHelper(node, options, sb.helpers.cloneFunction);\n // [func, this, func]\n sb.emitOp(node, 'TUCK');\n // [func, func, this, func]\n sb.emitOp(node, 'DUP');\n // [func]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [size, func, this, func]\n sb.emitOp(node, 'ARRAYSIZE');\n // [3, size, func, this, func]\n sb.emitPushInt(node, 3);\n // [hasThis, func, this, func]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue,\n whenFalse: () => {\n // [this, func, func]\n sb.emitOp(node, 'SWAP');\n // [func]\n sb.emitOp(node, 'APPEND');\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport class CallHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // Push the scopes and this to the alt stack\n // [func, func]\n sb.emitOp(node, 'DUP');\n // [1, func, func]\n sb.emitPushInt(node, 1);\n // [[scopes, this], func]\n sb.emitOp(node, 'PICKITEM');\n // [[scopes, this], func]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this], [scopes, this], func]\n sb.emitOp(node, 'DUP');\n // [0, [scopes, this], [scopes, this], func]\n sb.emitPushInt(node, 0);\n // [[scopes, this], 0, [scopes, this], [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [0, [scopes, this], 0, [scopes, this], [scopes, this], func]\n sb.emitPushInt(node, 0);\n // [scopes, 0, [scopes, this], [scopes, this], func]\n sb.emitOp(node, 'PICKITEM');\n // [scopes, 0, [scopes, this], [scopes, this], func]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this], func]\n sb.emitOp(node, 'SETITEM');\n // [func, [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [[scopes, this], func]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [size, [scopes, this], func]\n sb.emitOp(node, 'ARRAYSIZE');\n // [3, size, [scopes, this], func]\n sb.emitPushInt(node, 3);\n // [size === 3, [scopes, this], func]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n // [func, [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [2, func, [scopes, this], func]\n sb.emitPushInt(node, 2);\n // [this, [scopes, this], func]\n sb.emitOp(node, 'PICKITEM');\n // [[scopes, this], this, [scopes, this], func]\n sb.emitOp(node, 'OVER');\n // [1, [scopes, this], this, [scopes, this], func]\n sb.emitPushInt(node, 1);\n // [this, 1, [scopes, this], [scopes, this], func]\n sb.emitOp(node, 'ROT');\n // [[scopes, this], func]\n sb.emitOp(node, 'SETITEM');\n },\n }),\n );\n\n // [func]\n sb.emitOp(node, 'TOALTSTACK');\n\n // Push the target on the stack\n // [0, func]\n sb.emitPushInt(node, 0);\n // [target]\n sb.emitOp(node, 'PICKITEM');\n\n // Call function\n sb.emitCall(node);\n\n // Remove scope\n sb.emitOp(node, 'FROMALTSTACK');\n sb.emitOp(node, 'DROP');\n\n if (optionsIn.pushValue) {\n sb.emitOp(node, 'DUP');\n }\n sb.emitHelper(node, options, sb.helpers.handleCompletion);\n if (optionsIn.pushValue) {\n sb.emitHelper(node, options, sb.helpers.getCompletionVal);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [func]\n// Output: [func]\nexport class CloneFunctionHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport {\n FuncProperty,\n InternalFunctionProperties,\n} from './InternalFunctionProperties';\n\nexport interface CloneSingleFunctionHelperOptions {\n type: 'single';\n property: FuncProperty;\n}\nexport interface CloneBothFunctionHelperOptions {\n type: 'both';\n}\n\nexport type CloneFunctionObjectHelperOptions =\n | CloneSingleFunctionHelperOptions\n | CloneBothFunctionHelperOptions;\n\n// Input: [objectVal]\n// Output: [objectVal]\nexport class CloneFunctionObjectHelper extends Helper {\n private property: FuncProperty;\n private both: boolean;\n\n constructor(options: CloneFunctionObjectHelperOptions) {\n super();\n if (options.type === 'both') {\n this.property = InternalFunctionProperties.CALL;\n this.both = true;\n } else {\n this.property = options.property;\n this.both = false;\n }\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.shallowCloneObject);\n\n if (this.both) {\n // [objectVal]\n this.cloneFunction(sb, node, options, InternalFunctionProperties.CALL);\n // [objectVal]\n this.cloneFunction(\n sb,\n node,\n options,\n InternalFunctionProperties.CONSTRUCT,\n );\n } else {\n // [objectVal]\n this.cloneFunction(sb, node, options, this.property);\n }\n }\n\n public cloneFunction(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n property: FuncProperty,\n ): void {\n // [objectVal, objectVal]\n sb.emitOp(node, 'DUP');\n // [property, objectVal, objectVal]\n sb.emitPushString(node, property);\n // [func, objectVal]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [func, objectVal]\n sb.emitHelper(node, options, sb.helpers.cloneFunction);\n // [objectVal, func, objectVal]\n sb.emitOp(node, 'OVER');\n // [property, objectVal, func, objectVal]\n sb.emitPushString(node, property);\n // [func, property, objectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import {\n Node,\n SignaturedDeclaration,\n StatementedNode,\n TypeGuards,\n BodiedNode,\n BodyableNode,\n} from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [farr]\nexport class CreateCallArrayHelper extends Helper<\n Node & StatementedNode & SignaturedDeclaration & (BodiedNode | BodyableNode)\n> {\n public emit(\n sb: ScriptBuilder,\n node: Node &\n StatementedNode &\n SignaturedDeclaration &\n (BodiedNode | BodyableNode),\n outerOptions: VisitOptions,\n ): void {\n if (!outerOptions.pushValue) {\n return;\n }\n\n sb.emitHelper(\n node,\n outerOptions,\n sb.helpers.createFunctionArray({\n body: () => {\n sb.withScope(node, outerOptions, (options) => {\n sb.emitHelper(node, options, sb.helpers.parameters);\n let body;\n if (TypeGuards.isBodyableNode(node)) {\n body = node.getBodyOrThrow();\n } else {\n body = node.getBody();\n }\n if (TypeGuards.isExpression(body)) {\n // [val]\n sb.visit(body, options);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [completion]\n sb.emitOp(node, 'RET');\n } else {\n sb.visit(body, options);\n // [undefinedVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [completion]\n sb.emitOp(node, 'RET');\n }\n });\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface CreateConstructArrayHelperOptions {\n body: () => void;\n withoutScope?: boolean;\n}\n\n// Input: []\n// Output: [farr]\nexport class CreateConstructArrayHelper extends Helper<Node> {\n private readonly body: () => void;\n private readonly withoutScope: boolean;\n\n constructor({ body, withoutScope }: CreateConstructArrayHelperOptions) {\n super();\n this.body = body;\n this.withoutScope = withoutScope || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, outerOptions: VisitOptions): void {\n if (!outerOptions.pushValue) {\n return;\n }\n\n const emit = (options: VisitOptions) => {\n // []\n this.body();\n // [undefinedVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [completion]\n sb.emitOp(node, 'RET');\n };\n\n sb.emitHelper(\n node,\n outerOptions,\n sb.helpers.createFunctionArray({\n body: () => {\n if (this.withoutScope) {\n emit(outerOptions);\n } else {\n sb.withScope(node, outerOptions, (options) => {\n emit(options);\n });\n }\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface CreateFunctionArrayHelperOptions {\n body: () => void;\n}\n\n// Input: []\n// Output: [farr]\nexport class CreateFunctionArrayHelper extends Helper<Node> {\n private body: () => void;\n\n constructor({ body }: CreateFunctionArrayHelperOptions) {\n super();\n this.body = body;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // TODO: This might break if this/global change after copying?\n /* create function */\n // [[scopes, this]]\n sb.scope.pushAll(sb, node, options);\n // [[scopes, this]]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this], [scopes, this]]\n sb.emitOp(node, 'DUP');\n // [0, [scopes, this], [scopes, this]]\n sb.emitPushInt(node, 0);\n // [[scopes, this], 0, [scopes, this], [scopes, this]]\n sb.emitOp(node, 'OVER');\n // [0, [scopes, this], 0, [scopes, this], [scopes, this]]\n sb.emitOp(node, 'OVER');\n // [scopes, 0, [scopes, this], [scopes, this]]\n sb.emitOp(node, 'PICKITEM');\n // [scopes, 0, [scopes, this], [scopes, this]]\n sb.emitHelper(node, options, sb.helpers.cloneArray);\n // [[scopes, this]]\n sb.emitOp(node, 'SETITEM');\n // [target, scopes]\n sb.emitHelper(node, options, sb.helpers.function({ body: this.body }));\n // [2, target, scopes]\n sb.emitPushInt(node, 2);\n // [arr]\n sb.emitOp(node, 'PACK');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { FuncProperty } from './InternalFunctionProperties';\n\nexport interface CreateFunctionObjectHelperOptions {\n property: FuncProperty;\n}\n\n// Input: [farr]\n// Output: [objectVal]\nexport class CreateFunctionObjectHelper extends Helper<Node> {\n private property: FuncProperty;\n\n constructor({ property }: CreateFunctionObjectHelperOptions) {\n super();\n this.property = property;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [objectVal, farr]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, farr, objectVal]\n sb.emitOp(node, 'TUCK');\n // ['call', objectVal, farr, objectVal]\n sb.emitPushString(node, this.property);\n // [farr, 'call', objectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface FunctionHelperOptions {\n body: () => void;\n}\n\n// Input: []\n// Output: [jumpTarget]\nexport class FunctionHelper extends Helper {\n private readonly body: () => void;\n\n constructor({ body }: FunctionHelperOptions) {\n super();\n this.body = body;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n const jump = sb.jumpTable.add(sb, node, () => {\n this.body();\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n });\n sb.emitPushInt(node, jump);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\nimport stringify from 'safe-stable-stringify';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalFunctionProperties } from './InternalFunctionProperties';\n\nexport interface InvokeCallHelperOptions {\n bindThis?: boolean;\n overwriteThis?: boolean;\n noArgs?: boolean;\n}\n\n// Input: [objectVal, ?thisVal, ?argsarray]\n// Output: [val]\nexport class InvokeCallHelper extends Helper {\n public static getKey(\n options: InvokeCallHelperOptions = { bindThis: false, noArgs: false },\n ): string {\n const bindThis = options.bindThis || false;\n const overwriteThis = options.overwriteThis || false;\n const noArgs = options.noArgs || false;\n return stringify({ bindThis, overwriteThis, noArgs });\n }\n\n private bindThis: boolean;\n private overwriteThis: boolean;\n private noArgs: boolean;\n\n constructor(\n options: InvokeCallHelperOptions = { bindThis: false, noArgs: false },\n ) {\n super();\n this.bindThis = options.bindThis || false;\n this.overwriteThis = options.overwriteThis || false;\n this.noArgs = options.noArgs || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['call', objectVal, ?thisVal, ?argsarray]\n sb.emitPushString(node, InternalFunctionProperties.CALL);\n // [func, ?thisVal, ?argsarray]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n if (this.bindThis) {\n // [func, ?argsarray]\n sb.emitHelper(\n node,\n options,\n sb.helpers.bindFunctionThis({ overwrite: this.overwriteThis }),\n );\n }\n if (this.noArgs) {\n // [0, func]\n sb.emitPushInt(node, 0);\n // [argsarray, func]\n sb.emitOp(node, 'NEWARRAY');\n // [func, argsarray]\n sb.emitOp(node, 'SWAP');\n }\n // [val]\n sb.emitHelper(node, optionsIn, sb.helpers.call);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalFunctionProperties } from './InternalFunctionProperties';\n\nexport interface InvokeConstructHelperOptions {\n noArgs?: boolean;\n}\n\n// Input: [objectVal, thisObjectVal, ?argsarray]\n// Output: []\nexport class InvokeConstructHelper extends Helper {\n private noArgs: boolean;\n\n constructor(options: InvokeConstructHelperOptions = { noArgs: false }) {\n super();\n this.noArgs = options.noArgs || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['construct', objectVal, thisObjectVal, ?argsarray]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, thisObjectVal, ?argsarray]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [func, ?argsarray]\n sb.emitHelper(\n node,\n options,\n sb.helpers.bindFunctionThis({ overwrite: true }),\n );\n if (this.noArgs) {\n // [0, func]\n sb.emitPushInt(node, 0);\n // [argsarray, func]\n sb.emitOp(node, 'NEWARRAY');\n // [func, argsarray]\n sb.emitOp(node, 'SWAP');\n }\n // []\n sb.emitHelper(node, sb.noPushValueOptions(optionsIn), sb.helpers.call);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface NewHelperOptions {\n noArgs?: boolean;\n}\n\n// Input: [objectVal, ?argsarr]\n// Output: [thisVal]\nexport class NewHelper extends Helper {\n private noArgs: boolean;\n\n constructor(options: NewHelperOptions = { noArgs: false }) {\n super();\n this.noArgs = options.noArgs || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [thisVal, objectVal, ?argsarr]\n sb.emitHelper(node, options, sb.helpers.createObject);\n if (this.noArgs) {\n // [thisVal, objectVal, thisVal]\n sb.emitOp(node, 'TUCK');\n } else {\n // [3, thisVal, objectVal, argsarr]\n sb.emitPushInt(node, 3);\n // [thisVal, objectVal, argsarr, thisVal]\n sb.emitOp(node, 'XTUCK');\n }\n // [thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitOp(node, 'TUCK');\n // [objectVal, thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitOp(node, 'OVER');\n // ['prototype', objectVal, thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitPushString(node, 'prototype');\n // [objectVal, 'prototype', thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitOp(node, 'SWAP');\n // ['prototype', objectVal, 'prototype', thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitPushString(node, 'prototype');\n // [prototype, 'prototype', thisVal, objectVal, thisVal, ?argsarr, thisVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [objectVal, thisVal, ?argsarr, thisVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [thisVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeConstruct({ noArgs: this.noArgs }),\n );\n\n if (!optionsIn.pushValue) {\n // []\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { SignaturedDeclaration, Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [argsArray]\n// Output: []\nexport class ParametersHelper extends Helper<Node & SignaturedDeclaration> {\n public emit(\n sb: ScriptBuilder,\n node: Node & SignaturedDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [argsarr]\n node.getParameters().forEach((param, idx) => {\n const name = sb.scope.add(param.getNameOrThrow());\n\n const initializer = param.getInitializer();\n if (param.isRestParameter()) {\n sb.reportUnsupported(param);\n } else if (initializer != null) {\n sb.emitHelper(\n param,\n sb.noPushValueOptions(options),\n sb.helpers.if({\n condition: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [size, argsarr]\n sb.emitOp(param, 'ARRAYSIZE');\n // [idx, size, argsarr]\n sb.emitPushInt(param, idx);\n // [lt, argsarr]\n sb.emitOp(param, 'LTE');\n },\n whenTrue: () => {\n // [default, argsarr]\n sb.visit(initializer, sb.pushValueOptions(options));\n },\n whenFalse: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [idx, argsarr, argsarr]\n sb.emitPushInt(param, idx);\n // [arg, argsarr]\n sb.emitOp(param, 'PICKITEM');\n // [arg, arg, argsarr]\n sb.emitOp(param, 'DUP');\n sb.emitHelper(\n param,\n sb.noPushValueOptions(options),\n sb.helpers.if({\n condition: () => {\n // [isUndefined, arg, argsarr]\n sb.emitHelper(\n param,\n sb.pushValueOptions(options),\n sb.helpers.isUndefined,\n );\n },\n whenTrue: () => {\n // [argsarr]\n sb.emitOp(param, 'DROP');\n // [default, argsarr]\n sb.visit(initializer, sb.pushValueOptions(options));\n },\n }),\n );\n },\n }),\n );\n } else if (param.isOptional()) {\n sb.emitHelper(\n param,\n sb.noPushValueOptions(options),\n sb.helpers.if({\n condition: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [size, argsarr]\n sb.emitOp(param, 'ARRAYSIZE');\n // [idx, size, argsarr]\n sb.emitPushInt(param, idx);\n // [lt, argsarr]\n sb.emitOp(param, 'LT');\n },\n whenTrue: () => {\n // [undefinedVal, argsarr]\n sb.emitHelper(\n param,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n },\n whenFalse: () => {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [idx, argsarr, argsarr]\n sb.emitPushInt(param, idx);\n // [arg, argsarr]\n sb.emitOp(param, 'PICKITEM');\n },\n }),\n );\n } else {\n // [argsarr, argsarr]\n sb.emitOp(param, 'DUP');\n // [idx, argsarr, argsarr]\n sb.emitPushInt(param, idx);\n // [arg, argsarr]\n sb.emitOp(param, 'PICKITEM');\n }\n\n const decorators = param.getDecorators();\n if (decorators.length > 0) {\n sb.reportUnsupported(param);\n }\n\n // [argsarr]\n sb.scope.set(sb, param, sb.plainOptions(options), name);\n });\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { getTypes, DESERIALIZE_NAME, invokeDeserialize } from './serialize';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [val]\n// Output: []\nexport class GenericDeserializeHelper extends Helper {\n public emitGlobal(\n sb: ScriptBuilder,\n node: Node,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [name, globalObjectVal]\n sb.emitPushString(node, DESERIALIZE_NAME);\n // [farr, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionArray({\n body: () => {\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n getTypes(sb, node, options).map((forType) => ({\n condition: () => {\n sb.emitOp(node, 'DUP');\n forType.isSerializedType();\n },\n whenTrue: () => {\n forType.deserialize();\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n },\n })),\n () => {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n ),\n );\n },\n }),\n );\n // [objectVal, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n invokeDeserialize(sb, node, options);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { getTypes, SERIALIZE_NAME, invokeSerialize } from './serialize';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [val]\n// Output: []\nexport class GenericSerializeHelper extends Helper {\n public emitGlobal(\n sb: ScriptBuilder,\n node: Node,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [name, globalObjectVal]\n sb.emitPushString(node, SERIALIZE_NAME);\n // [farr, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionArray({\n body: () => {\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n getTypes(sb, node, options).map((forType) => ({\n condition: () => {\n sb.emitOp(node, 'DUP');\n forType.isRuntimeType();\n },\n whenTrue: () => {\n forType.serialize();\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n },\n })),\n () => {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n ),\n );\n },\n }),\n );\n // [objectVal, name, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n invokeSerialize(sb, node, options);\n }\n}\n","import { Type } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { Types } from '../types/Types';\n\nexport interface TypedHelperOptions {\n type: Type | undefined;\n knownType?: Types;\n}\n\nexport abstract class TypedHelper extends Helper {\n protected readonly type: Type | undefined;\n protected readonly knownType: Types | undefined;\n\n constructor({ knownType, type }: TypedHelperOptions) {\n super();\n this.type = type;\n this.knownType = knownType;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val, errorVal]\n// Output: [completion]\nexport class CreateCompletionHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [2, val, errorVal]\n sb.emitPushInt(node, 2);\n // [completion]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [completion]\nexport class CreateNormalCompletionHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [undefinedVal, val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [val, undefinedVal]\n sb.emitOp(node, 'SWAP');\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createCompletion);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [errorVal]\n// Output: [completion]\nexport class CreateThrowCompletionHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [undefinedVal, errorVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n // [completion]\n sb.emitHelper(node, options, sb.helpers.createCompletion);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [completion]\n// Output: [val]\nexport abstract class GetCompletionBaseHelper extends Helper<Node> {\n protected abstract index: number;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [index, completion]\n sb.emitPushInt(node, this.index);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetCompletionBaseHelper } from './GetCompletionBaseHelper';\n\n// Input: [completion]\n// Output: [errorVal]\nexport class GetCompletionErrorHelper extends GetCompletionBaseHelper {\n protected index = 1;\n}\n","import { GetCompletionBaseHelper } from './GetCompletionBaseHelper';\n\n// Input: [completion]\n// Output: [errorVal]\nexport class GetCompletionValHelper extends GetCompletionBaseHelper {\n protected index = 0;\n}\n","export enum DiagnosticCode {\n UNSUPPORTED_SYNTAX = 0,\n UNKNOWN_TYPE,\n EXPECTED_NUMBER,\n EXPECTED_STRING,\n REFERENCE_ERROR,\n SOMETHING_WENT_WRONG,\n EXPECTED_PROPERTY,\n EXPECTED_CAST,\n TRANSPILATION_ERROR,\n INVALID_CONTRACT_PARAMETER,\n INVALID_CONTRACT_TYPE,\n INVALID_CONTRACT_METHOD,\n INVALID_VALUE_TYPE,\n INVALID_SYS_CALL,\n UNKNOWN_SYMBOL,\n}\n","import { SyntaxKind } from 'ts-simple-ast';\n\nexport const MAIN_FUNCTION = 'main';\nexport const NORMAL_COMPLETION = 0;\nexport const BREAK_COMPLETION = 1;\nexport const CONTINUE_COMPLETION = 2;\nexport const CATCH_COMPLETION = 3;\n\nexport const ASSIGNMENT_OPERATORS = new Set([\n SyntaxKind.EqualsToken,\n SyntaxKind.PlusEqualsToken,\n SyntaxKind.MinusEqualsToken,\n SyntaxKind.AsteriskAsteriskEqualsToken,\n SyntaxKind.AsteriskEqualsToken,\n SyntaxKind.SlashEqualsToken,\n SyntaxKind.PercentEqualsToken,\n SyntaxKind.AmpersandEqualsToken,\n SyntaxKind.BarEqualsToken,\n SyntaxKind.CaretEqualsToken,\n SyntaxKind.LessThanLessThanEqualsToken,\n SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,\n SyntaxKind.GreaterThanGreaterThanEqualsToken,\n]);\n","import { Node, TypeGuards } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../../DiagnosticCode';\nimport { ScriptBuilder } from '../../sb';\nimport { Helper } from '../Helper';\nimport { VisitOptions } from '../../types';\n\nimport * as constants from '../../../constants';\n\nconst isValidParent = (node?: Node) =>\n node != null &&\n (TypeGuards.isTryStatement(node) ||\n TypeGuards.isFunctionLikeDeclaration(node) ||\n TypeGuards.isArrowFunction(node) ||\n TypeGuards.isSourceFile(node));\n\n// Input: [completion]\n// Output: []\nexport class HandleCompletionHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [completion, completion]\n sb.emitOp(node, 'DUP');\n // [errorVal, completion]\n sb.emitHelper(node, options, sb.helpers.getCompletionError);\n // [isUndefined, completion]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n sb.emitOp(node, 'DROP');\n },\n whenFalse: () => {\n let parent = node.getParent();\n if (!isValidParent(parent)) {\n parent = node.getParentWhile(\n (parentNode) => !isValidParent(parentNode),\n );\n if (parent != null) {\n parent = parent.getParent();\n }\n }\n\n if (\n TypeGuards.isSourceFile(node) ||\n (parent != null && TypeGuards.isSourceFile(parent))\n ) {\n // TODO: Add Error notification\n sb.emitOp(node, 'THROW');\n } else if (parent == null) {\n sb.reportError(\n node,\n 'Something went wrong, could not find a valid parent node.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else if (TypeGuards.isTryStatement(parent)) {\n if (options.catchPC == null) {\n sb.reportError(\n node,\n 'Something went wrong. Expected a catch jump location.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else {\n sb.emitPushInt(node, constants.CATCH_COMPLETION);\n sb.emitJmp(node, 'JMP', options.catchPC);\n }\n } else {\n sb.emitOp(node, 'RET');\n }\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [completion]\n// Output: [val]\nexport class PickCompletionValHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [completion, completion]\n sb.emitOp(node, 'DUP');\n }\n\n sb.emitHelper(node, options, sb.helpers.handleCompletion);\n\n if (options.pushValue) {\n sb.emitHelper(node, options, sb.helpers.getCompletionVal);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [errorVal]\n// Output: []\nexport class ThrowHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [throwCompletion]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createThrowCompletion,\n );\n // []\n sb.emitHelper(node, options, sb.helpers.handleCompletion);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: []\nexport class ThrowTypeErrorHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // TODO: Implement with global TypeError prototype\n // ['TypeError']\n sb.emitPushString(node, 'TypeError');\n // [value]\n sb.emitHelper(node, options, sb.helpers.createString);\n // []\n sb.emitHelper(node, options, sb.helpers.throw);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface Case {\n condition: () => void;\n whenTrue: () => void;\n}\n\n// Input: []\n// Output: []\nexport class CaseHelper extends Helper {\n private readonly cases: Case[];\n private readonly defaultCase: () => void;\n\n constructor(cases: Case[], defaultCase: () => void) {\n super();\n this.cases = cases;\n this.defaultCase = defaultCase;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n this.addCase(sb, node, options);\n }\n\n public addCase(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n idx: number = 0,\n ): void {\n if (idx >= this.cases.length) {\n this.defaultCase();\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: this.cases[idx].condition,\n whenTrue: this.cases[idx].whenTrue,\n whenFalse: () => this.addCase(sb, node, options, idx + 1),\n }),\n );\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport type ForLoopHelperFunction = (() => void) | undefined;\nexport interface ForLoopHelperOptions {\n each: (options: VisitOptions) => void;\n initializer?: ForLoopHelperFunction;\n condition: ForLoopHelperFunction;\n incrementor?: ForLoopHelperFunction;\n withScope?: boolean;\n}\n\nexport class ForLoopHelper extends Helper {\n private readonly each: (options: VisitOptions) => void;\n private readonly initializer: ForLoopHelperFunction;\n private readonly condition: ForLoopHelperFunction;\n private readonly incrementor: ForLoopHelperFunction;\n private readonly withScope: boolean;\n\n constructor({\n each,\n initializer,\n condition,\n incrementor,\n withScope,\n }: ForLoopHelperOptions) {\n super();\n this.each = each;\n this.initializer = initializer;\n this.condition = condition;\n this.incrementor = incrementor;\n this.withScope = withScope == null ? true : withScope;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.withScope) {\n sb.withScope(node, options, (innerOptions) => {\n this.emitLoop(sb, node, innerOptions);\n });\n } else {\n this.emitLoop(sb, node, options);\n }\n }\n\n // TODO: Optimize to check for continue/break that refers to this loop in child.\n private emitLoop(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.initializer != null) {\n this.initializer();\n }\n\n sb.withProgramCounter((loopPC) => {\n if (this.condition != null) {\n this.condition();\n }\n\n if (!loopPC.getFirst().equals(loopPC.getCurrent())) {\n sb.emitJmp(node, 'JMPIFNOT', loopPC.getLast());\n }\n\n sb.withProgramCounter((breakPC) => {\n sb.withProgramCounter((innerPC) => {\n sb.withProgramCounter((continuePC) => {\n this.each(\n sb.breakPCOptions(\n sb.continuePCOptions(options, continuePC.getLast()),\n breakPC.getLast(),\n ),\n );\n sb.emitJmp(node, 'JMP', innerPC.getLast());\n });\n\n // Drop continue completion\n sb.emitOp(node, 'DROP');\n });\n\n if (this.incrementor != null) {\n this.incrementor();\n }\n\n sb.emitJmp(node, 'JMP', loopPC.getFirst());\n });\n\n // Drop break completion\n sb.emitOp(node, 'DROP');\n });\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface IfHelperOptions {\n condition: () => void;\n whenTrue?: () => void;\n whenFalse?: (() => void) | undefined;\n}\n\nexport class IfHelper extends Helper {\n private readonly condition: () => void;\n private readonly whenTrue: (() => void) | undefined;\n private readonly whenFalse: (() => void) | undefined;\n\n constructor({ condition, whenTrue, whenFalse }: IfHelperOptions) {\n super();\n this.condition = condition;\n this.whenTrue = whenTrue;\n this.whenFalse = whenFalse;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n this.condition();\n const { whenTrue, whenFalse } = this;\n if (whenTrue == null) {\n if (whenFalse == null) {\n throw new Error('If statement must have a true or false value');\n }\n sb.withProgramCounter((endPC) => {\n sb.emitJmp(node, 'JMPIF', endPC.getLast());\n whenFalse();\n });\n } else {\n sb.withProgramCounter((whenFalsePC) => {\n sb.withProgramCounter((whenTruePC) => {\n sb.emitJmp(node, 'JMPIFNOT', whenTruePC.getLast());\n whenTrue();\n if (this.whenFalse != null) {\n sb.emitJmp(node, 'JMP', whenFalsePC.getLast());\n }\n });\n\n if (this.whenFalse != null) {\n this.whenFalse();\n }\n });\n }\n }\n}\n","import { Node, StatementedNode } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ProcessStatementsHelperOptions {\n createScope: boolean;\n}\n\nexport class ProcessStatementsHelper extends Helper<Node & StatementedNode> {\n private readonly createScope: boolean;\n constructor({ createScope }: ProcessStatementsHelperOptions) {\n super();\n this.createScope = createScope;\n }\n public emit(\n sb: ScriptBuilder,\n node: Node & StatementedNode,\n options: VisitOptions,\n ): void {\n if (this.createScope) {\n sb.withScope(node, options, (innerOptions) => {\n this.emitStatements(sb, node, innerOptions);\n });\n } else {\n this.emitStatements(sb, node, options);\n }\n }\n\n private emitStatements(\n sb: ScriptBuilder,\n node: Node & StatementedNode,\n options: VisitOptions,\n ): void {\n node.getFunctions().forEach((func) => {\n sb.scope.add(func.getName());\n });\n node.getVariableDeclarations().forEach((decl) => {\n sb.scope.add(decl.getName());\n });\n\n const compilerStatements = (node.compilerNode as any).statements;\n let statements;\n if (compilerStatements == null) {\n statements = node.getStatements();\n } else {\n statements = compilerStatements.map((statement: any) =>\n (node as any).getNodeFromCompilerNode(statement),\n );\n }\n statements.forEach((statement: any) => {\n // TODO: Should functions be hoisted?\n sb.visit(statement, sb.noValueOptions(options));\n });\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { Types } from './Types';\n\n// Input: [value]\n// Output: [val]\nexport abstract class CreatePrimitiveHelper extends Helper<Node> {\n protected length = 2;\n protected abstract type: Types;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [type, value]\n sb.emitPushInt(node, this.type);\n // [2, type, value]\n sb.emitPushInt(node, this.length);\n // [[type, value]]\n sb.emitOp(node, 'PACK');\n }\n}\n","export enum Types {\n Undefined = 0,\n Null = 1,\n Boolean = 2,\n String = 3,\n Symbol = 4,\n Number = 5,\n Object = 6,\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [boolean]\n// Output: [booleanVal]\nexport class CreateBooleanHelper extends CreatePrimitiveHelper {\n protected type = Types.Boolean;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [value]\nexport abstract class GetPrimitiveHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [1, val]\n sb.emitPushInt(node, 1);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [booleanVal]\n// Output: [boolean]\nexport class GetBooleanHelper extends GetPrimitiveHelper {}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { Types } from './Types';\n\n// Input: [val]\n// Output: [boolean]\nexport abstract class IsHelper extends Helper<Node> {\n protected abstract type: Types;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [0, value]\n sb.emitPushInt(node, 0);\n // [type]\n sb.emitOp(node, 'PICKITEM');\n // [type, type]\n sb.emitPushInt(node, this.type);\n // [isType]\n sb.emitOp(node, 'EQUAL');\n }\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsBooleanHelper extends IsHelper {\n protected type = Types.Boolean;\n}\n","import { Type, TypeFlags, ts } from 'ts-simple-ast';\n\nfunction getType(type: undefined): undefined;\nfunction getType(type: Type<ts.Type>): Type<ts.Type>;\nfunction getType(type: Type<ts.Type> | undefined): Type<ts.Type> | undefined {\n if (type == null) {\n return undefined;\n }\n\n const constraint = type.getConstraint();\n return constraint == null ? type : constraint;\n}\n\nexport const hasUnionType = (\n type: Type<ts.Type>,\n isType: (type: Type<ts.Type>) => boolean,\n): boolean =>\n getType(type).isUnionType() &&\n getType(type)\n .getUnionTypes()\n .some(isType);\n\nexport const hasIntersectionType = (\n type: Type<ts.Type>,\n isType: (type: Type<ts.Type>) => boolean,\n): boolean =>\n getType(type).isIntersectionType() &&\n getType(type)\n .getIntersectionTypes()\n .some(isType);\n\nexport const hasType = (\n type: Type<ts.Type>,\n isType: (type: Type<ts.Type>) => boolean,\n): boolean =>\n isType(type) ||\n hasUnionType(type, isType) ||\n hasIntersectionType(type, isType);\n\nexport const isOnly = (\n type: Type<ts.Type> | undefined,\n isType: (type: Type<ts.Type> | undefined) => boolean,\n): boolean =>\n type != null &&\n !getType(type).isNullable() &&\n (isType(type) ||\n (getType(type).isUnionType() &&\n getType(type)\n .getUnionTypes()\n .every((unionType) => isOnly(unionType, isType))) ||\n (getType(type).isIntersectionType() &&\n getType(type)\n .getIntersectionTypes()\n .every((intersectionType) => isOnly(intersectionType, isType))));\n\nexport const isUndefined = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isUndefinedType();\n\nexport const isOnlyUndefined = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isUndefined);\n\nexport const hasUndefined = (type: Type<ts.Type>): boolean =>\n hasType(type, isUndefined);\n\nexport const isNull = (type?: Type<ts.Type>): boolean =>\n type != null && (getType(type).isNullType() || getType(type).isNullable());\n\nexport const isOnlyNull = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isNull);\n\nexport const hasNull = (type: Type<ts.Type>): boolean =>\n hasType(type, isNull) || getType(type).isNullable();\n\nexport const isOnlyNumberLiteral = (type?: Type<ts.Type>): boolean =>\n type != null &&\n isOnly(type, (tpe) => tpe != null && tpe.isNumberLiteralType());\n\nexport const isNumber = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (getType(type).isNumberType() || getType(type).isNumberLiteralType());\n\nexport const isOnlyNumber = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isNumber);\n\nexport const hasNumber = (type: Type<ts.Type>): boolean =>\n hasType(type, isNumber);\n\nexport const isString = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (getType(type).isStringType() || getType(type).isStringLiteralType());\n\nexport const isOnlyString = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isString);\n\nexport const hasString = (type: Type<ts.Type>): boolean =>\n hasType(type, isString);\n\nexport const isBoolean = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (getType(type).isBooleanType() || getType(type).isBooleanLiteralType());\n\nexport const isOnlyBoolean = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isBoolean);\n\nexport const hasBoolean = (type: Type<ts.Type>): boolean =>\n hasType(type, isBoolean);\n\nconst hasTypeFlag = (type: Type<ts.Type>, flag: TypeFlags): boolean =>\n // tslint:disable-next-line\n (getType(type).compilerType.flags & flag) === flag;\n\nexport const isSymbol = (type?: Type<ts.Type>): boolean =>\n type != null &&\n (hasTypeFlag(type, TypeFlags.ESSymbol) ||\n hasTypeFlag(type, TypeFlags.ESSymbolLike));\n\nexport const isOnlySymbol = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isSymbol);\n\nexport const hasSymbol = (type: Type<ts.Type>): boolean =>\n hasType(type, isSymbol);\n\nexport const isPrimitive = (type?: Type<ts.Type>): boolean =>\n isUndefined(type) ||\n isNull(type) ||\n isString(type) ||\n isNumber(type) ||\n isBoolean(type) ||\n isSymbol(type);\n\nexport const isOnlyPrimitive = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isPrimitive);\n\nexport const hasPrimitive = (type: Type<ts.Type>): boolean =>\n hasType(type, isPrimitive);\n\nexport const isOnlyObject = (type?: Type<ts.Type>): boolean =>\n isOnly(type, (tpe) => !isPrimitive(tpe));\n\nexport const isArray = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isArrayType();\n\nexport const isOnlyArray = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isArray);\n\nexport const isTuple = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isTupleType();\n\nexport const isOnlyTuple = (type?: Type<ts.Type>): boolean =>\n isOnly(type, isTuple);\n\nexport const isSame = (type0?: Type<ts.Type>, type1?: Type<ts.Type>): boolean =>\n type0 != null &&\n type1 != null &&\n (type0 === type1 ||\n (isOnlyBoolean(type0) && isOnlyBoolean(type1)) ||\n (isOnlyNumber(type0) && isOnlyNumber(type1)) ||\n (isOnlyString(type0) && isOnlyString(type1)));\n\nexport const isUnion = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isUnionType();\n\nexport const isIntersection = (type?: Type<ts.Type>): boolean =>\n type != null && getType(type).isIntersectionType();\n\nexport const isLiteral = (type?: Type): boolean =>\n type != null && getType(type).isLiteralType();\n\nexport const isAnyType = (type?: Type): boolean =>\n type != null && hasTypeFlag(type, TypeFlags.Any);\n\nexport const isVoid = (type?: Type): boolean =>\n type != null && hasTypeFlag(type, TypeFlags.Void);\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [boolean]\nexport class ToBooleanHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (this.type != null) {\n this.convertType(sb, node, options, this.type);\n } else {\n this.convertUnknownType(sb, node, options);\n }\n }\n\n private convertType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type: Type,\n ): void {\n if (typeUtils.isOnlyUndefined(type) || typeUtils.isOnlyNull(type)) {\n sb.emitPushBoolean(node, false);\n } else if (typeUtils.isOnlyBoolean(type)) {\n this.convertBoolean(sb, node, options);\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertNumber(sb, node, options);\n } else if (typeUtils.isOnlyString(type)) {\n this.convertString(sb, node, options);\n } else if (\n // It's a symbol or an object\n !typeUtils.hasUndefined(type) &&\n !typeUtils.hasNull(type) &&\n !typeUtils.hasBoolean(type) &&\n !typeUtils.hasNumber(type) &&\n !typeUtils.hasString(type)\n ) {\n sb.emitPushBoolean(node, true);\n } else {\n this.convertUnknownType(sb, node, options);\n }\n }\n\n private convertBoolean(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n }\n\n private convertNumber(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n sb.emitPushInt(node, 0);\n sb.emitOp(node, 'NUMNOTEQUAL');\n }\n\n private convertString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getString);\n sb.emitPushString(node, '');\n sb.emitOp(node, 'EQUAL');\n sb.emitOp(node, 'NOT');\n }\n\n private convertUnknownType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isBoolean, value]\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n },\n whenTrue: () => {\n // [value]\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n },\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isNull, value]\n sb.emitHelper(node, options, sb.helpers.isNull);\n // [value, isNull, value]\n sb.emitOp(node, 'OVER');\n // [isUndefined, isNull, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n // [isUndefinedOrNull, value]\n sb.emitOp(node, 'OR');\n },\n whenTrue: () => {\n sb.emitPushBoolean(node, false);\n },\n },\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isObject, value]\n sb.emitHelper(node, options, sb.helpers.isObject);\n // [value, isObject, value]\n sb.emitOp(node, 'OVER');\n // [isSymbol, isObject, value]\n sb.emitHelper(node, options, sb.helpers.isSymbol);\n // [isSymbolOrObject, value]\n sb.emitOp(node, 'OR');\n },\n whenTrue: () => {\n sb.emitPushBoolean(node, true);\n },\n },\n {\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isNumber, value]\n sb.emitHelper(node, options, sb.helpers.isNumber);\n },\n whenTrue: () => {\n this.convertNumber(sb, node, options);\n },\n },\n ],\n () => {\n this.convertString(sb, node, options);\n },\n ),\n );\n }\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: []\n// Output: [nullVal]\nexport class CreateNullHelper extends CreatePrimitiveHelper {\n protected length = 1;\n protected type = Types.Null;\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsNullHelper extends IsHelper {\n protected type = Types.Null;\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [number]\n// Output: [numberVal]\nexport class CreateNumberHelper extends CreatePrimitiveHelper {\n protected type = Types.Number;\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [numberVal]\n// Output: [number]\nexport class GetNumberHelper extends GetPrimitiveHelper {}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsNumberHelper extends IsHelper {\n protected type = Types.Number;\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\nimport { Types } from '../Types';\n\n// TODO: Should we support NaN? We currently throw TypeError in cases where NaN would normally\n// be the result.\n// Input: [val]\n// Output: [number]\nexport class ToNumberHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (this.type != null) {\n this.convertType(sb, node, options, this.type);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type: Type,\n ): void {\n if (typeUtils.isOnlyUndefined(type)) {\n this.convertUndefined(sb, node, options);\n } else if (typeUtils.isOnlyNull(type)) {\n this.convertNull(sb, node, options);\n } else if (typeUtils.isOnlyBoolean(type)) {\n this.convertBoolean(sb, node, options);\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertNumber(sb, node, options);\n } else if (typeUtils.isOnlyString(type)) {\n this.convertString(sb, node, options);\n } else if (typeUtils.isOnlySymbol(type)) {\n this.convertSymbol(sb, node, options);\n } else if (typeUtils.isOnlyObject(type)) {\n this.convertObject(sb, node, options);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertUndefined(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // TODO: Should we support this?\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertNull(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // []\n sb.emitOp(node, 'DROP');\n // [0]\n sb.emitPushInt(node, 0);\n }\n\n private convertBoolean(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n whenTrue: () => {\n // [1]\n sb.emitPushInt(node, 1);\n },\n whenFalse: () => {\n // [0]\n sb.emitPushInt(node, 0);\n },\n }),\n );\n }\n\n private convertNumber(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [value]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n }\n\n private convertString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // TODO: Should we support this?\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertSymbol(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertObject(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [primitive]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({\n type: this.type,\n knownType: Types.Object,\n preferredType: 'number',\n }),\n );\n // [value]\n this.convertUnknown(sb, node, options, true);\n }\n\n private convertUnknown(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n shouldThrowOnObject: boolean = false,\n ): void {\n const emitIf = (\n check: Helper<Node>,\n whenTrue: () => void,\n whenFalse: () => void,\n ) =>\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isValue, value]\n sb.emitHelper(node, options, check);\n },\n whenTrue,\n whenFalse,\n }),\n );\n\n emitIf(\n sb.helpers.isNumber,\n () => this.convertNumber(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isUndefined,\n () => this.convertUndefined(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isNull,\n () => this.convertNull(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isBoolean,\n () => this.convertBoolean(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isString,\n () => this.convertString(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isSymbol,\n () => this.convertSymbol(sb, node, options),\n () =>\n shouldThrowOnObject\n ? sb.emitHelper(\n node,\n options,\n sb.helpers.throwTypeError,\n )\n : this.convertObject(sb, node, options),\n ),\n ),\n ),\n ),\n ),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\nimport { Types } from '../Types';\n\n// Input: []\n// Output: [objectVal]\nexport class CreateObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n /* create internal object */\n // [iobj]\n sb.emitOp(node, 'NEWMAP');\n\n /* create symbol obj */\n // [sobj, iobj]\n sb.emitOp(node, 'NEWMAP');\n\n /* create obj */\n // [pobj, sobj, iobj]\n sb.emitOp(node, 'NEWMAP');\n\n // TODO: Consolidate with ShallowCloneObjectHelper\n /* create object array */\n // [3, pobj, sobj, iobj]\n sb.emitPushInt(node, 3);\n // [object]\n sb.emitOp(node, 'PACK');\n\n // [objectType, object]\n sb.emitPushInt(node, Types.Object);\n\n /* create object */\n // [2, objectType, object]\n sb.emitPushInt(node, 2);\n // [objectVal]\n sb.emitOp(node, 'PACK');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [pobj]\n// Output: [objectVal]\nexport class CreatePropertyObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // TODO: This could use some optimization.\n const obj = sb.scope.addUnique();\n const pobj = sb.scope.addUnique();\n // [pobj, pobj]\n sb.emitOp(node, 'DUP');\n // [pobj]\n sb.scope.set(sb, node, options, pobj);\n // [objectVal, pobj]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, pobj, objectVal]\n sb.emitOp(node, 'TUCK');\n // [pobj, objectVal]\n sb.scope.set(sb, node, options, obj);\n // [keysArr, objectVal]\n sb.emitOp(node, 'KEYS');\n // [objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrForEach({\n each: () => {\n // [objectVal, key]\n sb.scope.get(sb, node, options, obj);\n // [pobj, objectVal, key]\n sb.scope.get(sb, node, options, pobj);\n // [key, pobj, objectVal]\n sb.emitOp(node, 'ROT');\n // [key, pobj, key, objectVal]\n sb.emitOp(node, 'TUCK');\n // [val, key, objectVal]\n sb.emitOp(node, 'PICKITEM');\n // []\n sb.emitHelper(\n node,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n },\n }),\n );\n }\n }\n}\n","import { ElementAccessExpression, Node, Type, ts } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [val]\nexport class ElementAccessHelper extends Helper<ElementAccessExpression> {\n public emit(\n sb: ScriptBuilder,\n expr: ElementAccessExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn));\n const value = expr.getExpression();\n const valueType = sb.getType(value);\n const prop = expr.getArgumentExpressionOrThrow();\n const propType = sb.getType(prop);\n\n // [objectVal]\n sb.emitHelper(\n value,\n options,\n sb.helpers.toObject({ type: sb.getType(value) }),\n );\n\n // [propVal, objectVal]\n sb.visit(prop, options);\n\n if (optionsIn.setValue) {\n let valueIndex = 2;\n if (optionsIn.pushValue) {\n // [objectVal, propVal]\n sb.emitOp(expr, 'SWAP');\n // [objectVal, propVal, objectVal]\n sb.emitOp(expr, 'TUCK');\n // [propVal, objectVal, propVal, objectVal]\n sb.emitOp(expr, 'OVER');\n valueIndex = 4;\n }\n\n if (typeUtils.isOnlyString(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // []\n this.setProperty(sb, prop, options, valueIndex);\n } else if (typeUtils.isOnlyNumber(propType)) {\n // []\n this.setNumberProperty(\n sb,\n prop,\n options,\n propType,\n valueType,\n valueIndex,\n );\n } else if (typeUtils.isOnlySymbol(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // []\n this.setSymbol(sb, prop, options, valueIndex);\n } else {\n // []\n sb.emitHelper(\n prop,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [isString, propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isString);\n },\n whenTrue: () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // []\n this.setProperty(sb, prop, options, valueIndex);\n },\n },\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [isNumber, propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isNumber);\n },\n whenTrue: () => {\n // []\n this.setNumberProperty(\n sb,\n prop,\n options,\n propType,\n valueType,\n valueIndex,\n );\n },\n },\n ],\n () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // []\n this.setSymbol(sb, prop, options, valueIndex);\n },\n ),\n );\n }\n }\n\n if (optionsIn.pushValue || !optionsIn.setValue) {\n if (typeUtils.isOnlyString(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // [val]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n } else if (typeUtils.isOnlyNumber(propType)) {\n // [val]\n this.getNumberProperty(sb, prop, options, propType, valueType);\n } else if (typeUtils.isOnlySymbol(propType)) {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // [val]\n sb.emitHelper(expr, options, sb.helpers.getSymbolObjectProperty);\n } else {\n // [val]\n sb.emitHelper(\n prop,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isString);\n },\n whenTrue: () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getString);\n // [val]\n sb.emitHelper(\n expr,\n options,\n sb.helpers.getPropertyObjectProperty,\n );\n },\n },\n {\n condition: () => {\n // [propVal, propVal, objectVal]\n sb.emitOp(prop, 'DUP');\n // [propVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.isNumber);\n },\n whenTrue: () => {\n // [val]\n this.getNumberProperty(\n sb,\n prop,\n options,\n propType,\n valueType,\n );\n },\n },\n ],\n () => {\n // [propString, objectVal]\n sb.emitHelper(prop, options, sb.helpers.getSymbol);\n // [val]\n sb.emitHelper(expr, options, sb.helpers.getSymbolObjectProperty);\n },\n ),\n );\n }\n }\n\n if (!optionsIn.pushValue && !optionsIn.setValue) {\n sb.emitOp(expr, 'DROP');\n }\n }\n\n private getNumberProperty(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n propType: Type<ts.Type> | undefined,\n valueType: Type<ts.Type> | undefined,\n ): void {\n if (typeUtils.isOnlyArray(valueType) || typeUtils.isOnlyTuple(valueType)) {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n sb.emitHelper(node, options, sb.helpers.getArrayIndex);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [isArray, propVal, objectVal]\n this.isArrayInstance(sb, node, options);\n },\n whenTrue: () => {\n // [propNumber, objectVal]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [val]\n sb.emitHelper(node, options, sb.helpers.getArrayIndex);\n },\n whenFalse: () => {\n // [propString, objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: propType }),\n );\n // [val]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n },\n }),\n );\n }\n }\n\n private setProperty(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n // [val, propString, objectVal]\n this.pickValue(sb, node, options, index);\n // []\n sb.emitHelper(node, options, sb.helpers.setPropertyObjectProperty);\n }\n\n private setNumberProperty(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n propType: Type<ts.Type> | undefined,\n valueType: Type<ts.Type> | undefined,\n index: number,\n ): void {\n if (typeUtils.isOnlyArray(valueType) || typeUtils.isOnlyTuple(valueType)) {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n this.setArrayIndex(sb, node, options, index);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [isArray, propVal, objectVal]\n this.isArrayInstance(sb, node, options);\n },\n whenTrue: () => {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n this.setArrayIndex(sb, node, options, index);\n },\n whenFalse: () => {\n // [propString, objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: propType }),\n );\n // []\n this.setProperty(sb, node, options, index);\n },\n }),\n );\n }\n }\n\n private setArrayIndex(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n // [val, propNumber, objectVal]\n this.pickValue(sb, node, options, index);\n // []\n sb.emitHelper(node, options, sb.helpers.setArrayIndex);\n }\n\n private setSymbol(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n // [val, propString, objectVal]\n this.pickValue(sb, node, options, index);\n // []\n sb.emitHelper(node, options, sb.helpers.setSymbolObjectProperty);\n }\n\n private isArrayInstance(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, propVal, objectVal]\n sb.emitOp(node, 'OVER');\n // [Array, objectVal, propVal, objectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [isArray, propVal, objectVal]\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n private pickValue(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n index: number,\n ): void {\n if (index === 2) {\n sb.emitOp(node, 'ROT');\n } else {\n // [index, ...]\n sb.emitPushInt(node, index);\n // [val, ...]\n sb.emitOp(node, 'ROLL');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nexport interface FindObjectPropertyHelperOptions {\n accessor: () => void;\n dataExists: () => void;\n data: () => void;\n getObject: (sb: ScriptBuilder) => Helper<Node>;\n}\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class FindObjectPropertyHelper extends Helper<Node> {\n private readonly accessor: () => void;\n private readonly dataExists: () => void;\n private readonly data: () => void;\n private readonly getObject: (sb: ScriptBuilder) => Helper<Node>;\n\n constructor({\n accessor,\n dataExists,\n data,\n getObject,\n }: FindObjectPropertyHelperOptions) {\n super();\n this.accessor = accessor;\n this.dataExists = dataExists;\n this.data = data;\n this.getObject = getObject;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, prop]\n sb.emitOp(node, 'SWAP');\n\n const prepareLoop = () => {\n // [objectVal, objectVal, prop]\n sb.emitOp(node, 'DUP');\n // [pobj, objectVal, prop]\n sb.emitHelper(node, options, sb.helpers.getPropertyObject);\n // [pobj, pobj, objectVal, prop]\n sb.emitOp(node, 'DUP');\n // [objectVal, pobj, pobj, prop]\n sb.emitOp(node, 'ROT');\n // [obj, pobj, pobj, prop]\n sb.emitHelper(node, options, this.getObject(sb));\n // [obj, obj, pobj, pobj, prop]\n sb.emitOp(node, 'DUP');\n // [4, obj, obj, pobj, pobj, prop]\n sb.emitPushInt(node, 4);\n // [prop, obj, obj, pobj, pobj, prop]\n sb.emitOp(node, 'PICK');\n };\n\n // [prop, obj, obj, pobj, pobj, prop]\n prepareLoop();\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [hasKey, obj, pobj, pobj, prop]\n sb.emitOp(node, 'HASKEY');\n // [notHasKey, obj, pobj, pobj, prop]\n sb.emitOp(node, 'NOT');\n // [pobj, notHasKey, obj, pobj, prop]\n sb.emitOp(node, 'ROT');\n // ['prototype', pobj, notHasKey, obj, pobj, prop]\n sb.emitPushString(node, 'prototype');\n // [hasPrototypeKey, notHasKey, obj, pobj, prop]\n sb.emitOp(node, 'HASKEY');\n // [condition, obj, pobj, prop]\n sb.emitOp(node, 'AND');\n },\n each: () => {\n // [pobj, prop]\n sb.emitOp(node, 'DROP');\n // ['prototype', pobj, prop]\n sb.emitPushString(node, 'prototype');\n // [propVal, prop]\n sb.emitOp(node, 'PICKITEM');\n // [0, propVal, prop]\n sb.emitPushInt(node, 0);\n // [objectVal, prop]\n sb.emitOp(node, 'PICKITEM');\n // [prop, obj, obj, pobj, pobj, prop]\n prepareLoop();\n },\n withScope: false,\n }),\n );\n // [obj, prop]\n sb.emitOp(node, 'NIP');\n // [obj, prop, obj]\n sb.emitOp(node, 'TUCK');\n // [prop, obj, prop, obj]\n sb.emitOp(node, 'OVER');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [hasKey, prop, obj]\n sb.emitOp(node, 'HASKEY');\n },\n whenTrue: () => {\n // [propVal]\n sb.emitOp(node, 'PICKITEM');\n // [propVal, propVal]\n sb.emitOp(node, 'DUP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [size, propVal]\n sb.emitOp(node, 'ARRAYSIZE');\n // [2, size, propVal]\n sb.emitPushInt(node, 2);\n // [size === 2, propVal]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n this.accessor();\n },\n whenFalse: () => {\n this.dataExists();\n },\n }),\n );\n },\n whenFalse: () => {\n // [obj]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n this.data();\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [objectVal]\n// Output: [obj]\nexport abstract class GetObjectHelperBase extends Helper<Node> {\n protected abstract index: number;\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [object]\n sb.emitHelper(node, options, sb.helpers.getObject);\n // [2, object]\n sb.emitPushInt(node, this.index);\n // [obj]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetObjectHelperBase } from './GetObjectHelperBase';\n\n// Input: [objectVal]\n// Output: [iobj]\nexport class GetInternalObjectHelper extends GetObjectHelperBase {\n protected index = 2;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class GetInternalObjectPropertyHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, stringProp]\n sb.emitOp(node, 'SWAP');\n // [iobj, stringProp]\n sb.emitHelper(node, options, sb.helpers.getInternalObject);\n // [stringProp, iobj]\n sb.emitOp(node, 'SWAP');\n // [val]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [objectVal]\n// Output: [object]\nexport class GetObjectHelper extends GetPrimitiveHelper {}\n","import { GetObjectHelperBase } from './GetObjectHelperBase';\n\n// Input: [objectVal]\n// Output: [pobj]\nexport class GetPropertyObjectHelper extends GetObjectHelperBase {\n protected index = 0;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport abstract class GetObjectPropertyHelperBase extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, stringProp, objectVal]\n sb.emitOp(node, 'OVER');\n // [stringProp, objectVal, objectVal]\n sb.emitOp(node, 'SWAP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.findObjectProperty({\n accessor: () => {\n // [0, propVal, objectVal]\n sb.emitPushInt(node, 0);\n // [getObjectVal, objectVal]\n sb.emitOp(node, 'PICKITEM');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: true }),\n );\n },\n dataExists: () => {\n // [propVal]\n sb.emitOp(node, 'NIP');\n if (options.pushValue) {\n // [0, propVal]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n } else {\n // []\n sb.emitOp(node, 'DROP');\n }\n },\n data: () => {\n // []\n sb.emitOp(node, 'DROP');\n if (options.pushValue) {\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n }\n },\n getObject: this.getObject.bind(this),\n }),\n );\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { GetObjectPropertyHelperBase } from './GetObjectPropertyHelperBase';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class GetPropertyObjectPropertyHelper extends GetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper<Node> {\n return sb.helpers.getPropertyObject;\n }\n}\n","import { GetObjectHelperBase } from './GetObjectHelperBase';\n\n// Input: [objectVal]\n// Output: [sobj]\nexport class GetSymbolObjectHelper extends GetObjectHelperBase {\n protected index = 1;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { GetObjectPropertyHelperBase } from './GetObjectPropertyHelperBase';\n\n// Input: [stringProp, objectVal]\n// Output: [val]\nexport class GetSymbolObjectPropertyHelper extends GetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper<Node> {\n return sb.helpers.getSymbolObject;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [constructorObjectVal, objectVal]\n// Output: [boolean]\nexport class InstanceofHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // ['prototype', constructorObjectVal, objectVal]\n sb.emitPushString(node, 'prototype');\n // [prototypeVal, objectVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [objectVal, prototypeVal]\n sb.emitOp(node, 'SWAP');\n\n const prepareLoop = () => {\n // [objectVal, objectVal, prototypeVal]\n sb.emitOp(node, 'DUP');\n // ['prototype', objectVal, objectVal, prototypeVal]\n sb.emitPushString(node, 'prototype');\n // [nextPrototypeVal, objectVal, prototypeVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [nextPrototypeVal, nextPrototypeVal, objectVal, prototypeVal]\n sb.emitOp(node, 'DUP');\n // [objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'ROT');\n // [3, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitPushInt(node, 3);\n // [prototypeVal, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'PICK');\n };\n\n // [prototypeVal, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n prepareLoop();\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [samePrototype, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'EQUAL');\n // [samePrototype, samePrototype, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'DUP');\n // [notSamePrototype, samePrototype, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'NOT');\n // [nextPrototypeVal, notSamePrototype, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'ROT');\n // [isUndefined, notSamePrototype, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n // [hasPrototype, notSamePrototype, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'NOT');\n // [hasPrototypeAndNotSame, samePrototype, nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'AND');\n },\n each: () => {\n // [nextPrototypeVal, prototypeVal]\n sb.emitOp(node, 'DROP');\n // [prototypeVal, objectVal, nextPrototypeVal, nextPrototypeVal, prototypeVal]\n prepareLoop();\n },\n }),\n );\n\n // [samePrototype, prototypeVal]\n sb.emitOp(node, 'NIP');\n // [samePrototype]\n sb.emitOp(node, 'NIP');\n }\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsObjectHelper extends IsHelper {\n protected type = Types.Object;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nexport interface SetObjectAccessorPropertyHelperBaseOptions {\n hasSet?: boolean;\n hasGet?: boolean;\n}\n\n// Input: [?getObjectVal, ?setObjectVal, stringProp, objectVal]\n// Output: []\nexport abstract class SetObjectAccessorPropertyHelperBase extends Helper<Node> {\n private readonly hasSet: boolean;\n private readonly hasGet: boolean;\n\n constructor({ hasSet, hasGet }: SetObjectAccessorPropertyHelperBaseOptions) {\n super();\n this.hasSet = hasSet == null ? false : hasSet;\n this.hasGet = hasGet == null ? false : hasGet;\n\n if (!(this.hasSet || this.hasGet)) {\n throw new Error(\n 'Something went wrong. Must have either a getter or setter',\n );\n }\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n if (!(this.hasSet && this.hasGet)) {\n // [val, ?getObjectVal, ?setObjectVal, stringProp, objectVal]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n if (this.hasGet) {\n // [getObjectVal, setObjectVal, stringProp, objectVal]\n sb.emitOp(node, 'SWAP');\n }\n }\n // [2, getObjectVal, setObjectVal, stringProp, objectVal]\n sb.emitPushInt(node, 2);\n // [val, stringProp, objectVal]\n sb.emitOp(node, 'PACK');\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [obj, val, stringProp]\n sb.emitHelper(node, options, this.getObject(sb));\n // [stringProp, obj, val]\n sb.emitOp(node, 'ROT');\n // [val, stringProp, obj]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectAccessorPropertyHelperBase } from './SetObjectAccessorPropertyHelperBase';\n\n// Input: [?getObjectVal, ?setObjectVal, stringProp, objectVal]\n// Output: []\nexport class SetAccessorPropertyObjectPropertyHelper extends SetObjectAccessorPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getPropertyObject;\n }\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectAccessorPropertyHelperBase } from './SetObjectAccessorPropertyHelperBase';\n\n// Input: [?getObjectVal, ?setObjectVal, stringProp, objectVal]\n// Output: []\nexport class SetAccessorSymbolObjectPropertyHelper extends SetObjectAccessorPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getSymbolObject;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport abstract class SetObjectDataPropertyHelperBase extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [obj, val, stringProp]\n sb.emitHelper(node, sb.pushValueOptions(options), this.getObject(sb));\n // [stringProp, obj, val]\n sb.emitOp(node, 'ROT');\n // [val, stringProp, obj]\n sb.emitOp(node, 'ROT');\n // [1, val, stringProp, obj]\n sb.emitPushInt(node, 1);\n // [propVal, stringProp, obj]\n sb.emitOp(node, 'PACK');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectDataPropertyHelperBase } from './SetObjectDataPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetDataPropertyObjectPropertyHelper extends SetObjectDataPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getPropertyObject;\n }\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectDataPropertyHelperBase } from './SetObjectDataPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetDataSymbolObjectPropertyHelper extends SetObjectDataPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getSymbolObject;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetInternalObjectPropertyHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [obj, val, stringProp]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.getInternalObject,\n );\n // [stringProp, obj, val]\n sb.emitOp(node, 'ROT');\n // [val, stringProp, obj]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [val, stringProp, objectVal]\n// Output: [val]\nexport abstract class SetObjectPropertyHelperBase extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [objectVal, val, stringProp]\n sb.emitOp(node, 'ROT');\n // [stringProp, objectVal, val]\n sb.emitOp(node, 'ROT');\n // [stringProp, objectVal, stringProp, val]\n sb.emitOp(node, 'TUCK');\n // [objectVal, stringProp, objectVal, stringProp, val]\n sb.emitOp(node, 'OVER');\n // [stringProp, objectVal, objectVal, stringProp, val]\n sb.emitOp(node, 'SWAP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.findObjectProperty({\n accessor: () => {\n // [1, propVal, objectVal, stringProp, val]\n sb.emitPushInt(node, 1);\n // [setObjectVal, objectVal, stringProp, val]\n sb.emitOp(node, 'PICKITEM');\n // [stringProp, setObjectVal, objectVal, val]\n sb.emitOp(node, 'ROT');\n // [setObjectVal, objectVal, val]\n sb.emitOp(node, 'DROP');\n // [val, setObjectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [1, val, setObjectVal, objectVal]\n sb.emitPushInt(node, 1);\n // [argsarr, setObjectVal, objectVal]\n sb.emitOp(node, 'PACK');\n // [objectVal, argsarr, setObjectVal]\n sb.emitOp(node, 'ROT');\n // [setObjectVal, objectVal, argsarr]\n sb.emitOp(node, 'ROT');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: false }),\n );\n },\n dataExists: () => {\n // [propVal, stringProp, val]\n sb.emitOp(node, 'NIP');\n // [propVal, val]\n sb.emitOp(node, 'NIP');\n // [0, propVal, val]\n sb.emitPushInt(node, 0);\n // [val, 0, propVal]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n },\n data: () => {\n // [stringProp, objectVal, val]\n sb.emitOp(node, 'SWAP');\n // [val, stringProp, objectVal]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitHelper(node, options, this.setDataProperty(sb));\n },\n getObject: this.getObject.bind(this),\n }),\n );\n }\n\n protected abstract getObject(sb: ScriptBuilder): Helper<Node>;\n protected abstract setDataProperty(sb: ScriptBuilder): Helper<Node>;\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectPropertyHelperBase } from './SetObjectPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetPropertyObjectPropertyHelper extends SetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getPropertyObject;\n }\n\n protected setDataProperty(sb: ScriptBuilder): Helper {\n return sb.helpers.setDataPropertyObjectProperty;\n }\n}\n","import { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { SetObjectPropertyHelperBase } from './SetObjectPropertyHelperBase';\n\n// Input: [val, stringProp, objectVal]\n// Output: []\nexport class SetSymbolObjectPropertyHelper extends SetObjectPropertyHelperBase {\n protected getObject(sb: ScriptBuilder): Helper {\n return sb.helpers.getSymbolObject;\n }\n\n protected setDataProperty(sb: ScriptBuilder): Helper {\n return sb.helpers.setDataSymbolObjectProperty;\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\nimport { Types } from '../Types';\n\n// Input: [objectVal]\n// Output: [objectVal]\nexport class ShallowCloneObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [object]\n sb.emitHelper(node, options, sb.helpers.getObject);\n // [length, pobj, sobj, iobj, ...]\n sb.emitOp(node, 'UNPACK');\n\n const roll = () => {\n // [3, length, pobj, sobj, iobj, ...]\n sb.emitPushInt(node, 3);\n // [iobj, length, pobj, sobj, ...]\n sb.emitOp(node, 'ROLL');\n };\n\n const clone = () => {\n roll();\n // [iobj, length, pobj, sobj, ...]\n sb.emitHelper(node, options, sb.helpers.shallowCloneObj);\n };\n\n // [iobj, length, pobj, sobj, ...]\n clone();\n // [sobj, iobj, length, pobj, ...]\n clone();\n // [pobj, sobj, iobj, length, ...]\n clone();\n // [length, pobj, sobj, iobj, ...]\n roll();\n // [object]\n sb.emitOp(node, 'PACK');\n\n // [objectType, object]\n sb.emitPushInt(node, Types.Object);\n\n // TODO: Consolidate with CreateObjectHelper\n /* create object */\n // [2, objectType, object]\n sb.emitPushInt(node, 2);\n // [objectVal]\n sb.emitOp(node, 'PACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\n// Input: [obj]\n// Output: [obj]\nexport class ShallowCloneObjHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n /* create new obj */\n // [newObj, oldObj]\n sb.emitOp(node, 'NEWMAP');\n // [oldObj, newObj]\n sb.emitOp(node, 'SWAP');\n\n /* get keys and values */\n // [oldObj, oldObj, newObj]\n sb.emitOp(node, 'DUP');\n // [valuesArray, oldObj, newObj]\n sb.emitOp(node, 'VALUES');\n // [oldObj, valuesArray, newObj]\n sb.emitOp(node, 'SWAP');\n // [keysArray, valuesArray, newObj]\n sb.emitOp(node, 'KEYS');\n\n /* set keys/values on new obj */\n sb.withScope(node, options, (scopeOptions) => {\n const counter = sb.scope.addUnique();\n const length = sb.scope.addUnique();\n\n sb.emitHelper(\n node,\n scopeOptions,\n sb.helpers.forLoop({\n initializer: () => {\n // [keysArray, keysArray, valuesArray, newObj]\n sb.emitOp(node, 'DUP');\n // [length, keysArray, valuesArray, newObj]\n sb.emitOp(node, 'ARRAYSIZE');\n // [keysArray, valuesArray, newObj]\n sb.scope.set(sb, node, scopeOptions, length);\n // [counter, keysArray, valuesArray, newObj]\n sb.emitPushInt(node, 0);\n // [keysArray, valuesArray, newObj]\n sb.scope.set(sb, node, scopeOptions, counter);\n },\n condition: () => {\n // [counter]\n sb.scope.get(sb, node, scopeOptions, counter);\n // [length, counter]\n sb.scope.get(sb, node, scopeOptions, length);\n // [lt]\n sb.emitOp(node, 'LT');\n },\n incrementor: () => {\n // [counter]\n sb.scope.get(sb, node, scopeOptions, counter);\n // [counter]\n sb.emitOp(node, 'INC');\n // []\n sb.scope.set(sb, node, scopeOptions, counter);\n },\n each: (innerOptions) => {\n // [keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'TUCK');\n // [valuesArray, keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'OVER');\n // [counter, valuesArray, keysArray, valuesArray, keysArray, newObj]\n sb.scope.get(sb, node, innerOptions, counter);\n // [counter, valuesArray, counter, keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'TUCK');\n // [value, counter, keysArray, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'PICKITEM');\n // [keysArray, value, counter, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'ROT');\n // [counter, keysArray, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'ROT');\n // [key, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'PICKITEM');\n // [4, key, value, valuesArray, keysArray, newObj]\n sb.emitPushInt(node, 4);\n // [newObj, key, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'PICK');\n // [key, newObj, value, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'SWAP');\n // [value, key, newObj, valuesArray, keysArray, newObj]\n sb.emitOp(node, 'ROT');\n // [valuesArray, keysArray, newObj]\n sb.emitOp(node, 'SETITEM');\n },\n }),\n );\n });\n\n // [keysArray, newObj]\n sb.emitOp(node, 'DROP');\n // [newObj]\n sb.emitOp(node, 'DROP');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [objectVal]\nexport class ToObjectHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const type = this.type;\n if (typeUtils.isOnlyBoolean(type)) {\n this.convertPrimitive(sb, node, options, 'Boolean');\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertPrimitive(sb, node, options, 'Number');\n } else if (typeUtils.isOnlyString(type)) {\n this.convertPrimitive(sb, node, options, 'String');\n } else if (typeUtils.isOnlySymbol(type)) {\n this.convertPrimitive(sb, node, options, 'Symbol');\n } else if (typeUtils.isOnlyObject(type)) {\n return;\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [val, val]\n sb.emitOp(node, 'DUP');\n // [isObject, val]\n sb.emitHelper(node, options, sb.helpers.isObject);\n },\n whenTrue: () => {\n // do nothing\n },\n },\n ].concat(\n [\n { helper: sb.helpers.isBoolean, primitive: 'Boolean' },\n { helper: sb.helpers.isNumber, primitive: 'Number' },\n { helper: sb.helpers.isString, primitive: 'String' },\n { helper: sb.helpers.isSymbol, primitive: 'Symbol' },\n ].map(({ helper, primitive }) => ({\n condition: () => {\n // [val, val]\n sb.emitOp(node, 'DUP');\n // [isObject, val]\n sb.emitHelper(node, options, sb.helpers.isObject);\n },\n whenTrue: () => {\n this.convertPrimitive(sb, node, options, primitive);\n },\n })),\n ),\n () => {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n ),\n );\n }\n }\n\n public convertPrimitive(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n primitive: string,\n ): void {\n // [1, val]\n sb.emitPushInt(node, 1);\n // [valArgsArray]\n sb.emitOp(node, 'PACK');\n // [globalObjectVal, valArgsArray]\n sb.scope.getGlobal(sb, node, options);\n // [primitiveString, globalObjectVal, valArgsArray]\n sb.emitPushString(node, primitive);\n // [primitiveObjectVal, valArgsArray]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n }\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [string]\n// Output: [stringVal]\nexport class CreateStringHelper extends CreatePrimitiveHelper {\n protected type = Types.String;\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [stringVal]\n// Output: [string]\nexport class GetStringHelper extends GetPrimitiveHelper {}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsStringHelper extends IsHelper {\n protected type = Types.String;\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../../Helper';\nimport { TypedHelper } from '../../common';\nimport { ScriptBuilder } from '../../../sb';\nimport { VisitOptions } from '../../../types';\n\nimport * as typeUtils from '../../../../typeUtils';\n\n// Input: [val]\n// Output: [string]\nexport class ToStringHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (this.type != null) {\n this.convertType(sb, node, options, this.type);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type: Type,\n ): void {\n if (typeUtils.isOnlyUndefined(type)) {\n this.convertUndefined(sb, node, options);\n } else if (typeUtils.isOnlyNull(type)) {\n this.convertNull(sb, node, options);\n } else if (typeUtils.isOnlyBoolean(type)) {\n this.convertBoolean(sb, node, options);\n } else if (typeUtils.isOnlyNumber(type)) {\n this.convertNumber(sb, node, options);\n } else if (typeUtils.isOnlyString(type)) {\n this.convertString(sb, node, options);\n } else if (typeUtils.isOnlySymbol(type)) {\n this.convertSymbol(sb, node, options);\n } else if (typeUtils.isOnlyObject(type)) {\n this.convertObject(sb, node, options);\n } else {\n this.convertUnknown(sb, node, options);\n }\n }\n\n private convertUndefined(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitPushString(node, 'undefined');\n }\n\n private convertNull(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitPushString(node, 'null');\n }\n\n private convertBoolean(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n },\n whenTrue: () => {\n sb.emitPushString(node, 'true');\n },\n whenFalse: () => {\n sb.emitPushString(node, 'false');\n },\n }),\n );\n }\n\n private convertNumber(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // TODO: Try to support this\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.getString);\n }\n\n private convertSymbol(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n }\n\n private convertObject(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [primitive]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({ type: this.type, preferredType: 'string' }),\n );\n // [value]\n this.convertUnknown(sb, node, options, true);\n }\n\n private convertUnknown(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n shouldThrowOnObject: boolean = false,\n ): void {\n const emitIf = (\n check: Helper<Node>,\n whenTrue: () => void,\n whenFalse: () => void,\n ) =>\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isValue, value]\n sb.emitHelper(node, options, check);\n },\n whenTrue,\n whenFalse,\n }),\n );\n\n emitIf(\n sb.helpers.isString,\n () => this.convertString(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isUndefined,\n () => this.convertUndefined(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isNull,\n () => this.convertNull(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isBoolean,\n () => this.convertBoolean(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isNumber,\n () => this.convertNumber(sb, node, options),\n () =>\n emitIf(\n sb.helpers.isSymbol,\n () => this.convertSymbol(sb, node, options),\n () =>\n shouldThrowOnObject\n ? sb.emitHelper(\n node,\n options,\n sb.helpers.throwTypeError,\n )\n : this.convertObject(sb, node, options),\n ),\n ),\n ),\n ),\n ),\n );\n }\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: [string]\n// Output: [symbolVal]\nexport class CreateSymbolHelper extends CreatePrimitiveHelper {\n protected type = Types.Symbol;\n}\n","import { GetPrimitiveHelper } from '../GetPrimitiveHelper';\n\n// Input: [symbolVal]\n// Output: [string]\nexport class GetSymbolHelper extends GetPrimitiveHelper {}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsSymbolHelper extends IsHelper {\n protected type = Types.Symbol;\n}\n","import { CreatePrimitiveHelper } from '../CreatePrimitiveHelper';\nimport { Types } from '../Types';\n\n// Input: []\n// Output: [undefinedVal]\nexport class CreateUndefinedHelper extends CreatePrimitiveHelper {\n protected length = 1;\n protected type = Types.Undefined;\n}\n","import { IsHelper } from '../IsHelper';\nimport { Types } from '../Types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsUndefinedHelper extends IsHelper {\n protected type = Types.Undefined;\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [boolean]\nexport class IsNullOrUndefinedHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [val, val]\n sb.emitOp(node, 'DUP');\n // [isNullBoolean, val]\n sb.emitHelper(node, options, sb.helpers.isNull);\n // [val, isNullBoolean]\n sb.emitOp(node, 'SWAP');\n // [isUndefinedBoolean, isNullBoolean]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n // [boolean]\n sb.emitOp(node, 'BOOLOR');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val0, val1]\n// Output: [boolean]\nexport class IsSameTypeHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [type0, val1]\n sb.emitHelper(node, options, sb.helpers.unwrapType);\n // [val1, type0]\n sb.emitOp(node, 'SWAP');\n // [type1, type0]\n sb.emitHelper(node, options, sb.helpers.unwrapType);\n // [boolean]\n sb.emitOp(node, 'EQUAL');\n }\n}\n","import { Node, Type } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\nimport { Types } from './Types';\n\nexport type PreferredType = 'default' | 'string' | 'number';\nexport interface ToPrimitiveHelperOptions {\n type: Type | undefined;\n knownType?: Types;\n preferredType?: PreferredType;\n}\n\n// NOTE: Unlike the other To* methods, this returns a wrapped value.\n// Input: [val]\n// Output: [val]\nexport class ToPrimitiveHelper extends Helper<Node> {\n private readonly type: Type | undefined;\n private readonly knownType: Types | undefined;\n private readonly preferredType: PreferredType;\n\n constructor({ type, knownType, preferredType }: ToPrimitiveHelperOptions) {\n super();\n this.type = type;\n this.knownType = knownType;\n this.preferredType = preferredType || 'default';\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (!typeUtils.isOnlyPrimitive(this.type)) {\n if (this.type == null && this.knownType !== Types.Object) {\n this.toPrimitive(sb, node, options);\n } else {\n this.toPrimitiveObject(sb, node, options);\n }\n }\n }\n\n private toPrimitive(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [isObject, value]\n sb.emitHelper(node, options, sb.helpers.isObject);\n },\n whenTrue: () => {\n this.toPrimitiveObject(sb, node, options);\n },\n }),\n );\n }\n\n private toPrimitiveObject(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [symbol, value, value]\n sb.emitPushString(node, '@@toPrimitive');\n // [toPrimitive, value]\n sb.emitHelper(node, options, sb.helpers.getSymbolObjectProperty);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [toPrimitive, toPrimitive, value]\n sb.emitOp(node, 'DUP');\n // [isUndefined, toPrimitive, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n // [value]\n sb.emitOp(node, 'DROP');\n // [value]\n this.tryConvert(sb, node, options, this.preferredType);\n },\n whenFalse: () => {\n // [preferredType, toPrimitiveVal, val]\n sb.emitPushString(node, this.preferredType);\n // [1, preferredType, toPrimitiveVal, val]\n sb.emitPushInt(node, 1);\n // [args, toPrimitiveVal, val]\n sb.emitOp(node, 'PACK');\n // [val, args, toPrimitiveVal]\n sb.emitOp(node, 'ROT');\n // [toPrimitiveVal, val, args]\n sb.emitOp(node, 'ROT');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true }),\n );\n },\n }),\n );\n }\n\n private tryConvert(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n preferredType: 'string' | 'number' | 'default',\n ): void {\n const methods =\n preferredType === 'string'\n ? ['toString', 'valueOf']\n : ['valueOf', 'toString'];\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [method, value]\n sb.emitPushString(node, methods[0]);\n // [func, value]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [func, func, value]\n sb.emitOp(node, 'DUP');\n // [isUndefined, func, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n // [value]\n sb.emitOp(node, 'DROP');\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [method, value]\n sb.emitPushString(node, methods[1]);\n // [func, value]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [func, func, value]\n sb.emitOp(node, 'DUP');\n // [isUndefined, func, value]\n sb.emitHelper(node, options, sb.helpers.isUndefined);\n },\n whenTrue: () => {\n // [value]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // []\n sb.emitHelper(node, options, sb.helpers.throwTypeError);\n },\n whenFalse: () => {\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: true }),\n );\n },\n }),\n );\n },\n whenFalse: () => {\n sb.emitHelper(\n node,\n options,\n sb.helpers.invokeCall({ bindThis: true, noArgs: true }),\n );\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [type]\nexport class UnwrapTypeHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [0, val]\n sb.emitPushInt(node, 0);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val]\n// Output: [value]\n// Must not be undefined or null\nexport class UnwrapValHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [1, val]\n sb.emitPushInt(node, 1);\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\n\nexport interface EqualsEqualsEqualsHelperOptions {\n left: Node;\n right: Node;\n}\n\n// Input: []\n// Output: [boolean]\nexport class EqualsEqualsEqualsHelper extends Helper<Node> {\n private left: Node;\n private right: Node;\n\n constructor(options: EqualsEqualsEqualsHelperOptions) {\n super();\n this.left = options.left;\n this.right = options.right;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n sb.visit(this.left, options);\n sb.visit(this.right, options);\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n if (typeUtils.isSame(sb.getType(this.left), sb.getType(this.right))) {\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsSameType);\n } else {\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsUnknown);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [numberVal, numberVal]\n// Output: [boolean]\nexport class EqualsEqualsEqualsNumberHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [number, numberVal]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [numberVal, number]\n sb.emitOp(node, 'SWAP');\n // [number, number]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [boolean]\n sb.emitOp(node, 'NUMEQUAL');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val0, val1]\n// Output: [boolean]\nexport class EqualsEqualsEqualsSameTypeHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [val0, val0, val1]\n sb.emitOp(node, 'DUP');\n // [isNullOrUndefined]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n },\n whenTrue: () => {\n // [val1]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [boolean]\n sb.emitPushBoolean(node, true);\n },\n whenFalse: () => {\n // [value0, val1]\n sb.emitHelper(node, options, sb.helpers.unwrapVal);\n // [val1, value0]\n sb.emitOp(node, 'SWAP');\n // [value1, value0]\n sb.emitHelper(node, options, sb.helpers.unwrapVal);\n // [boolean]\n sb.emitOp(node, 'EQUAL');\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val0, val1]\n// Output: [boolean]\nexport class EqualsEqualsEqualsUnknownHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n sb.emitOp(node, 'DROP');\n return;\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [val1, val0, val1]\n sb.emitOp(node, 'TUCK');\n // [val0, val1, val0, val1]\n sb.emitOp(node, 'OVER');\n sb.emitHelper(node, options, sb.helpers.isSameType);\n },\n whenTrue: () => {\n // [boolean]\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsSameType);\n },\n whenFalse: () => {\n // [val1]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [boolean]\n sb.emitPushBoolean(node, false);\n },\n }),\n );\n }\n}\n","import { Node, Type, ts } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\n\nexport interface EqualsEqualsHelperOptions {\n left: Node;\n right: Node;\n}\n\n// Input: []\n// Output: [boolean]\nexport class EqualsEqualsHelper extends Helper<Node> {\n private left: Node;\n private right: Node;\n\n constructor(options: EqualsEqualsHelperOptions) {\n super();\n this.left = options.left;\n this.right = options.right;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.visit(this.left, options);\n sb.visit(this.right, options);\n return;\n }\n\n const leftType = sb.getType(this.left);\n const rightType = sb.getType(this.right);\n if (leftType != null && rightType != null) {\n this.equalsEqualsType(sb, node, options, leftType, rightType);\n } else {\n this.equalsEqualsUnknown(sb, node, options);\n }\n }\n\n public equalsEqualsType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n leftType: Type<ts.Type>,\n rightType: Type<ts.Type>,\n ): void {\n if (typeUtils.isSame(leftType, rightType)) {\n sb.emitHelper(\n node,\n options,\n sb.helpers.equalsEqualsEquals({ left: this.left, right: this.right }),\n );\n } else if (\n (typeUtils.hasNull(leftType) || typeUtils.hasUndefined(leftType)) &&\n (typeUtils.isOnlyUndefined(rightType) || typeUtils.isOnlyNull(rightType))\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [left]\n sb.emitOp(this.right, 'DROP');\n // [equals]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n } else if (\n typeUtils.isOnlyNumber(leftType) &&\n (typeUtils.isOnlyString(rightType) || typeUtils.isOnlyBoolean(rightType))\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [equals]\n this.equalsEqualsLeftNumberRightBooleanOrString(sb, node, options);\n } else if (\n typeUtils.isOnlyBoolean(leftType) &&\n (typeUtils.isOnlyString(rightType) || typeUtils.isOnlyBoolean(rightType))\n ) {\n // [left]\n sb.visit(this.left, options);\n // [leftNumber]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [leftNumberVal]\n sb.emitHelper(this.left, options, sb.helpers.createNumber);\n // [right, leftNumberVal]\n sb.visit(this.right, options);\n // [equals]\n this.equalsEqualsLeftNumberRightBooleanOrString(sb, node, options);\n } else if (\n (typeUtils.isOnlyString(leftType) || typeUtils.isOnlyBoolean(leftType)) &&\n typeUtils.isOnlyNumber(rightType)\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [equals]\n this.equalsEqualsRightNumberLeftBooleanOrString(sb, node, options);\n } else if (\n (typeUtils.isOnlyString(leftType) || typeUtils.isOnlyBoolean(leftType)) &&\n typeUtils.isOnlyBoolean(rightType)\n ) {\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n // [rightNumber, left]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [rightNumberVal, left]\n sb.emitHelper(this.right, options, sb.helpers.createNumber);\n // [equals]\n this.equalsEqualsRightNumberLeftBooleanOrString(sb, node, options);\n } else {\n this.equalsEqualsUnknown(sb, node, options);\n }\n }\n\n public equalsEqualsLeftNumberRightBooleanOrString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [rightNumber, left]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [rightNumber, left]\n sb.emitHelper(this.right, options, sb.helpers.createNumber);\n // [equals]\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsNumber);\n }\n\n public equalsEqualsRightNumberLeftBooleanOrString(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [left, right]\n sb.emitOp(node, 'SWAP');\n // [leftNumber, right]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [leftNumber, right]\n sb.emitHelper(this.left, options, sb.helpers.createNumber);\n // [right, leftNumber]\n sb.emitOp(node, 'SWAP');\n // [equals]\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsNumber);\n }\n\n public equalsEqualsUnknown(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n const copy = () => {\n // [right, left, right]\n sb.emitOp(this.right, 'TUCK');\n // [left, right, left, right]\n sb.emitOp(this.right, 'OVER');\n };\n\n // [left]\n sb.visit(this.left, options);\n // [right, left]\n sb.visit(this.right, options);\n\n const cases = [\n {\n condition: () => {\n copy();\n // [right, left]\n sb.emitHelper(node, options, sb.helpers.isSameType);\n },\n whenTrue: () => {\n sb.emitHelper(node, options, sb.helpers.equalsEqualsEqualsSameType);\n },\n },\n {\n condition: () => {\n copy();\n // [rightIsNullOrUndefined, left, right, left]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n // [left, rightIsNullOrUndefined, right, left]\n sb.emitOp(node, 'SWAP');\n // [leftIsNullOrUndefined, rightIsNullOrUndefined, right, left]\n sb.emitHelper(node, options, sb.helpers.isNullOrUndefined);\n // [equals, right, left]\n sb.emitOp(node, 'BOOLOR');\n },\n whenTrue: () => {\n // [left]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [equals]\n sb.emitPushBoolean(node, true);\n },\n },\n {\n condition: () => {\n copy();\n // [right, right, left, right, left]\n sb.emitOp(node, 'DUP');\n // [isString, right, left, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isString);\n // [right, isString, left, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isString, left, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrString, left, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [left, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [left, left, isBooleanOrString, right, left]\n sb.emitOp(node, 'DUP');\n // [isNumber, left, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isNumber);\n // [left, isNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isNumber, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [is(BooleanOrNumber)And(BooleanOrString), right, left]\n sb.emitOp(node, 'BOOLAND');\n },\n whenTrue: () => {\n // [left, right]\n sb.emitOp(node, 'SWAP');\n // [leftNumber, right]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [leftNumber, right]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [right, leftNumber]\n sb.emitOp(node, 'SWAP');\n this.equalsEqualsLeftNumberRightBooleanOrString(sb, node, options);\n },\n },\n {\n condition: () => {\n copy();\n // [left, right, right, left]\n sb.emitOp(node, 'SWAP');\n // [left, left, right, right, left]\n sb.emitOp(node, 'DUP');\n // [isString, left, right, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isString);\n // [left, isString, right, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isString, right, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrString, right, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [right, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [right, right, isBooleanOrString, right, left]\n sb.emitOp(node, 'DUP');\n // [isNumber, right, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isNumber);\n // [right, isNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'SWAP');\n // [isBoolean, isNumber, isBooleanOrString, right, left]\n sb.emitHelper(this.right, options, sb.helpers.isBoolean);\n // [isBooleanOrNumber, isBooleanOrString, right, left]\n sb.emitOp(node, 'BOOLOR');\n // [is(BooleanOrNumber)And(BooleanOrString), right, left]\n sb.emitOp(node, 'BOOLAND');\n },\n whenTrue: () => {\n // [rightNumber, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [rightNumber, left]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n this.equalsEqualsRightNumberLeftBooleanOrString(sb, node, options);\n },\n },\n ];\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(cases, () => {\n // [rightPrim, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({ type: sb.getType(this.right) }),\n );\n // [left, rightPrim]\n sb.emitOp(node, 'SWAP');\n // [leftPrim, rightPrim]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toPrimitive({ type: sb.getType(this.left) }),\n );\n // [rightPrim, leftPrim]\n sb.emitOp(node, 'SWAP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(cases, () => {\n // [leftPrim]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [equals]\n sb.emitPushBoolean(node, false);\n }),\n );\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nimport * as typeUtils from '../../../typeUtils';\n\nexport interface LessThanHelperOptions {\n leftFirst: boolean;\n left: Node;\n right: Node;\n}\n\n// Input: []\n// Output: [boolean]\n// TODO: Currently only supports numbers. Invalid to pass in a string.\nexport class LessThanHelper extends Helper<Node> {\n private leftFirst: boolean;\n private left: Node;\n private right: Node;\n\n constructor(options: LessThanHelperOptions) {\n super();\n this.leftFirst = options.leftFirst;\n this.left = options.left;\n this.right = options.right;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n if (this.leftFirst) {\n sb.visit(this.left, options);\n sb.visit(this.right, options);\n } else {\n sb.visit(this.right, options);\n sb.visit(this.left, options);\n }\n return;\n }\n\n if (this.leftFirst) {\n // [left]\n sb.visit(this.left, options);\n // [leftPrim]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.left),\n preferredType: 'number',\n }),\n );\n // [right, leftPrim]\n sb.visit(this.right, options);\n // [rightPrim, leftPrim]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.right),\n preferredType: 'number',\n }),\n );\n } else {\n // [right]\n sb.visit(this.right, options);\n // [rightPrim]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.right),\n preferredType: 'number',\n }),\n );\n // [left, rightPrim]\n sb.visit(this.left, options);\n // [leftPrim, rightPrim]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toPrimitive({\n type: sb.getType(this.left),\n preferredType: 'number',\n }),\n );\n // [rightPrim, leftPrim]\n sb.emitOp(node, 'SWAP');\n }\n\n if (\n typeUtils.isOnlyString(sb.getType(this.left)) &&\n typeUtils.isOnlyString(sb.getType(this.right))\n ) {\n sb.reportUnsupported(node);\n } else {\n // [rightNumber, leftPrim]\n sb.emitHelper(\n this.right,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.right) }),\n );\n // [leftPrim, rightNumber]\n sb.emitOp(node, 'SWAP');\n // [leftNumber, rightNumber]\n sb.emitHelper(\n this.left,\n options,\n sb.helpers.toNumber({ type: sb.getType(this.left) }),\n );\n // [rightNumber, leftNumber]\n sb.emitOp(node, 'SWAP');\n // [lt]\n sb.emitOp(node, 'LT');\n\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n }\n}\n","export const GLOBAL_PROPERTIES = new Set([\n 'Array',\n 'Boolean',\n 'Buffer',\n 'Error',\n 'Number',\n 'Object',\n 'String',\n 'Symbol',\n 'process',\n]);\n","export enum InternalGlobalProperties {\n MODULES = 'modules',\n ARGUMENTS = 'arguments',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from './InternalGlobalProperties';\n\n// Input: [argv, globalObjectVal]\n// Output: []\nexport class AddArgumentsHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['arguments', argv, globalObjectVal]\n sb.emitPushString(node, InternalGlobalProperties.ARGUMENTS);\n // [argv, 'arguments', globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport abstract class AddConstructorObjectHelper extends Helper<Node> {\n protected abstract name: string;\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal, objectPrototypeVal]\n sb.emitOp(node, 'SWAP');\n // [globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [objectPrototypeVal, globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n\n /* create constructor prototype */\n // [prototypeVal, objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [prototypeVal, objectPrototypeVal, prototypeVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // ['prototype', prototypeVal, objectPrototypeVal, prototypeVal, globalObjectVal]\n sb.emitPushString(node, 'prototype');\n // [objectPrototypeVal, 'prototype', prototypeVal, prototypeVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // [prototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [prototypeVal, globalObjectVal]\n this.addPrototypeProperties(sb, node, options);\n\n /* create object */\n // [objectVal, prototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [prototypeVal, objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['prototype', prototypeVal, objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitPushString(node, 'prototype');\n // [prototypeVal, 'prototype', objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [prototypeVal, objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['constructor', objectVal, prototypeVal, objectVal, globalObjectVal]\n sb.emitPushString(node, 'constructor');\n // [objectVal, 'constructor', prototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, globalObjectVal]\n this.addConstructorProperties(sb, node, options);\n // [name, objectVal, globalObjectVal]\n sb.emitPushString(node, this.name);\n // [objectVal, name, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n }\n\n protected addPrototypeProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // do nothing\n }\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // do nothing\n }\n\n protected addMethod(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n name: string,\n body: (options: VisitOptions) => void,\n ): void {\n // [prototypeVal, prototypeVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // [name, prototypeVal, prototypeVal, globalObjectVal]\n sb.emitPushString(node, name);\n // [farr, name, prototypeVal, prototypeVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionArray({\n body: () => {\n sb.withScope(node, options, body);\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n sb.emitOp(node, 'RET');\n },\n }),\n );\n // [fobjectVal, name, prototypeVal, prototypeVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // [prototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\nimport { InternalFunctionProperties } from '../function';\nimport { Helper } from '../Helper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddArrayObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Array';\n\n protected addPrototypeProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.addMap(sb, node, options);\n this.addFilter(sb, node, options);\n this.addReduce(sb, node, options);\n }\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // ['construct', objectVal, objectVal, globalObjectVal]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, 'construct', objectVal, objectVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createConstructArray({\n withoutScope: true,\n body: () => {\n // [argsarray, argsarray]\n sb.emitOp(node, 'DUP');\n // [size, argsarray]\n sb.emitOp(node, 'ARRAYSIZE');\n sb.emitHelper(\n node,\n options,\n sb.helpers.case(\n [\n {\n condition: () => {\n // [size, size, argsarray]\n sb.emitOp(node, 'DUP');\n // [0, size, size, argsarray]\n sb.emitPushInt(node, 0);\n // [size === 0, size, argsarray]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n // [argsarray]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [length]\n sb.emitPushInt(node, 0);\n // [0, length]\n sb.emitPushInt(node, 0);\n // [array, length]\n sb.emitOp(node, 'NEWARRAY');\n },\n },\n {\n condition: () => {\n // [size, size, argsarray]\n sb.emitOp(node, 'DUP');\n // [1, size, size, argsarray]\n sb.emitPushInt(node, 1);\n // [size === 1, size, argsarray]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n // [argsarray]\n sb.emitOp(node, 'DROP');\n // [0, argsarray]\n sb.emitPushInt(node, 0);\n // [lengthVal]\n sb.emitOp(node, 'PICKITEM');\n // [length]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [length, length]\n sb.emitOp(node, 'DUP');\n // [0, length, length]\n sb.emitPushInt(node, 0);\n // [arr, length, length]\n sb.emitOp(node, 'NEWARRAY');\n // [arr, length, arr, length]\n sb.emitOp(node, 'TUCK');\n // [length, arr, arr, length]\n sb.emitOp(node, 'SWAP');\n // [array, length]\n sb.emitHelper(node, options, sb.helpers.extendArray);\n },\n },\n ],\n () => {\n // [array, length]\n sb.emitOp(node, 'SWAP');\n },\n ),\n );\n // [objectVal, arr, length]\n sb.scope.getThis(sb, node, options);\n // [objectVal, objectVal, arr, length]\n sb.emitOp(node, 'DUP');\n // [arr, objectVal, objectVal, length]\n sb.emitOp(node, 'ROT');\n // [objectVal, length]\n sb.emitHelper(node, options, sb.helpers.setArrayValue);\n // ['length', objectVal, length]\n sb.emitPushString(node, 'length');\n // [length, 'length', objectVal]\n sb.emitOp(node, 'ROT');\n // [lengthVal, 'length', objectVal]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // []\n sb.emitHelper(\n node,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n },\n }),\n );\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n private addMap(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n this.addMapLike(sb, node, options, 'map', sb.helpers.arrMap);\n }\n\n private addFilter(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.addMapLike(sb, node, options, 'filter', sb.helpers.arrFilter);\n }\n\n private addReduce(\n sb: ScriptBuilder,\n node: Node,\n outerOptions: VisitOptions,\n ): void {\n this.addMethod(sb, node, outerOptions, 'reduce', (options) => {\n const func = sb.scope.addUnique();\n const accum = sb.scope.addUnique();\n // [argsarr, argsarr]\n sb.emitOp(node, 'DUP');\n // [0, argsarr, argsarr]\n sb.emitPushInt(node, 0);\n // [fObjectVal, argsarr]\n sb.emitOp(node, 'PICKITEM');\n // [argsarr]\n sb.scope.set(sb, node, options, func);\n // [argsarr, argsarr]\n sb.emitOp(node, 'DUP');\n // [size, argsarr]\n sb.emitOp(node, 'ARRAYSIZE');\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [2, size, argsarr]\n sb.emitPushInt(node, 2);\n // [size === 2, argsarr]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n // [1, argsarr]\n sb.emitPushInt(node, 1);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n },\n whenFalse: () => {\n // []\n sb.emitOp(node, 'DROP');\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n },\n }),\n );\n // []\n sb.scope.set(sb, node, options, accum);\n // [arrayObjectVal]\n sb.scope.getThis(sb, node, options);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [arr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrForEach({\n each: () => {\n // [accum, val, index]\n sb.scope.get(sb, node, options, accum);\n // [index, accum, val]\n sb.emitOp(node, 'ROT');\n // [indexVal, accum, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [accum, indexVal, val]\n sb.emitOp(node, 'SWAP');\n // [val, accum, indexVal]\n sb.emitOp(node, 'ROT');\n // [3, val, accum, indexVal]\n sb.emitPushInt(node, 3);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n // [fObjectVal, argsarr]\n sb.scope.get(sb, node, options, func);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n // []\n sb.scope.set(sb, node, options, accum);\n },\n withIndex: true,\n }),\n );\n // [val]\n sb.scope.get(sb, node, options, accum);\n });\n }\n\n private addMapLike(\n sb: ScriptBuilder,\n node: Node,\n outerOptions: VisitOptions,\n name: string,\n helper: ((options: { map: () => void; withIndex: boolean }) => Helper),\n ): void {\n this.addMethod(sb, node, outerOptions, name, (options) => {\n const func = sb.scope.addUnique();\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [fObjectVal]\n sb.emitOp(node, 'PICKITEM');\n // []\n sb.scope.set(sb, node, options, func);\n // [arrayObjectVal]\n sb.scope.getThis(sb, node, options);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [arr]\n sb.emitHelper(\n node,\n options,\n helper({\n map: () => {\n // [index, val]\n sb.emitOp(node, 'SWAP');\n // [indexVal, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [val, indexVal]\n sb.emitOp(node, 'SWAP');\n // [2, val, indexVal]\n sb.emitPushInt(node, 2);\n // [argsarr]\n sb.emitOp(node, 'PACK');\n // [fObjectVal, argsarr]\n sb.scope.get(sb, node, options, func);\n // [val]\n sb.emitHelper(node, options, sb.helpers.invokeCall());\n },\n withIndex: true,\n }),\n );\n // [arrayObjectVal]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n });\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddBufferObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Buffer';\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.addConstructor(sb, node, options);\n this.addConcat(sb, node, options);\n }\n\n private addConstructor(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // ['construct', objectVal, objectVal, globalObjectVal]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, 'construct', objectVal, objectVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createConstructArray({\n withoutScope: true,\n body: () => {\n // Drop the args array\n // []\n sb.emitOp(node, 'DROP');\n },\n }),\n );\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n\n private addConcat(\n sb: ScriptBuilder,\n node: Node,\n outerOptions: VisitOptions,\n ): void {\n this.addMethod(sb, node, outerOptions, 'concat', (options) => {\n // [0, argsarr]\n sb.emitPushInt(node, 0);\n // [arrayObjectVal]\n sb.emitOp(node, 'PICKITEM');\n // [array]\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n // [buffer, array]\n sb.emitOp(node, 'PUSH0');\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n condition: () => {\n // [array, buffer, array]\n sb.emitOp(node, 'OVER');\n // [size, buffer, array]\n sb.emitOp(node, 'ARRAYSIZE');\n // [0, size, buffer, array]\n sb.emitPushInt(node, 0);\n // [size > 0, buffer, array]\n sb.emitOp(node, 'GT');\n },\n each: () => {\n // [array, buffer, array]\n sb.emitOp(node, 'OVER');\n // [0, array, buffer, array]\n sb.emitPushInt(node, 0);\n // [rightBufferVal, buffer, array]\n sb.emitOp(node, 'PICKITEM');\n // [rightBuffer, buffer, array]\n sb.emitHelper(node, options, sb.helpers.unwrapBuffer);\n // [buffer + rightBuffer, array]\n sb.emitOp(node, 'CAT');\n // [array, buffer, array]\n sb.emitOp(node, 'OVER');\n // [0, array, buffer, array]\n sb.emitPushInt(node, 0);\n // [buffer, array]\n sb.emitOp(node, 'REMOVE');\n },\n }),\n );\n // [buffer]\n sb.emitOp(node, 'NIP');\n // [bufferVal]\n sb.emitHelper(node, options, sb.helpers.wrapBuffer);\n });\n }\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddBooleanObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Boolean';\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\nimport { InternalFunctionProperties } from '../function';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddErrorObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Error';\n\n protected addConstructorProperties(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n // [objectVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n // ['construct', objectVal, objectVal, globalObjectVal]\n sb.emitPushString(node, InternalFunctionProperties.CONSTRUCT);\n // [func, 'construct', objectVal, objectVal, globalObjectVal]\n sb.emitHelper(\n node,\n options,\n sb.helpers.createConstructArray({\n withoutScope: true,\n body: () => {\n // Drop the args array\n // []\n sb.emitOp(node, 'DROP');\n },\n }),\n );\n // [objectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from './InternalGlobalProperties';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddModulesHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['modules', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitPushString(node, InternalGlobalProperties.MODULES);\n // [0, 'modules', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitPushInt(node, 0);\n // [arr, 'modules', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'NEWARRAY');\n // [objectPrototypeVal, globalObjectVal]]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddNumberObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Number';\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddObjectObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n\n /* create object prototype */\n // TODO: Implement more of the prototype\n // [objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectPrototypeVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'DUP');\n\n /* create object */\n // [objectVal, objectPrototypeVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, objectPrototypeVal, objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // ['prototype', objectVal, objectPrototypeVal, objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitPushString(node, 'prototype');\n // [objectPrototypeVal, 'prototype', objectVal, objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal, objectPrototypeVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [objectPrototypeVal, objectVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'OVER');\n // ['constructor', objectPrototypeVal, objectVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitPushString(node, 'constructor');\n // [objectVal, 'constructor', objectPrototypeVal, objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // [objectPrototypeVal, objectVal, globalObjectVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [globalObjectVal, objectPrototypeVal, objectVal, globalObjectVal]\n sb.emitOp(node, 'ROT');\n // ['Object', globalObjectVal, objectPrototypeVal, objectVal, globalObjectVal]\n sb.emitPushString(node, 'Object');\n // ['Object', globalObjectVal, objectPrototypeVal, objectVal, globalObjectVal]\n sb.emitPushInt(node, 3);\n // [objectVal, 'Object', globalObjectVal, objectPrototypeVal, globalObjectVal]\n sb.emitOp(node, 'ROLL');\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n }\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddStringObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'String';\n}\n","import { AddConstructorObjectHelper } from './AddConstructorObjectHelper';\n\n// Input: [objectPrototypeVal, globalObjectVal]\n// Output: [objectPrototypeVal, globalObjectVal]\nexport class AddSymbolObjectHelper extends AddConstructorObjectHelper {\n protected name: string = 'Symbol';\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [globalObjectVal]\nexport class SetGlobalObjectHelper extends Helper<Node> {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // [length, ...args]\n sb.emitOp(node, 'DEPTH');\n // [argv]\n sb.emitOp(node, 'PACK');\n // [globalObjectVal, argv]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [globalObjectVal, globalObjectVal, argv]\n sb.emitOp(node, 'DUP');\n // [globalObjectVal, argv]\n sb.scope.setGlobal(sb, node, options);\n // [globalObjectVal, argv, globalObjectVal]\n sb.emitOp(node, 'TUCK');\n // [argv, globalObjectVal, globalObjectVal]\n sb.emitOp(node, 'SWAP');\n // [globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addArguments);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addObjectObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addBooleanObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addNumberObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addStringObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addSymbolObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addArrayObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addBufferObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addErrorObject);\n // [objectPrototypeVal, globalObjectVal]\n sb.emitHelper(node, options, sb.helpers.addModules);\n // [globalObjectVal]\n sb.emitOp(node, 'DROP');\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from './InternalGlobalProperties';\nimport { TypedHelper } from '../common';\n\n// Input: [numberVal]\n// Output: [value]\nexport class GetArgumentHelper extends TypedHelper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n // [globalObjectVal, numberVal]\n sb.scope.getGlobal(sb, node, options);\n // [arguments, globalObjectVal, numberVal]\n sb.emitPushString(node, InternalGlobalProperties.ARGUMENTS);\n // [argv, numberVal]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n // [numberVal, argv]\n sb.emitOp(node, 'SWAP');\n // TODO: This should really be toNumber\n // [number, argv]\n sb.emitHelper(node, options, sb.helpers.toNumber({ type: this.type }));\n // [value]\n sb.emitOp(node, 'PICKITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface GetGlobalPropertyHelperOptions {\n property: string;\n}\n\n// Input: []\n// Output: [val]\nexport class GetGlobalPropertyHelper extends Helper<Node> {\n private readonly property: string;\n\n constructor(options: GetGlobalPropertyHelperOptions) {\n super();\n this.property = options.property;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [propertyString, globalObjectVal]\n sb.emitPushString(node, this.property);\n // [val]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [objectVal]\nexport class CreateArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [Array]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.new({ noArgs: true }));\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [indexNumber, objectVal]\n// Output: [val]\nexport class GetArrayIndexHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [objectVal, indexNumber, objectVal]\n sb.emitOp(node, 'OVER');\n // ['length', objectVal, indexNumber, objectVal]\n sb.emitPushString(node, 'length');\n // [lengthNumberVal, indexNumber, objectVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [lengthNumber, indexNumber, objectVal]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [indexNumber, lengthNumber, indexNumber, objectVal]\n sb.emitOp(node, 'OVER');\n // [lessThanLength, indexNumber, objectVal]\n sb.emitOp(node, 'GT');\n },\n whenTrue: () => {\n // [objectVal, indexNumber]\n sb.emitOp(node, 'SWAP');\n // [arr, indexNumber]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n // [indexNumber, arr]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitOp(node, 'PICKITEM');\n },\n whenFalse: () => {\n // [indexNumber]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'DROP');\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n },\n }),\n );\n }\n}\n","export enum InternalArrayProperties {\n DATA_ARRAY = 'DataArray',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalArrayProperties } from './InternalArrayProperties';\n\n// Input: [objectVal]\n// Output: [arr]\nexport class GetArrayValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // ['DataArray', objectVal]\n sb.emitPushString(node, InternalArrayProperties.DATA_ARRAY);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [val, indexNumber, objectVal]\n// Output: []\nexport class SetArrayIndexHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [objectVal, val, indexNumber]\n sb.emitOp(node, 'ROT');\n // [indexNumber, objectVal, val]\n sb.emitOp(node, 'ROT');\n // [objectVal, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // ['length', objectVal, indexNumber, objectVal, val]\n sb.emitPushString(node, 'length');\n // [lengthNumberVal, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [lengthNumber, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.getNumber);\n // [indexNumber, lengthNumber, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // [lessThanLength, indexNumber, objectVal, val]\n sb.emitOp(node, 'GT');\n },\n whenTrue: () => {\n // [objectVal, indexNumber, val]\n sb.emitOp(node, 'SWAP');\n // []\n this.setIndex(sb, node, options);\n },\n whenFalse: () => {\n // [objectVal, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // [arr, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n // [indexNumber, arr, indexNumber, objectVal, val]\n sb.emitOp(node, 'OVER');\n // [indexNumber + 1, arr, indexNumber, objectVal, val]\n sb.emitOp(node, 'INC');\n // [length, arr, length, indexNumber, objectVal, val]\n sb.emitOp(node, 'TUCK');\n // [length, indexNumber, objectVal, val]\n sb.emitHelper(node, options, sb.helpers.extendArray);\n // [objectVal, length, indexNumber, val]\n sb.emitOp(node, 'ROT');\n // [objectVal, length, objectVal, indexNumber, val]\n sb.emitOp(node, 'TUCK');\n // ['length', objectVal, length, objectVal, indexNumber, val]\n sb.emitPushString(node, 'length');\n // [length, 'length', objectVal, objectVal, indexNumber, val]\n sb.emitOp(node, 'ROT');\n // [lengthVal, 'length', objectVal, objectVal, indexNumber, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [objectVal, indexNumber, val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n // []\n this.setIndex(sb, node, options);\n },\n }),\n );\n }\n\n private setIndex(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [arr, indexNumber, val]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n // [indexNumber, arr, val]\n sb.emitOp(node, 'SWAP');\n // [val, indexNumber, arr]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalArrayProperties } from './InternalArrayProperties';\n\n// Input: [arr, objectVal]\n// Output: []\nexport class SetArrayValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n\n // ['DataArray', arr, objectVal]\n sb.emitPushString(node, InternalArrayProperties.DATA_ARRAY);\n // [arr, 'DataArray', objectVal]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [objectVal]\n// Output: [arr]\nexport class UnwrapArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // [arr]\n sb.emitHelper(node, options, sb.helpers.getArrayValue);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [arr]\n// Output: [objectVal]\nexport class WrapArrayHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const invokeArrayConstruct = () => {\n // [Array, argsarr]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.new());\n };\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [arr, arr]\n sb.emitOp(node, 'DUP');\n // [size, arr]\n sb.emitOp(node, 'ARRAYSIZE');\n // [1, size, arr]\n sb.emitPushInt(node, 1);\n // [size === 1, arr]\n sb.emitOp(node, 'EQUAL');\n },\n whenTrue: () => {\n // [0, arr]\n sb.emitPushInt(node, 0);\n // [val]\n sb.emitOp(node, 'PICKITEM');\n // [1, val]\n sb.emitPushInt(node, 1);\n // [lengthVal, val]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n // [1, lengthVal, val]\n sb.emitPushInt(node, 1);\n // [argsarr, val]\n sb.emitOp(node, 'PACK');\n // [arrayObjectVal, val]\n invokeArrayConstruct();\n // [arrayObjectVal, val, arrayObjectVal]\n sb.emitOp(node, 'TUCK');\n // [0, arrayObjectVal, val, arrayObjectVal]\n sb.emitPushInt(node, 0);\n // [val, 0, arrayObjectVal, arrayObjectVal]\n sb.emitOp(node, 'ROT');\n // [arrayObjectVal]\n sb.emitHelper(node, options, sb.helpers.setArrayIndex);\n },\n whenFalse: () => {\n // [arrayObjectVal]\n invokeArrayConstruct();\n },\n }),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [globalObjectVal]\n// Output: []\nexport class AddEmptyModuleHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [modules]\n sb.emitHelper(node, options, sb.helpers.getModules);\n // [exports, modules]\n sb.emitOp(node, 'NEWMAP');\n // []\n sb.emitOp(node, 'APPEND');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface ExportHelperOptions {\n name?: string;\n defaultExport?: boolean;\n}\n\n// Input: [val, exports]\n// Output: []\nexport class ExportHelper extends Helper {\n private readonly name: string | undefined;\n private readonly defaultExport: boolean;\n\n constructor({ name, defaultExport }: ExportHelperOptions) {\n super();\n this.name = name;\n this.defaultExport = defaultExport || false;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (this.name != null) {\n sb.addExport(this.name);\n // [name, val, exports]\n sb.emitPushString(node, this.name);\n } else if (this.defaultExport) {\n // [name, val, exports]\n sb.emitPushString(node, 'default');\n } else {\n sb.reportUnsupported(node);\n }\n\n // [val, name, exports]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { ExportHelperOptions } from './ExportHelper';\n\n// Input: [val]\n// Output: []\nexport class ExportSingleHelper extends Helper {\n private readonly options: ExportHelperOptions;\n\n constructor(options: ExportHelperOptions) {\n super();\n this.options = options;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // [exports, val]\n sb.emitHelper(node, options, sb.helpers.getCurrentModule);\n // [val, exports]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.export(this.options));\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [exports]\nexport class GetCurrentModuleHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [globalObjectVal]\n sb.scope.getGlobal(sb, node, options);\n // [exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getModule({ moduleIndex: sb.moduleIndex }),\n );\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\nexport interface GetModuleHelperOptions {\n moduleIndex: number;\n}\n\n// Input: [globalObjectVal]\n// Output: [exports]\nexport class GetModuleHelper extends Helper {\n private moduleIndex: number;\n\n constructor(options: GetModuleHelperOptions) {\n super();\n this.moduleIndex = options.moduleIndex;\n }\n\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [modules, index]\n sb.emitHelper(node, options, sb.helpers.getModules);\n // [index, modules]\n sb.emitPushInt(node, this.moduleIndex);\n // [exports]\n sb.emitOp(node, 'PICKITEM');\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalGlobalProperties } from '../global';\n\n// Input: [globalObjectVal]\n// Output: [modules]\nexport class GetModulesHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // ['modules', globalObjectVal]\n sb.emitPushString(node, InternalGlobalProperties.MODULES);\n // [modules]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n }\n}\n","export type BlockchainInterfaceName =\n | 'AccountBase'\n | 'AssetBase'\n | 'AttributeBase'\n | 'BlockBase'\n | 'ContractBase'\n | 'HeaderBase'\n | 'InputBase'\n | 'OutputBase'\n | 'TransactionBase'\n | 'ValidatorBase'\n | 'StorageContextBase'\n | 'StorageIteratorBase';\n\nexport enum InternalBlockchainInterfaceProperties {\n BLOCKCHAIN_INTERFACE = 'BlockchainInterface',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { BlockchainInterfaceName } from './InternalBlockchainInterfaceProperties';\n\nexport interface IsBlockchainInterfaceHelperOptions {\n name: BlockchainInterfaceName;\n}\n\n// Input: [objectVal]\n// Output: [boolean]\nexport class IsBlockchainInterfaceHelper extends Helper {\n private readonly name: BlockchainInterfaceName;\n\n constructor(options: IsBlockchainInterfaceHelperOptions) {\n super();\n this.name = options.name;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // ['__brand', objectVal]\n sb.emitPushString(node, '__brand');\n // [brandVal]\n sb.emitHelper(node, options, sb.helpers.getPropertyObjectProperty);\n // [brand]\n sb.emitHelper(node, options, sb.helpers.getString);\n // [name, brand]\n sb.emitPushString(node, this.name);\n // [boolean]\n sb.emitOp(node, 'EQUAL');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalBlockchainInterfaceProperties } from './InternalBlockchainInterfaceProperties';\n\n// Input: [objectVal]\n// Output: [blockchainInterface]\nexport class UnwrapBlockchainInterfaceHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // ['blockchain_interface', objectVal]\n sb.emitPushString(\n node,\n InternalBlockchainInterfaceProperties.BLOCKCHAIN_INTERFACE,\n );\n // [blockchainInterface]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport {\n BlockchainInterfaceName,\n InternalBlockchainInterfaceProperties,\n} from './InternalBlockchainInterfaceProperties';\n\nexport interface WrapBlockchainInterfaceHelperOptions {\n name: BlockchainInterfaceName;\n}\n\n// Input: [blockchainInterface]\n// Output: [objectVal]\nexport class WrapBlockchainInterfaceHelper extends Helper {\n private readonly name: BlockchainInterfaceName;\n\n constructor(options: WrapBlockchainInterfaceHelperOptions) {\n super();\n this.name = options.name;\n }\n\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n const options = sb.pushValueOptions(optionsIn);\n // [objectVal, blockchainInterface]\n sb.emitHelper(node, options, sb.helpers.createObject);\n // [objectVal, blockchainInterface, objectVal]\n sb.emitOp(node, 'TUCK');\n // ['__brand', objectVal, blockchainInterface, objectVal]\n sb.emitPushString(node, '__brand');\n // [name, '__brand', objectVal, blockchainInterface, objectVal]\n sb.emitPushString(node, this.name);\n // [nameVal, '__brand', objectVal, blockchainInterface, objectVal]\n sb.emitHelper(node, options, sb.helpers.createString);\n // [blockchainInterface, objectVal]\n sb.emitHelper(node, options, sb.helpers.setDataPropertyObjectProperty);\n // [objectVal, blockchainInterface, objectVal]\n sb.emitOp(node, 'OVER');\n // ['blockchain_interface', objectVal, blockchainInterface, objectVal]\n sb.emitPushString(\n node,\n InternalBlockchainInterfaceProperties.BLOCKCHAIN_INTERFACE,\n );\n // [blockchainInterface, 'blockchain_interface', objectVal, objectVal]\n sb.emitOp(node, 'ROT');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: []\n// Output: [objectVal]\nexport class CreateBufferHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (options.pushValue) {\n // [Buffer]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Buffer' }),\n );\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.new({ noArgs: true }));\n }\n }\n}\n","export enum InternalBufferProperties {\n DATA = 'Data',\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalBufferProperties } from './InternalBufferProperties';\n\n// Input: [objectVal]\n// Output: [byteArray]\nexport class GetBufferValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['data', objectVal]\n sb.emitPushString(node, InternalBufferProperties.DATA);\n // [byteArray]\n sb.emitHelper(node, options, sb.helpers.getInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\nimport { InternalBufferProperties } from './InternalBufferProperties';\n\n// Input: [byteArray, objectVal]\n// Output: []\nexport class SetBufferValueHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, optionsIn: VisitOptions): void {\n const options = sb.pushValueOptions(optionsIn);\n // ['data', byteArray, objectVal]\n sb.emitPushString(node, InternalBufferProperties.DATA);\n // [byteArray, 'data', objectVal]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitHelper(node, options, sb.helpers.setInternalObjectProperty);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [objectVal]\n// Output: [byteArray]\nexport class UnwrapBufferHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [byteArray]\n sb.emitHelper(node, options, sb.helpers.getBufferValue);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { Helper } from '../Helper';\nimport { ScriptBuilder } from '../../sb';\nimport { VisitOptions } from '../../types';\n\n// Input: [byteArray]\n// Output: [objectVal]\nexport class WrapBufferHelper extends Helper {\n public emit(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (!options.pushValue) {\n sb.emitOp(node, 'DROP');\n return;\n }\n\n // [objectVal, byteArray]\n sb.emitHelper(node, options, sb.helpers.createBuffer);\n // [objectVal, byteArray, objectVal]\n sb.emitOp(node, 'TUCK');\n // [byteArray, objectVal, objectVal]\n sb.emitOp(node, 'SWAP');\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.setBufferValue);\n }\n}\n","import { Helper } from './Helper';\nimport {\n CloneArrayHelper,\n ExtendArrayHelper,\n ArrMapHelper,\n ArrMapHelperOptions,\n ArrForEachHelperOptions,\n ArrForEachHelper,\n ForTypeHelper,\n ForTypeHelperOptions,\n GenericSerializeHelper,\n GenericDeserializeHelper,\n ArrFilterHelperOptions,\n ArrFilterHelper,\n TypedHelperOptions,\n} from './common';\nimport {\n HandleCompletionHelper,\n CreateCompletionHelper,\n CreateNormalCompletionHelper,\n CreateThrowCompletionHelper,\n GetCompletionErrorHelper,\n GetCompletionValHelper,\n PickCompletionValHelper,\n} from './completionRecord';\nimport { ThrowHelper, ThrowTypeErrorHelper } from './error';\nimport {\n CallHelper,\n CreateFunctionObjectHelper,\n FunctionHelper,\n FunctionHelperOptions,\n ParametersHelper,\n CloneFunctionHelper,\n ArgumentsHelper,\n CloneFunctionObjectHelperOptions,\n CloneFunctionObjectHelper,\n BindFunctionThisHelper,\n BindFunctionObjectThisHelperOptions,\n BindFunctionObjectThisHelper,\n BindFunctionThisHelperOptions,\n InvokeCallHelper,\n InvokeConstructHelper,\n InvokeCallHelperOptions,\n InvokeConstructHelperOptions,\n CreateCallArrayHelper,\n CreateConstructArrayHelperOptions,\n CreateConstructArrayHelper,\n CreateFunctionObjectHelperOptions,\n CreateFunctionArrayHelperOptions,\n CreateFunctionArrayHelper,\n NewHelperOptions,\n NewHelper,\n} from './function';\nimport {\n ForLoopHelper,\n ForLoopHelperOptions,\n ProcessStatementsHelper,\n ProcessStatementsHelperOptions,\n IfHelper,\n IfHelperOptions,\n Case,\n CaseHelper,\n} from './statement';\nimport {\n CreateBooleanHelper,\n CreateNullHelper,\n CreateNumberHelper,\n CreateObjectHelper,\n CreateStringHelper,\n CreateSymbolHelper,\n CreateUndefinedHelper,\n IsBooleanHelper,\n IsNullHelper,\n IsNumberHelper,\n IsObjectHelper,\n IsStringHelper,\n IsSymbolHelper,\n IsUndefinedHelper,\n GetBooleanHelper,\n GetNumberHelper,\n GetSymbolHelper,\n GetPropertyObjectHelper,\n GetStringHelper,\n ToBooleanHelper,\n ToNumberHelper,\n ToStringHelper,\n GetSymbolObjectHelper,\n GetSymbolObjectPropertyHelper,\n GetInternalObjectHelper,\n GetInternalObjectPropertyHelper,\n GetPropertyObjectPropertyHelper,\n SetAccessorPropertyObjectPropertyHelper,\n SetDataPropertyObjectPropertyHelper,\n ToPrimitiveHelper,\n ToPrimitiveHelperOptions,\n IsSameTypeHelper,\n UnwrapTypeHelper,\n UnwrapValHelper,\n IsNullOrUndefinedHelper,\n GetObjectHelper,\n SetInternalObjectPropertyHelper,\n SetAccessorSymbolObjectPropertyHelper,\n SetDataSymbolObjectPropertyHelper,\n ShallowCloneObjectHelper,\n ShallowCloneObjHelper,\n ToObjectHelper,\n InstanceofHelper,\n CreatePropertyObjectHelper,\n ElementAccessHelper,\n SetObjectAccessorPropertyHelperBaseOptions,\n FindObjectPropertyHelperOptions,\n FindObjectPropertyHelper,\n SetPropertyObjectPropertyHelper,\n SetSymbolObjectPropertyHelper,\n} from './types';\nimport {\n LessThanHelperOptions,\n LessThanHelper,\n EqualsEqualsEqualsHelperOptions,\n EqualsEqualsEqualsHelper,\n EqualsEqualsEqualsNumberHelper,\n EqualsEqualsEqualsSameTypeHelper,\n EqualsEqualsEqualsUnknownHelper,\n EqualsEqualsHelper,\n EqualsEqualsHelperOptions,\n} from './relational';\nimport {\n GLOBAL_PROPERTIES,\n SetGlobalObjectHelper,\n AddBooleanObjectHelper,\n AddNumberObjectHelper,\n AddObjectObjectHelper,\n AddStringObjectHelper,\n AddSymbolObjectHelper,\n AddArrayObjectHelper,\n AddModulesHelper,\n GetGlobalPropertyHelper,\n GetGlobalPropertyHelperOptions,\n AddBufferObjectHelper,\n AddErrorObjectHelper,\n AddArgumentsHelper,\n GetArgumentHelper,\n} from './global';\nimport {\n CreateArrayHelper,\n GetArrayValueHelper,\n SetArrayIndexHelper,\n SetArrayValueHelper,\n GetArrayIndexHelper,\n WrapArrayHelper,\n UnwrapArrayHelper,\n} from './array';\nimport {\n AddEmptyModuleHelper,\n GetModuleHelperOptions,\n GetModuleHelper,\n GetModulesHelper,\n GetCurrentModuleHelper,\n ExportHelperOptions,\n ExportHelper,\n ExportSingleHelper,\n} from './module';\nimport {\n IsBlockchainInterfaceHelperOptions,\n IsBlockchainInterfaceHelper,\n WrapBlockchainInterfaceHelperOptions,\n WrapBlockchainInterfaceHelper,\n UnwrapBlockchainInterfaceHelper,\n} from './blockchain';\nimport {\n CreateBufferHelper,\n GetBufferValueHelper,\n SetBufferValueHelper,\n UnwrapBufferHelper,\n WrapBufferHelper,\n} from './buffer';\nimport { KeyedHelper } from './KeyedHelper';\n\nexport interface Helpers {\n arrFilter: (options: ArrFilterHelperOptions) => ArrFilterHelper;\n arrMap: (options: ArrMapHelperOptions) => ArrMapHelper;\n arrForEach: (options: ArrForEachHelperOptions) => ArrForEachHelper;\n cloneArray: CloneArrayHelper;\n extendArray: ExtendArrayHelper;\n forType: (options: ForTypeHelperOptions) => ForTypeHelper;\n genericDeserialize: GenericDeserializeHelper;\n genericSerialize: GenericSerializeHelper;\n\n equalsEqualsEquals: (\n options: EqualsEqualsEqualsHelperOptions,\n ) => EqualsEqualsEqualsHelper;\n equalsEqualsEqualsNumber: EqualsEqualsEqualsNumberHelper;\n equalsEqualsEqualsSameType: EqualsEqualsEqualsSameTypeHelper;\n equalsEqualsEqualsUnknown: EqualsEqualsEqualsUnknownHelper;\n equalsEquals: (options: EqualsEqualsHelperOptions) => EqualsEqualsHelper;\n lessThan: (options: LessThanHelperOptions) => LessThanHelper;\n processStatements: (\n options: ProcessStatementsHelperOptions,\n ) => ProcessStatementsHelper;\n\n args: ArgumentsHelper;\n bindFunctionObjectThis: (\n options: BindFunctionObjectThisHelperOptions,\n ) => BindFunctionObjectThisHelper;\n bindFunctionThis: (\n options: BindFunctionThisHelperOptions,\n ) => BindFunctionThisHelper;\n call: CallHelper;\n cloneFunction: CloneFunctionHelper;\n cloneFunctionObject: (\n options: CloneFunctionObjectHelperOptions,\n ) => CloneFunctionObjectHelper;\n createCallArray: CreateCallArrayHelper;\n createConstructArray: (\n options: CreateConstructArrayHelperOptions,\n ) => CreateConstructArrayHelper;\n createFunctionArray: (\n options: CreateFunctionArrayHelperOptions,\n ) => CreateFunctionArrayHelper;\n createFunctionObject: (\n options: CreateFunctionObjectHelperOptions,\n ) => CreateFunctionObjectHelper;\n function: (options: FunctionHelperOptions) => FunctionHelper;\n invokeCall: (options?: InvokeCallHelperOptions) => InvokeCallHelper;\n invokeConstruct: (\n options?: InvokeConstructHelperOptions,\n ) => InvokeConstructHelper;\n new: (options?: NewHelperOptions) => NewHelper;\n parameters: ParametersHelper;\n\n forLoop: (options: ForLoopHelperOptions) => ForLoopHelper;\n if: (options: IfHelperOptions) => IfHelper;\n case: (cases: Case[], defaultCase: () => void) => CaseHelper;\n createCompletion: CreateCompletionHelper;\n createNormalCompletion: CreateNormalCompletionHelper;\n createThrowCompletion: CreateThrowCompletionHelper;\n getCompletionError: GetCompletionErrorHelper;\n getCompletionVal: GetCompletionValHelper;\n handleCompletion: HandleCompletionHelper;\n pickCompletionVal: PickCompletionValHelper;\n throw: ThrowHelper;\n throwTypeError: ThrowTypeErrorHelper;\n createBoolean: CreateBooleanHelper;\n createNull: CreateNullHelper;\n createNumber: CreateNumberHelper;\n createObject: CreateObjectHelper;\n createString: CreateStringHelper;\n createSymbol: CreateSymbolHelper;\n createUndefined: CreateUndefinedHelper;\n isBoolean: IsBooleanHelper;\n isNull: IsNullHelper;\n isNumber: IsNumberHelper;\n isObject: IsObjectHelper;\n isString: IsStringHelper;\n isSymbol: IsSymbolHelper;\n isUndefined: IsUndefinedHelper;\n isNullOrUndefined: IsNullOrUndefinedHelper;\n isSameType: IsSameTypeHelper;\n getBoolean: GetBooleanHelper;\n getNumber: GetNumberHelper;\n getString: GetStringHelper;\n getSymbol: GetSymbolHelper;\n getObject: GetObjectHelper;\n toBoolean: (options: TypedHelperOptions) => ToBooleanHelper;\n toString: (options: TypedHelperOptions) => ToStringHelper;\n toNumber: (options: TypedHelperOptions) => ToNumberHelper;\n toObject: (options: TypedHelperOptions) => ToObjectHelper;\n toPrimitive: (options: ToPrimitiveHelperOptions) => ToPrimitiveHelper;\n getSymbolObject: GetSymbolObjectHelper;\n getSymbolObjectProperty: GetSymbolObjectPropertyHelper;\n setSymbolObjectProperty: SetSymbolObjectPropertyHelper;\n setDataSymbolObjectProperty: SetDataSymbolObjectPropertyHelper;\n setAccessorSymbolObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => SetAccessorSymbolObjectPropertyHelper;\n getPropertyObject: GetPropertyObjectHelper;\n getPropertyObjectProperty: GetPropertyObjectPropertyHelper;\n setPropertyObjectProperty: SetPropertyObjectPropertyHelper;\n setDataPropertyObjectProperty: SetDataPropertyObjectPropertyHelper;\n setAccessorPropertyObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => SetAccessorPropertyObjectPropertyHelper;\n getInternalObject: GetInternalObjectHelper;\n getInternalObjectProperty: GetInternalObjectPropertyHelper;\n setInternalObjectProperty: SetInternalObjectPropertyHelper;\n shallowCloneObject: ShallowCloneObjectHelper;\n shallowCloneObj: ShallowCloneObjHelper;\n elementAccess: ElementAccessHelper;\n unwrapType: UnwrapTypeHelper;\n unwrapVal: UnwrapValHelper;\n instanceof: InstanceofHelper;\n createPropertyObject: CreatePropertyObjectHelper;\n findObjectProperty: (\n options: FindObjectPropertyHelperOptions,\n ) => FindObjectPropertyHelper;\n\n getArrayValue: GetArrayValueHelper;\n createArray: CreateArrayHelper;\n setArrayValue: SetArrayValueHelper;\n getArrayIndex: GetArrayIndexHelper;\n setArrayIndex: SetArrayIndexHelper;\n wrapArray: WrapArrayHelper;\n unwrapArray: UnwrapArrayHelper;\n\n createBuffer: CreateBufferHelper;\n getBufferValue: GetBufferValueHelper;\n setBufferValue: SetBufferValueHelper;\n unwrapBuffer: UnwrapBufferHelper;\n wrapBuffer: WrapBufferHelper;\n\n export: (options: ExportHelperOptions) => ExportHelper;\n exportSingle: (options: ExportHelperOptions) => ExportSingleHelper;\n getModule: (options: GetModuleHelperOptions) => GetModuleHelper;\n getCurrentModule: GetCurrentModuleHelper;\n getModules: GetModulesHelper;\n addEmptyModule: AddEmptyModuleHelper;\n\n isBlockchainInterface: (\n options: IsBlockchainInterfaceHelperOptions,\n ) => IsBlockchainInterfaceHelper;\n wrapBlockchainInterface: (\n options: WrapBlockchainInterfaceHelperOptions,\n ) => WrapBlockchainInterfaceHelper;\n unwrapBlockchainInterface: UnwrapBlockchainInterfaceHelper;\n\n addArguments: AddArgumentsHelper;\n addArrayObject: AddArrayObjectHelper;\n addBooleanObject: AddBooleanObjectHelper;\n addBufferObject: AddBufferObjectHelper;\n addErrorObject: AddErrorObjectHelper;\n addModules: AddModulesHelper;\n addNumberObject: AddNumberObjectHelper;\n addObjectObject: AddObjectObjectHelper;\n addStringObject: AddStringObjectHelper;\n addSymbolObject: AddSymbolObjectHelper;\n setGlobalObject: SetGlobalObjectHelper;\n getArgument: (options: TypedHelperOptions) => GetArgumentHelper;\n getGlobalProperty: (\n options: GetGlobalPropertyHelperOptions,\n ) => GetGlobalPropertyHelper;\n globalProperties: Set<string>;\n}\n\nexport const createHelpers = (): Helpers => {\n const cache: { [key: string]: Helper } = {};\n\n function memoized<Options, T extends Helper>(\n HelperClass: (new (options: Options) => T) & KeyedHelper<Options>,\n ): (options: Options) => T {\n return (options: Options) => {\n const key = HelperClass.getKey(options);\n if (cache[key] == null) {\n cache[key] = new HelperClass(options);\n }\n\n return cache[key] as T;\n };\n }\n\n return {\n arrFilter: (options: ArrFilterHelperOptions) =>\n new ArrFilterHelper(options),\n arrMap: (options: ArrMapHelperOptions) => new ArrMapHelper(options),\n arrForEach: (options: ArrForEachHelperOptions) =>\n new ArrForEachHelper(options),\n cloneArray: new CloneArrayHelper(),\n extendArray: new ExtendArrayHelper(),\n forType: (options: ForTypeHelperOptions) => new ForTypeHelper(options),\n genericDeserialize: new GenericDeserializeHelper(),\n genericSerialize: new GenericSerializeHelper(),\n\n equalsEqualsEquals: (options: EqualsEqualsEqualsHelperOptions) =>\n new EqualsEqualsEqualsHelper(options),\n equalsEqualsEqualsNumber: new EqualsEqualsEqualsNumberHelper(),\n equalsEqualsEqualsSameType: new EqualsEqualsEqualsSameTypeHelper(),\n equalsEqualsEqualsUnknown: new EqualsEqualsEqualsUnknownHelper(),\n equalsEquals: (options: EqualsEqualsHelperOptions) =>\n new EqualsEqualsHelper(options),\n lessThan: (options: LessThanHelperOptions) => new LessThanHelper(options),\n processStatements: (options) => new ProcessStatementsHelper(options),\n\n args: new ArgumentsHelper(),\n bindFunctionObjectThis: (options: BindFunctionObjectThisHelperOptions) =>\n new BindFunctionObjectThisHelper(options),\n bindFunctionThis: (options: BindFunctionThisHelperOptions) =>\n new BindFunctionThisHelper(options),\n call: new CallHelper(),\n cloneFunction: new CloneFunctionHelper(),\n cloneFunctionObject: (options: CloneFunctionObjectHelperOptions) =>\n new CloneFunctionObjectHelper(options),\n createCallArray: new CreateCallArrayHelper(),\n createConstructArray: (options: CreateConstructArrayHelperOptions) =>\n new CreateConstructArrayHelper(options),\n createFunctionArray: (options: CreateFunctionArrayHelperOptions) =>\n new CreateFunctionArrayHelper(options),\n createFunctionObject: (options: CreateFunctionObjectHelperOptions) =>\n new CreateFunctionObjectHelper(options),\n function: (options: FunctionHelperOptions) => new FunctionHelper(options),\n invokeCall: memoized(InvokeCallHelper),\n invokeConstruct: (options?: InvokeConstructHelperOptions) =>\n new InvokeConstructHelper(options),\n new: (options?: NewHelperOptions) => new NewHelper(options),\n parameters: new ParametersHelper(),\n\n forLoop: (options) => new ForLoopHelper(options),\n if: (options) => new IfHelper(options),\n case: (cases: Case[], defaultCase: () => void) =>\n new CaseHelper(cases, defaultCase),\n createCompletion: new CreateCompletionHelper(),\n createNormalCompletion: new CreateNormalCompletionHelper(),\n createThrowCompletion: new CreateThrowCompletionHelper(),\n getCompletionError: new GetCompletionErrorHelper(),\n getCompletionVal: new GetCompletionValHelper(),\n handleCompletion: new HandleCompletionHelper(),\n pickCompletionVal: new PickCompletionValHelper(),\n throw: new ThrowHelper(),\n throwTypeError: new ThrowTypeErrorHelper(),\n createBoolean: new CreateBooleanHelper(),\n createNull: new CreateNullHelper(),\n createNumber: new CreateNumberHelper(),\n createObject: new CreateObjectHelper(),\n createString: new CreateStringHelper(),\n createSymbol: new CreateSymbolHelper(),\n createUndefined: new CreateUndefinedHelper(),\n isBoolean: new IsBooleanHelper(),\n isNull: new IsNullHelper(),\n isNumber: new IsNumberHelper(),\n isObject: new IsObjectHelper(),\n isString: new IsStringHelper(),\n isSymbol: new IsSymbolHelper(),\n isUndefined: new IsUndefinedHelper(),\n isNullOrUndefined: new IsNullOrUndefinedHelper(),\n isSameType: new IsSameTypeHelper(),\n getBoolean: new GetBooleanHelper(),\n getNumber: new GetNumberHelper(),\n getString: new GetStringHelper(),\n getSymbol: new GetSymbolHelper(),\n getObject: new GetObjectHelper(),\n toBoolean: (options: TypedHelperOptions) => new ToBooleanHelper(options),\n toString: (options: TypedHelperOptions) => new ToStringHelper(options),\n toNumber: (options: TypedHelperOptions) => new ToNumberHelper(options),\n toObject: (options: TypedHelperOptions) => new ToObjectHelper(options),\n toPrimitive: (options) => new ToPrimitiveHelper(options),\n getSymbolObject: new GetSymbolObjectHelper(),\n getSymbolObjectProperty: new GetSymbolObjectPropertyHelper(),\n setSymbolObjectProperty: new SetSymbolObjectPropertyHelper(),\n setDataSymbolObjectProperty: new SetDataSymbolObjectPropertyHelper(),\n setAccessorSymbolObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => new SetAccessorSymbolObjectPropertyHelper(options),\n getPropertyObject: new GetPropertyObjectHelper(),\n getPropertyObjectProperty: new GetPropertyObjectPropertyHelper(),\n setPropertyObjectProperty: new SetPropertyObjectPropertyHelper(),\n setDataPropertyObjectProperty: new SetDataPropertyObjectPropertyHelper(),\n setAccessorPropertyObjectProperty: (\n options: SetObjectAccessorPropertyHelperBaseOptions,\n ) => new SetAccessorPropertyObjectPropertyHelper(options),\n getInternalObject: new GetInternalObjectHelper(),\n getInternalObjectProperty: new GetInternalObjectPropertyHelper(),\n setInternalObjectProperty: new SetInternalObjectPropertyHelper(),\n shallowCloneObject: new ShallowCloneObjectHelper(),\n shallowCloneObj: new ShallowCloneObjHelper(),\n elementAccess: new ElementAccessHelper(),\n unwrapType: new UnwrapTypeHelper(),\n unwrapVal: new UnwrapValHelper(),\n instanceof: new InstanceofHelper(),\n createPropertyObject: new CreatePropertyObjectHelper(),\n findObjectProperty: (options: FindObjectPropertyHelperOptions) =>\n new FindObjectPropertyHelper(options),\n\n getArrayValue: new GetArrayValueHelper(),\n createArray: new CreateArrayHelper(),\n setArrayValue: new SetArrayValueHelper(),\n getArrayIndex: new GetArrayIndexHelper(),\n setArrayIndex: new SetArrayIndexHelper(),\n wrapArray: new WrapArrayHelper(),\n unwrapArray: new UnwrapArrayHelper(),\n\n createBuffer: new CreateBufferHelper(),\n getBufferValue: new GetBufferValueHelper(),\n setBufferValue: new SetBufferValueHelper(),\n unwrapBuffer: new UnwrapBufferHelper(),\n wrapBuffer: new WrapBufferHelper(),\n\n export: (options: ExportHelperOptions) => new ExportHelper(options),\n exportSingle: (options: ExportHelperOptions) =>\n new ExportSingleHelper(options),\n getModule: (options: GetModuleHelperOptions) =>\n new GetModuleHelper(options),\n getCurrentModule: new GetCurrentModuleHelper(),\n getModules: new GetModulesHelper(),\n addEmptyModule: new AddEmptyModuleHelper(),\n\n isBlockchainInterface: (options: IsBlockchainInterfaceHelperOptions) =>\n new IsBlockchainInterfaceHelper(options),\n wrapBlockchainInterface: (options: WrapBlockchainInterfaceHelperOptions) =>\n new WrapBlockchainInterfaceHelper(options),\n unwrapBlockchainInterface: new UnwrapBlockchainInterfaceHelper(),\n\n addArguments: new AddArgumentsHelper(),\n addArrayObject: new AddArrayObjectHelper(),\n addBooleanObject: new AddBooleanObjectHelper(),\n addBufferObject: new AddBufferObjectHelper(),\n addErrorObject: new AddErrorObjectHelper(),\n addModules: new AddModulesHelper(),\n addNumberObject: new AddNumberObjectHelper(),\n addObjectObject: new AddObjectObjectHelper(),\n addStringObject: new AddStringObjectHelper(),\n addSymbolObject: new AddSymbolObjectHelper(),\n setGlobalObject: new SetGlobalObjectHelper(),\n getArgument: (options: TypedHelperOptions) =>\n new GetArgumentHelper(options),\n getGlobalProperty: (options: GetGlobalPropertyHelperOptions) =>\n new GetGlobalPropertyHelper(options),\n globalProperties: GLOBAL_PROPERTIES,\n };\n};\n","import { ClassDeclaration, SyntaxKind, TypeGuards } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport class ClassDeclarationCompiler extends NodeCompiler<ClassDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.ClassDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: ClassDeclaration,\n optionsIn: VisitOptions,\n ): void {\n let options = sb.pushValueOptions(sb.noSuperClassOptions(optionsIn));\n const name = sb.scope.add(decl.getNameOrThrow());\n const extendsExpr = decl.getExtends();\n let superClassIn;\n if (extendsExpr != null) {\n superClassIn = sb.scope.addUnique();\n options = sb.superClassOptions(options, superClassIn);\n // [superClass]\n sb.visit(extendsExpr.getExpression(), options);\n // []\n sb.scope.set(sb, extendsExpr, options, superClassIn);\n }\n const superClass = superClassIn;\n\n /* Create constructor function */\n // [farr]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createConstructArray({\n body: () => {\n // [argsarr]\n const ctorImpl = decl\n .getConstructors()\n .find((ctor) => ctor.isImplementation());\n // Default value assignments\n if (ctorImpl != null) {\n // []\n sb.emitHelper(ctorImpl, options, sb.helpers.parameters);\n // Super call statement\n } else if (superClass != null && extendsExpr != null) {\n // [thisObjectVal, argsarr]\n sb.scope.getThis(sb, decl, options);\n // [ctor, thisObjectVal, argsarr]\n sb.scope.get(sb, decl, options, superClass);\n // []\n sb.emitHelper(decl, options, sb.helpers.invokeConstruct());\n // Drop the argsarray, we must not use it\n } else {\n // []\n sb.emitOp(decl, 'DROP');\n }\n // Parameter property assignments\n // Member variable assignments\n // [thisObjectVal]\n sb.scope.getThis(sb, decl, options);\n decl\n .getInstanceProperties()\n .filter(TypeGuards.isPropertyDeclaration)\n .forEach((property) => {\n const initializer = property.getInitializer();\n if (initializer != null) {\n sb.emitOp(decl, 'DUP');\n // [prop, thisObjectVal, thisObjectVal]\n sb.emitPushString(initializer, property.getName());\n // [init, prop, thisObjectVal, thisObjectVal]\n sb.visit(initializer, options);\n // [thisObjectVal]\n sb.emitHelper(\n initializer,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n }\n });\n // []\n sb.emitOp(decl, 'DROP');\n // Constructor statements\n if (ctorImpl != null) {\n sb.visit(ctorImpl.getBodyOrThrow(), options);\n }\n },\n }),\n );\n\n // [fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CONSTRUCT,\n }),\n );\n\n /* Create prototype */\n // [fobjectVal, fobjectVal]\n sb.emitOp(decl, 'DUP');\n // ['prototype', fobjectVal, fobjectVal]\n sb.emitPushString(decl, 'prototype');\n // [fobjectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(decl, 'OVER');\n // [objectVal, fobjectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(decl, options, sb.helpers.createObject);\n // [objectVal, fobjectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(decl, 'TUCK');\n // ['constructor', objectVal, fobjectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(decl, 'constructor');\n // [fobjectVal, 'constructor', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(decl, 'ROT');\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(decl, options, sb.helpers.setDataPropertyObjectProperty);\n decl.getInstanceMethods().forEach((method) => {\n if (method.isImplementation()) {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(method, 'DUP');\n // [name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(method, method.getName());\n // [farr, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(method, options, sb.helpers.createCallArray);\n // [methodObjectVal, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n method,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n }\n });\n\n decl\n .getSetAccessors()\n .filter((accessor) => !accessor.isStatic())\n .forEach((accessor) => {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(accessor, 'DUP');\n // [name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(accessor, accessor.getName());\n // [farr, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(accessor, options, sb.helpers.createCallArray);\n // [methodObjectVal, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n const getAccessor = accessor.getGetAccessor();\n const hasGet = getAccessor != null;\n if (getAccessor != null) {\n sb.emitHelper(getAccessor, options, sb.helpers.createCallArray);\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n }\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n accessor,\n options,\n sb.helpers.setAccessorPropertyObjectProperty({\n hasSet: true,\n hasGet,\n }),\n );\n });\n\n decl\n .getGetAccessors()\n .filter(\n (accessor) => !accessor.isStatic() && accessor.getSetAccessor() == null,\n )\n .forEach((accessor) => {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(accessor, 'DUP');\n // [name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(accessor, accessor.getName());\n // [farr, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(accessor, options, sb.helpers.createCallArray);\n // [methodObjectVal, name, objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n accessor,\n options,\n sb.helpers.setAccessorPropertyObjectProperty({\n hasSet: false,\n hasGet: true,\n }),\n );\n });\n\n /* Set superclass prototype */\n if (superClass != null && extendsExpr != null) {\n // [objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitOp(extendsExpr, 'DUP');\n // ['prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(extendsExpr, 'prototype');\n // [superobjectVal, 'prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.scope.get(sb, extendsExpr, options, superClass);\n // ['prototype', superobjectVal, 'prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitPushString(extendsExpr, 'prototype');\n // [superprototype, 'prototype', objectVal, objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(extendsExpr, options, sb.helpers.getPropertyObjectProperty);\n // [objectVal, 'prototype', fobjectVal, fobjectVal]\n sb.emitHelper(\n extendsExpr,\n options,\n sb.helpers.setDataPropertyObjectProperty,\n );\n }\n\n // [fobjectVal]\n sb.emitHelper(decl, options, sb.helpers.setDataPropertyObjectProperty);\n\n if (decl.isNamedExport() || decl.isDefaultExport()) {\n // [fobjectVal, fobjectVal]\n sb.emitOp(decl, 'DUP');\n // [fobjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.exportSingle({\n name: decl.isNamedExport() ? decl.getNameOrThrow() : undefined,\n defaultExport: decl.isDefaultExport(),\n }),\n );\n }\n // []\n sb.scope.set(sb, decl, options, name);\n }\n}\n","import { EnumDeclaration, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class EnumDeclarationCompiler extends NodeCompiler<EnumDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.EnumDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: EnumDeclaration,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(decl);\n }\n}\n","import { EnumMember, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class EnumMemberCompiler extends NodeCompiler<EnumMember> {\n public readonly kind: SyntaxKind = SyntaxKind.EnumMember;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: EnumMember,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(decl);\n }\n}\n","import { SyntaxKind, ExportAssignment } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ExportAssignmentCompiler extends NodeCompiler<ExportAssignment> {\n public readonly kind: SyntaxKind = SyntaxKind.ExportAssignment;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ExportAssignment,\n optionsIn: VisitOptions,\n ): void {\n if (node.isExportEquals()) {\n sb.reportUnsupported(node);\n } else {\n const options = sb.pushValueOptions(optionsIn);\n // [val]\n sb.visit(node.getExpression(), options);\n // []\n sb.emitHelper(\n node,\n options,\n sb.helpers.exportSingle({ defaultExport: true }),\n );\n }\n }\n}\n","import {\n SyntaxKind,\n ExportDeclaration,\n ExportSpecifier,\n TypeGuards,\n} from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ExportDeclarationCompiler extends NodeCompiler<ExportDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.ExportDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ExportDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n const getName = (namedExport: ExportSpecifier) => {\n let name = namedExport.getNameNode().getText();\n const alias = namedExport.getAliasIdentifier();\n if (alias != null) {\n name = alias.getText();\n }\n\n return name;\n };\n\n const moduleSpecifier = node.getModuleSpecifierSourceFile();\n\n // [exports]\n sb.emitHelper(node, options, sb.helpers.getCurrentModule);\n if (moduleSpecifier == null) {\n node\n .getNamedExports()\n .filter((namedExport) =>\n namedExport\n .getLocalTargetDeclarations()\n .some((decl) => !TypeGuards.isTypeAliasDeclaration(decl)),\n )\n .forEach((namedExport) => {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n // [val, exports, exports]\n sb.scope.get(sb, node, options, namedExport.getNameNode().getText());\n // [exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.export({ name: getName(namedExport) }),\n );\n });\n } else {\n // [moduleExports, exports]\n sb.loadModule(moduleSpecifier);\n node\n .getNamedExports()\n .filter((namedExport) =>\n sb.hasExport(moduleSpecifier, namedExport.getNameNode().getText()),\n )\n .forEach((namedExport) => {\n // [exports, moduleExports]\n sb.emitOp(node, 'SWAP');\n // [exports, moduleExports, exports]\n sb.emitOp(node, 'TUCK');\n // [moduleExports, exports, moduleExports, exports]\n sb.emitOp(node, 'OVER');\n // [name, moduleExports, exports, moduleExports, exports]\n sb.emitPushString(node, namedExport.getNameNode().getText());\n // [val, exports, moduleExports, exports]\n sb.emitOp(node, 'PICKITEM');\n // [moduleExports, exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.export({ name: getName(namedExport) }),\n );\n });\n // [exports]\n sb.emitOp(node, 'DROP');\n }\n\n // []\n sb.emitOp(node, 'DROP');\n }\n}\n","import { FunctionDeclaration, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport class FunctionDeclarationCompiler extends NodeCompiler<\n FunctionDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.FunctionDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: FunctionDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n const name = sb.scope.add(decl.getName());\n // [callArray]\n sb.emitHelper(decl, options, sb.helpers.createCallArray);\n // [callObjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n if (decl.isNamedExport() || decl.isDefaultExport()) {\n // [callObjectVal, callObjectVal]\n sb.emitOp(decl, 'DUP');\n // [callObjectVal]\n sb.emitHelper(\n decl,\n options,\n sb.helpers.exportSingle({\n name: decl.isNamedExport() ? decl.getName() : undefined,\n defaultExport: decl.isDefaultExport(),\n }),\n );\n }\n // []\n sb.scope.set(sb, decl, options, name);\n }\n}\n","import { SyntaxKind, ImportDeclaration } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ImportDeclarationCompiler extends NodeCompiler<ImportDeclaration> {\n public readonly kind: SyntaxKind = SyntaxKind.ImportDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ImportDeclaration,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [exports]\n sb.loadModule(node.getModuleSpecifierSourceFileOrThrow());\n\n const namespaceImport = node.getNamespaceImport();\n if (namespaceImport != null) {\n const name = namespaceImport.getText();\n sb.scope.add(name);\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.createPropertyObject);\n\n // []\n sb.scope.set(sb, node, options, name);\n } else {\n const defaultImport = node.getDefaultImport();\n const namedImports = node\n .getNamedImports()\n .filter((namedImport) =>\n sb.hasExport(\n namedImport\n .getImportDeclaration()\n .getModuleSpecifierSourceFileOrThrow(),\n namedImport.getName(),\n ),\n );\n if (defaultImport != null) {\n if (namedImports.length > 0) {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n }\n\n // ['default', exports]\n sb.emitPushString(node, 'default');\n // [val]\n sb.emitOp(node, 'PICKITEM');\n\n const name = defaultImport.getText();\n sb.scope.add(name);\n\n // []\n sb.scope.set(sb, node, options, name);\n }\n\n if (namedImports.length > 0) {\n for (const namedImport of namedImports) {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n // [name, exports, exports]\n sb.emitPushString(node, namedImport.getName());\n // [val, exports]\n sb.emitOp(node, 'PICKITEM');\n\n let name = namedImport.getName();\n const alias = namedImport.getAliasIdentifier();\n if (alias != null) {\n name = alias.getText();\n }\n sb.scope.add(name);\n\n // [exports]\n sb.scope.set(sb, node, options, name);\n }\n\n sb.emitOp(node, 'DROP');\n }\n }\n }\n}\n","import { SyntaxKind, TypeAliasDeclaration } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class TypeAliasDeclarationCompiler extends NodeCompiler<\n TypeAliasDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.TypeAliasDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: TypeAliasDeclaration,\n optionsIn: VisitOptions,\n ): void {\n // do nothing\n }\n}\n","import { SyntaxKind, VariableDeclaration } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class VariableDeclarationCompiler extends NodeCompiler<\n VariableDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.VariableDeclaration;\n\n public visitNode(\n sb: ScriptBuilder,\n node: VariableDeclaration,\n options: VisitOptions,\n ): void {\n const name = sb.scope.add(node.getName());\n const expr = node.getInitializer();\n if (expr != null) {\n sb.visit(expr, sb.pushValueOptions(options));\n sb.scope.set(sb, node, options, name);\n }\n }\n}\n","import { SyntaxKind, VariableDeclarationList } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class VariableDeclarationListCompiler extends NodeCompiler<\n VariableDeclarationList\n> {\n public readonly kind: SyntaxKind = SyntaxKind.VariableDeclarationList;\n\n public visitNode(\n sb: ScriptBuilder,\n node: VariableDeclarationList,\n options: VisitOptions,\n ): void {\n node.getDeclarations().forEach((decl) => {\n sb.visit(decl, options);\n });\n }\n}\n","import { ClassDeclarationCompiler } from './ClassDeclarationCompiler';\nimport { EnumDeclarationCompiler } from './EnumDeclarationCompiler';\nimport { EnumMemberCompiler } from './EnumMemberCompiler';\nimport { ExportAssignmentCompiler } from './ExportAssignmentCompiler';\nimport { ExportDeclarationCompiler } from './ExportDeclarationCompiler';\nimport { FunctionDeclarationCompiler } from './FunctionDeclarationCompiler';\nimport { ImportDeclarationCompiler } from './ImportDeclarationCompiler';\nimport { TypeAliasDeclarationCompiler } from './TypeAliasDeclarationCompiler';\nimport { VariableDeclarationCompiler } from './VariableDeclarationCompiler';\nimport { VariableDeclarationListCompiler } from './VariableDeclarationListCompiler';\n\nexport default [\n ClassDeclarationCompiler,\n EnumDeclarationCompiler,\n EnumMemberCompiler,\n ExportAssignmentCompiler,\n ExportDeclarationCompiler,\n FunctionDeclarationCompiler,\n ImportDeclarationCompiler,\n TypeAliasDeclarationCompiler,\n VariableDeclarationCompiler,\n VariableDeclarationListCompiler,\n];\n","import { Decorator, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DecoratorCompiler extends NodeCompiler<Decorator> {\n public readonly kind: SyntaxKind = SyntaxKind.Decorator;\n\n public visitNode(\n sb: ScriptBuilder,\n decl: Decorator,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(decl);\n }\n}\n","import { DecoratorCompiler } from './DecoratorCompiler';\n\nexport default [DecoratorCompiler];\n","import { ArrayLiteralExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ArrayLiteralExpressionCompiler extends NodeCompiler<\n ArrayLiteralExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ArrayLiteralExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ArrayLiteralExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n\n const elements = [...node.getElements()].reverse();\n for (const element of elements) {\n sb.visit(element, options);\n }\n // [length, ...vals]\n sb.emitPushInt(node, elements.length);\n // [valArr]\n sb.emitOp(node, 'PACK');\n // [arrayObjectVal]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { ArrowFunction, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport default class ArrowFunctionCompiler extends NodeCompiler<ArrowFunction> {\n public readonly kind: SyntaxKind = SyntaxKind.ArrowFunction;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ArrowFunction,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n // [this]\n sb.scope.getThis(sb, expr, options);\n // [callArray, this]\n sb.emitHelper(expr, options, sb.helpers.createCallArray);\n // [callArray]\n sb.emitHelper(\n expr,\n options,\n sb.helpers.bindFunctionThis({ overwrite: true }),\n );\n // [callObjectVal]\n sb.emitHelper(\n expr,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n }\n }\n}\n","import { AsExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as typeUtils from '../../typeUtils';\n\nexport default class AsExpressionCompiler extends NodeCompiler<AsExpression> {\n public readonly kind: SyntaxKind = SyntaxKind.AsExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: AsExpression,\n options: VisitOptions,\n ): void {\n const type = sb.getType(expr);\n if (options.cast != null && typeUtils.isAnyType(type)) {\n sb.visit(expr.getExpression(), options);\n } else {\n sb.visit(expr.getExpression(), sb.castOptions(options, type));\n }\n }\n}\n","import { AwaitExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\n\nexport default class AwaitExpressionCompiler extends NodeCompiler<\n AwaitExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.AwaitExpression;\n\n public visitNode(sb: ScriptBuilder, expr: AwaitExpression): void {\n sb.reportUnsupported(expr);\n }\n}\n","import {\n BinaryExpression,\n Node,\n Expression,\n SyntaxKind,\n ts,\n} from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as typeUtils from '../../typeUtils';\nimport { Helper } from '../helper';\nimport { TypedHelperOptions } from '../helper/common';\n\ntype ExpressionOperatorKind =\n | ts.BitwiseOperatorOrHigher\n | SyntaxKind.CommaToken;\nexport default class BinaryExpressionCompiler extends NodeCompiler<\n BinaryExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.BinaryExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n const kind = expr.getOperatorToken().getKind() as ts.BinaryOperator;\n\n switch (kind) {\n case SyntaxKind.EqualsToken:\n case SyntaxKind.PlusEqualsToken:\n case SyntaxKind.MinusEqualsToken:\n case SyntaxKind.AsteriskAsteriskEqualsToken:\n case SyntaxKind.AsteriskEqualsToken:\n case SyntaxKind.SlashEqualsToken:\n case SyntaxKind.PercentEqualsToken:\n case SyntaxKind.AmpersandEqualsToken:\n case SyntaxKind.BarEqualsToken:\n case SyntaxKind.CaretEqualsToken:\n case SyntaxKind.LessThanLessThanEqualsToken:\n case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:\n case SyntaxKind.GreaterThanGreaterThanEqualsToken:\n this.visitAssignmentOperator(sb, kind, expr, options);\n break;\n case SyntaxKind.AsteriskToken:\n case SyntaxKind.SlashToken:\n case SyntaxKind.PercentToken:\n case SyntaxKind.PlusToken:\n case SyntaxKind.MinusToken:\n case SyntaxKind.GreaterThanGreaterThanToken:\n case SyntaxKind.LessThanLessThanToken:\n case SyntaxKind.LessThanToken:\n case SyntaxKind.LessThanEqualsToken:\n case SyntaxKind.GreaterThanToken:\n case SyntaxKind.GreaterThanEqualsToken:\n case SyntaxKind.ExclamationEqualsToken:\n case SyntaxKind.EqualsEqualsToken:\n case SyntaxKind.AmpersandToken:\n case SyntaxKind.BarToken:\n case SyntaxKind.CaretToken:\n case SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n case SyntaxKind.InKeyword:\n case SyntaxKind.InstanceOfKeyword:\n case SyntaxKind.CommaToken:\n case SyntaxKind.AsteriskAsteriskToken:\n case SyntaxKind.EqualsEqualsEqualsToken:\n case SyntaxKind.ExclamationEqualsEqualsToken:\n this.visitExpressionOperator(sb, kind, expr, options);\n break;\n case SyntaxKind.AmpersandAmpersandToken:\n case SyntaxKind.BarBarToken:\n this.visitLogicalExpressionOperator(sb, kind, expr, options);\n break;\n default:\n sb.assertUnreachable(kind);\n }\n }\n\n private visitAssignmentOperator(\n sb: ScriptBuilder,\n kind: ts.AssignmentOperator,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n const left = expr.getLeft();\n const right = expr.getRight();\n const token = expr.getOperatorToken();\n const pushValueOptions = sb.pushValueOptions(options);\n switch (kind) {\n case SyntaxKind.EqualsToken:\n sb.visit(expr.getRight(), pushValueOptions);\n break;\n case SyntaxKind.PlusEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.PlusToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.MinusEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.MinusToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.AsteriskAsteriskEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.AsteriskAsteriskToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.AsteriskEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.AsteriskToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.SlashEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.SlashToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.PercentEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.PercentToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.AmpersandEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.AmpersandToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.BarEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.BarToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.CaretEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.CaretToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.LessThanLessThanEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.LessThanLessThanToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.GreaterThanGreaterThanGreaterThanToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n case SyntaxKind.GreaterThanGreaterThanEqualsToken:\n this.visitExpressionOperatorBase(\n sb,\n token,\n SyntaxKind.GreaterThanGreaterThanToken,\n left,\n right,\n pushValueOptions,\n );\n break;\n default:\n sb.assertUnreachable(kind);\n }\n\n sb.visit(expr.getLeft(), sb.setValueOptions(options));\n }\n\n private visitExpressionOperator(\n sb: ScriptBuilder,\n kind: ExpressionOperatorKind,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n this.visitExpressionOperatorBase(\n sb,\n expr.getOperatorToken(),\n kind,\n expr.getLeft(),\n expr.getRight(),\n options,\n );\n }\n\n private visitLogicalExpressionOperator(\n sb: ScriptBuilder,\n kind: ts.LogicalOperator,\n expr: BinaryExpression,\n options: VisitOptions,\n ): void {\n this.visitLogicalExpressionOperatorBase(\n sb,\n expr.getOperatorToken(),\n kind,\n expr.getLeft(),\n expr.getRight(),\n options,\n );\n }\n\n private visitExpressionOperatorBase(\n sb: ScriptBuilder,\n node: Node,\n kind: ExpressionOperatorKind,\n left: Expression,\n right: Expression,\n options: VisitOptions,\n ): void {\n if (!options.pushValue) {\n sb.visit(left, options);\n sb.visit(right, options);\n return;\n }\n\n const visit = (\n leftHelper: (options: TypedHelperOptions) => Helper<Node>,\n rightHelper?: (options: TypedHelperOptions) => Helper<Node>,\n ) => {\n sb.visit(left, options);\n sb.emitHelper(left, options, leftHelper({ type: sb.getType(left) }));\n sb.visit(right, options);\n sb.emitHelper(\n right,\n options,\n (rightHelper || leftHelper)({ type: sb.getType(right) }),\n );\n };\n\n const visitNumeric = () => visit(sb.helpers.toNumber);\n\n const leftType = sb.getType(left);\n const rightType = sb.getType(right);\n\n const isBinaryNumeric =\n typeUtils.isOnlyNumber(leftType) && typeUtils.isOnlyNumber(rightType);\n\n switch (kind) {\n case SyntaxKind.AsteriskToken:\n visitNumeric();\n sb.emitOp(node, 'MUL');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.SlashToken:\n visitNumeric();\n sb.emitOp(node, 'DIV');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.PercentToken:\n visitNumeric();\n sb.emitOp(node, 'MOD');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.PlusToken:\n if (isBinaryNumeric) {\n visitNumeric();\n sb.emitOp(node, 'ADD');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n } else if (\n typeUtils.isOnlyString(leftType) &&\n typeUtils.isOnlyString(rightType)\n ) {\n visit(() => sb.helpers.getString);\n sb.emitOp(node, 'CAT');\n sb.emitHelper(node, options, sb.helpers.createString);\n } else if (typeUtils.isOnlyString(leftType)) {\n visit(() => sb.helpers.getString, sb.helpers.toString);\n sb.emitOp(node, 'CAT');\n sb.emitHelper(node, options, sb.helpers.createString);\n } else if (typeUtils.isOnlyString(rightType)) {\n visit(sb.helpers.toString, () => sb.helpers.getString);\n sb.emitOp(node, 'CAT');\n sb.emitHelper(node, options, sb.helpers.createString);\n } else {\n // TODO: Add preferredType\n // [right, left]\n visit(sb.helpers.toPrimitive);\n // [left, right]\n sb.emitOp(node, 'SWAP');\n // [left, right, left]\n sb.emitOp(node, 'TUCK');\n // [right, left, right, left]\n sb.emitOp(node, 'TUCK');\n // [isString, left, right, left]\n sb.emitHelper(node, options, sb.helpers.isString);\n // [left, isString, right, left]\n sb.emitOp(node, 'SWAP');\n // [isString, isString, right, left]\n sb.emitHelper(node, options, sb.helpers.isString);\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [isEitherString, right, left]\n sb.emitOp(node, 'BOOLOR');\n },\n whenTrue: () => {\n // [string0, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: sb.getType(right) }),\n );\n // [left, string0]\n sb.emitOp(node, 'SWAP');\n // [string1, string0]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toString({ type: sb.getType(left) }),\n );\n // [string0, string1]\n sb.emitOp(node, 'SWAP');\n // [string]\n sb.emitOp(node, 'CAT');\n // [string]\n sb.emitHelper(node, options, sb.helpers.createString);\n },\n whenFalse: () => {\n // [number0, left]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(right) }),\n );\n // [left, number0]\n sb.emitOp(node, 'SWAP');\n // [number1, number0]\n sb.emitHelper(\n node,\n options,\n sb.helpers.toNumber({ type: sb.getType(left) }),\n );\n // [number0, number1]\n sb.emitOp(node, 'SWAP');\n // [number]\n sb.emitOp(node, 'ADD');\n // [number]\n sb.emitHelper(node, options, sb.helpers.createNumber);\n },\n }),\n );\n }\n break;\n case SyntaxKind.MinusToken:\n visitNumeric();\n sb.emitOp(node, 'SUB');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n // TODO: Should we try to make these match the js semantics?\n case SyntaxKind.GreaterThanGreaterThanToken:\n visitNumeric();\n sb.emitOp(node, 'SHR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.GreaterThanGreaterThanGreaterThanToken:\n visitNumeric();\n sb.emitOp(node, 'SHR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.LessThanLessThanToken:\n visitNumeric();\n sb.emitOp(node, 'SHL');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.LessThanToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: true, left, right }),\n );\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.LessThanEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: false, left: right, right: left }),\n );\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.GreaterThanToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: false, left: right, right: left }),\n );\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.GreaterThanEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.lessThan({ leftFirst: true, left, right }),\n );\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.ExclamationEqualsToken:\n sb.emitHelper(node, options, sb.helpers.equalsEquals({ left, right }));\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.EqualsEqualsToken:\n sb.emitHelper(node, options, sb.helpers.equalsEquals({ left, right }));\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.AmpersandToken:\n visitNumeric();\n sb.emitOp(node, 'AND');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.BarToken:\n visitNumeric();\n sb.emitOp(node, 'OR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.CaretToken:\n visitNumeric();\n sb.emitOp(node, 'XOR');\n sb.emitHelper(node, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.InKeyword:\n // TODO: Implement me\n sb.reportUnsupported(node);\n break;\n case SyntaxKind.InstanceOfKeyword:\n // TODO: Implement me\n sb.reportUnsupported(node);\n break;\n case SyntaxKind.CommaToken:\n sb.emitOp(node, 'DROP');\n break;\n case SyntaxKind.AsteriskAsteriskToken:\n // TODO: Implement me\n sb.reportUnsupported(node);\n break;\n case SyntaxKind.EqualsEqualsEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.equalsEqualsEquals({ left, right }),\n );\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n case SyntaxKind.ExclamationEqualsEqualsToken:\n sb.emitHelper(\n node,\n options,\n sb.helpers.equalsEqualsEquals({ left, right }),\n );\n sb.emitOp(node, 'NOT');\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n break;\n default:\n sb.assertUnreachable(kind);\n }\n }\n\n private visitLogicalExpressionOperatorBase(\n sb: ScriptBuilder,\n node: Node,\n kind: ts.LogicalOperator,\n left: Expression,\n right: Expression,\n options: VisitOptions,\n ): void {\n switch (kind) {\n case SyntaxKind.AmpersandAmpersandToken: {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [left]\n sb.visit(left, sb.pushValueOptions(options));\n if (options.pushValue) {\n // [left, left]\n sb.emitOp(left, 'DUP');\n }\n // [leftBoolean, ?left]\n sb.emitHelper(\n left,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({ type: sb.getType(left) }),\n );\n },\n whenTrue: () => {\n if (options.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n sb.visit(right, options);\n },\n }),\n );\n break;\n }\n case SyntaxKind.BarBarToken: {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [left]\n sb.visit(left, sb.pushValueOptions(options));\n if (options.pushValue) {\n // [left, left]\n sb.emitOp(left, 'DUP');\n }\n // [leftBoolean, ?left]\n sb.emitHelper(\n left,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({ type: sb.getType(left) }),\n );\n },\n whenFalse: () => {\n if (options.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n sb.visit(right, options);\n },\n }),\n );\n break;\n }\n default:\n sb.assertUnreachable(kind);\n }\n }\n}\n","import { BooleanLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport abstract class BooleanLiteralCompiler extends NodeCompiler<\n BooleanLiteral\n> {\n protected abstract value: boolean;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: BooleanLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitPushBoolean(expr, this.value);\n sb.emitHelper(expr, options, sb.helpers.createBoolean);\n }\n }\n}\n\nexport class TrueBooleanLiteralCompiler extends BooleanLiteralCompiler {\n public readonly kind: SyntaxKind = SyntaxKind.TrueKeyword;\n protected value = true;\n}\n\nexport class FalseBooleanLiteralCompiler extends BooleanLiteralCompiler {\n public readonly kind: SyntaxKind = SyntaxKind.FalseKeyword;\n protected value = false;\n}\n","import { SysCallName } from '@neo-one/client-core';\nimport { ScriptBuilder } from './sb';\nimport { CallExpression, Node, Type, ts } from 'ts-simple-ast';\nimport { VisitOptions } from './types';\n\nimport * as typeUtils from '../typeUtils';\nimport { DiagnosticCode } from '../DiagnosticCode';\nimport { BlockchainInterfaceName } from './helper/blockchain';\nimport { serializeType, SerializableType, deserializeType } from './helper';\n\nexport interface SysCallType {\n name: string;\n\n toSignature(): string;\n handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void;\n handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void;\n}\n\nabstract class SimpleSysCallType implements SysCallType {\n public abstract name: string;\n\n public abstract isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean;\n public abstract isType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean;\n public abstract isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void;\n public abstract handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native?: boolean,\n ): void;\n public abstract handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native?: boolean,\n ): void;\n\n public toSignature(): string {\n return this.name;\n }\n}\n\nclass VoidClass extends SimpleSysCallType {\n public name: string = 'void';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return false;\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return false;\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n throw new Error('Should not check void at runtime');\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void {\n throw new Error('void should not be an argument');\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n }\n}\n\nconst VoidValue = new VoidClass();\n\nclass NumberClass extends SimpleSysCallType {\n public name: string = 'number';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return typeUtils.isOnlyNumber(type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return typeUtils.isNumber(type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.isNumber);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.getNumber);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.createNumber);\n }\n }\n}\n\nconst NumberValue = new NumberClass();\n\nclass StringClass extends SimpleSysCallType {\n public name: string = 'string';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return typeUtils.isOnlyString(type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return typeUtils.isString(type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.isString);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.getString);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.createString);\n }\n }\n}\n\nconst StringValue = new StringClass();\n\nclass BooleanClass extends SimpleSysCallType {\n public name: string = 'boolean';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return typeUtils.isOnlyBoolean(type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return typeUtils.isBoolean(type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(node, options, sb.helpers.isBoolean);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.getBoolean);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (!native) {\n sb.emitHelper(node, options, sb.helpers.createBoolean);\n }\n }\n}\n\nconst BooleanValue = new BooleanClass();\n\nclass BlockchainInterface extends SimpleSysCallType {\n public name: BlockchainInterfaceName;\n\n constructor(name: BlockchainInterfaceName) {\n super();\n this.name = name;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return sb.isOnlyGlobal(node, type, this.name);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return sb.isGlobal(node, type, this.name);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.isBlockchainInterface({ name: this.name }),\n );\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (native) {\n throw new Error(\n 'BlockchainInterface should not be serialized/deserialized from storage',\n );\n }\n sb.emitHelper(node, options, sb.helpers.unwrapBlockchainInterface);\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (native) {\n throw new Error(\n 'BlockchainInterface should not be serialized/deserialized from storage',\n );\n }\n sb.emitHelper(\n node,\n options,\n sb.helpers.wrapBlockchainInterface({ name: this.name }),\n );\n }\n}\n\nconst AccountValue = new BlockchainInterface('AccountBase');\nconst AssetValue = new BlockchainInterface('AssetBase');\nconst AttributeValue = new BlockchainInterface('AttributeBase');\nconst BlockValue = new BlockchainInterface('BlockBase');\nconst ContractValue = new BlockchainInterface('ContractBase');\nconst HeaderValue = new BlockchainInterface('HeaderBase');\nconst InputValue = new BlockchainInterface('InputBase');\nconst OutputValue = new BlockchainInterface('OutputBase');\nconst TransactionValue = new BlockchainInterface('TransactionBase');\nconst ValidatorValue = new BlockchainInterface('ValidatorBase');\nconst StorageContextValue = new BlockchainInterface('StorageContextBase');\nconst StorageIteratorValue = new BlockchainInterface('StorageIteratorBase');\n\nexport const BLOCKCHAIN_INTERFACES = [\n AccountValue,\n AssetValue,\n AttributeValue,\n BlockValue,\n ContractValue,\n HeaderValue,\n InputValue,\n OutputValue,\n TransactionValue,\n ValidatorValue,\n StorageContextValue,\n StorageIteratorValue,\n].map((value) => value.name);\n\nclass BufferClass extends SimpleSysCallType {\n public name: 'Buffer' = 'Buffer';\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return sb.isOnlyGlobal(node, type, this.name);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return sb.isGlobal(node, type, this.name);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: this.name }),\n );\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n sb.emitHelper(node, options, sb.helpers.unwrapBuffer);\n if (native) {\n serializeType(sb, node, options, SerializableType.Buffer);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n if (native) {\n deserializeType(sb, node, options);\n }\n sb.emitHelper(node, options, sb.helpers.wrapBuffer);\n }\n}\n\nconst BufferValue = new BufferClass();\n\nclass ArrayValue extends SimpleSysCallType {\n public readonly name: string;\n private readonly valueType: () => SimpleSysCallType;\n\n constructor(valueType: SimpleSysCallType | (() => SimpleSysCallType)) {\n super();\n this.name = `Array<${valueType.name}>`;\n this.valueType =\n typeof valueType === 'function' ? valueType : () => valueType;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return (\n typeUtils.isOnlyArray(type) &&\n !typeUtils.isOnlyTuple(type) &&\n type != null &&\n this.valueType().isOnlyType(sb, node, type.getArrayType())\n );\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return (\n typeUtils.isArray(type) &&\n !typeUtils.isTuple(type) &&\n type != null &&\n this.valueType().isType(sb, node, type.getArrayType())\n );\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n sb.emitHelper(node, options, sb.helpers.unwrapArray);\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n this.valueType().handleArgument(\n sb,\n node,\n options,\n type == null ? type : type.getArrayType(),\n native,\n );\n },\n }),\n );\n if (native) {\n serializeType(sb, node, options, SerializableType.Array);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type,\n native: boolean = false,\n ): void {\n if (native) {\n deserializeType(sb, node, options);\n }\n sb.emitHelper(\n node,\n options,\n sb.helpers.arrMap({\n map: () => {\n this.valueType().handleResult(\n sb,\n node,\n options,\n type == null ? type : type.getArrayType(),\n native,\n );\n },\n }),\n );\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n }\n}\n\nclass TupleValue extends SimpleSysCallType {\n public readonly name: string;\n private readonly valueType: () => SimpleSysCallType;\n\n constructor(valueType: SimpleSysCallType | (() => SimpleSysCallType)) {\n super();\n this.name = 'any';\n this.valueType =\n typeof valueType === 'function' ? valueType : () => valueType;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return (\n typeUtils.isOnlyTuple(type) &&\n type != null &&\n type\n .getTupleElements()\n .every((tupleType) => this.valueType().isOnlyType(sb, node, tupleType))\n );\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return (\n typeUtils.isTuple(type) &&\n type != null &&\n type\n .getTupleElements()\n .every((tupleType) => this.valueType().isType(sb, node, tupleType))\n );\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: 'Array' }),\n );\n sb.emitHelper(node, options, sb.helpers.instanceof);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n throw new Error('Not Implemented');\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type,\n native: boolean = false,\n ): void {\n if (type == null) {\n sb.reportError(\n node,\n 'Syscall return type must be explicitly casted to expected type.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n } else {\n // [length, ...value]\n sb.emitOp(node, 'UNPACK');\n // [...value]\n sb.emitOp(node, 'DROP');\n // [0, ...value]\n sb.emitPushInt(node, 0);\n // [arr, ...value]\n sb.emitOp(node, 'NEWARRAY');\n for (const tupleType of type.getTupleElements()) {\n // [arr, arr, ...value]\n sb.emitOp(node, 'DUP');\n // [value, arr, arr, ...value]\n sb.emitOp(node, 'ROT');\n // [val, arr, arr, ...value]\n this.valueType().handleResult(sb, node, options, tupleType, native);\n // [arr, ...value]\n sb.emitOp(node, 'APPEND');\n }\n // [arrayObjectValue]\n sb.emitHelper(node, options, sb.helpers.wrapArray);\n }\n }\n}\n\nclass UnionValue extends SimpleSysCallType {\n public readonly name: string;\n private readonly valueTypes: SimpleSysCallType[];\n\n constructor(valueTypes: SimpleSysCallType[]) {\n super();\n this.name = valueTypes.map((valueType) => valueType.name).join(' | ');\n this.valueTypes = valueTypes;\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return (\n (typeUtils.isUnion(type) &&\n type != null &&\n type\n .getUnionTypes()\n .every((unionType) =>\n this.valueTypes.some((valueType) =>\n valueType.isOnlyType(sb, node, unionType),\n ),\n )) ||\n (!typeUtils.isUnion(type) &&\n type != null &&\n this.valueTypes.some((valueType) =>\n valueType.isOnlyType(sb, node, type),\n ))\n );\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return (\n (typeUtils.isUnion(type) &&\n type != null &&\n type\n .getUnionTypes()\n .every((unionType) =>\n this.valueTypes.some((valueType) =>\n valueType.isType(sb, node, unionType),\n ),\n )) ||\n (!typeUtils.isUnion(type) &&\n type != null &&\n this.valueTypes.some((valueType) => valueType.isType(sb, node, type)))\n );\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n throw new Error('Union should not be checked at runtime');\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n const foundType = this.valueTypes.find((valueType) =>\n valueType.isOnlyType(sb, node, type),\n );\n if (foundType == null) {\n if (native) {\n sb.emitHelper(node, options, sb.helpers.genericSerialize);\n } else {\n sb.emitHelper(\n node,\n options,\n sb.helpers.forType({\n types: this.valueTypes.map((valueType) => ({\n isType: (innerType: Type | undefined) =>\n valueType.isType(sb, node, innerType),\n isRuntimeType: (innerOptions: VisitOptions) =>\n valueType.isRuntimeType(sb, node, innerOptions),\n process: (innerOptions: VisitOptions) =>\n valueType.handleArgument(sb, node, innerOptions, type, native),\n })),\n }),\n );\n }\n } else {\n foundType.handleArgument(sb, node, options, type, native);\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n native: boolean = false,\n ): void {\n const foundType = this.valueTypes.find((valueType) =>\n valueType.isOnlyType(sb, node, type),\n );\n if (foundType == null) {\n if (native) {\n sb.emitHelper(node, options, sb.helpers.genericDeserialize);\n } else {\n sb.reportError(\n node,\n 'Syscall return type must be explicitly casted to expected type.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n }\n } else {\n foundType.handleResult(sb, node, options, type, native);\n }\n }\n}\n\nconst StorageKey = new UnionValue([BufferValue, StringValue]);\n\nconst StorageValue = new UnionValue([\n BufferValue,\n NumberValue,\n StringValue,\n BooleanValue,\n]);\n\nexport class TypeAlias {\n constructor(\n private readonly name: string,\n private readonly declaration: string,\n ) {\n this.name = name;\n this.declaration = declaration;\n }\n\n public toSignature(): string {\n return this.name;\n }\n\n public toDeclaration(): string {\n return this.declaration;\n }\n}\n\nconst SerializableValueArrayAlias = new TypeAlias(\n 'SerializableValueArray',\n 'interface SerializableValueArray extends Array<SerializableValue> { }',\n);\nconst SerializableValueObjectAlias = new TypeAlias(\n 'SerializableValueObject',\n `interface SerializableValueObject {\n [key: string]: SerializableValue;\n}`,\n);\nconst SerializableValueAlias = new TypeAlias(\n 'SerializableValue',\n 'type SerializableValue = undefined | number | string | boolean | Buffer | ' +\n `${SerializableValueArrayAlias.toSignature()} | ${SerializableValueObjectAlias.toSignature()}`,\n);\n\nexport const TYPE_ALIASES: TypeAlias[] = [\n SerializableValueArrayAlias,\n SerializableValueObjectAlias,\n SerializableValueAlias,\n];\n\nclass Serializable extends SimpleSysCallType {\n public readonly name: string;\n\n constructor(\n private readonly shouldSerialize: boolean = false,\n private readonly shouldHandleNull: boolean = false,\n ) {\n super();\n this.name = SerializableValueAlias.toSignature();\n }\n\n get type(): SimpleSysCallType {\n return new UnionValue([\n BooleanValue,\n StringValue,\n NumberValue,\n BufferValue,\n new ArrayValue(() => this.type),\n ]);\n }\n\n public toDeclaration(): string {\n return SerializableValueAlias.toDeclaration();\n }\n\n public isOnlyType(\n sb: ScriptBuilder,\n node: Node,\n type?: Type<ts.Type>,\n ): boolean {\n return this.type.isOnlyType(sb, node, type);\n }\n\n public isType(sb: ScriptBuilder, node: Node, type?: Type<ts.Type>): boolean {\n return this.type.isType(sb, node, type);\n }\n\n public isRuntimeType(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n ): void {\n this.type.isRuntimeType(sb, node, options);\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void {\n this.type.handleArgument(sb, node, options, type, true);\n\n if (this.shouldSerialize) {\n sb.emitSysCall(node, 'Neo.Runtime.Serialize');\n }\n }\n\n public handleResult(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n typeIn?: Type<ts.Type>,\n ): void {\n let type = typeIn;\n if (\n type != null &&\n this.shouldHandleNull &&\n type.isUnionType() &&\n type\n .getUnionTypes()\n .some((unionType) => typeUtils.isOnlyUndefined(unionType))\n ) {\n type = type\n .getUnionTypes()\n .find((unionType) => !typeUtils.isOnlyUndefined(unionType));\n }\n\n const handleValue = () => {\n if (this.shouldSerialize) {\n sb.emitSysCall(node, 'Neo.Runtime.Deserialize');\n }\n\n this.type.handleResult(sb, node, options, type, true);\n };\n\n if (this.shouldHandleNull) {\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition: () => {\n // [value, value]\n sb.emitOp(node, 'DUP');\n // [length, value]\n sb.emitOp(node, 'SIZE');\n // [0, length, value]\n sb.emitPushInt(node, 0);\n // [length === 0, value]\n sb.emitOp(node, 'NUMEQUAL');\n },\n whenTrue: () => {\n // []\n sb.emitOp(node, 'DROP');\n // [val]\n sb.emitHelper(node, options, sb.helpers.createUndefined);\n },\n whenFalse: () => {\n handleValue();\n },\n }),\n );\n } else {\n handleValue();\n }\n }\n\n public addSerialize(): Serializable {\n return new Serializable(true, this.shouldHandleNull);\n }\n\n public handleNull(): Serializable {\n return new Serializable(this.shouldSerialize, true);\n }\n}\n\nconst SerializableValue = new Serializable();\n\nexport class SysCallArgument {\n private readonly name: string;\n private readonly type: SysCallType;\n\n constructor(name: string, type: SysCallType) {\n this.name = name;\n this.type = type;\n }\n\n public handleArgument(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n type?: Type<ts.Type>,\n ): void {\n this.type.handleArgument(sb, node, options, type);\n }\n\n public toSignature(): string {\n return `${this.name}: ${this.type.toSignature()}`;\n }\n}\n\nexport interface SysCall {\n name: string;\n toDeclaration(): string;\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n options: VisitOptions,\n ): void;\n}\n\nexport interface SimpleSysCallOptions {\n name: SysCallName;\n args?: SysCallArgument[];\n returnType?: SysCallType;\n}\n\nexport class SimpleSysCall implements SysCall {\n public readonly name: SysCallName;\n private readonly args: SysCallArgument[];\n private readonly returnType: SysCallType;\n\n constructor(options: SimpleSysCallOptions) {\n this.name = options.name;\n this.args = options.args || [];\n this.returnType = options.returnType || VoidValue;\n }\n\n public toDeclaration(): string {\n const args = [`name: '${this.name}'`].concat(\n this.args.map((arg) => arg.toSignature()),\n );\n return `function syscall(${args.join(\n ', ',\n )}): ${this.returnType.toSignature()};`;\n }\n\n public handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const args = [...node.getArguments().slice(1)].reverse();\n for (const [idx, arg] of args.entries()) {\n sb.visit(arg, options);\n this.args[args.length - idx - 1].handleArgument(\n sb,\n arg,\n options,\n sb.getType(arg),\n );\n }\n\n sb.emitSysCall(node, this.name);\n\n if (optionsIn.pushValue) {\n this.returnType.handleResult(sb, node, options, optionsIn.cast);\n } else if (this.returnType !== VoidValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n\nexport const SYSCALLS = {\n 'Neo.Runtime.GetTrigger': new SimpleSysCall({\n name: 'Neo.Runtime.GetTrigger',\n returnType: NumberValue,\n }),\n 'Neo.Runtime.CheckWitness': new SimpleSysCall({\n name: 'Neo.Runtime.CheckWitness',\n args: [new SysCallArgument('witness', BufferValue)],\n returnType: BooleanValue,\n }),\n 'Neo.Runtime.Notify': (() => {\n const name = 'Neo.Runtime.Notify';\n const valueType = new UnionValue([\n BufferValue,\n NumberValue,\n StringValue,\n BooleanValue,\n ]);\n const arrayType = new ArrayValue(valueType);\n const returnType = VoidValue;\n return {\n name,\n toDeclaration(): string {\n const sig = arrayType.toSignature();\n return `function syscall(name: '${name}', ...args: ${sig}): ${returnType.toSignature()};`;\n },\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const args = [...node.getArguments().slice(1)].reverse();\n for (const arg of args) {\n sb.visit(arg, options);\n valueType.handleArgument(sb, arg, options, sb.getType(arg));\n }\n\n // [length, ...]\n sb.emitPushInt(node, args.length);\n // [arr]\n sb.emitOp(node, 'PACK');\n\n sb.emitSysCall(node, name);\n\n if (optionsIn.pushValue) {\n returnType.handleResult(sb, node, options, optionsIn.cast);\n }\n },\n };\n })(),\n 'Neo.Runtime.Log': new SimpleSysCall({\n name: 'Neo.Runtime.Log',\n args: [new SysCallArgument('value', StringValue)],\n }),\n 'Neo.Runtime.GetTime': new SimpleSysCall({\n name: 'Neo.Runtime.GetTime',\n returnType: NumberValue,\n }),\n 'Neo.Runtime.Serialize': new SimpleSysCall({\n name: 'Neo.Runtime.Serialize',\n args: [new SysCallArgument('value', SerializableValue)],\n returnType: BufferValue,\n }),\n 'Neo.Runtime.Deserialize': new SimpleSysCall({\n name: 'Neo.Runtime.Deserialize',\n args: [new SysCallArgument('value', BufferValue)],\n returnType: SerializableValue,\n }),\n 'Neo.Blockchain.GetHeight': new SimpleSysCall({\n name: 'Neo.Blockchain.GetHeight',\n returnType: NumberValue,\n }),\n 'Neo.Blockchain.GetHeader': new SimpleSysCall({\n name: 'Neo.Blockchain.GetHeader',\n args: [\n new SysCallArgument(\n 'hashOrIndex',\n new UnionValue([BufferValue, NumberValue]),\n ),\n ],\n returnType: HeaderValue,\n }),\n 'Neo.Blockchain.GetBlock': new SimpleSysCall({\n name: 'Neo.Blockchain.GetBlock',\n args: [\n new SysCallArgument(\n 'hashOrIndex',\n new UnionValue([BufferValue, NumberValue]),\n ),\n ],\n returnType: BlockValue,\n }),\n 'Neo.Blockchain.GetTransaction': new SimpleSysCall({\n name: 'Neo.Blockchain.GetTransaction',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: TransactionValue,\n }),\n 'Neo.Blockchain.GetAccount': new SimpleSysCall({\n name: 'Neo.Blockchain.GetAccount',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: AccountValue,\n }),\n 'Neo.Blockchain.GetValidators': new SimpleSysCall({\n name: 'Neo.Blockchain.GetValidators',\n returnType: new ArrayValue(BufferValue),\n }),\n 'Neo.Blockchain.GetAsset': new SimpleSysCall({\n name: 'Neo.Blockchain.GetAsset',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: AssetValue,\n }),\n 'Neo.Blockchain.GetContract': new SimpleSysCall({\n name: 'Neo.Blockchain.GetContract',\n args: [new SysCallArgument('hash', BufferValue)],\n returnType: ContractValue,\n }),\n 'Neo.Header.GetHash': new SimpleSysCall({\n name: 'Neo.Header.GetHash',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Header.GetVersion': new SimpleSysCall({\n name: 'Neo.Header.GetVersion',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetPrevHash': new SimpleSysCall({\n name: 'Neo.Header.GetPrevHash',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Header.GetIndex': new SimpleSysCall({\n name: 'Neo.Header.GetIndex',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetMerkleRoot': new SimpleSysCall({\n name: 'Neo.Header.GetMerkleRoot',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Header.GetTimestamp': new SimpleSysCall({\n name: 'Neo.Header.GetTimestamp',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetConsensusData': new SimpleSysCall({\n name: 'Neo.Header.GetConsensusData',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Header.GetNextConsensus': new SimpleSysCall({\n name: 'Neo.Header.GetNextConsensus',\n args: [\n new SysCallArgument(\n 'blockOrHeader',\n new UnionValue([BlockValue, HeaderValue]),\n ),\n ],\n returnType: BufferValue,\n }),\n 'Neo.Block.GetTransactionCount': new SimpleSysCall({\n name: 'Neo.Block.GetTransactionCount',\n args: [new SysCallArgument('block', BlockValue)],\n returnType: NumberValue,\n }),\n 'Neo.Block.GetTransactions': new SimpleSysCall({\n name: 'Neo.Block.GetTransactions',\n args: [new SysCallArgument('block', BlockValue)],\n returnType: new ArrayValue(TransactionValue),\n }),\n 'Neo.Block.GetTransaction': new SimpleSysCall({\n name: 'Neo.Block.GetTransaction',\n args: [\n new SysCallArgument('block', BlockValue),\n new SysCallArgument('index', NumberValue),\n ],\n returnType: TransactionValue,\n }),\n 'Neo.Transaction.GetHash': new SimpleSysCall({\n name: 'Neo.Transaction.GetHash',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: BufferValue,\n }),\n 'Neo.Transaction.GetType': new SimpleSysCall({\n name: 'Neo.Transaction.GetType',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: NumberValue,\n }),\n 'Neo.Transaction.GetAttributes': new SimpleSysCall({\n name: 'Neo.Transaction.GetAttributes',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(AttributeValue),\n }),\n 'Neo.Transaction.GetInputs': new SimpleSysCall({\n name: 'Neo.Transaction.GetInputs',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(InputValue),\n }),\n 'Neo.Transaction.GetOutputs': new SimpleSysCall({\n name: 'Neo.Transaction.GetOutputs',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(OutputValue),\n }),\n 'Neo.Transaction.GetReferences': new SimpleSysCall({\n name: 'Neo.Transaction.GetReferences',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(OutputValue),\n }),\n 'Neo.Transaction.GetUnspentCoins': new SimpleSysCall({\n name: 'Neo.Transaction.GetUnspentCoins',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: new ArrayValue(OutputValue),\n }),\n 'Neo.InvocationTransaction.GetScript': new SimpleSysCall({\n name: 'Neo.InvocationTransaction.GetScript',\n args: [new SysCallArgument('transaction', TransactionValue)],\n returnType: BufferValue,\n }),\n 'Neo.Attribute.GetUsage': new SimpleSysCall({\n name: 'Neo.Attribute.GetUsage',\n args: [new SysCallArgument('attribute', AttributeValue)],\n returnType: NumberValue,\n }),\n 'Neo.Attribute.GetData': new SimpleSysCall({\n name: 'Neo.Attribute.GetData',\n args: [new SysCallArgument('attribute', AttributeValue)],\n returnType: BufferValue,\n }),\n 'Neo.Input.GetHash': new SimpleSysCall({\n name: 'Neo.Input.GetHash',\n args: [new SysCallArgument('input', InputValue)],\n returnType: BufferValue,\n }),\n 'Neo.Input.GetIndex': new SimpleSysCall({\n name: 'Neo.Input.GetIndex',\n args: [new SysCallArgument('input', InputValue)],\n returnType: NumberValue,\n }),\n 'Neo.Output.GetAssetId': new SimpleSysCall({\n name: 'Neo.Output.GetAssetId',\n args: [new SysCallArgument('output', OutputValue)],\n returnType: BufferValue,\n }),\n 'Neo.Output.GetValue': new SimpleSysCall({\n name: 'Neo.Output.GetValue',\n args: [new SysCallArgument('output', OutputValue)],\n returnType: NumberValue,\n }),\n 'Neo.Output.GetScriptHash': new SimpleSysCall({\n name: 'Neo.Output.GetScriptHash',\n args: [new SysCallArgument('output', OutputValue)],\n returnType: BufferValue,\n }),\n 'Neo.Account.GetScriptHash': new SimpleSysCall({\n name: 'Neo.Account.GetScriptHash',\n args: [new SysCallArgument('account', AccountValue)],\n returnType: BufferValue,\n }),\n 'Neo.Account.GetVotes': new SimpleSysCall({\n name: 'Neo.Account.GetVotes',\n args: [new SysCallArgument('account', AccountValue)],\n returnType: new ArrayValue(BufferValue),\n }),\n 'Neo.Account.GetBalance': new SimpleSysCall({\n name: 'Neo.Account.GetBalance',\n args: [\n new SysCallArgument('account', AccountValue),\n new SysCallArgument('assetHash', BufferValue),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetAssetId': new SimpleSysCall({\n name: 'Neo.Asset.GetAssetId',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Asset.GetAssetType': new SimpleSysCall({\n name: 'Neo.Asset.GetAssetType',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetAmount': new SimpleSysCall({\n name: 'Neo.Asset.GetAmount',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetAvailable': new SimpleSysCall({\n name: 'Neo.Asset.GetAvailable',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetPrecision': new SimpleSysCall({\n name: 'Neo.Asset.GetPrecision',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: NumberValue,\n }),\n 'Neo.Asset.GetOwner': new SimpleSysCall({\n name: 'Neo.Asset.GetOwner',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Asset.GetAdmin': new SimpleSysCall({\n name: 'Neo.Asset.GetAdmin',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Asset.GetIssuer': new SimpleSysCall({\n name: 'Neo.Asset.GetIssuer',\n args: [new SysCallArgument('asset', AssetValue)],\n returnType: BufferValue,\n }),\n 'Neo.Contract.GetScript': new SimpleSysCall({\n name: 'Neo.Contract.GetScript',\n args: [new SysCallArgument('contract', ContractValue)],\n returnType: BufferValue,\n }),\n 'Neo.Storage.GetContext': new SimpleSysCall({\n name: 'Neo.Storage.GetContext',\n returnType: StorageContextValue,\n }),\n 'Neo.Storage.Get': new SimpleSysCall({\n name: 'Neo.Storage.Get',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('key', StorageKey),\n ],\n returnType: SerializableValue.addSerialize().handleNull(),\n }),\n 'Neo.Storage.Find': new SimpleSysCall({\n name: 'Neo.Storage.Find',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('prefix', StorageKey),\n ],\n returnType: StorageIteratorValue,\n }),\n 'Neo.Iterator.Next': new SimpleSysCall({\n name: 'Neo.Iterator.Next',\n args: [new SysCallArgument('iterator', StorageIteratorValue)],\n returnType: BooleanValue,\n }),\n 'Neo.Iterator.Key': new SimpleSysCall({\n name: 'Neo.Iterator.Key',\n args: [new SysCallArgument('iterator', StorageIteratorValue)],\n returnType: StorageKey,\n }),\n 'Neo.Iterator.Value': new SimpleSysCall({\n name: 'Neo.Iterator.Value',\n args: [new SysCallArgument('iterator', StorageIteratorValue)],\n returnType: StorageValue,\n }),\n 'Neo.Account.SetVotes': new SimpleSysCall({\n name: 'Neo.Account.SetVotes',\n args: [\n new SysCallArgument('account', AccountValue),\n new SysCallArgument('votes', new ArrayValue(BufferValue)),\n ],\n }),\n 'Neo.Validator.Register': new SimpleSysCall({\n name: 'Neo.Validator.Register',\n args: [new SysCallArgument('publicKey', BufferValue)],\n returnType: ValidatorValue,\n }),\n 'Neo.Asset.Create': new SimpleSysCall({\n name: 'Neo.Asset.Create',\n args: [\n new SysCallArgument('assetType', NumberValue),\n new SysCallArgument('assetName', StringValue),\n new SysCallArgument('amount', NumberValue),\n new SysCallArgument('precision', NumberValue),\n new SysCallArgument('owner', BufferValue),\n new SysCallArgument('admin', BufferValue),\n new SysCallArgument('issuer', BufferValue),\n ],\n returnType: AssetValue,\n }),\n 'Neo.Asset.Renew': new SimpleSysCall({\n name: 'Neo.Asset.Renew',\n args: [\n new SysCallArgument('asset', AssetValue),\n new SysCallArgument('years', NumberValue),\n ],\n returnType: NumberValue,\n }),\n 'Neo.Contract.Create': new SimpleSysCall({\n name: 'Neo.Contract.Create',\n args: [\n new SysCallArgument('script', BufferValue),\n new SysCallArgument('parameterList', BufferValue),\n new SysCallArgument('returnType', NumberValue),\n new SysCallArgument('properties', NumberValue),\n new SysCallArgument('contractName', StringValue),\n new SysCallArgument('codeVersion', StringValue),\n new SysCallArgument('author', StringValue),\n new SysCallArgument('email', StringValue),\n new SysCallArgument('description', StringValue),\n ],\n returnType: ContractValue,\n }),\n 'Neo.Contract.Migrate': new SimpleSysCall({\n name: 'Neo.Contract.Migrate',\n args: [\n new SysCallArgument('script', BufferValue),\n new SysCallArgument('parameterList', BufferValue),\n new SysCallArgument('returnType', NumberValue),\n new SysCallArgument('properties', NumberValue),\n new SysCallArgument('contractName', StringValue),\n new SysCallArgument('codeVersion', StringValue),\n new SysCallArgument('author', StringValue),\n new SysCallArgument('email', StringValue),\n new SysCallArgument('description', StringValue),\n ],\n returnType: ContractValue,\n }),\n 'Neo.Contract.GetStorageContext': new SimpleSysCall({\n name: 'Neo.Contract.GetStorageContext',\n args: [new SysCallArgument('contract', ContractValue)],\n returnType: StorageContextValue,\n }),\n 'Neo.Contract.Destroy': new SimpleSysCall({\n name: 'Neo.Contract.Destroy',\n }),\n 'Neo.Storage.Put': new SimpleSysCall({\n name: 'Neo.Storage.Put',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('key', StorageKey),\n new SysCallArgument('value', SerializableValue.addSerialize()),\n ],\n }),\n 'Neo.Storage.Delete': new SimpleSysCall({\n name: 'Neo.Storage.Delete',\n args: [\n new SysCallArgument('context', StorageContextValue),\n new SysCallArgument('key', StorageKey),\n ],\n }),\n 'System.ExecutionEngine.GetScriptContainer': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetScriptContainer',\n returnType: TransactionValue,\n }),\n 'System.ExecutionEngine.GetExecutingScriptHash': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetExecutingScriptHash',\n returnType: BufferValue,\n }),\n 'System.ExecutionEngine.GetCallingScriptHash': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetCallingScriptHash',\n returnType: BufferValue,\n }),\n 'System.ExecutionEngine.GetEntryScriptHash': new SimpleSysCall({\n name: 'System.ExecutionEngine.GetEntryScriptHash',\n returnType: BufferValue,\n }),\n 'Neo.Runtime.Return': (() => {\n const name = 'Neo.Runtime.Return';\n const valueType = new UnionValue([\n BufferValue,\n NumberValue,\n StringValue,\n BooleanValue,\n ]);\n const returnType = VoidValue;\n return {\n name,\n toDeclaration(): string {\n const sig = valueType.toSignature();\n return `function syscall(name: '${name}', value: ${sig}): ${returnType.toSignature()};`;\n },\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const arg = node.getArguments()[1];\n sb.visit(arg, options);\n valueType.handleArgument(sb, arg, options, sb.getType(arg));\n },\n };\n })(),\n 'Neo.Runtime.GetArgument': (() => {\n const name = 'Neo.Runtime.GetArgument';\n const valueType = NumberValue;\n const returnType: UnionValue = new UnionValue([\n BufferValue,\n BooleanValue,\n NumberValue,\n StringValue,\n new ArrayValue(() => returnType),\n new TupleValue(() => returnType),\n ]);\n return {\n name,\n toDeclaration(): string {\n const sig = valueType.toSignature();\n return `function syscall(name: '${name}', idx: ${sig}): any;`;\n },\n handleCall(\n sb: ScriptBuilder,\n node: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n const arg = node.getArguments()[1];\n sb.visit(arg, options);\n sb.emitHelper(\n arg,\n options,\n sb.helpers.getArgument({ type: sb.getType(arg) }),\n );\n if (optionsIn.pushValue) {\n returnType.handleResult(sb, node, optionsIn, optionsIn.cast);\n } else {\n sb.emitOp(node, 'DROP');\n }\n },\n };\n })(),\n};\n","import { CallExpression, SyntaxKind, TypeGuards } from 'ts-simple-ast';\n\nimport { SYSCALLS } from '../syscalls';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { DiagnosticCode } from '../../DiagnosticCode';\n\nexport default class CallExpressionCompiler extends NodeCompiler<\n CallExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.CallExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: CallExpression,\n optionsIn: VisitOptions,\n ): void {\n const func = expr.getExpression();\n if (\n TypeGuards.isIdentifier(func) &&\n sb.isGlobalSymbol(func, sb.getSymbol(func), 'syscall')\n ) {\n this.handleSysCall(sb, expr, optionsIn);\n return;\n }\n\n const options = sb.pushValueOptions(sb.noCastOptions(optionsIn));\n // [argsarr]\n sb.emitHelper(expr, options, sb.helpers.args);\n\n if (TypeGuards.isSuperExpression(func)) {\n this.handleSuperConstruct(sb, expr, options);\n return;\n }\n\n let bindThis;\n if (\n TypeGuards.isElementAccessExpression(func) ||\n TypeGuards.isPropertyAccessExpression(func)\n ) {\n bindThis = true;\n\n const lhs = func.getExpression();\n if (TypeGuards.isSuperExpression(lhs)) {\n // [thisValue, argsarr]\n sb.scope.getThis(sb, lhs, options);\n // [superPrototype, thisValue, argsarr]\n sb.visit(lhs, options);\n } else {\n // [expr, argsarr]\n sb.visit(lhs, options);\n // [expr, expr, argsarr]\n sb.emitOp(func, 'DUP');\n }\n\n if (TypeGuards.isElementAccessExpression(func)) {\n // [objectVal, expr, argsarr]\n sb.emitHelper(func, options, sb.helpers.elementAccess);\n } else {\n // [name, expr, expr, argsarr]\n sb.emitPushString(func.getNameNode(), func.getName());\n // [objectVal, expr, argsarr]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n }\n } else {\n bindThis = false;\n // [objectVal, argsarr]\n sb.visit(func, options);\n }\n\n sb.emitHelper(expr, options, sb.helpers.invokeCall({ bindThis }));\n\n if (!optionsIn.pushValue) {\n sb.emitOp(expr, 'DROP');\n }\n }\n\n private handleSysCall(\n sb: ScriptBuilder,\n node: CallExpression,\n options: VisitOptions,\n ): void {\n const sysCallName = node.getArguments()[0];\n\n const reportError = () => {\n sb.reportError(\n node,\n 'First argument to syscall must be a string literal corresponding to a NEO syscall.',\n DiagnosticCode.INVALID_SYS_CALL,\n );\n };\n if (sysCallName == null || !TypeGuards.isStringLiteral(sysCallName)) {\n reportError();\n return;\n }\n\n const sysCallKey = sysCallName.getLiteralValue() as keyof typeof SYSCALLS;\n const sysCall = SYSCALLS[sysCallKey];\n if (sysCall == null) {\n reportError();\n } else {\n sysCall.handleCall(sb, node, options);\n }\n }\n\n private handleSuperConstruct(\n sb: ScriptBuilder,\n node: CallExpression,\n options: VisitOptions,\n ): void {\n const superClass = options.superClass;\n if (superClass == null) {\n throw new Error(\n 'Something went wrong, expected super class to be defined.',\n );\n }\n // [thisValue, argsarr]\n sb.scope.getThis(sb, node, options);\n // [ctor, thisValue, argsarr]\n sb.scope.get(sb, node, options, superClass);\n // []\n sb.emitHelper(node, options, sb.helpers.invokeConstruct());\n }\n}\n","import { CommaListExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class CommaListExpressionCompiler extends NodeCompiler<\n CommaListExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.CommaListExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: CommaListExpression,\n options: VisitOptions,\n ): void {\n // TODO: What is this??\n sb.reportUnsupported(expr);\n }\n}\n","import { ConditionalExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ConditionalExpressionCompiler extends NodeCompiler<\n ConditionalExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ConditionalExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ConditionalExpression,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n expr,\n options,\n sb.helpers.if({\n condition: () => {\n // [val]\n sb.visit(expr.getCondition(), sb.pushValueOptions(options));\n // [boolean]\n sb.emitHelper(\n expr.getCondition(),\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({\n type: sb.getType(expr.getCondition()),\n }),\n );\n },\n whenTrue: () => {\n sb.visit(expr.getWhenTrue(), options);\n },\n whenFalse: () => {\n sb.visit(expr.getWhenFalse(), options);\n },\n }),\n );\n }\n}\n","import { DeleteExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class DeleteExpressionCompiler extends NodeCompiler<\n DeleteExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.DeleteExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: DeleteExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ElementAccessExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ElementAccessExpressionCompiler extends NodeCompiler<\n ElementAccessExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ElementAccessExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ElementAccessExpression,\n options: VisitOptions,\n ): void {\n const value = expr.getExpression();\n\n // [val]\n sb.visit(value, sb.pushValueOptions(sb.noSetValueOptions(options)));\n // [val]\n sb.emitHelper(expr, options, sb.helpers.elementAccess);\n }\n}\n","import { FunctionExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class FunctionExpressionCompiler extends NodeCompiler<\n FunctionExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.FunctionExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: FunctionExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { Identifier, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class IdentifierCompiler extends NodeCompiler<Identifier> {\n public readonly kind: SyntaxKind = SyntaxKind.Identifier;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: Identifier,\n options: VisitOptions,\n ): void {\n if (options.setValue) {\n sb.scope.set(sb, expr, sb.noSetValueOptions(options), expr.getText());\n }\n\n if (options.pushValue) {\n if (\n expr.compilerNode.originalKeywordKind != null &&\n expr.compilerNode.originalKeywordKind === SyntaxKind.UndefinedKeyword\n ) {\n sb.emitHelper(expr, options, sb.helpers.createUndefined);\n } else {\n sb.scope.get(sb, expr, options, expr.getText());\n }\n }\n }\n}\n","import { ImportExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ImportExpressionCompiler extends NodeCompiler<\n ImportExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ImportKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ImportExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { MetaProperty, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class MetaPropertyCompiler extends NodeCompiler<MetaProperty> {\n public readonly kind: SyntaxKind = SyntaxKind.MetaProperty;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: MetaProperty,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { NewExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NewExpressionCompiler extends NodeCompiler<NewExpression> {\n public readonly kind: SyntaxKind = SyntaxKind.NewExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NewExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [argsarr]\n sb.emitHelper(expr, options, sb.helpers.args);\n // [objectVal, argsarr]\n sb.visit(expr.getExpression(), options);\n // [thisVal]\n sb.emitHelper(expr, options, sb.helpers.new());\n }\n}\n","import { NonNullExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NonNullExpressionCompiler extends NodeCompiler<\n NonNullExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NonNullExpression;\n public visitNode(\n sb: ScriptBuilder,\n expr: NonNullExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { NoSubstitutionTemplateLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NoSubstitutionTemplateLiteralCompiler extends NodeCompiler<\n NoSubstitutionTemplateLiteral\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NoSubstitutionTemplateLiteral;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NoSubstitutionTemplateLiteral,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { NullLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NullLiteralCompiler extends NodeCompiler<NullLiteral> {\n public readonly kind: SyntaxKind = SyntaxKind.NullKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NullLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitHelper(expr, options, sb.helpers.createNull);\n }\n }\n}\n","import { NumericLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class NumericLiteralCompiler extends NodeCompiler<\n NumericLiteral\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NumericLiteral;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: NumericLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitPushInt(expr, expr.getLiteralValue());\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n }\n }\n}\n","import { ObjectLiteralExpression, SyntaxKind, TypeGuards } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\nimport { InternalFunctionProperties } from '../helper';\n\nexport default class ObjectLiteralExpressionCompiler extends NodeCompiler<\n ObjectLiteralExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ObjectLiteralExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ObjectLiteralExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n // [objectVal]\n sb.emitHelper(node, options, sb.helpers.createObject);\n node.getProperties().forEach((prop) => {\n // [objectVal, objectVal]\n sb.emitOp(node, 'DUP');\n if (\n TypeGuards.isPropertyAssignment(prop) ||\n TypeGuards.isShorthandPropertyAssignment(prop) ||\n TypeGuards.isMethodDeclaration(prop)\n ) {\n // [propString, objectVal, objectVal]\n sb.emitPushString(prop, prop.getName());\n if (TypeGuards.isPropertyAssignment(prop)) {\n // [val, propString, objectVal, objectVal]\n sb.visit(prop.getInitializerOrThrow(), options);\n } else if (TypeGuards.isShorthandPropertyAssignment(prop)) {\n // [val, propString, objectVal, objectVal]\n sb.visit(prop.getNameNode(), options);\n } else if (TypeGuards.isMethodDeclaration(prop)) {\n // [callArr, propString, objectVal, objectVal]\n sb.emitHelper(prop, options, sb.helpers.createCallArray);\n // [callObj, propString, objectVal, objectVal]\n sb.emitHelper(\n prop,\n options,\n sb.helpers.createFunctionObject({\n property: InternalFunctionProperties.CALL,\n }),\n );\n } else {\n // TODO: Support get/set accessors\n sb.reportUnsupported(prop);\n }\n // [objectVal]\n sb.emitHelper(prop, options, sb.helpers.setDataPropertyObjectProperty);\n } else {\n sb.reportUnsupported(prop);\n }\n });\n\n if (!optionsIn.pushValue) {\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { OmittedExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class OmittedExpressionCompiler extends NodeCompiler<\n OmittedExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.OmittedExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: OmittedExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ParenthesizedExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ParenthesizedExpressionCompiler extends NodeCompiler<\n ParenthesizedExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ParenthesizedExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ParenthesizedExpression,\n options: VisitOptions,\n ): void {\n sb.visit(expr.getExpression(), options);\n }\n}\n","import { PartiallyEmittedExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class PartiallyEmittedExpressionCompiler extends NodeCompiler<\n PartiallyEmittedExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PartiallyEmittedExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PartiallyEmittedExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { PostfixUnaryExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\ntype AssignmentLike = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken;\nexport default class PostfixUnaryExpressionCompiler extends NodeCompiler<\n PostfixUnaryExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PostfixUnaryExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PostfixUnaryExpression,\n options: VisitOptions,\n ): void {\n sb.visit(\n expr.getOperand(),\n sb.noSetValueOptions(sb.pushValueOptions(options)),\n );\n const token = expr.getOperatorToken();\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n case SyntaxKind.MinusMinusToken:\n this.visitAssignment(sb, token, expr, options);\n break;\n default:\n sb.assertUnreachable(token);\n }\n }\n\n private visitAssignment(\n sb: ScriptBuilder,\n token: AssignmentLike,\n expr: PostfixUnaryExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitOp(expr, 'DUP');\n }\n\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({\n type: sb.getType(expr),\n }),\n );\n sb.emitOp(expr, 'INC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n case SyntaxKind.MinusMinusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({\n type: sb.getType(expr),\n }),\n );\n sb.emitOp(expr, 'DEC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n default:\n sb.assertUnreachable(token);\n }\n\n sb.visit(\n expr.getOperand(),\n sb.noPushValueOptions(sb.setValueOptions(options)),\n );\n }\n}\n","import { PrefixUnaryExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\ntype AssignmentLike = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken;\ntype ValueLike =\n | SyntaxKind.PlusToken\n | SyntaxKind.MinusToken\n | SyntaxKind.TildeToken\n | SyntaxKind.ExclamationToken;\nexport default class PrefixUnaryExpressionCompiler extends NodeCompiler<\n PrefixUnaryExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PrefixUnaryExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PrefixUnaryExpression,\n options: VisitOptions,\n ): void {\n const token = expr.getOperatorToken();\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n case SyntaxKind.MinusMinusToken:\n this.visitAssignment(sb, token, expr, options);\n break;\n case SyntaxKind.PlusToken:\n case SyntaxKind.MinusToken:\n case SyntaxKind.TildeToken:\n case SyntaxKind.ExclamationToken:\n this.visitValue(sb, token, expr, options);\n break;\n default:\n sb.assertUnreachable(token);\n }\n }\n\n private visitAssignment(\n sb: ScriptBuilder,\n token: AssignmentLike,\n expr: PrefixUnaryExpression,\n options: VisitOptions,\n ): void {\n sb.visit(\n expr.getOperand(),\n sb.noSetValueOptions(sb.pushValueOptions(options)),\n );\n\n switch (token) {\n case SyntaxKind.PlusPlusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'INC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n case SyntaxKind.MinusMinusToken:\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'DEC');\n sb.emitHelper(\n expr,\n sb.pushValueOptions(options),\n sb.helpers.createNumber,\n );\n break;\n default:\n sb.assertUnreachable(token);\n }\n\n sb.visit(expr.getOperand(), sb.setValueOptions(options));\n }\n\n private visitValue(\n sb: ScriptBuilder,\n token: ValueLike,\n expr: PrefixUnaryExpression,\n options: VisitOptions,\n ): void {\n const operand = expr.getOperand();\n sb.visit(operand, sb.noSetValueOptions(sb.pushValueOptions(options)));\n if (!options.pushValue) {\n sb.emitOp(expr, 'DROP');\n return;\n }\n\n switch (token) {\n case SyntaxKind.PlusToken:\n sb.emitHelper(\n expr,\n options,\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.MinusToken:\n sb.emitHelper(\n expr,\n options,\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'NEGATE');\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.TildeToken:\n sb.emitHelper(\n expr,\n options,\n sb.helpers.toNumber({ type: sb.getType(expr) }),\n );\n sb.emitOp(expr, 'INVERT');\n sb.emitHelper(expr, options, sb.helpers.createNumber);\n break;\n case SyntaxKind.ExclamationToken:\n sb.emitHelper(\n operand,\n options,\n sb.helpers.toBoolean({ type: sb.getType(operand) }),\n );\n sb.emitOp(expr, 'NOT');\n sb.emitHelper(operand, options, sb.helpers.createBoolean);\n break;\n default:\n sb.assertUnreachable(token);\n }\n }\n}\n","import { PropertyAccessExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class PropertyAccessExpressionCompiler extends NodeCompiler<\n PropertyAccessExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.PropertyAccessExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: PropertyAccessExpression,\n optionsIn: VisitOptions,\n ): void {\n const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn));\n const expression = expr.getExpression();\n // [val]\n sb.visit(expression, options);\n // [objectVal]\n sb.emitHelper(\n expression,\n options,\n sb.helpers.toObject({ type: sb.getType(expression) }),\n );\n\n if (optionsIn.setValue) {\n if (optionsIn.pushValue) {\n // [objectVal, value, objectVal]\n sb.emitOp(expression, 'TUCK');\n }\n // [name, objectVal, value, objectVal]\n sb.emitPushString(expr, expr.getName());\n // [value, name, objectVal, objectVal]\n sb.emitOp(expr, 'ROT');\n // [objectVal]\n sb.emitHelper(expr, options, sb.helpers.setPropertyObjectProperty);\n }\n\n if (optionsIn.pushValue || !optionsIn.setValue) {\n // [name, objectVal]\n sb.emitPushString(expr, expr.getName());\n // [value]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n\n if (!optionsIn.pushValue) {\n sb.emitOp(expr, 'DROP');\n }\n }\n }\n}\n","import { RegularExpressionLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class RegularExpressionLiteralCompiler extends NodeCompiler<\n RegularExpressionLiteral\n> {\n public readonly kind: SyntaxKind = SyntaxKind.RegularExpressionLiteral;\n public visitNode(\n sb: ScriptBuilder,\n expr: RegularExpressionLiteral,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { SpreadElement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class SpreadElementCompiler extends NodeCompiler<SpreadElement> {\n public readonly kind: SyntaxKind = SyntaxKind.SpreadElement;\n public visitNode(\n sb: ScriptBuilder,\n expr: SpreadElement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { StringLiteral, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class StringLiteralCompiler extends NodeCompiler<StringLiteral> {\n public readonly kind: SyntaxKind = SyntaxKind.StringLiteral;\n public visitNode(\n sb: ScriptBuilder,\n expr: StringLiteral,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitPushString(expr, expr.getLiteralValue());\n sb.emitHelper(expr, options, sb.helpers.createString);\n }\n }\n}\n","import { SuperExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class SuperExpressionCompiler extends NodeCompiler<\n SuperExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.SuperKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: SuperExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n const superClass = options.superClass;\n if (superClass == null) {\n throw new Error(\n 'Something went wrong, expected super class to be defined.',\n );\n }\n\n // [superClass]\n sb.scope.get(sb, expr, options, superClass);\n // ['prototype', superClass]\n sb.emitPushString(expr, 'prototype');\n // [superPrototype]\n sb.emitHelper(expr, options, sb.helpers.getPropertyObjectProperty);\n }\n }\n}\n","import { TaggedTemplateExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class TaggedTemplateExpressionCompiler extends NodeCompiler<\n TaggedTemplateExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.TaggedTemplateExpression;\n public visitNode(\n sb: ScriptBuilder,\n expr: TaggedTemplateExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { ThisExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class ThisExpressionCompiler extends NodeCompiler<\n ThisExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ThisKeyword;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: ThisExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.scope.getThis(sb, expr, options);\n }\n }\n}\n","import { TypeAssertion, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class TypeAssertionCompiler extends NodeCompiler<TypeAssertion> {\n public readonly kind: SyntaxKind = SyntaxKind.TypeAssertionExpression;\n public visitNode(\n sb: ScriptBuilder,\n expr: TypeAssertion,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { TypeOfExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class TypeOfExpressionCompiler extends NodeCompiler<\n TypeOfExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.TypeOfExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: TypeOfExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import { VoidExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class VoidExpressionCompiler extends NodeCompiler<\n VoidExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.VoidExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: VoidExpression,\n options: VisitOptions,\n ): void {\n if (options.pushValue) {\n sb.emitHelper(expr, options, sb.helpers.createUndefined);\n }\n }\n}\n","import { YieldExpression, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport default class YieldExpressionCompiler extends NodeCompiler<\n YieldExpression\n> {\n public readonly kind: SyntaxKind = SyntaxKind.YieldExpression;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: YieldExpression,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(expr);\n }\n}\n","import ArrayLiteralExpressionCompiler from './ArrayLiteralExpressionCompiler';\nimport ArrowFunctionCompiler from './ArrowFunctionCompiler';\nimport AsExpressionCompiler from './AsExpressionCompiler';\nimport AwaitExpressionCompiler from './AwaitExpressionCompiler';\nimport BinaryExpressionCompiler from './BinaryExpressionCompiler';\nimport {\n TrueBooleanLiteralCompiler,\n FalseBooleanLiteralCompiler,\n} from './BooleanLiteralCompiler';\nimport CallExpressionCompiler from './CallExpressionCompiler';\nimport CommaListExpressionCompiler from './CommaListExpressionCompiler';\nimport ConditionalExpressionCompiler from './ConditionalExpressionCompiler';\nimport DeleteExpressionCompiler from './DeleteExpressionCompiler';\nimport ElementAccessExpressionCompiler from './ElementAccessExpressionCompiler';\nimport FunctionExpressionCompiler from './FunctionExpressionCompiler';\nimport IdentifierCompiler from './IdentifierCompiler';\nimport ImportExpressionCompiler from './ImportExpressionCompiler';\nimport MetaPropertyCompiler from './MetaPropertyCompiler';\nimport NewExpressionCompiler from './NewExpressionCompiler';\nimport NonNullExpressionCompiler from './NonNullExpressionCompiler';\nimport NoSubstitutionTemplateLiteralCompiler from './NoSubstitutionTemplateLiteralCompiler';\nimport NullLiteralCompiler from './NullLiteralCompiler';\nimport NumericLiteralCompiler from './NumericLiteralCompiler';\nimport ObjectLiteralExpressionCompiler from './ObjectLiteralExpressionCompiler';\nimport OmittedExpressionCompiler from './OmittedExpressionCompiler';\nimport ParenthesizedExpressionCompiler from './ParenthesizedExpressionCompiler';\nimport PartiallyEmittedExpressionCompiler from './PartiallyEmittedExpressionCompiler';\nimport PostfixUnaryExpressionCompiler from './PostfixUnaryExpressionCompiler';\nimport PrefixUnaryExpressionCompiler from './PrefixUnaryExpressionCompiler';\nimport PropertyAccessExpressionCompiler from './PropertyAccessExpressionCompiler';\nimport RegularExpressionLiteralCompiler from './RegularExpressionLiteralCompiler';\nimport SpreadElementCompiler from './SpreadElementCompiler';\nimport StringLiteralCompiler from './StringLiteralCompiler';\nimport SuperExpressionCompiler from './SuperExpressionCompiler';\nimport TaggedTemplateExpressionCompiler from './TaggedTemplateExpressionCompiler';\nimport ThisExpressionCompiler from './ThisExpressionCompiler';\nimport TypeAssertionCompiler from './TypeAssertionCompiler';\nimport TypeOfExpressionCompiler from './TypeOfExpressionCompiler';\nimport VoidExpressionCompiler from './VoidExpressionCompiler';\nimport YieldExpressionCompiler from './YieldExpressionCompiler';\n\nexport default [\n ArrayLiteralExpressionCompiler,\n ArrowFunctionCompiler,\n AsExpressionCompiler,\n AwaitExpressionCompiler,\n BinaryExpressionCompiler,\n TrueBooleanLiteralCompiler,\n FalseBooleanLiteralCompiler,\n CallExpressionCompiler,\n CommaListExpressionCompiler,\n ConditionalExpressionCompiler,\n DeleteExpressionCompiler,\n ElementAccessExpressionCompiler,\n FunctionExpressionCompiler,\n IdentifierCompiler,\n ImportExpressionCompiler,\n MetaPropertyCompiler,\n NewExpressionCompiler,\n NonNullExpressionCompiler,\n NoSubstitutionTemplateLiteralCompiler,\n NullLiteralCompiler,\n NumericLiteralCompiler,\n ObjectLiteralExpressionCompiler,\n OmittedExpressionCompiler,\n ParenthesizedExpressionCompiler,\n PartiallyEmittedExpressionCompiler,\n PostfixUnaryExpressionCompiler,\n PrefixUnaryExpressionCompiler,\n PropertyAccessExpressionCompiler,\n RegularExpressionLiteralCompiler,\n SpreadElementCompiler,\n StringLiteralCompiler,\n SuperExpressionCompiler,\n TaggedTemplateExpressionCompiler,\n ThisExpressionCompiler,\n TypeAssertionCompiler,\n TypeOfExpressionCompiler,\n VoidExpressionCompiler,\n YieldExpressionCompiler,\n];\n","import { SourceFile, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class SourceFileCompiler extends NodeCompiler<SourceFile> {\n public readonly kind: SyntaxKind = SyntaxKind.SourceFile;\n\n public visitNode(\n sb: ScriptBuilder,\n node: SourceFile,\n options: VisitOptions,\n ): void {\n node.getImportDeclarations().forEach((decl) => {\n sb.visit(decl, options);\n });\n sb.emitHelper(\n node,\n options,\n sb.helpers.processStatements({ createScope: false }),\n );\n node.getExportDeclarations().forEach((decl) => {\n sb.visit(decl, options);\n });\n node.getExportAssignments().forEach((assignment) => {\n sb.visit(assignment, options);\n });\n }\n}\n","import { SourceFileCompiler } from './SourceFileCompiler';\n\nexport default [SourceFileCompiler];\n","import { Block, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class BlockCompiler extends NodeCompiler<Block> {\n public readonly kind: SyntaxKind = SyntaxKind.Block;\n\n public visitNode(\n sb: ScriptBuilder,\n expr: Block,\n options: VisitOptions,\n ): void {\n sb.emitHelper(\n expr,\n options,\n sb.helpers.processStatements({ createScope: true }),\n );\n }\n}\n","import { BreakStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as constants from '../../constants';\n\nexport class BreakStatementCompiler extends NodeCompiler<BreakStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.BreakStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: BreakStatement,\n options: VisitOptions,\n ): void {\n const label = node.getLabel();\n if (label != null) {\n sb.reportUnsupported(label);\n }\n\n if (options.breakPC == null) {\n sb.reportError(\n node,\n 'Something went wrong. Expected a break jump location.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else {\n sb.emitPushInt(node, constants.BREAK_COMPLETION);\n sb.emitJmp(node, 'JMP', options.breakPC);\n }\n }\n}\n","import { CaseBlock, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CaseBlockCompiler extends NodeCompiler<CaseBlock> {\n public readonly kind: SyntaxKind = SyntaxKind.CaseBlock;\n\n public visitNode(\n sb: ScriptBuilder,\n node: CaseBlock,\n options: VisitOptions,\n ): void {\n node.getClauses().forEach((clause) => {\n sb.visit(clause, options);\n });\n }\n}\n","import { CaseClause, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CaseClauseCompiler extends NodeCompiler<CaseClause> {\n public readonly kind: SyntaxKind = SyntaxKind.CaseClause;\n\n public visitNode(\n sb: ScriptBuilder,\n node: CaseClause,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { CatchClause, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CatchClauseCompiler extends NodeCompiler<CatchClause> {\n public readonly kind: SyntaxKind = SyntaxKind.CatchClause;\n\n public visitNode(\n sb: ScriptBuilder,\n node: CatchClause,\n options: VisitOptions,\n ): void {\n const variable = node.getVariableDeclaration();\n if (variable == null) {\n sb.visit(node.getBlock(), options);\n } else {\n sb.withScope(node, options, (innerOptions) => {\n sb.visit(variable, innerOptions);\n sb.visit(node.getBlock(), innerOptions);\n });\n }\n }\n}\n","import { ContinueStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as constants from '../../constants';\n\nexport class ContinueStatementCompiler extends NodeCompiler<ContinueStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ContinueStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ContinueStatement,\n options: VisitOptions,\n ): void {\n const label = node.getLabel();\n if (label != null) {\n sb.reportUnsupported(label);\n }\n\n if (options.continuePC == null) {\n sb.reportError(\n node,\n 'Something went wrong. Expected a continue jump location.',\n DiagnosticCode.SOMETHING_WENT_WRONG,\n );\n } else {\n sb.emitPushInt(node, constants.CONTINUE_COMPLETION);\n sb.emitJmp(node, 'JMP', options.continuePC);\n }\n }\n}\n","import { DebuggerStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DebuggerStatementCompiler extends NodeCompiler<DebuggerStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.DebuggerStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: DebuggerStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { DefaultClause, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DefaultClauseCompiler extends NodeCompiler<DefaultClause> {\n public readonly kind: SyntaxKind = SyntaxKind.DefaultClause;\n\n public visitNode(\n sb: ScriptBuilder,\n node: DefaultClause,\n options: VisitOptions,\n ): void {\n sb.emitOp(node, 'DROP');\n sb.emitHelper(\n node,\n options,\n sb.helpers.processStatements({ createScope: false }),\n );\n }\n}\n","import { DoStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class DoStatementCompiler extends NodeCompiler<DoStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.DoStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: DoStatement,\n options: VisitOptions,\n ): void {\n sb.withProgramCounter((pc) => {\n sb.withProgramCounter((innerPC) => {\n sb.visit(\n node.getStatement(),\n sb.breakPCOptions(\n sb.continuePCOptions(options, innerPC.getLast()),\n pc.getLast(),\n ),\n );\n });\n\n sb.emitHelper(\n node.getExpression(),\n options,\n sb.helpers.if({\n condition: () => {\n sb.visit(node.getExpression(), sb.pushValueOptions(options));\n },\n whenTrue: () => {\n sb.emitJmp(node, 'JMP', pc.getFirst());\n },\n }),\n );\n });\n }\n}\n","import { EmptyStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class EmptyStatementCompiler extends NodeCompiler<EmptyStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.EmptyStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: EmptyStatement,\n options: VisitOptions,\n ): void {\n // tslint:disable-line\n }\n}\n","import { ExpressionStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ExpressionStatementCompiler extends NodeCompiler<\n ExpressionStatement\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ExpressionStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ExpressionStatement,\n options: VisitOptions,\n ): void {\n sb.visit(node.getExpression(), sb.noPushValueOptions(options));\n }\n}\n","import { ForInStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ForInStatementCompiler extends NodeCompiler<ForInStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ForInStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ForInStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { ForOfStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ForOfStatementCompiler extends NodeCompiler<ForOfStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ForOfStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ForOfStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { ForStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ForStatementCompiler extends NodeCompiler<ForStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ForStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ForStatement,\n options: VisitOptions,\n ): void {\n let initializer;\n const exprInitializer = node.getInitializer();\n if (exprInitializer != null) {\n initializer = () => {\n sb.visit(exprInitializer, sb.noPushValueOptions(options));\n };\n }\n\n let condition;\n const exprCondition = node.getCondition();\n if (exprCondition != null) {\n condition = () => {\n sb.visit(exprCondition, sb.pushValueOptions(options));\n sb.emitHelper(\n exprCondition,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({\n type: sb.getType(exprCondition),\n }),\n );\n };\n }\n\n let incrementor;\n const exprIncrementor = node.getIncrementor();\n if (exprIncrementor != null) {\n incrementor = () => {\n sb.visit(exprIncrementor, sb.noPushValueOptions(options));\n };\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.forLoop({\n initializer,\n condition,\n incrementor,\n each: (innerOptions) => {\n sb.visit(node.getStatement(), sb.noPushValueOptions(innerOptions));\n },\n }),\n );\n }\n}\n","import { IfStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class IfStatementCompiler extends NodeCompiler<IfStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.IfStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: IfStatement,\n options: VisitOptions,\n ): void {\n const condition = () => {\n const cond = node.getExpression();\n sb.visit(cond, sb.pushValueOptions(options));\n sb.emitHelper(\n cond,\n sb.pushValueOptions(options),\n sb.helpers.toBoolean({\n type: sb.getType(cond),\n }),\n );\n };\n\n const whenTrue = () => {\n sb.visit(node.getThenStatement(), options);\n };\n\n let whenFalse;\n const nodeWhenFalse = node.getElseStatement();\n if (nodeWhenFalse != null) {\n whenFalse = () => {\n sb.visit(nodeWhenFalse, options);\n };\n }\n\n sb.emitHelper(\n node,\n options,\n sb.helpers.if({\n condition,\n whenTrue,\n whenFalse,\n }),\n );\n }\n}\n","import { LabeledStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class LabeledStatementCompiler extends NodeCompiler<LabeledStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.LabeledStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: LabeledStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { NotEmittedStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class NotEmittedStatementCompiler extends NodeCompiler<\n NotEmittedStatement\n> {\n public readonly kind: SyntaxKind = SyntaxKind.NotEmittedStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: NotEmittedStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { ReturnStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ReturnStatementCompiler extends NodeCompiler<ReturnStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ReturnStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ReturnStatement,\n options: VisitOptions,\n ): void {\n const expr = node.getExpression();\n if (expr == null) {\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n } else {\n sb.visit(expr, sb.pushValueOptions(options));\n }\n\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createNormalCompletion,\n );\n sb.emitOp(node, 'RET');\n }\n}\n","import { SwitchStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class SwitchStatementCompiler extends NodeCompiler<SwitchStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.SwitchStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: SwitchStatement,\n options: VisitOptions,\n ): void {\n sb.withProgramCounter((pc) => {\n sb.visit(node.getExpression(), sb.pushValueOptions(options));\n sb.visit(node.getCaseBlock(), sb.breakPCOptions(options, pc.getLast()));\n });\n }\n}\n","import { ThrowStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class ThrowStatementCompiler extends NodeCompiler<ThrowStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.ThrowStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: ThrowStatement,\n options: VisitOptions,\n ): void {\n const expr = node.getExpression();\n sb.visit(expr, sb.pushValueOptions(options));\n sb.emitHelper(node, options, sb.helpers.throw);\n }\n}\n","import { TryStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class TryStatementCompiler extends NodeCompiler<TryStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.TryStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: TryStatement,\n options: VisitOptions,\n ): void {\n const catchClause = node.getCatchClause();\n if (catchClause == null) {\n sb.visit(node.getTryBlock(), options);\n } else {\n sb.withProgramCounter((pc) => {\n sb.withProgramCounter((innerPC) => {\n sb.visit(\n node.getTryBlock(),\n sb.catchPCOptions(options, innerPC.getLast()),\n );\n sb.emitJmp(node, 'JMP', pc.getLast());\n });\n\n sb.visit(catchClause, options);\n });\n }\n\n const finallyBlock = node.getFinallyBlock();\n if (finallyBlock != null) {\n sb.reportUnsupported(finallyBlock);\n }\n }\n}\n","import { VariableStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class VariableStatementCompiler extends NodeCompiler<VariableStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.VariableStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: VariableStatement,\n optionsIn: VisitOptions,\n ): void {\n sb.visit(node.getDeclarationList(), optionsIn);\n\n if (node.isNamedExport()) {\n const options = sb.pushValueOptions(optionsIn);\n\n // [exports]\n sb.emitHelper(node, options, sb.helpers.getCurrentModule);\n node\n .getDeclarationList()\n .getDeclarations()\n .forEach((decl) => {\n // [exports, exports]\n sb.emitOp(node, 'DUP');\n // [val, exports, exports]\n sb.scope.get(sb, node, options, decl.getName());\n // [exports]\n sb.emitHelper(\n node,\n options,\n sb.helpers.export({ name: decl.getName() }),\n );\n });\n // []\n sb.emitOp(node, 'DROP');\n }\n }\n}\n","import { WhileStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class WhileStatementCompiler extends NodeCompiler<WhileStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.WhileStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: WhileStatement,\n options: VisitOptions,\n ): void {\n sb.withProgramCounter((pc) => {\n sb.visit(node.getExpression(), sb.pushValueOptions(options));\n sb.emitJmp(node, 'JMPIFNOT', pc.getLast());\n sb.visit(\n node.getStatement(),\n sb.breakPCOptions(\n sb.continuePCOptions(options, pc.getFirst()),\n pc.getLast(),\n ),\n );\n sb.emitJmp(node, 'JMP', pc.getFirst());\n });\n }\n}\n","import { WithStatement, SyntaxKind } from 'ts-simple-ast';\n\nimport { NodeCompiler } from '../NodeCompiler';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class WithStatementCompiler extends NodeCompiler<WithStatement> {\n public readonly kind: SyntaxKind = SyntaxKind.WithStatement;\n\n public visitNode(\n sb: ScriptBuilder,\n node: WithStatement,\n options: VisitOptions,\n ): void {\n sb.reportUnsupported(node);\n }\n}\n","import { BlockCompiler } from './BlockCompiler';\nimport { BreakStatementCompiler } from './BreakStatementCompiler';\nimport { CaseBlockCompiler } from './CaseBlockCompiler';\nimport { CaseClauseCompiler } from './CaseClauseCompiler';\nimport { CatchClauseCompiler } from './CatchClauseCompiler';\nimport { ContinueStatementCompiler } from './ContinueStatementCompiler';\nimport { DebuggerStatementCompiler } from './DebuggerStatementCompiler';\nimport { DefaultClauseCompiler } from './DefaultClauseCompiler';\nimport { DoStatementCompiler } from './DoStatementCompiler';\nimport { EmptyStatementCompiler } from './EmptyStatementCompiler';\nimport { ExpressionStatementCompiler } from './ExpressionStatementCompiler';\nimport { ForInStatementCompiler } from './ForInStatementCompiler';\nimport { ForOfStatementCompiler } from './ForOfStatementCompiler';\nimport { ForStatementCompiler } from './ForStatementCompiler';\nimport { IfStatementCompiler } from './IfStatementCompiler';\nimport { LabeledStatementCompiler } from './LabeledStatementCompiler';\nimport { NotEmittedStatementCompiler } from './NotEmittedStatementCompiler';\nimport { ReturnStatementCompiler } from './ReturnStatementCompiler';\nimport { SwitchStatementCompiler } from './SwitchStatementCompiler';\nimport { ThrowStatementCompiler } from './ThrowStatementCompiler';\nimport { TryStatementCompiler } from './TryStatementCompiler';\nimport { VariableStatementCompiler } from './VariableStatementCompiler';\nimport { WhileStatementCompiler } from './WhileStatementCompiler';\nimport { WithStatementCompiler } from './WithStatementCompiler';\n\nexport default [\n BlockCompiler,\n BreakStatementCompiler,\n CaseBlockCompiler,\n CaseClauseCompiler,\n CatchClauseCompiler,\n ContinueStatementCompiler,\n DebuggerStatementCompiler,\n DefaultClauseCompiler,\n DoStatementCompiler,\n EmptyStatementCompiler,\n ExpressionStatementCompiler,\n ForInStatementCompiler,\n ForOfStatementCompiler,\n ForStatementCompiler,\n IfStatementCompiler,\n LabeledStatementCompiler,\n NotEmittedStatementCompiler,\n ReturnStatementCompiler,\n SwitchStatementCompiler,\n ThrowStatementCompiler,\n TryStatementCompiler,\n VariableStatementCompiler,\n WhileStatementCompiler,\n WithStatementCompiler,\n];\n","import _ from 'lodash';\n\nimport { Jump, Call, Jmp } from '../pc';\n\nimport { KnownProgramCounter } from '../pc/KnownProgramCounter';\n\nexport type Bytecode = Array<Buffer | Jump>;\n\nconst MAX_JUMP = 32767;\nconst JUMP_OFFSET = 20000;\n\nabstract class CodePoint {\n public abstract length: number;\n public readonly sources: Set<JumpCodePoint> = new Set();\n private pcInternal: number | undefined;\n private prevInternal: CodePoint | undefined;\n private nextInternal: CodePoint | undefined;\n\n public get pc(): number {\n return this.resolvePC();\n }\n\n public resolvePC(): number {\n if (this.pcInternal == null) {\n this.pcInternal = 0;\n if (this.prev == null) {\n this.pcInternal = 0;\n } else {\n this.pcInternal = this.prev.pc + this.prev.length;\n }\n }\n\n return this.pcInternal;\n }\n\n public resetPC(): void {\n if (this.pcInternal != null) {\n this.pcInternal = undefined;\n let next = this.next;\n while (next != null) {\n next.pcInternal = undefined;\n next = next.next;\n }\n }\n }\n\n public get totalLength(): number {\n let length = this.length;\n let next = this.next;\n while (next != null) {\n length += next.length;\n next = next.next;\n }\n return length;\n }\n\n public get prev(): CodePoint | undefined {\n return this.prevInternal;\n }\n\n public set prev(prev: CodePoint | undefined) {\n this.resetPC();\n this.prevInternal = prev;\n }\n\n public get next(): CodePoint | undefined {\n return this.nextInternal;\n }\n\n public set next(next: CodePoint | undefined) {\n this.nextInternal = next;\n }\n\n public insertJumps(targets: NewJump[]): CodePoint {\n let self: CodePoint | undefined = this;\n let skipJump = false;\n let ret: CodePoint = this;\n while (self != null) {\n const target = targets[0];\n if (target == null) {\n return ret;\n }\n\n let length = 0;\n if (self.next != null && !skipJump) {\n length = 3;\n }\n\n let next: CodePoint | undefined = self.next;\n let nextSkipJump = false;\n if (\n (target.isMax &&\n self.pc + self.length + length >\n target.pc + target.getPostOffset()) ||\n (!target.isMax &&\n self.pc >= target.pc + target.getPostOffset() - length)\n ) {\n next = self;\n if (skipJump) {\n const resolved = target.resolve();\n self.insertBefore(resolved);\n if (self === this) {\n ret = resolved;\n }\n } else {\n const resolved = target.resolve();\n const jump = new JumpCodePoint('JMP', self);\n self.insertBefore(jump);\n jump.insertAfter(resolved);\n if (self === this) {\n ret = resolved;\n }\n }\n nextSkipJump = true;\n targets.shift();\n }\n\n self = next;\n skipJump = nextSkipJump;\n }\n\n if (targets.length > 0) {\n throw new Error(\n `Failed to insert all targets. Something went wrong. Remaining: ${\n targets.length\n }`,\n );\n }\n\n return ret;\n }\n\n public insertBefore(point: CodePoint): void {\n if (this.prev != null) {\n this.prev.next = point;\n point.prev = this.prev;\n }\n\n this.prev = point;\n point.next = this;\n }\n\n public insertAfter(point: CodePoint): void {\n if (this.next != null) {\n this.next.prev = point;\n point.next = this.next;\n }\n\n this.next = point;\n point.prev = this;\n }\n\n public replace(point: CodePoint): void {\n if (this.prev != null) {\n this.prev.next = point;\n point.prevInternal = this.prev;\n }\n\n if (this.next != null) {\n if (point.length === this.length) {\n this.next.prevInternal = point;\n } else {\n this.next.prev = point;\n }\n\n point.next = this.next;\n }\n }\n}\n\nclass JumpCodePoint extends CodePoint {\n public length: number = 3;\n\n constructor(\n public readonly type: 'JMP' | 'JMPIF' | 'JMPIFNOT' | 'CALL',\n private targetInternal?: CodePoint | NewJump,\n ) {\n super();\n }\n\n public get target(): CodePoint | NewJump {\n if (this.targetInternal == null) {\n throw new Error('Target not set');\n }\n\n return this.targetInternal;\n }\n\n public set target(target: CodePoint | NewJump) {\n this.targetInternal = target;\n }\n\n public get isForwardJump(): boolean {\n return this.target.pc > this.pc;\n }\n\n public get isReverseJump(): boolean {\n return this.target.pc < this.pc;\n }\n\n public get offset(): number {\n if (this.target.pc === this.pc) {\n throw new Error(\n 'Something went wrong. Found equal target pc and current pc.',\n );\n }\n return this.target.pc - this.pc;\n }\n}\n\nclass BufferCodePoint extends CodePoint {\n public readonly length: number;\n\n constructor(public readonly value: Buffer) {\n super();\n this.length = value.length;\n }\n}\n\nclass NewJump {\n public length: number = 3;\n private sourceInternal: JumpCodePoint | NewJump | undefined;\n private internalPostOffset: number | undefined;\n\n constructor(\n public readonly pc: number,\n public readonly isMax: boolean,\n public target: CodePoint | NewJump,\n ) {}\n\n public get source(): JumpCodePoint | NewJump {\n if (this.sourceInternal == null) {\n throw new Error('NewJump source is not set');\n }\n\n return this.sourceInternal;\n }\n\n public set source(source: JumpCodePoint | NewJump) {\n this.sourceInternal = source;\n }\n\n public resolve(): JumpCodePoint {\n const jump = new JumpCodePoint('JMP', this.target);\n this.source.target = jump;\n if (this.target instanceof NewJump) {\n this.target.source = jump;\n } else {\n this.target.sources.add(jump);\n }\n\n if (this.source instanceof JumpCodePoint) {\n jump.sources.add(this.source);\n }\n\n return jump;\n }\n\n public get isForwardJump(): boolean {\n return this.isMax;\n }\n\n public get isReverseJump(): boolean {\n return !this.isMax;\n }\n\n public get offset(): number {\n if (this.target.pc === this.pc) {\n throw new Error(\n 'Something went wrong. Found equal target pc and current pc.',\n );\n }\n return this.target.pc - this.pc;\n }\n\n public getPostOffset(): number {\n if (this.internalPostOffset == null) {\n throw new Error('Not resolved');\n }\n\n return this.internalPostOffset;\n }\n\n public resolvePostOffset(targets: NewJump[]): void {\n const sourcePC = this.source.pc;\n if (this.isMax) {\n this.internalPostOffset = targets\n .filter((target) => sourcePC < target.pc && target.pc < this.pc)\n .reduce((acc) => acc - 6, 0);\n } else {\n this.internalPostOffset = targets\n .filter((target) => this.pc < target.pc && target.pc < sourcePC)\n .reduce((acc) => acc + 6, 0);\n }\n }\n}\n\nexport class JumpResolver {\n public process(bytecode: Array<Buffer | Jump>): Array<Buffer | Jump> {\n let first: CodePoint = this.getCodePoint(bytecode);\n let newTargets = [];\n // TODO: We do this in a loop in case there's a math problem in inserting\n // new jumps, might not be necessary.\n // TODO: Optimize and fix this crazy logic.\n do {\n this.resolvePC(first);\n const result = this.processOne(first);\n first = result[0];\n newTargets = result[1];\n const sortedNewTargets = _.sortBy(newTargets, (target) => target.pc);\n sortedNewTargets.forEach((target) =>\n target.resolvePostOffset(sortedNewTargets),\n );\n first = first.insertJumps(sortedNewTargets);\n } while (newTargets.length > 0);\n\n this.resolvePC(first);\n let current: CodePoint | undefined = first;\n const out: Array<Buffer | Jump> = [];\n while (current != null) {\n if (current instanceof JumpCodePoint) {\n const pc = new KnownProgramCounter(current.target.pc);\n if (current.type === 'CALL') {\n out.push(new Call(pc));\n } else {\n out.push(new Jmp(current.type, pc));\n }\n } else if (current instanceof BufferCodePoint) {\n out.push(current.value);\n } else {\n throw new Error('Something went wrong.');\n }\n current = current.next;\n }\n\n return out;\n }\n\n private processOne(codePoint: CodePoint): [CodePoint, NewJump[]] {\n const newTargets = [];\n\n let ret: CodePoint = codePoint;\n let value: CodePoint | undefined = codePoint;\n while (value != null) {\n if (value instanceof JumpCodePoint) {\n const result = this.getTarget(value);\n if (result == null) {\n value = value.next;\n } else {\n const [newValue, newValueTargets] = result;\n value.replace(newValue);\n if (value === codePoint) {\n ret = newValue;\n }\n newTargets.push(...newValueTargets);\n value = newValue.next;\n }\n } else {\n value = value.next;\n }\n }\n\n return [ret, newTargets];\n }\n\n private getTarget(\n value: JumpCodePoint,\n ): [JumpCodePoint, NewJump[]] | undefined {\n if (\n (value.isForwardJump && value.offset > MAX_JUMP) ||\n (value.isReverseJump && value.offset < -MAX_JUMP)\n ) {\n const isMax = value.isForwardJump;\n const newOffset = isMax ? JUMP_OFFSET : -JUMP_OFFSET;\n if (value.target instanceof NewJump) {\n throw new Error('Something went wrong. Unexpected jump target.');\n }\n const newValueTargets = this.getNewTarget(\n new NewJump(value.pc + newOffset, isMax, value.target),\n );\n const newValueTarget = newValueTargets[0];\n const newValue: JumpCodePoint = new JumpCodePoint(\n value.type,\n newValueTarget,\n );\n newValueTarget.source = newValue;\n value.target.sources.delete(value);\n [...value.sources].forEach((source) => {\n source.target = newValue;\n newValue.sources.add(source);\n });\n\n return [newValue, newValueTargets];\n }\n\n return undefined;\n }\n\n private getNewTarget(value: NewJump): NewJump[] {\n if (\n (value.isForwardJump && value.offset > MAX_JUMP) ||\n (value.isReverseJump && value.offset < -MAX_JUMP)\n ) {\n const isMax = value.isForwardJump;\n const newOffset = isMax ? JUMP_OFFSET : -JUMP_OFFSET;\n if (value.target instanceof NewJump) {\n throw new Error('Something went wrong. Unexpected jump target.');\n }\n const newValueTarget = new NewJump(\n value.pc + newOffset,\n isMax,\n value.target,\n );\n value.target = newValueTarget;\n newValueTarget.source = value;\n const newTargets = this.getNewTarget(newValueTarget);\n return [value].concat(newTargets);\n }\n\n return [value];\n }\n\n private getCodePoint(bytecode: Array<Buffer | Jump>): CodePoint {\n const sources: { [pc: number]: JumpCodePoint[] } = {};\n const codePoints: { [pc: number]: CodePoint } = {};\n const firstBytecode = bytecode[0];\n let first: CodePoint;\n if (firstBytecode instanceof Jump) {\n const jumpCodePoint = new JumpCodePoint(firstBytecode.op);\n sources[firstBytecode.pc.getPC()] = [jumpCodePoint];\n first = jumpCodePoint;\n } else {\n first = new BufferCodePoint(firstBytecode);\n }\n codePoints[0] = first;\n\n let pc = first.length;\n let prev: CodePoint = first;\n for (const value of bytecode.slice(1)) {\n let codePoint: CodePoint;\n if (value instanceof Jump) {\n const targetPC = value.pc.getPC();\n let jumpCodePoint;\n if (targetPC < pc) {\n jumpCodePoint = new JumpCodePoint(value.op, codePoints[targetPC]);\n codePoints[targetPC].sources.add(jumpCodePoint);\n } else {\n jumpCodePoint = new JumpCodePoint(value.op);\n if (sources[targetPC] == null) {\n sources[targetPC] = [];\n }\n sources[targetPC].push(jumpCodePoint);\n }\n codePoint = jumpCodePoint;\n } else {\n codePoint = new BufferCodePoint(value);\n }\n\n const pcSources = sources[pc];\n if (pcSources != null) {\n delete sources[pc];\n pcSources.forEach((source) => {\n source.target = codePoint;\n codePoint.sources.add(source);\n });\n }\n codePoints[pc] = codePoint;\n pc += codePoint.length;\n\n codePoint.prev = prev;\n prev.next = codePoint;\n prev = codePoint;\n }\n\n return first;\n }\n\n private resolvePC(codePoint: CodePoint): void {\n codePoint.resetPC();\n let current: CodePoint | undefined = codePoint;\n while (current != null) {\n current.resolvePC();\n current = current.next;\n }\n }\n}\n","// tslint:disable ban-types\nimport {\n BYTECODE_TO_BYTECODE_BUFFER,\n OPCODE_TO_BYTECODE,\n BinaryWriter,\n ByteCode,\n OpCode,\n UnknownOpError,\n utils,\n ScriptBuilder as ClientScriptBuilder,\n SysCallName,\n} from '@neo-one/client-core';\nimport BN from 'bn.js';\nimport Ast, { Node, SourceFile, Type, Symbol } from 'ts-simple-ast';\n\nimport { Context } from '../../Context';\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { Helper, Helpers } from '../helper';\nimport { JumpTable } from './JumpTable';\nimport {\n DeferredProgramCounter,\n ProgramCounterHelper,\n ProgramCounter,\n Jump,\n Jmp,\n Call,\n} from '../pc';\nimport { NodeCompiler } from '../NodeCompiler';\nimport { Scope, Name } from '../scope';\nimport { Bytecode, CaptureResult, ScriptBuilder } from './ScriptBuilder';\nimport { VisitOptions } from '../types';\n\nimport declarations from '../declaration';\nimport decorator from '../decorator';\nimport expression from '../expression';\nimport file from '../file';\nimport statement from '../statement';\nimport { Globals } from '../../symbols';\nimport { JumpResolver } from './JumpResolver';\n\nconst compilers = [declarations, decorator, expression, file, statement];\n\ninterface Compilers {\n [kind: number]: NodeCompiler<any>;\n}\n\nexport abstract class BaseScriptBuilder<TScope extends Scope>\n implements ScriptBuilder {\n public readonly jumpTable: JumpTable = new JumpTable();\n private currentScope: TScope | undefined;\n private readonly compilers: Compilers;\n private bytecode: Bytecode;\n private pc: number;\n private jumpTablePC: DeferredProgramCounter = new DeferredProgramCounter();\n private capturedBytecode: Bytecode | undefined = undefined;\n private readonly nodes: Map<Node, number> = new Map();\n private readonly moduleMap: { [filePath: string]: number } = {};\n private readonly reverseModuleMap: { [index: number]: string } = {};\n private readonly exportMap: { [filePath: string]: Set<string> } = {};\n private nextModuleIndex = 0;\n private currentModuleIndex = 0;\n\n constructor(\n private readonly context: Context,\n public readonly helpers: Helpers,\n protected readonly ast: Ast,\n private readonly sourceFile: SourceFile,\n private readonly allHelpers: Helper[] = [],\n ) {\n this.bytecode = [];\n this.pc = 0;\n this.currentScope = undefined;\n this.compilers = (compilers as Array<Array<new () => NodeCompiler<any>>>)\n .reduce((acc, kindCompilers) => acc.concat(kindCompilers), [])\n .reduce(\n (acc, KindCompiler) => {\n const kindCompiler = new KindCompiler();\n if (acc[kindCompiler.kind] != null) {\n throw new Error(\n `Found duplicate compiler for kind ${kindCompiler.kind}`,\n );\n }\n\n acc[kindCompiler.kind] = kindCompiler;\n return acc;\n },\n {} as Compilers,\n );\n }\n\n get scope(): TScope {\n if (this.currentScope == null) {\n throw new Error('Scope has not been set');\n }\n return this.currentScope;\n }\n\n get moduleIndex(): number {\n return this.currentModuleIndex;\n }\n\n public process(): void {\n const sourceFile = this.sourceFile;\n const { bytecode } = this.capture(() => {\n this.moduleMap[sourceFile.getFilePath()] = this.nextModuleIndex;\n this.reverseModuleMap[this.nextModuleIndex] = sourceFile.getFilePath();\n this.currentModuleIndex = this.nextModuleIndex;\n this.nextModuleIndex += 1;\n\n this.currentScope = this.createScope(sourceFile, 0, undefined);\n this.nodes.set(sourceFile, 0);\n const options = {};\n this.currentScope.emit(this, sourceFile, options, (innerOptions) => {\n // []\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.setGlobalObject,\n );\n // [globalObjectVal]\n this.scope.getGlobal(this, sourceFile, this.pushValueOptions(options));\n // []\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.addEmptyModule,\n );\n // []\n this.allHelpers.forEach((helper) => {\n helper.emitGlobal(this, sourceFile, innerOptions);\n });\n this.visit(sourceFile, innerOptions);\n });\n });\n\n this.withProgramCounter((pc) => {\n this.emitJmp(sourceFile, 'JMP', pc.getLast());\n this.jumpTablePC.setPC(pc.getCurrent());\n this.jumpTable.emitTable(this, sourceFile);\n });\n this.emitBytecode(bytecode);\n }\n\n public getFinalBytecode(): Buffer {\n const bytecode = new JumpResolver().process(\n this.bytecode.map(([_, value]) => value),\n );\n let pc = 0;\n const buffers = bytecode.map((valueIn) => {\n let value = valueIn;\n if (value instanceof Jump) {\n const offsetPC = new BN(value.pc.getPC()).sub(new BN(pc));\n // @ts-ignore\n const jumpPC = offsetPC.toTwos(16);\n const byteCodeBuffer =\n BYTECODE_TO_BYTECODE_BUFFER[OPCODE_TO_BYTECODE[value.op]];\n if (byteCodeBuffer == null) {\n throw new Error(\n 'Something went wrong, could not find bytecode buffer',\n );\n }\n value = Buffer.concat([\n byteCodeBuffer,\n jumpPC.toArrayLike(Buffer, 'le', 2),\n ]);\n }\n\n pc += value.length;\n return value;\n }) as Buffer[];\n\n return Buffer.concat(buffers);\n }\n\n public visit(node: Node, options: VisitOptions): void {\n const compiler = this.compilers[node.compilerNode.kind];\n if (compiler == null) {\n this.reportUnsupported(node);\n } else {\n compiler.visitNode(this, node, options);\n }\n }\n\n public withScope(\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n let index = this.nodes.get(node);\n if (index == null) {\n index = 0;\n } else {\n index += 1;\n }\n\n this.nodes.set(node, index);\n\n const currentScope = this.currentScope;\n this.currentScope = this.createScope(node, index, currentScope);\n this.currentScope.emit(this, node, options, func);\n this.currentScope = currentScope;\n }\n\n public withProgramCounter(func: (pc: ProgramCounterHelper) => void): void {\n const pc = new ProgramCounterHelper(() => this.pc);\n func(pc);\n pc.setLast();\n }\n\n public emitOp(\n node: Node,\n code: OpCode,\n buffer?: Buffer | null | undefined,\n ): void {\n const bytecode = OPCODE_TO_BYTECODE[code];\n if (bytecode == null) {\n throw new UnknownOpError(code);\n }\n this.emitOpByte(node, bytecode, buffer);\n }\n\n public emitPushInt(node: Node, valueIn: number | BN): void {\n const value = new BN(valueIn);\n if (value.eq(utils.NEGATIVE_ONE)) {\n return this.emitOp(node, 'PUSHM1');\n } else if (value.eq(utils.ZERO)) {\n // TODO: Empty byte breaks equality with 0. Not sure if it's a bug in the vm or\n // we need to explicitly push a buffer with one 0 byte rather than PUSH0\n // this.emitOp(node, 'PUSH0');\n return this.emitPush(node, utils.toSignedBuffer(value));\n } else if (value.gt(utils.ZERO) && value.lt(utils.SIXTEEN)) {\n return this.emitOpByte(\n node,\n OPCODE_TO_BYTECODE.PUSH1 - 1 + value.toNumber(),\n );\n }\n\n return this.emitPush(node, utils.toSignedBuffer(value));\n }\n\n public emitPushBoolean(node: Node, value: boolean): void {\n this.emitOp(node, value ? 'PUSH1' : 'PUSH0');\n }\n\n public emitPushString(node: Node, value: string): void {\n return this.emitPush(node, this.toBuffer(value));\n }\n\n public emitJmp(\n node: Node,\n code: 'JMP' | 'JMPIF' | 'JMPIFNOT',\n pc: ProgramCounter,\n ): void {\n this.emitJump(node, new Jmp(code, pc));\n }\n\n public emitHelper<T extends Node>(\n node: T,\n options: VisitOptions,\n helper: Helper<T>,\n ): void {\n helper.emit(this, node, options);\n }\n\n public emitBytecode(bytecode: Bytecode): void {\n const pc = this.pc;\n bytecode.forEach(([node, code]) => {\n if (code instanceof Call) {\n this.emitJump(node, code);\n } else if (code instanceof Jmp) {\n this.emitJump(node, code.plus(pc));\n } else if (code instanceof Jump) {\n throw new Error('Something went wrong.');\n } else {\n this.emitRaw(node, code);\n }\n });\n }\n\n public emitCall(node: Node): void {\n this.emitJump(node, new Call(this.jumpTablePC));\n }\n\n public emitSysCall(node: Node, name: SysCallName): void {\n const sysCallBuffer = Buffer.from(name, 'ascii');\n const writer = new BinaryWriter();\n writer.writeVarBytesLE(sysCallBuffer);\n this.emitOp(node, 'SYSCALL', writer.toBuffer());\n }\n\n public loadModule(sourceFile: SourceFile): void {\n const options = {};\n\n let moduleIndex = this.moduleMap[sourceFile.getFilePath()];\n if (moduleIndex == null) {\n moduleIndex = this.nextModuleIndex;\n this.nextModuleIndex += 1;\n this.moduleMap[sourceFile.getFilePath()] = moduleIndex;\n this.reverseModuleMap[moduleIndex] = sourceFile.getFilePath();\n\n const currentScope = this.currentScope;\n this.currentScope = this.createScope(sourceFile, 0, undefined);\n\n const currentModuleIndex = this.currentModuleIndex;\n this.currentModuleIndex = moduleIndex;\n\n // [globalObjectVal]\n this.scope.getGlobal(this, sourceFile, this.pushValueOptions(options));\n // [globalObjectVal, globalObjectVal]\n this.emitOp(sourceFile, 'DUP');\n // [globalObjectVal]\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.addEmptyModule,\n );\n\n this.currentScope.emit(this, sourceFile, options, (innerOptions) => {\n // []\n this.scope.setGlobal(this, sourceFile, options);\n this.visit(sourceFile, innerOptions);\n });\n\n this.currentScope = currentScope;\n this.currentModuleIndex = currentModuleIndex;\n }\n\n // [globalObjectVal]\n this.scope.getGlobal(this, sourceFile, this.pushValueOptions(options));\n // [exports]\n this.emitHelper(\n sourceFile,\n this.pushValueOptions(options),\n this.helpers.getModule({ moduleIndex }),\n );\n }\n\n public capture(func: () => void): CaptureResult {\n const originalCapturedBytecode = this.capturedBytecode;\n this.capturedBytecode = [];\n const originalPC = this.pc;\n this.pc = 0;\n func();\n const capturedBytecode = this.capturedBytecode;\n this.capturedBytecode = originalCapturedBytecode;\n const capturedLength = this.pc;\n this.pc = originalPC;\n return { length: capturedLength, bytecode: capturedBytecode };\n }\n\n public toBuffer(value: string): Buffer {\n return Buffer.from(value, 'utf8');\n }\n\n public plainOptions(options: VisitOptions): VisitOptions {\n return {\n ...options,\n pushValue: false,\n setValue: false,\n catchPC: undefined,\n };\n }\n\n public pushValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, pushValue: true };\n }\n\n public noPushValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, pushValue: false };\n }\n\n public setValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, setValue: true };\n }\n\n public noSetValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, setValue: false };\n }\n\n public noValueOptions(options: VisitOptions): VisitOptions {\n return { ...options, pushValue: false, setValue: false };\n }\n\n public breakPCOptions(\n options: VisitOptions,\n pc: ProgramCounter,\n ): VisitOptions {\n return { ...options, breakPC: pc };\n }\n\n public continuePCOptions(\n options: VisitOptions,\n pc: ProgramCounter,\n ): VisitOptions {\n return { ...options, continuePC: pc };\n }\n\n public catchPCOptions(\n options: VisitOptions,\n pc: ProgramCounter,\n ): VisitOptions {\n return { ...options, catchPC: pc };\n }\n\n public castOptions(options: VisitOptions, cast: Type): VisitOptions {\n return { ...options, cast };\n }\n\n public noCastOptions(options: VisitOptions): VisitOptions {\n return { ...options, cast: undefined };\n }\n\n public superClassOptions(\n options: VisitOptions,\n superClass: Name,\n ): VisitOptions {\n return { ...options, superClass };\n }\n\n public noSuperClassOptions(options: VisitOptions): VisitOptions {\n return { ...options, superClass: undefined };\n }\n\n public reportError(node: Node, message: string, code: DiagnosticCode): void {\n this.context.reportError(node, message, code);\n }\n\n public reportUnsupported(node: Node): void {\n this.context.reportUnsupported(node);\n }\n\n public getType(node: Node, required: boolean = false): Type | undefined {\n return this.context.getType(node, required);\n }\n\n public getSymbol(node: Node, required: boolean = false): Symbol | undefined {\n return this.context.getSymbol(node, required);\n }\n\n public isOnlyGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isOnlyGlobal(node, type, name);\n }\n\n public isGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isGlobal(node, type, name);\n }\n\n public isGlobalSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isGlobalSymbol(node, symbol, name);\n }\n\n public hasExport(sourceFile: SourceFile, name: string): boolean {\n return (this.exportMap[sourceFile.getFilePath()] || new Set()).has(name);\n }\n\n public addExport(name: string): void {\n const filePath = this.assertNotNull(\n this.reverseModuleMap[this.currentModuleIndex],\n );\n let fileExports = this.exportMap[filePath];\n if (fileExports == null) {\n fileExports = new Set();\n this.exportMap[filePath] = fileExports;\n }\n\n fileExports.add(name);\n }\n\n public assertUnreachable(value: never): never {\n throw new Error('Should not be reached.');\n }\n\n public assertNotNull<T>(value: T | undefined | null): T {\n return this.context.assertNotNull(value);\n }\n\n public filterNotNull<T>(value: T | undefined | null): value is T {\n return value != null;\n }\n\n protected abstract createScope(\n node: Node,\n index: number,\n parent: TScope | undefined,\n ): TScope;\n\n private emitPush(node: Node, value: Buffer): void {\n if (value.length <= OPCODE_TO_BYTECODE.PUSHBYTES75) {\n this.emitOpByte(node, value.length, value);\n } else if (value.length < 0x100) {\n this.emitOp(\n node,\n 'PUSHDATA1',\n new ClientScriptBuilder()\n .emitUInt8(value.length)\n .emit(value)\n .build(),\n );\n } else if (value.length < 0x10000) {\n this.emitOp(\n node,\n 'PUSHDATA2',\n new ClientScriptBuilder()\n .emitUInt16LE(value.length)\n .emit(value)\n .build(),\n );\n // TODO: Check this condition if (data.Length < 0x100000000L)\n } else {\n this.emitOp(\n node,\n 'PUSHDATA4',\n new ClientScriptBuilder()\n .emitUInt32LE(value.length)\n .emit(value)\n .build(),\n );\n }\n }\n\n private emitOpByte(\n node: Node,\n byteCodeIn: ByteCode | null,\n buffer?: Buffer | null | undefined,\n ): void {\n const byteCode = `${byteCodeIn == null ? '' : byteCodeIn}`;\n const byteCodeBuffer = BYTECODE_TO_BYTECODE_BUFFER[byteCode];\n if (byteCodeBuffer == null) {\n throw new UnknownOpError(byteCode);\n }\n let value = byteCodeBuffer;\n if (buffer != null) {\n value = Buffer.concat([byteCodeBuffer, buffer]);\n }\n this.emitRaw(node, value);\n }\n\n private emitRaw(node: Node, value: Buffer): void {\n this.push(node, value);\n this.pc += value.length;\n }\n\n private emitJump(node: Node, jump: Jump): void {\n this.push(node, jump);\n this.pc += 3;\n }\n\n private push(node: Node, value: Buffer | Jump): void {\n if (this.capturedBytecode != null) {\n this.capturedBytecode.push([node, value]);\n } else {\n this.bytecode.push([node, value]);\n }\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { Name, Scope } from './Scope';\nimport { ProgramCounter } from '../pc';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nimport * as constants from '../../constants';\n\nclass IdentifierName implements Name {\n public nameBrand: number = 0;\n constructor(public readonly value: string) {}\n}\n\nexport class ResolvedScope implements Scope {\n private position: number = 0;\n private variables: { [name: string]: number } = {};\n private uniqueVariables: Map<Name, number> = new Map();\n private scopeLength: number;\n private addScope: boolean;\n private scopeCount: number;\n\n constructor(\n private readonly variableCount: number,\n private readonly parent?: ResolvedScope | undefined,\n ) {\n if (this.parent == null) {\n this.addScope = true;\n this.scopeCount = 1;\n this.scopeLength = 1;\n } else {\n this.addScope = variableCount > 0;\n this.scopeCount = this.addScope ? 1 : 0;\n this.scopeLength = this.parent.scopeLength + this.scopeCount;\n }\n }\n\n public add(name: string): Name {\n const identifier = new IdentifierName(name);\n const existing = this.variables[name];\n if (existing != null) {\n return identifier;\n }\n\n this.variables[identifier.value] = this.position;\n this.position += 1;\n if (this.position > this.variableCount) {\n throw new Error(\n `Something went wrong. Name: ${name} Position: ${\n this.position\n } Count: ${this.variableCount}`,\n );\n }\n return identifier;\n }\n\n public addUnique(): Name {\n const name = { nameBrand: 0 };\n this.uniqueVariables.set(name, this.position);\n this.position += 1;\n if (this.position > this.variableCount) {\n throw new Error(\n `Something went wrong. Position: ${this.position} Count: ${\n this.variableCount\n }`,\n );\n }\n return name;\n }\n\n // [value]\n public set(\n sb: ScriptBuilder,\n node: Node,\n optionsIn: VisitOptions,\n name: Name | string,\n scopeLength: number = this.scopeLength,\n scopePosition: number = 0,\n ): void {\n const options = sb.pushValueOptions(optionsIn);\n const position = this.getPosition(name);\n if (position == null) {\n if (this.parent == null) {\n sb.reportError(\n node,\n `Unknown reference: ${name}`,\n DiagnosticCode.REFERENCE_ERROR,\n );\n } else {\n this.parent.set(\n sb,\n node,\n options,\n name,\n scopeLength,\n scopePosition + this.scopeCount,\n );\n }\n } else {\n // [normal]\n sb.emitHelper(node, options, sb.helpers.createNormalCompletion);\n // [scope, normal]\n this.loadScope(sb, node, scopeLength, scopePosition);\n // [position, scope, normal]\n sb.emitPushInt(node, position);\n // [normal, position, scope]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n }\n\n public get(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n name: Name | string,\n scopeLength: number = this.scopeLength,\n scopePosition: number = 0,\n ): void {\n const position = this.getPosition(name);\n if (position == null) {\n if (this.parent == null) {\n if (typeof name === 'string' && sb.helpers.globalProperties.has(name)) {\n // [val]\n sb.emitHelper(\n node,\n options,\n sb.helpers.getGlobalProperty({ property: name }),\n );\n } else {\n sb.reportError(\n node,\n `Unknown reference: ${name}`,\n DiagnosticCode.REFERENCE_ERROR,\n );\n }\n } else {\n this.parent.get(\n sb,\n node,\n options,\n name,\n scopeLength,\n scopePosition + this.scopeCount,\n );\n }\n } else {\n this.loadScope(sb, node, scopeLength, scopePosition);\n sb.emitPushInt(node, position);\n sb.emitOp(node, 'PICKITEM');\n sb.emitHelper(node, options, sb.helpers.pickCompletionVal);\n }\n }\n\n public getThis(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [[scopes, this]]\n this.loadAll(sb, node);\n // [1, [scopes, this]]\n sb.emitPushInt(node, 1);\n // [this]\n sb.emitOp(node, 'PICKITEM');\n }\n\n public setThis(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n // [[scopes, this], val]\n this.loadAll(sb, node);\n // [1, [scopes, this], val]\n sb.emitPushInt(node, 1);\n // [val, 1, [scopes, this]]\n sb.emitOp(node, 'ROT');\n // []\n sb.emitOp(node, 'SETITEM');\n }\n\n public getGlobal(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.parent == null) {\n // [[scopes, this, global]]\n this.loadAll(sb, node);\n // [2, [scopes, this, global]]\n sb.emitPushInt(node, 2);\n // [this]\n sb.emitOp(node, 'PICKITEM');\n } else {\n this.parent.getGlobal(sb, node, options);\n }\n }\n\n public setGlobal(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n if (this.parent == null) {\n // [[scopes, this, global], val]\n this.loadAll(sb, node);\n // [[scopes, this, global], val, [scopes, this, global]]\n sb.emitOp(node, 'TUCK');\n // [val, [scopes, this, global], val, [scopes, this, global]]\n sb.emitOp(node, 'OVER');\n // [2, val, [scopes, this, global], val, [scopes, this, global]]\n sb.emitPushInt(node, 2);\n // [val, 2, [scopes, this, global], val, [scopes, this, global]]\n sb.emitOp(node, 'SWAP');\n // [val, [scopes, this, global]]\n sb.emitOp(node, 'SETITEM');\n // [1, val, [scopes, this, global]]\n sb.emitPushInt(node, 1);\n // [val, 1, [scopes, this, global]]\n sb.emitOp(node, 'SWAP');\n // []\n sb.emitOp(node, 'SETITEM');\n } else {\n this.parent.setGlobal(sb, node, options);\n }\n }\n\n public hasBinding(name: string): boolean {\n return (\n this.variables[name] != null ||\n (this.parent != null && this.parent.hasBinding(name))\n );\n }\n\n public pushAll(sb: ScriptBuilder, node: Node, options: VisitOptions): void {\n sb.emitOp(node, 'DUPFROMALTSTACK');\n }\n\n public emit(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n if (this.addScope) {\n this.surround(sb, node, options, func);\n } else {\n func(options);\n }\n }\n\n private surround(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n if (this.parent == null) {\n // [global]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n // [this, global]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createUndefined,\n );\n // [0, this, global]\n sb.emitPushInt(node, 0);\n // [scopes, this, global]\n sb.emitOp(node, 'NEWSTRUCT');\n // [3, scopes, this, global]\n sb.emitPushInt(node, 3);\n // [[scopes, this, global]]\n sb.emitOp(node, 'PACK');\n // [[scopes, this, global], [scopes, this, global]]\n sb.emitOp(node, 'DUP');\n // [[scopes, this, global]]\n sb.emitOp(node, 'TOALTSTACK');\n } else {\n // [[scopes, this]]\n sb.emitOp(node, 'DUPFROMALTSTACK');\n }\n // [0, [scopes, this]]\n sb.emitPushInt(node, 0);\n // [scopes]\n sb.emitOp(node, 'PICKITEM');\n // [0, scopes]\n sb.emitPushInt(node, 0);\n // [scope, scopes]\n sb.emitOp(node, 'NEWARRAY');\n // [idx, scope, scopes]\n sb.emitPushInt(node, 0);\n // TODO: Should we just loop at compile time?\n sb.withProgramCounter((loopPC) => {\n // [idx, idx, scope, scopes]\n sb.emitOp(node, 'DUP');\n // [count, idx, idx, scope, scopes]\n sb.emitPushInt(node, this.variableCount);\n // [idx < count, idx, scope, scopes]\n sb.emitOp(node, 'LT');\n // [idx, scope, scopes]\n sb.emitJmp(node, 'JMPIFNOT', loopPC.getLast());\n // [scope, idx, scope, scopes]\n sb.emitOp(node, 'OVER');\n // TODO: throw ReferenceError once it's defined on global\n sb.emitPushString(node, 'Referenced variable before it was defined');\n // [error, scope, idx, scope, scopes]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createString,\n );\n // [throw, scope, idx, scope, scopes]\n sb.emitHelper(\n node,\n sb.pushValueOptions(options),\n sb.helpers.createThrowCompletion,\n );\n // [idx, scope, scopes]\n sb.emitOp(node, 'APPEND');\n // [idx, scope, scopes]\n sb.emitOp(node, 'INC');\n // [idx, scope, scopes]\n sb.emitJmp(node, 'JMP', loopPC.getFirst());\n });\n // [scope, scopes]\n sb.emitOp(node, 'DROP');\n // []\n sb.emitOp(node, 'APPEND');\n\n const { breakPC, continuePC, catchPC } = options;\n const nonLocal = breakPC != null || continuePC != null || catchPC != null;\n sb.withProgramCounter((pc) => {\n let innerOptions = options;\n if (breakPC != null) {\n innerOptions = sb.breakPCOptions(innerOptions, pc.getLast());\n }\n\n if (continuePC != null) {\n innerOptions = sb.continuePCOptions(innerOptions, pc.getLast());\n }\n\n if (catchPC != null) {\n innerOptions = sb.catchPCOptions(innerOptions, pc.getLast());\n }\n\n func(innerOptions);\n if (nonLocal) {\n sb.emitPushInt(node, constants.NORMAL_COMPLETION);\n }\n });\n\n if (this.parent == null) {\n // [[scopes, undefined]]\n sb.emitOp(node, 'FROMALTSTACK');\n sb.emitOp(node, 'DROP');\n } else {\n // [[scopes, undefined]]\n sb.emitOp(node, 'DUPFROMALTSTACK');\n // [0, [scopes, undefined]]\n sb.emitPushInt(node, 0);\n // [scopes]\n sb.emitOp(node, 'PICKITEM');\n // [scopes, scopes]\n sb.emitOp(node, 'DUP');\n // [size, scopes]\n sb.emitOp(node, 'ARRAYSIZE');\n // [size - 1, scopes]\n sb.emitOp(node, 'DEC');\n // []\n sb.emitOp(node, 'REMOVE');\n }\n\n this.emitNonLocal(sb, node, constants.BREAK_COMPLETION, breakPC);\n this.emitNonLocal(sb, node, constants.CONTINUE_COMPLETION, continuePC);\n this.emitNonLocal(sb, node, constants.CATCH_COMPLETION, catchPC);\n\n if (nonLocal) {\n sb.emitOp(node, 'DROP');\n }\n }\n\n private emitNonLocal(\n sb: ScriptBuilder,\n node: Node,\n completion: number,\n pc: ProgramCounter | undefined,\n ): void {\n if (pc != null) {\n sb.withProgramCounter((innerPC) => {\n sb.emitOp(node, 'DUP');\n sb.emitPushInt(node, completion);\n sb.emitOp(node, 'NUMEQUAL');\n sb.emitJmp(node, 'JMPIF', pc);\n });\n }\n }\n\n private getPosition(name: Name | string): number | null | undefined {\n if (typeof name === 'string') {\n return this.variables[name];\n } else if (name instanceof IdentifierName) {\n return this.variables[name.value];\n }\n\n return this.uniqueVariables.get(name);\n }\n\n private loadScope(\n sb: ScriptBuilder,\n node: Node,\n scopeLength: number,\n scopePosition: number,\n ): void {\n this.loadAll(sb, node);\n // [0,[scopes, this]]\n sb.emitPushInt(node, 0);\n // [scopes]\n sb.emitOp(node, 'PICKITEM');\n // [scopeIndex, scopes]\n sb.emitPushInt(node, scopeLength - scopePosition - 1);\n // [scope]\n sb.emitOp(node, 'PICKITEM');\n }\n\n private loadAll(sb: ScriptBuilder, node: Node): void {\n // [[scopes, this]]\n sb.emitOp(node, 'DUPFROMALTSTACK');\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ResolvedScope } from './ResolvedScope';\nimport { Name, Scope } from './Scope';\nimport { ScriptBuilder } from '../sb';\nimport { VisitOptions } from '../types';\n\nexport class CapturingScope implements Scope {\n private variableCount: number = 0;\n private bindings: Set<string> = new Set();\n\n constructor(\n public readonly node: Node,\n public readonly index: number,\n public readonly parent?: CapturingScope | undefined,\n ) {}\n\n public add(name: string): Name {\n this.variableCount += 1;\n this.bindings.add(name);\n return { nameBrand: 0 };\n }\n\n public addUnique(): Name {\n this.variableCount += 1;\n return { nameBrand: 0 };\n }\n\n public set(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public get(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public getThis(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public setThis(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public getGlobal(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public setGlobal(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public hasBinding(name: string): boolean {\n return (\n this.bindings.has(name) ||\n (this.parent != null && this.parent.hasBinding(name))\n );\n }\n\n public pushAll(sb: ScriptBuilder, node: Node): void {\n sb.emitOp(node, 'NOP');\n }\n\n public emit(\n sb: ScriptBuilder,\n node: Node,\n options: VisitOptions,\n func: (options: VisitOptions) => void,\n ): void {\n sb.emitOp(node, 'NOP');\n func(options);\n sb.emitOp(node, 'NOP');\n }\n\n public resolve(parent?: ResolvedScope | undefined): ResolvedScope {\n return new ResolvedScope(this.variableCount, parent);\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { BaseScriptBuilder } from './BaseScriptBuilder';\nimport { CapturingScope, ResolvedScope } from '../scope';\nimport { ScriptBuilder } from './ScriptBuilder';\n\nexport class ScopeCapturingScriptBuilder\n extends BaseScriptBuilder<CapturingScope>\n implements ScriptBuilder {\n private readonly scopes: CapturingScope[] = [];\n private readonly resolvedScopes: Map<\n Node,\n Map<number, ResolvedScope>\n > = new Map();\n\n public process(): void {\n super.process();\n this.resolveScopes();\n }\n\n public getScopes(): Map<Node, Map<number, ResolvedScope>> {\n return this.resolvedScopes;\n }\n\n protected createScope(\n node: Node,\n index: number,\n parent?: CapturingScope | undefined,\n ): CapturingScope {\n const scope = new CapturingScope(node, index, parent);\n this.scopes.push(scope);\n return scope;\n }\n\n private resolveScopes(): void {\n this.scopes.forEach((scope) => {\n this.resolveScope(scope);\n });\n }\n\n private resolveScope(scope: CapturingScope): ResolvedScope {\n let forNode = this.resolvedScopes.get(scope.node);\n if (forNode == null) {\n forNode = new Map();\n this.resolvedScopes.set(scope.node, forNode);\n }\n\n let resolved = forNode.get(scope.index);\n if (resolved == null) {\n const parent = scope.parent;\n if (parent == null) {\n resolved = scope.resolve();\n } else {\n resolved = scope.resolve(this.resolveScope(parent));\n }\n\n forNode.set(scope.index, resolved);\n }\n\n return resolved;\n }\n}\n","import Ast, { Node, SourceFile } from 'ts-simple-ast';\n\nimport { BaseScriptBuilder } from './BaseScriptBuilder';\nimport { Context } from '../../Context';\nimport { ResolvedScope } from '../scope';\nimport { ScriptBuilder } from './ScriptBuilder';\nimport { Helper, Helpers } from '../helper';\n\nexport interface EmittingScriptBuilderOptions {\n context: Context;\n ast: Ast;\n sourceFile: SourceFile;\n scopes: Map<Node, Map<number, ResolvedScope>>;\n helpers: Helpers;\n allHelpers: Helper[];\n}\n\nexport class EmittingScriptBuilder extends BaseScriptBuilder<ResolvedScope>\n implements ScriptBuilder {\n private readonly scopes: Map<Node, Map<number, ResolvedScope>>;\n\n constructor({\n context,\n scopes,\n helpers,\n ast,\n sourceFile,\n allHelpers,\n }: EmittingScriptBuilderOptions) {\n super(context, helpers, ast, sourceFile, allHelpers);\n this.scopes = scopes;\n }\n\n protected createScope(node: Node, index: number): ResolvedScope {\n return this.assertNotNull(\n this.assertNotNull(this.scopes.get(node)).get(index),\n );\n }\n}\n","import { Node } from 'ts-simple-ast';\n\nimport { ScriptBuilder } from './ScriptBuilder';\nimport { ScopeCapturingScriptBuilder } from './ScopeCapturingScriptBuilder';\nimport { Helper } from '../helper';\nimport { VisitOptions } from '../types';\n\nexport class HelperCapturingScriptBuilder extends ScopeCapturingScriptBuilder\n implements ScriptBuilder {\n private readonly capturedHelpersSet: Set<Helper> = new Set();\n private readonly capturedHelpers: Helper[] = [];\n\n public getHelpers(): Helper[] {\n return [...this.capturedHelpers];\n }\n\n public emitHelper<T extends Node>(\n node: T,\n options: VisitOptions,\n helper: Helper<T>,\n ): void {\n if (!this.capturedHelpersSet.has(helper)) {\n this.capturedHelpersSet.add(helper);\n this.capturedHelpers.push(helper);\n helper.emitGlobal(this, node, options);\n }\n helper.emit(this, node, options);\n }\n}\n","import { DiagnosticCategory, Node, ts } from 'ts-simple-ast';\n\nexport class CompilerDiagnostic implements ts.Diagnostic {\n constructor(\n private readonly node: Node,\n public readonly messageText: string,\n public readonly code: number,\n public readonly category: DiagnosticCategory,\n ) {}\n\n public get file(): ts.SourceFile | undefined {\n return this.node.getSourceFile().compilerNode;\n }\n\n public get start(): number {\n return this.node.getStart();\n }\n\n public get length(): number {\n return this.node.getWidth();\n }\n\n public get source(): string {\n return this.node.getText();\n }\n}\n","// tslint:disable ban-types\nimport {\n DiagnosticCategory,\n Node,\n Symbol,\n Type,\n TypeFlags,\n TypeGuards,\n ts,\n Identifier,\n} from 'ts-simple-ast';\n\nimport { CompilerDiagnostic } from './CompilerDiagnostic';\nimport { DiagnosticCode } from './DiagnosticCode';\nimport { Globals, Libs, LibAliases } from './symbols';\n\nimport * as typeUtils from './typeUtils';\n\nexport class Context {\n public readonly diagnostics: ts.Diagnostic[] = [];\n\n constructor(\n private readonly globals: Globals,\n private readonly libs: Libs,\n private readonly libAliases: LibAliases,\n ) {}\n\n public reportError(node: Node, message: string, code: DiagnosticCode): void {\n this.diagnostics.push(\n new CompilerDiagnostic(node, message, code, DiagnosticCategory.Error),\n );\n }\n\n public reportWarning(\n node: Node,\n message: string,\n code: DiagnosticCode,\n ): void {\n this.diagnostics.push(\n new CompilerDiagnostic(node, message, code, DiagnosticCategory.Warning),\n );\n }\n\n public reportUnsupported(node: Node): void {\n this.reportError(\n node,\n 'Unsupported syntax',\n DiagnosticCode.UNSUPPORTED_SYNTAX,\n );\n }\n\n public reportTypeError(node: Node): void {\n this.reportError(\n node,\n 'Could not infer type. Please add an explicit type annotation.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n }\n\n public reportTypeWarning(node: Node): void {\n this.reportWarning(\n node,\n 'Could not infer type. Deoptimized implementation will be used. Add an explicit type annotation ' +\n 'to optimize the output.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n }\n\n public getType(node: Node, required: boolean = false): Type | undefined {\n let type = this.getNotAnyType(node.getType());\n\n if (type == null && TypeGuards.isExpression(node)) {\n type = this.getNotAnyType(node.getContextualType());\n }\n\n if (type == null) {\n if (required) {\n this.reportTypeError(node);\n } else {\n this.reportTypeWarning(node);\n }\n }\n\n return type;\n }\n\n public getTypeOfSymbol(\n symbol: Symbol | undefined,\n node: Node,\n required: boolean = false,\n ): Type | undefined {\n if (symbol == null) {\n return undefined;\n }\n\n const type = this.getNotAnyType(symbol.getTypeAtLocation(node));\n if (type == null) {\n if (required) {\n this.reportTypeError(node);\n } else {\n this.reportTypeWarning(node);\n }\n }\n\n return type;\n }\n\n public getSymbol(node: Node, required: boolean = false): Symbol | undefined {\n const symbol = node.getSymbol();\n if (symbol == null) {\n const message = 'Could not determine source symbol.';\n if (required) {\n this.reportError(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n } else {\n this.reportWarning(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n }\n\n return undefined;\n }\n\n const aliased = symbol.getAliasedSymbol();\n if (aliased != null) {\n return aliased;\n }\n\n return symbol;\n }\n\n public getSymbolForType(\n node: Node,\n type: Type | undefined,\n required: boolean = false,\n ): Symbol | undefined {\n if (type == null) {\n return undefined;\n }\n\n const symbol = type.getSymbol();\n if (symbol == null) {\n const message = `Could not determine source symbol for type: ${type.getText()}.`;\n if (required) {\n this.reportError(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n } else {\n this.reportWarning(node, message, DiagnosticCode.UNKNOWN_SYMBOL);\n }\n\n return undefined;\n }\n\n const aliased = symbol.getAliasedSymbol();\n if (aliased != null) {\n return aliased;\n }\n\n return symbol;\n }\n\n public assertUnreachable(value: never): never {\n throw new Error('Should not be reached.');\n }\n\n public assertNotNull<T>(value: T | undefined | null): T {\n if (value == null) {\n throw new Error('Something went wrong. Unexpected null.');\n }\n\n return value;\n }\n\n public isOnlyGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return (\n this.isSymbolic(type) &&\n this.isGlobalSymbol(node, this.getSymbolForType(node, type), name)\n );\n }\n\n // TODO: This should check unions\n public isGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return (\n this.isSymbolic(type) &&\n this.isGlobalSymbol(node, this.getSymbolForType(node, type), name)\n );\n }\n\n public isGlobalSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Globals,\n ): boolean {\n return symbol === this.globals[name];\n }\n\n public isOnlyLib(\n node: Node,\n type: Type | undefined,\n name: keyof Libs,\n ): boolean {\n return (\n this.isSymbolic(type) &&\n this.isLibSymbol(node, this.getSymbolForType(node, type), name)\n );\n }\n\n public isLibSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Libs,\n ): boolean {\n return symbol === this.libs[name];\n }\n\n public isLibAlias(\n identifier: Identifier | undefined,\n name: keyof LibAliases,\n ): boolean {\n if (identifier == null) {\n return false;\n }\n\n return this.libAliases[name].has(identifier);\n }\n\n private isSymbolic(type: Type | undefined): boolean {\n return (\n type == null ||\n (!typeUtils.isLiteral(type) &&\n !typeUtils.isPrimitive(type) &&\n !typeUtils.isTuple(type) &&\n !typeUtils.isUnion(type) &&\n !typeUtils.isIntersection(type))\n );\n }\n\n private getNotAnyType(type: Type | undefined): Type | undefined {\n // tslint:disable-next-line no-bitwise\n if (type == null || (type.getFlags() & TypeFlags.Any) !== 0) {\n return undefined;\n }\n\n return type;\n }\n}\n","// tslint:disable ban-types no-bitwise\nimport AST, { SourceFile, Symbol, ts, Identifier } from 'ts-simple-ast';\n\nimport path from 'path';\n\nexport interface Globals {\n readonly Array: Symbol;\n readonly Buffer: Symbol;\n readonly process: Symbol;\n readonly AccountBase: Symbol;\n readonly AssetBase: Symbol;\n readonly AttributeBase: Symbol;\n readonly BlockBase: Symbol;\n readonly ContractBase: Symbol;\n readonly HeaderBase: Symbol;\n readonly InputBase: Symbol;\n readonly OutputBase: Symbol;\n readonly TransactionBase: Symbol;\n readonly ValidatorBase: Symbol;\n readonly StorageContextBase: Symbol;\n readonly StorageIteratorBase: Symbol;\n readonly syscall: Symbol;\n}\n\nconst findInterfaceFile = (ast: AST, name: string): SourceFile | undefined => {\n const files = ast.getSourceFiles();\n return files.find((file) => {\n if (!file.isDeclarationFile()) {\n return false;\n }\n\n let bufferInterface = file.getInterface(name);\n const globalNamespace = file.getNamespace('global');\n let isGlobalAugmentation = false;\n if (bufferInterface == null && globalNamespace != null) {\n bufferInterface = globalNamespace.getInterface(name);\n isGlobalAugmentation = true;\n }\n\n if (bufferInterface == null) {\n return false;\n }\n\n return (\n isGlobalAugmentation ||\n (bufferInterface.compilerNode.flags & ts.NodeFlags.GlobalAugmentation) !==\n 0\n );\n });\n};\n\nexport const getGlobals = (ast: AST): Globals => {\n let bufferFile = findInterfaceFile(ast, 'Buffer');\n if (bufferFile == null) {\n bufferFile = ast.addExistingSourceFileIfExists(\n require.resolve('@types/node/index.d.ts'),\n );\n }\n if (bufferFile == null) {\n throw new Error('Could not find Buffer');\n }\n const buffer = bufferFile.getInterfaceOrThrow('Buffer');\n\n const typeChecker = ast.getTypeChecker().compilerObject as any;\n // @ts-ignore\n const array = new Symbol(\n // @ts-ignore\n ast.global,\n typeChecker.createArrayType(typeChecker.getAnyType()).symbol as ts.Symbol,\n ).getDeclaredType();\n\n let neoFile = findInterfaceFile(ast, 'AccountBase');\n if (neoFile == null) {\n ast.addExistingSourceFiles(\n path.join(\n path.dirname(require.resolve('@neo-one/smart-contract')),\n '**',\n '*.ts',\n ),\n );\n }\n\n neoFile = findInterfaceFile(ast, 'AccountBase');\n if (neoFile == null) {\n throw new Error('Could not find NEO type definition file');\n }\n\n const neoGlobal = neoFile.getNamespaceOrThrow('global');\n\n return {\n Array: array.getSymbolOrThrow(),\n Buffer: buffer.getSymbolOrThrow(),\n process: bufferFile\n .getVariableDeclarationOrThrow('process')\n .getSymbolOrThrow(),\n AccountBase: neoGlobal\n .getInterfaceOrThrow('AccountBase')\n .getSymbolOrThrow(),\n AssetBase: neoGlobal.getInterfaceOrThrow('AssetBase').getSymbolOrThrow(),\n AttributeBase: neoGlobal\n .getInterfaceOrThrow('AttributeBase')\n .getSymbolOrThrow(),\n BlockBase: neoGlobal.getInterfaceOrThrow('BlockBase').getSymbolOrThrow(),\n ContractBase: neoGlobal\n .getInterfaceOrThrow('ContractBase')\n .getSymbolOrThrow(),\n HeaderBase: neoGlobal.getInterfaceOrThrow('HeaderBase').getSymbolOrThrow(),\n InputBase: neoGlobal.getInterfaceOrThrow('InputBase').getSymbolOrThrow(),\n OutputBase: neoGlobal.getInterfaceOrThrow('OutputBase').getSymbolOrThrow(),\n TransactionBase: neoGlobal\n .getInterfaceOrThrow('TransactionBase')\n .getSymbolOrThrow(),\n ValidatorBase: neoGlobal\n .getInterfaceOrThrow('ValidatorBase')\n .getSymbolOrThrow(),\n StorageContextBase: neoGlobal\n .getInterfaceOrThrow('StorageContextBase')\n .getSymbolOrThrow(),\n StorageIteratorBase: neoGlobal\n .getInterfaceOrThrow('StorageIteratorBase')\n .getSymbolOrThrow(),\n syscall: neoGlobal.getFunctionOrThrow('syscall').getSymbolOrThrow(),\n };\n};\n\nexport interface Libs {\n readonly SmartContract: Symbol;\n readonly MapStorage: Symbol;\n readonly SetStorage: Symbol;\n readonly Fixed: Symbol;\n readonly constant: Symbol;\n readonly verify: Symbol;\n}\n\nconst findLibFile = (ast: AST): SourceFile | undefined => {\n const files = ast.getSourceFiles();\n return files.find((file) => file.getClass('MapStorage') != null);\n};\n\nexport const getLibs = (ast: AST): Libs => {\n let libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n ast.addExistingSourceFiles(\n path.join(\n path.dirname(require.resolve('@neo-one/smart-contract')),\n '**',\n '*.ts',\n ),\n );\n }\n\n libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n throw new Error('Could not find NEO lib file');\n }\n\n const libFile = libFileIn;\n\n return {\n get SmartContract(): Symbol {\n return libFile.getClassOrThrow('SmartContract').getSymbolOrThrow();\n },\n get MapStorage(): Symbol {\n return libFile.getClassOrThrow('MapStorage').getSymbolOrThrow();\n },\n get SetStorage(): Symbol {\n return libFile.getClassOrThrow('SetStorage').getSymbolOrThrow();\n },\n get Fixed(): Symbol {\n return libFile.getTypeAliasOrThrow('Fixed').getSymbolOrThrow();\n },\n get constant(): Symbol {\n return libFile.getFunctionOrThrow('constant').getSymbolOrThrow();\n },\n get verify(): Symbol {\n return libFile.getFunctionOrThrow('verify').getSymbolOrThrow();\n },\n };\n};\n\nexport interface LibAliases {\n readonly Address: Set<Identifier>;\n readonly Hash256: Set<Identifier>;\n readonly Signature: Set<Identifier>;\n readonly PublicKey: Set<Identifier>;\n}\n\nexport const getLibAliases = (ast: AST): LibAliases => {\n let libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n ast.addExistingSourceFiles(\n path.join(\n path.dirname(require.resolve('@neo-one/smart-contract')),\n '**',\n '*.ts',\n ),\n );\n }\n\n libFileIn = findLibFile(ast);\n if (libFileIn == null) {\n throw new Error('Could not find NEO lib file');\n }\n\n const libFile = libFileIn;\n\n return {\n get Address(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('Address')\n .getReferencingNodes() as Identifier[]);\n },\n get Hash256(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('Hash256')\n .getReferencingNodes() as Identifier[]);\n },\n get Signature(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('Signature')\n .getReferencingNodes() as Identifier[]);\n },\n get PublicKey(): Set<Identifier> {\n return new Set(libFile\n .getTypeAliasOrThrow('PublicKey')\n .getReferencingNodes() as Identifier[]);\n },\n };\n};\n","import Ast, { SourceFile } from 'ts-simple-ast';\n\nimport {\n EmittingScriptBuilder,\n HelperCapturingScriptBuilder,\n ScopeCapturingScriptBuilder,\n} from './sb';\nimport { Context } from '../Context';\nimport { CompileResult } from './types';\nimport { getGlobals, getLibs, getLibAliases } from '../symbols';\nimport { createHelpers } from './helper';\n\nexport interface CompileOptions {\n ast: Ast;\n sourceFile: SourceFile;\n context?: Context;\n}\n\nexport const compile = ({\n ast,\n sourceFile,\n context: contextIn,\n}: CompileOptions): CompileResult => {\n const context =\n contextIn || new Context(getGlobals(ast), getLibs(ast), getLibAliases(ast));\n const helpers = createHelpers();\n\n const helperScriptBuilder = new HelperCapturingScriptBuilder(\n context,\n helpers,\n ast,\n sourceFile,\n );\n helperScriptBuilder.process();\n\n const scopeScriptBuilder = new ScopeCapturingScriptBuilder(\n context,\n helpers,\n ast,\n sourceFile,\n helperScriptBuilder.getHelpers(),\n );\n scopeScriptBuilder.process();\n\n const emittingScriptBuilder = new EmittingScriptBuilder({\n context,\n scopes: scopeScriptBuilder.getScopes(),\n ast,\n sourceFile,\n helpers,\n allHelpers: helperScriptBuilder.getHelpers(),\n });\n emittingScriptBuilder.process();\n\n return {\n code: emittingScriptBuilder.getFinalBytecode(),\n context,\n };\n};\n","// tslint:disable ban-types\nimport Ast, { SourceFile, ts } from 'ts-simple-ast';\n\nimport appRootDir from 'app-root-dir';\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\n\nconst findRoot = async (\n dir: string | string[],\n filename: string,\n): Promise<string> => {\n let start = dir;\n\n if (typeof start === 'string') {\n if (start[start.length - 1] !== path.sep) {\n start += path.sep;\n }\n start = start.split(path.sep);\n }\n if (!start.length) {\n throw new Error('tsconfig.json not found in path');\n }\n\n start.pop();\n const currentDir = start.join(path.sep);\n const file = path.join(currentDir, filename);\n const exists = await fs.pathExists(file);\n if (exists) {\n return file;\n }\n\n return findRoot(start, filename);\n};\n\nexport const makeAst = async (dir: string): Promise<Ast> => {\n const tsConfigFilePath = await findRoot(dir, 'tsconfig.json');\n const res = ts.readConfigFile(tsConfigFilePath, (value) =>\n fs.readFileSync(value, 'utf8'),\n );\n const parseConfigHost = {\n fileExists: fs.existsSync,\n readDirectory: ts.sys.readDirectory,\n readFile: ts.sys.readFile,\n useCaseSensitiveFileNames: true,\n };\n const parsed = ts.parseJsonConfigFileContent(\n res.config,\n parseConfigHost,\n path.dirname(tsConfigFilePath),\n );\n\n return new Ast({ compilerOptions: parsed.options });\n};\n\nexport const getAst = async (dir: string): Promise<Ast> => {\n const ast = await makeAst(dir);\n ast.addExistingSourceFiles(path.join(dir, '**', '*.ts'));\n // For some reason this forces Ast to resolve references. Do not remove.\n ast.getPreEmitDiagnostics();\n return ast;\n};\n\nexport const getAstForSnippet = async (\n code: string,\n): Promise<{ ast: Ast; sourceFile: SourceFile }> => {\n const ast = await makeAst(appRootDir.get());\n const sourceFile = ast.createSourceFile('code.ts', code);\n // For some reason this forces Ast to resolve references. Do not remove.\n ast.getPreEmitDiagnostics();\n return { ast, sourceFile };\n};\n\nexport function notNull<TValue>(\n value: TValue | null | undefined,\n): value is TValue {\n return value != null;\n}\n","import path from 'path';\n\nimport { CompileResult } from './types';\n\nimport * as utils from '../utils';\nimport { compile } from './compile';\n\nexport const compileScript = async (\n scriptPath: string,\n): Promise<CompileResult> => {\n const ast = await utils.getAst(path.dirname(scriptPath));\n const sourceFile = ast.getSourceFileOrThrow(scriptPath);\n return compile({ ast, sourceFile });\n};\n","import { SyntaxKind } from 'ts-simple-ast';\n\nimport { Transpiler } from './transpiler';\n\nexport abstract class NodeTranspiler<TNode> {\n public abstract readonly kind: SyntaxKind;\n\n public abstract visitNode(transpiler: Transpiler, node: TNode): void;\n}\n","import {\n ClassDeclaration,\n SyntaxKind,\n TypeGuards,\n ParameterDeclaration,\n MethodDeclaration,\n Scope,\n} from 'ts-simple-ast';\n\nimport { NodeTranspiler } from '../NodeTranspiler';\nimport { Transpiler } from '../transpiler';\nimport * as typeUtils from '../../typeUtils';\nimport { DiagnosticCode } from '../../DiagnosticCode';\n\nconst DEPLOY_METHOD = 'deploy';\n\nexport class ClassDeclarationTranspiler extends NodeTranspiler<\n ClassDeclaration\n> {\n public readonly kind: SyntaxKind = SyntaxKind.ClassDeclaration;\n\n public visitNode(transpiler: Transpiler, node: ClassDeclaration): void {\n if (transpiler.isSmartContract(node)) {\n this.transpileSmartContract(transpiler, node);\n }\n }\n\n private transpileSmartContract(\n transpiler: Transpiler,\n node: ClassDeclaration,\n ): void {\n transpiler.visit(node.getBaseClass());\n\n this.transpileDeploy(transpiler, node);\n }\n\n // TODO: Lots of edge cases to handle here. E.g. readonly constructor properties\n private transpileDeploy(\n transpiler: Transpiler,\n node: ClassDeclaration,\n ): void {\n const existingDeploy = node.getMethod(DEPLOY_METHOD);\n if (existingDeploy != null) {\n transpiler.reportError(\n existingDeploy,\n 'The deploy method is reserved in SmartContract instances.',\n DiagnosticCode.UNSUPPORTED_SYNTAX,\n );\n return;\n }\n\n const ctor = node\n .getConstructors()\n .find((ctorDecl) => ctorDecl.isImplementation());\n let bodyText = '';\n let parameters: ParameterDeclaration[] = [];\n if (ctor == null) {\n const baseDeploy = this.getBaseDeploy(transpiler, node);\n if (baseDeploy != null) {\n bodyText = `\n super.deploy(${baseDeploy\n .getParameters()\n .map((param) => param.getName())\n .join(', ')});\n `;\n parameters = baseDeploy.getParameters();\n }\n } else {\n const firstStatement = ctor.getStatements()[0];\n if (\n firstStatement != null &&\n TypeGuards.isExpressionStatement(firstStatement)\n ) {\n const callExpr = firstStatement.getExpression();\n if (TypeGuards.isCallExpression(callExpr)) {\n const lhsrExpr = callExpr.getExpression();\n if (TypeGuards.isSuperExpression(lhsrExpr)) {\n // TODO: Handle case where constructor needs keep some statements\n firstStatement.replaceWithText(\n `super.deploy(${callExpr\n .getArguments()\n .map((arg) => arg.getText())\n .join(', ')});`,\n );\n }\n }\n }\n\n bodyText = ctor\n .getStatements()\n .map((statement) => statement.getText())\n .join('\\n');\n parameters = ctor.getParameters();\n }\n\n const deploy = node.addMethod({\n name: DEPLOY_METHOD,\n returnType: 'boolean',\n bodyText,\n parameters: parameters.map((param) => {\n const initializer = param.getInitializer();\n let type = param.getType().getText();\n const typeNode = param.getTypeNode();\n if (typeNode != null) {\n type = typeNode.getText();\n }\n return {\n name: param.getNameOrThrow(),\n type,\n initializer: initializer == null ? undefined : initializer.getText(),\n hasQuestionToken: param.hasQuestionToken(),\n isRestParameter: param.isRestParameter(),\n };\n }),\n scope: Scope.Public,\n });\n\n node.getInstanceProperties().forEach((property) => {\n if (\n (TypeGuards.isPropertyDeclaration(property) &&\n !property.isAbstract()) ||\n TypeGuards.isParameterDeclaration(property)\n ) {\n const name = TypeGuards.isPropertyDeclaration(property)\n ? property.getName()\n : property.getNameOrThrow();\n const type = property.getType();\n const typeNode = property.getTypeNode();\n\n if (type == null || typeNode == null) {\n transpiler.reportError(\n property,\n 'Could not determine type of property.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n } else if (\n typeUtils.isOnlyPrimitive(type) ||\n transpiler.isFixedType(property, type) ||\n transpiler.isOnlyGlobal(property, type, 'Buffer')\n ) {\n if (TypeGuards.isParameterDeclaration(property)) {\n deploy.addStatements(`\n this.${property.getName()} = ${property.getName()};\n `);\n }\n\n const init = property.getInitializer();\n let addAccessors = true;\n if (TypeGuards.isPropertyDeclaration(property) && init != null) {\n if (property.isReadonly()) {\n addAccessors = false;\n } else {\n deploy.addStatements(`\n this.${property.getName()} = ${init.getText()};\n `);\n }\n }\n\n if (addAccessors) {\n node.addGetAccessor({\n name,\n returnType: typeNode.getText(),\n bodyText: `\n return syscall('Neo.Storage.Get', syscall('Neo.Storage.GetContext'), '${name}') as ${typeNode.getText()};\n `,\n scope: property.getScope(),\n });\n node.addSetAccessor({\n name,\n parameters: [\n {\n name,\n type: typeNode.getText(),\n },\n ],\n bodyText: `\n syscall('Neo.Storage.Put', syscall('Neo.Storage.GetContext'), '${name}', ${name});\n `,\n scope: property.getScope(),\n });\n property.remove();\n }\n } else if (transpiler.isOnlyLib(property, type, 'MapStorage')) {\n property.setInitializer(\n `new MapStorage(syscall('Neo.Runtime.Serialize', '${name}'))`,\n );\n } else if (transpiler.isOnlyLib(property, type, 'SetStorage')) {\n property.setInitializer(\n `new SetStorage(syscall('Neo.Runtime.Serialize', '${name}'))`,\n );\n } else {\n transpiler.reportError(\n property,\n 'Unsupported SmartContract property.',\n DiagnosticCode.UNSUPPORTED_SYNTAX,\n );\n }\n }\n });\n\n deploy.addStatements(`\n return true;\n `);\n\n if (ctor != null) {\n // TODO: Handle case where constructor needs keep some statements\n ctor.remove();\n }\n }\n\n private getBaseDeploy(\n transpiler: Transpiler,\n node: ClassDeclaration,\n ): MethodDeclaration | undefined {\n const baseClass = node.getBaseClass();\n if (baseClass == null) {\n return undefined;\n }\n\n const deploy = baseClass.getInstanceMethod('deploy');\n if (deploy == null) {\n return this.getBaseDeploy(transpiler, baseClass);\n }\n\n return deploy;\n }\n}\n","import { ClassDeclarationTranspiler } from './ClassDeclarationTranspiler';\n\nexport default [ClassDeclarationTranspiler];\n","import { Node, ts } from 'ts-simple-ast';\n\nexport const isPublic = (node: Node): boolean =>\n // tslint:disable-next-line no-bitwise\n (node.getCombinedModifierFlags() & ts.ModifierFlags.Public) !== 0;\n","// tslint:disable ban-types\nimport Ast, {\n Node,\n ClassInstanceMemberTypes,\n ClassDeclaration,\n Type,\n Symbol,\n TypeGuards,\n ParameterDeclaration,\n Identifier,\n SyntaxKind,\n TypeNode,\n} from 'ts-simple-ast';\nimport { ABIParameter, ABIReturn, ABIFunction } from '@neo-one/client';\n\nimport { Context } from '../../Context';\nimport { DiagnosticCode } from '../../DiagnosticCode';\nimport { Globals, Libs, LibAliases } from '../../symbols';\nimport { NodeTranspiler } from '../NodeTranspiler';\nimport { Transpiler } from './Transpiler';\nimport declarations from '../declaration';\nimport * as nodeUtils from '../../nodeUtils';\nimport * as typeUtils from '../../typeUtils';\nimport { TranspileResult } from '../types';\n\nconst transpilers = [declarations];\n\ninterface Transpilers {\n [kind: number]: NodeTranspiler<any>;\n}\n\nexport class NEOTranspiler implements Transpiler {\n private readonly transpilers: Transpilers;\n\n constructor(\n private readonly context: Context,\n private readonly ast: Ast,\n private readonly smartContract: ClassDeclaration,\n ) {\n this.transpilers = (transpilers as Array<\n Array<new () => NodeTranspiler<any>>\n >)\n .reduce((acc, kindCompilers) => acc.concat(kindCompilers), [])\n .reduce(\n (acc, KindCompiler) => {\n const kindCompiler = new KindCompiler();\n if (acc[kindCompiler.kind] != null) {\n throw new Error(\n `Found duplicate compiler for kind ${kindCompiler.kind}`,\n );\n }\n\n acc[kindCompiler.kind] = kindCompiler;\n return acc;\n },\n {} as Transpilers,\n );\n }\n\n public process(): TranspileResult {\n const file = this.smartContract.getSourceFile();\n this.visit(file);\n\n const smartContract = file.getClassOrThrow(\n this.smartContract.getNameOrThrow(),\n );\n const methods = smartContract\n .getType()\n .getProperties()\n .map((symbol) => this.processProperty(symbol))\n .reduce((acc, values) => acc.concat(values), []);\n\n const verifySwitches: string[] = [];\n const applicationSwitches: string[] = [];\n const functions: ABIFunction[] = [];\n for (const [method, func] of methods) {\n const name = TypeGuards.isParameterDeclaration(method)\n ? method.getNameOrThrow()\n : method.getName();\n let methodSwitch;\n if (TypeGuards.isMethodDeclaration(method)) {\n let argsStatement = '';\n let args = '';\n if (method.getParameters().length > 0) {\n const argsTypes = method\n .getParameters()\n .map((param) => this.getTypeText(param, this.getType(param)))\n .join(',');\n argsStatement = `const args = syscall('Neo.Runtime.GetArgument', 1) as [${argsTypes}];\\n`;\n args = method\n .getParameters()\n .map((param, idx) => `args[${idx}]`)\n .join(', ');\n }\n let call = `contract.${name}(${args})`;\n if (!typeUtils.isVoid(method.getReturnType())) {\n call = `syscall('Neo.Runtime.Return', ${call})`;\n }\n methodSwitch = `\n if (method === '${name}') {\n ${argsStatement}${call};\n }\n `;\n } else if (\n TypeGuards.isGetAccessorDeclaration(method) ||\n TypeGuards.isPropertyDeclaration(method) ||\n TypeGuards.isParameterDeclaration(method)\n ) {\n methodSwitch = `\n if (method === '${name}') {\n syscall('Neo.Runtime.Return', contract.${name});\n }\n `;\n } else {\n const param = method.getParameters()[0];\n const typeText = this.getTypeText(param, this.getType(param));\n methodSwitch = `\n if (method === 'set${name[0].toUpperCase()}${name.slice(1)}') {\n contract.${name} = (syscall('Neo.Runtime.GetArgument', 1) as [${typeText}])[0];\n }\n `;\n }\n\n applicationSwitches.push(methodSwitch);\n if (func.verify) {\n verifySwitches.push(methodSwitch);\n }\n\n functions.push(func);\n }\n\n const applicationFallback =\n applicationSwitches.length === 0\n ? 'throw new Error('\n : ` else {\n throw new Error('Unknown method');\n }`;\n let verifyFallback = `\n if (!syscall('Neo.Runtime.CheckWitness', contract.owner)) {\n throw new Error('Invalid witness');\n }\n `;\n if (verifySwitches.length > 0) {\n verifyFallback = `else {\n ${verifyFallback}\n }`;\n }\n\n const statements = `\n const contract = new ${this.smartContract.getName()}();\n const method = syscall('Neo.Runtime.GetArgument', 0) as string;\n if (syscall('Neo.Runtime.GetTrigger') === 0x10) {\n ${applicationSwitches.join(' else ')}\n ${applicationFallback}\n } else if (syscall('Neo.Runtime.GetTrigger') === 0x00) {\n ${verifySwitches.join(' else ')}\n ${verifyFallback}\n } else {\n throw new Error('Unsupported trigger');\n }\n `;\n\n file.addStatements(statements);\n\n return {\n ast: this.ast,\n sourceFile: file,\n abi: { functions },\n context: this.context,\n };\n }\n\n public visit(node?: Node): void {\n if (node == null) {\n return;\n }\n\n const transpiler = this.transpilers[node.compilerNode.kind];\n if (transpiler == null) {\n node.getChildren().forEach((child) => {\n this.visit(child);\n });\n } else {\n transpiler.visitNode(this, node);\n }\n }\n\n public addEvent(\n node: Node,\n name: string,\n parameters: ParameterDeclaration[],\n ): void {\n // TODO: Change how events work.\n // if (this.events[name] != null) {\n // this.reportError(node, 'Duplicate event.', DiagnosticCode.UNSUPPORTED_SYNTAX);\n // }\n // this.events[name] = parameters;\n }\n\n public isSmartContract(node: ClassDeclaration): boolean {\n return (\n node === this.smartContract ||\n node.getDerivedClasses().some((derived) => this.isSmartContract(derived))\n );\n }\n\n public getType(node: Node): Type | undefined {\n return this.context.getType(node);\n }\n\n public getTypeOfSymbol(\n symbol: Symbol | undefined,\n node: Node,\n ): Type | undefined {\n return this.context.getTypeOfSymbol(symbol, node);\n }\n\n public getSymbol(node: Node): Symbol | undefined {\n return this.context.getSymbol(node);\n }\n\n public isOnlyGlobal(\n node: Node,\n type: Type | undefined,\n name: keyof Globals,\n ): boolean {\n return this.context.isOnlyGlobal(node, type, name);\n }\n\n public isLibSymbol(\n node: Node,\n symbol: Symbol | undefined,\n name: keyof Libs,\n ): boolean {\n return this.context.isLibSymbol(node, symbol, name);\n }\n\n public isOnlyLib(\n node: Node,\n type: Type | undefined,\n name: keyof Libs,\n ): boolean {\n return this.context.isOnlyLib(node, type, name);\n }\n\n public isLibAlias(\n identifier: Identifier | undefined,\n name: keyof LibAliases,\n ): boolean {\n return this.context.isLibAlias(identifier, name);\n }\n\n public isFixedType(node: Node, type: Type | undefined): boolean {\n if (type == null) {\n return false;\n }\n\n return this.isLibSymbol(\n node,\n type.getAliasSymbol() || type.getSymbol(),\n 'Fixed',\n );\n }\n\n public reportError(node: Node, message: string, code: DiagnosticCode): void {\n this.context.reportError(node, message, code);\n }\n\n public reportUnsupported(node: Node): void {\n this.context.reportUnsupported(node);\n }\n\n public assertNotNull<T>(value: T | undefined | null): T {\n return this.context.assertNotNull(value);\n }\n\n public filterNotNull<T>(value: T | undefined | null): value is T {\n return value != null;\n }\n\n private processProperty(\n symbol: Symbol,\n ): Array<[ClassInstanceMemberTypes, ABIFunction]> {\n const decls = symbol\n .getDeclarations()\n .filter(\n (symbolDecl) =>\n !TypeGuards.isMethodDeclaration(symbolDecl) ||\n symbolDecl.isImplementation(),\n );\n if (\n !(\n decls.length === 1 ||\n (decls.length === 2 &&\n decls.some((accessor) =>\n TypeGuards.isGetAccessorDeclaration(accessor),\n ) &&\n decls.some((accessor) =>\n TypeGuards.isSetAccessorDeclaration(accessor),\n ))\n )\n ) {\n this.reportError(\n symbol.getDeclarations()[0],\n 'Invalid contract function. Resolved to multiple implementation declarations.',\n DiagnosticCode.INVALID_CONTRACT_METHOD,\n );\n return [];\n }\n const decl = decls[0];\n if (\n !(\n TypeGuards.isMethodDeclaration(decl) ||\n TypeGuards.isPropertyDeclaration(decl) ||\n TypeGuards.isGetAccessorDeclaration(decl) ||\n TypeGuards.isSetAccessorDeclaration(decl) ||\n TypeGuards.isParameterDeclaration(decl)\n )\n ) {\n return [];\n }\n\n const name = symbol.getName();\n const type = this.getTypeOfSymbol(symbol, decl);\n if (type == null) {\n return [];\n }\n\n if (\n TypeGuards.isGetAccessorDeclaration(decl) ||\n TypeGuards.isSetAccessorDeclaration(decl)\n ) {\n const getDecl = TypeGuards.isGetAccessorDeclaration(decl)\n ? decl\n : decl.getGetAccessor();\n const setDecl = TypeGuards.isSetAccessorDeclaration(decl)\n ? decl\n : decl.getSetAccessor();\n const result: Array<[ClassInstanceMemberTypes, ABIFunction]> = [];\n if (getDecl != null && nodeUtils.isPublic(getDecl)) {\n result.push([\n getDecl,\n {\n name,\n constant: true,\n verify: this.hasVerify(getDecl),\n returnType: this.toABIReturn(\n getDecl,\n type,\n this.getIdentifier(getDecl.getReturnTypeNode()),\n ) || { type: 'ByteArray' },\n },\n ]);\n }\n\n if (setDecl != null && nodeUtils.isPublic(setDecl)) {\n result.push([\n setDecl,\n {\n name,\n constant: false,\n verify: this.hasVerify(setDecl),\n parameters: [\n {\n name: setDecl.getParameters()[0].getNameOrThrow(),\n ...(this.toABIReturn(\n setDecl,\n type,\n this.getIdentifier(setDecl.getParameters()[0].getTypeNode()),\n ) || { type: 'ByteArray' }),\n },\n ],\n returnType: { type: 'Void' },\n },\n ]);\n }\n\n return result;\n }\n\n if (!nodeUtils.isPublic(decl)) {\n return [];\n }\n\n const verify = this.hasVerify(decl);\n if (TypeGuards.isMethodDeclaration(decl)) {\n const callSignatures = type.getCallSignatures();\n if (callSignatures.length !== 1) {\n this.reportError(\n decl,\n 'Invalid contract function. Resolved to multiple call signatures.',\n DiagnosticCode.INVALID_CONTRACT_METHOD,\n );\n return [];\n }\n const callSignature = callSignatures[0];\n\n const parameters = callSignature\n .getParameters()\n .map((parameter) => this.toABIParameter(parameter))\n .filter(this.filterNotNull);\n const returnType = this.toABIReturn(\n decl,\n callSignature.getReturnType(),\n this.getIdentifier(decl.getReturnTypeNode()),\n );\n const constant = this.hasDecorator(decl, 'constant');\n const func = {\n name,\n constant,\n verify,\n parameters,\n returnType: returnType || { type: 'ByteArray' },\n };\n return [[decl, func]];\n } else {\n const returnType = this.toABIReturn(\n decl,\n type,\n this.getIdentifier(decl.getTypeNode()),\n );\n const func = {\n name,\n constant: true,\n verify,\n returnType: returnType || { type: 'ByteArray' },\n };\n\n return [[decl, func]];\n }\n }\n\n private hasVerify(decl: ClassInstanceMemberTypes): boolean {\n return this.hasDecorator(decl, 'verify');\n }\n\n private hasDecorator(\n decl: ClassInstanceMemberTypes,\n name: 'verify' | 'constant',\n ): boolean {\n return decl\n .getDecorators()\n .some((decorator) =>\n this.isOnlyLib(\n decorator.getExpression(),\n this.getType(decorator.getExpression()),\n name,\n ),\n );\n }\n\n private toABIParameter(param: Symbol): ABIParameter | undefined {\n const decl = this.assertNotNull(param.getDeclarations()[0]);\n const id = TypeGuards.isParameterDeclaration(decl)\n ? this.getIdentifier(decl.getTypeNode())\n : undefined;\n\n const type = this.toABIReturn(decl, this.getTypeOfSymbol(param, decl), id);\n if (type == null) {\n return undefined;\n }\n\n return { ...type, name: param.getName() };\n }\n\n private toABIReturn(\n node: Node,\n resolvedType: Type | undefined,\n typeIdentifier?: Identifier,\n ): ABIReturn | undefined {\n if (resolvedType == null && typeIdentifier == null) {\n this.reportError(\n node,\n 'Could not detect ABI, unknown type.',\n DiagnosticCode.UNKNOWN_TYPE,\n );\n return undefined;\n }\n\n if (typeUtils.isOnlyBoolean(resolvedType)) {\n return { type: 'Boolean' };\n } else if (this.isLibAlias(typeIdentifier, 'Address')) {\n return { type: 'Hash160' };\n } else if (this.isLibAlias(typeIdentifier, 'Hash256')) {\n return { type: 'Hash256' };\n } else if (this.isLibAlias(typeIdentifier, 'Signature')) {\n return { type: 'Signature' };\n } else if (this.isLibAlias(typeIdentifier, 'PublicKey')) {\n return { type: 'PublicKey' };\n } else if (typeUtils.isVoid(resolvedType)) {\n return { type: 'Void' };\n } else if (typeUtils.isOnlyString(resolvedType)) {\n return { type: 'String' };\n } else if (typeUtils.isOnlyNumberLiteral(resolvedType)) {\n return { type: 'Integer', decimals: 0 };\n } else if (this.isFixedType(node, resolvedType) && resolvedType != null) {\n const decimals = this.getFixedDecimals(resolvedType);\n return { type: 'Integer', decimals };\n } else if (typeUtils.isOnlyNumber(resolvedType)) {\n return { type: 'Integer', decimals: 0 };\n } else if (typeUtils.isOnlyArray(resolvedType) && resolvedType != null) {\n const value = this.toABIReturn(node, resolvedType.getTypeArguments()[0]);\n if (value != null) {\n return { type: 'Array', value };\n }\n } else if (this.isOnlyGlobal(node, resolvedType, 'Buffer')) {\n return { type: 'ByteArray' };\n } else {\n this.reportError(\n node,\n 'Invalid contract type.',\n DiagnosticCode.INVALID_CONTRACT_TYPE,\n );\n }\n\n return undefined;\n }\n\n private getFixedDecimals(type: Type): number {\n return (type.getUnionTypes()[1].getIntersectionTypes()[1]\n .compilerType as any).value;\n }\n\n private getIdentifier(node: TypeNode | undefined): Identifier | undefined {\n return node == null\n ? node\n : node.getFirstChildByKind(SyntaxKind.Identifier);\n }\n\n private getTypeText(node: Node, type: Type | undefined): string {\n let typeText = 'any';\n if (type == null) {\n this.reportError(node, 'Unknown type', DiagnosticCode.UNKNOWN_TYPE);\n } else if (this.isFixedType(node, type)) {\n typeText = 'number';\n } else {\n typeText = type.getText();\n }\n\n return typeText;\n }\n}\n","import Ast, { ClassDeclaration } from 'ts-simple-ast';\n\nimport { TranspileResult } from './types';\nimport { Context } from '../Context';\nimport { getGlobals, getLibs, getLibAliases } from '../symbols';\nimport { NEOTranspiler } from './transpiler';\n\nexport interface TranspileOptions {\n readonly ast: Ast;\n readonly smartContract: ClassDeclaration;\n readonly context?: Context;\n}\n\nexport const transpile = ({\n ast,\n smartContract,\n context: contextIn,\n}: TranspileOptions): TranspileResult => {\n const context =\n contextIn || new Context(getGlobals(ast), getLibs(ast), getLibAliases(ast));\n const transpiler = new NEOTranspiler(context, ast, smartContract);\n\n return transpiler.process();\n};\n","import * as utils from './utils';\nimport { transpile } from './transpile';\nimport { compile } from './compile';\nimport { ts } from 'ts-simple-ast';\nimport { ABI } from '@neo-one/client/src';\n\nexport interface CompileContractOptions {\n readonly dir: string;\n readonly filePath: string;\n readonly name: string;\n}\n\nexport interface CompileContractResult {\n code: Buffer;\n diagnostics: ts.Diagnostic[];\n abi: ABI;\n}\n\nexport const compileContract = async ({\n dir,\n filePath,\n name,\n}: CompileContractOptions): Promise<CompileContractResult> => {\n const ast = await utils.getAst(dir);\n const smartContract = ast\n .getSourceFileOrThrow(filePath)\n .getClassOrThrow(name);\n const { ast: transpiledAst, sourceFile, abi, context } = transpile({\n ast,\n smartContract,\n });\n const { code, context: finalContext } = compile({\n ast: transpiledAst,\n sourceFile,\n context,\n });\n\n return {\n code,\n diagnostics: finalContext.diagnostics,\n abi,\n };\n};\n","import Blockchain from '@neo-one/node-blockchain';\nimport Ast, { DiagnosticCategory, SourceFile } from 'ts-simple-ast';\nimport { InvocationResult } from '@neo-one/client-core';\nimport { Monitor } from '@neo-one/monitor';\n\nimport levelup from 'levelup';\nimport levelUpStorage from '@neo-one/node-storage-levelup';\nimport memdown from 'memdown';\nimport { test as testNet } from '@neo-one/node-neo-settings';\nimport vm from '@neo-one/node-vm';\n\nimport { compile } from './compile';\n\nexport const executeScript = async (\n monitor: Monitor,\n ast: Ast,\n sourceFile: SourceFile,\n prelude: Buffer = Buffer.alloc(0, 0),\n): Promise<InvocationResult> => {\n const blockchain = await Blockchain.create({\n log: () => {\n // tslint:disable-next-line\n },\n settings: testNet,\n storage: levelUpStorage({\n context: { messageMagic: testNet.messageMagic },\n db: levelup(\n // @ts-ignore\n memdown(),\n ),\n }),\n vm,\n monitor,\n });\n const { code: compiledCode, context } = compile({ ast, sourceFile });\n const error = context.diagnostics.filter(\n (diagnostic) => diagnostic.category === DiagnosticCategory.Error,\n )[0];\n if (error != null) {\n throw new Error(\n `Compilation error: ${error.messageText} at ${error.source}`,\n );\n }\n\n const result = await blockchain.invokeScript(\n Buffer.concat([prelude, compiledCode]),\n monitor,\n );\n return result;\n};\n","import { ClassDeclaration } from 'ts-simple-ast';\n\nimport * as utils from './utils';\nimport { getLibs } from './symbols';\n\nexport interface Contracts {\n [file: string]: string[];\n}\n\nexport const scan = async (dir: string): Promise<Contracts> => {\n const ast = await utils.getAst(dir);\n const libs = getLibs(ast);\n const smartContract = libs.SmartContract.getDeclarations()[0] as ClassDeclaration;\n return smartContract.getDerivedClasses().reduce(\n (acc, derived) => {\n if (!derived.isAbstract()) {\n const file = derived.getSourceFile().getFilePath();\n if (acc[file] == null) {\n acc[file] = [];\n }\n acc[file].push(derived.getNameOrThrow());\n }\n\n return acc;\n },\n {} as Contracts,\n );\n};\n","import { scan } from './scan';\n\nexport interface FindContractResult {\n filePath: string;\n name: string;\n}\n\nexport const findContract = async (\n dir: string,\n name: string,\n): Promise<FindContractResult> => {\n const contracts = await scan(dir);\n const found = Object.entries(contracts)\n .map(([path, contractNames]) => ({\n path,\n contractNames: contractNames.filter(\n (contractName) => name === contractName,\n ),\n }))\n .filter(({ contractNames }) => contractNames.length > 0);\n if (found.length > 1) {\n throw new Error(`Found multiple contracts with name ${name}`);\n } else if (found.length === 0) {\n throw new Error(`Cound not find contract with name ${name}`);\n }\n\n return {\n filePath: found[0].path,\n name,\n };\n};\n"],"names":["JumpTable","sb","node","body","jumpNumber","capture","table","push","outerNode","forEach","emitHelper","helpers","if","emitOp","emitPushInt","emitBytecode","bytecode","ProgramCounter","DeferredProgramCounter","offset","other","pc","Error","getPC","Jump","op","Call","plus","Jmp","KnownProgramCounter","LastProgramCounter","startPC","children","setPC","child","ProgramCounterHelper","first","last","NodeCompiler","Helper","options","ArrFilterHelper","map","withIndex","pushValue","forLoop","getBoolean","ArrForEachHelper","each","ArrMapHelper","CloneArrayHelper","ExtendArrayHelper","optionsIn","pushValueOptions","createUndefined","ForTypeHelper","types","defaultCase","noCastOptions","type","cast","getType","filter","testType","isType","innerOptions","throwTypeError","length","process","case","forType","isRuntimeType","SerializableType","invokeGlobal","name","scope","getGlobal","emitPushString","getInternalObjectProperty","invokeCall","SERIALIZE_NAME","invokeSerialize","DESERIALIZE_NAME","invokeDeserialize","serializeType","deserializeType","isSerializedType","getTypes","isBoolean","isString","isNumber","getGlobalProperty","instanceof","unwrapBuffer","Buffer","wrapBuffer","unwrapArray","arrMap","Array","wrapArray","ArgumentsHelper","args","getArguments","reverse","arg","visit","InternalFunctionProperties","BindFunctionObjectThisHelper","property","CALL","both","overwrite","cloneFunctionObject","bindThis","CONSTRUCT","bindFunctionThis","BindFunctionThisHelper","whenTrue","cloneFunction","CallHelper","cloneArray","emitCall","handleCompletion","getCompletionVal","CloneFunctionHelper","CloneFunctionObjectHelper","shallowCloneObject","setInternalObjectProperty","CreateCallArrayHelper","outerOptions","createFunctionArray","withScope","parameters","TypeGuards","isBodyableNode","getBodyOrThrow","getBody","isExpression","createNormalCompletion","CreateConstructArrayHelper","withoutScope","emit","CreateFunctionArrayHelper","pushAll","function","CreateFunctionObjectHelper","createObject","FunctionHelper","jump","jumpTable","add","InvokeCallHelper","getKey","overwriteThis","noArgs","stringify","call","InvokeConstructHelper","noPushValueOptions","NewHelper","getPropertyObjectProperty","setDataPropertyObjectProperty","invokeConstruct","ParametersHelper","getParameters","param","idx","getNameOrThrow","initializer","getInitializer","isRestParameter","reportUnsupported","isUndefined","isOptional","decorators","getDecorators","set","plainOptions","GenericDeserializeHelper","deserialize","createFunctionObject","GenericSerializeHelper","serialize","TypedHelper","knownType","CreateCompletionHelper","CreateNormalCompletionHelper","createCompletion","CreateThrowCompletionHelper","GetCompletionBaseHelper","index","GetCompletionErrorHelper","GetCompletionValHelper","DiagnosticCode","NORMAL_COMPLETION","BREAK_COMPLETION","CONTINUE_COMPLETION","CATCH_COMPLETION","ASSIGNMENT_OPERATORS","Set","SyntaxKind","EqualsToken","PlusEqualsToken","MinusEqualsToken","AsteriskAsteriskEqualsToken","AsteriskEqualsToken","SlashEqualsToken","PercentEqualsToken","AmpersandEqualsToken","BarEqualsToken","CaretEqualsToken","LessThanLessThanEqualsToken","GreaterThanGreaterThanGreaterThanEqualsToken","GreaterThanGreaterThanEqualsToken","isValidParent","isTryStatement","isFunctionLikeDeclaration","isArrowFunction","isSourceFile","HandleCompletionHelper","getCompletionError","parent","getParent","getParentWhile","parentNode","reportError","SOMETHING_WENT_WRONG","catchPC","constants","emitJmp","PickCompletionValHelper","ThrowHelper","createThrowCompletion","ThrowTypeErrorHelper","createString","throw","CaseHelper","cases","addCase","condition","ForLoopHelper","incrementor","emitLoop","withProgramCounter","loopPC","getFirst","equals","getCurrent","getLast","breakPC","innerPC","continuePC","breakPCOptions","continuePCOptions","IfHelper","whenFalse","endPC","whenFalsePC","whenTruePC","ProcessStatementsHelper","createScope","emitStatements","getFunctions","func","getName","getVariableDeclarations","decl","compilerStatements","compilerNode","statements","getStatements","statement","getNodeFromCompilerNode","noValueOptions","CreatePrimitiveHelper","Types","CreateBooleanHelper","Boolean","GetPrimitiveHelper","GetBooleanHelper","IsHelper","IsBooleanHelper","undefined","constraint","getConstraint","hasUnionType","isUnionType","getUnionTypes","some","hasIntersectionType","isIntersectionType","getIntersectionTypes","hasType","isOnly","isNullable","every","unionType","intersectionType","isUndefinedType","isOnlyUndefined","hasUndefined","isNull","isNullType","isOnlyNull","hasNull","isOnlyNumberLiteral","tpe","isNumberLiteralType","isNumberType","isOnlyNumber","hasNumber","isStringType","isStringLiteralType","isOnlyString","hasString","isBooleanType","isBooleanLiteralType","isOnlyBoolean","hasBoolean","hasTypeFlag","flag","compilerType","flags","isSymbol","TypeFlags","ESSymbol","ESSymbolLike","isOnlySymbol","isPrimitive","isOnlyPrimitive","isOnlyObject","isArray","isArrayType","isOnlyArray","isTuple","isTupleType","isOnlyTuple","isSame","type0","type1","isUnion","isIntersection","isLiteral","isLiteralType","isAnyType","Any","isVoid","Void","ToBooleanHelper","convertType","convertUnknownType","typeUtils","emitPushBoolean","convertBoolean","convertNumber","convertString","getNumber","getString","isObject","CreateNullHelper","Null","IsNullHelper","CreateNumberHelper","Number","GetNumberHelper","IsNumberHelper","ToNumberHelper","convertUnknown","convertUndefined","convertNull","convertSymbol","convertObject","toPrimitive","Object","shouldThrowOnObject","emitIf","check","CreateObjectHelper","CreatePropertyObjectHelper","obj","addUnique","pobj","arrForEach","get","ElementAccessHelper","expr","noSetValueOptions","value","getExpression","valueType","prop","getArgumentExpressionOrThrow","propType","toObject","setValue","valueIndex","setProperty","setNumberProperty","getSymbol","setSymbol","getNumberProperty","getSymbolObjectProperty","getArrayIndex","isArrayInstance","toString","pickValue","setPropertyObjectProperty","setArrayIndex","setSymbolObjectProperty","FindObjectPropertyHelper","accessor","dataExists","data","getObject","prepareLoop","getPropertyObject","GetObjectHelperBase","GetInternalObjectHelper","GetInternalObjectPropertyHelper","getInternalObject","GetObjectHelper","GetPropertyObjectHelper","GetObjectPropertyHelperBase","findObjectProperty","bind","GetPropertyObjectPropertyHelper","GetSymbolObjectHelper","GetSymbolObjectPropertyHelper","getSymbolObject","InstanceofHelper","IsObjectHelper","SetObjectAccessorPropertyHelperBase","hasSet","hasGet","SetAccessorPropertyObjectPropertyHelper","SetAccessorSymbolObjectPropertyHelper","SetObjectDataPropertyHelperBase","SetDataPropertyObjectPropertyHelper","SetDataSymbolObjectPropertyHelper","SetInternalObjectPropertyHelper","SetObjectPropertyHelperBase","setDataProperty","SetPropertyObjectPropertyHelper","SetSymbolObjectPropertyHelper","setDataSymbolObjectProperty","ShallowCloneObjectHelper","roll","clone","shallowCloneObj","ShallowCloneObjHelper","scopeOptions","counter","ToObjectHelper","convertPrimitive","concat","primitive","CreateStringHelper","String","GetStringHelper","IsStringHelper","ToStringHelper","CreateSymbolHelper","Symbol","GetSymbolHelper","IsSymbolHelper","CreateUndefinedHelper","Undefined","IsUndefinedHelper","IsNullOrUndefinedHelper","IsSameTypeHelper","unwrapType","ToPrimitiveHelper","preferredType","toPrimitiveObject","tryConvert","methods","UnwrapTypeHelper","UnwrapValHelper","EqualsEqualsEqualsHelper","left","right","equalsEqualsEqualsSameType","equalsEqualsEqualsUnknown","EqualsEqualsEqualsNumberHelper","EqualsEqualsEqualsSameTypeHelper","isNullOrUndefined","unwrapVal","EqualsEqualsEqualsUnknownHelper","isSameType","EqualsEqualsHelper","leftType","rightType","equalsEqualsType","equalsEqualsUnknown","equalsEqualsEquals","equalsEqualsLeftNumberRightBooleanOrString","toNumber","createNumber","equalsEqualsRightNumberLeftBooleanOrString","equalsEqualsEqualsNumber","copy","LessThanHelper","leftFirst","GLOBAL_PROPERTIES","InternalGlobalProperties","AddArgumentsHelper","ARGUMENTS","AddConstructorObjectHelper","addPrototypeProperties","addConstructorProperties","AddArrayObjectHelper","addMap","addFilter","addReduce","createConstructArray","extendArray","getThis","setArrayValue","addMapLike","arrFilter","addMethod","accum","helper","AddBufferObjectHelper","addConstructor","addConcat","AddBooleanObjectHelper","AddErrorObjectHelper","AddModulesHelper","MODULES","AddNumberObjectHelper","AddObjectObjectHelper","AddStringObjectHelper","AddSymbolObjectHelper","SetGlobalObjectHelper","setGlobal","addArguments","addObjectObject","addBooleanObject","addNumberObject","addStringObject","addSymbolObject","addArrayObject","addBufferObject","addErrorObject","addModules","GetArgumentHelper","GetGlobalPropertyHelper","CreateArrayHelper","new","GetArrayIndexHelper","getArrayValue","InternalArrayProperties","GetArrayValueHelper","DATA_ARRAY","SetArrayIndexHelper","setIndex","SetArrayValueHelper","UnwrapArrayHelper","WrapArrayHelper","invokeArrayConstruct","AddEmptyModuleHelper","getModules","ExportHelper","defaultExport","addExport","ExportSingleHelper","getCurrentModule","export","GetCurrentModuleHelper","getModule","moduleIndex","GetModuleHelper","GetModulesHelper","InternalBlockchainInterfaceProperties","IsBlockchainInterfaceHelper","UnwrapBlockchainInterfaceHelper","BLOCKCHAIN_INTERFACE","WrapBlockchainInterfaceHelper","CreateBufferHelper","InternalBufferProperties","GetBufferValueHelper","DATA","SetBufferValueHelper","UnwrapBufferHelper","getBufferValue","WrapBufferHelper","createBuffer","setBufferValue","createHelpers","cache","memoized","HelperClass","key","ClassDeclarationCompiler","ClassDeclaration","noSuperClassOptions","extendsExpr","getExtends","superClassIn","superClassOptions","superClass","ctorImpl","getConstructors","find","ctor","isImplementation","getInstanceProperties","isPropertyDeclaration","getInstanceMethods","method","createCallArray","getSetAccessors","isStatic","getAccessor","getGetAccessor","setAccessorPropertyObjectProperty","getGetAccessors","getSetAccessor","isNamedExport","isDefaultExport","exportSingle","EnumDeclarationCompiler","EnumDeclaration","EnumMemberCompiler","EnumMember","ExportAssignmentCompiler","ExportAssignment","isExportEquals","ExportDeclarationCompiler","ExportDeclaration","namedExport","getNameNode","getText","alias","getAliasIdentifier","moduleSpecifier","getModuleSpecifierSourceFile","getNamedExports","getLocalTargetDeclarations","isTypeAliasDeclaration","loadModule","hasExport","FunctionDeclarationCompiler","FunctionDeclaration","ImportDeclarationCompiler","ImportDeclaration","getModuleSpecifierSourceFileOrThrow","namespaceImport","getNamespaceImport","createPropertyObject","defaultImport","getDefaultImport","namedImports","getNamedImports","namedImport","getImportDeclaration","TypeAliasDeclarationCompiler","TypeAliasDeclaration","VariableDeclarationCompiler","VariableDeclaration","VariableDeclarationListCompiler","VariableDeclarationList","getDeclarations","DecoratorCompiler","Decorator","ArrayLiteralExpressionCompiler","ArrayLiteralExpression","elements","getElements","element","ArrowFunctionCompiler","ArrowFunction","AsExpressionCompiler","AsExpression","castOptions","AwaitExpressionCompiler","AwaitExpression","BinaryExpressionCompiler","BinaryExpression","kind","getOperatorToken","getKind","visitAssignmentOperator","AsteriskToken","SlashToken","PercentToken","PlusToken","MinusToken","GreaterThanGreaterThanToken","LessThanLessThanToken","LessThanToken","LessThanEqualsToken","GreaterThanToken","GreaterThanEqualsToken","ExclamationEqualsToken","EqualsEqualsToken","AmpersandToken","BarToken","CaretToken","GreaterThanGreaterThanGreaterThanToken","InKeyword","InstanceOfKeyword","CommaToken","AsteriskAsteriskToken","EqualsEqualsEqualsToken","ExclamationEqualsEqualsToken","visitExpressionOperator","AmpersandAmpersandToken","BarBarToken","visitLogicalExpressionOperator","assertUnreachable","getLeft","getRight","token","visitExpressionOperatorBase","setValueOptions","visitLogicalExpressionOperatorBase","leftHelper","rightHelper","visitNumeric","isBinaryNumeric","lessThan","createBoolean","equalsEquals","toBoolean","BooleanLiteralCompiler","TrueBooleanLiteralCompiler","TrueKeyword","FalseBooleanLiteralCompiler","FalseKeyword","SimpleSysCallType","VoidClass","native","VoidValue","NumberClass","NumberValue","StringClass","StringValue","BooleanClass","BooleanValue","BlockchainInterface","isOnlyGlobal","isGlobal","isBlockchainInterface","unwrapBlockchainInterface","wrapBlockchainInterface","AccountValue","AssetValue","AttributeValue","BlockValue","ContractValue","HeaderValue","InputValue","OutputValue","TransactionValue","ValidatorValue","StorageContextValue","StorageIteratorValue","BLOCKCHAIN_INTERFACES","BufferClass","BufferValue","ArrayValue","isOnlyType","getArrayType","handleArgument","handleResult","TupleValue","getTupleElements","tupleType","UNKNOWN_TYPE","UnionValue","valueTypes","join","foundType","genericSerialize","innerType","genericDeserialize","StorageKey","StorageValue","TypeAlias","declaration","SerializableValueArrayAlias","SerializableValueObjectAlias","SerializableValueAlias","toSignature","Serializable","shouldSerialize","shouldHandleNull","toDeclaration","emitSysCall","typeIn","handleValue","SerializableValue","SysCallArgument","SimpleSysCall","returnType","slice","entries","SYSCALLS","arrayType","sig","addSerialize","handleNull","getArgument","CallExpressionCompiler","CallExpression","isIdentifier","isGlobalSymbol","handleSysCall","isSuperExpression","handleSuperConstruct","isElementAccessExpression","isPropertyAccessExpression","lhs","elementAccess","sysCallName","INVALID_SYS_CALL","isStringLiteral","sysCallKey","getLiteralValue","sysCall","handleCall","CommaListExpressionCompiler","CommaListExpression","ConditionalExpressionCompiler","ConditionalExpression","getCondition","getWhenTrue","getWhenFalse","DeleteExpressionCompiler","DeleteExpression","ElementAccessExpressionCompiler","ElementAccessExpression","FunctionExpressionCompiler","FunctionExpression","IdentifierCompiler","Identifier","originalKeywordKind","UndefinedKeyword","ImportExpressionCompiler","ImportKeyword","MetaPropertyCompiler","MetaProperty","NewExpressionCompiler","NewExpression","NonNullExpressionCompiler","NonNullExpression","NoSubstitutionTemplateLiteralCompiler","NoSubstitutionTemplateLiteral","NullLiteralCompiler","NullKeyword","createNull","NumericLiteralCompiler","NumericLiteral","ObjectLiteralExpressionCompiler","ObjectLiteralExpression","getProperties","isPropertyAssignment","isShorthandPropertyAssignment","isMethodDeclaration","getInitializerOrThrow","OmittedExpressionCompiler","OmittedExpression","ParenthesizedExpressionCompiler","ParenthesizedExpression","PartiallyEmittedExpressionCompiler","PartiallyEmittedExpression","PostfixUnaryExpressionCompiler","PostfixUnaryExpression","getOperand","PlusPlusToken","MinusMinusToken","visitAssignment","PrefixUnaryExpressionCompiler","PrefixUnaryExpression","TildeToken","ExclamationToken","visitValue","operand","PropertyAccessExpressionCompiler","PropertyAccessExpression","expression","RegularExpressionLiteralCompiler","RegularExpressionLiteral","SpreadElementCompiler","SpreadElement","StringLiteralCompiler","StringLiteral","SuperExpressionCompiler","SuperKeyword","TaggedTemplateExpressionCompiler","TaggedTemplateExpression","ThisExpressionCompiler","ThisKeyword","TypeAssertionCompiler","TypeAssertionExpression","TypeOfExpressionCompiler","TypeOfExpression","VoidExpressionCompiler","VoidExpression","YieldExpressionCompiler","YieldExpression","SourceFileCompiler","SourceFile","getImportDeclarations","processStatements","getExportDeclarations","getExportAssignments","assignment","BlockCompiler","Block","BreakStatementCompiler","BreakStatement","label","getLabel","CaseBlockCompiler","CaseBlock","getClauses","clause","CaseClauseCompiler","CaseClause","CatchClauseCompiler","CatchClause","variable","getVariableDeclaration","getBlock","ContinueStatementCompiler","ContinueStatement","DebuggerStatementCompiler","DebuggerStatement","DefaultClauseCompiler","DefaultClause","DoStatementCompiler","DoStatement","getStatement","EmptyStatementCompiler","EmptyStatement","ExpressionStatementCompiler","ExpressionStatement","ForInStatementCompiler","ForInStatement","ForOfStatementCompiler","ForOfStatement","ForStatementCompiler","ForStatement","exprInitializer","exprCondition","exprIncrementor","getIncrementor","IfStatementCompiler","IfStatement","cond","getThenStatement","nodeWhenFalse","getElseStatement","LabeledStatementCompiler","LabeledStatement","NotEmittedStatementCompiler","NotEmittedStatement","ReturnStatementCompiler","ReturnStatement","SwitchStatementCompiler","SwitchStatement","getCaseBlock","ThrowStatementCompiler","ThrowStatement","TryStatementCompiler","TryStatement","catchClause","getCatchClause","getTryBlock","catchPCOptions","finallyBlock","getFinallyBlock","VariableStatementCompiler","VariableStatement","getDeclarationList","WhileStatementCompiler","WhileStatement","WithStatementCompiler","WithStatement","MAX_JUMP","JUMP_OFFSET","CodePoint","resolvePC","pcInternal","prev","next","totalLength","prevInternal","resetPC","nextInternal","targets","self","skipJump","ret","target","nextSkipJump","isMax","getPostOffset","resolved","resolve","insertBefore","JumpCodePoint","insertAfter","shift","point","targetInternal","isForwardJump","isReverseJump","BufferCodePoint","NewJump","source","sourceInternal","sources","internalPostOffset","sourcePC","reduce","acc","JumpResolver","getCodePoint","newTargets","result","processOne","sortedNewTargets","_","sortBy","resolvePostOffset","insertJumps","current","out","codePoint","getTarget","newValue","newValueTargets","replace","newOffset","getNewTarget","newValueTarget","delete","codePoints","firstBytecode","jumpCodePoint","targetPC","pcSources","compilers","declarations","decorator","file","BaseScriptBuilder","context","ast","sourceFile","allHelpers","Map","currentScope","kindCompilers","KindCompiler","kindCompiler","currentModuleIndex","moduleMap","getFilePath","nextModuleIndex","reverseModuleMap","nodes","setGlobalObject","addEmptyModule","emitGlobal","jumpTablePC","emitTable","buffers","valueIn","offsetPC","BN","sub","jumpPC","toTwos","byteCodeBuffer","BYTECODE_TO_BYTECODE_BUFFER","OPCODE_TO_BYTECODE","toArrayLike","compiler","visitNode","setLast","code","buffer","UnknownOpError","emitOpByte","eq","utils","NEGATIVE_ONE","ZERO","emitPush","toSignedBuffer","gt","lt","SIXTEEN","PUSH1","toBuffer","emitJump","emitRaw","sysCallBuffer","from","writer","BinaryWriter","writeVarBytesLE","originalCapturedBytecode","capturedBytecode","originalPC","capturedLength","message","required","symbol","exportMap","has","filePath","assertNotNull","fileExports","PUSHBYTES75","ClientScriptBuilder","emitUInt8","build","emitUInt16LE","emitUInt32LE","byteCodeIn","byteCode","IdentifierName","ResolvedScope","variableCount","addScope","scopeCount","scopeLength","identifier","existing","variables","position","uniqueVariables","scopePosition","getPosition","REFERENCE_ERROR","loadScope","globalProperties","pickCompletionVal","loadAll","hasBinding","surround","nonLocal","emitNonLocal","completion","CapturingScope","bindings","ScopeCapturingScriptBuilder","resolveScopes","resolvedScopes","scopes","resolveScope","forNode","EmittingScriptBuilder","HelperCapturingScriptBuilder","capturedHelpers","capturedHelpersSet","CompilerDiagnostic","messageText","category","getSourceFile","start","getStart","getWidth","Context","globals","libs","libAliases","diagnostics","DiagnosticCategory","Warning","UNSUPPORTED_SYNTAX","reportWarning","getNotAnyType","getContextualType","reportTypeError","reportTypeWarning","getTypeAtLocation","UNKNOWN_SYMBOL","aliased","getAliasedSymbol","isSymbolic","getSymbolForType","isLibSymbol","getFlags","findInterfaceFile","files","getSourceFiles","isDeclarationFile","bufferInterface","getInterface","globalNamespace","getNamespace","isGlobalAugmentation","ts","NodeFlags","GlobalAugmentation","getGlobals","bufferFile","addExistingSourceFileIfExists","require","getInterfaceOrThrow","typeChecker","getTypeChecker","compilerObject","array","global","createArrayType","getAnyType","getDeclaredType","neoFile","addExistingSourceFiles","path","dirname","neoGlobal","getNamespaceOrThrow","getSymbolOrThrow","getVariableDeclarationOrThrow","getFunctionOrThrow","findLibFile","getClass","getLibs","libFileIn","libFile","SmartContract","getClassOrThrow","MapStorage","SetStorage","Fixed","getTypeAliasOrThrow","constant","verify","getLibAliases","Address","getReferencingNodes","Hash256","Signature","PublicKey","compile","contextIn","helperScriptBuilder","scopeScriptBuilder","getHelpers","emittingScriptBuilder","getScopes","getFinalBytecode","findRoot","dir","filename","split","pop","currentDir","exists","fs","makeAst","tsConfigFilePath","res","readConfigFile","parseConfigHost","sys","readDirectory","readFile","parsed","parseJsonConfigFileContent","config","Ast","getAst","getPreEmitDiagnostics","compileScript","scriptPath","getSourceFileOrThrow","NodeTranspiler","DEPLOY_METHOD","ClassDeclarationTranspiler","transpiler","isSmartContract","transpileSmartContract","getBaseClass","transpileDeploy","existingDeploy","getMethod","ctorDecl","bodyText","baseDeploy","getBaseDeploy","firstStatement","isExpressionStatement","callExpr","isCallExpression","lhsrExpr","replaceWithText","deploy","typeNode","getTypeNode","hasQuestionToken","Scope","Public","isAbstract","isParameterDeclaration","isFixedType","addStatements","init","addAccessors","isReadonly","addGetAccessor","getScope","addSetAccessor","remove","isOnlyLib","setInitializer","baseClass","getInstanceMethod","isPublic","getCombinedModifierFlags","ModifierFlags","transpilers","NEOTranspiler","smartContract","processProperty","values","verifySwitches","applicationSwitches","functions","methodSwitch","argsStatement","argsTypes","getTypeText","getReturnType","isGetAccessorDeclaration","typeText","toUpperCase","applicationFallback","verifyFallback","getChildren","getDerivedClasses","derived","getTypeOfSymbol","isLibAlias","getAliasSymbol","decls","symbolDecl","isSetAccessorDeclaration","INVALID_CONTRACT_METHOD","getDecl","setDecl","nodeUtils","hasVerify","toABIReturn","getIdentifier","getReturnTypeNode","callSignatures","getCallSignatures","callSignature","parameter","toABIParameter","filterNotNull","hasDecorator","id","resolvedType","typeIdentifier","decimals","getFixedDecimals","getTypeArguments","INVALID_CONTRACT_TYPE","getFirstChildByKind","transpile","compileContract","transpiledAst","finalContext","executeScript","monitor","prelude","alloc","blockchain","Blockchain","create","testNet","levelUpStorage","messageMagic","levelup","compiledCode","error","diagnostic","invokeScript","scan","findContract","contracts","found","contractNames","contractName"],"mappings":"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"}
\No newline at end of file