diff --git a/doc/guides/symbol.md b/doc/guides/symbol.md index c98297329..dcdb58459 100644 --- a/doc/guides/symbol.md +++ b/doc/guides/symbol.md @@ -63,6 +63,7 @@ header. - `MRB_SYM_B(xor)` //=> xor! (Method with Bang) - `MRB_SYM_Q(xor)` //=> xor? (Method with Question mark) - `MRB_SYM_E(xor)` //=> xor= (Method with Equal) +- `MRB_GVSYM(xor)` //=> $xor (Global Variable) - `MRB_CVSYM(xor)` //=> @@xor (Class Variable) - `MRB_IVSYM(xor)` //=> @xor (Instance Variable) - `MRB_OPSYM(xor)` //=> ^ (Operator) diff --git a/include/mruby.h b/include/mruby.h index 6bae79b0f..14d491b11 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1141,8 +1141,9 @@ MRB_API mrb_value mrb_funcall_argv(mrb_state *mrb, mrb_value val, mrb_sym name, */ MRB_API mrb_value mrb_funcall_with_block(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv, mrb_value block); /** - * Create a symbol from C string. But usually it's better to use MRB_SYM, - * MRB_OPSYM, MRB_CVSYM, MRB_IVSYM, MRB_SYM_B, MRB_SYM_Q, MRB_SYM_E macros. + * Create a symbol from C string. But usually it's better to + * use MRB_SYM, MRB_OPSYM, MRB_CVSYM, MRB_IVSYM, MRB_GVSYM, + * MRB_SYM_B, MRB_SYM_Q, MRB_SYM_E macros. * * Example: * diff --git a/include/mruby/presym.h b/include/mruby/presym.h index 066b675e7..7c6374ad1 100644 --- a/include/mruby/presym.h +++ b/include/mruby/presym.h @@ -19,6 +19,7 @@ * macros. * * MRB_OPSYM(xor) //=> ^ (Operator) + * MRB_GVSYM(xor) //=> $xor (Global Variable) * MRB_CVSYM(xor) //=> @@xor (Class Variable) * MRB_IVSYM(xor) //=> @xor (Instance Variable) * MRB_SYM_B(xor) //=> xor! (Method with Bang) diff --git a/include/mruby/presym/disable.h b/include/mruby/presym/disable.h index 45843fbf8..670885853 100644 --- a/include/mruby/presym/disable.h +++ b/include/mruby/presym/disable.h @@ -12,6 +12,7 @@ #define MRB_PRESYM_MAX 0 #define MRB_OPSYM(name) MRB_OPSYM__##name(mrb) +#define MRB_GVSYM(name) mrb_intern_lit(mrb, "$" #name) #define MRB_CVSYM(name) mrb_intern_lit(mrb, "@@" #name) #define MRB_IVSYM(name) mrb_intern_lit(mrb, "@" #name) #define MRB_SYM_B(name) mrb_intern_lit(mrb, #name "!") @@ -20,6 +21,7 @@ #define MRB_SYM(name) mrb_intern_lit(mrb, #name) #define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name(mrb) +#define MRB_GVSYM_2(mrb, name) mrb_intern_lit(mrb, "$" #name) #define MRB_CVSYM_2(mrb, name) mrb_intern_lit(mrb, "@@" #name) #define MRB_IVSYM_2(mrb, name) mrb_intern_lit(mrb, "@" #name) #define MRB_SYM_B_2(mrb, name) mrb_intern_lit(mrb, #name "!") diff --git a/include/mruby/presym/enable.h b/include/mruby/presym/enable.h index 8ca0c3cc6..44b606446 100644 --- a/include/mruby/presym/enable.h +++ b/include/mruby/presym/enable.h @@ -10,6 +10,7 @@ #include #define MRB_OPSYM(name) MRB_OPSYM__##name +#define MRB_GVSYM(name) MRB_GVSYM__##name #define MRB_CVSYM(name) MRB_CVSYM__##name #define MRB_IVSYM(name) MRB_IVSYM__##name #define MRB_SYM_B(name) MRB_SYM_B__##name @@ -18,6 +19,7 @@ #define MRB_SYM(name) MRB_SYM__##name #define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name +#define MRB_GVSYM_2(mrb, name) MRB_GVSYM__##name #define MRB_CVSYM_2(mrb, name) MRB_CVSYM__##name #define MRB_IVSYM_2(mrb, name) MRB_IVSYM__##name #define MRB_SYM_B_2(mrb, name) MRB_SYM_B__##name diff --git a/include/mruby/presym/scanning.h b/include/mruby/presym/scanning.h index 20fe1c48b..9a3d75bdb 100644 --- a/include/mruby/presym/scanning.h +++ b/include/mruby/presym/scanning.h @@ -30,6 +30,7 @@ #define mrb_funcall(mrb, v, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (v) (__VA_ARGS__) #define MRB_OPSYM(name) MRB_OPSYM__##name(mrb) +#define MRB_GVSYM(name) MRB_PRESYM_SCANNING_TAGGED("$" #name) #define MRB_CVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@@" #name) #define MRB_IVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@" #name) #define MRB_SYM_B(name) MRB_PRESYM_SCANNING_TAGGED(#name "!") @@ -38,6 +39,7 @@ #define MRB_SYM(name) MRB_PRESYM_SCANNING_TAGGED(#name) #define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name(mrb) +#define MRB_GVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("$" #name) #define MRB_CVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("@@" #name) #define MRB_IVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("@" #name) #define MRB_SYM_B_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED(#name "!") diff --git a/lib/mruby/presym.rb b/lib/mruby/presym.rb index 8ade2480d..3ede3b6a8 100644 --- a/lib/mruby/presym.rb +++ b/lib/mruby/presym.rb @@ -36,6 +36,7 @@ module MRuby SYMBOL_TO_MACRO = { # Symbol => Macro # [prefix, suffix] => [prefix, suffix] + ["$" , "" ] => ["GV" , "" ], ["@@" , "" ] => ["CV" , "" ], ["@" , "" ] => ["IV" , "" ], ["" , "!" ] => ["" , "_B" ],