Yukihiro "Matz" Matsumoto
dc21024ec7
Fix mrb_str_to_str() to handle symbols.
2019-06-25 18:07:48 +09:00
Yukihiro "Matz" Matsumoto
ace0c76a69
Renamed stacked to onstack; ref #4523
2019-06-25 18:07:48 +09:00
Ryan Lopopolo
46c972f746
Unify loops to minimize bytecode size
2019-06-25 00:01:51 +02:00
KOBAYASHI Shuji
f71270df77
Compare obj pointer directly instead of using mrb_obj_eq in mrb_gc_unregister
...
Because immediate values are not registered.
2019-06-24 18:55:05 +09:00
KOBAYASHI Shuji
1fd08aee15
Fix argument specs to Array
2019-06-23 20:01:33 +09:00
Ryan Lopopolo
6b92acf361
Use explicit block parameter
2019-06-23 03:40:39 +01:00
Ryan Lopopolo
8ea45b862a
Optimize String#each_line
2019-06-23 03:29:47 +01:00
Yukihiro "Matz" Matsumoto
cb3ee2d050
Merge pull request #4526 from shuujii/refine-Hash-rehash-example
...
Refine `Hash#rehash` example [ci skip]
2019-06-23 10:56:41 +09:00
Yukihiro "Matz" Matsumoto
af9637e545
Merge pull request #4523 from dearblue/use-stack
...
Use stack memory for small name of Struct members
2019-06-23 10:51:34 +09:00
Yukihiro "Matz" Matsumoto
36f1c26d9d
Merge pull request #4525 from dearblue/utf8len-overflow
...
Fix potential overflow in `utf8len()`
2019-06-23 10:50:19 +09:00
dearblue
11e09dc5db
Fix the unnecessary mrb_str_modify() call
...
Now to be calls `mrb_str_modify()` only once when 2 or more characters.
2019-06-22 23:09:36 +09:00
dearblue
ec03e3f54a
Delete the unnecessary block brace in mrb_str_reverse_bang
2019-06-22 23:02:29 +09:00
dearblue
567075aab9
Fix string brakes for one UTF-8 charactor
2019-06-22 22:58:18 +09:00
dearblue
5af8a9777b
Add test for one UTF-8 charactor
2019-06-22 22:58:08 +09:00
dearblue
bd2c93c2df
Change to UTF-8 string reversing with in place
...
Reverses UTF-8 strings without allocated heap for working memory.
1. String before reversing:
```
"!yburmの界世"
# byte unit
[33, 121, 98, 117, 114, 109, 227, 129, 174, 231, 149, 140, 228, 184, 150]
```
2. Reverse the byte order of each character:
```
[33, 121, 98, 117, 114, 109, 174, 129, 227, 140, 149, 231, 150, 184, 228]
```
3. Reverse the whole byte order and complete:
```
[228, 184, 150, 231, 149, 140, 227, 129, 174, 109, 114, 117, 98, 121, 33]
# string
"世界のmruby!"
```
2019-06-22 22:36:58 +09:00
dearblue
7c6d6effae
Replacement to function for string reversing
2019-06-22 22:36:58 +09: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
KOBAYASHI Shuji
28de6b0da1
Refine Hash#rehash example [ci skip]
...
Previous example doesn't work because string key (frozen) can't be modified.
2019-06-22 19:07:01 +09:00
dearblue
7583539029
Fix potential overflow in utf8len()
...
For example on 32 bit mode, when `p = 0xfffffffd`, `e = 0xfffffffe`
and `len = 4`, the sum of `p` and `len` can be to `1`, and comparison
with `e` will to be false.
As a result, a segmentation fault occurs by referring to address 0.
2019-06-22 18:16:38 +09: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
dearblue
a76da32567
Use stack memory for small name of Struct members
2019-06-22 17:49:07 +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
KOBAYASHI Shuji
4d9d6faf0d
Remove unneeded statement in SET_OBJ_VALUE with boxing_word.h
...
`(r).value.bp` and `v` have the same value due to assignment of the line
preceding the removed line.
2019-06-19 17:50:20 +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
KOBAYASHI Shuji
81828f8b08
Fix struct RRange overflow on 32-bit CPU with MRB_NAN_BOXING
2019-06-18 18:17:03 +09:00
Hiroshi Mimaki
b630bf59ef
Fix path of error.h.
2019-06-18 13:27:16 +09:00
Ryan Lopopolo
eeb7d3a04f
Support parsing a Regexp literal with 'o' option
...
CRuby supports a 'o' `Regexp` option for `Regexp` literals, e.g. `/foo/o` that disables multiple interpolation passes.
This commit adds support for parsing such literals. Nothing is done with the option, it is consumed and ignored by the parser.
2019-06-17 21:42:19 +01: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