@lango-project/lango-js 0.0.0-stage → 0.1.1
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/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +900 -2
- package/package.json +32 -4
- package/src/cli.mjs +172 -0
- package/src/compiler.mjs +4226 -0
- package/src/database.mjs +67 -0
- package/src/runtime.mjs +487 -0
- package/src/template/.vscode/extensions.json +5 -0
- package/src/template/.vscode/settings.json +5 -0
- package/src/template/README.md +18 -0
- package/src/template/gitignore +2 -0
- package/src/template/package.json +18 -0
- package/src/template/src/main.lango +4 -0
- package/src/template/test/main.lango +2 -0
- package/src/vendor/bignumber.LICENCE.md +26 -0
- package/src/vendor/bignumber.mjs +3119 -0
package/README.md
CHANGED
|
@@ -1,3 +1,901 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Lango
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Lango is a JavaScript-transpiling language designed for readable, pragmatic
|
|
4
|
+
programs. Its language decisions are in `design/`.
|
|
5
|
+
|
|
6
|
+
## Faz 1
|
|
7
|
+
|
|
8
|
+
Faz 1 is the first executable vertical slice. It compiles the
|
|
9
|
+
`examples/002-main-branch` program and supports:
|
|
10
|
+
|
|
11
|
+
- separate `export main(args)` header followed by `main(args)`
|
|
12
|
+
- local assignments
|
|
13
|
+
- `if` / `else`
|
|
14
|
+
- numeric `>` conditions
|
|
15
|
+
- `.length` and numeric array indexing
|
|
16
|
+
- string interpolation
|
|
17
|
+
- explicit `_(...)` localization
|
|
18
|
+
- `println(...)`
|
|
19
|
+
|
|
20
|
+
Build a source file with:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
npm run build -- examples/002-main-branch/input.lango --out /tmp/lango/main.mjs
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Decimal division can be configured per build with enum-style rounding names:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
npm run build -- input.lango --out main.mjs --decimal-division-scale 2 --decimal-division-rounding HalfUp
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The build writes the generated module, an external source-map file, and its
|
|
33
|
+
private `.lango/runtime.mjs` beside the output. Run the current checks with:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
npm test
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Create a new application project with:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
npx @lango-project/lango-js init hello-lango
|
|
43
|
+
cd hello-lango
|
|
44
|
+
npm install
|
|
45
|
+
npm run run
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The generated project includes source and test files, npm scripts, and VS Code
|
|
49
|
+
settings that recommend the Lango extension when it becomes available.
|
|
50
|
+
|
|
51
|
+
Faz 1 deliberately rejects all syntax outside this vertical slice. It is the
|
|
52
|
+
base for progressively implementing the accepted language decisions rather than
|
|
53
|
+
a claim of full-language support.
|
|
54
|
+
|
|
55
|
+
Run a program directly with its Lango arguments after `--`:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
npm run run -- examples/002-main-branch/input.lango Ada
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
For the built-in SQLite adapter, opt in with a database file:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
npm run run -- input.lango --database app.sqlite -- Ada
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
An optional JSON translation catalog is passed to the runtime with `--catalog`:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
npm run run -- input.lango --catalog tr.json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The same `--database` and `--catalog` options are available to `npm run
|
|
74
|
+
test:lango -- input.lango` when Lango test blocks need host services.
|
|
75
|
+
|
|
76
|
+
### Embedding a generated program
|
|
77
|
+
|
|
78
|
+
`buildFile()` writes a matched private runtime next to the generated module.
|
|
79
|
+
Before calling exported Lango entry points, import that runtime and configure
|
|
80
|
+
it. `configure()` accepts an object with optional `output`, `catalog`, and
|
|
81
|
+
`database_adapter` values; it returns `null`, resets dynamic context and
|
|
82
|
+
transaction-failure state, and rejects an invalid configuration with
|
|
83
|
+
`RuntimeConfigurationError`. `output` is a function (or `null`), `catalog` is
|
|
84
|
+
a non-array object, and `database_adapter` is an object (or `null`).
|
|
85
|
+
|
|
86
|
+
```js
|
|
87
|
+
const runtime = await import("./.lango/runtime.mjs");
|
|
88
|
+
const program = await import("./main.mjs");
|
|
89
|
+
|
|
90
|
+
runtime.configure({
|
|
91
|
+
output: (value) => console.log(value),
|
|
92
|
+
catalog: { Hello: "Merhaba" },
|
|
93
|
+
database_adapter: null,
|
|
94
|
+
});
|
|
95
|
+
await program.main(["Ada"]);
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The emitted runtime is tied to that build output; hosts must configure this
|
|
99
|
+
private sibling module, not a separately installed runtime package.
|
|
100
|
+
|
|
101
|
+
## Faz 2
|
|
102
|
+
|
|
103
|
+
Faz 2 adds same-module functions, `return`, calls with arity validation,
|
|
104
|
+
Boolean/null literals, and numeric `+`, `-`, `*`, `/`, `%`, `**`, `>`, `==`, and `!=` expressions.
|
|
105
|
+
See `examples/003-functions`.
|
|
106
|
+
|
|
107
|
+
## Faz 3
|
|
108
|
+
|
|
109
|
+
Faz 3 adds `loop while`, `<`, `break`, `continue`, and `name++`. See
|
|
110
|
+
`examples/004-loops`.
|
|
111
|
+
|
|
112
|
+
## Faz 4
|
|
113
|
+
|
|
114
|
+
Faz 4 adds single-line array literals, `for values as value`, and `Array#add()`.
|
|
115
|
+
See `examples/005-arrays`.
|
|
116
|
+
|
|
117
|
+
## Faz 5
|
|
118
|
+
|
|
119
|
+
Faz 5 adds multiline object literals, dot access, and `for object as key: value`.
|
|
120
|
+
See `examples/006-objects`.
|
|
121
|
+
|
|
122
|
+
## Faz 10
|
|
123
|
+
|
|
124
|
+
Faz 10 adds a class-level `properties` section. Declared `@property` names are
|
|
125
|
+
emitted as JavaScript public fields; other `@property` names remain JavaScript
|
|
126
|
+
private `#fields`. See `examples/010-public-properties`.
|
|
127
|
+
|
|
128
|
+
## Faz 11
|
|
129
|
+
|
|
130
|
+
Faz 11 adds initialized class-level values through a `static` section. They are
|
|
131
|
+
read as `Class.Name` outside the class and as `@@Name` in instance methods. See
|
|
132
|
+
`examples/011-static-values`.
|
|
133
|
+
|
|
134
|
+
## Faz 12
|
|
135
|
+
|
|
136
|
+
Faz 12 adds the readonly `enum` class section. Its values are accessed like
|
|
137
|
+
static values, but an assignment through `@@Name` is a compiler error. See
|
|
138
|
+
`examples/012-enum-values`.
|
|
139
|
+
|
|
140
|
+
## Faz 13
|
|
141
|
+
|
|
142
|
+
Faz 13 adds single inheritance with `class Child : Parent`, `super(...)`, and
|
|
143
|
+
`super.method(...)`. See `examples/013-inheritance`.
|
|
144
|
+
|
|
145
|
+
## Faz 14
|
|
146
|
+
|
|
147
|
+
Faz 14 adds direct imports of exported Lango classes with `class Name` in an
|
|
148
|
+
import header. See `examples/014-class-modules`.
|
|
149
|
+
|
|
150
|
+
## Faz 15
|
|
151
|
+
|
|
152
|
+
Faz 15 adds protected instance properties with `_name`, accessible from a class
|
|
153
|
+
and its descendants but not through Lango external member access. See
|
|
154
|
+
`examples/015-protected-properties`.
|
|
155
|
+
|
|
156
|
+
## Faz 16
|
|
157
|
+
|
|
158
|
+
Faz 16 adds static methods with `Class::method()` and calls such as
|
|
159
|
+
`Class.method()`. See `examples/016-static-methods`.
|
|
160
|
+
|
|
161
|
+
## Faz 17
|
|
162
|
+
|
|
163
|
+
Faz 17 adds class-import aliases with `alias Local = class Exported`. See
|
|
164
|
+
`examples/017-class-import-alias`.
|
|
165
|
+
|
|
166
|
+
## Faz 18
|
|
167
|
+
|
|
168
|
+
Faz 18 adds class API declarations. Listed `methods` are public instance
|
|
169
|
+
methods; listed `static` methods are public static methods. Other implementations compile to JavaScript
|
|
170
|
+
private methods. See `examples/018-public-methods`.
|
|
171
|
+
|
|
172
|
+
## Faz 19
|
|
173
|
+
|
|
174
|
+
Faz 19 adds value and condition-only `switch` with grouped non-fallthrough
|
|
175
|
+
cases. See `examples/019-switch`.
|
|
176
|
+
|
|
177
|
+
## Faz 20
|
|
178
|
+
|
|
179
|
+
Faz 20 makes Lango's sole equality spelling, `==`, compile to JavaScript strict
|
|
180
|
+
equality. See `examples/020-strict-equality`.
|
|
181
|
+
|
|
182
|
+
## Faz 21
|
|
183
|
+
|
|
184
|
+
Faz 21 adds `not`, `and`, and `or` logical aliases. See
|
|
185
|
+
`examples/021-logical-operators`.
|
|
186
|
+
|
|
187
|
+
## Faz 22
|
|
188
|
+
|
|
189
|
+
Faz 22 adds decimal, scientific, and hexadecimal number literals. See
|
|
190
|
+
`examples/022-number-literals`.
|
|
191
|
+
|
|
192
|
+
## Faz 23
|
|
193
|
+
|
|
194
|
+
Faz 23 adds variable-index and string-key bracket access. See
|
|
195
|
+
`examples/023-bracket-access`.
|
|
196
|
+
|
|
197
|
+
## Faz 24
|
|
198
|
+
|
|
199
|
+
Faz 24 adds value-free `return`. See `examples/024-empty-return`.
|
|
200
|
+
|
|
201
|
+
## Faz 25
|
|
202
|
+
|
|
203
|
+
Faz 25 adds nested dot access such as `order.customer.name`. See
|
|
204
|
+
`examples/025-nested-access`.
|
|
205
|
+
|
|
206
|
+
## Faz 26
|
|
207
|
+
|
|
208
|
+
Faz 26 adds nested multiline object literals. See
|
|
209
|
+
`examples/026-nested-objects`.
|
|
210
|
+
|
|
211
|
+
## Faz 27
|
|
212
|
+
|
|
213
|
+
Faz 27 adds standalone function-call statements such as `finish()`.
|
|
214
|
+
|
|
215
|
+
## Faz 28
|
|
216
|
+
|
|
217
|
+
Faz 28 adds local closures with an explicit `capture` header. See
|
|
218
|
+
`examples/028-closures`.
|
|
219
|
+
|
|
220
|
+
## Faz 29
|
|
221
|
+
|
|
222
|
+
Faz 29 makes closure capture declarations meaningful: an outer binding must be
|
|
223
|
+
captured, a capture must be used, and local captures must be assigned before
|
|
224
|
+
the closure is created.
|
|
225
|
+
|
|
226
|
+
## Faz 30
|
|
227
|
+
|
|
228
|
+
Faz 30 permits a function to return a closure directly. See
|
|
229
|
+
`examples/030-returned-closures`.
|
|
230
|
+
|
|
231
|
+
## Faz 31
|
|
232
|
+
|
|
233
|
+
Faz 31 makes an explicit `capture @property` retain the original class
|
|
234
|
+
instance in a returned closure. See `examples/031-property-capture`.
|
|
235
|
+
|
|
236
|
+
## Faz 32
|
|
237
|
+
|
|
238
|
+
Faz 32 verifies nested closures: each closure declares its own direct capture,
|
|
239
|
+
while the captured binding remains shared. See `examples/032-nested-closures`.
|
|
240
|
+
|
|
241
|
+
## Faz 33
|
|
242
|
+
|
|
243
|
+
Faz 33 validates captured instance and static properties against the enclosing
|
|
244
|
+
class, and rejects property captures outside class methods.
|
|
245
|
+
|
|
246
|
+
## Faz 34
|
|
247
|
+
|
|
248
|
+
Faz 34 verifies static-property capture and rejects malformed or duplicate
|
|
249
|
+
capture declarations. See `examples/034-static-capture`.
|
|
250
|
+
|
|
251
|
+
## Faz 35
|
|
252
|
+
|
|
253
|
+
Faz 35 extends explicit closure capture to protected properties. See
|
|
254
|
+
`examples/035-protected-capture`.
|
|
255
|
+
|
|
256
|
+
## Faz 36
|
|
257
|
+
|
|
258
|
+
Faz 36 preserves a captured local as one shared, mutable binding rather than a
|
|
259
|
+
new closure-local variable. See `examples/036-shared-capture`.
|
|
260
|
+
|
|
261
|
+
## Faz 37
|
|
262
|
+
|
|
263
|
+
Faz 37 adds synchronous, dynamically scoped `context` bindings. See
|
|
264
|
+
`examples/037-context`.
|
|
265
|
+
|
|
266
|
+
## Faz 38
|
|
267
|
+
|
|
268
|
+
Faz 38 verifies nested context shadowing and restoration on function return.
|
|
269
|
+
See `examples/038-context-restoration`.
|
|
270
|
+
|
|
271
|
+
## Faz 39
|
|
272
|
+
|
|
273
|
+
Faz 39 makes declared context bindings available in class methods. See
|
|
274
|
+
`examples/039-class-context`.
|
|
275
|
+
|
|
276
|
+
## Faz 40
|
|
277
|
+
|
|
278
|
+
Faz 40 gives closures their own explicit context declarations. See
|
|
279
|
+
`examples/040-closure-context`.
|
|
280
|
+
|
|
281
|
+
## Faz 41
|
|
282
|
+
|
|
283
|
+
Faz 41 adds mutable file globals with explicit per-function access
|
|
284
|
+
declarations. See `examples/041-globals`.
|
|
285
|
+
|
|
286
|
+
## Faz 42
|
|
287
|
+
|
|
288
|
+
Faz 42 requires closures to declare globals explicitly before using them. See
|
|
289
|
+
`examples/042-closure-global`.
|
|
290
|
+
|
|
291
|
+
## Faz 43
|
|
292
|
+
|
|
293
|
+
Faz 43 adds standard `from_json()` and `to_json()` helpers. See
|
|
294
|
+
`examples/043-json`.
|
|
295
|
+
|
|
296
|
+
## Faz 44
|
|
297
|
+
|
|
298
|
+
Faz 44 checks JSON-helper arity and reports malformed input as `JsonParseError`.
|
|
299
|
+
|
|
300
|
+
## Faz 45
|
|
301
|
+
|
|
302
|
+
Faz 45 adds `get_class()` and `is_kindof()` reflection helpers. See
|
|
303
|
+
`examples/045-reflection`.
|
|
304
|
+
|
|
305
|
+
## Faz 46
|
|
306
|
+
|
|
307
|
+
Faz 46 adds explicit standard-library predicates for number, string, Boolean,
|
|
308
|
+
object, and array values. See `examples/046-predicates`.
|
|
309
|
+
|
|
310
|
+
## Faz 47
|
|
311
|
+
|
|
312
|
+
Faz 47 requires Boolean values for conditions and logical operators instead of
|
|
313
|
+
using JavaScript truthiness. See `examples/047-boolean-conditions`.
|
|
314
|
+
|
|
315
|
+
## Faz 48
|
|
316
|
+
|
|
317
|
+
Faz 48 adds `loop until` and unqualified `loop` forms. See
|
|
318
|
+
`examples/048-loop-until`.
|
|
319
|
+
|
|
320
|
+
## Faz 49
|
|
321
|
+
|
|
322
|
+
Faz 49 lets `array.add(value)` be used as an expression and preserves its new
|
|
323
|
+
length result. See `examples/049-array-add-return`.
|
|
324
|
+
|
|
325
|
+
## Faz 50
|
|
326
|
+
|
|
327
|
+
Faz 50 adds `run <input.lango> [args...]` to the CLI for programs that export
|
|
328
|
+
`main(args)`.
|
|
329
|
+
|
|
330
|
+
## Faz 51
|
|
331
|
+
|
|
332
|
+
Faz 51 adds validated `break N` and `continue N` for nested loops. See
|
|
333
|
+
`examples/051-loop-levels`.
|
|
334
|
+
|
|
335
|
+
## Faz 52
|
|
336
|
+
|
|
337
|
+
Faz 52 adds discoverable `test` blocks and `assert` statements. Production
|
|
338
|
+
builds omit them; `npm run test:lango -- <input.lango>` runs them synchronously.
|
|
339
|
+
|
|
340
|
+
## Faz 53
|
|
341
|
+
|
|
342
|
+
Faz 53 resets dynamic context, file globals, and class static values before
|
|
343
|
+
each CLI-run Lango test.
|
|
344
|
+
|
|
345
|
+
## Faz 54
|
|
346
|
+
|
|
347
|
+
Faz 54 rejects unknown instance, protected, and static property references in
|
|
348
|
+
class code.
|
|
349
|
+
|
|
350
|
+
## Faz 55
|
|
351
|
+
|
|
352
|
+
Faz 55 validates that declared public instance and static method signatures
|
|
353
|
+
match their implementations.
|
|
354
|
+
|
|
355
|
+
## Faz 56
|
|
356
|
+
|
|
357
|
+
Faz 56 rejects duplicate static member names across `static` values, `enum`
|
|
358
|
+
values, and public static methods.
|
|
359
|
+
|
|
360
|
+
## Faz 57
|
|
361
|
+
|
|
362
|
+
Faz 57 rejects duplicate public instance members and duplicate class-method
|
|
363
|
+
implementations.
|
|
364
|
+
|
|
365
|
+
## Faz 58
|
|
366
|
+
|
|
367
|
+
Faz 58 aligns statically known Lango calls with the default-parameter rule:
|
|
368
|
+
excess arguments are ignored, while every required parameter must receive its
|
|
369
|
+
own positional argument.
|
|
370
|
+
|
|
371
|
+
## Faz 59
|
|
372
|
+
|
|
373
|
+
Faz 59 adds runtime arity checks for dynamically called Lango functions,
|
|
374
|
+
methods, and closures; excess arguments remain ignored.
|
|
375
|
+
|
|
376
|
+
## Faz 60
|
|
377
|
+
|
|
378
|
+
Faz 60 applies compile-time arity validation to direct constructor and
|
|
379
|
+
statically known class-method calls.
|
|
380
|
+
|
|
381
|
+
## Faz 61
|
|
382
|
+
|
|
383
|
+
Faz 61 normalizes JavaScript `undefined` at method boundaries and makes a
|
|
384
|
+
bare Lango `return` produce `null`.
|
|
385
|
+
|
|
386
|
+
## Faz 62
|
|
387
|
+
|
|
388
|
+
Faz 62 normalizes missing JavaScript property and index reads, including known
|
|
389
|
+
but unassigned class properties, to Lango `null`.
|
|
390
|
+
|
|
391
|
+
## Faz 63
|
|
392
|
+
|
|
393
|
+
Faz 63 rejects non-finite native-number arithmetic and JavaScript boundary
|
|
394
|
+
values with `NonFiniteNumber`.
|
|
395
|
+
|
|
396
|
+
## Faz 64
|
|
397
|
+
|
|
398
|
+
Faz 64 rejects a numeric literal that would compile to a non-finite JavaScript
|
|
399
|
+
Number.
|
|
400
|
+
|
|
401
|
+
## Faz 65
|
|
402
|
+
|
|
403
|
+
Faz 65 supports dynamic callback values and reports `NotCallable` for a
|
|
404
|
+
non-callable dynamic value.
|
|
405
|
+
|
|
406
|
+
## Faz 66
|
|
407
|
+
|
|
408
|
+
Faz 66 permits calls through local dynamic bindings and reports `NotCallable`
|
|
409
|
+
when the bound value is not a function.
|
|
410
|
+
|
|
411
|
+
## Faz 67
|
|
412
|
+
|
|
413
|
+
Faz 67 normalizes and validates JavaScript arguments at every Lango function
|
|
414
|
+
and method entry.
|
|
415
|
+
|
|
416
|
+
## Faz 68
|
|
417
|
+
|
|
418
|
+
Faz 68 applies the same JavaScript-boundary normalization and validation to
|
|
419
|
+
Lango closures.
|
|
420
|
+
|
|
421
|
+
## Faz 69
|
|
422
|
+
|
|
423
|
+
Faz 69 gives `to_json` Lango boundary semantics for nested `undefined`,
|
|
424
|
+
non-finite numbers, plain objects, and cycles.
|
|
425
|
+
|
|
426
|
+
## Faz 70
|
|
427
|
+
|
|
428
|
+
Faz 70 adds header-only JavaScript namespace imports such as
|
|
429
|
+
`import js "node:path" as path`; their namespace cannot collide with a Lango
|
|
430
|
+
declaration.
|
|
431
|
+
|
|
432
|
+
## Faz 71
|
|
433
|
+
|
|
434
|
+
Faz 71 lets closures explicitly capture JavaScript namespace imports and
|
|
435
|
+
resolves imported aliases by their local name.
|
|
436
|
+
|
|
437
|
+
## Faz 72
|
|
438
|
+
|
|
439
|
+
Faz 72 adds aliased Lango function imports, for example
|
|
440
|
+
`alias sum = add(left, right)`.
|
|
441
|
+
|
|
442
|
+
## Faz 73
|
|
443
|
+
|
|
444
|
+
Faz 73 verifies during a build that each selected Lango function or class is
|
|
445
|
+
actually exported by its target module.
|
|
446
|
+
|
|
447
|
+
## Faz 74
|
|
448
|
+
|
|
449
|
+
Faz 74 rejects duplicate imported local names and import/declaration name
|
|
450
|
+
collisions.
|
|
451
|
+
|
|
452
|
+
## Faz 75
|
|
453
|
+
|
|
454
|
+
Faz 75 validates direct calls to imported Lango functions against the signature
|
|
455
|
+
declared in the import header.
|
|
456
|
+
|
|
457
|
+
## Faz 76
|
|
458
|
+
|
|
459
|
+
Faz 76 requires an imported Lango function signature to match its target
|
|
460
|
+
export.
|
|
461
|
+
|
|
462
|
+
## Faz 77
|
|
463
|
+
|
|
464
|
+
Faz 77 rejects `@instance` and protected-property access from static class
|
|
465
|
+
methods.
|
|
466
|
+
|
|
467
|
+
## Faz 78
|
|
468
|
+
|
|
469
|
+
Faz 78 allows qualified JavaScript construction such as
|
|
470
|
+
`new events/EventEmitter()` after a namespace import.
|
|
471
|
+
|
|
472
|
+
## Faz 79
|
|
473
|
+
|
|
474
|
+
Faz 79 supports nested JavaScript namespace method calls such as
|
|
475
|
+
`fs/promises/readFile(...)`.
|
|
476
|
+
|
|
477
|
+
## Faz 80
|
|
478
|
+
|
|
479
|
+
Faz 80 reserves slash-separated namespace paths for imported JavaScript
|
|
480
|
+
namespaces; object properties and methods remain dot-separated.
|
|
481
|
+
|
|
482
|
+
## Faz 81
|
|
483
|
+
|
|
484
|
+
Faz 81 treats a JavaScript namespace itself as non-callable and reports
|
|
485
|
+
`NotCallable`.
|
|
486
|
+
|
|
487
|
+
## Faz 105
|
|
488
|
+
|
|
489
|
+
Faz 105 adds the initial synchronous SQLite adapter and core transactions:
|
|
490
|
+
`start_trans()`, `commit_trans()`, `rollback_trans()`, and `trans_state()`.
|
|
491
|
+
Nested transactions join the outer physical transaction; an inner rollback
|
|
492
|
+
makes it rollback-only. See `examples/105-transactions`.
|
|
493
|
+
|
|
494
|
+
## Faz 106
|
|
495
|
+
|
|
496
|
+
Faz 106 adds indented `SQL` query objects with statically declared named
|
|
497
|
+
parameters, `execute()`, `next()`, and current-row field access. See
|
|
498
|
+
`examples/106-sql-query`.
|
|
499
|
+
|
|
500
|
+
## Faz 107
|
|
501
|
+
|
|
502
|
+
Faz 107 adds `affected_rows` and `generated_key` on executed SQL query
|
|
503
|
+
objects. See `examples/107-query-results`.
|
|
504
|
+
|
|
505
|
+
## Faz 108
|
|
506
|
+
|
|
507
|
+
Faz 108 maps adapter failures to parameter-safe `SqlError` values with
|
|
508
|
+
`code`, `query`, and `position`. See `examples/108-sql-errors`.
|
|
509
|
+
|
|
510
|
+
## Faz 109
|
|
511
|
+
|
|
512
|
+
Faz 109 requires the host to configure the one default database adapter;
|
|
513
|
+
unconfigured database work raises `DatabaseNotConfigured`. See
|
|
514
|
+
`examples/109-database-configuration`.
|
|
515
|
+
|
|
516
|
+
## Faz 110
|
|
517
|
+
|
|
518
|
+
Faz 110 exposes an adapter-reported unusable transaction as `DB.Failed`; it
|
|
519
|
+
must be closed with `rollback_trans()`. See `examples/110-failed-transaction`.
|
|
520
|
+
|
|
521
|
+
## Faz 111
|
|
522
|
+
|
|
523
|
+
Faz 111 supports SQL `returning` clauses as normal query rows. See
|
|
524
|
+
`examples/111-returning`.
|
|
525
|
+
|
|
526
|
+
## Faz 112
|
|
527
|
+
|
|
528
|
+
Faz 112 binds Decimal SQL parameters as canonical text without narrowing them
|
|
529
|
+
to JavaScript numbers. See `examples/112-decimal-sql`.
|
|
530
|
+
|
|
531
|
+
## Faz 113
|
|
532
|
+
|
|
533
|
+
Faz 113 keeps arithmetic assigned to a Decimal binding in Decimal precision.
|
|
534
|
+
See `examples/113-decimal-assignment`.
|
|
535
|
+
|
|
536
|
+
## Faz 114
|
|
537
|
+
|
|
538
|
+
Faz 114 recognizes SQL parameters only outside quoted SQL text and comments.
|
|
539
|
+
See `examples/114-sql-parameters`.
|
|
540
|
+
|
|
541
|
+
## Faz 115
|
|
542
|
+
|
|
543
|
+
Faz 115 adds deliberate raw `${expression}` interpolation to SQL literals,
|
|
544
|
+
separate from safe `:name` parameter binding. See `examples/115-sql-interpolation`.
|
|
545
|
+
|
|
546
|
+
## Faz 116
|
|
547
|
+
|
|
548
|
+
Faz 116 recognizes PostgreSQL `::type` casts without treating a type name as a
|
|
549
|
+
SQL parameter. See `examples/116-postgres-casts`.
|
|
550
|
+
|
|
551
|
+
## Faz 117
|
|
552
|
+
|
|
553
|
+
Faz 117 adds explicit Decimal literals such as `$10.50` and `$1e3`. See
|
|
554
|
+
`examples/117-decimal-literals`.
|
|
555
|
+
|
|
556
|
+
## Faz 118
|
|
557
|
+
|
|
558
|
+
Faz 118 recognizes operators only at the current expression level, including
|
|
559
|
+
inside nested function arguments. See `examples/118-nested-expressions`.
|
|
560
|
+
|
|
561
|
+
## Faz 119
|
|
562
|
+
|
|
563
|
+
Faz 119 preserves commas inside quoted and nested function arguments. See
|
|
564
|
+
`examples/119-nested-arguments`.
|
|
565
|
+
|
|
566
|
+
## Faz 120
|
|
567
|
+
|
|
568
|
+
Faz 120 evaluates equal-precedence arithmetic chains from left to right. See
|
|
569
|
+
`examples/120-operator-order`.
|
|
570
|
+
|
|
571
|
+
## Faz 121
|
|
572
|
+
|
|
573
|
+
Faz 121 adds parentheses for explicit expression grouping. See
|
|
574
|
+
`examples/121-parentheses`.
|
|
575
|
+
|
|
576
|
+
## Faz 122
|
|
577
|
+
|
|
578
|
+
Faz 122 adds unary minus for native and Decimal values. See
|
|
579
|
+
`examples/122-negative-numbers`.
|
|
580
|
+
|
|
581
|
+
## Faz 123
|
|
582
|
+
|
|
583
|
+
Faz 123 adds inclusive `<=` and `>=` comparisons. See
|
|
584
|
+
`examples/123-inclusive-comparisons`.
|
|
585
|
+
|
|
586
|
+
## Faz 124
|
|
587
|
+
|
|
588
|
+
Faz 124 compares Decimal values without narrowing them to JavaScript numbers.
|
|
589
|
+
See `examples/124-decimal-comparisons`.
|
|
590
|
+
|
|
591
|
+
## Faz 125
|
|
592
|
+
|
|
593
|
+
Faz 125 compares compound Decimal expressions with Decimal equality. See
|
|
594
|
+
`examples/125-decimal-equality`.
|
|
595
|
+
|
|
596
|
+
## Faz 126
|
|
597
|
+
|
|
598
|
+
Faz 126 adds strict inequality with `!=`, including precision-safe Decimal
|
|
599
|
+
comparisons. See `examples/126-not-equal`.
|
|
600
|
+
|
|
601
|
+
## Faz 127
|
|
602
|
+
|
|
603
|
+
Faz 127 adds the remainder operator `%` for native and Decimal numbers. See
|
|
604
|
+
`examples/127-remainder`.
|
|
605
|
+
|
|
606
|
+
## Faz 128
|
|
607
|
+
|
|
608
|
+
Faz 128 adds right-associative exponentiation with `**` for native and Decimal
|
|
609
|
+
numbers. See `examples/128-exponentiation`.
|
|
610
|
+
|
|
611
|
+
## Faz 129
|
|
612
|
+
|
|
613
|
+
Faz 129 evaluates arithmetic whose two operands are compound Decimal
|
|
614
|
+
expressions through the Decimal backend. See
|
|
615
|
+
`examples/129-compound-decimal-arithmetic`.
|
|
616
|
+
|
|
617
|
+
## Faz 130
|
|
618
|
+
|
|
619
|
+
Faz 130 infers Decimal returns through nested compound arithmetic, while
|
|
620
|
+
keeping Decimal comparisons Boolean. See `examples/130-decimal-return-inference`.
|
|
621
|
+
|
|
622
|
+
## Faz 131
|
|
623
|
+
|
|
624
|
+
Faz 131 adds null coalescing with `??`. See `examples/131-null-coalescing`.
|
|
625
|
+
|
|
626
|
+
## Faz 132
|
|
627
|
+
|
|
628
|
+
Faz 132 adds array and string membership with `in`. See
|
|
629
|
+
`examples/132-membership`.
|
|
630
|
+
|
|
631
|
+
## Faz 133
|
|
632
|
+
|
|
633
|
+
Faz 133 adds negated membership with `not in`. See
|
|
634
|
+
`examples/133-not-membership`.
|
|
635
|
+
|
|
636
|
+
## Faz 134
|
|
637
|
+
|
|
638
|
+
Faz 134 extends membership to own object keys. See
|
|
639
|
+
`examples/134-object-membership`.
|
|
640
|
+
|
|
641
|
+
## Faz 135
|
|
642
|
+
|
|
643
|
+
Faz 135 adds inline object literals. See `examples/135-inline-objects`.
|
|
644
|
+
|
|
645
|
+
## Faz 136
|
|
646
|
+
|
|
647
|
+
Faz 136 adds quoted object keys. See `examples/136-quoted-object-keys`.
|
|
648
|
+
|
|
649
|
+
## Faz 137
|
|
650
|
+
|
|
651
|
+
Faz 137 rejects duplicate object keys at compile time. See
|
|
652
|
+
`examples/137-duplicate-object-keys`.
|
|
653
|
+
|
|
654
|
+
## Faz 138
|
|
655
|
+
|
|
656
|
+
Faz 138 infers Decimal function results through null coalescing. See
|
|
657
|
+
`examples/138-decimal-null-coalescing`.
|
|
658
|
+
|
|
659
|
+
## Faz 140
|
|
660
|
+
|
|
661
|
+
Faz 140 adds membership support for host `Set` values. See
|
|
662
|
+
`examples/140-set-membership`.
|
|
663
|
+
|
|
664
|
+
## Faz 141
|
|
665
|
+
|
|
666
|
+
Faz 141 adds key membership support for host `Map` values. See
|
|
667
|
+
`examples/141-map-membership`.
|
|
668
|
+
|
|
669
|
+
## Faz 142
|
|
670
|
+
|
|
671
|
+
Faz 142 lets key-value loops iterate host `Map` values. See
|
|
672
|
+
`examples/142-map-iteration`.
|
|
673
|
+
|
|
674
|
+
## Faz 143
|
|
675
|
+
|
|
676
|
+
Faz 143 adds null-safe property access with `?.`. See
|
|
677
|
+
`examples/143-optional-properties`.
|
|
678
|
+
|
|
679
|
+
## Faz 144
|
|
680
|
+
|
|
681
|
+
Faz 144 adds null-safe indexed access with `?.[]`. See
|
|
682
|
+
`examples/144-optional-indexing`.
|
|
683
|
+
|
|
684
|
+
## Faz 145
|
|
685
|
+
|
|
686
|
+
Faz 145 adds null-safe method calls with `?.`. See
|
|
687
|
+
`examples/145-optional-methods`.
|
|
688
|
+
|
|
689
|
+
## Faz 146
|
|
690
|
+
|
|
691
|
+
Faz 146 adds computed index expressions. See
|
|
692
|
+
`examples/146-computed-indexing`.
|
|
693
|
+
|
|
694
|
+
## Faz 147
|
|
695
|
+
|
|
696
|
+
Faz 147 adds chained index access. See `examples/147-chained-indexing`.
|
|
697
|
+
|
|
698
|
+
## Faz 148
|
|
699
|
+
|
|
700
|
+
Faz 148 adds chained null-safe index access. See
|
|
701
|
+
`examples/148-optional-chained-indexing`.
|
|
702
|
+
|
|
703
|
+
## Faz 149
|
|
704
|
+
|
|
705
|
+
Faz 149 adds property access and method calls after indexed values. See
|
|
706
|
+
`examples/149-indexed-members`.
|
|
707
|
+
|
|
708
|
+
## Faz 150
|
|
709
|
+
|
|
710
|
+
Faz 150 adds property access and method calls after call results. See
|
|
711
|
+
`examples/150-call-result-members`.
|
|
712
|
+
|
|
713
|
+
## Faz 151
|
|
714
|
+
|
|
715
|
+
Faz 151 adds index access after function and method results. See
|
|
716
|
+
`examples/151-call-result-indexing`.
|
|
717
|
+
|
|
718
|
+
## Faz 152
|
|
719
|
+
|
|
720
|
+
Faz 152 adds chained safe access after call results. See
|
|
721
|
+
`examples/152-chained-call-result-access`.
|
|
722
|
+
|
|
723
|
+
## Faz 153
|
|
724
|
+
|
|
725
|
+
Faz 153 adds compound numeric assignment and decrement. See
|
|
726
|
+
`examples/153-compound-assignment`.
|
|
727
|
+
|
|
728
|
+
## Faz 154
|
|
729
|
+
|
|
730
|
+
Faz 154 adds postfix updates for properties and Decimal bindings. See
|
|
731
|
+
`examples/154-postfix-updates`.
|
|
732
|
+
|
|
733
|
+
## Faz 155
|
|
734
|
+
|
|
735
|
+
Faz 155 adds indexed assignment and updates. See
|
|
736
|
+
`examples/155-indexed-assignment`.
|
|
737
|
+
|
|
738
|
+
## Faz 156
|
|
739
|
+
|
|
740
|
+
Faz 156 adds multidimensional indexed updates. See
|
|
741
|
+
`examples/156-multidimensional-assignment`.
|
|
742
|
+
|
|
743
|
+
## Faz 157
|
|
744
|
+
|
|
745
|
+
Faz 157 adds indexed updates for object-held collections. See
|
|
746
|
+
`examples/157-property-indexed-assignment`.
|
|
747
|
+
|
|
748
|
+
## Faz 158
|
|
749
|
+
|
|
750
|
+
Faz 158 lets `for` loops use iterable expressions. See
|
|
751
|
+
`examples/158-iterable-expressions`.
|
|
752
|
+
|
|
753
|
+
## Faz 159
|
|
754
|
+
|
|
755
|
+
Faz 159 adds numeric indexes for array key-value iteration. See
|
|
756
|
+
`examples/159-array-key-value-iteration`.
|
|
757
|
+
|
|
758
|
+
## Faz 160
|
|
759
|
+
|
|
760
|
+
Faz 160 adds numeric code-point indexes for string key-value iteration. See
|
|
761
|
+
`examples/160-string-key-value-iteration`.
|
|
762
|
+
|
|
763
|
+
## Faz 161
|
|
764
|
+
|
|
765
|
+
Faz 161 adds `key: value` iteration for host `Set` values. See
|
|
766
|
+
`examples/161-set-key-value-iteration`.
|
|
767
|
+
|
|
768
|
+
## Faz 162
|
|
769
|
+
|
|
770
|
+
Faz 162 adds end-exclusive integer `range(start, end)` iteration. See
|
|
771
|
+
`examples/162-range`.
|
|
772
|
+
|
|
773
|
+
## Faz 163
|
|
774
|
+
|
|
775
|
+
Faz 163 adds optional stepped and descending ranges. See
|
|
776
|
+
`examples/163-range-step`.
|
|
777
|
+
|
|
778
|
+
## Faz 164
|
|
779
|
+
|
|
780
|
+
Faz 164 adds the zero-based `range(end)` shorthand. See
|
|
781
|
+
`examples/164-range-end`.
|
|
782
|
+
|
|
783
|
+
## Faz 165
|
|
784
|
+
|
|
785
|
+
Faz 165 adds numeric `key: value` indexes for generic iterables. See
|
|
786
|
+
`examples/165-iterable-key-value-iteration`.
|
|
787
|
+
|
|
788
|
+
## Faz 166
|
|
789
|
+
|
|
790
|
+
Faz 166 lets `Array#add()` work through properties and host-provided arrays. See
|
|
791
|
+
`examples/166-array-add-receivers`.
|
|
792
|
+
|
|
793
|
+
## Faz 167
|
|
794
|
+
|
|
795
|
+
Faz 167 adds statement method calls after indexed and call-result values. See
|
|
796
|
+
`examples/167-chained-method-statements`.
|
|
797
|
+
|
|
798
|
+
## Faz 168
|
|
799
|
+
|
|
800
|
+
Faz 168 lets `Array#add()` append multiple values in one call. See
|
|
801
|
+
`examples/168-array-add-multiple`.
|
|
802
|
+
|
|
803
|
+
## Faz 169
|
|
804
|
+
|
|
805
|
+
Faz 169 adds `Array#remove(value)`, which removes the first matching value and
|
|
806
|
+
returns whether it was found. See `examples/169-array-remove`.
|
|
807
|
+
|
|
808
|
+
## Faz 170
|
|
809
|
+
|
|
810
|
+
Faz 170 permits assigning results from method calls on indexed and call-result
|
|
811
|
+
values. See `examples/170-chained-method-expressions`.
|
|
812
|
+
|
|
813
|
+
## Faz 171
|
|
814
|
+
|
|
815
|
+
Faz 171 adds `Array#clear()` for emptying local and host-provided arrays. See
|
|
816
|
+
`examples/171-array-clear`.
|
|
817
|
+
|
|
818
|
+
## Faz 172
|
|
819
|
+
|
|
820
|
+
Faz 172 adds `Array#remove_at(index)` for removing a value at a zero-based
|
|
821
|
+
position. See `examples/172-array-remove-at`.
|
|
822
|
+
|
|
823
|
+
## Faz 173
|
|
824
|
+
|
|
825
|
+
Faz 173 adds `Array#insert_at(index, value)` for inserting at a zero-based
|
|
826
|
+
position. See `examples/173-array-insert-at`.
|
|
827
|
+
|
|
828
|
+
## Faz 174
|
|
829
|
+
|
|
830
|
+
Faz 174 adds `Array#remove_all(value)` for removing every matching value. See
|
|
831
|
+
`examples/174-array-remove-all`.
|
|
832
|
+
|
|
833
|
+
## Faz 175
|
|
834
|
+
|
|
835
|
+
Faz 175 preserves null-safe optional access for array mutation helpers. See
|
|
836
|
+
`examples/175-optional-array-mutations`.
|
|
837
|
+
|
|
838
|
+
## Faz 176
|
|
839
|
+
|
|
840
|
+
Faz 176 requires `to_js_number()` before a Decimal enters a direct host method
|
|
841
|
+
through `args`. See `examples/176-host-method-decimal`.
|
|
842
|
+
|
|
843
|
+
## Faz 177
|
|
844
|
+
|
|
845
|
+
Faz 177 retains Decimal boundary checks when `fetch` is assigned to a local alias.
|
|
846
|
+
See `examples/177-host-function-alias-decimal`.
|
|
847
|
+
|
|
848
|
+
## Faz 178
|
|
849
|
+
|
|
850
|
+
Faz 178 retains Decimal boundary checks when a host callable is read from `args`.
|
|
851
|
+
See `examples/178-host-property-alias-decimal`.
|
|
852
|
+
|
|
853
|
+
## Faz 179
|
|
854
|
+
|
|
855
|
+
Faz 179 retains Decimal boundary checks through copied host callable aliases.
|
|
856
|
+
See `examples/179-host-alias-copy-decimal`.
|
|
857
|
+
|
|
858
|
+
## Faz 180
|
|
859
|
+
|
|
860
|
+
Faz 180 retains Decimal boundary checks through definitely assigned host aliases.
|
|
861
|
+
|
|
862
|
+
## Faz 181
|
|
863
|
+
|
|
864
|
+
Faz 181 retains Decimal boundary checks through host aliases assigned in `try`
|
|
865
|
+
and `catch` paths.
|
|
866
|
+
|
|
867
|
+
## Faz 182
|
|
868
|
+
|
|
869
|
+
Faz 182 retains Decimal boundary checks through host aliases assigned in `finally`.
|
|
870
|
+
See `examples/182-host-alias-finally-decimal`.
|
|
871
|
+
|
|
872
|
+
## Faz 183
|
|
873
|
+
|
|
874
|
+
Faz 183 clears host-alias tracking after reassignment to a Lango callable.
|
|
875
|
+
See `examples/183-host-alias-reassignment`.
|
|
876
|
+
|
|
877
|
+
## Faz 184
|
|
878
|
+
|
|
879
|
+
Faz 184 avoids treating mixed host and Lango callable branches as definitely host.
|
|
880
|
+
See `examples/184-host-alias-mixed-branches`.
|
|
881
|
+
|
|
882
|
+
## Faz 185–187
|
|
883
|
+
|
|
884
|
+
These phases retain Decimal boundary checks when a Lango function returns a
|
|
885
|
+
host callable, including transitive returns and host callables obtained from
|
|
886
|
+
`args`.
|
|
887
|
+
|
|
888
|
+
## Faz 188–206
|
|
889
|
+
|
|
890
|
+
These phases extend path-sensitive definite-assignment analysis across
|
|
891
|
+
`switch`, loops, `try`/`catch`/`finally`, captures, update targets, callable
|
|
892
|
+
statements, methods, and Lango test bodies.
|
|
893
|
+
|
|
894
|
+
## Faz 208
|
|
895
|
+
|
|
896
|
+
Faz 208 rejects dynamic JavaScript values in unary numeric negation unless they
|
|
897
|
+
are native finite numbers.
|
|
898
|
+
|
|
899
|
+
## Faz 209
|
|
900
|
+
|
|
901
|
+
Faz 209 rejects dynamic non-numeric range bounds.
|