fez-lisp 1.5.95 → 1.5.98

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/src/evaluator.js CHANGED
@@ -13,10 +13,8 @@ export const evaluate = (exp, env = keywords) => {
13
13
  switch (head[TYPE]) {
14
14
  case WORD: {
15
15
  const word = env[value]
16
- if (word == undefined) {
16
+ if (word == undefined)
17
17
  throw new ReferenceError(`Accessing undefined variable ${value}`)
18
- }
19
-
20
18
  return word
21
19
  }
22
20
  case APPLY: {
package/src/types.js CHANGED
@@ -5,8 +5,10 @@ import {
5
5
  DEBUG,
6
6
  KEYWORDS,
7
7
  PLACEHOLDER,
8
- STATIC_TYPES
8
+ STATIC_TYPES,
9
+ VALUE
9
10
  } from './keywords.js'
11
+ import { stringifyArgs } from './utils.js'
10
12
  export const ARG_COUNT = 'argumentsN'
11
13
  export const VARIADIC = Infinity
12
14
  export const STATS = '__stats__'
@@ -29,7 +31,6 @@ export const toTypeNames = (type) => {
29
31
  case ATOM:
30
32
  return 'Atom'
31
33
  case UNKNOWN:
32
- // case ANY:
33
34
  return 'Unknown'
34
35
  case PREDICATE:
35
36
  return 'Predicate'
@@ -44,10 +45,10 @@ export const toTypeNames = (type) => {
44
45
  export const SPECIAL_FORM_TYPES = {
45
46
  [SCOPE_NAME]: ';',
46
47
  // [ORDER]: 0,
47
- [toTypeNames(APPLY)]: {
48
+ [STATIC_TYPES.ABSTRACTION]: {
48
49
  [STATS]: {
49
50
  [TYPE_PROP]: [APPLY],
50
- [SIGNATURE]: toTypeNames(APPLY),
51
+ [SIGNATURE]: STATIC_TYPES.ABSTRACTION,
51
52
  retried: Infinity,
52
53
  [ARG_COUNT]: 1,
53
54
  [ARGUMENTS]: [
@@ -66,10 +67,10 @@ export const SPECIAL_FORM_TYPES = {
66
67
  [RETURNS]: [APPLY]
67
68
  }
68
69
  },
69
- [toTypeNames(ATOM)]: {
70
+ [STATIC_TYPES.ATOM]: {
70
71
  [STATS]: {
71
72
  [TYPE_PROP]: [APPLY],
72
- [SIGNATURE]: toTypeNames(ATOM),
73
+ [SIGNATURE]: STATIC_TYPES.ATOM,
73
74
  retried: Infinity,
74
75
  [ARG_COUNT]: 1,
75
76
  [ARGUMENTS]: [
@@ -88,10 +89,10 @@ export const SPECIAL_FORM_TYPES = {
88
89
  [RETURNS]: [ATOM]
89
90
  }
90
91
  },
91
- [toTypeNames(PREDICATE)]: {
92
+ [STATIC_TYPES.PREDICATE]: {
92
93
  [STATS]: {
93
94
  [TYPE_PROP]: [APPLY, PREDICATE],
94
- [SIGNATURE]: toTypeNames(PREDICATE),
95
+ [SIGNATURE]: STATIC_TYPES.PREDICATE,
95
96
  retried: Infinity,
96
97
  [ARG_COUNT]: 1,
97
98
  [ARGUMENTS]: [
@@ -110,10 +111,10 @@ export const SPECIAL_FORM_TYPES = {
110
111
  [RETURNS]: [ATOM, PREDICATE]
111
112
  }
112
113
  },
113
- [toTypeNames(COLLECTION)]: {
114
+ [STATIC_TYPES.COLLECTION]: {
114
115
  [STATS]: {
115
116
  [TYPE_PROP]: [APPLY],
116
- [SIGNATURE]: toTypeNames(COLLECTION),
117
+ [SIGNATURE]: STATIC_TYPES.COLLECTION,
117
118
  retried: Infinity,
118
119
  [ARG_COUNT]: 1,
119
120
  [ARGUMENTS]: [
@@ -132,10 +133,10 @@ export const SPECIAL_FORM_TYPES = {
132
133
  [RETURNS]: [COLLECTION]
133
134
  }
134
135
  },
135
- [toTypeNames(UNKNOWN)]: {
136
+ [STATIC_TYPES.UNKNOWN]: {
136
137
  [STATS]: {
137
138
  [TYPE_PROP]: [APPLY],
138
- [SIGNATURE]: toTypeNames(UNKNOWN),
139
+ [SIGNATURE]: STATIC_TYPES.UNKNOWN,
139
140
  retried: Infinity,
140
141
  [ARG_COUNT]: 1,
141
142
  [ARGUMENTS]: [
@@ -154,6 +155,28 @@ export const SPECIAL_FORM_TYPES = {
154
155
  [RETURNS]: [UNKNOWN]
155
156
  }
156
157
  },
158
+ [STATIC_TYPES.ANY]: {
159
+ [STATS]: {
160
+ [TYPE_PROP]: [APPLY],
161
+ [SIGNATURE]: STATIC_TYPES.ANY,
162
+ retried: Infinity,
163
+ [ARG_COUNT]: 1,
164
+ [ARGUMENTS]: [
165
+ {
166
+ [STATS]: {
167
+ retried: Infinity,
168
+ [SIGNATURE]: PLACEHOLDER,
169
+ [TYPE_PROP]: [UNKNOWN],
170
+ [RETURNS]: [UNKNOWN],
171
+
172
+ [ARGUMENTS]: [],
173
+ [ARG_COUNT]: 0
174
+ }
175
+ }
176
+ ],
177
+ [RETURNS]: [ANY]
178
+ }
179
+ },
157
180
  [DEBUG.LOG]: {
158
181
  [STATS]: {
159
182
  [TYPE_PROP]: [APPLY],
@@ -1184,3 +1207,24 @@ export const formatType = (name, env) => {
1184
1207
  : `(let ${name} ${toTypeNames(getType(stats))})`
1185
1208
  : name
1186
1209
  }
1210
+
1211
+ export const validateLambda = (exp, name) => {
1212
+ if (exp.length === 1)
1213
+ throw new TypeError(
1214
+ `Incorrect number of arguments for (${
1215
+ KEYWORDS.ANONYMOUS_FUNCTION
1216
+ }). Expected at least 1 (the lambda body) but got 1 (${stringifyArgs(
1217
+ exp
1218
+ )})`
1219
+ )
1220
+ if (name)
1221
+ for (let i = 0; i < exp.length - 1; ++i)
1222
+ if (exp[i][VALUE] === name)
1223
+ throw new TypeError(
1224
+ `Arguments of (${
1225
+ KEYWORDS.ANONYMOUS_FUNCTION
1226
+ }) Should not have the same name as they were declared (${stringifyArgs(
1227
+ exp
1228
+ )})`
1229
+ )
1230
+ }