First re-bootstrap of schema

This commit is contained in:
Tony Garnock-Jones 2024-03-27 13:26:09 +01:00
parent 297e1630a8
commit 9ecbd0bdd1
5 changed files with 60 additions and 55 deletions

View File

@ -192,7 +192,7 @@ export function converterForSimple(
const v = ctx.gentempname();
return [
seq(`${dest} = new _.EncodableSet`,
anglebrackets(renderType(ctx.mod, vt), '_embedded'),
anglebrackets('_embedded', renderType(ctx.mod, vt)),
parens(encoderForSimplePattern(ctx, p.pattern) ?? `v => v`)),
seq(`for (const ${v} of ${src}) `, ctx.block(() => [
... converterFor(ctx, M.anonymousSimplePattern(p.pattern), v, vv =>
@ -203,17 +203,19 @@ export function converterForSimple(
case 'dictof':
return [`${dest} = void 0`,
seq(`if (_.Dictionary.isDictionary<_embedded>(${src})) `, ctx.block(() => {
const srcMap = ctx.gentempname();
const resolver = ctx.mod.resolver();
const kt = simpleType(resolver, p.key);
const vt = simpleType(resolver, p.value);
const k = ctx.gentempname();
const v = ctx.gentempname();
return [
seq(`const ${srcMap} = new _.DictionaryMap(${src})`),
seq(`${dest} = new _.EncodableDictionary`,
anglebrackets(renderType(ctx.mod, kt), renderType(ctx.mod, vt), '_embedded'),
anglebrackets('_embedded', renderType(ctx.mod, kt), renderType(ctx.mod, vt)),
parens(encoderForSimplePattern(ctx, p.key) ?? `k => k`,
encoderForSimplePattern(ctx, p.value) ?? `v => v`)),
seq(`for (const [${k}, ${v}] of ${src}) `, ctx.block(() => [
seq(`for (const [${k}, ${v}] of ${srcMap}) `, ctx.block(() => [
... converterFor(ctx, M.anonymousSimplePattern(p.key), k, kk =>
converterFor(ctx, M.anonymousSimplePattern(p.value), v, vv =>
[`${dest}.set(${kk}, ${vv})`, `continue`])),
@ -251,12 +253,13 @@ function converterForCompound(
case 'tuplePrefix':
return converterForTuple(ctx, p.fixed, src, knownArray, p.variable, ks);
case 'dict': {
const srcMap = ctx.gentempname();
const entries = Array.from(p.entries);
function loop(i: number): Item[] {
if (i < entries.length) {
const [k, n] = entries[i];
const tmpSrc = ctx.gentemp();
return [seq(`if ((${tmpSrc} = ${src}.get(${ctx.mod.literal(k)})) !== void 0) `,
return [seq(`if ((${tmpSrc} = ${srcMap}.get(${ctx.mod.literal(k)})) !== void 0) `,
ctx.block(() =>
converterFor(
ctx,
@ -267,7 +270,9 @@ function converterForCompound(
return ks();
}
}
return [seq(`if (_.Dictionary.isDictionary<_embedded>(${src})) `, ctx.block(() => loop(0)))];
return [seq(`if (_.Dictionary.isDictionary<_embedded>(${src})) `, ctx.block(() => [
seq(`const ${srcMap} = new _.DictionaryMap(${src})`),
... loop(0)]))];
}
default:
((_p: never) => {})(p);

View File

@ -57,7 +57,7 @@ function unconverterFor(ctx: FunctionContext, p: M.Pattern, src: string): Item {
unconverterFor(ctx, M.Pattern.SimplePattern(p.pattern), 'v'),
`)`)));
case 'dictof':
return seq(`new _.Dictionary<_embedded>`, parens(seq(
return seq(`_.Dictionary.from<_embedded>`, parens(seq(
`_.Array.from(${src}.entries()).map(([k, v]) => `,
brackets(
unconverterFor(ctx, M.Pattern.SimplePattern(p.key), 'k'),
@ -95,7 +95,7 @@ function unconverterFor(ctx: FunctionContext, p: M.Pattern, src: string): Item {
}
}
case 'dict':
return seq(`new _.Dictionary<_embedded>`, parens(
return seq(`_.Dictionary.from<_embedded>`, parens(
brackets(... Array.from(p.entries.entries()).map(([k, n]) =>
brackets(
ctx.mod.literal(k),

View File

@ -47,12 +47,12 @@ export function renderType(ctxt: ModuleContext, t: Type): Item {
return seq(t.typeName, ctxt.genericArgsFor(t));
}
case 'set': return seq('_.EncodableSet', anglebrackets(
renderType(ctxt, t.type),
'_embedded'));
'_embedded',
renderType(ctxt, t.type)));
case 'dictionary': return seq('_.EncodableDictionary', anglebrackets(
'_embedded',
renderType(ctxt, t.key),
renderType(ctxt, t.value),
'_embedded'));
renderType(ctxt, t.value)));
case 'array': return seq('Array', anglebrackets(renderType(ctxt, t.type)));
case 'record': return braces(... simpleTypeFields(ctxt, t));
default:

View File

@ -23,7 +23,7 @@ export function sourceCodeFor(v: Value<M.InputEmbedded>): Item {
return seq('new _.Set<_.Value<_embedded>>', parens(brackets(... Array.from(s).map(k))));
},
dictionary(d: DictionaryMap<M.InputEmbedded>, k: Fold<M.InputEmbedded, Item>): Item {
return seq('new _.Dictionary<_embedded>', parens(brackets(... Array.from(d).map(([kk,vv]) =>
return seq('_.Dictionary.from<_embedded>', parens(brackets(... Array.from(d).map(([kk,vv]) =>
brackets(k(kk), k(vv))))));
},

View File

@ -920,15 +920,15 @@ export function toModules<_embedded extends _.Embeddable = _.GenericEmbedded>(v:
let result: undefined | Modules<_embedded>;
_tmp0 = void 0;
if (_.Dictionary.isDictionary<_embedded>(v)) {
const vMap = _.Dictionary.asMap(v);
const _tmp1 = new _.DictionaryMap(v);
_tmp0 = new _.EncodableDictionary<_embedded, ModulePath, Schema<_embedded>>(fromModulePath, fromSchema<_embedded>);
for (const [_tmp1, _tmp2] of vMap) {
let _tmp3: (ModulePath) | undefined;
_tmp3 = toModulePath(_tmp1);
if (_tmp3 !== void 0) {
let _tmp4: (Schema<_embedded>) | undefined;
_tmp4 = toSchema(_tmp2);
if (_tmp4 !== void 0) {_tmp0.set(_tmp3, _tmp4); continue;};
for (const [_tmp2, _tmp3] of _tmp1) {
let _tmp4: (ModulePath) | undefined;
_tmp4 = toModulePath(_tmp2);
if (_tmp4 !== void 0) {
let _tmp5: (Schema<_embedded>) | undefined;
_tmp5 = toSchema(_tmp3);
if (_tmp5 !== void 0) {_tmp0.set(_tmp4, _tmp5); continue;};
};
_tmp0 = void 0;
break;
@ -959,26 +959,26 @@ export function toSchema<_embedded extends _.Embeddable = _.GenericEmbedded>(v:
_tmp0 = _.is(v.label, $schema) ? {} : void 0;
if (_tmp0 !== void 0) {
if (_.Dictionary.isDictionary<_embedded>(v[0])) {
const v0 = _.Dictionary.asMap(v[0]);
let _tmp1: (_.Value<_embedded>) | undefined;
if ((_tmp1 = v0.get($version)) !== void 0) {
let _tmp2: (Version) | undefined;
_tmp2 = toVersion(_tmp1);
if (_tmp2 !== void 0) {
let _tmp3: (_.Value<_embedded>) | undefined;
if ((_tmp3 = v0.get($embeddedType)) !== void 0) {
let _tmp4: (EmbeddedTypeName) | undefined;
_tmp4 = toEmbeddedTypeName(_tmp3);
if (_tmp4 !== void 0) {
let _tmp5: (_.Value<_embedded>) | undefined;
if ((_tmp5 = v0.get($definitions)) !== void 0) {
let _tmp6: (Definitions<_embedded>) | undefined;
_tmp6 = toDefinitions(_tmp5);
if (_tmp6 !== void 0) {
let _tmp2: (_.Value<_embedded>) | undefined;
const _tmp1 = new _.DictionaryMap(v[0]);
if ((_tmp2 = _tmp1.get($version)) !== void 0) {
let _tmp3: (Version) | undefined;
_tmp3 = toVersion(_tmp2);
if (_tmp3 !== void 0) {
let _tmp4: (_.Value<_embedded>) | undefined;
if ((_tmp4 = _tmp1.get($embeddedType)) !== void 0) {
let _tmp5: (EmbeddedTypeName) | undefined;
_tmp5 = toEmbeddedTypeName(_tmp4);
if (_tmp5 !== void 0) {
let _tmp6: (_.Value<_embedded>) | undefined;
if ((_tmp6 = _tmp1.get($definitions)) !== void 0) {
let _tmp7: (Definitions<_embedded>) | undefined;
_tmp7 = toDefinitions(_tmp6);
if (_tmp7 !== void 0) {
result = {
"version": _tmp2,
"embeddedType": _tmp4,
"definitions": _tmp6,
"version": _tmp3,
"embeddedType": _tmp5,
"definitions": _tmp7,
__as_preserve__() {return fromSchema(this);},
__preserve_on__(e) { e.push(fromSchema(this)); },
__preserve_text_on__(w) { w.push(fromSchema(this)); }
@ -1090,15 +1090,15 @@ export function toDefinitions<_embedded extends _.Embeddable = _.GenericEmbedded
let result: undefined | Definitions<_embedded>;
_tmp0 = void 0;
if (_.Dictionary.isDictionary<_embedded>(v)) {
const vMap = _.Dictionary.asMap(v);
const _tmp1 = new _.DictionaryMap(v);
_tmp0 = new _.EncodableDictionary<_embedded, symbol, Definition<_embedded>>(k => k, fromDefinition<_embedded>);
for (const [_tmp1, _tmp2] of vMap) {
let _tmp3: (symbol) | undefined;
_tmp3 = typeof _tmp1 === 'symbol' ? _tmp1 : void 0;
if (_tmp3 !== void 0) {
let _tmp4: (Definition<_embedded>) | undefined;
_tmp4 = toDefinition(_tmp2);
if (_tmp4 !== void 0) {_tmp0.set(_tmp3, _tmp4); continue;};
for (const [_tmp2, _tmp3] of _tmp1) {
let _tmp4: (symbol) | undefined;
_tmp4 = typeof _tmp2 === 'symbol' ? _tmp2 : void 0;
if (_tmp4 !== void 0) {
let _tmp5: (Definition<_embedded>) | undefined;
_tmp5 = toDefinition(_tmp3);
if (_tmp5 !== void 0) {_tmp0.set(_tmp4, _tmp5); continue;};
};
_tmp0 = void 0;
break;
@ -1623,15 +1623,15 @@ export function toDictionaryEntries<_embedded extends _.Embeddable = _.GenericEm
let result: undefined | DictionaryEntries<_embedded>;
_tmp0 = void 0;
if (_.Dictionary.isDictionary<_embedded>(v)) {
const vMap = _.Dictionary.asMap(v);
const _tmp1 = new _.DictionaryMap(v);
_tmp0 = new _.EncodableDictionary<_embedded, _.Value<_embedded>, NamedSimplePattern<_embedded>>(k => k, fromNamedSimplePattern<_embedded>);
for (const [_tmp1, _tmp2] of vMap) {
let _tmp3: (_.Value<_embedded>) | undefined;
_tmp3 = _tmp1;
if (_tmp3 !== void 0) {
let _tmp4: (NamedSimplePattern<_embedded>) | undefined;
_tmp4 = toNamedSimplePattern(_tmp2);
if (_tmp4 !== void 0) {_tmp0.set(_tmp3, _tmp4); continue;};
for (const [_tmp2, _tmp3] of _tmp1) {
let _tmp4: (_.Value<_embedded>) | undefined;
_tmp4 = _tmp2;
if (_tmp4 !== void 0) {
let _tmp5: (NamedSimplePattern<_embedded>) | undefined;
_tmp5 = toNamedSimplePattern(_tmp3);
if (_tmp5 !== void 0) {_tmp0.set(_tmp4, _tmp5); continue;};
};
_tmp0 = void 0;
break;