firefly-compiler 0.4.86 → 0.4.88

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.
@@ -1185,8 +1185,14 @@ extend self: Parser {
1185
1185
 
1186
1186
  parseDynamicMember(record: Term): Term {
1187
1187
  self.skip(LArrowThin)
1188
- let token = if(self.current().is(LUpper)) {self.skip(LUpper)} else {self.skip(LLower)}
1189
- let member = EString(token.at(), "\"" + token.raw() + "\"")
1188
+ let token = if(self.current().is(LLower)) {
1189
+ self.skip(LLower)
1190
+ } elseIf {self.current().is(LUpper)} {
1191
+ self.skip(LUpper)
1192
+ } else {
1193
+ self.skip(LString)
1194
+ }
1195
+ let member = EString(token.at(), if(token.is(LString)) {token.raw()} else {"\"" + token.raw() + "\""})
1190
1196
  if(self.current().rawIs("(")) {
1191
1197
  let arguments = self.parseFunctionArguments(record.at, False)
1192
1198
  let effect = self.freshUnificationVariable(record.at)
@@ -162,7 +162,9 @@ tokenize(file: String, code: String, completionAt: Option[Location], attemptFixe
162
162
  let kind = if(code.grab(i) >= 'a') {LLower} else {LUpper}
163
163
  i += 1
164
164
  while {i < code.size() && code.grab(i).isAsciiLetterOrDigit()} {i += 1}
165
- if(i < code.size() && kind == LUpper && code.grab(i) == '.') {
165
+ if(i < code.size() && kind == LUpper && code.grab(i) == '.' && (
166
+ tokens.isEmpty() || tokens.grabLast().kind != LArrowThin
167
+ )) {
166
168
  i += 1
167
169
  emitToken(LNamespace, start, i)
168
170
  } else {
@@ -0,0 +1 @@
1
+ dependency ff:unsafejs:0.0.0
@@ -0,0 +1,50 @@
1
+ import UnsafeJs from ff:unsafejs
2
+
3
+ capability Compression {}
4
+
5
+ extend self: Compression {
6
+
7
+ compressBrotli(uncompressed: Buffer, level: Int = 4): Buffer
8
+
9
+ decompressBrotli(compressed: Buffer): Buffer
10
+
11
+ compressGzip(uncompressed: Buffer, level: Int = 6): Buffer
12
+
13
+ decompressGzip(compressed: Buffer): Buffer
14
+ target js async """
15
+ async function DecompressBlob(blob) {
16
+ const ds = new DecompressionStream("gzip");
17
+ const decompressedStream = blob.stream().pipeThrough(ds);
18
+ return await new Response(decompressedStream).blob();
19
+ }
20
+ """
21
+
22
+ compressDeflate(uncompressed: Buffer, level: Int = 6): Buffer
23
+
24
+ decompressDeflate(compressed: Buffer): Buffer
25
+
26
+ }
27
+
28
+ newForBrowserSystem(browserSystem: BrowserSystem): Compression
29
+ target js async "return globalThis"
30
+
31
+ newForNodeSystem(nodeSystem: NodeSystem): Compression
32
+ target js async "return globalThis"
33
+
34
+ internalCompress(algorithm: String, level: Int, buffer: Buffer): Buffer {
35
+ let js = UnsafeJs.jsSystem()
36
+ let dataView = UnsafeJs.toJsValue(buffer)
37
+ let uint8Array = js->"Uint8Array".new3(dataView->buffer, dataView->byteOffset, dataView->byteLength)
38
+ let stream = js->"ReadableStream".new1(js.object().with("start",
39
+ js.function1 {controller =>
40
+ controller->enqueue(uint8Array)
41
+ controller->close()
42
+ }
43
+ ))
44
+ let ds = js->"DecompressionStream".new1(algorithm)
45
+ let decompressedStream = stream->pipeThrough(ds)
46
+ let response = UnsafeJs.await {js->"Response".new1(decompressedStream)}
47
+ let decompressedData = UnsafeJs.await {response->arrayBuffer()}
48
+ js->"DataView".new1(decompressedData).grabBuffer()
49
+ }
50
+
@@ -1540,10 +1540,14 @@ return result_
1540
1540
 
1541
1541
  export function Parser_parseDynamicMember(self_, record_) {
1542
1542
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThin());
1543
- const token_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LUpper())
1543
+ const token_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())
1544
+ ? ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower())
1545
+ : ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LUpper())
1544
1546
  ? ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper())
1545
- : ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower()));
1546
- const member_ = ff_compiler_Syntax.EString(ff_compiler_Token.Token_at(token_), (("\"" + ff_compiler_Token.Token_raw(token_)) + "\""));
1547
+ : ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LString()));
1548
+ const member_ = ff_compiler_Syntax.EString(ff_compiler_Token.Token_at(token_), (ff_compiler_Token.Token_is(token_, ff_compiler_Token.LString())
1549
+ ? ff_compiler_Token.Token_raw(token_)
1550
+ : (("\"" + ff_compiler_Token.Token_raw(token_)) + "\"")));
1547
1551
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) {
1548
1552
  const arguments_ = ff_compiler_Parser.Parser_parseFunctionArguments(self_, record_.at_, false);
1549
1553
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, record_.at_);
@@ -3105,10 +3109,14 @@ return result_
3105
3109
 
3106
3110
  export async function Parser_parseDynamicMember$(self_, record_, $task) {
3107
3111
  ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LArrowThin());
3108
- const token_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LUpper())
3112
+ const token_ = (ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LLower())
3113
+ ? ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower())
3114
+ : ff_compiler_Token.Token_is(ff_compiler_Parser.Parser_current(self_), ff_compiler_Token.LUpper())
3109
3115
  ? ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LUpper())
3110
- : ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LLower()));
3111
- const member_ = ff_compiler_Syntax.EString(ff_compiler_Token.Token_at(token_), (("\"" + ff_compiler_Token.Token_raw(token_)) + "\""));
3116
+ : ff_compiler_Parser.Parser_skip(self_, ff_compiler_Token.LString()));
3117
+ const member_ = ff_compiler_Syntax.EString(ff_compiler_Token.Token_at(token_), (ff_compiler_Token.Token_is(token_, ff_compiler_Token.LString())
3118
+ ? ff_compiler_Token.Token_raw(token_)
3119
+ : (("\"" + ff_compiler_Token.Token_raw(token_)) + "\"")));
3112
3120
  if(ff_compiler_Token.Token_rawIs(ff_compiler_Parser.Parser_current(self_), "(")) {
3113
3121
  const arguments_ = ff_compiler_Parser.Parser_parseFunctionArguments(self_, record_.at_, false);
3114
3122
  const effect_ = ff_compiler_Parser.Parser_freshUnificationVariable(self_, record_.at_);
@@ -245,7 +245,7 @@ i_ += 1;
245
245
  while(((i_ < ff_core_String.String_size(code_)) && ff_core_Char.Char_isAsciiLetterOrDigit(ff_core_String.String_grab(code_, i_)))) {
246
246
  i_ += 1
247
247
  };
248
- if((((i_ < ff_core_String.String_size(code_)) && ff_compiler_Token.ff_core_Equal_Equal$ff_compiler_Token_TokenKind.equals_(kind_, ff_compiler_Token.LUpper())) && (ff_core_String.String_grab(code_, i_) === 46))) {
248
+ if(((((i_ < ff_core_String.String_size(code_)) && ff_compiler_Token.ff_core_Equal_Equal$ff_compiler_Token_TokenKind.equals_(kind_, ff_compiler_Token.LUpper())) && (ff_core_String.String_grab(code_, i_) === 46)) && (ff_core_Array.Array_isEmpty(tokens_) || ff_core_Equal.notEquals_(ff_core_Array.Array_grabLast(tokens_).kind_, ff_compiler_Token.LArrowThin(), ff_compiler_Token.ff_core_Equal_Equal$ff_compiler_Token_TokenKind)))) {
249
249
  i_ += 1;
250
250
  emitToken_(ff_compiler_Token.LNamespace(), start_, i_)
251
251
  } else {
@@ -489,7 +489,7 @@ i_ += 1;
489
489
  while(((i_ < ff_core_String.String_size(code_)) && ff_core_Char.Char_isAsciiLetterOrDigit(ff_core_String.String_grab(code_, i_)))) {
490
490
  i_ += 1
491
491
  };
492
- if((((i_ < ff_core_String.String_size(code_)) && ff_compiler_Token.ff_core_Equal_Equal$ff_compiler_Token_TokenKind.equals_(kind_, ff_compiler_Token.LUpper())) && (ff_core_String.String_grab(code_, i_) === 46))) {
492
+ if(((((i_ < ff_core_String.String_size(code_)) && ff_compiler_Token.ff_core_Equal_Equal$ff_compiler_Token_TokenKind.equals_(kind_, ff_compiler_Token.LUpper())) && (ff_core_String.String_grab(code_, i_) === 46)) && (ff_core_Array.Array_isEmpty(tokens_) || ff_core_Equal.notEquals_(ff_core_Array.Array_grabLast(tokens_).kind_, ff_compiler_Token.LArrowThin(), ff_compiler_Token.ff_core_Equal_Equal$ff_compiler_Token_TokenKind)))) {
493
493
  i_ += 1;
494
494
  emitToken_(ff_compiler_Token.LNamespace(), start_, i_)
495
495
  } else {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "description": "Firefly compiler",
5
5
  "author": "Firefly team",
6
6
  "license": "MIT",
7
- "version": "0.4.86",
7
+ "version": "0.4.88",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/Ahnfelt/firefly-boot"
@@ -17,3 +17,7 @@ throwIfCancelled(): Unit
17
17
  cancelled(): Bool
18
18
  // Replaced by the compiler
19
19
  target js sync "return false"
20
+
21
+ toJsValue[T](value: T): JsValue
22
+ target js sync "return value_"
23
+
@@ -4,7 +4,7 @@
4
4
  "description": "Firefly language support",
5
5
  "author": "Firefly team",
6
6
  "license": "MIT",
7
- "version": "0.4.86",
7
+ "version": "0.4.88",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/Ahnfelt/firefly-boot"