Yukihiro "Matz" Matsumoto
d3e273ba4e
Wrong stack adjustment in ecall() ( f35f975 #3859 ); fix #3862
2017-11-30 08:04:27 +09:00
Yukihiro "Matz" Matsumoto
5f7cdecdc9
Clear c->prev on fiber termination.
2017-11-29 20:25:55 +09:00
Yukihiro "Matz" Matsumoto
9c78a9bfa2
Set MRB_FIBER_TERMINATED flag on exception termination of a fiber.
2017-11-29 20:17:33 +09:00
Yukihiro "Matz" Matsumoto
3e67a116d1
Call all ensure clauses pushed at OP_STOP.
2017-11-29 12:16:16 +09:00
Yukihiro "Matz" Matsumoto
afa53809e2
No need to use ecall_adjust().
2017-11-29 12:15:24 +09:00
Yukihiro "Matz" Matsumoto
f35f975d26
Fixed stack address adjustment in ecall(); fix #3859
2017-11-29 12:14:05 +09:00
Yukihiro "Matz" Matsumoto
d4fc980527
Need to evaluate ensure clauses at fiber termination.
2017-11-29 11:57:33 +09:00
Yukihiro "Matz" Matsumoto
6bb5ad786c
Remove unnecessary code; ref #3711
2017-11-29 11:44:07 +09:00
Yukihiro "Matz" Matsumoto
0ab21a9a5e
Stack adjustment should be based on p->upper; fix #3857
...
It used to be based on `ci->proc` but the callinfo position may be
wrong when `ecall()` is called during stack rewinding from `OP_RETURN`.
2017-11-22 14:05:11 +09:00
Yukihiro "Matz" Matsumoto
fbafa78098
Clear ensure stack after calling in OP_EPOP; #3855 3856
2017-11-22 12:22:45 +09:00
Yukihiro "Matz" Matsumoto
4665b07f7b
No need to pop ensure stack if eidx is smaller than epos; #3855 #3856
2017-11-22 12:21:24 +09:00
Yukihiro "Matz" Matsumoto
fe3ac50845
fixup! Remove fixed argument of ecall(); ref #3855 #3856
2017-11-22 12:20:56 +09:00
Yukihiro "Matz" Matsumoto
cb4b042777
Remove fixed argument of ecall(); ref #3855 #3856
2017-11-22 12:19:40 +09:00
Yukihiro "Matz" Matsumoto
8b7a8978e2
Reduce the size of struct RBreak to reduce memory usage.
...
The old size of `struct RBreak` was 56 bytes (`MRB_NO_BOXING`)
and it's bigger than other object structures. That increase the
size of `RVALUE` thus increase the total amount of memory consumption.
2017-11-20 18:33:41 +09:00
Yukihiro "Matz" Matsumoto
8f2c62407c
Add MRB_METHOD_TABLE_INLINE option.
...
Now the method tables (in classes/modules and caches) keeps C function
pointers without wrapping in `struct RProc` objects. For the sake of
portability, `mrb_method_t` is represented by the struct and union, but
if the most significant bit of the pointer is not used by the platform,
`mrb_method_t` should be packed in `uintptr_t` to reduce memory usage.
`MRB_METHOD_TABLE_INLINE` is turned on by default for linux.
2017-11-20 18:33:41 +09:00
Yukihiro "Matz" Matsumoto
825e93eba4
Assign operands to local variables.
2017-11-18 00:03:59 +09:00
Yukihiro "Matz" Matsumoto
c8da602752
Need to save stack space by number of registers from the current proc,
...
Not from the execution ensure proc; fix #3849
2017-11-17 01:08:46 +09:00
Yukihiro "Matz" Matsumoto
c210a8adf9
Fixed wrong stack extend size; fix #3847
2017-11-11 17:55:32 +09:00
Yukihiro "Matz" Matsumoto
181f980b6c
Need to clear stack region for local variables in eval; fix #3844
2017-11-10 21:53:12 +09:00
Yukihiro "Matz" Matsumoto
41c8c419cf
Use proper target_class to define class/module; fix #3843
...
The outer class of the class/module definition should be taken from
`MRB_TARGET_CLASS(mrb->c->ci->proc)` not `mrb->c->ci->target_class`
which is the target of constant lookups.
2017-11-09 00:14:21 +09:00
Yukihiro "Matz" Matsumoto
de2363a9f0
Merge branch 'mrb_without_float' of https://github.com/pandax381/mruby into pandax381-mrb_without_float
2017-11-04 11:49:25 +09:00
Yukihiro "Matz" Matsumoto
388d26d770
Reimplement block_given?; ref #3841
...
Make `block_given?` to search for the top of the scope first.
The top of the scope means either:
* the top method body
* the enclosing class body
* the top-level
The special case is the method defined by `define_method` with a
block as in #3841 . In cases like this, the method body (given by
a block) is not considered as the top of the scope. You need to use
`&block` in the block parameter if you want to know if a block is
given to the method.
This commit also changes the behavior of `MRB_PROC_SCOPE` flag.
Now it is only set if the `proc` is either a class body or a method
body defined in Ruby. It is no longer set for a block that given to
`define_method`.
2017-11-04 11:20:04 +09:00
YAMAMOTO Masaya
625f9f6fa3
Merge branch 'master' of github.com:mruby/mruby
2017-11-04 01:23:12 +09:00
Yukihiro "Matz" Matsumoto
12e38597c8
Always check division-by-zero to avoid undefined behavior; fix #3816
...
Also removed the code to normalize NaN value for `MRB_NAN_BOXING`.
Tha code was added to fix #1712 but no longer required after 249f05e7d .
2017-11-03 09:35:55 +09:00
Yukihiro "Matz" Matsumoto
022570ab8d
Call stack may not reference the destination proc; fix #3838
...
The destination `proc` may be an orphan.
2017-10-31 09:10:08 +09:00
Yukihiro "Matz" Matsumoto
59dc7d0763
Removed a debug printf; fix #3834
2017-10-28 23:39:21 +09:00
Yukihiro "Matz" Matsumoto
1b45e034ba
Remove one of the lines that did the same thing; fix #3836
...
The change is suggested by `ukrainskiysergey` in #3836 .
I deleted the other line for clarity. I also updated comment lines.
2017-10-28 23:35:01 +09:00
Yukihiro "Matz" Matsumoto
6316e0c75d
Should clear ensure stack at OP_RETURN break; #3715
...
This is a resurrection of d0a7e01 , which is accidentally
removed by 93f5f22; Fix #3715
2017-10-28 23:27:07 +09:00
Yukihiro "Matz" Matsumoto
92e24f809b
Should check if callinfo stack is popped before updating the stack.
...
This is a resurrection of 75c374c , which is accidentally removed by
93f5f22; Fix #3507 #3512 #3518 #3521
2017-10-28 23:10:28 +09:00
Yukihiro "Matz" Matsumoto
c7c9543bed
Fixed UPVAR gotchas; fix #3835
...
Both `uvenv` function and `env` generation in `create_proc_from_string`
function have bugs to handling enclosed environment objects.
2017-10-28 23:08:31 +09:00
Yukihiro "Matz" Matsumoto
57dad6e3fd
Remove a debug variable
2017-10-28 01:37:51 +09:00
Yukihiro "Matz" Matsumoto
93f5f22577
Heavily refactored how lexical scope links are implemented; fix #3821
...
Instead of `irep` links, we added a `upper` link to `struct RProc`.
To make a space for the `upper` link, we moved `target_class` reference.
If a `Proc` does not have `env`, `target_class` is saved in an `union`
shared with `env` (if a `Proc` has env, you can tell it by `MRB_PROC_ENV_P()).
Otherwise `target_class` is referenced from `env->c`. We removed links
in `env` as well.
This change removes 2 members from `mrb_irep` struct, thus saving 2
words per method/proc/block. This also fixes potential memory leaks
due to the circular references caused by a link from `mrb_irep`.
2017-10-28 00:29:30 +09:00
Yukihiro "Matz" Matsumoto
14877469d1
Remove MRB_API from mrb_env_unshare()
2017-10-28 00:29:30 +09:00
YAMAMOTO Masaya
acdc2d1f24
Add MRB_WITHOUT_FLOAT
2017-10-11 17:58:11 +09:00
Tomasz Dąbrowski
999ce87129
fix: src\vm.c(2631): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
77d6a953ff
fix: src\vm.c(1757): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
ebd45b1072
fix: src\vm.c(1744): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
0bff4b6a09
fix: src\vm.c(1702): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
885916c84b
fix: src\vm.c(708): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
e88fc10679
fix: src\vm.c(704): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
ec7f478eda
fix: src\vm.c(457): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
67ab8406b8
fix: src\vm.c(445): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Tomasz Dąbrowski
23cc698134
fix: src\vm.c(438): warning C4244: '=': conversion from 'mrb_int' to 'int', possible loss of data
2017-09-27 22:22:05 +02:00
Yukihiro "Matz" Matsumoto
7450a774a5
The first instruction was skipped mistakenly in ensure clause; fix #3811
2017-09-23 10:12:04 +09:00
Yukihiro "Matz" Matsumoto
0ceaa0960a
OP_EPOP operand may be bigger than mrb->c->eidx; fix #3810
2017-09-22 13:00:58 +09:00
Yukihiro "Matz" Matsumoto
5760226e71
Remove temporary limitation of OP_EPOP.
...
After f68f5f6 , the operand of `OP_EPOP` should have been `1`.
Now we have removed the limitation.
2017-09-12 12:41:02 +09:00
Yukihiro "Matz" Matsumoto
d6e41c3e51
The callinfo stack may be reallocated in cipush; fix rest of #3809
...
fix #3809
2017-09-11 23:13:47 +09:00
Yukihiro "Matz" Matsumoto
3d8c1a7e97
The ensure stack may be empty at OP_EPOP; fix 1st part of #3809
2017-09-11 22:46:34 +09:00
Yukihiro "Matz" Matsumoto
f68f5f6b97
Avoid crossing C function boundary from OP_EPOP; ref #3789
2017-09-05 21:12:36 +09:00
Yukihiro "Matz" Matsumoto
3acaa44a70
Restructure irep->outer chain; fix #3804
...
Instead of `irep -> proc` chain, we use `irep -> irep` chain to
avoid GC bugs like #3804 . We added `target_class` reference to
`mrb_irep` struct. That means one more word consumption per `irep`.
2017-09-04 06:51:31 +09:00