Skip to content

Commit 6dae908

Browse files
committed
Merge pull request #382 from mattjphillips/cc
Fix for issue #379: use known compile time base to build runtime express...
2 parents 4bf7585 + c4a03cf commit 6dae908

File tree

8 files changed

+22
-33
lines changed

8 files changed

+22
-33
lines changed

src/Core/Compiler/Generator/ExpressionGenerator.cs

+12-16
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,10 @@ private static void GenerateBinaryExpression(ScriptGenerator generator, MemberSy
4343
Debug.Assert(propExpression.Type == ExpressionType.PropertySet);
4444

4545
if (propExpression.ObjectReference is BaseExpression) {
46-
writer.Write("ss.base(");
47-
writer.Write(generator.CurrentImplementation.ThisIdentifier);
48-
writer.Write(", 'set_");
46+
writer.Write(((BaseExpression)propExpression.ObjectReference).EvaluatedType.FullGeneratedName);
47+
writer.Write(".prototype.set_");
4948
writer.Write(propExpression.Property.GeneratedName);
50-
writer.Write("').call(");
49+
writer.Write(".call(");
5150
writer.Write(generator.CurrentImplementation.ThisIdentifier);
5251
writer.Write(", ");
5352
GenerateExpression(generator, symbol, expression.RightOperand);
@@ -71,11 +70,10 @@ private static void GenerateBinaryExpression(ScriptGenerator generator, MemberSy
7170
Debug.Assert(indexExpression.Type == ExpressionType.Indexer);
7271

7372
if (indexExpression.ObjectReference is BaseExpression) {
74-
writer.Write("ss.base(");
75-
writer.Write(generator.CurrentImplementation.ThisIdentifier);
76-
writer.Write(", 'set_");
73+
writer.Write(((BaseExpression)indexExpression.ObjectReference).EvaluatedType.FullGeneratedName);
74+
writer.Write(".prototype.set_");
7775
writer.Write(indexExpression.Indexer.GeneratedName);
78-
writer.Write("').call(");
76+
writer.Write(".call(");
7977
writer.Write(generator.CurrentImplementation.ThisIdentifier);
8078
writer.Write(", ");
8179
GenerateExpressionList(generator, symbol, indexExpression.Indices);
@@ -478,11 +476,10 @@ private static void GenerateIndexerExpression(ScriptGenerator generator, MemberS
478476
writer.Write("]");
479477
}
480478
else if (expression.ObjectReference is BaseExpression) {
481-
writer.Write("ss.base(");
482-
writer.Write(generator.CurrentImplementation.ThisIdentifier);
483-
writer.Write(", 'get_");
479+
writer.Write(((BaseExpression)expression.ObjectReference).EvaluatedType.FullGeneratedName);
480+
writer.Write(".prototype.get_");
484481
writer.Write(expression.Indexer.GeneratedName);
485-
writer.Write("').call(");
482+
writer.Write(".call(");
486483
writer.Write(generator.CurrentImplementation.ThisIdentifier);
487484
writer.Write(", ");
488485
GenerateExpressionList(generator, symbol, expression.Indices);
@@ -707,11 +704,10 @@ private static void GenerateMethodExpression(ScriptGenerator generator, MemberSy
707704
if (expression.ObjectReference is BaseExpression) {
708705
Debug.Assert(expression.Method.IsExtension == false);
709706

710-
writer.Write("ss.base(");
711-
writer.Write(generator.CurrentImplementation.ThisIdentifier);
712-
writer.Write(", '");
707+
writer.Write(((BaseExpression)expression.ObjectReference).EvaluatedType.FullGeneratedName);
708+
writer.Write(".prototype.");
713709
writer.Write(expression.Method.GeneratedName);
714-
writer.Write("').call(");
710+
writer.Write(".call(");
715711
writer.Write(generator.CurrentImplementation.ThisIdentifier);
716712
if ((expression.Parameters != null) && (expression.Parameters.Count != 0)) {
717713
writer.Write(", ");

src/Core/Scripts/Runtime.js

-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595
safeCast: safeCast,
9696
canAssign: canAssign,
9797
instanceOf: instanceOf,
98-
base: base,
9998

10099
culture: {
101100
neutral: neutralCulture,

src/Core/Scripts/Runtime/TypeSystem.js

-6
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,6 @@ function safeCast(instance, type) {
153153
return instanceOf(type, instance) ? instance : null;
154154
}
155155

156-
function base(instanceOrType, method) {
157-
var baseType = instanceOrType.constructor.$base || instanceOrType.$base;
158-
var m = baseType.prototype[method];
159-
return m !== instanceOrType[method] ? m : base(baseType, method);
160-
}
161-
162156
function module(name, implementation, exports) {
163157
var registry = _modules[name] = { $name: name };
164158

tests/TestCases/Basic/Minimization/Baseline.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ define('test', ['ss', 'lib'], function(ss, lib) {
173173
},
174174
$0: function() {
175175
this.$2();
176-
ss.base(this, '$0').call(this);
176+
Bar2.prototype.$0.call(this);
177177
var d = MyData('a', 'b');
178178
d.$0 = d.$1;
179179
},
@@ -273,7 +273,7 @@ define('test', ['ss', 'lib'], function(ss, lib) {
273273
},
274274
dispose: function() {
275275
this.c$0 = 0;
276-
ss.base(this, 'dispose').call(this);
276+
lib.Behavior.prototype.dispose.call(this);
277277
},
278278
c$6: function() {
279279
},

tests/TestCases/Expression/Base/Baseline.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ define('test', ['ss'], function(ss) {
2424
}
2525
var Bar$ = {
2626
sum: function() {
27-
return ss.base(this, 'sum').call(this, 1) + 1;
27+
return Foo.prototype.sum.call(this, 1) + 1;
2828
},
2929
toString: function() {
30-
return ss.base(this, 'toString').call(this) + ' -> Bar';
30+
return Foo.prototype.toString.call(this) + ' -> Bar';
3131
}
3232
};
3333

tests/TestCases/Expression/Members/Baseline.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ define('test', ['ss'], function(ss) {
7070
n = App.prototype.get_XYZ.call(this);
7171
this.set_XYZ(n);
7272
this.set_XYZ(n);
73-
ss.base(this, 'set_XYZ').call(this, n);
73+
App.prototype.set_XYZ.call(this, n);
7474
this._value2 = n;
7575
this._value2 = n;
7676
this._value2 = n;

tests/TestCases/Member/Indexers/Baseline.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,15 @@ define('test', ['ss'], function(ss) {
133133
VirtualIndexer.call(this);
134134
var i = this.get_item('name');
135135
this.set_item('name', i + 1);
136-
var j = ss.base(this, 'get_item').call(this, 'name');
137-
ss.base(this, 'set_item').call(this, 'name', 43);
136+
var j = VirtualIndexer.prototype.get_item.call(this, 'name');
137+
VirtualIndexer.prototype.set_item.call(this, 'name', 43);
138138
}
139139
var OverriddenIndexer$ = {
140140
get_item: function(name) {
141-
return ss.base(this, 'get_item').call(this, name) + 1;
141+
return VirtualIndexer.prototype.get_item.call(this, name) + 1;
142142
},
143143
set_item: function(name, value) {
144-
ss.base(this, 'set_item').call(this, name, value - 1);
144+
VirtualIndexer.prototype.set_item.call(this, name, value - 1);
145145
return value;
146146
}
147147
};

tests/TestCases/Type/Partials/Baseline.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ define('test', ['ss'], function(ss) {
112112
var e1 = document.getElementById(this.bar);
113113
var e2 = document.getElementById(this.name);
114114
var e3 = document.getElementById(this.bar);
115-
var s = this.testMethod() + ss.base(this, 'testMethod').call(this);
115+
var s = this.testMethod() + MergedMembersClass.prototype.testMethod.call(this);
116116
},
117117
get_item: function(s) {
118118
return s;

0 commit comments

Comments
 (0)