firefly-compiler 0.5.35 → 0.5.37
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 +157 -154
- package/bin/firefly.mjs +1 -1
- package/compiler/Builder.ff +275 -277
- package/compiler/Compiler.ff +234 -233
- package/compiler/Dependencies.ff +186 -187
- package/compiler/DependencyLock.ff +17 -17
- package/compiler/Deriver.ff +23 -31
- package/compiler/Dictionaries.ff +1 -1
- package/compiler/Inference.ff +43 -20
- package/compiler/JsEmitter.ff +1437 -1282
- package/compiler/LspHook.ff +202 -202
- package/compiler/Main.ff +25 -24
- package/compiler/ModuleCache.ff +178 -178
- package/compiler/Parser.ff +36 -109
- package/compiler/Resolver.ff +5 -8
- package/compiler/Substitution.ff +1 -1
- package/compiler/Syntax.ff +1 -16
- package/compiler/Token.ff +9 -0
- package/compiler/Tokenizer.ff +4 -0
- package/compiler/Workspace.ff +88 -88
- package/core/.firefly/include/package.json +5 -5
- package/core/.firefly/package.ff +2 -2
- package/core/Any.ff +26 -30
- package/core/Array.ff +298 -265
- package/core/Atomic.ff +63 -64
- package/core/Box.ff +7 -7
- package/core/BrowserSystem.ff +40 -40
- package/core/Buffer.ff +185 -152
- package/core/BuildSystem.ff +156 -148
- package/core/Channel.ff +95 -92
- package/core/Char.ff +3 -2
- package/core/Core.ff +16 -23
- package/core/Crypto.ff +94 -96
- package/core/Equal.ff +41 -36
- package/core/Error.ff +15 -10
- package/core/FileHandle.ff +45 -37
- package/core/Float.ff +176 -200
- package/core/HttpClient.ff +142 -148
- package/core/Instant.ff +6 -8
- package/core/Int.ff +40 -24
- package/core/IntMap.ff +61 -39
- package/core/Js.ff +305 -0
- package/core/JsSystem.ff +135 -114
- package/core/JsValue.ff +303 -159
- package/core/Json.ff +423 -443
- package/core/List.ff +482 -486
- package/core/Lock.ff +108 -144
- package/core/Log.ff +25 -14
- package/core/NodeSystem.ff +198 -191
- package/core/Ordering.ff +160 -161
- package/core/Path.ff +377 -409
- package/core/Queue.ff +90 -0
- package/core/Random.ff +140 -134
- package/core/RbMap.ff +216 -216
- package/core/Serializable.ff +16 -13
- package/core/Show.ff +44 -43
- package/core/SourceLocation.ff +68 -68
- package/core/Stream.ff +1 -1
- package/core/String.ff +224 -202
- package/core/StringMap.ff +58 -36
- package/core/Task.ff +165 -149
- 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/lines/Main.ff +40 -0
- package/experimental/random/Index.ff +53 -53
- package/experimental/random/Process.ff +120 -120
- package/experimental/random/RunLength.ff +65 -65
- 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 +39 -39
- package/experimental/s3/S3TestPut.ff +16 -16
- package/experimental/tests/TestJson.ff +26 -26
- package/firefly.sh +0 -0
- package/fireflysite/.firefly/package.ff +4 -4
- package/fireflysite/CommunityOverview.ff +20 -20
- package/fireflysite/CountingButtonDemo.ff +58 -58
- package/fireflysite/DocumentParser.ff +325 -331
- package/fireflysite/ExamplesOverview.ff +40 -40
- package/fireflysite/FrontPage.ff +344 -344
- package/fireflysite/GettingStarted.ff +45 -45
- package/fireflysite/Guide.ff +456 -456
- package/fireflysite/Main.ff +163 -152
- package/fireflysite/MatchingPasswordsDemo.ff +82 -82
- package/fireflysite/PackagesOverview.ff +49 -49
- package/fireflysite/PostgresqlDemo.ff +34 -34
- package/fireflysite/ReferenceAll.ff +18 -18
- package/fireflysite/ReferenceIntroduction.ff +11 -11
- package/fireflysite/Styles.ff +567 -567
- package/fireflysite/Test.ff +121 -62
- package/fireflysite/assets/markdown/reference/BaseTypes.md +209 -209
- package/fireflysite/assets/markdown/reference/EmittedJavascript.md +65 -65
- package/fireflysite/assets/markdown/reference/Exceptions.md +101 -101
- package/fireflysite/assets/markdown/reference/FunctionsAndMethods.md +364 -364
- package/fireflysite/assets/markdown/reference/JavascriptInterop.md +235 -172
- package/fireflysite/assets/markdown/reference/ModulesAndPackages.md +162 -162
- package/fireflysite/assets/markdown/reference/OldStructuredConcurrency.md +48 -48
- package/fireflysite/assets/markdown/reference/PatternMatching.md +224 -224
- package/fireflysite/assets/markdown/reference/StatementsAndExpressions.md +86 -86
- package/fireflysite/assets/markdown/reference/StructuredConcurrency.md +99 -99
- package/fireflysite/assets/markdown/reference/TraitsAndInstances.md +100 -100
- package/fireflysite/assets/markdown/reference/UserDefinedTypes.md +184 -184
- package/fireflysite/assets/markdown/scratch/ControlFlow.md +136 -136
- package/fireflysite/assets/markdown/scratch/Toc.md +40 -40
- package/lsp/.firefly/package.ff +1 -1
- package/lsp/CompletionHandler.ff +827 -827
- 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 +17 -17
- package/lsp/TestReferencesCase.ff +7 -7
- package/lsp/stderr.txt +1 -1
- package/lsp/stdout.txt +34 -34
- package/lux/.firefly/package.ff +1 -1
- package/lux/Css.ff +648 -648
- package/lux/CssTest.ff +48 -48
- package/lux/Lux.ff +608 -617
- package/lux/LuxEvent.ff +79 -116
- package/lux/Main.ff +123 -123
- package/lux/Main2.ff +143 -143
- package/lux/TestDry.ff +28 -28
- package/output/js/ff/compiler/Builder.mjs +72 -71
- package/output/js/ff/compiler/Compiler.mjs +19 -13
- package/output/js/ff/compiler/Dependencies.mjs +8 -7
- package/output/js/ff/compiler/DependencyLock.mjs +6 -4
- package/output/js/ff/compiler/Deriver.mjs +26 -24
- package/output/js/ff/compiler/Dictionaries.mjs +14 -18
- package/output/js/ff/compiler/Environment.mjs +6 -4
- package/output/js/ff/compiler/Inference.mjs +238 -164
- package/output/js/ff/compiler/JsEmitter.mjs +1160 -350
- package/output/js/ff/compiler/JsImporter.mjs +20 -18
- package/output/js/ff/compiler/LspHook.mjs +12 -10
- package/output/js/ff/compiler/Main.mjs +61 -41
- package/output/js/ff/compiler/ModuleCache.mjs +10 -8
- package/output/js/ff/compiler/Parser.mjs +153 -669
- package/output/js/ff/compiler/Patterns.mjs +12 -10
- package/output/js/ff/compiler/Resolver.mjs +52 -78
- package/output/js/ff/compiler/Substitution.mjs +12 -16
- package/output/js/ff/compiler/Syntax.mjs +50 -341
- package/output/js/ff/compiler/Token.mjs +126 -4
- package/output/js/ff/compiler/Tokenizer.mjs +62 -52
- package/output/js/ff/compiler/Unification.mjs +74 -90
- package/output/js/ff/compiler/Wildcards.mjs +4 -2
- package/output/js/ff/compiler/Workspace.mjs +26 -20
- package/output/js/ff/core/Any.mjs +20 -20
- package/output/js/ff/core/Array.mjs +268 -175
- package/output/js/ff/core/AssetSystem.mjs +8 -6
- package/output/js/ff/core/Atomic.mjs +84 -52
- package/output/js/ff/core/Bool.mjs +6 -4
- package/output/js/ff/core/BrowserSystem.mjs +38 -29
- package/output/js/ff/core/Buffer.mjs +285 -133
- package/output/js/ff/core/BuildSystem.mjs +36 -56
- package/output/js/ff/core/Channel.mjs +250 -97
- package/output/js/ff/core/Char.mjs +5 -3
- package/output/js/ff/core/Core.mjs +28 -34
- package/output/js/ff/core/Crypto.mjs +30 -52
- package/output/js/ff/core/Duration.mjs +4 -2
- package/output/js/ff/core/Equal.mjs +14 -12
- package/output/js/ff/core/Error.mjs +17 -11
- package/output/js/ff/core/FileHandle.mjs +76 -38
- package/output/js/ff/core/Float.mjs +92 -160
- package/output/js/ff/core/HttpClient.mjs +208 -76
- package/output/js/ff/core/Instant.mjs +8 -10
- package/output/js/ff/core/Int.mjs +36 -26
- package/output/js/ff/core/IntMap.mjs +79 -33
- package/output/js/ff/core/Js.mjs +751 -0
- package/output/js/ff/core/JsSystem.mjs +54 -60
- package/output/js/ff/core/JsValue.mjs +294 -143
- package/output/js/ff/core/Json.mjs +443 -253
- package/output/js/ff/core/List.mjs +262 -214
- package/output/js/ff/core/Lock.mjs +156 -125
- package/output/js/ff/core/Log.mjs +20 -10
- package/output/js/ff/core/Map.mjs +10 -8
- package/output/js/ff/core/NodeSystem.mjs +189 -123
- package/output/js/ff/core/Nothing.mjs +4 -2
- package/output/js/ff/core/Option.mjs +40 -38
- package/output/js/ff/core/Ordering.mjs +26 -20
- package/output/js/ff/core/Pair.mjs +4 -2
- package/output/js/ff/core/Path.mjs +517 -315
- package/output/js/ff/core/Queue.mjs +306 -0
- package/output/js/ff/core/Random.mjs +141 -77
- package/output/js/ff/core/RbMap.mjs +36 -34
- package/output/js/ff/core/Serializable.mjs +44 -28
- package/output/js/ff/core/Set.mjs +6 -4
- package/output/js/ff/core/Show.mjs +8 -6
- package/output/js/ff/core/SourceLocation.mjs +4 -2
- package/output/js/ff/core/Stream.mjs +30 -50
- package/output/js/ff/core/String.mjs +263 -172
- package/output/js/ff/core/StringMap.mjs +77 -31
- package/output/js/ff/core/Task.mjs +91 -76
- package/output/js/ff/core/Try.mjs +20 -18
- package/output/js/ff/core/Unit.mjs +4 -2
- package/package.json +1 -1
- package/postgresql/Pg.ff +53 -59
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +70 -70
- package/s3/.firefly/package.ff +1 -1
- package/s3/S3.ff +92 -94
- package/vscode/LICENSE.txt +21 -21
- package/vscode/Prepublish.ff +15 -15
- package/vscode/README.md +16 -16
- package/vscode/client/package-lock.json +544 -544
- 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/vscode/syntaxes/firefly-markdown-injection.json +45 -45
- package/webserver/.firefly/include/package.json +5 -5
- package/webserver/.firefly/package.ff +2 -2
- package/webserver/WebServer.ff +647 -685
- package/websocket/.firefly/package.ff +1 -1
- package/websocket/WebSocket.ff +100 -131
- package/core/UnsafeJs.ff +0 -42
- package/output/js/ff/core/UnsafeJs.mjs +0 -191
|
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
|
|
|
42
42
|
|
|
43
43
|
import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
|
|
44
44
|
|
|
45
|
+
import * as ff_core_Js from "../../ff/core/Js.mjs"
|
|
46
|
+
|
|
45
47
|
import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
|
|
46
48
|
|
|
47
49
|
import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
|
|
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
|
|
|
68
70
|
|
|
69
71
|
import * as ff_core_Path from "../../ff/core/Path.mjs"
|
|
70
72
|
|
|
73
|
+
import * as ff_core_Queue from "../../ff/core/Queue.mjs"
|
|
74
|
+
|
|
71
75
|
import * as ff_core_Random from "../../ff/core/Random.mjs"
|
|
72
76
|
|
|
73
77
|
import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
|
|
@@ -90,13 +94,15 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
|
|
|
90
94
|
|
|
91
95
|
import * as ff_core_Unit from "../../ff/core/Unit.mjs"
|
|
92
96
|
|
|
93
|
-
import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
|
|
94
|
-
|
|
95
97
|
// type Lock
|
|
96
|
-
|
|
98
|
+
export function Lock(owner_, level_, queue_) {
|
|
99
|
+
return {owner_, level_, queue_};
|
|
100
|
+
}
|
|
97
101
|
|
|
98
102
|
// type LockCondition
|
|
99
|
-
|
|
103
|
+
export function LockCondition(lock_, queue_) {
|
|
104
|
+
return {lock_, queue_};
|
|
105
|
+
}
|
|
100
106
|
|
|
101
107
|
|
|
102
108
|
|
|
@@ -105,19 +111,42 @@ import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
|
|
|
105
111
|
|
|
106
112
|
|
|
107
113
|
export function Lock_condition(self_) {
|
|
108
|
-
|
|
114
|
+
return ff_core_Lock.LockCondition(self_, ff_core_Queue.new_())
|
|
109
115
|
}
|
|
110
116
|
|
|
111
|
-
export function Lock_acquire(self_
|
|
112
|
-
|
|
117
|
+
export function Lock_acquire(self_) {
|
|
118
|
+
if(((self_.level_ === 0) || (self_.owner_ === $task))) {
|
|
119
|
+
self_.owner_ = $task;
|
|
120
|
+
self_.level_ += 1
|
|
121
|
+
} else {
|
|
122
|
+
ff_core_Js.awaitCancellablePromise_(((resolve_, reject_, onSettle_) => {
|
|
123
|
+
const key_ = ff_core_Queue.Queue_push(self_.queue_, ff_core_Pair.Pair($task, resolve_));
|
|
124
|
+
onSettle_(((_) => {
|
|
125
|
+
ff_core_Queue.Queue_remove(self_.queue_, key_)
|
|
126
|
+
}))
|
|
127
|
+
}))
|
|
128
|
+
}
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
export function Lock_release(self_) {
|
|
116
|
-
|
|
132
|
+
if((self_.owner_ !== $task)) {
|
|
133
|
+
throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
|
|
134
|
+
} else if((self_.level_ > 1)) {
|
|
135
|
+
self_.level_ -= 1
|
|
136
|
+
} else {
|
|
137
|
+
self_.owner_ = (void 0);
|
|
138
|
+
self_.level_ = 0;
|
|
139
|
+
if((!ff_core_Queue.Queue_isEmpty(self_.queue_))) {
|
|
140
|
+
const pending_ = ff_core_Option.Option_grab(ff_core_Queue.Queue_pop(self_.queue_));
|
|
141
|
+
self_.owner_ = pending_.first_;
|
|
142
|
+
self_.level_ = 1;
|
|
143
|
+
pending_.second_((void 0))
|
|
144
|
+
}
|
|
145
|
+
}
|
|
117
146
|
}
|
|
118
147
|
|
|
119
|
-
export function Lock_do(self_,
|
|
120
|
-
ff_core_Lock.Lock_acquire(self_
|
|
148
|
+
export function Lock_do(self_, body_) {
|
|
149
|
+
ff_core_Lock.Lock_acquire(self_);
|
|
121
150
|
try {
|
|
122
151
|
return body_()
|
|
123
152
|
} finally {
|
|
@@ -126,63 +155,42 @@ ff_core_Lock.Lock_release(self_)
|
|
|
126
155
|
}
|
|
127
156
|
|
|
128
157
|
export async function Lock_condition$(self_, $task) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
try {
|
|
145
|
-
self_.queue.push({owner: $task, resolve: resolve})
|
|
146
|
-
} finally {
|
|
147
|
-
$task.controller.signal.removeEventListener('abort', reject)
|
|
148
|
-
}
|
|
149
|
-
})
|
|
150
|
-
} finally {
|
|
151
|
-
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
152
|
-
}
|
|
153
|
-
} else {
|
|
154
|
-
self_.level += 1
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
+
return ff_core_Lock.LockCondition(self_, ff_core_Queue.new_())
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export async function Lock_acquire$(self_, $task) {
|
|
162
|
+
if(((self_.level_ === 0) || (self_.owner_ === $task))) {
|
|
163
|
+
self_.owner_ = $task;
|
|
164
|
+
self_.level_ += 1
|
|
165
|
+
} else {
|
|
166
|
+
(await ff_core_Js.awaitCancellablePromise_$((async (resolve_, reject_, onSettle_, $task) => {
|
|
167
|
+
const key_ = ff_core_Queue.Queue_push(self_.queue_, ff_core_Pair.Pair($task, resolve_));
|
|
168
|
+
(await onSettle_((async (_, $task) => {
|
|
169
|
+
ff_core_Queue.Queue_remove(self_.queue_, key_)
|
|
170
|
+
}), $task))
|
|
171
|
+
}), $task))
|
|
172
|
+
}
|
|
158
173
|
}
|
|
159
174
|
|
|
160
175
|
export async function Lock_release$(self_, $task) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
export async function Lock_do$(self_, reentrant_, body_, $task) {
|
|
185
|
-
(await ff_core_Lock.Lock_acquire$(self_, reentrant_, $task));
|
|
176
|
+
if((self_.owner_ !== $task)) {
|
|
177
|
+
throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
|
|
178
|
+
} else if((self_.level_ > 1)) {
|
|
179
|
+
self_.level_ -= 1
|
|
180
|
+
} else {
|
|
181
|
+
self_.owner_ = (void 0);
|
|
182
|
+
self_.level_ = 0;
|
|
183
|
+
if((!ff_core_Queue.Queue_isEmpty(self_.queue_))) {
|
|
184
|
+
const pending_ = ff_core_Option.Option_grab(ff_core_Queue.Queue_pop(self_.queue_));
|
|
185
|
+
self_.owner_ = pending_.first_;
|
|
186
|
+
self_.level_ = 1;
|
|
187
|
+
(await pending_.second_((void 0), $task))
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export async function Lock_do$(self_, body_, $task) {
|
|
193
|
+
(await ff_core_Lock.Lock_acquire$(self_, $task));
|
|
186
194
|
try {
|
|
187
195
|
return (await body_($task))
|
|
188
196
|
} finally {
|
|
@@ -191,7 +199,36 @@ return (await body_($task))
|
|
|
191
199
|
}
|
|
192
200
|
|
|
193
201
|
export function LockCondition_sleep(self_) {
|
|
194
|
-
|
|
202
|
+
if((self_.lock_.owner_ !== $task)) {
|
|
203
|
+
throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
|
|
204
|
+
};
|
|
205
|
+
;
|
|
206
|
+
const level_ = self_.lock_.level_;
|
|
207
|
+
self_.lock_.level_ = 1;
|
|
208
|
+
ff_core_Lock.Lock_release(self_.lock_);
|
|
209
|
+
try {
|
|
210
|
+
ff_core_Js.awaitCancellablePromise_(((resolve_, reject_, onSettle_) => {
|
|
211
|
+
const key_ = ff_core_Queue.Queue_push(self_.queue_, resolve_);
|
|
212
|
+
onSettle_(((_) => {
|
|
213
|
+
ff_core_Queue.Queue_remove(self_.queue_, key_)
|
|
214
|
+
}))
|
|
215
|
+
}))
|
|
216
|
+
} finally {
|
|
217
|
+
let error_;
|
|
218
|
+
let acquired_ = false;
|
|
219
|
+
while((!acquired_)) {
|
|
220
|
+
try {
|
|
221
|
+
ff_core_Lock.Lock_acquire(self_.lock_);
|
|
222
|
+
self_.lock_.level_ = level_;
|
|
223
|
+
acquired_ = true
|
|
224
|
+
} catch(e_) {
|
|
225
|
+
error_ = e_
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
if(ff_core_JsValue.JsValue_isUndefined(error_)) {
|
|
229
|
+
throw error_
|
|
230
|
+
}
|
|
231
|
+
}
|
|
195
232
|
}
|
|
196
233
|
|
|
197
234
|
export function LockCondition_sleepUntil(self_, body_) {
|
|
@@ -202,7 +239,7 @@ if(_1.Some) {
|
|
|
202
239
|
const value_ = _1.value_;
|
|
203
240
|
return value_
|
|
204
241
|
}
|
|
205
|
-
|
|
242
|
+
{
|
|
206
243
|
ff_core_Lock.LockCondition_sleep(self_);
|
|
207
244
|
{
|
|
208
245
|
const self_r_ = self_;
|
|
@@ -219,46 +256,53 @@ return
|
|
|
219
256
|
}
|
|
220
257
|
|
|
221
258
|
export function LockCondition_wakeOne(self_) {
|
|
222
|
-
|
|
259
|
+
{
|
|
260
|
+
const if_o = ff_core_Queue.Queue_pop(self_.queue_)
|
|
261
|
+
if(if_o.Some) {
|
|
262
|
+
const resolve_ = if_o.value_;
|
|
263
|
+
resolve_((void 0))
|
|
264
|
+
}
|
|
265
|
+
}
|
|
223
266
|
}
|
|
224
267
|
|
|
225
268
|
export function LockCondition_wakeAll(self_) {
|
|
226
|
-
|
|
269
|
+
ff_core_Queue.Queue_each(self_.queue_, ((_, resolve_) => {
|
|
270
|
+
resolve_((void 0))
|
|
271
|
+
}));
|
|
272
|
+
ff_core_Queue.Queue_clear(self_.queue_)
|
|
227
273
|
}
|
|
228
274
|
|
|
229
275
|
export async function LockCondition_sleep$(self_, $task) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
|
|
276
|
+
if((self_.lock_.owner_ !== $task)) {
|
|
277
|
+
throw Object.assign(new Error(), {ffException: ff_core_Any.toAny_(ff_core_Core.GrabException(), ff_core_Core.ff_core_Any_HasAnyTag$ff_core_Core_GrabException)})
|
|
278
|
+
};
|
|
279
|
+
ff_core_Task.Task_throwIfAborted($task);
|
|
280
|
+
const level_ = self_.lock_.level_;
|
|
281
|
+
self_.lock_.level_ = 1;
|
|
282
|
+
(await ff_core_Lock.Lock_release$(self_.lock_, $task));
|
|
283
|
+
try {
|
|
284
|
+
(await ff_core_Js.awaitCancellablePromise_$((async (resolve_, reject_, onSettle_, $task) => {
|
|
285
|
+
const key_ = ff_core_Queue.Queue_push(self_.queue_, resolve_);
|
|
286
|
+
(await onSettle_((async (_, $task) => {
|
|
287
|
+
ff_core_Queue.Queue_remove(self_.queue_, key_)
|
|
288
|
+
}), $task))
|
|
289
|
+
}), $task))
|
|
290
|
+
} finally {
|
|
291
|
+
let error_;
|
|
292
|
+
let acquired_ = false;
|
|
293
|
+
while((!acquired_)) {
|
|
294
|
+
try {
|
|
295
|
+
(await ff_core_Lock.Lock_acquire$(self_.lock_, $task));
|
|
296
|
+
self_.lock_.level_ = level_;
|
|
297
|
+
acquired_ = true
|
|
298
|
+
} catch(e_) {
|
|
299
|
+
error_ = e_
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
if(ff_core_JsValue.JsValue_isUndefined(error_)) {
|
|
303
|
+
throw error_
|
|
304
|
+
}
|
|
305
|
+
}
|
|
262
306
|
}
|
|
263
307
|
|
|
264
308
|
export async function LockCondition_sleepUntil$(self_, body_, $task) {
|
|
@@ -269,7 +313,7 @@ if(_1.Some) {
|
|
|
269
313
|
const value_ = _1.value_;
|
|
270
314
|
return value_
|
|
271
315
|
}
|
|
272
|
-
|
|
316
|
+
{
|
|
273
317
|
(await ff_core_Lock.LockCondition_sleep$(self_, $task));
|
|
274
318
|
{
|
|
275
319
|
const self_r_ = self_;
|
|
@@ -286,33 +330,20 @@ return
|
|
|
286
330
|
}
|
|
287
331
|
|
|
288
332
|
export async function LockCondition_wakeOne$(self_, $task) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
const resolve = self_.stack.pop()
|
|
297
|
-
resolve()
|
|
298
|
-
}
|
|
299
|
-
|
|
333
|
+
{
|
|
334
|
+
const if_o = ff_core_Queue.Queue_pop(self_.queue_)
|
|
335
|
+
if(if_o.Some) {
|
|
336
|
+
const resolve_ = if_o.value_;
|
|
337
|
+
(await resolve_((void 0), $task))
|
|
338
|
+
}
|
|
339
|
+
}
|
|
300
340
|
}
|
|
301
341
|
|
|
302
342
|
export async function LockCondition_wakeAll$(self_, $task) {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
const empty = self_.stack
|
|
309
|
-
self_.stack = self_.queue.reverse()
|
|
310
|
-
self_.queue = empty
|
|
311
|
-
while(self_.stack.length !== 0) {
|
|
312
|
-
const resolve = self_.stack.pop()
|
|
313
|
-
resolve()
|
|
314
|
-
}
|
|
315
|
-
|
|
343
|
+
(await ff_core_Queue.Queue_each$(self_.queue_, (async (_, resolve_, $task) => {
|
|
344
|
+
(await resolve_((void 0), $task))
|
|
345
|
+
}), $task));
|
|
346
|
+
ff_core_Queue.Queue_clear(self_.queue_)
|
|
316
347
|
}
|
|
317
348
|
|
|
318
349
|
|
|
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
|
|
|
42
42
|
|
|
43
43
|
import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
|
|
44
44
|
|
|
45
|
+
import * as ff_core_Js from "../../ff/core/Js.mjs"
|
|
46
|
+
|
|
45
47
|
import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
|
|
46
48
|
|
|
47
49
|
import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
|
|
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
|
|
|
68
70
|
|
|
69
71
|
import * as ff_core_Path from "../../ff/core/Path.mjs"
|
|
70
72
|
|
|
73
|
+
import * as ff_core_Queue from "../../ff/core/Queue.mjs"
|
|
74
|
+
|
|
71
75
|
import * as ff_core_Random from "../../ff/core/Random.mjs"
|
|
72
76
|
|
|
73
77
|
import * as ff_core_Serializable from "../../ff/core/Serializable.mjs"
|
|
@@ -90,8 +94,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
|
|
|
90
94
|
|
|
91
95
|
import * as ff_core_Unit from "../../ff/core/Unit.mjs"
|
|
92
96
|
|
|
93
|
-
import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
|
|
94
|
-
|
|
95
97
|
|
|
96
98
|
|
|
97
99
|
|
|
@@ -125,7 +127,11 @@ console.error(value_)
|
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
export function trace_(value_) {
|
|
128
|
-
|
|
130
|
+
if(false) {
|
|
131
|
+
console.debug(value_)
|
|
132
|
+
} else {
|
|
133
|
+
process.stderr.write((value_ + "\n"))
|
|
134
|
+
}
|
|
129
135
|
}
|
|
130
136
|
|
|
131
137
|
export async function show_$(value_, ff_core_Show_Show$T, $task) {
|
|
@@ -133,31 +139,35 @@ ff_core_Log.trace_(ff_core_Show_Show$T.show_(value_))
|
|
|
133
139
|
}
|
|
134
140
|
|
|
135
141
|
export async function debugDynamic_$(value_, $task) {
|
|
136
|
-
|
|
142
|
+
console.debug(value_)
|
|
137
143
|
}
|
|
138
144
|
|
|
139
145
|
export async function debug_$(value_, $task) {
|
|
140
|
-
|
|
146
|
+
console.debug(value_)
|
|
141
147
|
}
|
|
142
148
|
|
|
143
149
|
export async function verbose_$(value_, $task) {
|
|
144
|
-
|
|
150
|
+
console.log(value_)
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
export async function info_$(value_, $task) {
|
|
148
|
-
|
|
154
|
+
console.info(value_)
|
|
149
155
|
}
|
|
150
156
|
|
|
151
157
|
export async function warn_$(value_, $task) {
|
|
152
|
-
|
|
158
|
+
console.warn(value_)
|
|
153
159
|
}
|
|
154
160
|
|
|
155
161
|
export async function error_$(value_, $task) {
|
|
156
|
-
|
|
162
|
+
console.error(value_)
|
|
157
163
|
}
|
|
158
164
|
|
|
159
165
|
export async function trace_$(value_, $task) {
|
|
160
|
-
|
|
166
|
+
if(false) {
|
|
167
|
+
console.debug(value_)
|
|
168
|
+
} else {
|
|
169
|
+
process.stderr.write((value_ + "\n"))
|
|
170
|
+
}
|
|
161
171
|
}
|
|
162
172
|
|
|
163
173
|
|
|
@@ -42,6 +42,8 @@ import * as ff_core_Int from "../../ff/core/Int.mjs"
|
|
|
42
42
|
|
|
43
43
|
import * as ff_core_IntMap from "../../ff/core/IntMap.mjs"
|
|
44
44
|
|
|
45
|
+
import * as ff_core_Js from "../../ff/core/Js.mjs"
|
|
46
|
+
|
|
45
47
|
import * as ff_core_JsSystem from "../../ff/core/JsSystem.mjs"
|
|
46
48
|
|
|
47
49
|
import * as ff_core_JsValue from "../../ff/core/JsValue.mjs"
|
|
@@ -68,6 +70,8 @@ import * as ff_core_Pair from "../../ff/core/Pair.mjs"
|
|
|
68
70
|
|
|
69
71
|
import * as ff_core_Path from "../../ff/core/Path.mjs"
|
|
70
72
|
|
|
73
|
+
import * as ff_core_Queue from "../../ff/core/Queue.mjs"
|
|
74
|
+
|
|
71
75
|
import * as ff_core_Random from "../../ff/core/Random.mjs"
|
|
72
76
|
|
|
73
77
|
import * as ff_core_RbMap from "../../ff/core/RbMap.mjs"
|
|
@@ -92,8 +96,6 @@ import * as ff_core_Try from "../../ff/core/Try.mjs"
|
|
|
92
96
|
|
|
93
97
|
import * as ff_core_Unit from "../../ff/core/Unit.mjs"
|
|
94
98
|
|
|
95
|
-
import * as ff_core_UnsafeJs from "../../ff/core/UnsafeJs.mjs"
|
|
96
|
-
|
|
97
99
|
// newtype Map
|
|
98
100
|
|
|
99
101
|
|
|
@@ -149,7 +151,7 @@ return result_
|
|
|
149
151
|
|
|
150
152
|
export function Map_removeList(self_, keys_, ff_core_Ordering_Order$K) {
|
|
151
153
|
let result_ = self_;
|
|
152
|
-
for(let
|
|
154
|
+
for(let for_a = keys_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
|
|
153
155
|
const k_ = for_a[for_i];
|
|
154
156
|
result_ = ff_core_RbMap.delete_(k_, result_, ff_core_Ordering_Order$K)
|
|
155
157
|
};
|
|
@@ -206,7 +208,7 @@ const _1 = ff_core_Map.Map_get(self_, key_, ff_core_Ordering_Order$K);
|
|
|
206
208
|
if(_1.None) {
|
|
207
209
|
return ff_core_Map.Map_add(self_, key_, default_(), ff_core_Ordering_Order$K)
|
|
208
210
|
}
|
|
209
|
-
|
|
211
|
+
{
|
|
210
212
|
const v_ = _1.value_;
|
|
211
213
|
return ff_core_Map.Map_add(self_, key_, update_(v_), ff_core_Ordering_Order$K)
|
|
212
214
|
}
|
|
@@ -268,7 +270,7 @@ return result_
|
|
|
268
270
|
|
|
269
271
|
export async function Map_removeList$(self_, keys_, ff_core_Ordering_Order$K, $task) {
|
|
270
272
|
let result_ = self_;
|
|
271
|
-
for(let
|
|
273
|
+
for(let for_a = keys_, for_i = 0, for_l = for_a.length; for_i < for_l; for_i++) {
|
|
272
274
|
const k_ = for_a[for_i];
|
|
273
275
|
result_ = ff_core_RbMap.delete_(k_, result_, ff_core_Ordering_Order$K)
|
|
274
276
|
};
|
|
@@ -325,7 +327,7 @@ const _1 = ff_core_Map.Map_get(self_, key_, ff_core_Ordering_Order$K);
|
|
|
325
327
|
if(_1.None) {
|
|
326
328
|
return ff_core_Map.Map_add(self_, key_, (await default_($task)), ff_core_Ordering_Order$K)
|
|
327
329
|
}
|
|
328
|
-
|
|
330
|
+
{
|
|
329
331
|
const v_ = _1.value_;
|
|
330
332
|
return ff_core_Map.Map_add(self_, key_, (await update_(v_, $task)), ff_core_Ordering_Order$K)
|
|
331
333
|
}
|
|
@@ -366,7 +368,7 @@ const _1 = ff_core_Map.Map_get(self_, key_, ff_core_Ordering_Order$K);
|
|
|
366
368
|
if(_1.None) {
|
|
367
369
|
return ff_core_Map.Map_add(self_, key_, ff_core_List.List_toArray([value_]), ff_core_Ordering_Order$K)
|
|
368
370
|
}
|
|
369
|
-
|
|
371
|
+
{
|
|
370
372
|
const array_ = _1.value_;
|
|
371
373
|
array_.array.push(value_);
|
|
372
374
|
return self_
|
|
@@ -380,7 +382,7 @@ const _1 = ff_core_Map.Map_get(self_, key_, ff_core_Ordering_Order$K);
|
|
|
380
382
|
if(_1.None) {
|
|
381
383
|
return ff_core_Map.Map_add(self_, key_, ff_core_List.List_toArray([value_]), ff_core_Ordering_Order$K)
|
|
382
384
|
}
|
|
383
|
-
|
|
385
|
+
{
|
|
384
386
|
const array_ = _1.value_;
|
|
385
387
|
array_.array.push(value_);
|
|
386
388
|
return self_
|