Better treatment of embedded conversion

This commit is contained in:
Tony Garnock-Jones 2024-05-08 11:20:57 +02:00
parent 4e5e64f0a6
commit a8b300e57d
1 changed files with 2 additions and 3 deletions

View File

@ -282,7 +282,7 @@ export class Reader extends ReaderBase<never> {
export interface AsPreservesOptions<T extends Embeddable> {
onGroup?: (g: Positioned<Group>) => Value<T>;
onEmbedded?: (v: Value<T>) => Value<T>;
onEmbedded?: (e: Positioned<Expr>, walk: (p: Positioned<Expr>) => Value<T>) => Value<T>;
error?: (tag: string, position: Position) => Value<T>;
}
@ -302,9 +302,8 @@ export function asPreserves<T extends Embeddable>(
if (p.item instanceof Punct) {
return error('invalid-punctuation', p.position);
} else if (p.item instanceof Embedded) {
const e = walk({ position: p.position, item: p.item.expr });
if (options.onEmbedded) {
return options.onEmbedded(e);
return options.onEmbedded({ position: p.position, item: p.item.expr }, walk);
} else {
return error('unexpected-embedded', p.position);
}