Commit Graph

311 Commits

Author SHA1 Message Date
cremno 2554fd9c94 remove unreachable code
It's just a copy of the code in the previous case (NODE_CALL).
2015-05-29 11:29:11 +02:00
take_cheeze 6498d90f1b Move "src/mrb_throw.h" to "include/mruby/throw.h".
Related to #2760.
2015-05-25 21:19:24 +09:00
take_cheeze 46e50492eb Move mrb_codedump_all to "src/codedump.c".
Related to #2760.
2015-05-23 17:55:44 +09:00
Yukihiro "Matz" Matsumoto b7049b3945 there may be expecting here-doc when we see terminating characters; fix #2780 2015-05-20 19:14:04 +09:00
cremno 2aa59393ba fix splat without assignment; fix #2781
The parser generates NODE_NIL for tSTAR without argument in masgns. The
codegen didn't handle that.
2015-05-07 16:58:43 +02:00
Kouhei Sutou 4b4ddd5a28 Fix a bug that no expression case doesn't return valid value
Here is a script that reproduces this problem:

     x = case
         when true; 1
         end
     p x # => main # 1 is expected
2015-02-24 20:53:12 +09:00
Kouhei Sutou 584d6de3c2 Fix a bug that if and no return value case can't return true clause value
Here is a script that reproduce this problem:

     x = if true
           1
         else
           case 2
           when 3
           end
           4
         end
     p x # => nil # 1 is expected
2015-02-24 00:16:41 +09:00
Kouhei Sutou 5ec676aa37 Fix splat and multiple assignments
Case1: From variable

Code:

    a = [1, 2, 3, 4, 5]
    b, c, *d = a

    p [a, b, c, d]

Before:

    [[1, 2, 3, 4, 5], 1, 2, []]

After:

    [[1, 2, 3, 4, 5], 1, 2, [3, 4, 5]]

Ruby:

    [[1, 2, 3, 4, 5], 1, 2, [3, 4, 5]]

Case2: From variables

Code:

    a = [1, 2, 3]
    b = [4, 5, 6, 7]
    c, d, *e, f, g = *a, *b

    p [a, b, c, d, e, f, g]

Before:

    [[1, 2, 3], [4, 5, 6, 7], 1, 2, [], 6, 7]

After:

    [[1, 2, 3], [4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7]

Ruby:

    [[1, 2, 3], [4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7]

Case 3: "for"

Code:

    a = [1, 2, 3, 4, 5, 6, 7]
    for b, c, *d, e, f in [a] do
      p [a, b, c, d, e, f]
    end

Before:

    [[1, 2, 3, 4, 5, 6, 7], 1, 2, [], nil, nil]

After:

    [[1, 2, 3, 4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7]

Ruby:

    [[1, 2, 3, 4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7]
2014-12-23 21:16:01 +09:00
Yukihiro "Matz" Matsumoto 4c70b5c644 should not pop register when value from multiple assignment required 2014-12-01 08:06:23 +09:00
Yukihiro "Matz" Matsumoto e4ca706530 wrong register adjustment 2014-11-27 16:21:15 +09:00
Yukihiro "Matz" Matsumoto 28bd33297a wrong register number adjustment in multiple assignment; fix #2654 2014-11-26 00:43:39 +09:00
Yukihiro "Matz" Matsumoto c424892c5e OP_APOST local variable display was wrong 2014-11-26 00:43:39 +09:00
Yukihiro "Matz" Matsumoto 9ec00ef182 align indent of local variable names in codedump() 2014-11-23 07:36:58 +09:00
Yukihiro "Matz" Matsumoto bce75e2746 should support recursive mlhs decomposition, e.g. (a,b),c = [1,2],3 2014-11-22 12:16:59 +09:00
Jun Hiroe ad77ed8bf3 Refactor for_body func 2014-10-28 23:31:25 +09:00
Yukihiro "Matz" Matsumoto 89e9df2681 fixed wandering filename problem 2014-09-08 01:20:43 +09:00
cremno 26bbc81e12 get rid of shadowing variables
Mostly by renaming the shadowing variable.
If a shadowing variable was deleted,
the shadowed one can be used instead.
2014-09-03 10:00:37 +02:00
Yukihiro "Matz" Matsumoto 607795ffdd more OP_MOVE swap detection in peephole optimization 2014-08-29 16:24:12 +09:00
Yukihiro "Matz" Matsumoto 3c4cd5428a allow no_optimize esp. for debugger 2014-08-29 15:09:14 +09:00
Tatsuhiko Kubo 5fa30aeaea Fix mismatches for MRB_API declarations. 2014-08-29 01:06:22 +09:00
Tatsuhiko Kubo 3202938099 Add a missing space after ",". 2014-08-27 19:13:40 +09:00
cremno bdf6ce34ce printf: cast variables to the expected type
%x expects unsigned int and %p expects void *

GCC emits a diagnostic about %p/void* in pedantic mode:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26542
2014-08-26 00:30:33 +02:00
Yukihiro "Matz" Matsumoto 05ede52239 should use non NULL scope for raise_error(); ref #2547 2014-08-20 23:38:37 +09:00
Tatsuhiko Kubo ae2d49811a Fix allocation-error-handlings for scope_new(). 2014-08-20 12:25:29 +09:00
Tatsuhiko Kubo ae306793f2 Use specified macro(NULL) instead of magic-number. 2014-08-20 04:34:03 +09:00
kkkkkt 9da37cdfd1 refactor mruby method(fix indent. remove temporary value, duplicate procedure) 2014-08-18 10:58:48 +09:00
cremno ef59f553a3 invalid base shouldn't silently fail
Revert 44a5809224 and check range of
`base` with `mrb_assert`.
It actually can only be either 2, 8, 10 or 16 (and never 0), unless
mruby sources are modified. But I don't see a reason to impose further
limits.
2014-07-09 13:55:08 +02:00
Jose Narvaez 45b8562d8d Using 'mrb_assert' instead of an returning 0 while checking s->irep in codegen.c. 2014-06-13 16:44:22 +01:00
Jose Narvaez 13abc9c4a1 Revert "Fixed dereference to null pointer in 'codegen.c' reported by 'clang-analyzer'"
This reverts commit 29f14e728d.
2014-06-13 10:54:18 +01:00
Jose Narvaez e344d662f1 Fixed dereference to null pointer in 'codegen.c' reported by 'clang-analyzer' 2014-06-13 10:50:26 +01:00
Jose Narvaez 29f14e728d Fixed dereference to null pointer in 'codegen.c' reported by 'clang-analyzer' 2014-06-13 10:50:15 +01:00
Jose Narvaez 44a5809224 Fixed possible division by zero in 'codegen.c' reported by 'clang-analyzer' 2014-06-13 10:09:28 +01:00
Yukihiro "Matz" Matsumoto c2f6c33fef reserve a register for a block parameter in a for statement body; ref #2375 2014-06-10 13:15:19 +09:00
Yukihiro "Matz" Matsumoto 6c524af646 NODE_FOR does not introduce new local variables 2014-06-10 00:03:54 +09:00
Yukihiro "Matz" Matsumoto 4c69a9d09e codedump should display proper L(n) for OP_STRING op 2014-06-09 23:37:20 +09:00
Yukihiro "Matz" Matsumoto 41b46ca1ed register<nlocals may not have a local variable name (e.g. a block arg); fix #2258 2014-05-16 00:04:55 +09:00
Mitchell Blank Jr 493025c3af print_r() and print_lv() should only be compiled in for ENABLE_STDIO 2014-05-14 14:13:56 -07:00
Yukihiro "Matz" Matsumoto 2be348a0f1 mv opcode.h -> include/mruby/opcode.h and remove duplication from mruby-eval gem 2014-05-14 23:14:08 +09:00
Yukihiro "Matz" Matsumoto 9184d254e2 resize register number in LVAR section from 32bits to 16bits 2014-05-14 17:32:30 +09:00
Yukihiro "Matz" Matsumoto 10459a5eb2 Merge branch 'dump_lv' of https://github.com/take-cheeze/mruby into take-cheeze-dump_lv 2014-05-14 11:27:41 +09:00
take_cheeze f2450928b2 Remove unnecessary newline in OP_GETGLOBAL codedump. 2014-05-13 22:47:43 +09:00
take_cheeze 5073d14e28 Remove lv_len and use nlocals - 1 instead.
Check that `lv`'s length is always `nlocals - 1`.
2014-04-29 22:06:59 +09:00
take_cheeze 4c7f9897c2 Support local variables information dumping. 2014-04-29 20:47:50 +09:00
Yukihiro "Matz" Matsumoto 0bdc87d239 indent codedump when file/line info is not available; ref #2147 2014-04-29 19:08:47 +09:00
take_cheeze 46d8c08a14 Use int32_t as line variable type. 2014-04-28 22:17:40 +09:00
take_cheeze 197f3cb901 Print file name and line number in codedump if available. 2014-04-28 22:12:45 +09:00
Yukihiro "Matz" Matsumoto b1ec92f7cd fix OP_BLKPUSH dump format 2014-04-28 11:59:46 +09:00
Yukihiro "Matz" Matsumoto 2e59cd43de prevent printf warning 2014-04-28 08:30:57 +09:00
Yukihiro "Matz" Matsumoto b53e69f18d better codedump formatting 2014-04-28 08:02:47 +09:00
Yukihiro "Matz" Matsumoto 3244ddf0c3 presreve local variables names in irep->lv 2014-04-28 07:29:37 +09:00