Beispiel #1
0
 protected override Expression compileBody(
     Dictionary <INode, string> symbols,
     Dictionary <INode, List <INode> > letEntries,
     HashSet <string> initializedIds,
     HashSet <string> conditionalIds)
 {
     return(Expression.NewNumber_E(_num));
 }
Beispiel #2
0
 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));
 }
Beispiel #3
0
        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));
            }
        }