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
0b806ca1
Commit
0b806ca1
authored
Sep 02, 2013
by
take_cheeze
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reduce node size
parent
8082a377
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
12 deletions
+46
-12
include/mruby/compile.h
include/mruby/compile.h
+6
-2
src/codegen.c
src/codegen.c
+12
-8
src/parse.y
src/parse.y
+28
-2
No files found.
include/mruby/compile.h
View file @
0b806ca1
...
...
@@ -37,8 +37,7 @@ void mrbc_partial_hook(mrb_state *mrb, mrbc_context *c, int (*partial_hook)(stru
/* AST node structure */
typedef
struct
mrb_ast_node
{
struct
mrb_ast_node
*
car
,
*
cdr
;
uint16_t
lineno
;
char
const
*
filename
;
uint16_t
lineno
,
filename
;
}
mrb_ast_node
;
/* lexer states */
...
...
@@ -144,6 +143,10 @@ struct mrb_parser_state {
struct
mrb_parser_message
error_buffer
[
10
];
struct
mrb_parser_message
warn_buffer
[
10
];
mrb_sym
*
filename_table
;
size_t
filename_table_length
;
int
current_filename_index
;
jmp_buf
jmp
;
};
...
...
@@ -152,6 +155,7 @@ void mrb_parser_free(struct mrb_parser_state*);
void
mrb_parser_parse
(
struct
mrb_parser_state
*
,
mrbc_context
*
);
void
mrb_parser_set_filename
(
struct
mrb_parser_state
*
,
char
const
*
);
char
const
*
mrb_parser_get_filename
(
struct
mrb_parser_state
*
,
uint16_t
idx
);
/* utility functions */
#ifdef ENABLE_STDIO
...
...
src/codegen.c
View file @
0b806ca1
...
...
@@ -70,6 +70,8 @@ typedef struct scope {
int
idx
;
int
debug_start_pos
;
uint16_t
filename_index
;
parser_state
*
parser
;
}
codegen_scope
;
static
codegen_scope
*
scope_new
(
mrb_state
*
mrb
,
codegen_scope
*
prev
,
node
*
lv
);
...
...
@@ -1112,14 +1114,12 @@ codegen(codegen_scope *s, node *tree, int val)
if
(
!
tree
)
return
;
if
(
s
->
irep
)
{
if
(
s
->
pc
>
0
&&
strcmp
(
s
->
filename
,
tree
->
filename
)
!=
0
)
{
mrb_debug_info_append_file
(
s
->
mrb
,
s
->
irep
,
s
->
debug_start_pos
,
s
->
pc
);
s
->
debug_start_pos
=
s
->
pc
;
// fprintf(stderr, "%s\n", s->filename);
}
s
->
irep
->
filename
=
tree
->
filename
;
s
->
filename
=
tree
->
filename
;
if
(
s
->
irep
&&
s
->
pc
>
0
&&
s
->
filename_index
!=
tree
->
filename
)
{
s
->
irep
->
filename
=
s
->
filename
=
mrb_parser_get_filename
(
s
->
parser
,
s
->
filename_index
);
mrb_debug_info_append_file
(
s
->
mrb
,
s
->
irep
,
s
->
debug_start_pos
,
s
->
pc
);
s
->
debug_start_pos
=
s
->
pc
;
s
->
filename_index
=
tree
->
filename
;
s
->
filename
=
mrb_parser_get_filename
(
s
->
parser
,
tree
->
filename
);
}
nt
=
(
intptr_t
)
tree
->
car
;
...
...
@@ -2421,6 +2421,8 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
else
{
p
->
irep
->
debug_info
=
NULL
;
}
p
->
parser
=
prev
->
parser
;
p
->
filename_index
=
prev
->
filename_index
;
return
p
;
}
...
...
@@ -2869,7 +2871,9 @@ codegen_start(mrb_state *mrb, parser_state *p)
return
-
1
;
}
scope
->
mrb
=
mrb
;
scope
->
parser
=
p
;
scope
->
filename
=
p
->
filename
;
scope
->
filename_index
=
p
->
current_filename_index
;
if
(
setjmp
(
scope
->
jmp
)
==
0
)
{
// prepare irep
codegen
(
scope
,
p
->
tree
,
NOVAL
);
...
...
src/parse.y
View file @
0b806ca1
...
...
@@ -120,7 +120,7 @@ cons_gen(parser_state *p, node *car, node *cdr)
c->car = car;
c->cdr = cdr;
c->lineno = p->lineno;
c->filename = p->
filename
;
c->filename = p->
current_filename_index
;
return c;
}
#define cons(a,b) cons_gen(p,(a),(b))
...
...
@@ -5183,8 +5183,34 @@ mrbc_partial_hook(mrb_state *mrb, mrbc_context *c, int (*func)(struct mrb_parser
void
mrb_parser_set_filename(struct mrb_parser_state* p, char const* f)
{
p->filename = mrbc_filename(p->mrb, p->cxt, f);
mrb_sym const sym = mrb_intern(p->mrb, f);
size_t len;
p->filename = mrb_sym2name_len(p->mrb, sym, &len);
p->lineno = 1;
for(size_t i = 0; i < p->filename_table_length; ++i) {
if(p->filename_table[i] == sym) {
p->current_filename_index = i;
return;
}
}
p->current_filename_index = p->filename_table_length++;
mrb_sym* const new_table = parser_palloc(p, sizeof(mrb_sym) * p->filename_table_length);
if (p->filename_table) {
memcpy(new_table, p->filename_table, sizeof(mrb_sym) * p->filename_table_length);
}
p->filename_table = new_table;
p->filename_table[p->filename_table_length - 1] = sym;
}
char const* mrb_parser_get_filename(struct mrb_parser_state* p, uint16_t idx) {
if (idx >= p->filename_table_length) { return NULL; }
else {
size_t len;
return mrb_sym2name_len(p->mrb, p->filename_table[idx], &len);
}
}
#ifdef ENABLE_STDIO
...
...
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