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
540066c9
Commit
540066c9
authored
Sep 12, 2012
by
Yukihiro Matsumoto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mrb_sym can be short integer; reduced 10KB
parent
3a49dfd1
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
95 additions
and
92 deletions
+95
-92
include/mrbconf.h
include/mrbconf.h
+1
-2
src/codegen.c
src/codegen.c
+29
-28
src/parse.y
src/parse.y
+65
-62
No files found.
include/mrbconf.h
View file @
540066c9
...
...
@@ -62,11 +62,10 @@ typedef double mrb_float;
#ifdef MRB_NAN_BOXING
typedef
int32_t
mrb_int
;
typedef
int32_t
mrb_sym
;
#else
typedef
int
mrb_int
;
typedef
intptr_t
mrb_sym
;
#endif
typedef
short
mrb_sym
;
/* define ENABLE_XXXX from DISABLE_XXX */
#ifndef DISABLE_REGEXP
...
...
src/codegen.c
View file @
540066c9
...
...
@@ -466,7 +466,8 @@ node_len(node *tree)
return
n
;
}
#define lv_name(lv) ((mrb_sym)(lv)->car)
#define sym(x) ((mrb_sym)(intptr_t)(x))
#define lv_name(lv) sym((lv)->car)
static
int
lv_idx
(
codegen_scope
*
s
,
mrb_sym
id
)
{
...
...
@@ -582,7 +583,7 @@ lambda_body(codegen_scope *s, node *tree, int blk)
dispatch
(
s
,
pos
+
i
);
codegen
(
s
,
opt
->
car
->
cdr
,
VAL
);
idx
=
lv_idx
(
s
,
(
mrb_sym
)
opt
->
car
->
car
);
idx
=
lv_idx
(
s
,
(
mrb_sym
)
(
intptr_t
)
opt
->
car
->
car
);
pop
();
genop_peep
(
s
,
MKOP_AB
(
OP_MOVE
,
idx
,
cursp
()),
NOVAL
);
i
++
;
...
...
@@ -706,7 +707,7 @@ gen_values(codegen_scope *s, node *t)
static
void
gen_call
(
codegen_scope
*
s
,
node
*
tree
,
mrb_sym
name
,
int
sp
,
int
val
)
{
mrb_sym
sym
=
name
?
name
:
(
mrb_sym
)
tree
->
cdr
->
car
;
mrb_sym
sym
=
name
?
name
:
sym
(
tree
->
cdr
->
car
)
;
int
idx
;
int
n
=
0
,
noop
=
0
,
sendv
=
0
,
blk
=
0
;
...
...
@@ -796,11 +797,11 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
node
=
node
->
cdr
;
switch
((
intptr_t
)
type
)
{
case
NODE_GVAR
:
idx
=
new_sym
(
s
,
(
mrb_sym
)
node
);
idx
=
new_sym
(
s
,
sym
(
node
)
);
genop_peep
(
s
,
MKOP_ABx
(
OP_SETGLOBAL
,
sp
,
idx
),
val
);
break
;
case
NODE_LVAR
:
idx
=
lv_idx
(
s
,
(
mrb_sym
)
node
);
idx
=
lv_idx
(
s
,
sym
(
node
)
);
if
(
idx
>
0
)
{
if
(
idx
!=
sp
)
{
genop_peep
(
s
,
MKOP_AB
(
OP_MOVE
,
idx
,
sp
),
val
);
...
...
@@ -812,7 +813,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
codegen_scope
*
up
=
s
->
prev
;
while
(
up
)
{
idx
=
lv_idx
(
up
,
(
mrb_sym
)
node
);
idx
=
lv_idx
(
up
,
sym
(
node
)
);
if
(
idx
>
0
)
{
genop_peep
(
s
,
MKOP_ABC
(
OP_SETUPVAR
,
sp
,
idx
,
lv
),
val
);
break
;
...
...
@@ -824,19 +825,19 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
}
break
;
case
NODE_IVAR
:
idx
=
new_sym
(
s
,
(
mrb_sym
)
node
);
idx
=
new_sym
(
s
,
sym
(
node
)
);
genop_peep
(
s
,
MKOP_ABx
(
OP_SETIV
,
sp
,
idx
),
val
);
break
;
case
NODE_CVAR
:
idx
=
new_sym
(
s
,
(
mrb_sym
)
node
);
idx
=
new_sym
(
s
,
sym
(
node
)
);
genop_peep
(
s
,
MKOP_ABx
(
OP_SETCV
,
sp
,
idx
),
val
);
break
;
case
NODE_CONST
:
idx
=
new_sym
(
s
,
(
mrb_sym
)
node
);
idx
=
new_sym
(
s
,
sym
(
node
)
);
genop_peep
(
s
,
MKOP_ABx
(
OP_SETCONST
,
sp
,
idx
),
val
);
break
;
case
NODE_COLON2
:
idx
=
new_sym
(
s
,
(
mrb_sym
)
node
->
cdr
);
idx
=
new_sym
(
s
,
sym
(
node
->
cdr
)
);
genop_peep
(
s
,
MKOP_AB
(
OP_MOVE
,
cursp
(),
sp
),
NOVAL
);
push
();
codegen
(
s
,
node
->
car
,
VAL
);
...
...
@@ -846,7 +847,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
case
NODE_CALL
:
push
();
gen_call
(
s
,
node
,
attrsym
(
s
,
(
mrb_sym
)
node
->
cdr
->
car
),
sp
,
val
);
gen_call
(
s
,
node
,
attrsym
(
s
,
sym
(
node
->
cdr
->
car
)
),
sp
,
val
);
val
=
NOVAL
;
/* push should have done in gen_call() */
break
;
...
...
@@ -1247,7 +1248,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_COLON2
:
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
->
cdr
);
int
sym
=
new_sym
(
s
,
sym
(
tree
->
cdr
)
);
codegen
(
s
,
tree
->
car
,
VAL
);
pop
();
...
...
@@ -1258,7 +1259,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_COLON3
:
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_sym
(
s
,
sym
(
tree
)
);
genop
(
s
,
MKOP_A
(
OP_OCLASS
,
cursp
()));
genop
(
s
,
MKOP_ABx
(
OP_GETMCNST
,
cursp
(),
sym
));
...
...
@@ -1378,7 +1379,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_OP_ASGN
:
{
mrb_sym
sym
=
(
mrb_sym
)
tree
->
cdr
->
car
;
mrb_sym
sym
=
sym
(
tree
->
cdr
->
car
)
;
int
len
;
const
char
*
name
=
mrb_sym2name_len
(
s
->
mrb
,
sym
,
&
len
);
int
idx
;
...
...
@@ -1592,7 +1593,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_LVAR
:
if
(
val
)
{
int
idx
=
lv_idx
(
s
,
(
mrb_sym
)
tree
);
int
idx
=
lv_idx
(
s
,
sym
(
tree
)
);
if
(
idx
>
0
)
{
genop
(
s
,
MKOP_AB
(
OP_MOVE
,
cursp
(),
idx
));
...
...
@@ -1602,7 +1603,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen_scope
*
up
=
s
->
prev
;
while
(
up
)
{
idx
=
lv_idx
(
up
,
(
mrb_sym
)
tree
);
idx
=
lv_idx
(
up
,
sym
(
tree
)
);
if
(
idx
>
0
)
{
genop
(
s
,
MKOP_ABC
(
OP_GETUPVAR
,
cursp
(),
idx
,
lv
));
break
;
...
...
@@ -1617,7 +1618,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_GVAR
:
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_sym
(
s
,
sym
(
tree
)
);
genop
(
s
,
MKOP_ABx
(
OP_GETGLOBAL
,
cursp
(),
sym
));
push
();
...
...
@@ -1626,7 +1627,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_IVAR
:
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_sym
(
s
,
sym
(
tree
)
);
genop
(
s
,
MKOP_ABx
(
OP_GETIV
,
cursp
(),
sym
));
push
();
...
...
@@ -1635,7 +1636,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_CVAR
:
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_sym
(
s
,
sym
(
tree
)
);
genop
(
s
,
MKOP_ABx
(
OP_GETCV
,
cursp
(),
sym
));
push
();
...
...
@@ -1644,7 +1645,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_CONST
:
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_sym
(
s
,
sym
(
tree
)
);
genop
(
s
,
MKOP_ABx
(
OP_GETCONST
,
cursp
(),
sym
));
push
();
...
...
@@ -1828,7 +1829,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_SYM
:
if
(
val
)
{
int
sym
=
new_sym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_sym
(
s
,
sym
(
tree
)
);
genop
(
s
,
MKOP_ABx
(
OP_LOADSYM
,
cursp
(),
sym
));
push
();
...
...
@@ -1874,8 +1875,8 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_ALIAS
:
{
int
a
=
new_msym
(
s
,
(
mrb_sym
)
tree
->
car
);
int
b
=
new_msym
(
s
,
(
mrb_sym
)
tree
->
cdr
);
int
a
=
new_msym
(
s
,
sym
(
tree
->
car
)
);
int
b
=
new_msym
(
s
,
sym
(
tree
->
cdr
)
);
int
c
=
new_msym
(
s
,
mrb_intern
(
s
->
mrb
,
"alias_method"
));
genop
(
s
,
MKOP_A
(
OP_TCLASS
,
cursp
()));
...
...
@@ -1895,7 +1896,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_UNDEF
:
{
int
sym
=
new_msym
(
s
,
(
mrb_sym
)
tree
);
int
sym
=
new_msym
(
s
,
sym
(
tree
)
);
int
undef
=
new_msym
(
s
,
mrb_intern
(
s
->
mrb
,
"undef_method"
));
genop
(
s
,
MKOP_A
(
OP_TCLASS
,
cursp
()));
...
...
@@ -1934,7 +1935,7 @@ codegen(codegen_scope *s, node *tree, int val)
push
();
}
pop
();
pop
();
idx
=
new_msym
(
s
,
(
mrb_sym
)
tree
->
car
->
cdr
);
idx
=
new_msym
(
s
,
sym
(
tree
->
car
->
cdr
)
);
genop
(
s
,
MKOP_AB
(
OP_CLASS
,
cursp
(),
idx
));
idx
=
scope_body
(
s
,
tree
->
cdr
->
cdr
->
car
);
genop
(
s
,
MKOP_ABx
(
OP_EXEC
,
cursp
(),
idx
));
...
...
@@ -1960,7 +1961,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen
(
s
,
tree
->
car
->
car
,
VAL
);
}
pop
();
idx
=
new_msym
(
s
,
(
mrb_sym
)
tree
->
car
->
cdr
);
idx
=
new_msym
(
s
,
sym
(
tree
->
car
->
cdr
)
);
genop
(
s
,
MKOP_AB
(
OP_MODULE
,
cursp
(),
idx
));
idx
=
scope_body
(
s
,
tree
->
cdr
->
car
);
genop
(
s
,
MKOP_ABx
(
OP_EXEC
,
cursp
(),
idx
));
...
...
@@ -1987,7 +1988,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_DEF
:
{
int
sym
=
new_msym
(
s
,
(
mrb_sym
)
tree
->
car
);
int
sym
=
new_msym
(
s
,
sym
(
tree
->
car
)
);
int
idx
=
lambda_body
(
s
,
tree
->
cdr
,
0
);
genop
(
s
,
MKOP_A
(
OP_TCLASS
,
cursp
()));
...
...
@@ -2004,7 +2005,7 @@ codegen(codegen_scope *s, node *tree, int val)
case
NODE_SDEF
:
{
node
*
recv
=
tree
->
car
;
int
sym
=
new_msym
(
s
,
(
mrb_sym
)
tree
->
cdr
->
car
);
int
sym
=
new_msym
(
s
,
sym
(
tree
->
cdr
->
car
)
);
int
idx
=
lambda_body
(
s
,
tree
->
cdr
->
cdr
,
0
);
codegen
(
s
,
recv
,
VAL
);
...
...
src/parse.y
View file @
540066c9
This diff is collapsed.
Click to expand it.
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