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
cdf8114e
Commit
cdf8114e
authored
Mar 14, 2013
by
FUKUZAWA-Tadashi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
%I %i literal
parent
5217d889
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
89 additions
and
10 deletions
+89
-10
include/mruby/compile.h
include/mruby/compile.h
+9
-7
src/codegen.c
src/codegen.c
+4
-0
src/node.h
src/node.h
+1
-0
src/parse.y
src/parse.y
+28
-2
test/t/literals.rb
test/t/literals.rb
+47
-1
No files found.
include/mruby/compile.h
View file @
cdf8114e
...
...
@@ -74,6 +74,8 @@ enum mrb_string_type {
str_sword
=
(
STR_FUNC_PARSING
|
STR_FUNC_WORD
|
STR_FUNC_ARRAY
),
str_dword
=
(
STR_FUNC_PARSING
|
STR_FUNC_WORD
|
STR_FUNC_ARRAY
|
STR_FUNC_EXPAND
),
str_ssym
=
(
STR_FUNC_PARSING
|
STR_FUNC_SYMBOL
),
str_ssymbols
=
(
STR_FUNC_PARSING
|
STR_FUNC_SYMBOL
|
STR_FUNC_ARRAY
),
str_dsymbols
=
(
STR_FUNC_PARSING
|
STR_FUNC_SYMBOL
|
STR_FUNC_ARRAY
|
STR_FUNC_EXPAND
),
str_heredoc
=
(
STR_FUNC_PARSING
|
STR_FUNC_HEREDOC
),
};
...
...
src/codegen.c
View file @
cdf8114e
...
...
@@ -2027,6 +2027,10 @@ codegen(codegen_scope *s, node *tree, int val)
gen_literal_array
(
s
,
tree
,
FALSE
,
val
);
break
;
case
NODE_SYMBOLS
:
gen_literal_array
(
s
,
tree
,
TRUE
,
val
);
break
;
case
NODE_REGX
:
if
(
val
)
{
char
*
p1
=
(
char
*
)
tree
->
car
;
...
...
src/node.h
View file @
cdf8114e
...
...
@@ -108,6 +108,7 @@ enum node_type {
NODE_HEREDOC
,
NODE_LITERAL_DELIM
,
NODE_WORDS
,
NODE_SYMBOLS
,
NODE_LAST
};
...
...
src/parse.y
View file @
cdf8114e
...
...
@@ -763,6 +763,13 @@ new_words(parser_state *p, node *a)
return cons((node*)NODE_WORDS, a);
}
// (:symbols . a)
static node*
new_symbols(parser_state *p, node *a)
{
return cons((node*)NODE_SYMBOLS, a);
}
// xxx -----------------------------
// (:call a op)
...
...
@@ -991,7 +998,7 @@ heredoc_end(parser_state *p)
%type <nd> mlhs mlhs_list mlhs_post mlhs_basic mlhs_item mlhs_node mlhs_inner
%type <id> fsym sym basic_symbol operation operation2 operation3
%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg
%type <nd> heredoc words
%type <nd> heredoc words
symbols
%token tUPLUS /* unary+ */
%token tUMINUS /* unary- */
...
...
@@ -1020,7 +1027,7 @@ heredoc_end(parser_state *p)
%token tSTAR /* * */
%token tAMPER /* & */
%token tLAMBDA /* -> */
%token tSYMBEG tREGEXP_BEG tWORDS_BEG
%token tSYMBEG tREGEXP_BEG tWORDS_BEG
tSYMBOLS_BEG
%token tSTRING_BEG tSTRING_DVAR tLAMBEG
%token <nd> tHEREDOC_BEG /* <<, <<- */
%token tHEREDOC_END tLITERAL_DELIM
...
...
@@ -2535,6 +2542,7 @@ opt_ensure : keyword_ensure compstmt
literal : numeric
| symbol
| words
| symbols
;
string : tCHAR
...
...
@@ -2653,6 +2661,16 @@ sym : fname
}
;
symbols : tSYMBOLS_BEG tSTRING
{
$$ = new_symbols(p, list1($2));
}
| tSYMBOLS_BEG string_rep tSTRING
{
$$ = new_symbols(p, push($2, $3));
}
;
numeric : tINTEGER
| tFLOAT
| tUMINUS_NUM tINTEGER %prec tLOWEST
...
...
@@ -4625,6 +4643,14 @@ parser_yylex(parser_state *p)
p->lex_strterm = new_strterm(p, str_ssym, term, paren);
return tSYMBEG;
case 'I':
p->lex_strterm = new_strterm(p, str_dsymbols, term, paren);
return tSYMBOLS_BEG;
case 'i':
p->lex_strterm = new_strterm(p, str_ssymbols, term, paren);
return tSYMBOLS_BEG;
default:
yyerror(p, "unknown type of %string");
return 0;
...
...
test/t/literals.rb
View file @
cdf8114e
...
...
@@ -186,8 +186,54 @@ d
test1
and
test2
end
assert
(
'Literals Array of symbols'
)
do
a
=
%I{abc
#{
1
+
2
}
def
\}
g}
b
=
%I(abc
#{
2
+
3
}
def
\(
g)
c
=
%I[
#{
3
+
4
}
]
d
=
%I<
#{
4
+
5
}
>
e
=
%I//
f
=
%I[[ab cd][ef]]
g
=
%I{
ab
#{
-
1
}
1
2
#{
2
}
}
test1
=
(
a
==
[
:'abc3def'
,
:'}g'
]
and
b
==
[
:'abc'
,
:'5'
,
:'def'
,
:'(g'
]
and
c
==
[
:'7'
]
and
d
==
[
:'9'
]
and
e
==
[]
and
f
==
[
:'[ab'
,
:'cd][ef]'
]
and
g
==
[
:'ab'
,
:'-11'
,
:'22'
]
)
a
=
%i{abc#{1+2}def
\}
g}
b
=
%i(abc #{2+3} def
\(
g)
c
=
%i[#{3+4}]
d
=
%i< #{4+5} >
e
=
%i//
f
=
%i[[ab cd][ef]]
g
=
%i{
ab
#{-1}1
2#{2}
}
test2
=
(
a
==
[
:'abc#{1+2}def'
,
:'}g'
]
and
b
==
[
:'abc'
,
:'#{2+3}'
,
:'def'
,
:'(g'
]
and
c
==
[
:'#{3+4}'
]
and
d
==
[
:'#{4+5}'
]
and
e
==
[]
and
f
==
[
:'[ab'
,
:'cd][ef]'
]
and
g
==
[
:'ab'
,
:'#{-1}1'
,
:'2#{2}'
]
)
test1
and
test2
end
assert
(
'Literals Symbol'
,
'8.7.6.6'
)
do
/* do not compile error */
# do not compile error
:
$asd
:@asd
:@@asd
...
...
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