Class: Opal::Rewriters::JsReservedWords
- Defined in:
 - opal/lib/opal/rewriters/js_reserved_words.rb
 
Constant Summary collapse
- ES51_RESERVED_WORD =
          
Reserved javascript keywords - we cannot create variables with the same name (ref: http://stackoverflow.com/a/9337272/601782)
 /#{REGEXP_START}(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)#{REGEXP_END}/- ES3_RESERVED_WORD_EXCLUSIVE =
          
ES3 reserved words that aren’t ES5.1 reserved words
 /#{REGEXP_START}(?:int|byte|char|goto|long|final|float|short|double|native|throws|boolean|abstract|volatile|transient|synchronized)#{REGEXP_END}/- PROTO_SPECIAL_PROPS =
          
Prototype special properties.
 /#{REGEXP_START}(?:constructor|displayName|__proto__|__parent__|__noSuchMethod__|__count__)#{REGEXP_END}/- PROTO_SPECIAL_METHODS =
          
Prototype special methods.
 /#{REGEXP_START}(?:hasOwnProperty|valueOf)#{REGEXP_END}/- IMMUTABLE_PROPS =
          
Immutable properties of the global object
 /#{REGEXP_START}(?:NaN|Infinity|undefined)#{REGEXP_END}/- BASIC_IDENTIFIER_RULES =
          
Doesn't take in account utf8
 /#{REGEXP_START}[$_a-z][$_a-z\d]*#{REGEXP_END}/i- RESERVED_FUNCTION_NAMES =
          
Defining a local function like Array may break everything
 /#{REGEXP_START}(?:Array)#{REGEXP_END}/
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
Instance Method Summary collapse
- #fix_ivar_name(name) ⇒ Object
 - #fix_var_name(name) ⇒ Object
 - #on_argument(node) ⇒ Object
 - #on_ivar(node) ⇒ Object
 - #on_ivasgn(node) ⇒ Object
 - #on_lvar(node) ⇒ Object
 - #on_lvasgn(node) ⇒ Object
 - 
  
    
      #on_restarg(node)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Restarg is a special case because it may have no name def m(*); end.
 
Methods inherited from Base
#append_to_body, #begin_with_stmts, #error, #prepend_to_body, #process, #s, s, #stmts_of
Class Method Details
.valid_ivar_name?(name) ⇒ Boolean
      39 40 41  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 39 def self.valid_ivar_name?(name) !(PROTO_SPECIAL_PROPS =~ name || PROTO_SPECIAL_METHODS =~ name) end  | 
  
.valid_name?(name) ⇒ Boolean
      31 32 33 34 35 36 37  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 31 def self.valid_name?(name) BASIC_IDENTIFIER_RULES =~ name && !( ES51_RESERVED_WORD =~ name || ES3_RESERVED_WORD_EXCLUSIVE =~ name || IMMUTABLE_PROPS =~ name ) end  | 
  
Instance Method Details
#fix_ivar_name(name) ⇒ Object
      47 48 49  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 47 def fix_ivar_name(name) self.class.valid_ivar_name?(name.to_s[1..-1]) ? name : "#{name}$".to_sym end  | 
  
#fix_var_name(name) ⇒ Object
      43 44 45  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 43 def fix_var_name(name) self.class.valid_name?(name) ? name : "#{name}$".to_sym end  | 
  
#on_argument(node) ⇒ Object
      102 103 104 105 106 107 108 109  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 102 def on_argument(node) node = super(node) name, value = *node fixed_name = fix_var_name(name) new_children = value ? [fixed_name, value] : [fixed_name] node.updated(nil, new_children, meta: { arg_name: name }) end  | 
  
#on_ivar(node) ⇒ Object
      70 71 72 73 74  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 70 def on_ivar(node) name, _ = *node node = node.updated(nil, [fix_ivar_name(name)]) super(node) end  | 
  
#on_ivasgn(node) ⇒ Object
      76 77 78 79 80 81 82 83 84 85 86 87  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 76 def on_ivasgn(node) name, value = *node node = if value node.updated(nil, [fix_ivar_name(name), value]) else node.updated(nil, [fix_ivar_name(name)]) end super(node) end  | 
  
#on_lvar(node) ⇒ Object
      51 52 53 54 55  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 51 def on_lvar(node) name, _ = *node node = node.updated(nil, [fix_var_name(name)]) super(node) end  | 
  
#on_lvasgn(node) ⇒ Object
      57 58 59 60 61 62 63 64 65 66 67 68  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 57 def on_lvasgn(node) name, value = *node node = if value node.updated(nil, [fix_var_name(name), value]) else node.updated(nil, [fix_var_name(name)]) end super(node) end  | 
  
#on_restarg(node) ⇒ Object
Restarg is a special case because it may have no name def m(*); end
      92 93 94 95 96 97 98 99 100  | 
    
      # File 'opal/lib/opal/rewriters/js_reserved_words.rb', line 92 def on_restarg(node) name, _ = *node if name node = node.updated(nil, [fix_var_name(name)], meta: { arg_name: name }) end node end  |