Skip to content

Instantly share code, notes, and snippets.

@takeshik
Created November 10, 2011 14:14
Show Gist options
  • Save takeshik/1354940 to your computer and use it in GitHub Desktop.
Save takeshik/1354940 to your computer and use it in GitHub Desktop.
private static SymbolTable CreatePathSymbols(SymbolTable symbols, IEnumerable<String> fragments)
{
return EnumerableEx.Generate(
Tuple.Create(fragments, symbols),
_ => _.Item1.Any(),
_ => Tuple.Create(_.Item1.Skip(1), _.Item1.First()
.Let(f => _.Item2.ExistsKey(f) && _.Item2.Resolve(f).Const<SymbolTable>() != null
? symbols.Resolve(f).Const<SymbolTable>()
: new SymbolTable().Apply(s => _.Item2[f] = Expression.Constant(s))
)),
_ => _.Item2
).Last().Resolve(fragments.Last()).Const<SymbolTable>();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment