/
gcc.patch
184 lines (177 loc) · 7.17 KB
/
gcc.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
diff --git a/build.xml b/build.xml
index 2183c86..7de9222 100644
--- a/build.xml
+++ b/build.xml
@@ -297,7 +297,7 @@
<manifest>
<attribute name="Main-Class"
- value="com.google.javascript.jscomp.CommandLineRunner" />
+ value="com.google.javascript.jscomp.BaiduCommandLineRunner" />
</manifest>
</jar>
</target>
diff --git a/src/com/google/javascript/jscomp/BaiduCommandLineRunner.java b/src/com/google/javascript/jscomp/BaiduCommandLineRunner.java
new file mode 100644
index 0000000..0c64bf5
--- /dev/null
+++ b/src/com/google/javascript/jscomp/BaiduCommandLineRunner.java
@@ -0,0 +1,47 @@
+package com.google.javascript.jscomp;
+
+import com.google.javascript.rhino.jstype.FunctionType;
+
+class BaiduCodingConvetion extends ClosureCodingConvention {
+
+ private static final long serialVersionUID = -4227037437967437070L;
+
+ @Override
+ public boolean isSuperClassReference(String propertyName) {
+ return "superClass".equals(propertyName);
+ }
+
+ @Override
+ public void applySubclassRelationship(FunctionType parentCtor,
+ FunctionType childCtor, SubclassType type) {
+ if (type == SubclassType.INHERITS) {
+ childCtor.defineDeclaredProperty("superClass", parentCtor.getPrototype(),
+ childCtor.getSource());
+ childCtor.getPrototype().defineDeclaredProperty("constructor", childCtor,
+ childCtor.getSource());
+ }
+ }
+}
+
+public class BaiduCommandLineRunner extends CommandLineRunner {
+
+ protected BaiduCommandLineRunner(String[] args) {
+ super(args);
+ getCommandLineConfig().setCodingConvention(new BaiduCodingConvetion());
+ }
+
+ protected CompilerOptions createOptions() {
+ CompilerOptions options = super.createOptions();
+ options.setCodingConvention(new BaiduCodingConvetion());
+ return options;
+ }
+
+ public static void main(String[] args) {
+ BaiduCommandLineRunner runner = new BaiduCommandLineRunner(args);
+ if (runner.shouldRunCompiler()) {
+ runner.run();
+ } else {
+ System.exit(-1);
+ }
+ }
+}
diff --git a/src/com/google/javascript/jscomp/CommandLineRunner.java b/src/com/google/javascript/jscomp/CommandLineRunner.java
index c634fea..d21fefc 100644
--- a/src/com/google/javascript/jscomp/CommandLineRunner.java
+++ b/src/com/google/javascript/jscomp/CommandLineRunner.java
@@ -272,7 +272,7 @@ public class CommandLineRunner extends
@Option(name = "--compilation_level",
usage = "Specifies the compilation level to use. Options: " +
- "WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, ADVANCED_OPTIMIZATIONS")
+ "WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, BAIDU_OPTIMIZATIONS, ADVANCED_OPTIMIZATIONS")
private CompilationLevel compilation_level =
CompilationLevel.SIMPLE_OPTIMIZATIONS;
diff --git a/src/com/google/javascript/jscomp/CompilationLevel.java b/src/com/google/javascript/jscomp/CompilationLevel.java
index 1a90ec7..9c7a441 100644
--- a/src/com/google/javascript/jscomp/CompilationLevel.java
+++ b/src/com/google/javascript/jscomp/CompilationLevel.java
@@ -42,6 +42,12 @@ public enum CompilationLevel {
SIMPLE_OPTIMIZATIONS,
/**
+ * 我们自己定义的一些优化阶段,在SIMPLE模式上面进行了一些增强,比如
+ * 可以删除一些Dead Code,可以删除goog.include的调用等等
+ */
+ BAIDU_OPTIMIZATIONS,
+
+ /**
* ADVANCED_OPTIMIZATIONS aggressively reduces code size by renaming function
* names and variables, removing code which is never called, etc.
*/
@@ -58,6 +64,9 @@ public enum CompilationLevel {
case SIMPLE_OPTIMIZATIONS:
applySafeCompilationOptions(options);
break;
+ case BAIDU_OPTIMIZATIONS:
+ applyBaiduCompilationOptions(options);
+ break;
case ADVANCED_OPTIMIZATIONS:
applyFullCompilationOptions(options);
break;
@@ -121,6 +130,24 @@ public enum CompilationLevel {
options.setWarningLevel(DiagnosticGroups.NON_STANDARD_JSDOC,
CheckLevel.OFF);
}
+
+ private static void applyBaiduCompilationOptions(CompilerOptions options) {
+ applySafeCompilationOptions(options);
+
+ options.smartNameRemoval = true;
+ options.reserveRawExports = true;
+ options.extractPrototypeMemberDeclarations = true;
+ options.collapseAnonymousFunctions = true;
+
+ options.inlineConstantVars = true;
+ options.setInlineFunctions(Reach.ALL);
+ options.inlineGetters = true;
+ options.setInlineVariables(Reach.ALL);
+ options.flowSensitiveInlineVariables = true;
+ options.computeFunctionSideEffects = true;
+
+ options.setRemoveUnusedVariable(Reach.ALL);
+ }
/**
* Add the options that will work only if the user exported all the symbols
diff --git a/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java b/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java
index 48e53a1..213b08c 100644
--- a/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java
+++ b/src/com/google/javascript/jscomp/ProcessClosurePrimitives.java
@@ -195,6 +195,8 @@ class ProcessClosurePrimitives extends AbstractPostOrderCallback
processRequireCall(t, n, parent);
} else if ("provide".equals(methodName)) {
processProvideCall(t, n, parent);
+ } else if ("include".equals(methodName)) {
+ processIncludeCall(t, n, parent);
} else if ("exportSymbol".equals(methodName)) {
Node arg = left.getNext();
if (arg.isString()) {
@@ -311,6 +313,14 @@ class ProcessClosurePrimitives extends AbstractPostOrderCallback
}
/**
+ * Handles a goog.include call.
+ */
+ private void processIncludeCall(NodeTraversal t, Node n, Node parent) {
+ parent.detachFromParent();
+ compiler.reportCodeChange();
+ }
+
+ /**
* Handles a goog.provide call.
*/
private void processProvideCall(NodeTraversal t, Node n, Node parent) {
diff --git a/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java b/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java
index 26a18db..ac32d46 100644
--- a/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java
+++ b/test/com/google/javascript/jscomp/ProcessClosurePrimitivesTest.java
@@ -110,6 +110,20 @@ public class ProcessClosurePrimitivesTest extends CompilerTestCase {
return 1;
}
+ public void testRemovalOfIncludeCall() {
+ test("goog.include('css/a.css');", "");
+ test("goog.include('css/a.css');goog.include('css/a.css');goog.provide('foo');",
+ "var foo={};");
+ test("goog.include('css/a.css');goog.include('css/a.css');goog.provide('foo.bar');",
+ "var foo={}; foo.bar={};");
+ test("goog.include('css/a.css');goog.include('css/a.css');goog.provide('foo.bar.baz');",
+ "var foo={}; foo.bar={}; foo.bar.baz={};");
+ test("goog.include('css/a.css');goog.include('css/a.css');goog.provide('foo.bar.baz.boo');",
+ "var foo={}; foo.bar={}; foo.bar.baz={}; foo.bar.baz.boo={};");
+ test("goog.include('css/a.css');goog.include('css/a.css');goog.provide('goog.bar');",
+ "goog.bar={};"); // goog is special-cased
+ }
+
public void testSimpleProvides() {
test("goog.provide('foo');",
"var foo={};");