Skip to content

Commit

Permalink
Merge pull request #382 from mattjphillips/cc
Browse files Browse the repository at this point in the history
Fix for issue #379: use known compile time base to build runtime express...
  • Loading branch information
nikhilk committed Jun 19, 2013
2 parents 4bf7585 + c4a03cf commit 6dae908
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 33 deletions.
28 changes: 12 additions & 16 deletions src/Core/Compiler/Generator/ExpressionGenerator.cs
Expand Up @@ -43,11 +43,10 @@ internal static class ExpressionGenerator {
Debug.Assert(propExpression.Type == ExpressionType.PropertySet); Debug.Assert(propExpression.Type == ExpressionType.PropertySet);


if (propExpression.ObjectReference is BaseExpression) { if (propExpression.ObjectReference is BaseExpression) {
writer.Write("ss.base("); writer.Write(((BaseExpression)propExpression.ObjectReference).EvaluatedType.FullGeneratedName);
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(".prototype.set_");
writer.Write(", 'set_");
writer.Write(propExpression.Property.GeneratedName); writer.Write(propExpression.Property.GeneratedName);
writer.Write("').call("); writer.Write(".call(");
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(generator.CurrentImplementation.ThisIdentifier);
writer.Write(", "); writer.Write(", ");
GenerateExpression(generator, symbol, expression.RightOperand); GenerateExpression(generator, symbol, expression.RightOperand);
Expand All @@ -71,11 +70,10 @@ internal static class ExpressionGenerator {
Debug.Assert(indexExpression.Type == ExpressionType.Indexer); Debug.Assert(indexExpression.Type == ExpressionType.Indexer);


if (indexExpression.ObjectReference is BaseExpression) { if (indexExpression.ObjectReference is BaseExpression) {
writer.Write("ss.base("); writer.Write(((BaseExpression)indexExpression.ObjectReference).EvaluatedType.FullGeneratedName);
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(".prototype.set_");
writer.Write(", 'set_");
writer.Write(indexExpression.Indexer.GeneratedName); writer.Write(indexExpression.Indexer.GeneratedName);
writer.Write("').call("); writer.Write(".call(");
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(generator.CurrentImplementation.ThisIdentifier);
writer.Write(", "); writer.Write(", ");
GenerateExpressionList(generator, symbol, indexExpression.Indices); GenerateExpressionList(generator, symbol, indexExpression.Indices);
Expand Down Expand Up @@ -478,11 +476,10 @@ internal static class ExpressionGenerator {
writer.Write("]"); writer.Write("]");
} }
else if (expression.ObjectReference is BaseExpression) { else if (expression.ObjectReference is BaseExpression) {
writer.Write("ss.base("); writer.Write(((BaseExpression)expression.ObjectReference).EvaluatedType.FullGeneratedName);
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(".prototype.get_");
writer.Write(", 'get_");
writer.Write(expression.Indexer.GeneratedName); writer.Write(expression.Indexer.GeneratedName);
writer.Write("').call("); writer.Write(".call(");
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(generator.CurrentImplementation.ThisIdentifier);
writer.Write(", "); writer.Write(", ");
GenerateExpressionList(generator, symbol, expression.Indices); GenerateExpressionList(generator, symbol, expression.Indices);
Expand Down Expand Up @@ -707,11 +704,10 @@ internal static class ExpressionGenerator {
if (expression.ObjectReference is BaseExpression) { if (expression.ObjectReference is BaseExpression) {
Debug.Assert(expression.Method.IsExtension == false); Debug.Assert(expression.Method.IsExtension == false);


writer.Write("ss.base("); writer.Write(((BaseExpression)expression.ObjectReference).EvaluatedType.FullGeneratedName);
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(".prototype.");
writer.Write(", '");
writer.Write(expression.Method.GeneratedName); writer.Write(expression.Method.GeneratedName);
writer.Write("').call("); writer.Write(".call(");
writer.Write(generator.CurrentImplementation.ThisIdentifier); writer.Write(generator.CurrentImplementation.ThisIdentifier);
if ((expression.Parameters != null) && (expression.Parameters.Count != 0)) { if ((expression.Parameters != null) && (expression.Parameters.Count != 0)) {
writer.Write(", "); writer.Write(", ");
Expand Down
1 change: 0 additions & 1 deletion src/Core/Scripts/Runtime.js
Expand Up @@ -95,7 +95,6 @@
safeCast: safeCast, safeCast: safeCast,
canAssign: canAssign, canAssign: canAssign,
instanceOf: instanceOf, instanceOf: instanceOf,
base: base,


culture: { culture: {
neutral: neutralCulture, neutral: neutralCulture,
Expand Down
6 changes: 0 additions & 6 deletions src/Core/Scripts/Runtime/TypeSystem.js
Expand Up @@ -153,12 +153,6 @@ function safeCast(instance, type) {
return instanceOf(type, instance) ? instance : null; return instanceOf(type, instance) ? instance : null;
} }


function base(instanceOrType, method) {
var baseType = instanceOrType.constructor.$base || instanceOrType.$base;
var m = baseType.prototype[method];
return m !== instanceOrType[method] ? m : base(baseType, method);
}

function module(name, implementation, exports) { function module(name, implementation, exports) {
var registry = _modules[name] = { $name: name }; var registry = _modules[name] = { $name: name };


Expand Down
4 changes: 2 additions & 2 deletions tests/TestCases/Basic/Minimization/Baseline.txt
Expand Up @@ -173,7 +173,7 @@ define('test', ['ss', 'lib'], function(ss, lib) {
}, },
$0: function() { $0: function() {
this.$2(); this.$2();
ss.base(this, '$0').call(this); Bar2.prototype.$0.call(this);
var d = MyData('a', 'b'); var d = MyData('a', 'b');
d.$0 = d.$1; d.$0 = d.$1;
}, },
Expand Down Expand Up @@ -273,7 +273,7 @@ define('test', ['ss', 'lib'], function(ss, lib) {
}, },
dispose: function() { dispose: function() {
this.c$0 = 0; this.c$0 = 0;
ss.base(this, 'dispose').call(this); lib.Behavior.prototype.dispose.call(this);
}, },
c$6: function() { c$6: function() {
}, },
Expand Down
4 changes: 2 additions & 2 deletions tests/TestCases/Expression/Base/Baseline.txt
Expand Up @@ -24,10 +24,10 @@ define('test', ['ss'], function(ss) {
} }
var Bar$ = { var Bar$ = {
sum: function() { sum: function() {
return ss.base(this, 'sum').call(this, 1) + 1; return Foo.prototype.sum.call(this, 1) + 1;
}, },
toString: function() { toString: function() {
return ss.base(this, 'toString').call(this) + ' -> Bar'; return Foo.prototype.toString.call(this) + ' -> Bar';
} }
}; };


Expand Down
2 changes: 1 addition & 1 deletion tests/TestCases/Expression/Members/Baseline.txt
Expand Up @@ -70,7 +70,7 @@ define('test', ['ss'], function(ss) {
n = App.prototype.get_XYZ.call(this); n = App.prototype.get_XYZ.call(this);
this.set_XYZ(n); this.set_XYZ(n);
this.set_XYZ(n); this.set_XYZ(n);
ss.base(this, 'set_XYZ').call(this, n); App.prototype.set_XYZ.call(this, n);
this._value2 = n; this._value2 = n;
this._value2 = n; this._value2 = n;
this._value2 = n; this._value2 = n;
Expand Down
8 changes: 4 additions & 4 deletions tests/TestCases/Member/Indexers/Baseline.txt
Expand Up @@ -133,15 +133,15 @@ define('test', ['ss'], function(ss) {
VirtualIndexer.call(this); VirtualIndexer.call(this);
var i = this.get_item('name'); var i = this.get_item('name');
this.set_item('name', i + 1); this.set_item('name', i + 1);
var j = ss.base(this, 'get_item').call(this, 'name'); var j = VirtualIndexer.prototype.get_item.call(this, 'name');
ss.base(this, 'set_item').call(this, 'name', 43); VirtualIndexer.prototype.set_item.call(this, 'name', 43);
} }
var OverriddenIndexer$ = { var OverriddenIndexer$ = {
get_item: function(name) { get_item: function(name) {
return ss.base(this, 'get_item').call(this, name) + 1; return VirtualIndexer.prototype.get_item.call(this, name) + 1;
}, },
set_item: function(name, value) { set_item: function(name, value) {
ss.base(this, 'set_item').call(this, name, value - 1); VirtualIndexer.prototype.set_item.call(this, name, value - 1);
return value; return value;
} }
}; };
Expand Down
2 changes: 1 addition & 1 deletion tests/TestCases/Type/Partials/Baseline.txt
Expand Up @@ -112,7 +112,7 @@ define('test', ['ss'], function(ss) {
var e1 = document.getElementById(this.bar); var e1 = document.getElementById(this.bar);
var e2 = document.getElementById(this.name); var e2 = document.getElementById(this.name);
var e3 = document.getElementById(this.bar); var e3 = document.getElementById(this.bar);
var s = this.testMethod() + ss.base(this, 'testMethod').call(this); var s = this.testMethod() + MergedMembersClass.prototype.testMethod.call(this);
}, },
get_item: function(s) { get_item: function(s) {
return s; return s;
Expand Down

0 comments on commit 6dae908

Please sign in to comment.