protected override Expression compileBody( Dictionary <INode, string> symbols, Dictionary <INode, List <INode> > letEntries, HashSet <string> initializedIds, HashSet <string> conditionalIds) { return(Expression.NewNumber_E(_num)); }
private static Expression WrapLets( Expression body, Dictionary <INode, string> symbols, List <INode> bindings) { return(Expression.NewLet( Utils.SequenceToFSharpList( bindings.Select(x => symbols[x]) .Concat(bindings.Select(x => symbols[x] + "-init"))), Utils.SequenceToFSharpList( Enumerable.Repeat( Expression.NewBegin(FSharpList <Expression> .Empty), bindings.Count) .Concat(Enumerable.Repeat(Expression.NewNumber_E(0), bindings.Count))), body)); }
private Expression __compileBody( Dictionary <INode, string> symbols, Dictionary <INode, List <INode> > letEntries, HashSet <string> initializedIds, HashSet <string> conditionalIds) { string symbol; if (symbols.TryGetValue(this, out symbol)) { var body = Expression.NewId(symbol); if (conditionalIds.Contains(symbol)) { symbols.Remove(this); var binding = compile(symbols, letEntries, initializedIds, conditionalIds); symbols[this] = symbol; body = Expression.NewIf( Expression.NewId(symbol + "-init"), body, Expression.NewBegin( Utils.MakeFSharpList( Expression.NewSetId(symbol, binding), Expression.NewSetId(symbol + "-init", Expression.NewNumber_E(1)), body))); } else if (!initializedIds.Contains(symbol)) { symbols.Remove(this); var binding = compile(symbols, letEntries, initializedIds, conditionalIds); symbols[this] = symbol; body = Expression.NewBegin( Utils.MakeFSharpList( Expression.NewSetId(symbol, binding), Expression.NewSetId(symbol + "-init", Expression.NewNumber_E(1)), body)); initializedIds.Add(symbol); } return(body); } else { return(compileBody(symbols, letEntries, initializedIds, conditionalIds)); } }