cleanup
- use prototype-less objects where feasible (minor speed improvement) - get rid of HOP
This commit is contained in:
24
lib/scope.js
24
lib/scope.js
@@ -75,7 +75,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
|
||||
// pass 1: setup scope chaining and handle definitions
|
||||
var self = this;
|
||||
var scope = self.parent_scope = null;
|
||||
var labels = {};
|
||||
var labels = Object.create(null);
|
||||
var tw = new TreeWalker(function(node, descend){
|
||||
if (node instanceof AST_Scope) {
|
||||
node.init_scope_vars();
|
||||
@@ -157,7 +157,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
|
||||
|
||||
// pass 2: find back references and eval
|
||||
var func = null;
|
||||
var globals = self.globals = {};
|
||||
var globals = self.globals = Object.create(null);
|
||||
var tw = new TreeWalker(function(node, descend){
|
||||
if (node instanceof AST_Lambda) {
|
||||
var prev_func = func;
|
||||
@@ -175,7 +175,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
|
||||
var sym = node.scope.find_variable(name);
|
||||
if (!sym) {
|
||||
var g;
|
||||
if (HOP(globals, name)) {
|
||||
if (globals[name]) {
|
||||
g = globals[name];
|
||||
} else {
|
||||
g = new SymbolDef(self, node);
|
||||
@@ -202,8 +202,8 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
|
||||
|
||||
AST_Scope.DEFMETHOD("init_scope_vars", function(){
|
||||
this.directives = []; // contains the directives defined in this scope, i.e. "use strict"
|
||||
this.variables = {}; // map name to AST_SymbolVar (variables defined in this scope; includes functions)
|
||||
this.functions = {}; // map name to AST_SymbolDefun (functions defined in this scope)
|
||||
this.variables = Object.create(null); // map name to AST_SymbolVar (variables defined in this scope; includes functions)
|
||||
this.functions = Object.create(null); // map name to AST_SymbolDefun (functions defined in this scope)
|
||||
this.uses_with = false; // will be set to true if this or some nested scope uses the `with` statement
|
||||
this.uses_eval = false; // will be set to true if this or nested scope uses the global `eval`
|
||||
this.parent_scope = null; // the parent scope
|
||||
@@ -245,9 +245,8 @@ AST_LabelRef.DEFMETHOD("reference", function(){
|
||||
|
||||
AST_Scope.DEFMETHOD("find_variable", function(name){
|
||||
if (name instanceof AST_Symbol) name = name.name;
|
||||
return HOP(this.variables, name)
|
||||
? this.variables[name]
|
||||
: (this.parent_scope && this.parent_scope.find_variable(name));
|
||||
return this.variables[name]
|
||||
|| (this.parent_scope && this.parent_scope.find_variable(name));
|
||||
});
|
||||
|
||||
AST_Scope.DEFMETHOD("has_directive", function(value){
|
||||
@@ -261,7 +260,7 @@ AST_Scope.DEFMETHOD("def_function", function(symbol){
|
||||
|
||||
AST_Scope.DEFMETHOD("def_variable", function(symbol){
|
||||
var def;
|
||||
if (!HOP(this.variables, symbol.name)) {
|
||||
if (!this.variables[symbol.name]) {
|
||||
def = new SymbolDef(this, symbol);
|
||||
this.variables[symbol.name] = def;
|
||||
def.global = !this.parent_scope;
|
||||
@@ -351,7 +350,7 @@ AST_Toplevel.DEFMETHOD("mangle_names", function(options){
|
||||
var p = tw.parent();
|
||||
var is_setget = p instanceof AST_ObjectSetter || p instanceof AST_ObjectGetter;
|
||||
var a = node.variables;
|
||||
for (var i in a) if (HOP(a, i)) {
|
||||
for (var i in a) {
|
||||
var symbol = a[i];
|
||||
if (!(is_setget && symbol instanceof AST_SymbolLambda)) {
|
||||
if (options.except.indexOf(symbol.name) < 0) {
|
||||
@@ -450,15 +449,14 @@ var base54 = (function() {
|
||||
var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";
|
||||
var chars, frequency;
|
||||
function reset() {
|
||||
frequency = {};
|
||||
frequency = Object.create(null);
|
||||
chars = string.split("");
|
||||
chars.map(function(ch){ frequency[ch] = 0 });
|
||||
}
|
||||
base54.consider = function(str){
|
||||
for (var i = str.length; --i >= 0;) {
|
||||
var ch = str.charAt(i);
|
||||
if (string.indexOf(ch) >= 0)
|
||||
++frequency[ch];
|
||||
++frequency[ch];
|
||||
}
|
||||
};
|
||||
base54.sort = function() {
|
||||
|
||||
Reference in New Issue
Block a user