UNPKG

webidl2

Version:
61 lines (56 loc) 1.59 kB
import { Base } from "./base.js"; import { const_data, const_value } from "./helpers.js"; export class Default extends Base { /** * @param {import("../tokeniser.js").Tokeniser} tokeniser */ static parse(tokeniser) { const assign = tokeniser.consume("="); if (!assign) { return null; } const def = const_value(tokeniser) || tokeniser.consumeKind("string") || tokeniser.consume("null", "[", "{") || tokeniser.error("No value for default"); const expression = [def]; if (def.value === "[") { const close = tokeniser.consume("]") || tokeniser.error("Default sequence value must be empty"); expression.push(close); } else if (def.value === "{") { const close = tokeniser.consume("}") || tokeniser.error("Default dictionary value must be empty"); expression.push(close); } return new Default({ source: tokeniser.source, tokens: { assign }, expression, }); } constructor({ source, tokens, expression }) { super({ source, tokens }); expression.parent = this; Object.defineProperty(this, "expression", { value: expression }); } get type() { return const_data(this.expression[0]).type; } get value() { return const_data(this.expression[0]).value; } get negative() { return const_data(this.expression[0]).negative; } /** @param {import("../writer.js").Writer} w */ write(w) { return w.ts.wrap([ w.token(this.tokens.assign), ...this.expression.map((t) => w.token(t)), ]); } }