Use $ instead of _ in tokens
This commit is contained in:
parent
4814790d8e
commit
87dda48083
|
@ -1,3 +1,7 @@
|
|||
export function isJsKeyword(s: string): boolean {
|
||||
return JS_KEYWORDS.has(s);
|
||||
}
|
||||
|
||||
export const JS_KEYWORDS = new Set([
|
||||
'abstract',
|
||||
'await',
|
||||
|
|
|
@ -23,7 +23,7 @@ export const $ref = Symbol.for("ref");
|
|||
export const $schema = Symbol.for("schema");
|
||||
export const $setof = Symbol.for("setof");
|
||||
export const $tuple = Symbol.for("tuple");
|
||||
export const $tuple_STAR_ = Symbol.for("tuple*");
|
||||
export const $tuple$STAR$ = Symbol.for("tuple*");
|
||||
export const $version = Symbol.for("version");
|
||||
export const __lit5 = false;
|
||||
|
||||
|
@ -147,7 +147,7 @@ export namespace SimplePattern {
|
|||
export namespace CompoundPattern {
|
||||
export function rec(label: NamedPattern, fields: NamedPattern): CompoundPattern {return {"_variant": "rec", label, fields};};
|
||||
export function tuple(patterns: Array<NamedPattern>): CompoundPattern {return {"_variant": "tuple", patterns};};
|
||||
export function tuple_STAR_(fixed: Array<NamedPattern>, variable: NamedSimplePattern): CompoundPattern {return {"_variant": "tuple*", fixed, variable};};
|
||||
export function tuple$STAR$(fixed: Array<NamedPattern>, variable: NamedSimplePattern): CompoundPattern {return {"_variant": "tuple*", fixed, variable};};
|
||||
export function setof(pattern: SimplePattern): CompoundPattern {return {"_variant": "setof", pattern};};
|
||||
export function dictof(key: SimplePattern, value: SimplePattern): CompoundPattern {return {"_variant": "dictof", key, value};};
|
||||
export function dict(entries: DictionaryEntries): CompoundPattern {return {"_variant": "dict", entries};};
|
||||
|
@ -175,7 +175,7 @@ export namespace NamedPattern {
|
|||
export function anonymous(value: Pattern): NamedPattern {return {"_variant": "anonymous", value};};
|
||||
}
|
||||
|
||||
export function NamedSimplePattern__(name: symbol, pattern: SimplePattern): NamedSimplePattern_ {return {name, pattern};}
|
||||
export function NamedSimplePattern_(name: symbol, pattern: SimplePattern): NamedSimplePattern_ {return {name, pattern};}
|
||||
|
||||
export function Ref(module: ModulePath, name: symbol): Ref {return {module, name};}
|
||||
|
||||
|
@ -490,7 +490,7 @@ export function toCompoundPattern(v: _val): undefined | CompoundPattern {
|
|||
if (result === void 0) {
|
||||
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
|
||||
let _tmp8: (null) | undefined;
|
||||
_tmp8 = _.is(v.label, $tuple_STAR_) ? null : void 0;
|
||||
_tmp8 = _.is(v.label, $tuple$STAR$) ? null : void 0;
|
||||
if (_tmp8 !== void 0) {
|
||||
if (_.Array.isArray(v[0])) {
|
||||
let _tmp9: (Array<_val>) | undefined;
|
||||
|
|
|
@ -2,7 +2,7 @@ import { Value, is, Position } from '@preserves/core';
|
|||
import * as M from './gen/schema';
|
||||
import { SchemaSyntaxError } from './error';
|
||||
import type { AtomicType } from './compiler/type';
|
||||
import { JS_KEYWORDS } from './compiler/jskw';
|
||||
import { isJsKeyword } from './compiler/jskw';
|
||||
|
||||
export * from './gen/schema';
|
||||
|
||||
|
@ -15,17 +15,18 @@ export function isValidToken(s: string): boolean {
|
|||
}
|
||||
|
||||
export function isValidJsId(s: string): boolean {
|
||||
return /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(s) && !JS_KEYWORDS.has(s);
|
||||
return /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(s) && !isJsKeyword(s);
|
||||
}
|
||||
|
||||
export function jsId(v: string, kf?: () => string): string {
|
||||
const s = v
|
||||
.replace('_', '__')
|
||||
.replace('*', '_STAR_');
|
||||
return jsToken(v.replace('$', '$$').replace('*', '$STAR$'), kf);
|
||||
}
|
||||
|
||||
export function jsToken(s: string, kf?: () => string): string {
|
||||
if (isValidJsId(s)) return s;
|
||||
if (isValidJsId('$' + s)) return '$' + s;
|
||||
if (kf !== void 0) return kf();
|
||||
throw new Error(`Internal error: idForLiteral needs to be completed (${v})`);
|
||||
throw new Error(`Internal error: jsToken needs to be completed (${s})`);
|
||||
}
|
||||
|
||||
export const ANDSYM = Symbol.for('&');
|
||||
|
@ -110,7 +111,7 @@ export function addNameIfAbsent(p: M.NamedSimplePattern, k: M._val): M.NamedSimp
|
|||
} else {
|
||||
const s = namelike(k);
|
||||
if (s !== void 0) {
|
||||
return M.NamedSimplePattern.named(M.NamedSimplePattern__(Symbol.for(s), p.value));
|
||||
return M.NamedSimplePattern.named(M.NamedSimplePattern_(Symbol.for(s), p.value));
|
||||
} else {
|
||||
return p;
|
||||
}
|
||||
|
|
|
@ -164,7 +164,7 @@ function parseDefinition(name: symbol, body: Array<Input>): Definition {
|
|||
const n = findName(input) || findName(input[0]);
|
||||
if (n !== false) {
|
||||
if (p._variant !== 'SimplePattern') namedMustBeSimple(position(input[0]));
|
||||
return M.NamedPattern.named(M.NamedSimplePattern__(n, p.value));
|
||||
return M.NamedPattern.named(M.NamedSimplePattern_(n, p.value));
|
||||
}
|
||||
return M.NamedPattern.anonymous(p);
|
||||
}
|
||||
|
@ -253,7 +253,7 @@ function parsePattern(name: symbol, body0: Array<Input>): Pattern {
|
|||
if (name === false) {
|
||||
return anonymous(recur(b));
|
||||
}
|
||||
return named(M.NamedSimplePattern__(name, parseSimple(b, p => p, () =>
|
||||
return named(M.NamedSimplePattern_(name, parseSimple(b, p => p, () =>
|
||||
namedMustBeSimple(position(b)))));
|
||||
};
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ function parsePattern(name: symbol, body0: Array<Input>): Pattern {
|
|||
} else if (Array.isArray(item)) {
|
||||
if (is(item[item.length - 1], M.DOTDOTDOT)) {
|
||||
if (item.length < 2) complain();
|
||||
return M.CompoundPattern.tuple_STAR_(
|
||||
return M.CompoundPattern.tuple$STAR$(
|
||||
item.slice(0, item.length - 2).map(maybeNamed),
|
||||
maybeNamedSimple(item[item.length - 2]));
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue