firefly-compiler 0.4.51 → 0.4.52
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/.hintrc +4 -4
- package/.vscode/settings.json +4 -4
- package/bin/Release.ff +153 -153
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +257 -257
- package/compiler/Compiler.ff +227 -227
- package/compiler/Dependencies.ff +186 -186
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/JsEmitter.ff +946 -946
- package/compiler/LspHook.ff +202 -202
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package-lock.json +394 -394
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/include/prepare.sh +1 -1
- package/core/.firefly/package.ff +2 -2
- package/core/Array.ff +265 -265
- package/core/Atomic.ff +64 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/BuildSystem.ff +148 -148
- package/core/Crypto.ff +96 -96
- package/core/Equal.ff +36 -36
- package/core/HttpClient.ff +87 -87
- package/core/JsSystem.ff +69 -69
- package/core/Json.ff +434 -434
- package/core/List.ff +486 -486
- package/core/Lock.ff +144 -144
- package/core/NodeSystem.ff +195 -189
- package/core/Ordering.ff +161 -161
- package/core/Path.ff +401 -401
- package/core/Random.ff +134 -134
- package/core/RbMap.ff +216 -216
- package/core/Show.ff +43 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Task.ff +141 -141
- package/experimental/benchmarks/ListGrab.ff +23 -23
- package/experimental/benchmarks/ListGrab.java +55 -55
- package/experimental/benchmarks/Pyrotek45.ff +30 -30
- package/experimental/benchmarks/Pyrotek45.java +64 -64
- package/experimental/bidirectional/Bidi.ff +88 -88
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/Scrape.ff +51 -51
- package/experimental/random/Symbols.ff +73 -73
- package/experimental/random/Tensor.ff +52 -52
- package/experimental/random/Units.ff +36 -36
- package/experimental/s3/S3TestAuthorizationHeader.ff +38 -38
- package/experimental/s3/S3TestPut.ff +15 -15
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/Main.ff +13 -13
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +808 -808
- package/lsp/Handler.ff +714 -714
- package/lsp/HoverHandler.ff +79 -79
- package/lsp/LanguageServer.ff +272 -272
- package/lsp/SignatureHelpHandler.ff +55 -55
- package/lsp/SymbolHandler.ff +181 -181
- package/lsp/TestReferences.ff +16 -16
- package/lsp/TestReferencesCase.ff +7 -7
- package/lsp/stderr.txt +1 -1
- package/lsp/stdin.txt +10 -10
- package/lsp/stdout.txt +40 -40
- package/lux/.firefly/package.ff +1 -1
- package/lux/Css.ff +648 -648
- package/lux/CssTest.ff +48 -48
- package/lux/Lux.ff +487 -487
- package/lux/LuxEvent.ff +116 -116
- package/lux/Main.ff +128 -128
- package/lux/Main2.ff +144 -144
- package/output/js/ff/compiler/Builder.mjs +43 -43
- package/output/js/ff/compiler/Dependencies.mjs +3 -3
- package/output/js/ff/core/Array.mjs +59 -59
- package/output/js/ff/core/Atomic.mjs +36 -36
- package/output/js/ff/core/BrowserSystem.mjs +11 -11
- package/output/js/ff/core/BuildSystem.mjs +30 -30
- package/output/js/ff/core/Crypto.mjs +40 -40
- package/output/js/ff/core/HttpClient.mjs +24 -24
- package/output/js/ff/core/Json.mjs +147 -147
- package/output/js/ff/core/List.mjs +50 -50
- package/output/js/ff/core/Lock.mjs +97 -97
- package/output/js/ff/core/NodeSystem.mjs +83 -77
- package/output/js/ff/core/Ordering.mjs +8 -8
- package/output/js/ff/core/Path.mjs +231 -231
- package/output/js/ff/core/Random.mjs +56 -56
- package/output/js/ff/core/Task.mjs +31 -31
- package/package.json +1 -1
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +69 -69
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +90 -90
- package/unsafejs/UnsafeJs.ff +19 -19
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package.json +22 -22
- package/vscode/client/src/extension.ts +104 -104
- package/vscode/icons/firefly-icon.svg +10 -10
- package/vscode/language-configuration.json +61 -61
- package/vscode/package-lock.json +3623 -3623
- package/vscode/package.json +1 -1
- package/vscode/snippets.json +241 -241
- package/webserver/.firefly/include/package-lock.json +16 -16
- package/webserver/.firefly/include/package.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +685 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +131 -131
package/core/Lock.ff
CHANGED
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
capability Lock {}
|
|
2
|
-
capability LockCondition {}
|
|
3
|
-
|
|
4
|
-
extend self: Lock {
|
|
5
|
-
|
|
6
|
-
condition(): LockCondition
|
|
7
|
-
target js async """
|
|
8
|
-
return {lock: self_, stack: [], queue: []}
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
acquire(reentrant: Bool): Unit
|
|
12
|
-
target js async """
|
|
13
|
-
if(self_.level === 0) {
|
|
14
|
-
self_.owner = $task
|
|
15
|
-
self_.level += 1
|
|
16
|
-
} else {
|
|
17
|
-
if(self_.owner !== $task || !reentrant_) {
|
|
18
|
-
try {
|
|
19
|
-
await new Promise((resolve, reject) => {
|
|
20
|
-
$task.controller.signal.addEventListener('abort', reject)
|
|
21
|
-
try {
|
|
22
|
-
self_.queue.push({owner: $task, resolve: resolve})
|
|
23
|
-
} finally {
|
|
24
|
-
$task.controller.signal.removeEventListener('abort', reject)
|
|
25
|
-
}
|
|
26
|
-
})
|
|
27
|
-
} finally {
|
|
28
|
-
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
self_.level += 1
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
release(): Unit
|
|
37
|
-
target js async """
|
|
38
|
-
if(self_.owner !== $task) {
|
|
39
|
-
throw new Error("Tried to release a lock without acquiring it first.")
|
|
40
|
-
} else if(self_.level > 1) {
|
|
41
|
-
self_.level -= 1
|
|
42
|
-
} else {
|
|
43
|
-
self_.owner = null
|
|
44
|
-
self_.level = 0
|
|
45
|
-
if(self_.stack.length === 0) {
|
|
46
|
-
const empty = self_.stack
|
|
47
|
-
self_.stack = self_.queue.reverse()
|
|
48
|
-
self_.queue = empty
|
|
49
|
-
}
|
|
50
|
-
if(self_.stack.length !== 0) {
|
|
51
|
-
const pending = self_.stack.pop()
|
|
52
|
-
self_.owner = pending.owner
|
|
53
|
-
self_.level = 1
|
|
54
|
-
pending.resolve()
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
do[T](reentrant: Bool, body: () => T): T {
|
|
60
|
-
self.acquire(reentrant)
|
|
61
|
-
try {
|
|
62
|
-
body()
|
|
63
|
-
} finally {
|
|
64
|
-
self.release()
|
|
65
|
-
} grab()
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
extend self: LockCondition {
|
|
71
|
-
|
|
72
|
-
sleep(): Unit
|
|
73
|
-
target js async """
|
|
74
|
-
if(self_.lock.owner !== $task) {
|
|
75
|
-
throw new Error("Tried to sleep on a condition without acquiring it first.")
|
|
76
|
-
}
|
|
77
|
-
const level = self_.lock.level
|
|
78
|
-
self_.lock.level = 1
|
|
79
|
-
await ff_core_Lock.Lock_release$(self_.lock)
|
|
80
|
-
try {
|
|
81
|
-
await new Promise((resolve, reject) => {
|
|
82
|
-
$task.controller.signal.addEventListener('abort', reject)
|
|
83
|
-
try {
|
|
84
|
-
self_.queue.push(resolve)
|
|
85
|
-
} finally {
|
|
86
|
-
$task.controller.signal.removeEventListener('abort', reject)
|
|
87
|
-
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
} finally {
|
|
91
|
-
let exception = null
|
|
92
|
-
let acquired = false
|
|
93
|
-
while(!acquired) {
|
|
94
|
-
try {
|
|
95
|
-
await ff_core_Lock.Lock_acquire$(self_.lock)
|
|
96
|
-
self_.lock.level = level
|
|
97
|
-
acquired = true
|
|
98
|
-
} catch(e) {
|
|
99
|
-
exception = e
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if(e !== null) throw e;
|
|
103
|
-
}
|
|
104
|
-
"""
|
|
105
|
-
|
|
106
|
-
sleepUntil[T](body: () => Option[T]): T {
|
|
107
|
-
body().{
|
|
108
|
-
| Some(value) =>
|
|
109
|
-
value
|
|
110
|
-
| None =>
|
|
111
|
-
self.sleep()
|
|
112
|
-
tailcall self.sleepUntil(body)
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
wakeOne(): Unit
|
|
117
|
-
target js async """
|
|
118
|
-
if(self_.stack.length === 0) {
|
|
119
|
-
const empty = self_.stack
|
|
120
|
-
self_.stack = self_.queue.reverse()
|
|
121
|
-
self_.queue = empty
|
|
122
|
-
}
|
|
123
|
-
if(self_.stack.length !== 0) {
|
|
124
|
-
const resolve = self_.stack.pop()
|
|
125
|
-
resolve()
|
|
126
|
-
}
|
|
127
|
-
"""
|
|
128
|
-
|
|
129
|
-
wakeAll(): Unit
|
|
130
|
-
target js async """
|
|
131
|
-
while(self_.stack.length !== 0) {
|
|
132
|
-
const resolve = self_.stack.pop()
|
|
133
|
-
resolve()
|
|
134
|
-
}
|
|
135
|
-
const empty = self_.stack
|
|
136
|
-
self_.stack = self_.queue.reverse()
|
|
137
|
-
self_.queue = empty
|
|
138
|
-
while(self_.stack.length !== 0) {
|
|
139
|
-
const resolve = self_.stack.pop()
|
|
140
|
-
resolve()
|
|
141
|
-
}
|
|
142
|
-
"""
|
|
143
|
-
|
|
144
|
-
}
|
|
1
|
+
capability Lock {}
|
|
2
|
+
capability LockCondition {}
|
|
3
|
+
|
|
4
|
+
extend self: Lock {
|
|
5
|
+
|
|
6
|
+
condition(): LockCondition
|
|
7
|
+
target js async """
|
|
8
|
+
return {lock: self_, stack: [], queue: []}
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
acquire(reentrant: Bool): Unit
|
|
12
|
+
target js async """
|
|
13
|
+
if(self_.level === 0) {
|
|
14
|
+
self_.owner = $task
|
|
15
|
+
self_.level += 1
|
|
16
|
+
} else {
|
|
17
|
+
if(self_.owner !== $task || !reentrant_) {
|
|
18
|
+
try {
|
|
19
|
+
await new Promise((resolve, reject) => {
|
|
20
|
+
$task.controller.signal.addEventListener('abort', reject)
|
|
21
|
+
try {
|
|
22
|
+
self_.queue.push({owner: $task, resolve: resolve})
|
|
23
|
+
} finally {
|
|
24
|
+
$task.controller.signal.removeEventListener('abort', reject)
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
} finally {
|
|
28
|
+
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
self_.level += 1
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
release(): Unit
|
|
37
|
+
target js async """
|
|
38
|
+
if(self_.owner !== $task) {
|
|
39
|
+
throw new Error("Tried to release a lock without acquiring it first.")
|
|
40
|
+
} else if(self_.level > 1) {
|
|
41
|
+
self_.level -= 1
|
|
42
|
+
} else {
|
|
43
|
+
self_.owner = null
|
|
44
|
+
self_.level = 0
|
|
45
|
+
if(self_.stack.length === 0) {
|
|
46
|
+
const empty = self_.stack
|
|
47
|
+
self_.stack = self_.queue.reverse()
|
|
48
|
+
self_.queue = empty
|
|
49
|
+
}
|
|
50
|
+
if(self_.stack.length !== 0) {
|
|
51
|
+
const pending = self_.stack.pop()
|
|
52
|
+
self_.owner = pending.owner
|
|
53
|
+
self_.level = 1
|
|
54
|
+
pending.resolve()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
do[T](reentrant: Bool, body: () => T): T {
|
|
60
|
+
self.acquire(reentrant)
|
|
61
|
+
try {
|
|
62
|
+
body()
|
|
63
|
+
} finally {
|
|
64
|
+
self.release()
|
|
65
|
+
} grab()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
extend self: LockCondition {
|
|
71
|
+
|
|
72
|
+
sleep(): Unit
|
|
73
|
+
target js async """
|
|
74
|
+
if(self_.lock.owner !== $task) {
|
|
75
|
+
throw new Error("Tried to sleep on a condition without acquiring it first.")
|
|
76
|
+
}
|
|
77
|
+
const level = self_.lock.level
|
|
78
|
+
self_.lock.level = 1
|
|
79
|
+
await ff_core_Lock.Lock_release$(self_.lock)
|
|
80
|
+
try {
|
|
81
|
+
await new Promise((resolve, reject) => {
|
|
82
|
+
$task.controller.signal.addEventListener('abort', reject)
|
|
83
|
+
try {
|
|
84
|
+
self_.queue.push(resolve)
|
|
85
|
+
} finally {
|
|
86
|
+
$task.controller.signal.removeEventListener('abort', reject)
|
|
87
|
+
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
} finally {
|
|
91
|
+
let exception = null
|
|
92
|
+
let acquired = false
|
|
93
|
+
while(!acquired) {
|
|
94
|
+
try {
|
|
95
|
+
await ff_core_Lock.Lock_acquire$(self_.lock)
|
|
96
|
+
self_.lock.level = level
|
|
97
|
+
acquired = true
|
|
98
|
+
} catch(e) {
|
|
99
|
+
exception = e
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if(e !== null) throw e;
|
|
103
|
+
}
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
sleepUntil[T](body: () => Option[T]): T {
|
|
107
|
+
body().{
|
|
108
|
+
| Some(value) =>
|
|
109
|
+
value
|
|
110
|
+
| None =>
|
|
111
|
+
self.sleep()
|
|
112
|
+
tailcall self.sleepUntil(body)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
wakeOne(): Unit
|
|
117
|
+
target js async """
|
|
118
|
+
if(self_.stack.length === 0) {
|
|
119
|
+
const empty = self_.stack
|
|
120
|
+
self_.stack = self_.queue.reverse()
|
|
121
|
+
self_.queue = empty
|
|
122
|
+
}
|
|
123
|
+
if(self_.stack.length !== 0) {
|
|
124
|
+
const resolve = self_.stack.pop()
|
|
125
|
+
resolve()
|
|
126
|
+
}
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
wakeAll(): Unit
|
|
130
|
+
target js async """
|
|
131
|
+
while(self_.stack.length !== 0) {
|
|
132
|
+
const resolve = self_.stack.pop()
|
|
133
|
+
resolve()
|
|
134
|
+
}
|
|
135
|
+
const empty = self_.stack
|
|
136
|
+
self_.stack = self_.queue.reverse()
|
|
137
|
+
self_.queue = empty
|
|
138
|
+
while(self_.stack.length !== 0) {
|
|
139
|
+
const resolve = self_.stack.pop()
|
|
140
|
+
resolve()
|
|
141
|
+
}
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
}
|