Commit Graph

464 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto eb5a606fe2 Simplify rescue stack management; ref #3683 2017-06-01 19:18:24 +09:00
Yukihiro "Matz" Matsumoto 7ff90b52d8 Simplify ensure stack management; fix #3683 2017-06-01 19:17:48 +09:00
Yukihiro "Matz" Matsumoto 72b635f7d2 Hide OP_EXEC lambda body from ObjectSpace#each_object; fix #3680 2017-06-01 15:40:07 +09:00
Yukihiro "Matz" Matsumoto b0f2bc39db Clear VM stack in OP_EXEC; ref #3678 2017-06-01 08:45:56 +09:00
Yukihiro "Matz" Matsumoto eb69eebfd7 Simplify code since OP_EXEC never takes CFUNC Proc; #3678 2017-06-01 08:28:38 +09:00
Yukihiro "Matz" Matsumoto acd3ac62a8 Reduce the size of VM stack clear window; ref #3676 2017-05-31 06:39:12 +09:00
Yukihiro "Matz" Matsumoto 2599c1932e Clear VM stack for top level; fix #3676
Top-level local variables contained junk after ab25eaea2
2017-05-31 00:18:32 +09:00
Yukihiro "Matz" Matsumoto ef1158485b Check env context before jump from OP_RETURN; fix #3673 2017-05-30 15:42:10 +09:00
Yukihiro "Matz" Matsumoto 650cfb9e4c Exceptions in fibers must be re-raised via #resume; fix #3675 2017-05-30 11:06:00 +09:00
Yukihiro "Matz" Matsumoto 02670ffa8d Protect the returning value in OP_RETURN; fix #3669
Even though the returning value is retrieved from the stack,
it may be freed if GC is caused during stack rewinding
(e.g. ensure calls).
2017-05-29 10:33:43 +09:00
Yukihiro "Matz" Matsumoto 34dd258c63 Unwind callinfo (mrb->c->ci) when a fiber termitates with error.
Fix #3668
2017-05-27 18:42:08 +09:00
Yukihiro "Matz" Matsumoto 57ffa1c150 Avoid unsharing env when context (mrb->c) differs; ref #3668 2017-05-27 18:40:15 +09:00
Yukihiro "Matz" Matsumoto e3438f404a Invoke ensure clauses on Fiber termination; fix #3666
Related to #3662
2017-05-26 10:50:51 +09:00
Yukihiro "Matz" Matsumoto c53747dbdf Revert "Use env preserved in Proc structure in ecall(); fix #3612"
This reverts commit e26e118604.
Fix #3664
2017-05-25 19:57:46 +09:00
Yukihiro "Matz" Matsumoto 517cd51cea Invoke ensure clauses before switching context from fibers; fix #3662 2017-05-25 14:36:25 +09:00
Yukihiro "Matz" Matsumoto ed16535c73 Clear top level env in mrb_top_run(); fix #3643 2017-05-25 14:13:54 +09:00
Yukihiro "Matz" Matsumoto f88cb88073 Avoid unsharing stack if env refers top-level; ref #3643 2017-05-25 14:13:16 +09:00
Yukihiro "Matz" Matsumoto e0931126ff Check env stack length before OP_SETUPVAR; ref #3643 2017-05-25 14:12:16 +09:00
Yukihiro "Matz" Matsumoto ff46957ef0 Avoid using mrb_raise() in mrb_vm_exec(); ref #3660 2017-05-25 11:11:40 +09:00
Yukihiro "Matz" Matsumoto 9bca887ac4 Preserve the current pc before method_missing(); fix #3660 2017-05-25 10:31:48 +09:00
Yukihiro "Matz" Matsumoto 9644ad51b4 Simplify backtrace mechanism; fix #3633 #3634 #3644
Instead of preserving a backtrace in `mrb_state`, `mrb_exc_set`
keeps packed backtrace in an exception object. `#backtrace` unpacks
it to an array of strings.
2017-05-23 23:50:42 +09:00
Yukihiro "Matz" Matsumoto cef523cc19 Avoid duplicated envadjust() of env stacks; fix #3637 2017-04-25 22:31:02 +09:00
Tomasz Dąbrowski b1120464e0 Revert "Simplify pointer calculation in envadjust."
This reverts commit a1d32af916.
2017-04-24 23:57:39 +02:00
Yukihiro "Matz" Matsumoto a4dfaaf1e8 Small cosmetic changes. 2017-04-22 15:09:41 +09:00
Yukihiro "Matz" Matsumoto e26e118604 Use env preserved in Proc structure in ecall(); fix #3612 2017-04-22 15:08:18 +09:00
Yukihiro "Matz" Matsumoto 5513fcee22 Keep reference to mrb_context from env; fix #3619 2017-04-22 14:35:36 +09:00
Yukihiro "Matz" Matsumoto a1d32af916 Simplify pointer calculation in envadjust. 2017-04-21 22:29:28 +09:00
Yukihiro "Matz" Matsumoto 5d67d9b10d Fixed a possible memory leak. 2017-04-21 22:29:28 +09:00
Yukihiro "Matz" Matsumoto 94bcdca64f VM stack may be reallocated in mrb_convert_type(); fix #3622 2017-04-21 09:11:28 +09:00
Yukihiro "Matz" Matsumoto edd9fc6e75 Do not raise an exception for living closure; ref #3359 2017-04-20 13:14:01 +09:00
Yukihiro "Matz" Matsumoto 6a0b68f8b8 Use trampoline technique for instance_exec; ref #3359
A new function `mrb_yield_cont()` is provided. You have to call it
at the end of a C defined method, e.g. `return mrb_yield_cont()`.
2017-04-19 19:54:55 +09:00
Yukihiro "Matz" Matsumoto 77c2aa7b8a Need to raise "break from proc-closure" error; fix #3359 fix #3495
Some examples in #3359 still behave differently from CRuby.
2017-04-19 19:38:57 +09:00
Yukihiro "Matz" Matsumoto 283d145d3e Fixed a bug caused by last minute change; fix #3610
Omitted `goto L_RAISE` to raise an exception.
2017-04-19 09:28:58 +09:00
Yukihiro "Matz" Matsumoto 79e0314337 Call envadjust() before updating VM stack. 2017-04-18 16:49:43 +09:00
Yukihiro "Matz" Matsumoto f6c70bc6e8 super may call context switching method like send; fix #3611 2017-04-18 11:52:16 +09:00
Yukihiro "Matz" Matsumoto 82ab46139e Add "no super" check to OP_ARGARY; fix #3610 2017-04-18 10:28:49 +09:00
Yukihiro "Matz" Matsumoto 4e84bdb507 Let 'mrb_vm_run()` to restore the calling fiber; ref #3537 2017-04-12 11:01:23 +09:00
Yukihiro "Matz" Matsumoto 0fb05eb55f Should not unshare env stack repeatedly; fix #3601 2017-04-12 10:41:06 +09:00
Yukihiro "Matz" Matsumoto 2a4db1a4be method_missing might have updated stack beyond boundary; fix #3599 2017-04-12 10:28:57 +09:00
Yukihiro "Matz" Matsumoto 326e043a64 Exceptions may be raised in yyparse(); fix #3600 2017-04-12 10:23:34 +09:00
Yukihiro "Matz" Matsumoto 0048dd118a Protect arguments from GC; fix #3597
GC may be called with OP_ENTER (especially when GC_STRESS is set).
2017-04-10 21:12:41 +09:00
Yukihiro "Matz" Matsumoto a55b237d89 Callinfo may be changed in ecall(); fix #3589 2017-04-10 20:39:49 +09:00
Yukihiro "Matz" Matsumoto ab25eaea23 Avoid clearing VM stack every time to gain performance.
VM stack is cleared by 5c114c9, 0cb501 and c063641.
2017-04-10 09:59:36 +09:00
Yukihiro "Matz" Matsumoto 0cb501545c Fill omitted arguments by nil for non-strict Proc. 2017-04-10 09:24:42 +09:00
Yukihiro "Matz" Matsumoto c063641ab0 Clear local (but non-argument) variables in OP_ENTER.
Otherwise, the following script prints an uninitialized value.

def f(*a)
  if false
    b = 15
  end
  p b
end
f(1,2,3)
2017-04-10 08:25:44 +09:00
Yukihiro "Matz" Matsumoto 47f181519f Avoid updating regs[] from function calls; ref #3588 2017-04-08 17:47:35 +09:00
Kouichi Nakanishi 15b55c32e9 Attach a name to embbeded value of rescue/ensure stack size 2017-04-08 11:22:41 +09:00
Yukihiro "Matz" Matsumoto a7b0ab3769 Save block argument position in e->cioff; fix #3593 2017-04-05 22:30:39 +09:00
Yukihiro "Matz" Matsumoto d9fb8b69b0 Fixed a bug in OP_SUPER block conversion; fix #3590 2017-04-05 18:22:26 +09:00
Yukihiro "Matz" Matsumoto 2daebfb6a7 Fixed a bug when method_missing take 126 args; fix #3592 2017-04-05 14:41:34 +09:00