export const stringMethods = new Set([ "toLowerCase", "toUpperCase", "trim", "trimStart", "trimEnd", "split", "slice", "substring", "includes", "startsWith", "endsWith", "indexOf", "lastIndexOf", "replace", "replaceAll", "repeat", "padStart", "padEnd", "charAt", "charCodeAt", "codePointAt", "at", "concat", "toString", "match", "matchAll", "search", "localeCompare", "normalize", ]) export const stringStatics = new Set(["fromCharCode", "fromCodePoint"]) export const invokeStringStatic = (name: string, args: Array, node: AstNode): unknown => { const codes = args.map((arg) => { if (typeof arg !== "number") throw new InterpreterRuntimeError(`String.${name} expects number arguments.`, node) return arg }) switch (name) { case "fromCharCode": return String.fromCharCode(...codes) case "fromCodePoint": return String.fromCodePoint(...codes) default: throw new InterpreterRuntimeError(`String.${name} is not available in CodeMode.`, node) } } import { type AstNode, InterpreterRuntimeError } from "../interpreter/model.js"