First off, I agree with everything Tomas said, and think it's likely to solve your problem.
That said, the disparity between 32-bit and 64-bit is perhaps not unexpected; for the .Net 2.0 CLR, the 64-bit JITter does not honor .tail calls as often as the 32-bit one, so there are cases where valid F# code will run fine on 32-bit but fail with StackOverflow on 64-bit. (I believe the CLR team is making improvements here in .Net 4.0.)
I think the reason you're seeing Seq.hd as the 'cause' is simply that it's the first thing that 'forces' evaluation of the Seq. Back to point one, if you rewrite this to use a LazyList throughout, I think you'll quit using any stack space and it will all just work, regardless of the bit-ness of the platform.
Hi,
I'm not fully sure what exactly is going on here, but I think your usage of LazyList and sequences is a bit suspicious and it could be causing the issue. I mean these two lines:
1 2 3
let token = Seq.hd tokens let tokens = (LazyList.of_seq <| Seq.skip 1 tokens) :> Lexer.Token seq
This gets the first token and then creates a new lazy list, initialized from a lazy sequence, so I guess that when you access next element of the lazy list in the next iteration, it still remembers the way it was created (which is a sequence of nested references where lazylist references sequence, which references lazylist and so on..). But I'm not fully sure about this....
Anyway, the best way to write the code would be to create LazyList once, before running the function and then use pattern matching inside the processing function to test the two possible cases.
I believe that would look roughly like this:
1 2 3 4 5 6 7 8 9 10
let rec parse_internal parser (nodes:Node list) (tokens : LazyList<Lexer.Token>) parse_until = match tokens with | LazyList.Nil | LazyList.Cons(Lexer.Nothing, _) -> (nodes, seq [Lexer.Nothing]) // end of sequence or 'nothing' | LazyList.Cons(token, tokens) -> let tagNodes, tokens = parse_token parser tokens token parse_internal parser (nodes @ tagNodes) tokens parse_until parse_internal (tokens |> LazyList.of_seq)
BTW: is the 'parse_until' parameter used anywhere in the code?
As a side note, it would be also nice to get rid of '@' in the last call, because that's not particularly fast operation. That would probably require passing the current list of 'nodes' to the 'parser_token' function, so that it can prepend new tokens one-by-one, but that's probably just a detail.
Hope this helps!
T.
Thank you guys for quick response. Unfortunately it did not help much. I followed your suggestion and ended up with the following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
let rec parse_internal parser (nodes:Node list) (tokens : LazyList<Lexer.Token>) parse_until = match tokens with | LazyList.Nil | LazyList.Cons(Lexer.Nothing, _) -> if not <| List.is_empty parse_until then fail_unclosed_tags parse_until (nodes, LazyList.of_list <| [Lexer.Nothing]) | LazyList.Cons(token, tokens) -> if is_term_token token parse_until then (nodes @ [new Node(token)], tokens) else if (not <| List.is_empty parse_until) && Seq.hd tokens = Lexer.Nothing && not <| is_term_token token parse_until then fail_unclosed_tags parse_until else let tagNodes, tokens = parse_token parser tokens token parse_internal parser (nodes @ tagNodes) tokens parse_until
While the code certainly looks cleaner, I am still getting the same exception. I even tried to remove the remaining Seq.hd tokens call from the if statement to no avail. The stack overflow is still happening.
As a side note when I change the data type from Token seq to LazyList<Token> i got a warning 'this construct has been deprecated consider using seq...?' - so, has it? Been deprecated that is?
And another one - does the list implementation holds a pointer to both the first and the last element? That would make splicing of 2 lists an operation which does not depend on the size of the lists
As to tomasp question about parse_until - in my initial posting I removed some of the code which I thought was not related to the problem. Now I posted the complete code of the function. If you guys are curious this code is a part of NDjango - an open source implementation of django template engine in F#: www.ndjango.com The source code can be downloaded here svn://svn.hill30.com/ndjango/ The function in question is on line 140 of the NDjangoParser/Parser.fs file.
Any input will be greatly appreciated
As a side note when I change the data type from Token seq to LazyList<Token> i got a warning 'this construct has been deprecated consider using seq...?' - so, has it? Been deprecated that is?
No; you're using F# 1.9.6.2 I take it? That deprecation message was a mistake, and you won't see it in the latest release.
While the code certainly looks cleaner, I am still getting the same exception. I even tried to remove the remaining Seq.hd tokens call from the if statement to no avail. The stack overflow is still happening.
Are you compiling in 'Debug' mode or 'Release' mode (without or with -O)? (Actually the compiler options changed a bit from 1.9.6.2 to 1.9.6.16 so I'm not even sure.) I wonder if you're in Debug/no-opt/no-tail-call mode. Also, don't use Seq.hd on a LazyList - use LazyList.hd instead.
It could also be that the code that is originally producing the tokens (not shown here) has the StackOverflow - does the stack trace repeat over and over again through this method, or through the producer code? If I have time I may look at the link to your code you sent.
And another one - does the list implementation holds a pointer to both the first and the last element? That would make splicing of 2 lists an operation which does not depend on the size of the lists
F# Lists are immutable (and concrete), and they're singly-linked (you have only a pointer to the head); either of these constraints means you must traverse the whole first list to 'append'. This is pretty fundamental - you need to know this to reason about the complexity of various operations and to choose suitable data structures.
I figured it out. You were right - your fix did fix the stack overflow. I just had similar code in the rendering routines as well. Once I fixed it the stack overflow is gone.
Having said that I am still confused - what does it mean the lazy list 'remembers how it was created'? I undestand that the way I originally used the LazyList was causing creation of unnecessary objects which could have impacted performance. I also understand how using regular sequence and advancing it with Seq.skip 1 can cause stack overflow. But with LazyList - I am still missing something
Hi, great to hear that it resolved the problem!
I'm not fully sure how to explain what was the problem. However, when you convert sequence to lazylist, it keeps a reference to the original sequence. When the underlying sequence is created using Seq.skip, it is the inefficient sequence that can cause stack overflow. When you convert lazy list back to sequence, it returns a sequence that keeps reference to the original lazy list and so it also references the original sequence.
I'm not sure whether this explains stack overflow exception or not, but it could explain some inefficiencies. Anyway, here is a very simple implementation of lazy list that could demonstrate how the conversion between the two representations works:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
type LazyList<'T> = | LazyCell of 'T * Lazy<LazyList<'T>> let rec listToSeq(LazyCell(h, t)) = seq { yield h yield! listToSeq(t.Force()) } let listOfSeq(s:seq<_>) = let en = s.GetEnumerator() let rec next() = en.MoveNext() |> ignore LazyCell(en.Current, lazy next()) next() let rec test s = let next = listOfSeq (Seq.skip 1 s) test (listToSeq(next))
Topic tags
- f# × 3705
- websharper × 1897
- compiler × 286
- functional × 201
- ui next × 139
- c# × 121
- classes × 97
- web × 97
- .net × 84
- book × 84
- async × 76
- ui.next × 67
- bug × 54
- core × 49
- website × 49
- server × 45
- parallel × 43
- ui × 43
- enhancement × 41
- parsing × 41
- testing × 41
- trywebsharper × 41
- typescript × 37
- html × 35
- javascript × 35
- owin × 35
- asynchronous × 30
- monad × 28
- ocaml × 28
- tutorial × 27
- warp × 27
- haskell × 26
- sitelet × 25
- linq × 22
- workflows × 22
- wpf × 20
- fpish × 19
- introduction × 19
- silverlight × 19
- sitelets × 19
- monodevelop × 17
- rpc × 17
- suave × 17
- piglets × 16
- collections × 15
- feature request × 15
- jquery × 15
- templates × 15
- getting started × 14
- pipeline × 14
- kendoui × 13
- reactive × 12
- 4.1.0.171 × 11
- monads × 11
- opinion × 10
- 4.0.190.100-rc × 9
- deployment × 9
- fixed × 9
- formlets × 9
- in × 9
- json × 9
- plugin × 9
- proposal × 9
- scheme × 9
- solid × 9
- basics × 8
- concurrent × 8
- highcharts × 8
- how-to × 8
- python × 8
- 4.1.1.175 × 7
- complexity × 7
- documentation × 7
- visual studio × 7
- 4.1.2.178 × 6
- lisp × 6
- real-world × 6
- released in 4.0.192.103-rc × 6
- remoting × 6
- resources × 6
- scala × 6
- websharper ui.next × 6
- workshop × 6
- xaml × 6
- 4.0.193.110 × 5
- 4.2.3.236 × 5
- aspnetmvc × 5
- authentication × 5
- azure × 5
- bootstrap × 5
- conference × 5
- dsl × 5
- formlet × 5
- java × 5
- list × 5
- metaprogramming × 5
- ml × 5
- released in Zafir.4.0.188.91-beta10 × 5
- sql × 5
- visualstudio × 5
- websharper.forms × 5
- zafir × 5
- 4.0.192.106 × 4
- 4.0.195.127 × 4
- 4.1.0.38 × 4
- 4.2.1.86 × 4
- 4.2.6.118 × 4
- css × 4
- example × 4
- extensions × 4
- fsi × 4
- fsx × 4
- html5 × 4
- jqueryui × 4
- lift × 4
- reflection × 4
- remote × 4
- rest × 4
- spa × 4
- teaching × 4
- template × 4
- websocket × 4
- wontfix × 4
- 4.0.196.147 × 3
- 4.1.0.34 × 3
- 4.1.6.207 × 3
- 4.2.1.223-beta × 3
- 4.2.11.258 × 3
- 4.2.4.114 × 3
- 4.2.4.247 × 3
- 4.2.5.115 × 3
- 4.2.6.253 × 3
- 4.2.9.256 × 3
- ajax × 3
- alt.net × 3
- aml × 3
- asp.net mvc × 3
- canvas × 3
- cloudsharper × 3
- compilation × 3
- database × 3
- erlang × 3
- events × 3
- extension × 3
- file upload × 3
- forums × 3
- inline × 3
- issue × 3
- kendo × 3
- macro × 3
- mono × 3
- msbuild × 3
- mvc × 3
- pattern × 3
- piglet × 3
- released in Zafir.4.0.187.90-beta10 × 3
- svg × 3
- type provider × 3
- view × 3
- 4.1.1.64 × 2
- 4.1.5.203 × 2
- 4.1.7.232 × 2
- 4.2.10.257 × 2
- 4.2.3.111 × 2
- 4.2.5.249 × 2
- android × 2
- asp.net × 2
- beginner × 2
- blog × 2
- chart × 2
- client × 2
- client server app × 2
- clojure × 2
- computation expressions × 2
- constructor × 2
- corporate × 2
- courses × 2
- cufp × 2
- d3 × 2
- debugging × 2
- direct × 2
- discriminated union × 2
- docs × 2
- elm × 2
- endpoint × 2
- endpoints × 2
- enterprise × 2
- entity framework × 2
- event × 2
- f# interactive × 2
- fable × 2
- flowlet × 2
- formdata × 2
- forms × 2
- fsc × 2
- google maps × 2
- hosting × 2
- http × 2
- https × 2
- iis 8.0 × 2
- install × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- jquery mobile × 2
- keynote × 2
- lens × 2
- lenses × 2
- linux × 2
- listmodel × 2
- mac × 2
- numeric × 2
- oauth × 2
- obfuscation × 2
- offline × 2
- oop × 2
- osx × 2
- packaging × 2
- pattern matching × 2
- performance × 2
- pipelines × 2
- q&a × 2
- quotation × 2
- reference × 2
- released in Zafir.4.0.185.88-beta10 × 2
- rx × 2
- script × 2
- security × 2
- self host × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- tutorials × 2
- type × 2
- url × 2
- var × 2
- websharper.charting × 2
- websharper4 × 2
- websockets × 2
- wig × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- 4.0.194.126 × 1
- 4.1.3.184 × 1
- 4.1.4.189 × 1
- 4.2.0.214-beta × 1
- 4.2.12.259 × 1
- 4.2.2.231-beta × 1
- 4.2.8.255 × 1
- Canvas Sample Example × 1
- DynamicStyle Animated Style × 1
- Fixed in 4.0.190.100-rc × 1
- Released in Zafir.UI.Next.4.0.169.79-beta10 × 1
- SvgDynamicAttribute × 1
- WebComponent × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- actor × 1
- addin × 1
- agents × 1
- aggregation × 1
- agile × 1
- alter session × 1
- animation × 1
- anonymous object × 1
- apache × 1
- api × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net core × 1
- asp.net integration × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- attributes × 1
- authorization × 1
- b-tree × 1
- back button × 1
- badimageformatexception × 1
- bash script × 1
- batching × 1
- binding-vars × 1
- bistro × 1
- body × 1
- bundle × 1
- camtasia studio × 1
- cas protocol × 1
- charts × 1
- clarity × 1
- class × 1
- cli × 1
- clipboard × 1
- clojurescript × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- color zones × 1
- combinator × 1
- combinators × 1
- compile × 1
- compile code on server × 1
- config × 1
- confirm × 1
- content × 1
- context × 1
- context.usersession × 1
- continuation-passing style × 1
- coords × 1
- cordova × 1
- cors × 1
- coursera × 1
- cross-domain × 1
- csla × 1
- current_schema × 1
- custom content × 1
- data × 1
- data grid × 1
- datetime × 1
- debug × 1
- declarative × 1
- delete × 1
- devexpress × 1
- dhtmlx × 1
- dictionary × 1
- directattribute × 1
- disqus × 1
- distance × 1
- do binding × 1
- doc elt ui.next upgrade × 1
- docker × 1
- dojo × 1
- dol × 1
- dom × 1
- domain × 1
- du × 1
- duf-101 × 1
- dynamic × 1
- eastern language × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- enums × 1
- error × 1
- etw × 1
- euclidean × 1
- eventhandlerlist × 1
- examples × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- failed to translate × 1
- fake × 1
- fantomas × 1
- fear × 1
- float × 1
- form × 1
- form-data × 1
- forum × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- fsunit × 1
- function × 1
- functional style × 1
- game × 1
- games × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- getting-started × 1
- google × 1
- google.maps × 1
- grid × 1
- group × 1
- guide × 1
- hash × 1
- headers × 1
- hello world example × 1
- heroku × 1
- highchart × 1
- history × 1
- how to × 1
- html-templating × 1
- http405 × 1
- httpcontext × 1
- hubfs × 1
- i18n × 1
- ie 8 × 1
- if-doc × 1
- iis × 1
- image × 1
- images × 1
- inheritance × 1
- initialize × 1
- input × 1
- install "visual studio" × 1
- installer × 1
- int64 × 1
- interfaces × 1
- internet explorer × 1
- interop × 1
- interpreter × 1
- io × 1
- iobservable × 1
- ios × 1
- iot × 1
- ipad × 1
- isomorphic × 1
- javascript optimization × 1
- javascript semanticui resources × 1
- jquery-plugin × 1
- jquery-ui × 1
- jquery-ui-datepicker × 1
- js × 1
- kendo datasource × 1
- kendochart × 1
- kendoui compiler × 1
- knockout × 1
- l10n × 1
- learning × 1
- library × 1
- libs × 1
- license × 1
- licensing × 1
- lineserieszonescfg × 1
- local setting × 1
- localization × 1
- logging × 1
- loop × 1
- macros × 1
- mailboxprocessor × 1
- mapping × 1
- maps × 1
- markerclusterer × 1
- markup × 1
- marshal × 1
- math × 1
- mathjax × 1
- message × 1
- message passing × 1
- message-passing × 1
- meta × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- mix × 1
- mobile installation × 1
- mod_mono × 1
- modal × 1
- module × 1
- mouseevent × 1
- mouseposition × 1
- multidimensional × 1
- multiline × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- native × 1
- nested × 1
- nested loops × 1
- node × 1
- nunit × 1
- object relation mapper × 1
- object-oriented × 1
- om × 1
- onboarding × 1
- onclick × 1
- optimization × 1
- option × 1
- orm × 1
- os x × 1
- output-path × 1
- override × 1
- paper × 1
- parameter × 1
- persistence × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- post × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- privacy × 1
- private × 1
- profile × 1
- programming × 1
- project × 1
- project euler × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- proxy × 1
- ptvs × 1
- public × 1
- pure f# × 1
- purescript × 1
- qna × 1
- quant × 1
- query sitelet × 1
- question × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- reactjs × 1
- real-time × 1
- ref × 1
- region × 1
- released in 4.0.190.100-rc × 1
- reporting × 1
- responsive design × 1
- rest api × 1
- rest sitelet × 1
- restful × 1
- round table × 1
- router × 1
- routing × 1
- rpc reverseproxy × 1
- runtime × 1
- sales × 1
- sample × 1
- sampleapp × 1
- scriptcs × 1
- scripting × 1
- search × 1
- self hosted × 1
- semanticui × 1
- sequence × 1
- serialisation × 1
- service × 1
- session-state × 1
- sharepoint × 1
- signals × 1
- sitelet website × 1
- sitelet.protect × 1
- sitlets × 1
- slickgrid × 1
- source code × 1
- sqlentityconnection × 1
- ssl × 1
- standards × 1
- static content × 1
- stickynotes × 1
- streamreader × 1
- stress × 1
- strong name × 1
- structures × 1
- submitbutton × 1
- subscribe × 1
- svg example html5 websharper.ui.next × 1
- sweetalert × 1
- system.datetime × 1
- system.reflection.targetinvocationexception × 1
- table storage × 1
- targets × 1
- tdd × 1
- templates ui.next × 1
- templating × 1
- text parsing × 1
- three.js × 1
- time travel × 1
- tls × 1
- tooltip × 1
- tracing × 1
- tsunamiide × 1
- turkish × 1
- twitter-bootstrap × 1
- type erasure × 1
- type inference × 1
- type providers × 1
- type-providers × 1
- typeprovider × 1
- ui next forms × 1
- ui-next × 1
- ui.next jqueryui × 1
- ui.next charting × 1
- ui.next formlets × 1
- ui.next forms × 1
- ui.next suave visualstudio × 1
- ui.next templating × 1
- unicode × 1
- unittest client × 1
- upload × 1
- usersession × 1
- validation × 1
- vb × 1
- vb.net × 1
- vector × 1
- view.map × 1
- visal studio × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio 2012 × 1
- visual studio shell × 1
- vs2017 compiler zafir × 1
- vsix × 1
- web api × 1
- web-scraping × 1
- webapi × 1
- webcomponents × 1
- webforms × 1
- webgl × 1
- webrtc × 1
- webshaper × 1
- websharper async × 1
- websharper codemirror × 1
- websharper f# google × 1
- websharper forms × 1
- websharper reactive × 1
- websharper rpc × 1
- websharper sitelets routing × 1
- websharper warp × 1
- websharper-interface-generator × 1
- websharper.chartsjs × 1
- websharper.com × 1
- websharper.exe × 1
- websharper.owin × 1
- websharper.ui.next × 1
- websharper.ui.next jquery × 1
- websockets iis × 1
- why-websharper × 1
- windows 7 × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- www.grabbitmedia.com × 1
- xamarin × 1
- xml × 1
- yeoman × 1
- yield × 1
- zafir beta × 1
- zafir websharper4 × 1
- zarovizsga × 1
![]() |
Copyright (c) 2011-2012 IntelliFactory. All rights reserved. Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy |
Built with WebSharper |
I have a function a part of a template parser:
This code does what I need it do, except one strange thing - on one computer I am getting a stack overflow exeption. The call stack does not contain any reference to my code. By placing Debug.WriteLine statements I localized the statement causing the stack overflow - it is the
statement. It is only happening on my Vista/ x64 box and does not happen on a half a dozen other computers (all 32 bit). The stack overflow is only happening on a template of a considerable size (400+ tokens). But the same template is processed just fine on all other computers.
Any idea what can cause a stack overflow in the Seq.hd?
Just in case if it can tell you anything here is 2 frames of the call stack I am getting:
FSharp.PowerPack.dll!Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>.Force.get() + 0x22d bytes
FSharp.PowerPack.dll!<StartupCode$FSharp.PowerPack>.$Lazylist.clo@30_1<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token> ll = {Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>}) + 0x4f bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.IEnumerator.clo@151<NDjango.Lexer.Token,Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>>.System-Collections-IEnumerator-MoveNext() + 0x9c bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.clo@1087_1<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Core.Unit dummy = null) + 0x5b bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.SequenceExpressionHelpers.clo@786<NDjango.Lexer.Token>.System-Collections-IEnumerator-MoveNext() + 0x86 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.takeOuter@665@665<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>(Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>> x@665 = {Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>}, Microsoft.FSharp.Core.Unit _unit = null) + 0x81 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.takeInner@658@658<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>(Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>> x@658 = {Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>}, Microsoft.FSharp.Core.Unit _unit = null) + 0x1cc bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>.System-Collections-IEnumerator-MoveNext() + 0xee bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Generator.clo@464<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Core.Unit _unit = null) + 0x66 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Generator.appG<NDjango.Lexer.Token>(Microsoft.FSharp.Collections.Generator.Generator<NDjango.Lexer.Token> g = {Microsoft.FSharp.Collections.Generator.LazyGeneratorWrappingEnumerator<NDjango.Lexer.Token>}) + 0xd6 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Generator.EnumeratorWrappingLazyGenerator<NDjango.Lexer.Token>.System-Collections-IEnumerator-MoveNext() + 0xf1 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.IEnumerator.clo@289<NDjango.Lexer.Token>.System-Collections-IEnumerator-MoveNext() + 0x56 bytes
FSharp.PowerPack.dll!Microsoft.FSharp.Collections.LazyListModule.f@207<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Core.Unit _unit = null) + 0x62 bytes
FSharp.PowerPack.dll!Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>.Force.get() + 0x314 bytes
FSharp.PowerPack.dll!<StartupCode$FSharp.PowerPack>.$Lazylist.clo@30_1<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token> ll = {Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>}) + 0x4f bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.IEnumerator.clo@151<NDjango.Lexer.Token,Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>>.System-Collections-IEnumerator-MoveNext() + 0x9c bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.clo@1087_1<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Core.Unit dummy = null) + 0x5b bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.SequenceExpressionHelpers.clo@786<NDjango.Lexer.Token>.System-Collections-IEnumerator-MoveNext() + 0x86 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.takeOuter@665@665<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>(Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>> x@665 = {Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>}, Microsoft.FSharp.Core.Unit _unit = null) + 0x81 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.takeInner@658@658<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>(Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>> x@658 = {Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>}, Microsoft.FSharp.Core.Unit _unit = null) + 0x1cc bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Seq.ConcatEnumerator<NDjango.Lexer.Token,System.Collections.Generic.IEnumerable<NDjango.Lexer.Token>>.System-Collections-IEnumerator-MoveNext() + 0xee bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Generator.clo@464<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Core.Unit _unit = null) + 0x66 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Generator.appG<NDjango.Lexer.Token>(Microsoft.FSharp.Collections.Generator.Generator<NDjango.Lexer.Token> g = {Microsoft.FSharp.Collections.Generator.LazyGeneratorWrappingEnumerator<NDjango.Lexer.Token>}) + 0xd6 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.Generator.EnumeratorWrappingLazyGenerator<NDjango.Lexer.Token>.System-Collections-IEnumerator-MoveNext() + 0xf1 bytes
FSharp.Core.dll!Microsoft.FSharp.Collections.IEnumerator.clo@289<NDjango.Lexer.Token>.System-Collections-IEnumerator-MoveNext() + 0x56 bytes
FSharp.PowerPack.dll!Microsoft.FSharp.Collections.LazyListModule.f@207<NDjango.Lexer.Token>.Invoke(Microsoft.FSharp.Core.Unit _unit = null) + 0x62 bytes
FSharp.PowerPack.dll!Microsoft.FSharp.Collections.LazyList<NDjango.Lexer.Token>.Force.get() + 0x314 bytes