[#48591] StringValuePtrでnull終止されてない文字列の作り方 — madoka yamamoto <yamamotomadoka@...>
山本ともうします。
5 messages
2014/10/05
[#48598] Re: StringValuePtrでnull終止されてない文字列の作り方
— "NARUSE, Yui" <naruse@...>
2014/10/06
まず、CRubyとしてはStringValuePtrがNUL終端する保証はしていませんから、仮にnull-terminateしてないことにより問題が起きるならば、
[#48666] Re: [ruby-cvs:55171] duerst:r48021 (trunk): common.mk: Added a rule to generate lib/unicode_normalize/tables.rb. — "Martin J. Dürst" <duerst@...>
中田さん、こんにちは。
3 messages
2014/10/19
[ruby-dev:48703] [ruby-trunk - Bug #10405] syntax error inconsistency between ruby -c and ripper
From:
akr@...
Date:
2014-10-25 00:33:48 UTC
List:
ruby-dev #48703
Issue #10405 has been updated by Akira Tanaka.
なるほど。
でも、やはり nil がいいかなぁ、と思います。
ありうる挙動は、nil を返すか、例外を起こすかだと思うのですが、
いままで例外を起こしていなかったものについて例外を起こすようにするのは非互換ですし。
また、parse という処理にとって、syntax error は当然想定されるもので例外的ではない気がします。
なお、gem をちょっと探してみると、以下のように、syntax error のときに nil を返してくると想定している
と思われるコードはいくつかありました。
(例外を想定しているコードは見つかりません。)
```
phaad-0.0.3/lib/phaad/cli.rb- def valid_expression?(lines)
phaad-0.0.3/lib/phaad/cli.rb: !!Ripper.sexp(lines)
phaad-0.0.3/lib/phaad/cli.rb- end
printrun-0.0.1/lib/printrun/core.rb: Ripper.sexp_raw(buffer) ? (out << buffer) && "" : buffer
tailor-1.4.0/lib/tailor/lexer/token.rb: sexp_line = Ripper.sexp(line_of_text)
tailor-1.4.0/lib/tailor/lexer/token.rb-
tailor-1.4.0/lib/tailor/lexer/token.rb- if sexp_line.nil?
```
----------------------------------------
Bug #10405: syntax error inconsistency between ruby -c and ripper
https://bugs.ruby-lang.org/issues/10405#change-49635
* Author: Akira Tanaka
* Status: Feedback
* Priority: Normal
* Assignee:
* Category: ext
* Target version: current: 2.2.0
* ruby -v: ruby 2.2.0dev (2014-10-20 trunk 48052) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
以下のように、a / b c という内容のファイルを
ruby -c で検査すると syntax error になるのですが
Ripper.sexp に適用するとなにか構文木が返ってきます。
```
% cat z.rb
a / b c
% ./ruby -c z.rb
z.rb:1: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
zsh: exit 1 ./ruby -c z.rb
% ./ruby -rripper -e 'p Ripper.sexp(STDIN.read)' < z.rb
[:program, [:vcall, [:@ident, "c", [1, 6]]]]
% ./ruby -v
ruby 2.2.0dev (2014-10-20 trunk 48052) [x86_64-linux]
```
これは変な気がするんですがどうでしょうか。
--
https://bugs.ruby-lang.org/