occam-nominal 1.0.323 → 1.0.324

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _elements = require("../elements");
13
+ const _continuation = require("../utilities/continuation");
13
14
  const _type = require("../utilities/type");
14
15
  const _instantiate = require("../process/instantiate");
15
16
  const _validation = require("../process/validation");
@@ -59,64 +60,86 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
59
60
  setType(type) {
60
61
  this.type = type;
61
62
  }
62
- async verify(context) {
63
+ verify(context, continuation) {
63
64
  let verifies = false;
64
65
  const includeType = false, constructorString = this.getString(includeType);
65
66
  context.trace(`Verifying the '${constructorString}' constructor...`);
66
- await (0, _context.attempt)(async (context)=>{
67
- const termValidates = await this.validateTerm(context);
68
- if (termValidates) {
69
- verifies = true;
70
- }
71
- if (verifies) {
72
- this.commit(context);
73
- }
67
+ (0, _context.attempt)((context)=>{
68
+ this.validateTerm(context, (termValidates)=>{
69
+ if (termValidates) {
70
+ verifies = true;
71
+ }
72
+ if (verifies) {
73
+ this.commit(context);
74
+ }
75
+ if (verifies) {
76
+ context.debug(`...verified the '${constructorString}' constructor.`);
77
+ }
78
+ return continuation(verifies);
79
+ });
74
80
  }, context);
75
- if (verifies) {
76
- context.debug(`...verified the '${constructorString}' constructor.`);
77
- }
78
- return verifies;
79
81
  }
80
- async validateTerm(context) {
81
- let termValidates = false;
82
+ validateTerm(context, continuation) {
82
83
  const includeType = false, constructorString = this.getString(includeType);
83
84
  context.trace(`Validating the '${constructorString}' constructor's term...`);
85
+ const validateTermAsVariable = this.validateTermAsVariable.bind(this), validateTermAsConstructor = this.validateTermAsConstructor.bind(this);
86
+ return (0, _continuation.exists)([
87
+ validateTermAsVariable,
88
+ validateTermAsConstructor
89
+ ], context, (termValidates)=>{
90
+ if (termValidates) {
91
+ context.debug(`...validated the '${constructorString}' constructor's term.`);
92
+ }
93
+ return continuation(termValidates);
94
+ });
95
+ }
96
+ validateTermAsVariable(context, continuation) {
84
97
  const hypothtical = this.isHypothetical();
85
- if (hypothtical) {
86
- const termValidatesAsVariable = await (0, _validation.validateTermAsVariable)(this.term, context, async (term, context)=>{
87
- let validatesForwards = false;
88
- const type = term.getType(), baseType = (0, _type.baseTypeFromNothing)();
89
- if (type === baseType) {
90
- validatesForwards = true;
91
- }
92
- return validatesForwards;
93
- });
98
+ if (!hypothtical) {
99
+ const termValidatesAsVariable = false;
100
+ return continuation(termValidatesAsVariable);
101
+ }
102
+ const includeType = false, constructorString = this.getString(includeType);
103
+ context.trace(`Validating the '${constructorString}' constructor's term...`);
104
+ (0, _validation.validateTermAsVariable)(this.term, context, (term, context)=>{
105
+ let termValidatesAsVariable = false;
106
+ const type = term.getType(), baseType = (0, _type.baseTypeFromNothing)();
107
+ if (type === baseType) {
108
+ termValidatesAsVariable = true;
109
+ }
94
110
  if (termValidatesAsVariable) {
95
- termValidates = true;
111
+ context.debug(`...validated the '${constructorString}' constructor's term.`);
96
112
  }
97
- } else {
98
- const termValidatesAsConstructor = await (0, _validate.validateTermAsConstructor)(this.term, context);
113
+ return continuation(termValidatesAsVariable);
114
+ });
115
+ }
116
+ validateTermAsConstructor(context, continuation) {
117
+ const hypothtical = this.isHypothetical();
118
+ if (hypothtical) {
119
+ const termValidatesAsConstructor = false;
120
+ return continuation(termValidatesAsConstructor);
121
+ }
122
+ const includeType = false, constructorString = this.getString(includeType);
123
+ context.trace(`Validating the '${constructorString}' constructor's term...`);
124
+ (0, _validate.validateTermAsConstructor)(this.term, context, (termValidatesAsConstructor)=>{
99
125
  if (termValidatesAsConstructor) {
100
- termValidates = true;
126
+ context.debug(`...validated the '${constructorString}' constructor's term.`);
101
127
  }
102
- }
103
- if (termValidates) {
104
- context.debug(`...validated the '${constructorString}' constructor's term.`);
105
- }
106
- return termValidates;
128
+ return continuation(termValidatesAsConstructor);
129
+ });
107
130
  }
108
- async unifyTerm(term, context, validateForwards) {
131
+ unifyTerm(term, context, continuation) {
109
132
  let termUnifies = false;
110
133
  const termString = term.getString(), includeType = true, constructorString = this.getString(includeType); ///
111
134
  context.trace(`Unifying the '${termString}' term with the '${constructorString}' constructor...`);
112
- const hypothesesDiscardedGivenTerm = await this.dischargeHypothesesGivenTerm(term, context);
135
+ const hypothesesDiscardedGivenTerm = this.dischargeHypothesesGivenTerm(term, context);
113
136
  if (hypothesesDiscardedGivenTerm) {
114
137
  const constructor = this, constructorContext = constructor.getContext(), generalContext = constructorContext, specifiContext = context, termUnifiesWithConstructor = (0, _unify.unifyTermWithConstructor)(term, constructor, generalContext, specifiContext);
115
138
  if (termUnifiesWithConstructor) {
116
139
  const provisional = this.type.isProvisional();
117
140
  term.setType(this.type);
118
141
  term.setProvisional(provisional);
119
- const validatesForwards = await validateForwards(term, context);
142
+ const validatesForwards = validateForwards(term, context);
120
143
  if (validatesForwards) {
121
144
  termUnifies = true;
122
145
  }
@@ -127,23 +150,23 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
127
150
  }
128
151
  return termUnifies;
129
152
  }
130
- async dischargeHypothesisGivenTerm(hypothesis, term, context) {
153
+ dischargeHypothesisGivenTerm(hypothesis, term, context) {
131
154
  let hypothesisDischargesGivenTerm;
132
- await this.break(context);
155
+ this.break(context);
133
156
  const termString = term.getString(), hypothesisString = hypothesis.getString(), constructorString = this.getString(); ///
134
157
  context.trace(`Discharding the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term...`);
135
- hypothesisDischargesGivenTerm = await hypothesis.dischargeGivenTerm(term, context);
158
+ hypothesisDischargesGivenTerm = hypothesis.dischargeGivenTerm(term, context);
136
159
  if (hypothesisDischargesGivenTerm) {
137
160
  context.trace(`...discharges the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term.`);
138
161
  }
139
162
  return hypothesisDischargesGivenTerm;
140
163
  }
141
- async dischargeHypothesesGivenTerm(term, context) {
164
+ dischargeHypothesesGivenTerm(term, context) {
142
165
  let hypothesesDischargesGivenTerm = true; ///
143
166
  const hypothetical = this.isHypothetical();
144
167
  if (hypothetical) {
145
- hypothesesDischargesGivenTerm = await every(this.hypotheses, async (hypothesis)=>{
146
- const hypothesisDischarges = await this.dischargeHypothesisGivenTerm(hypothesis, term, context);
168
+ hypothesesDischargesGivenTerm = every(this.hypotheses, (hypothesis)=>{
169
+ const hypothesisDischarges = this.dischargeHypothesisGivenTerm(hypothesis, term, context);
147
170
  if (hypothesisDischarges) {
148
171
  return true;
149
172
  }
@@ -181,4 +204,4 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
181
204
  }
182
205
  });
183
206
 
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYmFzZVR5cGVGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdHlwZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGVcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldEh5cG90aGVzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwb3RoZXNlcztcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBpc0h5cG90aGV0aWNhbCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2VzTGVuZ3RoID0gdGhpcy5oeXBvdGhlc2VzLmxlbmd0aCxcbiAgICAgICAgICBoeXBvdGhldGljYWwgPSAoaHlwb3RoZXNlc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGh5cG90aGV0aWNhbDtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RydWN0b3JOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yTm9kZTtcbiAgfVxuXG4gIGdldFN0cmluZyhpbmNsdWRlVHlwZSA9IHRydWUpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgaWYgKGluY2x1ZGVUeXBlKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgc3RyaW5nID0gYCR7dGVybVN0cmluZ30uJHt0eXBlU3RyaW5nfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmluZyA9IHN1cGVyLmdldFN0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gKTtcblxuICAgIGF3YWl0IGF0dGVtcHQoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlVGVybShjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlVGVybShjb250ZXh0KSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgaHlwb3RodGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gYXdhaXQgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0aGlzLnRlcm0sIGNvbnRleHQsIGFzeW5jICh0ZXJtLCBjb250ZXh0KSA9PiB7IC8vL1xuICAgICAgICBsZXQgdmFsaWRhdGVzRm9yd2FyZHMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBiYXNlVHlwZSkge1xuICAgICAgICAgIHZhbGlkYXRlc0ZvcndhcmRzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yID0gYXdhaXQgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3Rvcih0aGlzLnRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpIHtcbiAgICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICBhc3luYyB1bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaW5jbHVkZVR5cGUgPSB0cnVlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSA9IGF3YWl0IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmIChoeXBvdGhlc2VzRGlzY2FyZGVkR2l2ZW5UZXJtKSB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JDb250ZXh0ID0gY29uc3RydWN0b3IuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJ1Y3RvckNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHNwZWNpZmlDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmlDb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy50eXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICB0ZXJtLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IGF3YWl0IHZhbGlkYXRlRm9yd2FyZHModGVybSwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllcztcbiAgfVxuXG4gIGFzeW5jIGRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0oaHlwb3RoZXNpcywgdGVybSwgY29udGV4dCkge1xuICAgIGxldCBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gYXdhaXQgaHlwb3RoZXNpcy5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0pIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmRpc2NoYXJnZXMgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgYXN5bmMgZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTsgIC8vL1xuXG4gICAgY29uc3QgaHlwb3RoZXRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKGh5cG90aGV0aWNhbCkge1xuICAgICAgaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0gPSBhd2FpdCBldmVyeSh0aGlzLmh5cG90aGVzZXMsIGFzeW5jIChoeXBvdGhlc2lzKSA9PiB7XG4gICAgICAgIGNvbnN0IGh5cG90aGVzaXNEaXNjaGFyZ2VzID0gYXdhaXQgdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtKGh5cG90aGVzaXMsIHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm07XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cnVjdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RydWN0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJoeXBvdGhlc2VzIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsImdldENvbnN0cnVjdG9yTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJnZXRTdHJpbmciLCJpbmNsdWRlVHlwZSIsInRlcm1TdHJpbmciLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZlcmlmeSIsInZlcmlmaWVzIiwiY29uc3RydWN0b3JTdHJpbmciLCJ0cmFjZSIsImF0dGVtcHQiLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiY29tbWl0IiwiZGVidWciLCJoeXBvdGh0aWNhbCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwidGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IiLCJ2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1VbmlmaWVzIiwiaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSIsImRpc2NoYXJnZUh5cG90aGVzZXNHaXZlblRlcm0iLCJjb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmlDb250ZXh0IiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IiLCJwcm92aXNpb25hbCIsImlzUHJvdmlzaW9uYWwiLCJzZXRQcm92aXNpb25hbCIsImRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0iLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0iLCJicmVhayIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2VHaXZlblRlcm0iLCJoeXBvdGhlc2VzRGlzY2hhcmdlc0dpdmVuVGVybSIsImh5cG90aGVzaXNEaXNjaGFyZ2VzIiwidG9KU09OIiwic2VyaWFsaXNlIiwidHlwZUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJ1Y3RvciIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7Z0NBZm9FOzBCQUU3QztzQkFDYTs2QkFDRzs0QkFDQTt5QkFDQzt1QkFDQzswQkFDQztzQkFDRzt5QkFDZ0I7QUFFN0QsTUFBTSxFQUFFQSxLQUFLLEVBQUUsR0FBR0MscUNBQXFCLEVBQ2pDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxvQkFBb0JDLHVCQUFPO0lBQ3JELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsQ0FBRTtRQUNyRSxLQUFLLENBQUNOLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDSCxJQUFJO0lBQ2xCO0lBRUFJLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDSCxVQUFVO0lBQ3hCO0lBRUFJLGNBQWNKLFVBQVUsRUFBRTtRQUN4QixJQUFJLENBQUNBLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUssaUJBQWlCO1FBQ2YsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ04sVUFBVSxDQUFDTyxNQUFNLEVBQ3pDQyxlQUFnQkYsbUJBQW1CO1FBRXpDLE9BQU9FO0lBQ1Q7SUFFQUMscUJBQXFCO1FBQ25CLE1BQU1iLE9BQU8sSUFBSSxDQUFDYyxPQUFPLElBQ25CQyxrQkFB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
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRlXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3Rvck5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb25zdHJ1Y3Rvck5vZGU7XG4gIH1cblxuICBnZXRTdHJpbmcoaW5jbHVkZVR5cGUgPSB0cnVlKSB7XG4gICAgbGV0IHN0cmluZztcblxuICAgIGlmIChpbmNsdWRlVHlwZSkge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHN0cmluZyA9IGAke3Rlcm1TdHJpbmd9LiR7dHlwZVN0cmluZ31gO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJpbmcgPSBzdXBlci5nZXRTdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVUZXJtKGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0oY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlID0gdGhpcy52YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvciA9IHRoaXMudmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3Rvci5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICAgICAgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvclxuICAgIF0sIGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBoeXBvdGh0aWNhbCA9IHRoaXMuaXNIeXBvdGhldGljYWwoKTtcblxuICAgIGlmICghaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0aGlzLnRlcm0sIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICAgIGlmICh0eXBlID09PSBiYXNlVHlwZSkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RodGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3Rvcih0aGlzLnRlcm0sIGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3RvcikgPT4ge1xuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaW5jbHVkZVR5cGUgPSB0cnVlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSA9IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmIChoeXBvdGhlc2VzRGlzY2FyZGVkR2l2ZW5UZXJtKSB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JDb250ZXh0ID0gY29uc3RydWN0b3IuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJ1Y3RvckNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHNwZWNpZmlDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmlDb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy50eXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICB0ZXJtLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHModGVybSwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllcztcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0oaHlwb3RoZXNpcywgdGVybSwgY29udGV4dCkge1xuICAgIGxldCBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybTtcblxuICAgIHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gaHlwb3RoZXNpcy5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0pIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmRpc2NoYXJnZXMgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTsgIC8vL1xuXG4gICAgY29uc3QgaHlwb3RoZXRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKGh5cG90aGV0aWNhbCkge1xuICAgICAgaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0gPSBldmVyeSh0aGlzLmh5cG90aGVzZXMsIChoeXBvdGhlc2lzKSA9PiB7XG4gICAgICAgIGNvbnN0IGh5cG90aGVzaXNEaXNjaGFyZ2VzID0gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtKGh5cG90aGVzaXMsIHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm07XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cnVjdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RydWN0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJoeXBvdGhlc2VzIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsImdldENvbnN0cnVjdG9yTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJnZXRTdHJpbmciLCJpbmNsdWRlVHlwZSIsInRlcm1TdHJpbmciLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInZlcmlmaWVzIiwiY29uc3RydWN0b3JTdHJpbmciLCJ0cmFjZSIsImF0dGVtcHQiLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwiY29tbWl0IiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwiYmluZCIsInZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IiLCJleGlzdHMiLCJoeXBvdGh0aWNhbCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwidGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsImh5cG90aGVzZXNEaXNjYXJkZWRHaXZlblRlcm0iLCJkaXNjaGFyZ2VIeXBvdGhlc2VzR2l2ZW5UZXJtIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvckNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpQ29udGV4dCIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwicHJvdmlzaW9uYWwiLCJpc1Byb3Zpc2lvbmFsIiwic2V0UHJvdmlzaW9uYWwiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsInZhbGlkYXRlRm9yd2FyZHMiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtIiwiYnJlYWsiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZGlzY2hhcmdlR2l2ZW5UZXJtIiwiaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0iLCJoeXBvdGhlc2lzRGlzY2hhcmdlcyIsInRvSlNPTiIsInNlcmlhbGlzZSIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlQ29uc3RydWN0b3IiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa0JBOzs7ZUFBQTs7O2dDQWhCb0U7MEJBRTdDOzhCQUNBO3NCQUNhOzZCQUNHOzRCQUNBO3lCQUNDO3VCQUNDOzBCQUNDO3NCQUNHO3lCQUNnQjtBQUU3RCxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsVUFBVSxDQUFFO1FBQ3JFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lB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
@@ -8,13 +8,16 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
+ const _occamlanguages = require("occam-languages");
11
12
  const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
13
+ const _continuation = require("../../utilities/continuation");
12
14
  const _elements = require("../../elements");
13
15
  function _interop_require_default(obj) {
14
16
  return obj && obj.__esModule ? obj : {
15
17
  default: obj
16
18
  };
17
19
  }
20
+ const { breakable } = _occamlanguages.breakPointUtilities;
18
21
  const _default = (0, _elements.define)(class ConstructorDeclaration extends _declaration.default {
19
22
  constructor(context, string, node, breakPoint, type, provisional, constructor){
20
23
  super(context, string, node, breakPoint);
@@ -38,26 +41,25 @@ const _default = (0, _elements.define)(class ConstructorDeclaration extends _dec
38
41
  setHypotheses(hypotheses) {
39
42
  this.constructor.setHypotheses(hypotheses);
40
43
  }
41
- async verify(context) {
42
- let verifies = false;
43
- await this.break(context);
44
+ verify = breakable(function(context, continuation) {
44
45
  const constructorDeclarationString = this.getString(); ///
45
46
  context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration...`);
46
- const typeVerified = this.verifyType(context);
47
- if (typeVerified) {
48
- const constructorVerifies = this.verifyConstructor(context);
49
- if (constructorVerifies) {
47
+ const verifyType = this.verifyType.bind(this), verifyConstructor = this.verifyConstructor.bind(this);
48
+ return (0, _continuation.all)([
49
+ verifyType,
50
+ verifyConstructor
51
+ ], context, (verifies)=>{
52
+ if (verifies) {
50
53
  this.constructor.setType(this.type);
51
54
  context.addConstructor(this.constructor);
52
- verifies = true;
53
55
  }
54
- }
55
- if (verifies) {
56
- context.debug(`...verified the '${constructorDeclarationString}' constructor declaration.`);
57
- }
58
- return verifies;
59
- }
60
- verifyType(context) {
56
+ if (verifies) {
57
+ context.debug(`...verified the '${constructorDeclarationString}' constructor declaration.`);
58
+ }
59
+ return continuation(verifies);
60
+ });
61
+ });
62
+ verifyType(context, continuation) {
61
63
  let typeVerifies = false;
62
64
  const constructorDeclarationString = this.getString(); ///
63
65
  context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration's type...`);
@@ -81,19 +83,19 @@ const _default = (0, _elements.define)(class ConstructorDeclaration extends _dec
81
83
  if (typeVerifies) {
82
84
  context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's type.`);
83
85
  }
84
- return typeVerifies;
86
+ return continuation(typeVerifies);
85
87
  }
86
- verifyConstructor(context) {
87
- let constructorVerifies;
88
+ verifyConstructor(context, continuation) {
88
89
  const includeType = false, constructorString = this.constructor.getString(includeType), constructorDeclarationString = this.getString(); ///
89
90
  context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor...`);
90
- constructorVerifies = this.constructor.verify(context);
91
- if (constructorVerifies) {
92
- context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor.`);
93
- }
94
- return constructorVerifies;
91
+ this.constructor.verify(context, (constructorVerifies)=>{
92
+ if (constructorVerifies) {
93
+ context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor.`);
94
+ }
95
+ return continuation(constructorVerifies);
96
+ });
95
97
  }
96
98
  static name = "ConstructorDeclaration";
97
99
  });
98
100
 
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb24gZnJvbSBcIi4uL2RlY2xhcmF0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiBleHRlbmRzIERlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCwgY29uc3RydWN0b3IpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgaXNQcm92aXNpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGU7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHsgdGhpcy5jb25zdHJ1Y3Rvci5zZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpOyB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHR5cGVWZXJpZmllZCA9IHRoaXMudmVyaWZ5VHlwZShjb250ZXh0KTtcblxuICAgIGlmICh0eXBlVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yVmVyaWZpZXMgPSB0aGlzLnZlcmlmeUNvbnN0cnVjdG9yKGNvbnRleHQpO1xuXG4gICAgICBpZiAoY29uc3RydWN0b3JWZXJpZmllcykge1xuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICBjb250ZXh0LmFkZENvbnN0cnVjdG9yKHRoaXMuY29uc3RydWN0b3IpO1xuXG4gICAgICAgIHZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5VHlwZShjb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVDb3R5cGUgPSB0eXBlLmlzQ290eXBlKCk7XG5cbiAgICAgIGlmICghdHlwZUNvdHlwZSkge1xuICAgICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgICAgICB0eXBlQ29tcGFyZXNUb1Byb3Zpc2lvbmFsID0gdHlwZS5jb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICAgIGlmICghdHlwZUNvbXBhcmVzVG9Qcm92aXNpb25hbCkge1xuICAgICAgICAgIHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVzZW50IGJ1dCBub3QgcHJvdmlzaW9uYWwuYCkgOlxuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgcHJlc2VudCBidXQgcHJvdmlzaW9uYWwuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhIGNvdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24ncyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlDb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yVmVyaWZpZXM7XG5cbiAgICBjb25zdCBpbmNsdWRlVHlwZSA9IGZhbHNlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbidzICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gKTtcblxuICAgIGNvbnN0cnVjdG9yVmVyaWZpZXMgPSB0aGlzLmNvbnN0cnVjdG9yLnZlcmlmeShjb250ZXh0KTtcblxuICAgIGlmIChjb25zdHJ1Y3RvclZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uJ3MgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JWZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCI7XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwicHJvdmlzaW9uYWwiLCJjb25zdHJ1Y3RvciIsImdldFR5cGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29uc3RydWN0b3IiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInNldEh5cG90aGVzZXMiLCJoeXBvdGhlc2VzIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInR5cGVWZXJpZmllZCIsInZlcmlmeVR5cGUiLCJjb25zdHJ1Y3RvclZlcmlmaWVzIiwidmVyaWZ5Q29uc3RydWN0b3IiLCJzZXRUeXBlIiwiYWRkQ29uc3RydWN0b3IiLCJkZWJ1ZyIsInR5cGVWZXJpZmllcyIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidHlwZUNvdHlwZSIsImlzQ290eXBlIiwidHlwZUNvbXBhcmVzVG9Qcm92aXNpb25hbCIsImNvbXBhcmVQcm92aXNpb25hbCIsImluY2x1ZGVUeXBlIiwiY29uc3RydWN0b3JTdHJpbmciLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQUE7OztvRUFKd0I7MEJBRUQ7Ozs7OztNQUV2QixXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLCtCQUErQkMsb0JBQVc7SUFDcEUsWUFBWUMsT0FBTyxFQUFF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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb24gZnJvbSBcIi4uL2RlY2xhcmF0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3I7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZTtcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykgeyB0aGlzLmNvbnN0cnVjdG9yLnNldEh5cG90aGVzZXMoaHlwb3RoZXNlcyk7IH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmVyaWZ5VHlwZSA9IHRoaXMudmVyaWZ5VHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZlcmlmeUNvbnN0cnVjdG9yID0gdGhpcy52ZXJpZnlDb25zdHJ1Y3Rvci5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2ZXJpZnlUeXBlLFxuICAgICAgdmVyaWZ5Q29uc3RydWN0b3JcbiAgICBdLCBjb250ZXh0LCAodmVyaWZpZXMpID0+IHtcbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICBjb250ZXh0LmFkZENvbnN0cnVjdG9yKHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZlcmlmeVR5cGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVDb3R5cGUgPSB0eXBlLmlzQ290eXBlKCk7XG5cbiAgICAgIGlmICghdHlwZUNvdHlwZSkge1xuICAgICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgICAgICB0eXBlQ29tcGFyZXNUb1Byb3Zpc2lvbmFsID0gdHlwZS5jb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICAgIGlmICghdHlwZUNvbXBhcmVzVG9Qcm92aXNpb25hbCkge1xuICAgICAgICAgIHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVzZW50IGJ1dCBub3QgcHJvdmlzaW9uYWwuYCkgOlxuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgcHJlc2VudCBidXQgcHJvdmlzaW9uYWwuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhIGNvdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24ncyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odHlwZVZlcmlmaWVzKTtcbiAgfVxuXG4gIHZlcmlmeUNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmNvbnN0cnVjdG9yLmdldFN0cmluZyhpbmNsdWRlVHlwZSksXG4gICAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uJ3MgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3Rvci52ZXJpZnkoY29udGV4dCwgKGNvbnN0cnVjdG9yVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChjb25zdHJ1Y3RvclZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24ncyAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnN0cnVjdG9yVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwicHJvdmlzaW9uYWwiLCJjb25zdHJ1Y3RvciIsImdldFR5cGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29uc3RydWN0b3IiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInNldEh5cG90aGVzZXMiLCJoeXBvdGhlc2VzIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZ5VHlwZSIsImJpbmQiLCJ2ZXJpZnlDb25zdHJ1Y3RvciIsImFsbCIsInZlcmlmaWVzIiwic2V0VHlwZSIsImFkZENvbnN0cnVjdG9yIiwiZGVidWciLCJ0eXBlVmVyaWZpZXMiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVDb3R5cGUiLCJpc0NvdHlwZSIsInR5cGVDb21wYXJlc1RvUHJvdmlzaW9uYWwiLCJjb21wYXJlUHJvdmlzaW9uYWwiLCJpbmNsdWRlVHlwZSIsImNvbnN0cnVjdG9yU3RyaW5nIiwiY29uc3RydWN0b3JWZXJpZmllcyIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVRvQztvRUFFWjs4QkFFSjswQkFDRzs7Ozs7O0FBRXZCLE1BQU0sRUFBRUEsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQjtNQUV6QyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLCtCQUErQkMsb0JBQVc7SUFDcEUsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsV0FBVyxDQUFFO1FBQzdFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUdDO0lBQ3JCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtJQUNsQjtJQUVBSSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0gsV0FBVztJQUN6QjtJQUVBSSxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXO0lBQ3pCO0lBRUFDLGdDQUFnQztRQUM5QixNQUFNUixPQUFPLElBQUksQ0FBQ1MsT0FBTyxJQUNuQkMsNkJBQTZCVixNQUFNLEdBQUc7UUFFNUMsT0FBT1U7SUFDVDtJQUVBQyxjQUFjQyxVQUFVLEVBQUU7UUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDRCxhQUFhLENBQUNDO0lBQWE7SUFFeEVDLFNBQVNwQixVQUFVLFNBQVVLLE9BQU8sRUFBRWdCLFlBQVk7UUFDaEQsTUFBTUMsK0JBQStCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFM0RsQixRQUFRbUIsS0FBSyxDQUFD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
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
+ const _occamlanguages = require("occam-languages");
11
12
  const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
13
+ const _continuation = require("../../utilities/continuation");
12
14
  const _elements = require("../../elements");
13
15
  const _type = require("../../utilities/type");
14
16
  function _interop_require_default(obj) {
@@ -16,6 +18,7 @@ function _interop_require_default(obj) {
16
18
  default: obj
17
19
  };
18
20
  }
21
+ const { every } = _occamlanguages.continuationUtilities, { breakable } = _occamlanguages.breakPointUtilities;
19
22
  const _default = (0, _elements.define)(class TypeDeclaration extends _declaration.default {
20
23
  constructor(context, string, node, breakPoint, type, superTypes, provisional){
21
24
  super(context, string, node, breakPoint);
@@ -40,32 +43,29 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
40
43
  const properties = [];
41
44
  return properties;
42
45
  }
43
- async verify(context) {
44
- let verifies = false;
45
- await this.break(context);
46
+ verify = breakable(function(context, continuation) {
46
47
  const typeDeclarationString = this.getString(); ///
47
48
  context.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
48
- const typeVerifies = this.verifyType(context);
49
- if (typeVerifies) {
50
- const superTypesVerify = this.verifySuperTypes(context);
51
- if (superTypesVerify) {
52
- const typePrefixVerifies = this.verifyTypePrefix(context);
53
- if (typePrefixVerifies) {
54
- const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
55
- this.type.setProvisional(this.provisional);
56
- this.type.setProperties(properties);
57
- this.type.setPrefixName(prefixName);
58
- context.addType(this.type);
59
- verifies = true;
60
- }
49
+ const verifyType = this.verifyType.bind(this), verifySuperTypes = this.verifySuperTypes.bind(this), verifyTypePrefix = this.verifyTypePrefix.bind(this);
50
+ return (0, _continuation.all)([
51
+ verifyType,
52
+ verifySuperTypes,
53
+ verifyTypePrefix
54
+ ], context, (verifies)=>{
55
+ if (verifies) {
56
+ const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
57
+ this.type.setProvisional(this.provisional);
58
+ this.type.setProperties(properties);
59
+ this.type.setPrefixName(prefixName);
60
+ context.addType(this.type);
61
61
  }
62
- }
63
- if (verifies) {
64
- context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
65
- }
66
- return verifies;
67
- }
68
- verifyType(context) {
62
+ if (verifies) {
63
+ context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
64
+ }
65
+ return continuation(verifies);
66
+ });
67
+ });
68
+ verifyType(context, continuation) {
69
69
  let typeVerifies = false;
70
70
  const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
71
71
  context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type...`);
@@ -83,9 +83,42 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
83
83
  if (typeVerifies) {
84
84
  context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type`);
85
85
  }
86
- return typeVerifies;
86
+ return continuation(typeVerifies);
87
+ }
88
+ verifyTypePrefix(context, continuation) {
89
+ let typePrefixVerifies = false;
90
+ const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
91
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
92
+ const typePrefixed = this.type.isPrefixed();
93
+ if (!typePrefixed) {
94
+ typePrefixVerifies = true;
95
+ } else {
96
+ context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
97
+ }
98
+ if (typePrefixVerifies) {
99
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
100
+ }
101
+ return continuation(typePrefixVerifies);
102
+ }
103
+ verifySuperTypes(context, continuation) {
104
+ const superTypes = [], typeDeclarationString = this.getString(); ///
105
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
106
+ every(this.superTypes, (superType, continuation)=>{
107
+ this.verifySuperType(superType, superTypes, context, continuation);
108
+ }, (superTypesVerify)=>{
109
+ if (superTypesVerify) {
110
+ const superTypesLength = superTypes.length;
111
+ if (superTypesLength === 0) {
112
+ const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
113
+ superTypes.push(superTyupe);
114
+ }
115
+ this.type.setSuperTypes(superTypes);
116
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
117
+ }
118
+ return continuation(superTypesVerify);
119
+ });
87
120
  }
88
- verifySuperType(superType, superTypes, context) {
121
+ verifySuperType(superType, superTypes, context, continuation) {
89
122
  let superTypeVerifies = false;
90
123
  const superTypeString = superType.getString(), typeDeclarationString = this.getString(); ///
91
124
  context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
@@ -104,45 +137,9 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
104
137
  if (superTypeVerifies) {
105
138
  context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
106
139
  }
107
- return superTypeVerifies;
108
- }
109
- verifySuperTypes(context) {
110
- let superTypesVerify;
111
- const superTypes = [], typeDeclarationString = this.getString(); ///
112
- context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
113
- superTypesVerify = this.superTypes.every((superType)=>{
114
- const superTypeVerifies = this.verifySuperType(superType, superTypes, context);
115
- if (superTypeVerifies) {
116
- return true;
117
- }
118
- });
119
- if (superTypesVerify) {
120
- const superTypesLength = superTypes.length;
121
- if (superTypesLength === 0) {
122
- const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
123
- superTypes.push(superTyupe);
124
- }
125
- this.type.setSuperTypes(superTypes);
126
- context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
127
- }
128
- return superTypesVerify;
129
- }
130
- verifyTypePrefix(context) {
131
- let typePrefixVerifies = false;
132
- const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
133
- context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
134
- const typePrefixed = this.type.isPrefixed();
135
- if (!typePrefixed) {
136
- typePrefixVerifies = true;
137
- } else {
138
- context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
139
- }
140
- if (typePrefixVerifies) {
141
- context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
142
- }
143
- return typePrefixVerifies;
140
+ return continuation(superTypeVerifies);
144
141
  }
145
142
  static name = "TypeDeclaration";
146
143
  });
147
144
 
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi4vZGVjbGFyYXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUeXBlRGVjbGFyYXRpb24gZXh0ZW5kcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXR0eXBlRGVjbGFyYXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdHlwZURlY2xhcmF0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlKGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc1ZlcmlmeSA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdHlwZVByZWZpeFZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgICAgdHlwZVByZWZpeCA9IGNvbnRleHQuZ2V0VHlwZVByZWZpeCgpLFxuICAgICAgICAgICAgICAgIHByZWZpeE5hbWUgPSAodHlwZVByZWZpeCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvdmlzaW9uYWwodGhpcy5wcm92aXNpb25hbCk7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgIHRoaXMudHlwZS5zZXRQcmVmaXhOYW1lKHByZWZpeE5hbWUpO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVR5cGUoY29udGV4dCkge1xuICAgIGxldCB0eXBlVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFR5cGVOYW1lID0gdHlwZU5hbWUsIC8vL1xuICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgICAgdHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZWApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGUoc3VwZXJUeXBlLCBzdXBlclR5cGVzLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVWZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVN1cGVyVHlwZXMoY29udGV4dCkge1xuICAgIGxldCBzdXBlclR5cGVzVmVyaWZ5O1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlcyA9IFtdLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3Mgc3VwZXItdHlwZXMuLi5gKTtcblxuICAgIHN1cGVyVHlwZXNWZXJpZnkgPSB0aGlzLnN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlVmVyaWZpZXMgPSB0aGlzLnZlcmlmeVN1cGVyVHlwZShzdXBlclR5cGUsIHN1cGVyVHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc3VwZXJUeXBlc1ZlcmlmeSkge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHl1cGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeVR5cGVQcmVmaXgoY29udGV4dCkge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhWZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlR5cGVEZWNsYXJhdGlvbiIsIkRlY2xhcmF0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInN1cGVyVHlwZXMiLCJwcm92aXNpb25hbCIsImdldFR5cGUiLCJnZXRTdXBlclR5cGVzIiwiaXNQcm92aXNpb25hbCIsImdldHR5cGVEZWNsYXJhdGlvbk5vZGUiLCJnZXROb2RlIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsInR5cGVEZWNsYXJhdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidHlwZVZlcmlmaWVzIiwidmVyaWZ5VHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJ2ZXJpZnlTdXBlclR5cGVzIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidmVyaWZ5VHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsImluY2x1ZGVSZWxlYXNlIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwidmVyaWZ5U3VwZXJUeXBlIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlVmVyaWZpZXMiLCJzdXBlclR5cGVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInB1c2giLCJldmVyeSIsInN1cGVyVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5dXBlIiwic2V0U3VwZXJUeXBlcyIsInR5cGVQcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OztvRUFMd0I7MEJBRUQ7c0JBQ2E7Ozs7OztNQUVwQyxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHdCQUF3QkMsb0JBQVc7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVB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
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmNvbnN0IHsgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVHlwZURlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRTdXBlclR5cGVzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cGVyVHlwZXM7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0dHlwZURlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVEZWNsYXJhdGlvbk5vZGU7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeVR5cGUgPSB0aGlzLnZlcmlmeVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2ZXJpZnlTdXBlclR5cGVzID0gdGhpcy52ZXJpZnlTdXBlclR5cGVzLmJpbmQodGhpcyksXG4gICAgICAgICAgdmVyaWZ5VHlwZVByZWZpeCA9IHRoaXMudmVyaWZ5VHlwZVByZWZpeC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2ZXJpZnlUeXBlLFxuICAgICAgdmVyaWZ5U3VwZXJUeXBlcyxcbiAgICAgIHZlcmlmeVR5cGVQcmVmaXhcbiAgICBdLCBjb250ZXh0LCAodmVyaWZpZXMpID0+IHtcbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVmaXggPSBjb250ZXh0LmdldFR5cGVQcmVmaXgoKSxcbiAgICAgICAgICAgICAgcHJlZml4TmFtZSA9ICh0eXBlUHJlZml4ICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgICAgIHRoaXMudHlwZS5zZXRQcm92aXNpb25hbCh0aGlzLnByb3Zpc2lvbmFsKTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0UHJlZml4TmFtZShwcmVmaXhOYW1lKTtcblxuICAgICAgICBjb250ZXh0LmFkZFR5cGUodGhpcy50eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmVyaWZ5VHlwZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgY29uc3QgcHJlZml4ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAvLy9cbiAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpO1xuXG4gICAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVWZXJpZmllcyk7XG4gIH1cblxuICB2ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlUHJlZml4VmVyaWZpZXMpO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy4uLmApO1xuXG4gICAgZXZlcnkodGhpcy5zdXBlclR5cGVzLCAoc3VwZXJUeXBlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMudmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoc3VwZXJUeXBlc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgICBzdXBlclR5cGVzLnB1c2goc3VwZXJUeXVwZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzIHN1cGVyLXR5cGVzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cGVyVHlwZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VwZXJUeXBlVmVyaWZpZXMpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVEZWNsYXJhdGlvblwiO1xufSk7XG4iXSwibmFtZXMiOlsiZXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZURlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwic3VwZXJUeXBlcyIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImdldFN1cGVyVHlwZXMiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0dHlwZURlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ0eXBlRGVjbGFyYXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmeVR5cGUiLCJiaW5kIiwidmVyaWZ5U3VwZXJUeXBlcyIsInZlcmlmeVR5cGVQcmVmaXgiLCJhbGwiLCJ2ZXJpZmllcyIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVZlcmlmaWVzIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsImluY2x1ZGVSZWxlYXNlIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidHlwZVByZWZpeGVkIiwiaXNQcmVmaXhlZCIsInN1cGVyVHlwZSIsInZlcmlmeVN1cGVyVHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXVwZSIsInB1c2giLCJzZXRTdXBlclR5cGVzIiwic3VwZXJUeXBlVmVyaWZpZXMiLCJzdXBlclR5cGVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDtvRUFFbkM7OEJBRUo7MEJBQ0c7c0JBQ2E7Ozs7OztBQUVwQyxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQjtNQUV6QyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHdCQUF3QkMsb0JBQVc7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxDQUFFO1FBQzVFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtJQUNyQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFVBQVU7SUFDeEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFdBQVc7SUFDekI7SUFFQUkseUJBQXlCO1FBQ3ZCLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxPQUFPLElBQ25CQyxzQkFBc0JWLE1BQU0sR0FBRztRQUVyQyxPQUFPVTtJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1DLGFBQWEsRUFBRTtRQUVyQixPQUFPQTtJQUNUO0lBRUFDLFNBQVNwQixVQUFVLFNBQVVLLE9BQU8sRUFBRWdCLFlBQVk7UUFDaEQsTUFBTUMsd0JBQXdCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFcERsQixRQUFRbUIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixzQkFBc0IscUJBQXFCLENBQUM7UUFFNUUsTUFBTUcsYUFBYSxJQUFJLENBQUNBLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDdENDLG1CQUFtQixJQUFJLENBQUNBLGdCQUFnQixDQUFDRCxJQUFJLENBQUMsSUFBSSxHQUNsREUsbUJBQW1CLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUNGLElBQUksQ0FBQyxJQUFJO1FBRXhELE9BQU9HLElBQUFBLGlCQUFHLEVBQUM7WUFDVEo7WUFDQUU7WUFDQUM7U0FDRCxFQUFFdkIsU0FBUyxDQUFDeUI7WUFDWCxJQUFJQSxVQUFVO2dCQUNaLE1BQU1YLGFBQWEsSUFBSSxDQUFDRCxhQUFhLElBQy9CYSxhQUFhMUIsUUFBUTJCLGFBQWEsSUFDbENDLGFBQWEsQUFBQ0YsZUFBZSxPQUNkQSxXQUFXRyxhQUFhLEtBQ3RCO2dCQUV2QixJQUFJLENBQUN6QixJQUFJLENBQUMwQixjQUFjLENBQUMsSUFBSSxDQUFDeEIsV0FBVztnQkFFekMsSUFBSSxDQUFDRixJQUFJLENBQUMyQixhQUFhLENBQUNqQjtnQkFFeEIsSUFBSSxDQUFDVixJQUFJLENBQUM0QixhQUFhLENBQUNKO2dCQUV4QjVCLFFBQVFpQyxPQUFPLENBQUMsSUFBSSxDQUFDN0IsSUFBSTtZQUMzQjtZQUVBLElBQUlxQixVQUFVO2dCQUNaekIsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFakIsc0JBQXNCLG1CQUFtQixDQUFDO1lBQzlFO1lBRUEsT0FBT0QsYUFBYVM7UUFDdEI7SUFDRixHQUFHO0lBRUhMLFdBQVdwQixPQUFPLEVBQUVnQixZQUFZLEVBQUU7UUFDaEMsSUFBSW1CLGVBQWU7UUFFbkIsTUFBTUMsYUFBYSxJQUFJLENBQUNoQyxJQUFJLENBQUNjLFNBQVMsSUFDaENELHdCQUF3QixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRW5EbEIsUUFBUW1CLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsc0JBQXNCLHNCQUFzQixFQUFFbUIsV0FBVyxTQUFTLENBQUM7UUFFbkcsTUFBTUMsV0FBVyxJQUFJLENBQUNqQyxJQUFJLENBQUNrQyxPQUFPLElBQzVCQyxpQkFBaUIsT0FDakJDLGNBQWN4QyxRQUFReUMsdUJBQXVCLENBQUNKLFVBQVVFO1FBRTlELElBQUksQ0FBQ0MsYUFBYTtZQUNoQixNQUFNRSxtQkFBbUJMLFVBQ25CRyxjQUFjeEMsUUFBUTJDLCtCQUErQixDQUFDRDtZQUU1RCxJQUFJLENBQUNGLGFBQWE7Z0JBQ2hCTCxlQUFlO1lBQ2pCLE9BQU87Z0JBQ0xuQyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFRSxXQUFXLDBCQUEwQixDQUFDO1lBQzlEO1FBQ0YsT0FBTztZQUNMcEMsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRUUsV0FBVywwQkFBMEIsQ0FBQztRQUM5RDtRQUVBLElBQUlELGNBQWM7WUFDaEJuQyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVqQixzQkFBc0Isc0JBQXNCLEVBQUVtQixXQUFXLE1BQU0sQ0FBQztRQUNwRztRQUVBLE9BQU9wQixhQUFhbUI7SUFDdEI7SUFFQVosaUJBQWlCdkIsT0FBTyxFQUFFZ0IsWUFBWSxFQUFFO1FBQ3RDLElBQUk0QixxQkFBcUI7UUFFekIsTUFBTVIsYUFBYSxJQUFJLENBQUNoQyxJQUFJLENBQUNjLFNBQVMsSUFDaENELHdCQUF3QixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRW5EbEIsUUFBUW1CLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsc0JBQXNCLHNCQUFzQixFQUFFbUIsV0FBVyxrQkFBa0IsQ0FBQztRQUU1RyxNQUFNUyxlQUFlLElBQUksQ0FBQ3pDLElBQUksQ0FBQzBDLFVBQVU7UUFFekMsSUFBSSxDQUFDRCxjQUFjO1lBQ2pCRCxxQkFBcUI7UUFDdkIsT0FBTztZQUNMNUMsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRWpCLHNCQUFzQixzQkFBc0IsRUFBRW1CLFdBQVcsbUJBQW1CLENBQUM7UUFDckc7UUFFQSxJQUFJUSxvQkFBb0I7WUFDdEI1QyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVqQixzQkFBc0Isc0JBQXNCLEVBQUVtQixXQUFXLGdCQUFnQixDQUFDO1FBQzlHO1FBRUEsT0FBT3BCLGFBQWE0QjtJQUN0QjtJQUVBdEIsaUJBQWlCdEIsT0FBTyxFQUFFZ0IsWUFBWSxFQUFFO1FBQ3RDLE1BQU1YLGFBQWEsRUFBRSxFQUNmWSx3QkFBd0IsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUVuRGxCLFFBQVFtQixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLHNCQUFzQixtQ0FBbUMsQ0FBQztRQUUxRnhCLE1BQU0sSUFBSSxDQUFDWSxVQUFVLEVBQUUsQ0FBQzBDLFdBQVcvQjtZQUNqQyxJQUFJLENBQUNnQyxlQUFlLENBQUNELFdBQVcxQyxZQUFZTCxTQUFTZ0I7UUFDdkQsR0FBRyxDQUFDaUM7WUFDRixJQUFJQSxrQkFBa0I7Z0JBQ3BCLE1BQU1DLG1CQUFtQjdDLFdBQVc4QyxNQUFNO2dCQUUxQyxJQUFJRCxxQkFBcUIsR0FBRztvQkFDMUIsTUFBTUUsV0FBV0MsSUFBQUEseUJBQW1CLEtBQzlCQyxhQUFhRixVQUFXLEdBQUc7b0JBRWpDL0MsV0FBV2tELElBQUksQ0FBQ0Q7Z0JBQ2xCO2dCQUVBLElBQUksQ0FBQ2xELElBQUksQ0FBQ29ELGFBQWEsQ0FBQ25EO2dCQUV4QkwsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFakIsc0JBQXNCLGlDQUFpQyxDQUFDO1lBQzVGO1lBRUEsT0FBT0QsYUFBYWlDO1FBQ3RCO0lBQ0Y7SUFFQUQsZ0JBQWdCRCxTQUFTLEVBQUUxQyxVQUFVLEVBQUVMLE9BQU8sRUFBRWdCLFlBQVksRUFBRTtRQUM1RCxJQUFJeUMsb0JBQW9CO1FBRXhCLE1BQU1DLGtCQUFrQlgsVUFBVTdCLFNBQVMsSUFDckNELHdCQUF3QixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRW5EbEIsUUFBUW1CLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsc0JBQXNCLHNCQUFzQixFQUFFeUMsZ0JBQWdCLGVBQWUsQ0FBQztRQUU5RyxNQUFNQyxrQkFBa0JaLFVBQVVhLGtCQUFrQixJQUM5Q3ZCLFdBQVdzQixpQkFDWEUseUJBQXlCLElBQUksQ0FBQ3pELElBQUksQ0FBQzBELGVBQWUsQ0FBQ3pCO1FBRXpELElBQUksQ0FBQ3dCLHdCQUF3QjtZQUMzQmQsWUFBWS9DLFFBQVErRCx5QkFBeUIsQ0FBQ0o7WUFFOUMsSUFBSVosY0FBYyxNQUFNO2dCQUN0QjFDLFdBQVdrRCxJQUFJLENBQUNSO2dCQUVoQlUsb0JBQW9CO1lBQ3RCLE9BQU87Z0JBQ0x6RCxRQUFRa0MsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFd0IsZ0JBQWdCLDRCQUE0QixDQUFDO1lBQ3JFO1FBQ0YsT0FBTztZQUNMMUQsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRXdCLGdCQUFnQixvQ0FBb0MsRUFBRXJCLFNBQVMsY0FBYyxDQUFDO1FBQ3RHO1FBRUEsSUFBSW9CLG1CQUFtQjtZQUNyQnpELFFBQVFrQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWpCLHNCQUFzQixzQkFBc0IsRUFBRXlDLGdCQUFnQixhQUFhLENBQUM7UUFDaEg7UUFFQSxPQUFPMUMsYUFBYXlDO0lBQ3RCO0lBRUEsT0FBT08sT0FBTyxrQkFBa0I7QUFDbEMifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.323",
4
+ "version": "1.0.324",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -3,6 +3,7 @@
3
3
  import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
4
4
 
5
5
  import { define } from "../elements";
6
+ import { exists } from "../utilities/continuation";
6
7
  import { baseTypeFromNothing } from "../utilities/type";
7
8
  import { instantiateConstructor } from "../process/instantiate";
8
9
  import { validateTermAsVariable } from "../process/validation";
@@ -73,7 +74,7 @@ export default define(class Constructor extends Element {
73
74
  this.type = type;
74
75
  }
75
76
 
76
- async verify(context) {
77
+ verify(context, continuation) {
77
78
  let verifies = false;
78
79
 
79
80
  const includeType = false,
@@ -81,68 +82,102 @@ export default define(class Constructor extends Element {
81
82
 
82
83
  context.trace(`Verifying the '${constructorString}' constructor...`);
83
84
 
84
- await attempt(async (context) => {
85
- const termValidates = await this.validateTerm(context);
85
+ attempt((context) => {
86
+ this.validateTerm(context, (termValidates) => {
87
+ if (termValidates) {
88
+ verifies = true;
89
+ }
86
90
 
87
- if (termValidates) {
88
- verifies = true;
89
- }
91
+ if (verifies) {
92
+ this.commit(context);
93
+ }
90
94
 
91
- if (verifies) {
92
- this.commit(context);
93
- }
95
+ if (verifies) {
96
+ context.debug(`...verified the '${constructorString}' constructor.`);
97
+ }
98
+
99
+ return continuation(verifies);
100
+ });
94
101
  }, context);
102
+ }
95
103
 
96
- if (verifies) {
97
- context.debug(`...verified the '${constructorString}' constructor.`);
98
- }
104
+ validateTerm(context, continuation) {
105
+ const includeType = false,
106
+ constructorString = this.getString(includeType);
107
+
108
+ context.trace(`Validating the '${constructorString}' constructor's term...`);
99
109
 
100
- return verifies;
110
+ const validateTermAsVariable = this.validateTermAsVariable.bind(this),
111
+ validateTermAsConstructor = this.validateTermAsConstructor.bind(this);
112
+
113
+ return exists([
114
+ validateTermAsVariable,
115
+ validateTermAsConstructor
116
+ ], context, (termValidates) => {
117
+ if (termValidates) {
118
+ context.debug(`...validated the '${constructorString}' constructor's term.`);
119
+ }
120
+
121
+ return continuation(termValidates);
122
+ });
101
123
  }
102
124
 
103
- async validateTerm(context) {
104
- let termValidates = false;
125
+ validateTermAsVariable(context, continuation) {
126
+ const hypothtical = this.isHypothetical();
127
+
128
+ if (!hypothtical) {
129
+ const termValidatesAsVariable = false;
130
+
131
+ return continuation(termValidatesAsVariable);
132
+ }
105
133
 
106
134
  const includeType = false,
107
135
  constructorString = this.getString(includeType);
108
136
 
109
137
  context.trace(`Validating the '${constructorString}' constructor's term...`);
110
138
 
139
+ validateTermAsVariable(this.term, context, (term, context) => {
140
+ let termValidatesAsVariable = false;
141
+
142
+ const type = term.getType(),
143
+ baseType = baseTypeFromNothing();
144
+
145
+ if (type === baseType) {
146
+ termValidatesAsVariable = true;
147
+ }
148
+
149
+ if (termValidatesAsVariable) {
150
+ context.debug(`...validated the '${constructorString}' constructor's term.`);
151
+ }
152
+
153
+ return continuation(termValidatesAsVariable);
154
+ });
155
+ }
156
+
157
+ validateTermAsConstructor(context, continuation) {
111
158
  const hypothtical = this.isHypothetical();
112
159
 
113
160
  if (hypothtical) {
114
- const termValidatesAsVariable = await validateTermAsVariable(this.term, context, async (term, context) => { ///
115
- let validatesForwards = false;
161
+ const termValidatesAsConstructor = false;
116
162
 
117
- const type = term.getType(),
118
- baseType = baseTypeFromNothing();
119
-
120
- if (type === baseType) {
121
- validatesForwards = true;
122
- }
163
+ return continuation(termValidatesAsConstructor);
164
+ }
123
165
 
124
- return validatesForwards;
125
- });
166
+ const includeType = false,
167
+ constructorString = this.getString(includeType);
126
168
 
127
- if (termValidatesAsVariable) {
128
- termValidates = true;
129
- }
130
- } else {
131
- const termValidatesAsConstructor = await validateTermAsConstructor(this.term, context);
169
+ context.trace(`Validating the '${constructorString}' constructor's term...`);
132
170
 
171
+ validateTermAsConstructor(this.term, context, (termValidatesAsConstructor) => {
133
172
  if (termValidatesAsConstructor) {
134
- termValidates = true;
173
+ context.debug(`...validated the '${constructorString}' constructor's term.`);
135
174
  }
136
- }
137
-
138
- if (termValidates) {
139
- context.debug(`...validated the '${constructorString}' constructor's term.`);
140
- }
141
175
 
142
- return termValidates;
176
+ return continuation(termValidatesAsConstructor);
177
+ });
143
178
  }
144
179
 
145
- async unifyTerm(term, context, validateForwards) {
180
+ unifyTerm(term, context, continuation) {
146
181
  let termUnifies = false;
147
182
 
148
183
  const termString = term.getString(),
@@ -151,7 +186,7 @@ export default define(class Constructor extends Element {
151
186
 
152
187
  context.trace(`Unifying the '${termString}' term with the '${constructorString}' constructor...`);
153
188
 
154
- const hypothesesDiscardedGivenTerm = await this.dischargeHypothesesGivenTerm(term, context);
189
+ const hypothesesDiscardedGivenTerm = this.dischargeHypothesesGivenTerm(term, context);
155
190
 
156
191
  if (hypothesesDiscardedGivenTerm) {
157
192
  const constructor = this, ///
@@ -167,7 +202,7 @@ export default define(class Constructor extends Element {
167
202
 
168
203
  term.setProvisional(provisional);
169
204
 
170
- const validatesForwards = await validateForwards(term, context);
205
+ const validatesForwards = validateForwards(term, context);
171
206
 
172
207
  if (validatesForwards) {
173
208
  termUnifies = true;
@@ -182,10 +217,10 @@ export default define(class Constructor extends Element {
182
217
  return termUnifies;
183
218
  }
184
219
 
185
- async dischargeHypothesisGivenTerm(hypothesis, term, context) {
220
+ dischargeHypothesisGivenTerm(hypothesis, term, context) {
186
221
  let hypothesisDischargesGivenTerm;
187
222
 
188
- await this.break(context);
223
+ this.break(context);
189
224
 
190
225
  const termString = term.getString(),
191
226
  hypothesisString = hypothesis.getString(),
@@ -193,7 +228,7 @@ export default define(class Constructor extends Element {
193
228
 
194
229
  context.trace(`Discharding the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term...`);
195
230
 
196
- hypothesisDischargesGivenTerm = await hypothesis.dischargeGivenTerm(term, context);
231
+ hypothesisDischargesGivenTerm = hypothesis.dischargeGivenTerm(term, context);
197
232
 
198
233
  if (hypothesisDischargesGivenTerm) {
199
234
  context.trace(`...discharges the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term.`);
@@ -202,14 +237,14 @@ export default define(class Constructor extends Element {
202
237
  return hypothesisDischargesGivenTerm;
203
238
  }
204
239
 
205
- async dischargeHypothesesGivenTerm(term, context) {
240
+ dischargeHypothesesGivenTerm(term, context) {
206
241
  let hypothesesDischargesGivenTerm = true; ///
207
242
 
208
243
  const hypothetical = this.isHypothetical();
209
244
 
210
245
  if (hypothetical) {
211
- hypothesesDischargesGivenTerm = await every(this.hypotheses, async (hypothesis) => {
212
- const hypothesisDischarges = await this.dischargeHypothesisGivenTerm(hypothesis, term, context);
246
+ hypothesesDischargesGivenTerm = every(this.hypotheses, (hypothesis) => {
247
+ const hypothesisDischarges = this.dischargeHypothesisGivenTerm(hypothesis, term, context);
213
248
 
214
249
  if (hypothesisDischarges) {
215
250
  return true;
@@ -1,9 +1,14 @@
1
1
  "use strict";
2
2
 
3
+ import { breakPointUtilities } from "occam-languages";
4
+
3
5
  import Declaration from "../declaration";
4
6
 
7
+ import { all } from "../../utilities/continuation";
5
8
  import { define } from "../../elements";
6
9
 
10
+ const { breakable } = breakPointUtilities;
11
+
7
12
  export default define(class ConstructorDeclaration extends Declaration {
8
13
  constructor(context, string, node, breakPoint, type, provisional, constructor) {
9
14
  super(context, string, node, breakPoint);
@@ -34,37 +39,33 @@ export default define(class ConstructorDeclaration extends Declaration {
34
39
 
35
40
  setHypotheses(hypotheses) { this.constructor.setHypotheses(hypotheses); }
36
41
 
37
- async verify(context) {
38
- let verifies = false;
39
-
40
- await this.break(context);
41
-
42
+ verify = breakable(function (context, continuation) {
42
43
  const constructorDeclarationString = this.getString(); ///
43
44
 
44
45
  context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration...`);
45
46
 
46
- const typeVerified = this.verifyType(context);
47
+ const verifyType = this.verifyType.bind(this),
48
+ verifyConstructor = this.verifyConstructor.bind(this);
47
49
 
48
- if (typeVerified) {
49
- const constructorVerifies = this.verifyConstructor(context);
50
-
51
- if (constructorVerifies) {
50
+ return all([
51
+ verifyType,
52
+ verifyConstructor
53
+ ], context, (verifies) => {
54
+ if (verifies) {
52
55
  this.constructor.setType(this.type);
53
56
 
54
57
  context.addConstructor(this.constructor);
55
-
56
- verifies = true;
57
58
  }
58
- }
59
59
 
60
- if (verifies) {
61
- context.debug(`...verified the '${constructorDeclarationString}' constructor declaration.`);
62
- }
60
+ if (verifies) {
61
+ context.debug(`...verified the '${constructorDeclarationString}' constructor declaration.`);
62
+ }
63
63
 
64
- return verifies;
65
- }
64
+ return continuation(verifies);
65
+ });
66
+ });
66
67
 
67
- verifyType(context) {
68
+ verifyType(context, continuation) {
68
69
  let typeVerifies = false;
69
70
 
70
71
  const constructorDeclarationString = this.getString(); ///
@@ -102,25 +103,23 @@ export default define(class ConstructorDeclaration extends Declaration {
102
103
  context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's type.`);
103
104
  }
104
105
 
105
- return typeVerifies;
106
+ return continuation(typeVerifies);
106
107
  }
107
108
 
108
- verifyConstructor(context) {
109
- let constructorVerifies;
110
-
109
+ verifyConstructor(context, continuation) {
111
110
  const includeType = false,
112
111
  constructorString = this.constructor.getString(includeType),
113
112
  constructorDeclarationString = this.getString(); ///
114
113
 
115
114
  context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor...`);
116
115
 
117
- constructorVerifies = this.constructor.verify(context);
118
-
119
- if (constructorVerifies) {
120
- context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor.`);
121
- }
116
+ this.constructor.verify(context, (constructorVerifies) => {
117
+ if (constructorVerifies) {
118
+ context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor.`);
119
+ }
122
120
 
123
- return constructorVerifies;
121
+ return continuation(constructorVerifies);
122
+ });
124
123
  }
125
124
 
126
125
  static name = "ConstructorDeclaration";
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ import { breakPointUtilities, continuationUtilities } from "occam-languages";
4
+
3
5
  import Declaration from "../declaration";
4
6
 
7
+ import { all } from "../../utilities/continuation";
5
8
  import { define } from "../../elements";
6
9
  import { baseTypeFromNothing } from "../../utilities/type";
7
10
 
11
+ const { every } = continuationUtilities,
12
+ { breakable } = breakPointUtilities;
13
+
8
14
  export default define(class TypeDeclaration extends Declaration {
9
15
  constructor(context, string, node, breakPoint, type, superTypes, provisional) {
10
16
  super(context, string, node, breakPoint);
@@ -39,51 +45,45 @@ export default define(class TypeDeclaration extends Declaration {
39
45
  return properties;
40
46
  }
41
47
 
42
- async verify(context) {
43
- let verifies = false;
44
-
45
- await this.break(context);
46
-
48
+ verify = breakable(function (context, continuation) {
47
49
  const typeDeclarationString = this.getString(); ///
48
50
 
49
51
  context.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
50
52
 
51
- const typeVerifies = this.verifyType(context);
52
-
53
- if (typeVerifies) {
54
- const superTypesVerify = this.verifySuperTypes(context);
55
-
56
- if (superTypesVerify) {
57
- const typePrefixVerifies = this.verifyTypePrefix(context);
53
+ const verifyType = this.verifyType.bind(this),
54
+ verifySuperTypes = this.verifySuperTypes.bind(this),
55
+ verifyTypePrefix = this.verifyTypePrefix.bind(this);
58
56
 
59
- if (typePrefixVerifies) {
60
- const properties = this.getProperties(),
61
- typePrefix = context.getTypePrefix(),
62
- prefixName = (typePrefix !== null) ?
63
- typePrefix.getPrefixName() :
64
- null;
57
+ return all([
58
+ verifyType,
59
+ verifySuperTypes,
60
+ verifyTypePrefix
61
+ ], context, (verifies) => {
62
+ if (verifies) {
63
+ const properties = this.getProperties(),
64
+ typePrefix = context.getTypePrefix(),
65
+ prefixName = (typePrefix !== null) ?
66
+ typePrefix.getPrefixName() :
67
+ null;
65
68
 
66
- this.type.setProvisional(this.provisional);
69
+ this.type.setProvisional(this.provisional);
67
70
 
68
- this.type.setProperties(properties);
71
+ this.type.setProperties(properties);
69
72
 
70
- this.type.setPrefixName(prefixName);
73
+ this.type.setPrefixName(prefixName);
71
74
 
72
- context.addType(this.type);
73
-
74
- verifies = true;
75
- }
75
+ context.addType(this.type);
76
76
  }
77
- }
78
77
 
79
- if (verifies) {
80
- context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
81
- }
78
+ if (verifies) {
79
+ context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
80
+ }
82
81
 
83
- return verifies;
84
- }
82
+ return continuation(verifies);
83
+ });
84
+ });
85
85
 
86
- verifyType(context) {
86
+ verifyType(context, continuation) {
87
87
  let typeVerifies = false;
88
88
 
89
89
  const typeString = this.type.getString(),
@@ -112,97 +112,91 @@ export default define(class TypeDeclaration extends Declaration {
112
112
  context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type`);
113
113
  }
114
114
 
115
- return typeVerifies;
115
+ return continuation(typeVerifies);
116
116
  }
117
117
 
118
- verifySuperType(superType, superTypes, context) {
119
- let superTypeVerifies = false;
118
+ verifyTypePrefix(context, continuation) {
119
+ let typePrefixVerifies = false;
120
120
 
121
- const superTypeString = superType.getString(),
121
+ const typeString = this.type.getString(),
122
122
  typeDeclarationString = this.getString(); ///
123
123
 
124
- context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
125
-
126
- const nominalTypeName = superType.getNominalTypeName(),
127
- typeName = nominalTypeName, ///
128
- typeComparesToTypeName = this.type.compareTypeName(typeName);
129
-
130
- if (!typeComparesToTypeName) {
131
- superType = context.findTypeByNominalTypeName(nominalTypeName);
124
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
132
125
 
133
- if (superType !== null) {
134
- superTypes.push(superType);
126
+ const typePrefixed = this.type.isPrefixed();
135
127
 
136
- superTypeVerifies = true;
137
- } else {
138
- context.debug(`The '${superTypeString}' super-type is not present.`);
139
- }
128
+ if (!typePrefixed) {
129
+ typePrefixVerifies = true;
140
130
  } else {
141
- context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
131
+ context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
142
132
  }
143
133
 
144
- if (superTypeVerifies) {
145
- context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
134
+ if (typePrefixVerifies) {
135
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
146
136
  }
147
137
 
148
- return superTypeVerifies;
138
+ return continuation(typePrefixVerifies);
149
139
  }
150
140
 
151
- verifySuperTypes(context) {
152
- let superTypesVerify;
153
-
141
+ verifySuperTypes(context, continuation) {
154
142
  const superTypes = [],
155
143
  typeDeclarationString = this.getString(); ///
156
144
 
157
145
  context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
158
146
 
159
- superTypesVerify = this.superTypes.every((superType) => {
160
- const superTypeVerifies = this.verifySuperType(superType, superTypes, context);
147
+ every(this.superTypes, (superType, continuation) => {
148
+ this.verifySuperType(superType, superTypes, context, continuation);
149
+ }, (superTypesVerify) => {
150
+ if (superTypesVerify) {
151
+ const superTypesLength = superTypes.length;
161
152
 
162
- if (superTypeVerifies) {
163
- return true;
164
- }
165
- });
153
+ if (superTypesLength === 0) {
154
+ const baseType = baseTypeFromNothing(),
155
+ superTyupe = baseType; ///
166
156
 
167
- if (superTypesVerify) {
168
- const superTypesLength = superTypes.length;
157
+ superTypes.push(superTyupe);
158
+ }
169
159
 
170
- if (superTypesLength === 0) {
171
- const baseType = baseTypeFromNothing(),
172
- superTyupe = baseType; ///
160
+ this.type.setSuperTypes(superTypes);
173
161
 
174
- superTypes.push(superTyupe);
162
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
175
163
  }
176
164
 
177
- this.type.setSuperTypes(superTypes);
178
-
179
- context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
180
- }
181
-
182
- return superTypesVerify;
165
+ return continuation(superTypesVerify);
166
+ });
183
167
  }
184
168
 
185
- verifyTypePrefix(context) {
186
- let typePrefixVerifies = false;
169
+ verifySuperType(superType, superTypes, context, continuation) {
170
+ let superTypeVerifies = false;
187
171
 
188
- const typeString = this.type.getString(),
172
+ const superTypeString = superType.getString(),
189
173
  typeDeclarationString = this.getString(); ///
190
174
 
191
- context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
175
+ context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
192
176
 
193
- const typePrefixed = this.type.isPrefixed();
177
+ const nominalTypeName = superType.getNominalTypeName(),
178
+ typeName = nominalTypeName, ///
179
+ typeComparesToTypeName = this.type.compareTypeName(typeName);
194
180
 
195
- if (!typePrefixed) {
196
- typePrefixVerifies = true;
181
+ if (!typeComparesToTypeName) {
182
+ superType = context.findTypeByNominalTypeName(nominalTypeName);
183
+
184
+ if (superType !== null) {
185
+ superTypes.push(superType);
186
+
187
+ superTypeVerifies = true;
188
+ } else {
189
+ context.debug(`The '${superTypeString}' super-type is not present.`);
190
+ }
197
191
  } else {
198
- context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
192
+ context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
199
193
  }
200
194
 
201
- if (typePrefixVerifies) {
202
- context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
195
+ if (superTypeVerifies) {
196
+ context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
203
197
  }
204
198
 
205
- return typePrefixVerifies;
199
+ return continuation(superTypeVerifies);
206
200
  }
207
201
 
208
202
  static name = "TypeDeclaration";