Yukihiro "Matz" Matsumoto
905bb7366b
string.c: combine variable declaration with initialization
2025-10-25 15:50:41 +09:00
Yukihiro "Matz" Matsumoto
07b803e28a
docs: replace xml-style markup with markdown in comments
...
Replace XML-style markup tags in comments with markdown equivalents:
- <code>...</code> to `...` (inline code)
- <tt>...</tt> to `...` (teletype/monospace)
- <i>...</i> to *...* (italics/emphasis)
- +...+ to `...` (parameter/variable references)
Updated 80+ files across core source, headers, mrbgems, and libraries
to use consistent markdown formatting in documentation comments.
Handled edge cases including special characters like <=> operators.
Co-authored-by: Atlassian Rovo Dev
2025-08-14 10:52:49 +09:00
Yukihiro "Matz" Matsumoto
ff2464e879
string.c: make String#initialize_copy private
2025-06-15 14:11:54 +09:00
google-labs-jules[bot]
5924a23b8d
Here's the rewritten message:
...
Add descriptive comments for MRB_API functions in src/string.c
This commit adds descriptive comments to various MRB_API functions
within the src/string.c file. These comments aim to improve code
readability and maintainability by explaining the purpose,
parameters, and return values of these functions.
2025-05-31 13:44:19 +00:00
Yukihiro "Matz" Matsumoto
0c51a72bfe
string.c (popcount): support when sizeof(int) == 4
...
This function is used when the compiler does not support builtin
popcount operation (namely VC++).
2025-05-23 23:10:45 +09:00
Yukihiro "Matz" Matsumoto
8b213c4fbf
string.c (sub_replace): check if found argument is within proper range
...
Since it is an internal method, we didn't check the argument range, but
if it's called directly, out-of-range argument could cause SEGV.
2025-04-15 07:11:09 +09:00
Yukihiro "Matz" Matsumoto
a55e3685a9
string.c: rename local variable indx to idx
...
`indx` seems not to be a common abbreviation.
2025-03-18 10:40:30 +09:00
dearblue
76fc6e9ace
Fixed buffer overrun in function chars2bytes()
...
If `off` was greater than zero, the address pointed to by `e` exceeded the valid range of the buffer.
2025-02-26 21:22:37 +09:00
Yukihiro "Matz" Matsumoto
187f27b00b
string.c (char_adjust): align arguments with char_backtrack
...
Also remove the unused argument.
2025-01-12 23:13:28 +09:00
Yukihiro "Matz" Matsumoto
a67c8f9335
string.c: use byte index for a string with binary encoding
2025-01-12 23:13:28 +09:00
Yukihiro "Matz" Matsumoto
c18cd60c4b
string.h: remove unused flag unset macros
2025-01-12 23:13:27 +09:00
Yukihiro "Matz" Matsumoto
0098654e1f
string.h: rename MRB_STR_EMBED_LEN_BITS (use plurality for bit width)
2025-01-12 23:13:26 +09:00
Yukihiro "Matz" Matsumoto
0a5acc0303
string.c (str_unshare_buffer): renamed function for more intuitive name
...
The old name `str_modify_keep_ascii` does not describe the function
behavior. It was named so since it was separated from the function
`mrb_str_modify_keep_ascii`.
2025-01-12 23:13:25 +09:00
Yukihiro "Matz" Matsumoto
4582cc8579
string.c: rename type setting macro
2025-01-03 09:29:43 +09:00
John Bampton
e12da35645
Fix spelling
2024-09-24 00:14:24 +10:00
HASUMI Hitoshi
cc16afb7f3
mrb_str_aset_m() should return replace instead of str
...
`string[]=(idx, replace)` should return `replace`.
## Actual (wrong)
```
string.[]=(idx, replace) → string
string.[]=(idx, len, replace) → string
```
## Expected
```
string.[]=(idx, replace) → replace
string.[]=(idx, len, replace) → replace
```
## Sidenote
As of the current mruby-compiler, `(string[idx] = 'X')` creates not only "CALL_NODE" but also "ASGN_NODE" and "OP_MOVE", overriding the wrong return value.
On the other hand, `string.[]=(idx, 'X')` creates only "CALL_NODE", exposing the wrong return value.
If my new mruby-compiler2, leveraging Prism, took the place of official compiler, `(string[idx] = 'X')` and `string.[]=(idx, 'X')` would be going to generate the same VM code without "OP_MOVE".
So I paranoidly added tests.
FYI: You can find how the new mruby-compiler2's AST and VM code look like in mruby/c's issue (mruby/c had the same bug): https://github.com/mrubyc/mrubyc/pull/210
2024-07-16 18:55:26 +09:00
Aurora Nockert
a871e4908f
Minor cleanup in mrb_str_init
...
mrb_str_new was essentially manually inlined here, and I think it is a bit easier to follow if we just call the function instead.
2024-07-13 15:38:14 +02:00
Yukihiro "Matz" Matsumoto
c592e7b70d
string.c: small refactoring
2024-06-21 10:11:32 +09:00
Yukihiro "Matz" Matsumoto
7b9b0997e0
string.c: adjust local variable declarations
2024-05-31 22:49:25 +09:00
Sutou Kouhei
c258ead85b
Include headers for malloc() explicitly; fix #6277
...
We need to include stdlib.h and malloc.h to use malloc()/free() but
they aren't included in src/string.c with WIN32_LEAN_AND_MEAN. It
generates build time warnings.
We can solve this by including stdlib.h and malloc.h explicitly.
2024-05-29 09:45:36 +09:00
Yukihiro "Matz" Matsumoto
68e093729b
string.c: refactor bit operation (e.g. SWAR)
...
To generate a bit mask of `0x8080...` of the word size, we prepare
`MASK01` which is `0x0101...` and multiply masking word (e.g., `0x80).
2024-05-25 16:39:32 +09:00
Yukihiro "Matz" Matsumoto
bd7efbe75f
string.c: check if the index points character boundary; fix #6267
2024-05-25 16:39:31 +09:00
Yukihiro "Matz" Matsumoto
86b1c8ff87
string.c (utf8_strlen): add assertion utf8_len <= byte_len
2024-05-03 07:50:40 +09:00
Yukihiro "Matz" Matsumoto
fa213a2d89
string.c (search_nonascii): prevent buffer overrun; ref #6255
2024-04-29 16:35:08 +09:00
Yukihiro "Matz" Matsumoto
714ef4c4fd
string.c (mrb_utf8_strlen): handle invalid UTF-8 sequence; fix #6255
...
Previous SWAR version assumes valid UTF-8 to count number of code points
in the string, but we need to handle invalid sequence as well. We now
use `search_nonascii` to skip counting single byte characters for
performance. The new version is even faster than SWAR version (probably
because `search_nonascii` uses SSE2 on Intel compatible CPU (which I use).
2024-04-29 15:37:22 +09:00
Yukihiro "Matz" Matsumoto
aa28f48c3b
string.c (search_nonascii): simplify fallback implementation by SWAR
2024-04-02 19:50:13 +09:00
Yukihiro "Matz" Matsumoto
cbb31e6a7c
string.c (mrb_utf8_strlen): use SWAR technique for performance
2024-03-30 22:50:12 +09:00
Yukihiro "Matz" Matsumoto
8130bbc479
string.c (mrb_str_len_to_dbl): should return zero for invalid string
...
We should not use uninitialized value; fix #6183
2024-02-24 23:03:15 +09:00
Yukihiro "Matz" Matsumoto
3eeeb8fabf
string.c (memsearch_swar): skip a local variable
2024-02-15 14:01:49 +09:00
Yukihiro "Matz" Matsumoto
9c840a68e2
string.c (memsearch_swar): boundary check by the latest position
2024-02-13 22:36:03 +09:00
Yukihiro "Matz" Matsumoto
abcad36bae
string.c (memsearch_swar): fixed a buffer overflow
2024-02-09 19:09:01 +09:00
Yukihiro "Matz" Matsumoto
868aeaf48c
string.c (memsearch_swar): fixed a buffer overflow
2024-02-09 18:52:44 +09:00
Yukihiro "Matz" Matsumoto
cac698fe88
string.c (memsearch_swar): changed the function name
...
For your information, SWAR stands for SIMD within a register.
2024-01-31 21:37:39 +09:00
Yukihiro "Matz" Matsumoto
f8527f0670
string.c (mrb_memsearch_ss): update a comment regarding alignment issue
2024-01-31 21:36:05 +09:00
Yukihiro "Matz" Matsumoto
d8144aef78
string.c: remove a comment regarding unsigned char*
2024-01-31 21:34:54 +09:00
Yukihiro "Matz" Matsumoto
363f795432
string.c: remove unnecessary type casts
...
We don't need `unsigned` for string pointers.
2024-01-31 15:06:04 +09:00
Yukihiro "Matz" Matsumoto
e61a2881a7
string.c (mrb_memsearch_ss): fix potential buffer overflow; fix #6158
...
- stop using `bigint*`
- stop integer pointer dereferences
- use `memcpy` to integer variables
- add reminder search for shorter patterns
2024-01-31 07:48:24 +09:00
Yukihiro "Matz" Matsumoto
219cfd63e1
string.c (mrb_memsearch_ss): update integer prefixes (LLU -> ULL)
2024-01-31 07:42:52 +09:00
Yukihiro "Matz" Matsumoto
6ba65ea0f0
string.c (mrb_memsearch_ss): update comment
2024-01-31 01:54:37 +09:00
Yukihiro "Matz" Matsumoto
44a5882bc2
string.c (mrb_memsearch_ss): remove useless alignment adjustment
...
Ref #6158
2024-01-31 01:27:10 +09:00
Yukihiro "Matz" Matsumoto
be5448fd16
string.c (mrb_memsearch): refactor m==1 (use memchr) case
2024-01-31 01:17:12 +09:00
Yukihiro "Matz" Matsumoto
d8e1aed646
string.c (search_nonascii): need not to check n>3 on 32bit platforms
2024-01-30 12:35:56 +09:00
Yukihiro "Matz" Matsumoto
e859b430cc
fixup! string.c (search_nonascii): add faster search using SSE2
2024-01-27 11:59:29 +09:00
Yukihiro "Matz" Matsumoto
dee1ded7b5
string.c (mrb_memsearch_ss): support bigendians
2024-01-27 06:23:16 +09:00
Yukihiro "Matz" Matsumoto
06d9a54760
string.c (mrb_memsearch): remove simple search and quick search
...
Since mrb_memsearch_ss() is fast enough for most of the cases, we try to
simplify the code.
2024-01-27 06:22:55 +09:00
Yukihiro "Matz" Matsumoto
2943ca2685
string.c (mrb_memsearch_ss): faster integer-wise substring search
...
The function is based on @WojciechMula's code from the repository
https://github.com/WojciechMula/sse4-strstr.git Since it's licensed
under 2 clause BSD, we updated LEGAL file too.
2024-01-27 06:16:33 +09:00
Yukihiro "Matz" Matsumoto
08cd281200
string.c (search_nonascii): skip alignment adjustment for some CPUs
...
Some CPUs (e.g. x86) allow unaligned access to the memory.
2024-01-26 08:22:33 +09:00
Yukihiro "Matz" Matsumoto
68ab95ea57
string.c (mrb_memsearch): take char* instead of void*
...
Avoid useless `void*`.
2024-01-25 22:32:31 +09:00
Yukihiro "Matz" Matsumoto
cf0cd6785c
string.c: rename MRB_QS_SHORT_STRING_LENGTH
...
The new name is MRB_SEARCH_SHORT_STRING_LENGTH since it's no longer used
in the mrb_memsearch_qs(). FYI, 'qs' stands for 'quick search'.
2024-01-23 23:28:45 +09:00
Yukihiro "Matz" Matsumoto
fb2ebcde7c
string.c (search_nonascii): add faster search using SSE2
2024-01-23 23:28:45 +09:00