Commit Graph

7872 Commits

Author SHA1 Message Date
ksss 4ee79a8777 Support to return enumerator when no block given 2017-03-15 16:58:29 +09:00
ksss 673ce237c4 Suuport custom separator 2017-03-15 16:58:28 +09:00
ksss 6eb02a892d Use duplicated object for block args 2017-03-15 16:58:28 +09:00
Yukihiro "Matz" Matsumoto f8b31a0db6 instance_eval method does not introduce C function boundary; fix #3508 2017-03-15 09:00:03 +09:00
Yukihiro "Matz" Matsumoto 4b1e5d47b3 Merge pull request #3503 from nobu/bug/sprintf-oob
Fix out-of-bound access
2017-03-14 09:07:06 +09:00
Nobuyoshi Nakada d8c4fe7bcb Fix out-of-bound access
Get rid of out-of-bound access when single % at the end.
2017-03-13 23:56:33 +09:00
Yukihiro "Matz" Matsumoto 191ee2596c Need to copy argv since it may be reallocated; fix #3500
The argv for `mrb_yield_with_class()` should not be on mruby stack.
Note the result from `mrb_get_args("*")` is on the stack.
2017-03-13 22:51:53 +09:00
Yukihiro "Matz" Matsumoto 877f43bca5 OP_BLKPUSH is invalid outside of methods; fix #3501 2017-03-13 22:03:31 +09:00
Yukihiro "Matz" Matsumoto 916b8ed5c8 Generate new OP_RESCUE; fix #3487
The old OP_RESCUE took one operand A, which specifies a class
to match with the exception. The new OP_RESCUE takes tree operands:

A: the register to hold exception
B: the matching exception; the match result will be stored here.
C: the continuation; if C is zero, the exception will be stored to R(A)
   otherwise, the value from R(A) is used as a exception.

Thus,
```ruby
begin
  raise "a"
rescue TypeError
  p 1
rescue RuntimeError
  p 2
end
```
will be compiled as
```
irep 0x557a06667aa0 nregs=4 nlocals=1 pools=1 syms=4 reps=0
file: /tmp/e.rb
2 000 OP_ONERR  005
2 001 OP_LOADSELF R1
2 002 OP_STRING R2  L(0)  ; "a"
2 003 OP_SEND R1  :raise  1
2 004 OP_JMP  022
3 005 OP_GETCONST R2  :TypeError
3 006 OP_RESCUE R1  R2
3 007 OP_JMPIF  R2  009
3 008 OP_JMP  013
4 009 OP_LOADSELF R1
4 010 OP_LOADI  R2  1
4 011 OP_SEND R1  :p  1
4 012 OP_JMP  023
5 013 OP_GETCONST R2 :RuntimeError
5 014 OP_RESCUE R1 R2  cont
5 015 OP_JMPIF  R2  017
5 016 OP_JMP  021
6 017 OP_LOADSELF R1
6 018 OP_LOADI  R2  2
6 019 OP_SEND R1  :p  1
6 020 OP_JMP  023
6 021 OP_RAISE  R1
6 022 OP_POPERR 1
6 023 OP_STOP
```

The new VM can accept old OP_RESCUE. The mruby compatible VM (namely
mruby/c) should be updated to support the new OP_RESCUE behavior.
2017-03-12 01:10:20 +09:00
Yukihiro "Matz" Matsumoto 92f5becabe Update VM to support new OP_RESCUE behavior; ref #3487 2017-03-12 00:58:00 +09:00
Yukihiro "Matz" Matsumoto 26169f9e25 Enhance OP_RESCUE to take B operand fas matching exception; ref #3487 2017-03-12 00:50:38 +09:00
Yukihiro "Matz" Matsumoto 000c68da97 OP_RETRUN to take B as matching exception; ref #3487 2017-03-11 16:32:29 +09:00
Yukihiro "Matz" Matsumoto 4ab70294ea Revert 642ab8e; ref #3422
Also fix #3499.  The issue was solved by #3462.
2017-03-11 16:03:04 +09:00
Yukihiro "Matz" Matsumoto 94395e81c1 The width printf specifier may be negative; fix #3498 2017-03-11 15:22:54 +09:00
Yukihiro "Matz" Matsumoto f30ec2dfb0 fixup! Check return value from snprintf(); ref #3498 2017-03-11 15:22:42 +09:00
Yukihiro "Matz" Matsumoto e3922318bd Check return value from snprintf(); ref #3498 2017-03-11 15:18:41 +09:00
Yukihiro "Matz" Matsumoto f9ed15d899 Merge pull request #3496 from ksss/string-gsub
Avoid infinity loop when empty string pattern
2017-03-11 10:22:34 +09:00
Yukihiro "Matz" Matsumoto 7590482d48 Merge branch 'master' into string-gsub 2017-03-11 10:22:17 +09:00
Yukihiro "Matz" Matsumoto 431f474ba3 Merge pull request #3497 from ksss/subreplace
\1 sequences as empty strings
2017-03-11 10:19:59 +09:00
ksss b56ad8d122 \1 sequences as empty strings 2017-03-10 22:22:06 +09:00
ksss 4b3e6cf169 Avoid infinity loop when empty string pattern 2017-03-10 13:26:15 +09:00
Yukihiro "Matz" Matsumoto ff262f2133 Update ci->mid according to surrounding scope; fix #3490 2017-03-10 12:37:19 +09:00
Yukihiro "Matz" Matsumoto 2f299cf4dc Simplify expression; ref #3490 2017-03-10 12:36:58 +09:00
Yukihiro "Matz" Matsumoto e8f09f9393 Raise special Exception when exception class is redefined; fix #3493 2017-03-10 11:43:25 +09:00
Yukihiro "Matz" Matsumoto c6e5659fec Use string#upto() if available; fix #3489
Terminate loop if the value is longer than the last otherwise.
2017-03-10 10:39:43 +09:00
Yukihiro "Matz" Matsumoto 4763312fb8 Terminate loop if generated string longer than the last; ref #3489 2017-03-10 10:38:28 +09:00
Yukihiro "Matz" Matsumoto 63dbed0094 __FILE__ should not update p->filename; fix #3485 2017-03-07 15:01:09 +09:00
Yukihiro "Matz" Matsumoto 513f4fbf14 Merge pull request #3484 from ksss/string-frozen
Check modifiable for String `bang' methods
2017-03-06 07:38:56 +09:00
Yukihiro "Matz" Matsumoto 8a15abdac2 Avoid trampoline code if mrb_f_send is called from funcall; fix #3383 2017-03-06 07:35:41 +09:00
ksss eba4b1fd76 Check modifiable for String `bang' methods 2017-03-05 23:04:22 +09:00
Yukihiro "Matz" Matsumoto d050694580 Merge pull request #3483 from ksss/string-index
String#index shouldn't return nil when "".index ""
2017-03-05 20:27:28 +09:00
ksss 76e10351fa String#index shouldn't return nil when "".index "" 2017-03-05 14:15:18 +09:00
Yukihiro "Matz" Matsumoto 4f43db862a Unshare popped TT_ENV objects. 2017-03-04 22:45:44 +09:00
Yukihiro "Matz" Matsumoto 3b40a2f6b5 Limit ecall() recursion levels; fix #3466 2017-03-04 18:56:20 +09:00
Yukihiro "Matz" Matsumoto ecee8c51b0 Avoid tracing shared TT_ENV object. 2017-03-04 18:53:36 +09:00
Yukihiro "Matz" Matsumoto c789acbc36 Save/restore arena index in the loop. 2017-03-04 18:52:51 +09:00
Yukihiro "Matz" Matsumoto ffdf7be723 Define jmpbuf_id outside of extern "C"; ref #3470 2017-03-02 20:42:06 +09:00
Yukihiro "Matz" Matsumoto 2d858cab3d Use C++ ABI only when MRB_ENABLE_CXX_ABI is set; ref #3470 2017-03-02 20:37:21 +09:00
Yukihiro "Matz" Matsumoto 1ab7e7e4dc Fixed a bug in register size calculation; fix #3479 2017-03-02 18:14:36 +09:00
Yukihiro "Matz" Matsumoto 3390020fd0 The method_missing removal condition in a76dc04a was wrong. 2017-03-02 17:59:27 +09:00
Yukihiro "Matz" Matsumoto 27ec2437fd Fix possible stack overflow for method_missing; fix #3478
Instead of shifting mruby VM stack, we always use CALL_MAXARGS.
2017-03-02 17:55:15 +09:00
Yukihiro "Matz" Matsumoto 0bcf9e28fc Reorganize C++ exceptions; ref #3470
There are 3 levels of C++ exception handling:
* default - no C++ exception (use setjmp/longjmp)
* enable_cxx_exception (use C++ exceptions with C ABI)
* enable_cxx_abi (use C++ ABI including exceptions)
2017-03-02 10:58:26 +09:00
Yukihiro "Matz" Matsumoto fdd92750fe Create NoMethodError instance using mrb_obj_new(). 2017-03-02 10:56:23 +09:00
Yukihiro "Matz" Matsumoto 9b176a1ca8 Avoid using <mruby/throw.h> in mruby.c 2017-03-02 10:51:44 +09:00
Yukihiro "Matz" Matsumoto eca35df4ff ci may be moved during mrb_convert_type(); ref #3474 2017-03-01 12:06:18 +09:00
Yukihiro "Matz" Matsumoto 8b089c09f7 Keep space for safe navigation operator; fix #3475 2017-03-01 10:37:43 +09:00
Yukihiro "Matz" Matsumoto cd0ac59dd3 Newlines in strings should be counted; fix #3477 2017-03-01 00:05:54 +09:00
Yukihiro "Matz" Matsumoto 1a1f834ade Compile C files by C compiler when C++ files mixed.
ref #3267 #3470

By this commit, mruby do not use C++ ABI mode unless
you specify explicitly. It compiles C files by C
compilers, with C++ exception enabled when it sees
C++ files in your configured mrbgems.

I haven't tried visualcpp, so please submit an issue
if you see any problem with C++ gems on Windows.
2017-02-28 23:27:13 +09:00
Yukihiro "Matz" Matsumoto dc56bbecc8 Ignore empty ensure clause. 2017-02-28 11:51:17 +09:00
Yukihiro "Matz" Matsumoto fb3243e096 return (and break) should handle splat correctly; fix #3472 2017-02-28 11:34:54 +09:00