public JST.Identifier FreshenArgument(JST.Identifier id, TypeRef type) { var newid = NameSupply.GenSym(); var cell = new VariableCell(newid); Bind(id, cell.Read()); CompEnv.AddVariable(newid, ArgLocal.Local, true, true, type); return(newid); }
private bool Dump(ISeq <Statement> statements, MachineState state, int skip, int i) { if (statements == null) { return(Failed(false, "eval in flush")); } var id = state.PeekId(stack.Count - (1 + skip) - i, gensym); var cell = new VariableCell(id); var read = stack[i].Expression as ReadExpression; if (read == null || !read.Address.Equals(cell.AddressOf())) { // Ok if id already added as temporary compEnv.AddVariable(id, ArgLocal.Local, false, true, compEnv.SubstituteType(state.PeekType(stack.Count - (1 + skip) - i))); statements.Add(new ExpressionStatement(cell.Write(stack[i].Expression.CloneIfStruct(compEnv)))); } // else: stack entry has not changed, so no need to save it return(true); }