Now you may do the following tests:

Try:

val ins = streamize_string_char("a;b") // should work

Try:

val ins = streamize_string_char("a;b\n") // may not work

Try:

val ins = streamize_string_char("a;b\015\012") // should cause crash

On Thursday, March 2, 2017 at 9:21:21 PM UTC-5, gmhwxi wrote:
>
> When tried, I saw the following 5 chars (ascii) in small.csv:
>
> 97
> 59
> 98
> 13
> 10
>
> My testing code:
>
> #include"share/atspre_staload.hats"
> #include"share/HATS/atspre_staload_libats_ML.hats"
>
> implement main0 () = {
>   val inp = fileref_open_exn("small.csv", file_mode_r)
>   val ins = streamize_fileref_char(inp)
>   val ins = stream2list_vt(ins)
>   val ins = g0ofg1(list_vt2t(ins))97
>   val ( ) = println! ("length(ins) = ", length(ins))
>   val ( ) = (ins).foreach()(lam c => println!(char2int0(c)))
> (*
>   val lexed = lex_csv(true, ';', ins)
> *)
>   val () = fileref_close(inp)
> (*
>   val h = (lexed.head())
>   val- CSV_Field(r) = h
>   val a = r.csvFieldContent
>   val () = println!(a)
> *)
> }
>
>
>
> On Thu, Mar 2, 2017 at 9:13 PM, August Alm <...> wrote:
>
>> Just "a;b", or? (Attached.)
>>
>> Den fredag 3 mars 2017 kl. 03:03:08 UTC+1 skrev gmhwxi:
>>>
>>> I suspect that the file you used contains other characters.
>>>
>>> What is in "small.csv"?
>>>
>>> On Thu, Mar 2, 2017 at 8:52 PM, August Alm <...> wrote:
>>>
>>>> The file compiles (I've tried a few compiler options) and "gdb run" 
>>>> yields
>>>>
>>>>     Program received signal SIGSEGV, Segmentation fault.
>>>>     0x00007ffff783eea5 in _int_malloc (av=0x7ffff7b6a620 <main_arena>, 
>>>> bytes=16) at malloc.c:3790
>>>>
>>>> The frames 0-3 involve allocation functions that are not particular to 
>>>> my file. Frame 4 says:
>>>>
>>>>     #4  __patsfun_28__28__14 (arg0=<optimized out>, env1=0x605540, 
>>>> env0=10 '\n') at csv_lexer_dats.c:9023
>>>>     9023    ATSINSmove_con1_new(tmpret63__14, postiats_tysum_7) ;
>>>>
>>>> My not-so-educated guess is that this refers to making a cons-cell of a 
>>>> stream.
>>>>
>>>> But: How can my function do just fine when manually fed 
>>>>  
>>>>     cons('a', cons( ';', sing('b'))): stream_vt(char), 
>>>>
>>>> but segfault when I use [streamize_fileref_char] to construct the very 
>>>> same stream from the string "a;b" in a file? Where is the room for an 
>>>> infinite recursion in that?
>>>>
>>>> Thank you,
>>>> August
>>>>
>>>>
>>>> Den torsdag 2 mars 2017 kl. 23:04:35 UTC+1 skrev August Alm:
>>>>>
>>>>> Hi!
>>>>>
>>>>> I'm in over my head and tried writing a CSV-parser using linear lazy 
>>>>> streams. My code thus far is 600 lines and almost to my own surprise I 
>>>>> get 
>>>>> it to compile! However, there is something fishy because I get a segfault 
>>>>> when applying my program to an actual CSV-file. I've been trying to debug 
>>>>> using gdb but the fault eludes me. Since I don't expect anyone to mull 
>>>>> through 600 lines of code, I am hoping these code snippets are enough for 
>>>>> one of you guys to give me some advice.
>>>>>
>>>>> This code executes just fine:
>>>>>
>>>>>         implement main0 () = {
>>>>>            
>>>>>            val test = stream_vt_make_cons(
>>>>>                             'a', stream_vt_make_cons(
>>>>>                                     ';', 
>>>>> stream_vt_make_sing('b')))          (* the stream ('a', ';', 'b') *)
>>>>>            val lexed = lex_csv(true, ';', test)
>>>>>            val h = (lexed.head())
>>>>>            val- CSV_Field(r) = h
>>>>>            val a = r.csvFieldContent
>>>>>            val () = println!(a)
>>>>>          
>>>>>          }
>>>>>
>>>>> Here [lex_csv] is my 600-line alogrithm. It reads a [stream_vt(char)] 
>>>>> and gives back a [stream_vt(CSVEntry)], where [CSVEntry] is a record 
>>>>> type, 
>>>>> one of whose fields is [CSVFieldContent]. When executing the program I 
>>>>> get 
>>>>> "a" printed to the console.
>>>>>
>>>>> This code results in a segfault:
>>>>>
>>>>>         implement main0 () = {
>>>>>         
>>>>>            val inp = fileref_open_exn("small.csv", file_mode_r)
>>>>>            val ins = streamize_fileref_char(inp)
>>>>>            val lexed = lex_csv(true, ';', ins)
>>>>>            val () = fileref_close(inp)
>>>>>            val h = (lexed.head())
>>>>>            val- CSV_Field(r) = h
>>>>>            val a = r.csvFieldContent
>>>>>            val () = println!(a)
>>>>>          
>>>>>          }
>>>>>
>>>>> The file "small.csv" only contains the string "a;b". Hence I would 
>>>>> expect this code to give the result as the previous one! But, it doesn't 
>>>>> just return something else, it segfaults.
>>>>>
>>>>> gdb indicates there is a malloc problem having to do with 
>>>>> "GC_clear_stack_inner", in case that's helpful. (I'm a mathematician who 
>>>>> recently left academia after postdoc and decided to teach myself 
>>>>> programming to become more useful outside of academia; hence I understand 
>>>>> type systems and the like--the mathy stuff--a lot better than I 
>>>>> understand 
>>>>> memory allocation and other stuff that most programmers are supposed to 
>>>>> be 
>>>>> confident with.)
>>>>>
>>>>> What could be the problem here?
>>>>>
>>>>> Best wishes,
>>>>> August
>>>>>
>>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "ats-lang-users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to ats-lang-user...@googlegroups.com.
>>>> To post to this group, send email to ats-lan...@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/ats-lang-users.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/ats-lang-users/69535c5c-eac3-472c-bb39-062ad4708a72%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/ats-lang-users/69535c5c-eac3-472c-bb39-062ad4708a72%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "ats-lang-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to ats-lang-users+unsubscr...@googlegroups.com.
>> To post to this group, send email to ats-lang-users@googlegroups.com.
>> Visit this group at https://groups.google.com/group/ats-lang-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ats-lang-users/e608c7bb-42ce-457b-a606-9fe3525f801d%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ats-lang-users/e608c7bb-42ce-457b-a606-9fe3525f801d%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To post to this group, send email to ats-lang-users@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/9dbd2355-9149-4ea9-920f-fe4fe603db4f%40googlegroups.com.

Reply via email to