aboutsummaryrefslogtreecommitdiffstats
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-21 03:22:22 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-21 03:22:22 +0000
commit9fbc6596ccf089a26ec7c38e2837b667790edbf6 (patch)
tree4a758b664b0efc64efd14c1b0f8f0a5bda04ba97 /parse.y
parent2b627148661701da59abf66ccd4b7125386a3b30 (diff)
downloadruby-9fbc6596ccf089a26ec7c38e2837b667790edbf6.tar.gz
* keywords, parse.y (__ENCODING__): represent script encoding.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y8
1 files changed, 7 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 4c206a8c37..d86cd71afd 100644
--- a/parse.y
+++ b/parse.y
@@ -645,6 +645,7 @@ static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
keyword_END
keyword__LINE__
keyword__FILE__
+ keyword__ENCODING__
%token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL
%token <node> tINTEGER tFLOAT tSTRING_CONTENT tCHAR
@@ -1759,7 +1760,8 @@ op : '|' { ifndef_ripper($$ = '|'); }
| '`' { ifndef_ripper($$ = '`'); }
;
-reswords : keyword__LINE__ | keyword__FILE__ | keyword_BEGIN | keyword_END
+reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
+ | keyword_BEGIN | keyword_END
| keyword_alias | keyword_and | keyword_begin
| keyword_break | keyword_case | keyword_class | keyword_def
| keyword_defined | keyword_do | keyword_else | keyword_elsif
@@ -3923,6 +3925,7 @@ variable : tIDENTIFIER
| keyword_false {ifndef_ripper($$ = keyword_false);}
| keyword__FILE__ {ifndef_ripper($$ = keyword__FILE__);}
| keyword__LINE__ {ifndef_ripper($$ = keyword__LINE__);}
+ | keyword__ENCODING__ {ifndef_ripper($$ = keyword__ENCODING__);}
;
var_ref : variable
@@ -7569,6 +7572,9 @@ gettable_gen(struct parser_params *parser, ID id)
else if (id == keyword__LINE__) {
return NEW_LIT(INT2FIX(ruby_sourceline));
}
+ else if (id == keyword__ENCODING__) {
+ return NEW_LIT(rb_enc_from_encoding(parser->enc));
+ }
else if (is_local_id(id)) {
if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
if (local_id(id)) return NEW_LVAR(id);