firefly-compiler 0.4.36 → 0.4.46
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 +99 -49
- 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 -37
- package/core/Buffer.ff +3 -3
- package/core/BuildSystem.ff +148 -145
- package/core/Crypto.ff +96 -95
- package/core/Equal.ff +36 -36
- package/core/HttpClient.ff +87 -87
- package/core/Instant.ff +17 -0
- package/core/JsSystem.ff +69 -69
- package/core/Json.ff +434 -434
- package/core/List.ff +415 -415
- package/core/Lock.ff +144 -144
- package/core/NodeSystem.ff +189 -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/Stream.ff +1 -1
- 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/RunLength.ff +3 -3
- 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 +811 -811
- 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/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 +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 +19 -11
- package/output/js/ff/core/Buffer.mjs +7 -7
- package/output/js/ff/core/BuildSystem.mjs +38 -30
- package/output/js/ff/core/Crypto.mjs +67 -68
- package/output/js/ff/core/HttpClient.mjs +24 -24
- package/output/js/ff/core/Instant.mjs +38 -0
- 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 +77 -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/Stream.mjs +2 -2
- package/output/js/ff/core/Task.mjs +31 -31
- package/package.json +29 -29
- package/rpc/.firefly/package.ff +1 -1
- package/rpc/Rpc.ff +69 -69
- package/s3/.firefly/package.ff +1 -0
- package/{experimental/s3 → s3}/S3.ff +92 -92
- 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 +160 -160
- 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/crypto/SubtleCrypto.ff +0 -149
|
@@ -124,58 +124,58 @@ ff_core_Lock.Lock_release(self_)
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
export async function Lock_condition$(self_, $task) {
|
|
127
|
-
|
|
128
|
-
return {lock: self_, stack: [], queue: []}
|
|
127
|
+
|
|
128
|
+
return {lock: self_, stack: [], queue: []}
|
|
129
129
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
export async function Lock_acquire$(self_, reentrant_, $task) {
|
|
133
|
-
|
|
134
|
-
if(self_.level === 0) {
|
|
135
|
-
self_.owner = $task
|
|
136
|
-
self_.level += 1
|
|
137
|
-
} else {
|
|
138
|
-
if(self_.owner !== $task || !reentrant_) {
|
|
139
|
-
try {
|
|
140
|
-
await new Promise((resolve, reject) => {
|
|
141
|
-
$task.controller.signal.addEventListener('abort', reject)
|
|
142
|
-
try {
|
|
143
|
-
self_.queue.push({owner: $task, resolve: resolve})
|
|
144
|
-
} finally {
|
|
145
|
-
$task.controller.signal.removeEventListener('abort', reject)
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
} finally {
|
|
149
|
-
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
150
|
-
}
|
|
151
|
-
} else {
|
|
152
|
-
self_.level += 1
|
|
153
|
-
}
|
|
154
|
-
}
|
|
133
|
+
|
|
134
|
+
if(self_.level === 0) {
|
|
135
|
+
self_.owner = $task
|
|
136
|
+
self_.level += 1
|
|
137
|
+
} else {
|
|
138
|
+
if(self_.owner !== $task || !reentrant_) {
|
|
139
|
+
try {
|
|
140
|
+
await new Promise((resolve, reject) => {
|
|
141
|
+
$task.controller.signal.addEventListener('abort', reject)
|
|
142
|
+
try {
|
|
143
|
+
self_.queue.push({owner: $task, resolve: resolve})
|
|
144
|
+
} finally {
|
|
145
|
+
$task.controller.signal.removeEventListener('abort', reject)
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
} finally {
|
|
149
|
+
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
self_.level += 1
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
155
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
export async function Lock_release$(self_, $task) {
|
|
159
|
-
|
|
160
|
-
if(self_.owner !== $task) {
|
|
161
|
-
throw new Error("Tried to release a lock without acquiring it first.")
|
|
162
|
-
} else if(self_.level > 1) {
|
|
163
|
-
self_.level -= 1
|
|
164
|
-
} else {
|
|
165
|
-
self_.owner = null
|
|
166
|
-
self_.level = 0
|
|
167
|
-
if(self_.stack.length === 0) {
|
|
168
|
-
const empty = self_.stack
|
|
169
|
-
self_.stack = self_.queue.reverse()
|
|
170
|
-
self_.queue = empty
|
|
171
|
-
}
|
|
172
|
-
if(self_.stack.length !== 0) {
|
|
173
|
-
const pending = self_.stack.pop()
|
|
174
|
-
self_.owner = pending.owner
|
|
175
|
-
self_.level = 1
|
|
176
|
-
pending.resolve()
|
|
177
|
-
}
|
|
178
|
-
}
|
|
159
|
+
|
|
160
|
+
if(self_.owner !== $task) {
|
|
161
|
+
throw new Error("Tried to release a lock without acquiring it first.")
|
|
162
|
+
} else if(self_.level > 1) {
|
|
163
|
+
self_.level -= 1
|
|
164
|
+
} else {
|
|
165
|
+
self_.owner = null
|
|
166
|
+
self_.level = 0
|
|
167
|
+
if(self_.stack.length === 0) {
|
|
168
|
+
const empty = self_.stack
|
|
169
|
+
self_.stack = self_.queue.reverse()
|
|
170
|
+
self_.queue = empty
|
|
171
|
+
}
|
|
172
|
+
if(self_.stack.length !== 0) {
|
|
173
|
+
const pending = self_.stack.pop()
|
|
174
|
+
self_.owner = pending.owner
|
|
175
|
+
self_.level = 1
|
|
176
|
+
pending.resolve()
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
179
|
|
|
180
180
|
}
|
|
181
181
|
|
|
@@ -225,37 +225,37 @@ throw new Error('Function LockCondition_wakeAll is missing on this target in syn
|
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
export async function LockCondition_sleep$(self_, $task) {
|
|
228
|
-
|
|
229
|
-
if(self_.lock.owner !== $task) {
|
|
230
|
-
throw new Error("Tried to sleep on a condition without acquiring it first.")
|
|
231
|
-
}
|
|
232
|
-
const level = self_.lock.level
|
|
233
|
-
self_.lock.level = 1
|
|
234
|
-
await ff_core_Lock.Lock_release$(self_.lock)
|
|
235
|
-
try {
|
|
236
|
-
await new Promise((resolve, reject) => {
|
|
237
|
-
$task.controller.signal.addEventListener('abort', reject)
|
|
238
|
-
try {
|
|
239
|
-
self_.queue.push(resolve)
|
|
240
|
-
} finally {
|
|
241
|
-
$task.controller.signal.removeEventListener('abort', reject)
|
|
242
|
-
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
243
|
-
}
|
|
244
|
-
})
|
|
245
|
-
} finally {
|
|
246
|
-
let exception = null
|
|
247
|
-
let acquired = false
|
|
248
|
-
while(!acquired) {
|
|
249
|
-
try {
|
|
250
|
-
await ff_core_Lock.Lock_acquire$(self_.lock)
|
|
251
|
-
self_.lock.level = level
|
|
252
|
-
acquired = true
|
|
253
|
-
} catch(e) {
|
|
254
|
-
exception = e
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
if(e !== null) throw e;
|
|
258
|
-
}
|
|
228
|
+
|
|
229
|
+
if(self_.lock.owner !== $task) {
|
|
230
|
+
throw new Error("Tried to sleep on a condition without acquiring it first.")
|
|
231
|
+
}
|
|
232
|
+
const level = self_.lock.level
|
|
233
|
+
self_.lock.level = 1
|
|
234
|
+
await ff_core_Lock.Lock_release$(self_.lock)
|
|
235
|
+
try {
|
|
236
|
+
await new Promise((resolve, reject) => {
|
|
237
|
+
$task.controller.signal.addEventListener('abort', reject)
|
|
238
|
+
try {
|
|
239
|
+
self_.queue.push(resolve)
|
|
240
|
+
} finally {
|
|
241
|
+
$task.controller.signal.removeEventListener('abort', reject)
|
|
242
|
+
if($task.controller.signal.aborted) $task.controller = new AbortController()
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
} finally {
|
|
246
|
+
let exception = null
|
|
247
|
+
let acquired = false
|
|
248
|
+
while(!acquired) {
|
|
249
|
+
try {
|
|
250
|
+
await ff_core_Lock.Lock_acquire$(self_.lock)
|
|
251
|
+
self_.lock.level = level
|
|
252
|
+
acquired = true
|
|
253
|
+
} catch(e) {
|
|
254
|
+
exception = e
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if(e !== null) throw e;
|
|
258
|
+
}
|
|
259
259
|
|
|
260
260
|
}
|
|
261
261
|
|
|
@@ -284,32 +284,32 @@ return
|
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
export async function LockCondition_wakeOne$(self_, $task) {
|
|
287
|
-
|
|
288
|
-
if(self_.stack.length === 0) {
|
|
289
|
-
const empty = self_.stack
|
|
290
|
-
self_.stack = self_.queue.reverse()
|
|
291
|
-
self_.queue = empty
|
|
292
|
-
}
|
|
293
|
-
if(self_.stack.length !== 0) {
|
|
294
|
-
const resolve = self_.stack.pop()
|
|
295
|
-
resolve()
|
|
296
|
-
}
|
|
287
|
+
|
|
288
|
+
if(self_.stack.length === 0) {
|
|
289
|
+
const empty = self_.stack
|
|
290
|
+
self_.stack = self_.queue.reverse()
|
|
291
|
+
self_.queue = empty
|
|
292
|
+
}
|
|
293
|
+
if(self_.stack.length !== 0) {
|
|
294
|
+
const resolve = self_.stack.pop()
|
|
295
|
+
resolve()
|
|
296
|
+
}
|
|
297
297
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
export async function LockCondition_wakeAll$(self_, $task) {
|
|
301
|
-
|
|
302
|
-
while(self_.stack.length !== 0) {
|
|
303
|
-
const resolve = self_.stack.pop()
|
|
304
|
-
resolve()
|
|
305
|
-
}
|
|
306
|
-
const empty = self_.stack
|
|
307
|
-
self_.stack = self_.queue.reverse()
|
|
308
|
-
self_.queue = empty
|
|
309
|
-
while(self_.stack.length !== 0) {
|
|
310
|
-
const resolve = self_.stack.pop()
|
|
311
|
-
resolve()
|
|
312
|
-
}
|
|
301
|
+
|
|
302
|
+
while(self_.stack.length !== 0) {
|
|
303
|
+
const resolve = self_.stack.pop()
|
|
304
|
+
resolve()
|
|
305
|
+
}
|
|
306
|
+
const empty = self_.stack
|
|
307
|
+
self_.stack = self_.queue.reverse()
|
|
308
|
+
self_.queue = empty
|
|
309
|
+
while(self_.stack.length !== 0) {
|
|
310
|
+
const resolve = self_.stack.pop()
|
|
311
|
+
resolve()
|
|
312
|
+
}
|
|
313
313
|
|
|
314
314
|
}
|
|
315
315
|
|
|
@@ -132,11 +132,11 @@ return system_.assets_
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
export async function internalListDirectoryWithoutOpendir_$(system_, path_, $task) {
|
|
135
|
-
|
|
136
|
-
const fsPromises = import$0
|
|
137
|
-
const path = import$1
|
|
138
|
-
let files = await fsPromises.readdir(path_)
|
|
139
|
-
return files.map(file => path.join(path_, file))
|
|
135
|
+
|
|
136
|
+
const fsPromises = import$0
|
|
137
|
+
const path = import$1
|
|
138
|
+
let files = await fsPromises.readdir(path_)
|
|
139
|
+
return files.map(file => path.join(path_, file))
|
|
140
140
|
|
|
141
141
|
}
|
|
142
142
|
|
|
@@ -273,16 +273,16 @@ return (await ff_core_NodeSystem.internalAssets_$(self_, $task))
|
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
export async function NodeSystem_path$(self_, relativePath_, $task) {
|
|
276
|
-
|
|
277
|
-
const path = import$1
|
|
278
|
-
return path.resolve(relativePath_)
|
|
276
|
+
|
|
277
|
+
const path = import$1
|
|
278
|
+
return path.resolve(relativePath_)
|
|
279
279
|
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
export async function NodeSystem_pathFromUrl$(self_, url_, $task) {
|
|
283
|
-
|
|
284
|
-
const url = import$2;
|
|
285
|
-
return url.fileURLToPath(new URL(url_));
|
|
283
|
+
|
|
284
|
+
const url = import$2;
|
|
285
|
+
return url.fileURLToPath(new URL(url_));
|
|
286
286
|
|
|
287
287
|
}
|
|
288
288
|
|
|
@@ -307,8 +307,8 @@ process.exit(exitCode_)
|
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
export async function NodeSystem_readStream$(self_, $task) {
|
|
310
|
-
|
|
311
|
-
return ff_core_Path.internalReadStream_$(() => process.stdin)
|
|
310
|
+
|
|
311
|
+
return ff_core_Path.internalReadStream_$(() => process.stdin)
|
|
312
312
|
|
|
313
313
|
}
|
|
314
314
|
|
|
@@ -349,74 +349,74 @@ export async function NodeSystem_writeErrorLine$(self_, text_, $task) {
|
|
|
349
349
|
}
|
|
350
350
|
|
|
351
351
|
export async function NodeSystem_environment$(self_, $task) {
|
|
352
|
-
|
|
353
|
-
const result = [];
|
|
354
|
-
for(const key in process.env) {
|
|
355
|
-
result.push(ff_core_Pair.Pair(key, process.env[key]));
|
|
356
|
-
}
|
|
357
|
-
return ff_core_List.List_toMap(result, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
|
|
352
|
+
|
|
353
|
+
const result = [];
|
|
354
|
+
for(const key in process.env) {
|
|
355
|
+
result.push(ff_core_Pair.Pair(key, process.env[key]));
|
|
356
|
+
}
|
|
357
|
+
return ff_core_List.List_toMap(result, ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String);
|
|
358
358
|
|
|
359
359
|
}
|
|
360
360
|
|
|
361
361
|
export async function NodeSystem_execute$(self_, command_, arguments_, standardIn_ = ff_core_Buffer.new_(0), workingDirectory_ = ff_core_Option.None(), environment_ = ff_core_Option.None(), maxBuffer_ = 16777216, killSignal_ = 9, $task) {
|
|
362
|
-
|
|
363
|
-
const childProcess = import$3;
|
|
364
|
-
const environment = environment_.value_ !== void 0 ? {} : process.env;
|
|
365
|
-
if(environment_.value_ !== void 0) {
|
|
366
|
-
ff_core_Map.Map_each(
|
|
367
|
-
environment_.value_,
|
|
368
|
-
(k, v) => environment[k] = v,
|
|
369
|
-
ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
|
-
const newProcess = childProcess.spawn(command_, arguments_, {
|
|
373
|
-
cwd: workingDirectory_.value_,
|
|
374
|
-
windowsHide: true,
|
|
375
|
-
signal: $task.controller.signal,
|
|
376
|
-
killSignal: killSignal_,
|
|
377
|
-
env: environment,
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
let size = 0;
|
|
381
|
-
const out = [];
|
|
382
|
-
const err = [];
|
|
383
|
-
|
|
384
|
-
newProcess.stdout.on('data', (data) => {
|
|
385
|
-
if(size > maxBuffer_) return;
|
|
386
|
-
size += data.byteLength;
|
|
387
|
-
if(size > maxBuffer_) newProcess.kill(killSignal_);
|
|
388
|
-
else out.push(data);
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
newProcess.stderr.on('data', (data) => {
|
|
392
|
-
if(size > maxBuffer_) return;
|
|
393
|
-
size += data.byteLength;
|
|
394
|
-
if(size > maxBuffer_) newProcess.kill(killSignal_);
|
|
395
|
-
else err.push(data);
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
return await new Promise((resolve, reject) => {
|
|
399
|
-
if(standardIn_.byteLength !== 0) {
|
|
400
|
-
newProcess.stdin.write(standardIn_);
|
|
401
|
-
}
|
|
402
|
-
newProcess.stdin.end();
|
|
403
|
-
newProcess.on('error', error => {
|
|
404
|
-
if(size > maxBuffer_) {
|
|
405
|
-
reject(internalProcessError_("maxBuffer exceeded"));
|
|
406
|
-
} else {
|
|
407
|
-
reject(internalProcessError_(error.message));
|
|
408
|
-
}
|
|
409
|
-
});
|
|
410
|
-
newProcess.on('close', code => {
|
|
411
|
-
const o = Buffer.concat(out);
|
|
412
|
-
const e = Buffer.concat(err);
|
|
413
|
-
resolve(ProcessResult(
|
|
414
|
-
code,
|
|
415
|
-
new DataView(o.buffer, o.byteOffset, o.byteLength),
|
|
416
|
-
new DataView(e.buffer, e.byteOffset, e.byteLength),
|
|
417
|
-
));
|
|
418
|
-
});
|
|
419
|
-
});
|
|
362
|
+
|
|
363
|
+
const childProcess = import$3;
|
|
364
|
+
const environment = environment_.value_ !== void 0 ? {} : process.env;
|
|
365
|
+
if(environment_.value_ !== void 0) {
|
|
366
|
+
ff_core_Map.Map_each(
|
|
367
|
+
environment_.value_,
|
|
368
|
+
(k, v) => environment[k] = v,
|
|
369
|
+
ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
const newProcess = childProcess.spawn(command_, arguments_, {
|
|
373
|
+
cwd: workingDirectory_.value_,
|
|
374
|
+
windowsHide: true,
|
|
375
|
+
signal: $task.controller.signal,
|
|
376
|
+
killSignal: killSignal_,
|
|
377
|
+
env: environment,
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
let size = 0;
|
|
381
|
+
const out = [];
|
|
382
|
+
const err = [];
|
|
383
|
+
|
|
384
|
+
newProcess.stdout.on('data', (data) => {
|
|
385
|
+
if(size > maxBuffer_) return;
|
|
386
|
+
size += data.byteLength;
|
|
387
|
+
if(size > maxBuffer_) newProcess.kill(killSignal_);
|
|
388
|
+
else out.push(data);
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
newProcess.stderr.on('data', (data) => {
|
|
392
|
+
if(size > maxBuffer_) return;
|
|
393
|
+
size += data.byteLength;
|
|
394
|
+
if(size > maxBuffer_) newProcess.kill(killSignal_);
|
|
395
|
+
else err.push(data);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
return await new Promise((resolve, reject) => {
|
|
399
|
+
if(standardIn_.byteLength !== 0) {
|
|
400
|
+
newProcess.stdin.write(standardIn_);
|
|
401
|
+
}
|
|
402
|
+
newProcess.stdin.end();
|
|
403
|
+
newProcess.on('error', error => {
|
|
404
|
+
if(size > maxBuffer_) {
|
|
405
|
+
reject(internalProcessError_("maxBuffer exceeded"));
|
|
406
|
+
} else {
|
|
407
|
+
reject(internalProcessError_(error.message));
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
newProcess.on('close', code => {
|
|
411
|
+
const o = Buffer.concat(out);
|
|
412
|
+
const e = Buffer.concat(err);
|
|
413
|
+
resolve(ProcessResult(
|
|
414
|
+
code,
|
|
415
|
+
new DataView(o.buffer, o.byteOffset, o.byteLength),
|
|
416
|
+
new DataView(e.buffer, e.byteOffset, e.byteLength),
|
|
417
|
+
));
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
420
|
|
|
421
421
|
}
|
|
422
422
|
|
|
@@ -413,14 +413,14 @@ return ff_core_Ordering.fromFloat_((x_ - y_))
|
|
|
413
413
|
|
|
414
414
|
export const ff_core_Ordering_Order$ff_core_String_String = {
|
|
415
415
|
compare_(x_, y_) {
|
|
416
|
-
|
|
417
|
-
if(x_ < y_) {
|
|
418
|
-
return ff_core_Ordering.OrderingBefore()
|
|
419
|
-
} else if(x_ > y_) {
|
|
420
|
-
return ff_core_Ordering.OrderingAfter()
|
|
421
|
-
} else {
|
|
422
|
-
return ff_core_Ordering.OrderingSame()
|
|
423
|
-
}
|
|
416
|
+
|
|
417
|
+
if(x_ < y_) {
|
|
418
|
+
return ff_core_Ordering.OrderingBefore()
|
|
419
|
+
} else if(x_ > y_) {
|
|
420
|
+
return ff_core_Ordering.OrderingAfter()
|
|
421
|
+
} else {
|
|
422
|
+
return ff_core_Ordering.OrderingSame()
|
|
423
|
+
}
|
|
424
424
|
|
|
425
425
|
},
|
|
426
426
|
async compare_$(x_, y_, $task) {
|