mirror of
https://github.com/fluencelabs/aqua.git
synced 2025-04-24 14:32:13 +00:00
fix(compiler): Push to stream in closures [LNG-365] (#1157)
This commit is contained in:
parent
1563f7cdd8
commit
77b7b9b4bd
@ -1,16 +1,41 @@
|
|||||||
aqua StreamMapTest declares *
|
aqua StreamMapAbilities
|
||||||
|
|
||||||
export testGetFunc, Srv
|
export streamMapAbilityTest
|
||||||
|
|
||||||
service Srv("baaa"):
|
ability Streams:
|
||||||
g() -> string
|
stream: *string
|
||||||
|
map: %string
|
||||||
|
|
||||||
func testGetFunc() -> []string, []string, []string, u32:
|
ability Adds:
|
||||||
streamMap: %string
|
addToStream(s: string)
|
||||||
key = "key"
|
addToMap(k: string, v: string)
|
||||||
resEmpty = streamMap.get(key)
|
|
||||||
streamMap <<- key, "first value"
|
func addToStreamClosure(str: *string) -> string -> ():
|
||||||
resFirst = streamMap.get(key)
|
cl = func (s: string):
|
||||||
streamMap <<- key, "second value"
|
str <<- s
|
||||||
resSecond = streamMap.get(key)
|
<- cl
|
||||||
<- resEmpty, resFirst, resSecond, resSecond.length
|
|
||||||
|
func addToMapClosure(str: %string) -> string, string -> ():
|
||||||
|
cl = func (k: string, v: string):
|
||||||
|
str <<- k, v
|
||||||
|
<- cl
|
||||||
|
|
||||||
|
func addTo{Streams}() -> Adds:
|
||||||
|
addStream = addToStreamClosure(Streams.stream)
|
||||||
|
addMap = addToMapClosure(Streams.map)
|
||||||
|
adds = Adds(addToStream = addStream, addToMap = addMap)
|
||||||
|
<- adds
|
||||||
|
|
||||||
|
func add{Adds}(s: string, k: string):
|
||||||
|
Adds.addToStream(s)
|
||||||
|
Adds.addToMap(k, k)
|
||||||
|
|
||||||
|
func streamMapAbilityTest() -> []string, []string:
|
||||||
|
stream: *string
|
||||||
|
map: %string
|
||||||
|
ab = Streams(stream = stream, map = map)
|
||||||
|
adds <- addTo{ab}()
|
||||||
|
add{adds}("one", "1")
|
||||||
|
add{adds}("two", "2")
|
||||||
|
add{adds}("three", "3")
|
||||||
|
<- stream, map.keys()
|
@ -1,6 +1,6 @@
|
|||||||
aqua ClosureReturnRename
|
aqua ClosureReturnRename
|
||||||
|
|
||||||
export lng193Bug
|
export lng193Bug, lng365Bug
|
||||||
|
|
||||||
func getClosure(arg: u16, peer: string) -> u16 -> u16:
|
func getClosure(arg: u16, peer: string) -> u16 -> u16:
|
||||||
on peer:
|
on peer:
|
||||||
@ -16,3 +16,41 @@ func lng193Bug(peer: string, closurePeer: string) -> u16:
|
|||||||
res1 = a(1) + a(2) -- Call two times for
|
res1 = a(1) + a(2) -- Call two times for
|
||||||
res2 = b(3) + b(4) -- bug to appear
|
res2 = b(3) + b(4) -- bug to appear
|
||||||
<- res1 + res2
|
<- res1 + res2
|
||||||
|
|
||||||
|
ability Streams:
|
||||||
|
stream: *string
|
||||||
|
map: %string
|
||||||
|
|
||||||
|
ability Adds:
|
||||||
|
addToStream(s: string)
|
||||||
|
addToMap(k: string, v: string)
|
||||||
|
|
||||||
|
func addToStreamClosure(str: *string) -> string -> ():
|
||||||
|
cl = func (s: string):
|
||||||
|
str <<- s
|
||||||
|
<- cl
|
||||||
|
|
||||||
|
func addToMapClosure(str: %string) -> string, string -> ():
|
||||||
|
cl = func (k: string, v: string):
|
||||||
|
str <<- k, v
|
||||||
|
<- cl
|
||||||
|
|
||||||
|
func addTo{Streams}() -> Adds:
|
||||||
|
addStream = addToStreamClosure(Streams.stream)
|
||||||
|
addMap = addToMapClosure(Streams.map)
|
||||||
|
adds = Adds(addToStream = addStream, addToMap = addMap)
|
||||||
|
<- adds
|
||||||
|
|
||||||
|
func add{Adds}(s: string, k: string):
|
||||||
|
Adds.addToStream(s)
|
||||||
|
Adds.addToMap(k, k)
|
||||||
|
|
||||||
|
func lng365Bug() -> []string, []string:
|
||||||
|
stream: *string
|
||||||
|
map: %string
|
||||||
|
ab = Streams(stream = stream, map = map)
|
||||||
|
adds <- addTo{ab}()
|
||||||
|
add{adds}("one", "1")
|
||||||
|
add{adds}("two", "2")
|
||||||
|
add{adds}("three", "3")
|
||||||
|
<- stream, map.keys()
|
@ -141,7 +141,7 @@ import { literalCall } from "../examples/returnLiteralCall.js";
|
|||||||
import { multiReturnCall } from "../examples/multiReturnCall.js";
|
import { multiReturnCall } from "../examples/multiReturnCall.js";
|
||||||
import { declareCall } from "../examples/declareCall.js";
|
import { declareCall } from "../examples/declareCall.js";
|
||||||
import { genOptions, genOptionsEmptyString } from "../examples/optionsCall.js";
|
import { genOptions, genOptionsEmptyString } from "../examples/optionsCall.js";
|
||||||
import { lng193BugCall } from "../examples/closureReturnRename.js";
|
import { lng193BugCall, lng365BugCall } from "../examples/closureReturnRename.js";
|
||||||
import {
|
import {
|
||||||
closuresCall,
|
closuresCall,
|
||||||
multipleClosuresLNG262BugCall,
|
multipleClosuresLNG262BugCall,
|
||||||
@ -1232,6 +1232,12 @@ describe("Testing examples", () => {
|
|||||||
expect(result).toEqual(1 + 42 + (2 + 42) + (3 + 42) + (4 + 42));
|
expect(result).toEqual(1 + 42 + (2 + 42) + (3 + 42) + (4 + 42));
|
||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
|
it("closureReturnRename.aqua bug LNG-365", async () => {
|
||||||
|
const [values, keys] = await lng365BugCall();
|
||||||
|
expect(values).toEqual(["one", "two", "three"]);
|
||||||
|
expect(keys).toEqual(["1", "2", "3"]);
|
||||||
|
});
|
||||||
|
|
||||||
it("closures.aqua", async () => {
|
it("closures.aqua", async () => {
|
||||||
const closuresResult = await closuresCall();
|
const closuresResult = await closuresCall();
|
||||||
const res1 = config.externalAddressesRelay2;
|
const res1 = config.externalAddressesRelay2;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { lng193Bug } from "../compiled/examples/closureReturnRename.js";
|
import { lng193Bug, lng365Bug } from "../compiled/examples/closureReturnRename.js";
|
||||||
import { config } from "../config.js";
|
import { config } from "../config.js";
|
||||||
|
|
||||||
const relays = config.relays;
|
const relays = config.relays;
|
||||||
@ -6,3 +6,7 @@ const relays = config.relays;
|
|||||||
export async function lng193BugCall(): Promise<number> {
|
export async function lng193BugCall(): Promise<number> {
|
||||||
return lng193Bug(relays[4].peerId, relays[5].peerId);
|
return lng193Bug(relays[4].peerId, relays[5].peerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function lng365BugCall() {
|
||||||
|
return lng365Bug();
|
||||||
|
}
|
||||||
|
@ -306,7 +306,10 @@ case class ClosureTag(
|
|||||||
override def renameExports(map: Map[String, String]): RawTag =
|
override def renameExports(map: Map[String, String]): RawTag =
|
||||||
copy(func =
|
copy(func =
|
||||||
func.copy(
|
func.copy(
|
||||||
name = map.getOrElse(func.name, func.name)
|
name = map.getOrElse(func.name, func.name),
|
||||||
|
arrow = func.arrow.copy(
|
||||||
|
body = func.arrow.body.map(_.renameExports(map))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user