Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
40268d22
Commit
40268d22
authored
Mar 01, 2013
by
skandhas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
format some source code (vm.c)
parent
c0e1fc93
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
182 additions
and
182 deletions
+182
-182
src/vm.c
src/vm.c
+182
-182
No files found.
src/vm.c
View file @
40268d22
...
...
@@ -821,12 +821,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
recv
=
regs
[
a
];
if
(
GET_OPCODE
(
i
)
!=
OP_SENDB
)
{
if
(
n
==
CALL_MAXARGS
)
{
SET_NIL_VALUE
(
regs
[
a
+
2
]);
}
else
{
SET_NIL_VALUE
(
regs
[
a
+
n
+
1
]);
}
if
(
n
==
CALL_MAXARGS
)
{
SET_NIL_VALUE
(
regs
[
a
+
2
]);
}
else
{
SET_NIL_VALUE
(
regs
[
a
+
n
+
1
]);
}
}
c
=
mrb_class
(
mrb
,
recv
);
m
=
mrb_method_search_vm
(
mrb
,
&
c
,
mid
);
...
...
@@ -840,7 +840,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
}
else
{
memmove
(
regs
+
a
+
2
,
regs
+
a
+
1
,
sizeof
(
mrb_value
)
*
(
n
+
1
));
regs
[
a
+
1
]
=
sym
;
regs
[
a
+
1
]
=
sym
;
n
++
;
}
}
...
...
@@ -910,9 +910,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
ci
->
target_class
=
m
->
target_class
;
ci
->
proc
=
m
;
if
(
m
->
env
)
{
if
(
m
->
env
->
mid
)
{
ci
->
mid
=
m
->
env
->
mid
;
}
if
(
m
->
env
->
mid
)
{
ci
->
mid
=
m
->
env
->
mid
;
}
if
(
!
m
->
env
->
stack
)
{
m
->
env
->
stack
=
mrb
->
stack
;
}
...
...
@@ -920,14 +920,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* prepare stack */
if
(
MRB_PROC_CFUNC_P
(
m
))
{
recv
=
m
->
body
.
func
(
mrb
,
recv
);
recv
=
m
->
body
.
func
(
mrb
,
recv
);
mrb_gc_arena_restore
(
mrb
,
ai
);
if
(
mrb
->
exc
)
goto
L_RAISE
;
/* pop stackpos */
ci
=
mrb
->
ci
;
ci
=
mrb
->
ci
;
regs
=
mrb
->
stack
=
mrb
->
stbase
+
ci
->
stackidx
;
regs
[
ci
->
acc
]
=
recv
;
pc
=
ci
->
pc
;
regs
[
ci
->
acc
]
=
recv
;
pc
=
ci
->
pc
;
cipop
(
mrb
);
irep
=
mrb
->
ci
->
proc
->
body
.
irep
;
pool
=
irep
->
pool
;
...
...
@@ -938,10 +938,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* setup environment for calling method */
proc
=
m
;
irep
=
m
->
body
.
irep
;
if
(
!
irep
)
{
mrb
->
stack
[
0
]
=
mrb_nil_value
();
goto
L_RETURN
;
}
if
(
!
irep
)
{
mrb
->
stack
[
0
]
=
mrb_nil_value
();
goto
L_RETURN
;
}
pool
=
irep
->
pool
;
syms
=
irep
->
syms
;
ci
->
nregs
=
irep
->
nregs
;
...
...
@@ -979,7 +979,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
}
else
{
memmove
(
regs
+
a
+
2
,
regs
+
a
+
1
,
sizeof
(
mrb_value
)
*
(
n
+
1
));
SET_SYM_VALUE
(
regs
[
a
+
1
],
ci
->
mid
);
SET_SYM_VALUE
(
regs
[
a
+
1
],
ci
->
mid
);
n
++
;
}
}
...
...
@@ -1104,13 +1104,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
struct
RArray
*
ary
=
mrb_ary_ptr
(
regs
[
1
]);
argv
=
ary
->
ptr
;
argc
=
ary
->
len
;
mrb_gc_protect
(
mrb
,
regs
[
1
]);
mrb_gc_protect
(
mrb
,
regs
[
1
]);
}
if
(
mrb
->
ci
->
proc
&&
MRB_PROC_STRICT_P
(
mrb
->
ci
->
proc
))
{
if
(
argc
>=
0
)
{
if
(
argc
<
m1
+
m2
||
(
r
==
0
&&
argc
>
len
))
{
argnum_error
(
mrb
,
m1
+
m2
);
goto
L_RAISE
;
argnum_error
(
mrb
,
m1
+
m2
);
goto
L_RAISE
;
}
}
}
...
...
@@ -1130,9 +1130,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if
(
r
)
{
/* r */
regs
[
m1
+
o
+
1
]
=
mrb_ary_new_capa
(
mrb
,
0
);
}
if
(
o
==
0
)
pc
++
;
else
pc
+=
argc
-
m1
-
m2
+
1
;
if
(
o
==
0
)
pc
++
;
else
pc
+=
argc
-
m1
-
m2
+
1
;
}
else
{
if
(
argv0
!=
argv
)
{
...
...
@@ -1173,29 +1173,29 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
int
eidx
;
L_RAISE:
ci
=
mrb
->
ci
;
mrb_obj_iv_ifnone
(
mrb
,
mrb
->
exc
,
mrb_intern
(
mrb
,
"lastpc"
),
mrb_voidp_value
(
pc
));
mrb_obj_iv_ifnone
(
mrb
,
mrb
->
exc
,
mrb_intern
(
mrb
,
"ciidx"
),
mrb_fixnum_value
(
ci
-
mrb
->
cibase
));
eidx
=
ci
->
eidx
;
ci
=
mrb
->
ci
;
mrb_obj_iv_ifnone
(
mrb
,
mrb
->
exc
,
mrb_intern
(
mrb
,
"lastpc"
),
mrb_voidp_value
(
pc
));
mrb_obj_iv_ifnone
(
mrb
,
mrb
->
exc
,
mrb_intern
(
mrb
,
"ciidx"
),
mrb_fixnum_value
(
ci
-
mrb
->
cibase
));
eidx
=
ci
->
eidx
;
if
(
ci
==
mrb
->
cibase
)
{
if
(
ci
->
ridx
==
0
)
goto
L_STOP
;
goto
L_RESCUE
;
}
if
(
ci
->
ridx
==
0
)
goto
L_STOP
;
goto
L_RESCUE
;
}
while
(
ci
[
0
].
ridx
==
ci
[
-
1
].
ridx
)
{
cipop
(
mrb
);
ci
=
mrb
->
ci
;
if
(
ci
[
1
].
acc
<
0
&&
prev_jmp
)
{
mrb
->
jmp
=
prev_jmp
;
longjmp
(
*
(
jmp_buf
*
)
mrb
->
jmp
,
1
);
}
while
(
eidx
>
mrb
->
ci
->
eidx
)
{
ecall
(
mrb
,
--
eidx
);
}
if
(
ci
[
1
].
acc
<
0
&&
prev_jmp
)
{
mrb
->
jmp
=
prev_jmp
;
longjmp
(
*
(
jmp_buf
*
)
mrb
->
jmp
,
1
);
}
while
(
eidx
>
mrb
->
ci
->
eidx
)
{
ecall
(
mrb
,
--
eidx
);
}
if
(
ci
==
mrb
->
cibase
)
{
if
(
ci
->
ridx
==
0
)
{
regs
=
mrb
->
stack
=
mrb
->
stbase
;
goto
L_STOP
;
}
regs
=
mrb
->
stack
=
mrb
->
stbase
;
goto
L_STOP
;
}
break
;
}
}
...
...
@@ -1222,11 +1222,11 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
goto
L_RAISE
;
}
ci
=
mrb
->
cibase
+
e
->
cioff
;
if
(
ci
==
mrb
->
cibase
)
{
if
(
ci
==
mrb
->
cibase
)
{
localjump_error
(
mrb
,
"return"
);
goto
L_RAISE
;
}
mrb
->
ci
=
ci
;
}
mrb
->
ci
=
ci
;
break
;
}
case
OP_R_NORMAL
:
...
...
@@ -1349,10 +1349,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if
(
lv
==
0
)
stack
=
regs
+
1
;
else
{
struct
REnv
*
e
=
uvenv
(
mrb
,
lv
-
1
);
if
(
!
e
)
{
localjump_error
(
mrb
,
"yield"
);
goto
L_RAISE
;
}
if
(
!
e
)
{
localjump_error
(
mrb
,
"yield"
);
goto
L_RAISE
;
}
stack
=
e
->
stack
+
1
;
}
regs
[
a
]
=
stack
[
m1
+
r
+
m2
];
...
...
@@ -1378,38 +1378,38 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* need to check if op is overridden */
switch
(
TYPES2
(
mrb_type
(
regs
[
a
]),
mrb_type
(
regs
[
a
+
1
])))
{
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FIXNUM
):
{
mrb_int
x
,
y
,
z
;
x
=
mrb_fixnum
(
regs
[
a
]);
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
z
=
x
+
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
==
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
+
(
mrb_float
)
y
);
break
;
}
SET_INT_VALUE
(
regs
[
a
],
z
);
}
break
;
{
mrb_int
x
,
y
,
z
;
x
=
mrb_fixnum
(
regs
[
a
]);
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
z
=
x
+
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
==
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
+
(
mrb_float
)
y
);
break
;
}
SET_INT_VALUE
(
regs
[
a
],
z
);
}
break
;
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FLOAT
):
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
+
y
);
}
break
;
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
+
y
);
}
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FIXNUM
):
OP_MATH_BODY
(
+
,
attr_f
,
attr_i
);
break
;
OP_MATH_BODY
(
+
,
attr_f
,
attr_i
);
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FLOAT
):
OP_MATH_BODY
(
+
,
attr_f
,
attr_f
);
break
;
OP_MATH_BODY
(
+
,
attr_f
,
attr_f
);
break
;
case
TYPES2
(
MRB_TT_STRING
,
MRB_TT_STRING
):
regs
[
a
]
=
mrb_str_plus
(
mrb
,
regs
[
a
],
regs
[
a
+
1
]);
break
;
regs
[
a
]
=
mrb_str_plus
(
mrb
,
regs
[
a
],
regs
[
a
+
1
]);
break
;
default:
goto
L_SEND
;
goto
L_SEND
;
}
mrb_gc_arena_restore
(
mrb
,
ai
);
NEXT
;
...
...
@@ -1422,35 +1422,35 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* need to check if op is overridden */
switch
(
TYPES2
(
mrb_type
(
regs
[
a
]),
mrb_type
(
regs
[
a
+
1
])))
{
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FIXNUM
):
{
mrb_int
x
,
y
,
z
;
x
=
mrb_fixnum
(
regs
[
a
]);
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
z
=
x
-
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
!=
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
-
(
mrb_float
)
y
);
break
;
}
SET_INT_VALUE
(
regs
[
a
],
z
);
}
break
;
{
mrb_int
x
,
y
,
z
;
x
=
mrb_fixnum
(
regs
[
a
]);
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
z
=
x
-
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
!=
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
-
(
mrb_float
)
y
);
break
;
}
SET_INT_VALUE
(
regs
[
a
],
z
);
}
break
;
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FLOAT
):
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
-
y
);
}
break
;
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
-
y
);
}
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FIXNUM
):
OP_MATH_BODY
(
-
,
attr_f
,
attr_i
);
break
;
OP_MATH_BODY
(
-
,
attr_f
,
attr_i
);
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FLOAT
):
OP_MATH_BODY
(
-
,
attr_f
,
attr_f
);
break
;
OP_MATH_BODY
(
-
,
attr_f
,
attr_f
);
break
;
default:
goto
L_SEND
;
goto
L_SEND
;
}
NEXT
;
}
...
...
@@ -1462,35 +1462,35 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* need to check if op is overridden */
switch
(
TYPES2
(
mrb_type
(
regs
[
a
]),
mrb_type
(
regs
[
a
+
1
])))
{
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FIXNUM
):
{
mrb_int
x
,
y
,
z
;
x
=
mrb_fixnum
(
regs
[
a
]);
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
z
=
x
*
y
;
if
(
x
!=
0
&&
z
/
x
!=
y
)
{
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
*
(
mrb_float
)
y
);
}
else
{
SET_INT_VALUE
(
regs
[
a
],
z
);
}
}
break
;
{
mrb_int
x
,
y
,
z
;
x
=
mrb_fixnum
(
regs
[
a
]);
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
z
=
x
*
y
;
if
(
x
!=
0
&&
z
/
x
!=
y
)
{
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
*
(
mrb_float
)
y
);
}
else
{
SET_INT_VALUE
(
regs
[
a
],
z
);
}
}
break
;
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FLOAT
):
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
*
y
);
}
break
;
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
*
y
);
}
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FIXNUM
):
OP_MATH_BODY
(
*
,
attr_f
,
attr_i
);
break
;
OP_MATH_BODY
(
*
,
attr_f
,
attr_i
);
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FLOAT
):
OP_MATH_BODY
(
*
,
attr_f
,
attr_f
);
break
;
OP_MATH_BODY
(
*
,
attr_f
,
attr_f
);
break
;
default:
goto
L_SEND
;
goto
L_SEND
;
}
NEXT
;
}
...
...
@@ -1502,27 +1502,27 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* need to check if op is overridden */
switch
(
TYPES2
(
mrb_type
(
regs
[
a
]),
mrb_type
(
regs
[
a
+
1
])))
{
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FIXNUM
):
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_int
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
/
(
mrb_float
)
y
);
}
break
;
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_int
y
=
mrb_fixnum
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
/
(
mrb_float
)
y
);
}
break
;
case
TYPES2
(
MRB_TT_FIXNUM
,
MRB_TT_FLOAT
):
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
/
y
);
}
break
;
{
mrb_int
x
=
mrb_fixnum
(
regs
[
a
]);
mrb_float
y
=
mrb_float
(
regs
[
a
+
1
]);
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
/
y
);
}
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FIXNUM
):
OP_MATH_BODY
(
/
,
attr_f
,
attr_i
);
break
;
OP_MATH_BODY
(
/
,
attr_f
,
attr_i
);
break
;
case
TYPES2
(
MRB_TT_FLOAT
,
MRB_TT_FLOAT
):
OP_MATH_BODY
(
/
,
attr_f
,
attr_f
);
break
;
OP_MATH_BODY
(
/
,
attr_f
,
attr_f
);
break
;
default:
goto
L_SEND
;
goto
L_SEND
;
}
NEXT
;
}
...
...
@@ -1534,18 +1534,18 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* need to check if + is overridden */
switch
(
mrb_type
(
regs
[
a
]))
{
case
MRB_TT_FIXNUM
:
{
mrb_int
x
=
regs
[
a
].
attr_i
;
mrb_int
y
=
GETARG_C
(
i
);
mrb_int
z
=
x
+
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
==
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
+
(
mrb_float
)
y
);
break
;
}
regs
[
a
].
attr_i
=
z
;
}
{
mrb_int
x
=
regs
[
a
].
attr_i
;
mrb_int
y
=
GETARG_C
(
i
);
mrb_int
z
=
x
+
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
==
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
+
(
mrb_float
)
y
);
break
;
}
regs
[
a
].
attr_i
=
z
;
}
break
;
case
MRB_TT_FLOAT
:
regs
[
a
].
attr_f
+=
GETARG_C
(
i
);
...
...
@@ -1565,18 +1565,18 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* need to check if + is overridden */
switch
(
mrb_type
(
regs
[
a
]))
{
case
MRB_TT_FIXNUM
:
{
mrb_int
x
=
regs
[
a
].
attr_i
;
mrb_int
y
=
GETARG_C
(
i
);
mrb_int
z
=
x
-
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
!=
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
-
(
mrb_float
)
y
);
break
;
}
regs
[
a
].
attr_i
=
z
;
}
{
mrb_int
x
=
regs
[
a
].
attr_i
;
mrb_int
y
=
GETARG_C
(
i
);
mrb_int
z
=
x
-
y
;
if
(((
x
<
0
)
^
(
y
<
0
))
!=
0
&&
(
x
<
0
)
!=
(
z
<
0
))
{
/* integer overflow */
SET_FLT_VALUE
(
regs
[
a
],
(
mrb_float
)
x
-
(
mrb_float
)
y
);
break
;
}
regs
[
a
].
attr_i
=
z
;
}
break
;
case
MRB_TT_FLOAT
:
regs
[
a
].
attr_f
-=
GETARG_C
(
i
);
...
...
@@ -1623,10 +1623,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1)*/
int
a
=
GETARG_A
(
i
);
if
(
mrb_obj_eq
(
mrb
,
regs
[
a
],
regs
[
a
+
1
]))
{
SET_TRUE_VALUE
(
regs
[
a
]);
SET_TRUE_VALUE
(
regs
[
a
]);
}
else
{
OP_CMP
(
==
);
OP_CMP
(
==
);
}
NEXT
;
}
...
...
@@ -1691,7 +1691,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
}
}
else
{
regs
[
GETARG_A
(
i
)]
=
mrb_ary_ref
(
mrb
,
v
,
c
);
regs
[
GETARG_A
(
i
)]
=
mrb_ary_ref
(
mrb
,
v
,
c
);
}
NEXT
;
}
...
...
@@ -1724,13 +1724,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
if
(
len
>
pre
+
post
)
{
regs
[
a
++
]
=
mrb_ary_new_elts
(
mrb
,
len
-
pre
-
post
,
ary
->
ptr
+
pre
);
while
(
post
--
)
{
regs
[
a
++
]
=
ary
->
ptr
[
len
-
post
-
1
];
regs
[
a
++
]
=
ary
->
ptr
[
len
-
post
-
1
];
}
}
else
{
regs
[
a
++
]
=
mrb_ary_new_capa
(
mrb
,
0
);
regs
[
a
++
]
=
mrb_ary_new_capa
(
mrb
,
0
);
for
(
i
=
0
;
i
+
pre
<
len
;
i
++
)
{
regs
[
a
+
i
]
=
ary
->
ptr
[
pre
+
i
];
regs
[
a
+
i
]
=
ary
->
ptr
[
pre
+
i
];
}
while
(
i
<
post
)
{
SET_NIL_VALUE
(
regs
[
a
+
i
]);
...
...
@@ -1821,7 +1821,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
base
=
regs
[
a
];
if
(
mrb_nil_p
(
base
))
{
base
=
mrb_obj_value
(
mrb
->
ci
->
target_class
);
base
=
mrb_obj_value
(
mrb
->
ci
->
target_class
);
}
c
=
mrb_vm_define_module
(
mrb
,
base
,
id
);
regs
[
a
]
=
mrb_obj_value
(
c
);
...
...
@@ -1866,7 +1866,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
pool
=
irep
->
pool
;
syms
=
irep
->
syms
;
stack_extend
(
mrb
,
irep
->
nregs
,
1
);
ci
->
nregs
=
irep
->
nregs
;
ci
->
nregs
=
irep
->
nregs
;
regs
=
mrb
->
stack
;
pc
=
irep
->
iseq
;
JUMP
;
...
...
@@ -1924,15 +1924,15 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
/* stop VM */
L_STOP:
{
int
n
=
mrb
->
ci
->
eidx
;
int
n
=
mrb
->
ci
->
eidx
;
while
(
n
--
)
{
ecall
(
mrb
,
n
);
}
while
(
n
--
)
{
ecall
(
mrb
,
n
);
}
}
mrb
->
jmp
=
prev_jmp
;
if
(
mrb
->
exc
)
{
return
mrb_obj_value
(
mrb
->
exc
);
return
mrb_obj_value
(
mrb
->
exc
);
}
return
regs
[
irep
->
nlocals
];
}
...
...
@@ -1943,10 +1943,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
mrb_value
exc
;
if
(
GETARG_A
(
i
)
==
0
)
{
exc
=
mrb_exc_new3
(
mrb
,
E_RUNTIME_ERROR
,
msg
);
exc
=
mrb_exc_new3
(
mrb
,
E_RUNTIME_ERROR
,
msg
);
}
else
{
exc
=
mrb_exc_new3
(
mrb
,
E_LOCALJUMP_ERROR
,
msg
);
exc
=
mrb_exc_new3
(
mrb
,
E_LOCALJUMP_ERROR
,
msg
);
}
mrb
->
exc
=
(
struct
RObject
*
)
mrb_object
(
exc
);
goto
L_RAISE
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment