New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Expressions like 3#0;; are ignored by the toplevel and the compiler #6604
Comments
Comment author: @yallop The '#0' is a way of setting the line number for error messages; it's used in tools like ocamlyacc. $ cat lines1.ml |
Comment author: @damiendoligez If possible, we should find a way to disable it in the toplevel. Also, make it more robust by making the filename string mandatory. Even better, only accept it at the beginning of a line (simply make the \n part of the token). |
Comment author: @xavierleroy The '# lineno filename' directive is handled directly within the lexer, so it is not particularly natural to turn it off in the toplevel. I agree with making the filename string mandatory. The filename is always there in '# lineno filename' directives generated by ocamllex, ocamlyacc, gcc -E and clang -E. Recognizing '#' only at beginning of line would make things more robust too. However, it's not good enough to just recognize "\n#", because it doesn't work for the first line. gcc -E and clang -E will gladly generate '# lineno filename' as the first line of output. |
Comment author: @xavierleroy See ongoing work in #931 |
Comment author: @gasche Fixed in trunk (will not be in 4.06) by the aforementioned PR from Tadeu Zagallo. |
reflects the change from ocaml#931 / ocaml#6604
reflects the change from ocaml#931 / ocaml#6604
reflects the change from ocaml#931 / ocaml#6604
Original bug ID: 6604
Reporter: rdicosmo
Assigned to: @gasche
Status: resolved (set by @gasche on 2017-10-04T09:07:17Z)
Resolution: fixed
Priority: normal
Severity: minor
Target version: 4.06.0 +dev/beta1/beta2/rc1
Fixed in version: 4.07.0+dev/beta2/rc1/rc2
Category: lexing and parsing
Tags: junior_job
Bug description
The very simple syntactically incorrect expression 3#0;; is simply ignored both by the toplevel and the compiler. On the other hand, 3#foo;; is handled properly
Steps to reproduce
Just type 3#0;; in any toplevel (tested 3.12 , 4.00, 4.01 and 4.02)
$ ocaml
OCaml version 4.01.0
3#0;;
^CInterrupted.
3#foo;;
Error: This expression has type int
It has no method foo
Or try to compile a file containing the single line
3#0;;
Additional information
The interpreter executed via js_of_ocaml (see try.ocamlpro.org, for example) does not exhibit this behaviour.
Welcome to TryOCaml (v. 4.01.0)
3#0;;
File "", line 1, characters 2-3:
Error: Syntax error
File "", line 1, characters 3-5:
Error: Syntax error
The text was updated successfully, but these errors were encountered: