{"version":3,"file":"index.cjs","sources":["../../code/scanner/_location.jsy","../../code/scanner/basic_offside.jsy","../../code/scanner/context_scanner.jsy","../../code/scanner/basic_contexts.jsy","../../code/scanner/basic_offside_contexts.jsy","../../code/scanner/inject_dedent.jsy","../../code/scanner/scan_clike.jsy","../../code/scanner/scan_javascript.jsy","../../code/scanner/ast_debug.jsy"],"sourcesContent":["\nconst SourceLocation = @{}\n  __proto__: null\n\n  get [Symbol.toStringTag]() :: return '«SourceLocation»'\n  toString() :: return `«${this.line}:${this.column}»`\n  get column() :: return this.pos - this.line_pos\n\n  create(source, file) ::\n    const root = @{}\n      line:0, pos:0, line_pos:0\n      __proto__: SourceLocation\n\n    if null != file ::\n      root.file = file\n\n    Object.defineProperties @ root, @{}\n      __root__: @{} value: root\n      source: @{} value: source\n    return Object.freeze @ root\n\n  nextLine() ::\n    let {line, pos} = this\n    line += 1\n    return Object.freeze @:\n      line, pos, line_pos: pos,\n      __proto__: this.__root__\n\n  move(char_len) ::\n    if 'string' === typeof char_len ::\n      char_len = char_len.length\n    else if 'number' === typeof char_len ::\n      char_len |= 0\n    else throw new TypeError('Expected move to be a string or number')\n\n    let {line, pos, line_pos} = this\n    pos += char_len\n    return Object.freeze @:\n      line, pos, line_pos,\n      __proto__: this.__root__\n\n  distance(other) ::\n    const lines = this.line - other.line\n    const chars = this.pos - other.pos\n    return @{} lines, chars\n\n  slice(other) ::\n    if this.source !== other.source ::\n      throw new Error @ `Locations from different sources`\n    return this.source.slice @ this.pos, other.pos\n\n  syntaxError(message) ::\n    const err = new SyntaxError(message)\n    err.src_loc = this\n    return err\n\nexport default SourceLocation.create\n","export const rx_lines = /(\\r\\n|\\r|\\n)/ ;\nexport const rx_indent = /^([ \\t]*)(.*)$/ ;\nexport const rx_indent_order = /^[\\t]*[ ]*$/ ;\n\nimport createLoc from './_location.jsy'\n\nexport function basic_offside_scanner(source, feedback) ::\n  if null == feedback ::\n    feedback = @{}\n      warn(msg, ...args) :: console.warn @ `[Offside Warning]:: ${msg}`, ...args\n\n  const all_lines = []\n  const q_raw_lines = source.split(rx_lines)\n\n  const offside_line_proto = @{}\n    __proto__: null\n    get source() ::\n      const {start, end} = this.loc\n      return start.slice(end)\n\n  let loc_tip = createLoc(source, feedback.file)\n  let rx_indent_choice = null\n\n  while 0 !== q_raw_lines.length ::\n    const loc = @{} start: loc_tip = loc_tip.nextLine()\n\n    const src_line = q_raw_lines.shift() || ''\n    loc.end = loc_tip = loc_tip.move(src_line)\n\n    const src_line_end = q_raw_lines.shift() || ''\n    loc_tip = loc_tip.move(src_line_end)\n\n\n    const match = rx_indent.exec(src_line)\n    const loc_indent = loc.start.move(match[1])\n    const is_blank = 0 === match[2].length\n\n    if ! rx_indent_order.test(match[1]) ::\n      throw loc.start.syntaxError @ `Mixed tab and space indent (${loc_indent})`, \n\n    const raw = @{}\n      line: src_line\n      line_end: src_line_end\n      indent: match[1]\n      content: match[2]\n\n    let node\n    if is_blank ::\n      node = @{}\n        type: 'offside_blank_line', loc\n        is_blank\n\n    else ::\n      const indent_node = @{}\n        type: 'offside_indent',\n        loc: @{}\n          start: loc.start\n          end: loc_indent\n        len_indent: match[1].length\n        indent: match[1]\n\n      const conent_node = @{}\n        type: 'offside_content',\n        loc: @{}\n          start: loc_indent\n          end: loc.end\n        len_indent: match[1].length\n        indent: match[1]\n        content: match[2]\n\n      node = @{}\n        __proto__: offside_line_proto\n        type: 'offside_line', loc\n        indent: indent_node\n        content: conent_node\n        len_indent: match[1].length\n\n    Object.defineProperties @ node, @{} raw: {value: raw}\n    all_lines.push @ node\n\n  add_indent_info(all_lines)\n  return all_lines\n\n\nfunction add_indent_info(all_lines) ::\n  let len_dedent = 0 // how far to dedent to next outer level\n  let len_stack = [0]\n  // work backwards from the file end\n  for let i = all_lines.length-1 ; i>=0 ; i-- ::\n    let ln = all_lines[i]\n    if ln.is_blank :: continue\n\n    ln.len_dedent = len_dedent\n\n    // how many indent prefix chars per line\n    let len_indent = ln.len_indent\n\n    let len_inner\n    while len_stack[0] > len_indent ::\n      len_inner = len_stack.shift()\n\n    if len_stack[0] < len_indent ::\n      // len_indent is the new stack tip\n      len_stack.unshift @ len_indent\n\n    if len_inner ::\n      ln.len_inner = len_inner\n\n    len_dedent = len_indent\n","\nexport function ensure_indent(ctx, scanner) ::\n  const ln_first = scanner.ln_first\n  if undefined === ln_first :: return true\n  const len_first_indent = ln_first.len_indent\n\n  const d_dedent = ctx.ln.len_indent - len_first_indent\n  if d_dedent < 0 ::\n    throw ctx.ln.indent.loc.end.syntaxError @\n      `Invalid indent level in ${scanner.description}. (${ctx.ln.indent.loc.end})  --  current indent: ${ctx.ln.len_indent}  start indent: ${len_first_indent} from (${ln_first.loc.start})`\n  else return true\n\n\nexport function ensure_progress(loc0, loc1) ::\n  if loc0.pos == loc1.pos ::\n    throw new Error @ `Scanner failed to make progress (${loc1})`\n\n  if loc0.pos > loc1.pos ::\n    throw new Error @ `Scanner went backward (${loc1} from ${loc0})`\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class DispatchScanner ::\n  constructor(disp_name) ::\n    this.disp_name = disp_name || 'root'\n    this.by_kind = {}\n    this.by_op = {}\n\n  startCompile() ::\n    Object.defineProperties @ this, @{}\n      rx_list: @{} value: (this.rx_list || []).slice()\n    this.by_kind = Object.assign @ {}, this.by_kind\n    this.by_op = Object.assign @ {}, this.by_op\n    return this\n\n  addScannerList(scannerList) ::\n    for const scanner of scannerList ::\n      if scanner ::\n        this.addScanner(scanner)\n    return this\n\n  addScanner(scanner) ::\n    if scanner.withDispatch ::\n      scanner = scanner.withDispatch(this)\n\n    if scanner.is_body ::\n      this.ds_body = scanner\n\n    this.by_op[scanner.op] = scanner\n\n  addRegExpScanner(scanner, kind, re_disp) ::\n    if kind ::\n      this.by_kind[kind] = scanner.op\n      this.rx_list.push @ new RegExp(re_disp, 'g')\n    return this\n\n  finishCompile(ds_body) ::\n    if undefined === ds_body ::\n      ds_body = this.ds_body\n    return Object.defineProperties @ this, @{}\n      ds_body: @{} value: ds_body, writable: true\n\n\n  clone0() ::\n    if undefined !== this.level ::\n      throw new Error @ `Invalid clone0`\n    return this.cloneWithScanner()\n\n  cloneWithScanner(...scanners) ::\n    return this.cloneWithScannerList(scanners)\n  cloneWithScannerList(scanners) ::\n    const self = Object.create(this)\n    self.level = 1 + 0|self.level\n    self.description = self.description.replace @\n      /\\(\\d+\\)/, `(${self.level})`\n\n    self.startCompile()\n    self.addScannerList(scanners)\n    self.finishCompile()\n    return self\n\n\n  get_active_dispatch(ctx) ::\n    return ctx[`dispatch_${this.disp_name}`]\n  set_active_dispatch(ctx) ::\n    ctx.dispatch = ctx[`dispatch_${this.disp_name}`] = this\n\n\n  newline(ctx, is_blank) ::\n\n  scan(ctx, idx0) ::\n    const loc0 = ctx.loc_tip\n    const res = this._scan(ctx, idx0)\n    ensure_progress @ loc0, ctx.loc_tip\n    return res\n\n  _scan(ctx, idx0) ::\n    this.set_active_dispatch(ctx)\n\n    if undefined === this.ln_first ::\n      if undefined === this.level ::\n        throw new Error('Scanner with level: undefined')\n\n      this.ln_first = ctx.ln\n\n    ensure_indent(ctx, this)\n\n    const source = ctx.ln_source // slice is done by setting lastIndex\n    let match=null, idx1 = Infinity\n\n    for const rx of this.rx_list ::\n      rx.lastIndex = idx0 // regexp powered source.slice()\n\n      const m = rx.exec(source)\n      if null !== m && m.index < idx1 ::\n        idx1 = m.index\n        match = m\n\n    if null === match ::\n      return this.ds_body.scan(ctx, idx0)\n\n    if idx0 !== idx1 ::\n      return this.ds_body.scan_fragment @\n        ctx, source.slice(idx0, idx1)\n\n    const kind = match.filter(Boolean)[1]\n    const op = this.by_kind[kind]\n    const op_scanner = this.by_op[op]\n    if ! op_scanner ::\n      throw new Error @ `No scanner registered for « ${kind} »`\n\n    return op_scanner.scan(ctx, idx1)\n\n  scan_fragment(ctx, content) ::\n    throw new Error @ `${this.description} does not support fragments`\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class DispatchFirstlineScanner extends DispatchScanner ::\n  clone0() ::\n    const self = super.clone0()\n    self.ds_body = self.ds_body.clone0()\n    return self\n  scan(ctx, idx0) ::\n    ctx.scanner = this.ds_body\n    return super.scan(ctx, idx0)\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class EmbeddedDispatchScanner extends DispatchScanner ::\n  constructor(options) ::\n    super @ options.disp_name\n    Object.assign(this, options)\n    this._compileForInit()\n\n  _compileForInit() ::\n    this.startCompile()\n    this.addScannerList(this.scannerList)\n    this.finishCompile()\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class BaseSourceScanner ::\n  constructor(options) ::\n    Object.assign(this, options)\n    this._compileForInit()\n\n  _compileForInit() ::\n\n  withDispatch(ds) :: return this\n\n  emit_ast(ctx, content, ast_type) ::\n    const start = ctx.loc_tip\n    const end = ctx.loc_tip = start.move(content || 0)\n    const ast = @{} type: ast_type || this.op, loc: {start, end}, content\n    this.ast_extend(ctx, ast)\n    ctx.parts.push @ ast\n    return ast\n\n  ast_extend(ctx, ast) ::\n\n  newline(ctx, is_blank) ::\n  scan_fragment(ctx, content) ::\n    throw new Error @ `Scanner (${this.description}) does not support fragments`\n  scan(ctx, idx0) ::\n    throw new Error @ `Scanner (${this.description}) does not support scans`\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class SourceCodeScanner extends BaseSourceScanner ::\n  get is_body() :: return true\n\n  scan_fragment(ctx, content) ::\n    this.scan_content @ ctx, content\n\n  scan(ctx, idx0) ::\n    this.scan_content @ ctx, ctx.ln_source.slice(idx0)\n\n  scan_content(ctx, content) ::\n    if content ::\n      this.emit_ast @ ctx, content\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class NestedCodeScanner extends SourceCodeScanner ::\n  constructor(options) ::\n    super(options)\n    if ! this.char_pairs ::\n      throw new Error @ 'Missing required char_pairs mapping'\n\n    const chars = Object.keys(this.char_pairs).join('\\\\')\n    this.rx = new RegExp(`([${chars}])`)\n\n  withOuter(options) ::\n    const scanner = options.scanner\n    if 'function' !== typeof scanner.scan ::\n      throw new Error @ `Expected valid outer scanner`\n    delete options.scanner\n\n    const self = Object.create @ this, @{}\n      restore_scanner: @{} value: scanner\n    Object.assign @ self, options\n    return self\n\n  scan_content(ctx, nested_content) ::\n    const {stack, char_pairs} = this\n\n    let content = ''\n    for const tok of nested_content.split(this.rx) ::\n      const p = 1 === tok.length ? char_pairs[tok] : undefined\n\n      if undefined === p ::\n        content += tok\n        continue\n\n      if true === p ::\n        content += tok\n        stack.push @ tok\n        continue\n\n      const tip = stack.pop()\n      if tip !== p ::\n        const loc = ctx.loc_tip.move(content)\n        throw loc.syntaxError @\n          `Mismatched nesting in ${this.description} (${loc})`\n\n      if 0 !== stack.length ::\n        content += tok\n        continue\n\n      if content ::\n        this.emit_ast @ ctx, content\n      this.emit_ast @ ctx, tok, this.ast_end || 'nested_end'\n      ctx.scanner = this.restore_scanner\n      return\n\n    // all tokens with non-zero stack\n    if content ::\n      this.emit_ast @ ctx, content\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class RegExpScanner extends BaseSourceScanner ::\n\n  _compileForInit() ::\n    const {rx_open, rx_close} = this\n    const rx_disp = new RegExp @\n      (rx_open ? rx_open.source : '') + rx_close.source\n\n    const rx_resume = new RegExp @\n      '^' + rx_close.source\n\n    Object.defineProperties @ this, @{}\n      rx_disp: @{} value: rx_disp\n      rx_resume: @{} value: rx_resume\n\n  withDispatch(ds) ::\n    this.compileForDispatch(ds)\n    return this\n\n  compileForDispatch(ds) ::\n    if undefined === this.kind :: return\n\n    const match = this.rx_disp.exec @ this.example\n    if null === match || this.kind !== match[1] || null == match[2] ::\n      throw new Error @ `Invalid scanner regexp and/or example (${this.description})`\n\n    ds.addRegExpScanner @ this, this.kind, this.rx_disp.source\n\n\n\n  newline(ctx, is_blank) ::\n    if ! this.multiline && ! this.allow_blank_close ::\n      throw ctx.ln.loc.end.syntaxError @\n        `Newline in ${this.description} (${ctx.ln.loc.end})`\n\n  ast_extend(ctx, ast) ::\n    const ln = this.ln_first || ctx.ln\n    if undefined !== ln.len_inner ::\n      ast.block_indent = ln.len_inner\n    return ast\n\n  scan(ctx, idx0) ::\n    const match = this.rx_disp.exec @ ctx.ln_source.slice(idx0)\n    if null === match ::\n      throw ctx.loc_tip.syntaxError @\n        `Invalid scan ${this.description}. (${ctx.loc_tip})`\n\n    const [content, open, close] = match\n\n    const t_content = this.nestTrim(content, close, false)\n    if null != t_content ::\n      this.ast_scan_match @ {open, close},\n        this.emit_ast @ ctx, t_content,\n    return this.post_scan(ctx, close)\n\n  scan_continue(ctx, idx0) ::\n    ensure_indent(ctx, this)\n\n    const match = this.rx_resume.exec @ ctx.ln_source.slice(idx0)\n    if null === match ::\n      throw ctx.loc_tip.syntaxError @\n        `Invalid scan continue ${this.description}. (${ctx.loc_tip})`\n\n    const [content, close] = match\n\n    const t_content = this.nestTrim(content, close, true)\n    if null != t_content ::\n      this.ast_scan_match @ {close},\n        this.emit_ast @ ctx, t_content,\n    return this.post_scan(ctx, close)\n\n  ast_scan_match(match, ast) ::\n\n  nestTrim(content, close, isContinue) :: return content\n\n  post_scan(ctx, close) ::\n    if ! close ::\n      if this.invert_close ::\n        // e.g. no '\\' continuations at end of line\n        return true\n\n      if ! this.allow_blank_close ::\n        ctx.scanner = this.continueScanner(ctx)\n      return\n\n    else if this.invert_close ::\n      // e.g. '\\' continuations at end of line\n      ctx.scanner = this.continueScanner(ctx)\n\n    return this.nestMatch @ close,\n      ctx, this.hostScanner || this\n\n  nestMatch(close, ctx, hostScanner) ::\n    const nesting = this.nesting\n    if undefined !== nesting ::\n      return this.nestWith @\n        nesting[close],\n        ctx, hostScanner\n    return true // pop ctx.scanner\n\n  nestWith(nested, ctx, hostScanner) ::\n    if true === nested || undefined === nested || null === nested ::\n      return true // pop ctx.scanner\n\n    else if hostScanner === nested || 'host' === nested ::\n      ctx.scanner = hostScanner.continueScanner(ctx)\n      return\n\n    else if 'function' === typeof nested.nestedScanner ::\n      ctx.scanner = nested.nestedScanner(ctx)\n      return\n\n    else if 'function' === typeof nested ::\n      return nested @ ctx, hostScanner\n\n    return nested\n\n\n  nestedScanner(ctx) ::\n    return this._asNestedScanner @ ctx, 'nest', @{}\n\n  continueScanner(ctx) ::\n    return this._asNestedScanner @ ctx, 'cont', @{}\n      op: this.op_continue || this.op\n      continueScanner(ctx) :: return this\n      scan(ctx, idx0) ::\n        this.scan_continue(ctx, idx0)\n\n  _asNestedScanner(ctx, desc, body) ::\n    const restore_scanner = ctx.scanner\n    const self = @{}\n      __proto__: this\n      description: `${this.description} (${desc})`\n      ln_first: ctx.ln_first || ctx.ln\n\n      _pop_scanner(ctx) ::\n        if this.op_pop ::\n          this.emit_ast @ ctx, '', this.op_pop\n        ctx.scanner = restore_scanner\n\n      scan(ctx, idx0) ::\n        if true === super.scan(ctx, idx0) ::\n          this._pop_scanner(ctx)\n\n      scan_continue(ctx, idx0) ::\n        if true === super.scan_continue(ctx, idx0) ::\n          this._pop_scanner(ctx)\n\n    return Object.assign @ self, body\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class MultiLineScanner extends RegExpScanner ::\n  newline(ctx, is_blank) ::\n  get multiline() :: return true\n\n  ast_extend(ctx, ast) ::\n    //let ln = this.ln_first || ctx.ln\n    let col = ast.loc.start.column\n    let mlctx = this.mlctx ??= {col}\n\n    if col < mlctx.col ::\n      mlctx.col = col\n\n    ast.mlctx = mlctx\n    return ast\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class TaggedRegExpScanner extends RegExpScanner ::\n  withTag(ctx, tag, hostScanner) ::\n    const rx_replace = this.rx_replace || /tag/g\n\n    const re_open = this.rx_open.source\n      .replace @ rx_replace, tag\n    const re_close = this.rx_close.source\n      .replace @ rx_replace, tag\n\n    const rx_open = new RegExp @ re_open\n    const rx_close = new RegExp @ re_close\n    const rx_disp = new RegExp @ re_open + rx_close.source\n    const rx_resume = new RegExp @ '^' + re_close\n\n    const self = @{} __proto__: this, hostScanner,\n      rx_open, rx_close, rx_resume, rx_disp,\n      tag, ln_first: ctx.ln\n      compileForDispatch(ds) ::\n        // skip testing example for second pass of this object\n        ds.addRegExpScanner @ this, this.kind, this.rx_disp.source\n\n    self.tagScanner(ctx, tag, hostScanner)\n    return self\n\n  tagScanner(ctx, tag, hostScanner) ::\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class DynamicScanner extends MultiLineScanner ::\n  scan(ctx, idx0) ::\n    const leader_match = this.rx_disp.exec @ ctx.ln_source.slice(idx0)\n\n    const self = this.withLeaderTag @ ctx, leader_match[2]\n    return self._leader.scan(ctx, idx0)\n\n  withLeaderTag(ctx, tag) ::\n    const self = @{}\n      __proto__: this\n      __root__: this.__root__ || this\n      ln_first: ctx.ln\n\n    self._trailer = this.trailer && this.trailer.withTag @ ctx, tag, self\n    self._leader = this.leader.withTag @ ctx, tag, self\n    return self\n\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nexport class EmbeddedDynamicScanner extends DynamicScanner ::\n  continueScanner(ctx) ::\n    ensure_indent(ctx, this)\n    const ds_body = this.ds_body.cloneWithScanner @ this._trailer\n\n    // inherit ln_first\n    ds_body.ln_first = \n      ds_body.disp_name === ctx.dispatch.disp_name\n        ? ctx.dispatch.ln_first\n        : this.ln_first || ctx.ln\n\n    return ds_body\n\n  andDispatchWith(options) ::\n    options.scannerList = @[] ... options.scannerList, this\n    const ds_body = new EmbeddedDispatchScanner(options)\n    this.ds_body = ds_body\n    return ds_body\n\n","import { DispatchScanner, DispatchFirstlineScanner } from './context_scanner.jsy'\n\nexport function bind_context_scanner(context_scanners) ::\n  if ! Object.isFrozen(context_scanners) || ! Array.isArray(context_scanners) ::\n    throw new TypeError @ `Expected a frozen array of context scanners`\n\n  const cache = bind_context_scanner.cache || new WeakMap()\n  if cache !== bind_context_scanner.cache ::\n    bind_context_scanner.cache = cache\n\n  let res = cache.get(context_scanners)\n  if undefined === res ::\n    res = compile_context_scanner(context_scanners)\n    cache.set(context_scanners, res)\n  return res\n\n\nfunction compile_context_scanner(context_scanners) ::\n  const ds_first = build_composite_scanner(context_scanners)\n  return context_scanner\n\n  function context_scanner(offside_lines) ::\n    const ctx = @{} scanner: ds_first.clone0()\n\n    for const ln of offside_lines ::\n      if ln.is_blank ::\n        delete ln.content\n        ctx.scanner.newline(ctx, true)\n        continue\n\n\n      ctx.parts = []\n      ctx.ln = ln\n\n      scan_source(ctx, ln.content)\n\n      if 0 === ctx.parts.length ::\n        throw new Error @ `No parts generated by context scanner`\n\n      ln.content = ctx.parts\n      ctx.scanner.newline(ctx, false)\n\n    ctx.scanner.newline(ctx, true)\n    return offside_lines\n\n\n  function scan_source(ctx, ln_content) ::\n    const ln_source = ctx.ln_source = ln_content.content\n    const loc_start = ctx.loc_tip = ctx.loc_start = ln_content.loc.start\n    const pos0 = loc_start.pos\n\n    while true ::\n      const idx0 = ctx.loc_tip.pos - pos0\n      if idx0 >= ln_source.length ::\n        return // done with this line\n\n      ctx.scanner.scan @ ctx, idx0\n\n\n  function build_composite_scanner() ::\n    const ds_body = new DispatchScanner().startCompile()\n    ds_body.description = 'JSY Dispatch scanner (0)'\n    const ds_first = new DispatchFirstlineScanner().startCompile()\n    ds_first.description = 'Firstline JSY Dispatch scanner (0)'\n\n    for const scanner of context_scanners ::\n      if ! scanner :: continue\n\n      const ds = scanner.firstline ? ds_first : ds_body\n      ds.addScanner(scanner)\n\n    ds_body.finishCompile()\n    return ds_first.finishCompile(ds_body)\n\n","import { basic_offside_scanner } from './basic_offside.jsy'\nimport { bind_context_scanner } from './basic_contexts.jsy'\n\nexport function scan_offside_contexts(source, feedback, disp_name, context_scanners) ::\n  // see scan_javascript and scan_clike for good context_scanners\n  const context_scanner = bind_context_scanner(disp_name, context_scanners)\n  return context_scanner @ basic_offside_scanner(source, feedback)\n\n","\nexport function inject_dedent(offside_lines, trailing_types) ::\n  if 'function' !== typeof trailing_types ::\n    const s_trailing_types = new Set @\n      trailing_types || ['comment_eol']\n    trailing_types = k => s_trailing_types.has(k)\n\n  for const ln of offside_lines ::\n    if ln.is_blank :: continue\n\n    const {len_dedent, len_indent, len_inner} = ln\n\n    const offside_dedent = @{}\n      type: 'offside_dedent'\n      len_dedent, len_indent\n\n    if len_inner ::\n      offside_dedent.len_inner = len_inner\n\n    const last = ln.content.pop()\n    if last.multiline || trailing_types(last.type) ::\n      ln.content.push @ offside_dedent, last\n    else ::\n      ln.content.push @ last, offside_dedent\n\n","import { SourceCodeScanner, NestedCodeScanner, RegExpScanner, MultiLineScanner } from './context_scanner.jsy'\nimport { scan_offside_contexts } from './basic_offside_contexts.jsy'\n\nexport const scanner_source =\n  new SourceCodeScanner @:\n      description: 'Source Code Scanner'\n      op: 'src'\n\nexport const scanner_nestedSrc =\n  new NestedCodeScanner @:\n    op: 'src', description: 'Template parameter source'\n    char_pairs: @{}\n      '{': true, '}': '{'\n      '(': true, ')': '('\n      '[': true, ']': '['\n\nexport const scanner_hashbangDirective =\n  new RegExpScanner @:\n      description: 'Hashbang directive'\n      example: '#!/usr/bin/env node'\n      op: 'hashbang', kind:'#!'\n      rx_open: /^(#!)/, rx_close: /.*($)/,\n      firstline: true\n      allow_blank_close: true\n\nexport const scanner_commentEOL =\n  new RegExpScanner @:\n      description: 'Comment to end of line'\n      example: '// comment'\n      op: 'comment_eol', kind:'//'\n      rx_open: /(\\/\\/)/, rx_close: /.*($)/,\n      allow_blank_close: true\n\nexport const scanner_commentMultiLine =\n  new MultiLineScanner @:\n      description: 'Multi-line comment'\n      example: '/* comment */'\n      op: 'comment_multi', kind:'/*'\n      rx_open: /(\\/\\*)/, rx_close: /.*?(\\*\\/|$)/,\n\nexport const scanner_strSingle =\n  new RegExpScanner @:\n      description: 'Single quote string literal'\n      example: \"'single quote'\"\n      op: 'str1', kind:\"'\"\n      rx_open: /(')/, rx_close: /(?:\\\\.|[^'])*('|$)/,\n\nexport const scanner_strDouble =\n  new RegExpScanner @:\n      description: 'Double quote string literal'\n      example: '\"double quote\"'\n      op: 'str2', kind:'\"'\n      rx_open: /(\")/, rx_close: /(?:\\\\.|[^\"])*(\"|$)/,\n\nexport const scanner_preprocessor =\n  new RegExpScanner @:\n      description: 'Preprocessor directive'\n      example: '# IF platform === \"web\"'\n      op: 'preprocessor', kind:'#'\n      rx_open: /^\\s*(#)/, rx_close: /.*?([\\\\]?)\\s*$/,\n      invert_close: true // preprocessor uses '\\' continuations\n      allow_blank_close: true\n\n\nexport const clike_context_scanners = Object.freeze @#\n  scanner_source\n  scanner_hashbangDirective\n  scanner_commentEOL\n  scanner_commentMultiLine\n  scanner_strSingle\n  scanner_strDouble\n  scanner_preprocessor\n\n\nexport function scan_clike(source, feedback) ::\n  return scan_offside_contexts(source, feedback, clike_context_scanners)\n\n","import { scan_offside_contexts } from './basic_offside_contexts.jsy'\nimport { RegExpScanner, MultiLineScanner } from './context_scanner.jsy'\nimport { scanner_source, clike_context_scanners, scanner_nestedSrc } from './scan_clike.jsy'\n\nexport const scanner_regexp =\n  new RegExpScanner @:\n      description: 'RegExp literal'\n      example: '/regexp/'\n      op: 'regexp'\n      kind: '/'\n\n      /*\n      rx_open: rx_or_parts @:\n        opts: @[]\n          /(\\/)(?![\\/\\*])/    // start of a potential regexp literal, but not a comment\n\n          @{}                 // ...complex regexp grammar...\n            pre: ''\n            opts: @[]\n              /\\\\./           // ...any escaped character...\n              /[^\\\\\\/\\[]/     // ...or any non-special character...\n\n              @{}             // ... or a bracket [] expression...\n                pre: '\\\\['        // started with a '[' character\n                opts: @[]\n                  /\\\\./           // ...with any escaped character\n                  /[^\\]]/         // ...or any non-escaped non-ending ']' character\n                post: '*\\\\]'      // ended with an ending ']' character\n\n            post: '+'         // one or more interior expressions\n\n          /(?=\\/)/            // (lookahead) end of a regexp literal\n      */\n\n      rx_open: new RegExp @\n        /(\\/)(?![\\/\\*])/ .source + // a RegExp start but not a comment\n        /(?:\\\\.|[^\\\\\\/\\[]|\\[(?:\\\\.|[^\\]])*\\])+/ .source\n\n      rx_close: /(\\/[a-z]*)\\s*(?=[;.,)\\]}]|$)/  // inspired by vim's syntax highlighting end\n\n      //multiline: false // spec https://tc39.es/ecma262/#sec-literals-regular-expression-literals\n\n\nexport const scanner_strTemplate =\n  new MultiLineScanner @:\n      description: 'Template quote string literal'\n      example: '`template string`'\n      op: 'str_template'\n      kind: '`'\n      rx_open: /(`)\\\\?/\n      rx_close: /(?:\\\\.|\\$(?!{)|[^\\$`\\\\])*(`|\\${|$)/\n      nesting: @{}\n        '${': templateArgNesting\n\n      ast_scan_match(scan, ast) ::\n        if '`' == scan.open ::\n          ast.tmpl_opened = true\n        if '`' == scan.close ::\n          ast.tmpl_closed = true\n\nfunction templateArgNesting(ctx, hostScanner) ::\n  const src = scanner_nestedSrc.withOuter @:\n    scanner: hostScanner.continueScanner(ctx)\n    stack: @[] '{' // from the template parameter opening\n    ast_end: 'template_param_end'\n\n  src.emit_ast @ ctx, '', 'template_param'\n\n  ctx.scanner = ctx.dispatch_root.cloneWithScanner(src)\n\n\n\nexport const js_context_scanners = Object.freeze @#\n  scanner_regexp\n  scanner_strTemplate\n  ... clike_context_scanners\n\nexport function scan_javascript(source, feedback) ::\n  return scan_offside_contexts(source, feedback, js_context_scanners)\n\n","\nconst _as_loc = p => p.loc &&= `${p.loc.start}..${p.loc.end}`\n\nexport function * iter_ast_ndjson(iter_ast) ::\n  for let ln of iter_ast ::\n    _as_loc(ln)\n    if ln.indent ::\n      _as_loc(ln.indent)\n\n    ln.content?.map?.(_as_loc)\n    yield ln\n\n\nexport function ast_to_json5(ast) ::\n  const out = []\n  for let ln of ast ::\n    if loc :: loc = loc.start.toString()\n    if ! content ::\n      out.push @ `  [\"${type} at ${loc}\"],`\n      continue\n\n    out.push @ `  [\"${type} at ${loc} with '${indent.indent}'\",`\n\n    for let {type:ct, content:cc} of content ::\n      out.push @ `    ${JSON.stringify([ct, cc])},`\n\n    out.push @ `  ],\\n`\n\n  return `[\\n${out.join('\\n')}\\n]\\n`\n\n"],"names":[],"mappings":"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"}