fez-lisp 1.5.186 → 1.5.187

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.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "fez-lisp",
3
3
  "description": "Lisp interpreted & compiled to JavaScript",
4
4
  "author": "AT290690",
5
- "version": "1.5.186",
5
+ "version": "1.5.187",
6
6
  "type": "module",
7
7
  "main": "index.js",
8
8
  "keywords": [
package/src/check.js CHANGED
@@ -159,53 +159,53 @@ export const setPropToCollection = (stats, prop) => {
159
159
  )
160
160
  }
161
161
  export const setProp = (stats, prop, value) => {
162
- return (
162
+ if (
163
163
  (stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
164
164
  value[prop][0] !== UNKNOWN &&
165
- value[prop][0] !== ANY &&
166
- ((stats[prop][0] = value[prop][0]),
167
- value[prop][1] && (stats[prop][1] = value[prop][1]))
168
- )
165
+ value[prop][0] !== ANY
166
+ ) {
167
+ stats[prop][0] = value[prop][0]
168
+ if (value[prop][1]) stats[prop][1] = value[prop][1]
169
+ }
169
170
  }
170
171
  export const setPropToReturn = (stats, prop, value) => {
171
- return (
172
+ if (
172
173
  (stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
173
174
  value[RETURNS][0] !== UNKNOWN &&
174
- value[RETURNS][0] !== ANY &&
175
- ((stats[prop][0] = value[RETURNS][0]),
176
- value[RETURNS][1] && (stats[prop][1] = value[RETURNS][1]))
177
- )
175
+ value[RETURNS][0] !== ANY
176
+ ) {
177
+ stats[prop][0] = value[RETURNS][0]
178
+ if (value[RETURNS][1]) stats[prop][1] = value[RETURNS][1]
179
+ }
178
180
  }
179
181
  export const setPropToReturnRef = (stats, prop, value) => {
180
- return (
182
+ if (
181
183
  stats[prop] &&
182
184
  (stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
183
185
  value[RETURNS][0] !== UNKNOWN &&
184
- value[RETURNS][0] !== ANY &&
185
- (stats[prop] = value[RETURNS])
186
+ value[RETURNS][0] !== ANY
186
187
  )
188
+ stats[prop] = value[RETURNS]
187
189
  }
188
190
  export const setPropToType = (stats, prop, value) => {
189
- return (
191
+ if (
190
192
  stats[prop] &&
191
193
  (stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
192
- value[TYPE_PROP][0] !== ANY &&
193
- ((stats[prop][0] = value[TYPE_PROP][0]),
194
- value[TYPE_PROP][1] && (stats[prop][1] = value[TYPE_PROP][1]))
195
- )
194
+ value[TYPE_PROP][0] !== ANY
195
+ ) {
196
+ stats[prop][0] = value[TYPE_PROP][0]
197
+ if (value[TYPE_PROP][1]) stats[prop][1] = value[TYPE_PROP][1]
198
+ }
196
199
  }
197
200
  export const setPropToTypeRef = (stats, prop, value) => {
198
- return (
199
- stats[prop] &&
200
- (stats[prop][0] === UNKNOWN || stats[prop][0] === ANY) &&
201
- (stats[prop] = value[TYPE_PROP])
202
- )
201
+ if (stats[prop] && (stats[prop][0] === UNKNOWN || stats[prop][0] === ANY))
202
+ stats[prop] = value[TYPE_PROP]
203
203
  }
204
204
  export const setReturnToAtom = (stats) => {
205
- return (
206
- (isUnknownReturn(stats) || isAnyReturn(stats)) &&
207
- ((stats[RETURNS][0] = ATOM), (stats[RETURNS][1] = NUMBER_SUBTYPE()))
208
- )
205
+ if (isUnknownReturn(stats) || isAnyReturn(stats)) {
206
+ stats[RETURNS][0] = ATOM
207
+ stats[RETURNS][1] = NUMBER_SUBTYPE()
208
+ }
209
209
  }
210
210
  export const setTypeToAtom = (stats) =>
211
211
  (isUnknownType(stats) || isAnyType(stats)) &&
@@ -238,6 +238,7 @@ export const setTypeToReturnRef = (stats, value) => {
238
238
  // Change main type if unknown
239
239
  if (isUnknownType(stats) || isAnyType(stats))
240
240
  if (!isUnknownReturn(value)) stats[TYPE_PROP][0] = value[RETURNS][0]
241
+ // TODO: Figure out what we do if generic thigns get infered
241
242
  // cange sub type if it doesn't have
242
243
  if (!hasSubType(stats) || getSubType(stats).has(UNKNOWN))
243
244
  if (hasSubReturn(value)) stats[TYPE_PROP][1] = value[RETURNS][1]
@@ -1590,7 +1591,7 @@ export const typeCheck = (ast, ctx = SPECIAL_FORM_TYPES) => {
1590
1591
  // type check
1591
1592
  // TODO get rof pred type
1592
1593
  // const PRED_TYPE = args[i][STATS][TYPE_PROP][1]
1593
- const MAIN_TYPE = getType(args[i][STATS])
1594
+ const MAIN_TYPE = getType(args[i][STATS], rest[i])
1594
1595
  if (MAIN_TYPE === ANY) continue
1595
1596
  if (first[TYPE] === APPLY) {
1596
1597
  if (isLeaf(rest[i])) {
@@ -1746,11 +1747,13 @@ export const typeCheck = (ast, ctx = SPECIAL_FORM_TYPES) => {
1746
1747
  !equalSubTypes(args[i][STATS], env[name][STATS]))
1747
1748
  )
1748
1749
  setType(env[name][STATS], args[i][STATS])
1749
- else if (
1750
- !isUnknownType(args[i][STATS]) &&
1751
- isUnknownType(env[name][STATS])
1752
- ) {
1750
+ else if (isUnknownType(env[name][STATS])) {
1753
1751
  // REFF ASSIGMENT
1752
+ // EXPLAIN: Not asigning ref fixes this overwritting
1753
+ // (let sum (lambda testxs (+ (get testxs 0) (get testxs 1))))
1754
+ // (let range (math:range 1 10))
1755
+ // (sum range)
1756
+ // But it reduces good inference too
1754
1757
  if (getType(args[i][STATS]) !== APPLY)
1755
1758
  setTypeRef(env[name][STATS], args[i][STATS])
1756
1759
  else setStatsRef(env[rest[i][VALUE]], args[i])