-
Notifications
You must be signed in to change notification settings - Fork 98
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: parenthetical syntax for cycles
etc.
#4608
base: master
Are you sure you want to change the base?
Conversation
@@ -312,14 +312,16 @@ let funcE name sort ctrl typ_binds args typs exp = | |||
note = Note.{ def with typ; eff = T.Triv }; | |||
} | |||
|
|||
let recordE' = ref (fun _ -> nullE ()) (* gets correctly filled below *) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use and
to allow mutual recursion
src/ir_passes/tailcall.ml
Outdated
begin match e1.it, env with | ||
| VarE f1, { tail_pos = true; | ||
info = Some { func; typ_binds; temps; label; tail_called } } | ||
when f1 = func && are_generic_insts typ_binds insts -> | ||
tail_called := true; | ||
(blockE (assignEs temps (exp env e2)) (breakE label (unitE ()))).it | ||
| _,_-> PrimE (CallPrim insts, [exp env e1; exp env e2]) | ||
| _,_-> PrimE (CallPrim (insts, pars), [exp env e1; exp env e2]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| _,_-> PrimE (CallPrim (insts, pars), [exp env e1; exp env e2]) | |
| _,_-> PrimE (CallPrim (insts, exp env pars), [exp env e1; exp env e2]) |
unfortunately it doesn't arrive in the `async.ml`
at least now I get > ingress Err: IC0504: Canister rwlgt-iiaaa-aaaaa-aaaaa-cai violated contract: ic0_call_cycles_add128 called when no call is under construction.
we should use the system call though, instead of assigning to `@cycles`, as that will go away
cycles
etc.
@@ -108,6 +111,7 @@ let primE prim es = | |||
| SystemCyclesAcceptPrim -> T.nat | |||
| DeserializePrim ts -> T.seq ts | |||
| DeserializeOptPrim ts -> T.Opt (T.seq ts) | |||
| ICCyclesPrim -> T.(Opt (Obj (Object, [{ lab = "cycles"; typ = nat; src = empty_src}]))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Have a common place for these types?
@@ -24,8 +24,8 @@ module ConRenaming = E.Make(struct type t = con let compare = Cons.compare end) | |||
|
|||
(* Helpers *) | |||
|
|||
let selfcallE ts e1 e2 e3 e4 = | |||
{ it = SelfCallE (ts, e1, e2, e3, e4); | |||
let selfcallE (cyc : exp) ts e1 e2 e3 e4 = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let selfcallE (cyc : exp) ts e1 e2 e3 e4 = | |
let selfcallE cyc ts e1 e2 e3 e4 = |
@@ -82,6 +82,11 @@ let new_nary_async_reply ts = | |||
(* construct the n-ary async value, coercing the continuation, if necessary *) | |||
let nary_async = | |||
let coerce u = | |||
(*<<<<<<< gabor/parentheticals | |||
let k = fresh_var "k" (contT u T.unit) in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will land with #4615.
but should we ensure that it is `T.Obj`?
it crashes the compiler but other type of metadata could be useful here
not completely sure
tryin' my best…
ICCallPrim
(and friends) should carry the fragment to set theSystemCyclesAddPrim
while the call is being set up towards the replica.Parentheticals
(with cycles = 42_000_000) Actor.call(param)
(with timeout = 10)
ic0.call_with_best_effort_response : (timeout_seconds : i32) -> ()
(with receiveMax = 50_000)
(to limit the response size)(with resend = true; resendDelay = 3)
whenSYS_TRANSIENT
reject response (like UnixEINTR
)call_cycles_add128_up_to
ic#1158(with memoryLimit = 1G) ActorClass(<args>)
TODOs:
cycles : Nat
for canister sends (self and raw sends too)async
blocksICCallPrim
, see top