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([
|
export const JS_KEYWORDS = new Set([
|
||||||
'abstract',
|
'abstract',
|
||||||
'await',
|
'await',
|
||||||
|
|
|
@ -23,7 +23,7 @@ export const $ref = Symbol.for("ref");
|
||||||
export const $schema = Symbol.for("schema");
|
export const $schema = Symbol.for("schema");
|
||||||
export const $setof = Symbol.for("setof");
|
export const $setof = Symbol.for("setof");
|
||||||
export const $tuple = Symbol.for("tuple");
|
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 $version = Symbol.for("version");
|
||||||
export const __lit5 = false;
|
export const __lit5 = false;
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ export namespace SimplePattern {
|
||||||
export namespace CompoundPattern {
|
export namespace CompoundPattern {
|
||||||
export function rec(label: NamedPattern, fields: NamedPattern): CompoundPattern {return {"_variant": "rec", label, fields};};
|
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(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 setof(pattern: SimplePattern): CompoundPattern {return {"_variant": "setof", pattern};};
|
||||||
export function dictof(key: SimplePattern, value: SimplePattern): CompoundPattern {return {"_variant": "dictof", key, value};};
|
export function dictof(key: SimplePattern, value: SimplePattern): CompoundPattern {return {"_variant": "dictof", key, value};};
|
||||||
export function dict(entries: DictionaryEntries): CompoundPattern {return {"_variant": "dict", entries};};
|
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 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};}
|
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 (result === void 0) {
|
||||||
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
|
if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) {
|
||||||
let _tmp8: (null) | undefined;
|
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 (_tmp8 !== void 0) {
|
||||||
if (_.Array.isArray(v[0])) {
|
if (_.Array.isArray(v[0])) {
|
||||||
let _tmp9: (Array<_val>) | undefined;
|
let _tmp9: (Array<_val>) | undefined;
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { Value, is, Position } from '@preserves/core';
|
||||||
import * as M from './gen/schema';
|
import * as M from './gen/schema';
|
||||||
import { SchemaSyntaxError } from './error';
|
import { SchemaSyntaxError } from './error';
|
||||||
import type { AtomicType } from './compiler/type';
|
import type { AtomicType } from './compiler/type';
|
||||||
import { JS_KEYWORDS } from './compiler/jskw';
|
import { isJsKeyword } from './compiler/jskw';
|
||||||
|
|
||||||
export * from './gen/schema';
|
export * from './gen/schema';
|
||||||
|
|
||||||
|
@ -15,17 +15,18 @@ export function isValidToken(s: string): boolean {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isValidJsId(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 {
|
export function jsId(v: string, kf?: () => string): string {
|
||||||
const s = v
|
return jsToken(v.replace('$', '$$').replace('*', '$STAR$'), kf);
|
||||||
.replace('_', '__')
|
}
|
||||||
.replace('*', '_STAR_');
|
|
||||||
|
export function jsToken(s: string, kf?: () => string): string {
|
||||||
if (isValidJsId(s)) return s;
|
if (isValidJsId(s)) return s;
|
||||||
if (isValidJsId('$' + s)) return '$' + s;
|
if (isValidJsId('$' + s)) return '$' + s;
|
||||||
if (kf !== void 0) return kf();
|
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('&');
|
export const ANDSYM = Symbol.for('&');
|
||||||
|
@ -110,7 +111,7 @@ export function addNameIfAbsent(p: M.NamedSimplePattern, k: M._val): M.NamedSimp
|
||||||
} else {
|
} else {
|
||||||
const s = namelike(k);
|
const s = namelike(k);
|
||||||
if (s !== void 0) {
|
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 {
|
} else {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ function parseDefinition(name: symbol, body: Array<Input>): Definition {
|
||||||
const n = findName(input) || findName(input[0]);
|
const n = findName(input) || findName(input[0]);
|
||||||
if (n !== false) {
|
if (n !== false) {
|
||||||
if (p._variant !== 'SimplePattern') namedMustBeSimple(position(input[0]));
|
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);
|
return M.NamedPattern.anonymous(p);
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ function parsePattern(name: symbol, body0: Array<Input>): Pattern {
|
||||||
if (name === false) {
|
if (name === false) {
|
||||||
return anonymous(recur(b));
|
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)))));
|
namedMustBeSimple(position(b)))));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -281,7 +281,7 @@ function parsePattern(name: symbol, body0: Array<Input>): Pattern {
|
||||||
} else if (Array.isArray(item)) {
|
} else if (Array.isArray(item)) {
|
||||||
if (is(item[item.length - 1], M.DOTDOTDOT)) {
|
if (is(item[item.length - 1], M.DOTDOTDOT)) {
|
||||||
if (item.length < 2) complain();
|
if (item.length < 2) complain();
|
||||||
return M.CompoundPattern.tuple_STAR_(
|
return M.CompoundPattern.tuple$STAR$(
|
||||||
item.slice(0, item.length - 2).map(maybeNamed),
|
item.slice(0, item.length - 2).map(maybeNamed),
|
||||||
maybeNamedSimple(item[item.length - 2]));
|
maybeNamedSimple(item[item.length - 2]));
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue