~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tools/eliminator/node_modules/uglify-js/lib/object-ast.js

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
var jsp = require("./parse-js"),
 
2
    pro = require("./process");
 
3
 
 
4
var BY_TYPE = {};
 
5
 
 
6
function HOP(obj, prop) {
 
7
        return Object.prototype.hasOwnProperty.call(obj, prop);
 
8
};
 
9
 
 
10
function AST_Node(parent) {
 
11
        this.parent = parent;
 
12
};
 
13
 
 
14
AST_Node.prototype.init = function(){};
 
15
 
 
16
function DEFINE_NODE_CLASS(type, props, methods) {
 
17
        var base = methods && methods.BASE || AST_Node;
 
18
        if (!base) base = AST_Node;
 
19
        function D(parent, data) {
 
20
                base.apply(this, arguments);
 
21
                if (props) props.forEach(function(name, i){
 
22
                        this["_" + name] = data[i];
 
23
                });
 
24
                this.init();
 
25
        };
 
26
        var P = D.prototype = new AST_Node;
 
27
        P.node_type = function(){ return type };
 
28
        if (props) props.forEach(function(name){
 
29
                var propname = "_" + name;
 
30
                P["set_" + name] = function(val) {
 
31
                        this[propname] = val;
 
32
                        return this;
 
33
                };
 
34
                P["get_" + name] = function() {
 
35
                        return this[propname];
 
36
                };
 
37
        });
 
38
        if (type != null) BY_TYPE[type] = D;
 
39
        if (methods) for (var i in methods) if (HOP(methods, i)) {
 
40
                P[i] = methods[i];
 
41
        }
 
42
        return D;
 
43
};
 
44
 
 
45
var AST_String_Node = DEFINE_NODE_CLASS("string", ["value"]);
 
46
var AST_Number_Node = DEFINE_NODE_CLASS("num", ["value"]);
 
47
var AST_Name_Node = DEFINE_NODE_CLASS("name", ["value"]);
 
48
 
 
49
var AST_Statlist_Node = DEFINE_NODE_CLASS(null, ["body"]);
 
50
var AST_Root_Node = DEFINE_NODE_CLASS("toplevel", null, { BASE: AST_Statlist_Node });
 
51
var AST_Block_Node = DEFINE_NODE_CLASS("block", null, { BASE: AST_Statlist_Node });
 
52
var AST_Splice_Node = DEFINE_NODE_CLASS("splice", null, { BASE: AST_Statlist_Node });
 
53
 
 
54
var AST_Var_Node = DEFINE_NODE_CLASS("var", ["definitions"]);
 
55
var AST_Const_Node = DEFINE_NODE_CLASS("const", ["definitions"]);
 
56
 
 
57
var AST_Try_Node = DEFINE_NODE_CLASS("try", ["body", "catch", "finally"]);
 
58
var AST_Throw_Node = DEFINE_NODE_CLASS("throw", ["exception"]);
 
59
 
 
60
var AST_New_Node = DEFINE_NODE_CLASS("new", ["constructor", "arguments"]);
 
61
 
 
62
var AST_Switch_Node = DEFINE_NODE_CLASS("switch", ["expression", "branches"]);
 
63
var AST_Switch_Branch_Node = DEFINE_NODE_CLASS(null, ["expression", "body"]);
 
64
 
 
65
var AST_Break_Node = DEFINE_NODE_CLASS("break", ["label"]);
 
66
var AST_Continue_Node = DEFINE_NODE_CLASS("continue", ["label"]);
 
67
var AST_Assign_Node = DEFINE_NODE_CLASS("assign", ["operator", "lvalue", "rvalue"]);
 
68
var AST_Dot_Node = DEFINE_NODE_CLASS("dot", ["expression", "name"]);
 
69
var AST_Call_Node = DEFINE_NODE_CLASS("call", ["function", "arguments"]);
 
70
 
 
71
var AST_Lambda_Node = DEFINE_NODE_CLASS(null, ["name", "arguments", "body"])
 
72
var AST_Function_Node = DEFINE_NODE_CLASS("function", null, AST_Lambda_Node);
 
73
var AST_Defun_Node = DEFINE_NODE_CLASS("defun", null, AST_Lambda_Node);
 
74
 
 
75
var AST_If_Node = DEFINE_NODE_CLASS("if", ["condition", "then", "else"]);