Ryan Lopopolo
8ea45b862a
Optimize String#each_line
2019-06-23 03:29:47 +01:00
Ryan Lopopolo
a932b8c96a
Speed up base case by 2x
...
Make non-paragraph mode twice as fast. Performance is within a factor of 2
of the original implementation.
2019-06-22 12:55:02 +01:00
Ryan Lopopolo
0f516bbe1d
Add paragraph mode to String#each_line in mrblib
...
mruby/mruby#4511 demonstrated an infinite loop in `String#each_line` when
given an empty string separator. In MRI, an empty separator places
String#each_line in paragraph mode, where the String is separated on
successive runs of newlines. In paragraph mode, the String
`"abc\n\n\ndef\nxyz"` is split into `["abc\n\n\n", "def\nxyz"]`.
This commit makes the String#each_line implementation as close to
ruby/spec compliant as possible given the limitations of mruby core.
With this patch, the following specs fail for `String#each_line`:
- uses `$/` as the separator when none is given (can be fixed by
aliasing and redefining the method to use $/ as the default value
of separator in mruby-io)
- when no block is given returned Enumerator size should return nil
(`Enumerator#size` is not supported on mruby)
- tries to convert the separator to a string using to_str (`String#to_str`
is not implemented on mruby)
This patch has similar memory consumption compared to the prior
implementation and is takes 4x the time the prior implementation takes to
execute:
```console
/usr/bin/time -l ./bin/mruby -e '("aaa\n\nbbbbb\n\n\n\n\ncccc" * 100000).each_line("\n") { }';
```
2019-06-22 12:31:01 +01:00
Yukihiro "Matz" Matsumoto
f94551ad40
Merge pull request #4518 from shuujii/add-ISO-section-number-to-Kernel-local_variables
...
Add ISO section number to `Kernel.#local_variables` [ci skip]
2019-06-22 17:52:32 +09:00
Yukihiro "Matz" Matsumoto
f13c5969eb
Merge pull request #4521 from shuujii/move-Kernel-__send__-test-to-core-from-mruby-metaprog
...
Move `Kernel#__send__` test to core from `mruby-metaprog`
2019-06-22 16:14:44 +09:00
KOBAYASHI Shuji
c43ff6fa40
Move Kernel#__send__ test to core from mruby-metaprog
2019-06-21 22:02:29 +09:00
KOBAYASHI Shuji
77996e6adc
Add ISO section number to Kernel.#local_variables [ci skip]
2019-06-20 19:59:56 +09:00
Yukihiro "Matz" Matsumoto
c53b7cedcc
Merge pull request #4510 from shuujii/remove-unneeded-mrb_str_dup-in-Module-name
...
Remove unneeded `mrb_str_dup()` in `Module#name`
2019-06-19 08:50:14 +09:00
Yukihiro "Matz" Matsumoto
791391cf5b
Merge pull request #4514 from mimaki/fix-error.h
...
Fix path of `error.h`.
2019-06-19 07:58:57 +09:00
Hiroshi Mimaki
b630bf59ef
Fix path of error.h.
2019-06-18 13:27:16 +09:00
KOBAYASHI Shuji
faec8331b7
Remove unneeded mrb_str_dup() in Module#name
...
`mrb_class_path()` always returns a new string or `nil`.
2019-06-17 21:46:30 +09:00
Yukihiro "Matz" Matsumoto
1685c459dd
Merge pull request #4508 from shuujii/fix-cvar-ivar-const-and-method-can-be-removed-to-frozen-object
...
Fix cvar, ivar, const and method can be removed to frozen object
2019-06-17 12:22:33 +09:00
Yukihiro "Matz" Matsumoto
e514264b53
Merge pull request #4507 from shuujii/fix-index-in-error-message-of-Struct-aref
...
Fix index in error message of `Struct#[]`
2019-06-17 12:21:48 +09:00
Yukihiro "Matz" Matsumoto
0fba500826
Fixed indentation in parse.y
2019-06-17 12:18:57 +09:00
Yukihiro "Matz" Matsumoto
4296c77e29
Allow newlines and comments between method calls.
2019-06-17 12:18:57 +09:00
Yukihiro "Matz" Matsumoto
4124047cce
Support &. at the beginning of the line.
2019-06-17 12:18:57 +09:00
Yukihiro "Matz" Matsumoto
d895c5fe5a
Fixed wrong behavior on .. at the beginning of the line.
2019-06-17 12:18:57 +09:00
Yukihiro "Matz" Matsumoto
c1901539a8
Merge pull request #4502 from shuujii/adjust-allocation-size-in-mrb_id_attrset-mruby-struct
...
Adjust allocation size in `mrb_id_attrset()` (`mruby-struct`)
2019-06-17 12:18:48 +09:00
KOBAYASHI Shuji
030dd6655e
Fix cvar, ivar, const and method can be removed to frozen object
2019-06-16 20:43:23 +09:00
KOBAYASHI Shuji
9e378b451f
Fix index in error message of Struct#[]
...
Before this patch:
$ bin/mruby -e 'Struct.new(:a,:b).new[-3]'
#=> offset -1 too small for struct(size:2) (IndexError)
After this patch (same as Ruby):
$ bin/mruby -e 'Struct.new(:a,:b).new[-3]'
#=> offset -3 too small for struct(size:2) (IndexError)
2019-06-15 19:41:04 +09:00
Yukihiro "Matz" Matsumoto
ab5ffb308b
Merge pull request #4506 from shuujii/remove-a-meaningless-branch-condition-in-mruby-struct
...
Remove a meaningless branch condition in `mruby-struct`
2019-06-14 13:42:58 +09:00
KOBAYASHI Shuji
6084048b28
Remove a meaningless branch condition in mruby-struct
...
The following branch condition is always true:
// mrbgems/mruby-struct/src/struct.c:187 in make_struct_define_accessors()
if (is_local_id(mrb, name) || is_const_id(mrb, name)) {
2019-06-14 10:26:19 +09:00
Yukihiro "Matz" Matsumoto
27109d1ae0
Merge pull request #4505 from shuujii/fix-class-name-validation-in-Struct.new
...
Fix class name validation in `Struct.new`
2019-06-14 06:22:57 +09:00
KOBAYASHI Shuji
9bd692bc67
Fix class name validation in Struct.new
...
Before this patch:
$ bin/mruby -e 'p Struct.new("A-")'
#=> Struct::"A-"
After this patch:
$ bin/mruby -e 'p Struct.new("A-")'
#=> NameError: identifier A- needs to be constant
2019-06-13 21:24:48 +09:00
Yukihiro "Matz" Matsumoto
1a98b94100
Merge pull request #4500 from shuujii/kernel-global_variables-should-not-include-undefined-gvar
...
`Kernel#global_variables` should not include undefined `$1`-`$9`
2019-06-13 10:24:45 +09:00
Yukihiro "Matz" Matsumoto
e2e312dbfc
Merge pull request #4503 from shuujii/fix-typo-in-String-setbyte-error-message
...
Fix typo in `String#setbyte` error message
2019-06-13 10:24:11 +09:00
KOBAYASHI Shuji
db3e6f6ac6
Fix typo in String#setbyte error message
2019-06-12 20:45:27 +09:00
KOBAYASHI Shuji
ee955b58f7
Adjust allocation size in mrb_id_attrset() (mruby-struct)
2019-06-12 18:52:58 +09:00
Yukihiro "Matz" Matsumoto
b8d8f8fdae
Merge pull request #4501 from shuujii/remove-redundant-colon-in-Proc-inspect-mruby-proc-ext
...
Remove redundant colon in `Proc#inspect` (`mruby-proc-ext`)
2019-06-11 20:53:39 +09:00
KOBAYASHI Shuji
3b9b326d3c
Remove redundant colon in Proc#inspect (mruby-proc-ext)
...
Before this patch:
$ bin/mruby -e 'p proc{}' #=> #<Proc:0x7fd5eb8206d0@-e::1>
After this patch:
$ bin/mruby -e 'p proc{}' #=> #<Proc:0x7fd5eb8206d0@-e:1>
2019-06-11 20:33:07 +09:00
Yukihiro "Matz" Matsumoto
313059d08c
Merge pull request #4496 from dearblue/replace-obsolete
...
Replace obsolete macros
2019-06-11 09:36:15 +09:00
KOBAYASHI Shuji
38f1da6f26
Kernel#global_variables should not include undefined $1-$9
...
- They are not include in Ruby.
- Appear in duplicate when `$1`-`$9` are defined.
2019-06-10 18:46:57 +09:00
Yukihiro "Matz" Matsumoto
04999e969f
Merge pull request #4495 from shuujii/remove-Kernel-global_variables-from-core
...
Remove `Kernel#global_variables` from core
2019-06-10 15:42:33 +09:00
Yukihiro "Matz" Matsumoto
7cfa4d6011
Merge pull request #4494 from shuujii/clarify-mruby-kernel-object-ext-gem-summary
...
Clarify `mruby-(kernel|object)-ext` gem summary; ref 8e637bdd [ci skip]
2019-06-10 15:40:41 +09:00
Yukihiro "Matz" Matsumoto
a9e94d43b3
Merge pull request #4499 from shuujii/fix-missing-assertions-in-test-t-syntax.rb
...
Fix missing assertions in `test/t/syntax.rb`
2019-06-10 15:39:56 +09:00
KOBAYASHI Shuji
ffb700dea0
Fix missing assertions in test/t/syntax.rb
2019-06-09 18:27:28 +09:00
Yukihiro "Matz" Matsumoto
a7ae278d1a
Merge pull request #4497 from shuujii/remove-Check-the-usage-of-a-NUL-character-test
...
Remove "Check the usage of a NUL character" test
2019-06-09 07:57:51 +09:00
KOBAYASHI Shuji
2e160f53db
Remove "Check the usage of a NUL character" test
...
Because there is not assertion in this test and NUL character literal is
used in other tests.
2019-06-08 22:32:19 +09:00
dearblue
f8f75fc9c6
Replace obsolete macros
2019-06-07 22:54:03 +09:00
KOBAYASHI Shuji
4b83fe8b04
Remove Kernel#global_variables from core
...
This method is defined in `mruby-metaprog` gem.
2019-06-07 22:02:43 +09:00
KOBAYASHI Shuji
05493e651d
Clarify mruby-(kernel|object)-ext gem summary; ref 8e637bdd [ci skip]
2019-06-06 20:21:40 +09:00
Yukihiro "Matz" Matsumoto
2847692d59
Merge pull request #4491 from shuujii/fix-missing-assertions-in-test-t-module.rb
...
Fix missing assertions in `test/t/module.rb`
2019-06-05 23:10:36 +09:00
KOBAYASHI Shuji
dc1905e1bd
Fix missing assertions in test/t/module.rb
2019-06-05 19:13:36 +09:00
Yukihiro "Matz" Matsumoto
913a148ddc
Merge pull request #4489 from shuujii/fIx-typo-in-mrblib-range.rb
...
Fix typo in `mrblib/range.rb` [ci skip]
2019-06-05 01:46:58 +09:00
Yukihiro "Matz" Matsumoto
d47d561da3
Merge pull request #4490 from dearblue/explicit-cast
...
Need explicit cast for C++
2019-06-05 01:45:37 +09:00
dearblue
81ea89f10e
Need explicit cast for C++
2019-06-04 21:41:40 +09:00
KOBAYASHI Shuji
c75402a57b
Fix typo in mrblib/range.rb [ci skip]
2019-06-04 10:45:13 +09:00
Yukihiro "Matz" Matsumoto
3b061a90fe
Merge pull request #4485 from shuujii/fix-missing-assertions-in-mruby-objectspace-test
...
Fix missing assertions in `mruby-objectspace` test
2019-06-02 22:11:43 +09:00
KOBAYASHI Shuji
92f00d3e58
Fix missing assertions in mruby-objectspace test
2019-06-02 19:15:20 +09:00
Yukihiro "Matz" Matsumoto
366617dbc1
Merge pull request #4482 from shuujii/comment-out-the-empty-Array-bsearch_index-test
...
Comment out the empty `Array#bsearch_index` test
2019-06-01 11:02:07 +09:00