Yukihiro "Matz" Matsumoto
c310c8dc24
Move exception raising to scope_new.
...
Besides that fix bugs that mistakenly calls `raise_error` that emits
code to raise runtime error instead of `codegen_error` that terminates
code generation immediately.
2019-10-11 20:31:29 +09:00
Yukihiro "Matz" Matsumoto
264239f78f
Refactor local variables addition in optional/keyword arguments.
2019-10-04 14:39:53 +09:00
Yukihiro "Matz" Matsumoto
ec6c8b2a3c
Add local variable reordering to kwargs; ref #4746
2019-10-03 09:17:37 +09:00
Yukihiro "Matz" Matsumoto
47cdda370e
Need to reorder local variables defined in opt; fix #4746
...
For example, local variables in the following def:
```ruby
def foo(a = (not_set = true), &block)
...
end
```
should be `a, block, not_set`, but were `a, not_set, block`.
2019-10-03 07:52:31 +09:00
Yukihiro "Matz" Matsumoto
306f02117b
Refactor append_gen function.
2019-10-03 07:52:03 +09:00
Yukihiro "Matz" Matsumoto
c33100c4f0
Merge pull request #4736 from dearblue/ast-strdump
...
Escape the AST string
2019-10-02 07:07:20 +09:00
KOBAYASHI Shuji
8df2763b56
Support NODE_LITERAL_DELIM in mrb_parser_dump
...
#### Before this patch:
```terminal
$ bin/mruby -v -e '%w[1 2]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 NODE_WORDS:
00001 NODE_STR "1" len 1
00001 node type: 85 (0x55)
00001 NODE_STR "2" len 1
(snip)
```
#### After this patch:
```terminal
$ bin/mruby -v -e '%w[1 2]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 NODE_WORDS:
00001 NODE_STR "1" len 1
00001 NODE_LITERAL_DELIM
00001 NODE_STR "2" len 1
(snip)
```
2019-10-01 17:20:39 +09:00
KOBAYASHI Shuji
42c7f2d6b0
Support NODE_SYMBOLS in mrb_parser_dump
...
#### Before this patch:
```terminal
$ bin/mruby -v -e '%i[1]; %I[#{2}]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 node type: 87 (0x57)
00001 node type: 87 (0x57)
(snip)
```
#### After this patch:
```terminal
$ bin/mruby -v -e '%i[1]; %I[#{2}]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 NODE_SYMBOLS:
00001 NODE_STR "1" len 1
00001 NODE_SYMBOLS:
00001 NODE_STR "" len 0
00001 NODE_BEGIN:
00001 NODE_INT 2 base 10
00001 NODE_STR "" len 0
(snip)
```
2019-10-01 17:10:34 +09:00
KOBAYASHI Shuji
732ef6b10e
Support NODE_WORDS in mrb_parser_dump
...
#### Before this patch:
```terminal
$ bin/mruby -v -e '%w[1]; %W[#{2}]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 node type: 86 (0x56)
00001 node type: 86 (0x56)
(snip)
```
#### After this patch:
```terminal
$ bin/mruby -v -e '%w[1]; %W[#{2}]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 NODE_WORDS:
00001 NODE_STR "1" len 1
00001 NODE_WORDS:
00001 NODE_STR "" len 0
00001 NODE_BEGIN:
00001 NODE_INT 2 base 10
00001 NODE_STR "" len 0
(snip)
```
2019-10-01 17:07:30 +09:00
KOBAYASHI Shuji
16745261e3
Support NODE_DSYM in mrb_parser_dump
...
#### Before this patch:
```terminal
$ bin/mruby -v -e ':"#{1}"; ["#{2}": 0]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 node type: 83 (0x53)
00001 NODE_ARRAY:
00001 NODE_KW_HASH:
00001 key:
00001 node type: 83 (0x53)
00001 value:
00001 NODE_INT 0 base 10
(snip)
```
#### After this patch:
```terminal
$ bin/mruby -v -e ':"#{1}"; ["#{2}": 0]'
mruby 2.0.1 (2019-04-04)
00001 NODE_SCOPE:
00001 NODE_BEGIN:
00001 NODE_DSYM:
00001 NODE_DSTR:
00001 NODE_STR "" len 0
00001 NODE_BEGIN:
00001 NODE_INT 1 base 10
00001 NODE_STR "" len 0
00001 NODE_ARRAY:
00001 NODE_KW_HASH:
00001 key:
00001 NODE_DSYM:
00001 NODE_DSTR:
00001 NODE_STR "" len 0
00001 NODE_BEGIN:
00001 NODE_INT 2 base 10
00001 NODE_STR "" len 0
00001 value:
00001 NODE_INT 0 base 10
(snip)
```
2019-09-30 11:54:51 +09:00
KOBAYASHI Shuji
a5d140ae42
Print missing : before newline in mrb_parser_dump
2019-09-29 17:14:52 +09:00
dearblue
e2f54ff594
Escape the AST string
2019-09-29 10:39:55 +09:00
KOBAYASHI Shuji
ae530d89c4
Remove unused node type in codegen()
2019-09-28 15:15:31 +09:00
Yukihiro "Matz" Matsumoto
2de757eef0
Replace mrb_sym_name with mrb_sym_dump; ref #4684
2019-09-28 00:06:01 +09:00
KOBAYASHI Shuji
feaf80d899
Use type predicate macros instead of mrb_type if possible
...
For efficiency with `MRB_WORD_BOXING` (implement type predicate macros for
all `enum mrb_vtype`).
2019-09-26 22:23:27 +09:00
Yukihiro "Matz" Matsumoto
a365f9a67d
Rename symbol-to-string functions; close #4684
...
* mrb_sym2name -> mrb_sym_name
* mrb_sym2name_len -> mrb_sym_name_len
* mrb_sym2str -> mrb_sym_str
2019-09-25 23:52:00 +09:00
Yukihiro "Matz" Matsumoto
0734d9f314
Merge pull request #4512 from lopopolo/patch-1
...
Support parsing a Regexp literal with 'o' option
2019-09-15 18:19:59 +09:00
Yukihiro "Matz" Matsumoto
6620b1cdcb
Revert "Update %pure-parser to %define api.pure for newer bison; fix #4706 "
...
The `bison` on MacOS does not support `%define api.pure`.
This reverts commit f7c9f1f796 .
2019-09-14 10:28:07 +09:00
Yukihiro "Matz" Matsumoto
f7c9f1f796
Update %pure-parser to %define api.pure for newer bison; fix #4706
2019-09-14 09:05:32 +09:00
Yukihiro "Matz" Matsumoto
49967097ed
Skip nil? method call in if conditionals.
...
Compile `if expr.nil?` to use `OP_JMPNIL` instead of calls.
2019-08-31 22:14:25 +09:00
Yukihiro "Matz" Matsumoto
183fb961b3
Fixed a bug in the OP_JMPNOT optimization ( 13eaff4); fix #4644
2019-08-20 22:01:50 +09:00
Yukihiro "Matz" Matsumoto
3fbd5f0029
Merge pull request #4639 from dearblue/suppress-Wstringop-truncation
...
Suppress warnings for `strncat()`
2019-08-19 07:31:26 +09:00
dearblue
74395d7577
Suppress warnings for strncat()
...
`strncat()` also needs `'\0'`.
2019-08-18 15:46:17 +09:00
dearblue
279c21b816
Prohibit changes to iseq in principle
2019-08-18 15:00:32 +09:00
Yukihiro "Matz" Matsumoto
13eaff4f9f
Remove unnecessary OP_JMPNOT for unless statement.
2019-08-17 12:29:04 +09:00
Yukihiro "Matz" Matsumoto
06c7ff0666
Avoid creating unnecessary empty arrays on splat.
...
But this changes requires `OP_ARYCAT` and `OP_ARYPUSH` to accept `nil`
as their first operand. Alternative VMs (e.g. `mruby/c`) that understand
mruby bytecode need to be updated.
2019-08-16 16:42:40 +09:00
Yukihiro "Matz" Matsumoto
f113fa2a4f
Remove unnecessary prototypes from 'keywords`; fix #4628
2019-08-12 18:22:31 +09:00
KOBAYASHI Shuji
334afb167c
Use new specifiers/modifiers of mrb_vfromat()
...
The binary sizes (gems are only `mruby-bin-mruby`) are reduced slightly in
my environment than before the introduction of new specifiers/modifiers
(5116789a ) with this change.
------------+-------------------+-------------------+--------
BINARY | BEFORE (5116789a ) | AFTER (This PR) | RATIO
------------+-------------------+-------------------+--------
mruby | 593416 bytes | 593208 bytes | -0.04%
libmruby.a | 769048 bytes | 767264 bytes | -0.23%
------------+-------------------+-------------------+--------
BTW, I accidentally changed `tasks/toolchains/visualcpp.rake` at #4613 ,
so I put it back.
2019-08-05 13:18:50 +09:00
Yukihiro "Matz" Matsumoto
b58f769c96
Fix line number bug; fix #4513
...
Also fix the misfeature introduced in 23783a4 , that ignores newlines
between method chains.
2019-07-27 15:00:46 +09:00
KOBAYASHI Shuji
e38ba3d58c
Revert #4300
...
Originally, it was not necessary to change. I made mistake.
2019-07-17 19:49:58 +09:00
KOBAYASHI Shuji
acad9567c1
Unify type of line number to uint16_t
2019-07-15 23:03:41 +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
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
9b604abc83
Enable YYSTACK_USE_ALLOCA.
...
It used heap allocated memory for the parser stack, but there's
possibility of parser termination by exceptions. In that case, the
parser stack memory is leaked.
We were afraid of stack consumption, but parser stack size is only 4KB,
so we don't have to worry about it (at least for the parser).
2019-05-16 11:46:37 +09:00
Ukrainskiy Sergey
31bfc55866
Fix
2019-05-15 16:57:21 +09:00
Ukrainskiy Sergey
79c3335e8d
Small refactoring
2019-05-15 16:57:21 +09:00
Ukrainskiy Sergey
8808219e6d
Initial suffix support
2019-05-15 16:57:21 +09:00
dearblue
f5d5caaf82
Clean duplicate code
...
Removed duplicates in the code entered for "Concatenate string literal".
2019-05-03 11:36:31 +09:00
Yukihiro "Matz" Matsumoto
e74a8a7360
Merge pull request #4376 from dearblue/leak-symbols
...
Fix leaked function symbols
2019-04-14 20:35:19 +09:00
dearblue
3f3e4754d9
Fix leaked function symbols
...
- `free_heap()` in src/gc.c
- `symhash()` in src/symbol.c
- `no_optimize()` in mrbgems/mruby-compiler/core/codegen.c
2019-04-14 17:23:16 +09:00
dearblue
dac0f3f5e8
Fix string index for appending
...
`sizeof(string-literal)` is included `'\0'` character
2019-04-14 16:16:05 +09:00
dearblue
c2fa935fee
Fix hexdigits convertion
2019-04-14 16:11:21 +09:00
Yukihiro "Matz" Matsumoto
befdf59e61
Deallocate s->lines in codegen_error; ref #4370
2019-04-12 22:54:25 +09:00
Yukihiro "Matz" Matsumoto
00545fc51d
The number of local variables should be less than 1024; fix #4370
...
The `env` stores stack length in a 10 bit field.
See `MRB_ENV_STACK_LEN()` macro.
2019-04-12 22:52:26 +09:00
Clayton Smith
57e617620a
Fix buffer overflows in parser.
2019-04-11 20:07:43 -04:00
Yukihiro "Matz" Matsumoto
d529501cbf
Rename itoa to dump_int to avoid name crash; ref #4173
2019-04-10 05:55:40 +09:00
Yukihiro "Matz" Matsumoto
ec1688807e
Avoid using snprintf when MRB_DISABLE_STDIO is set; fix #4173
2019-04-08 19:06:36 +09:00