quit using __temp__ as placeholder name for anon class

This commit is contained in:
satyr 2010-10-24 03:43:06 +09:00
parent ebdcfb5227
commit 0c3093f331
5 changed files with 37 additions and 36 deletions

View File

@ -214,22 +214,25 @@
})
],
Class: [
o("CLASS SimpleAssignable", function() {
o('CLASS SimpleAssignable', function() {
return new Class($2);
}), o("CLASS SimpleAssignable EXTENDS Value", function() {
}), o('CLASS SimpleAssignable EXTENDS Value', function() {
return new Class($2, $4);
}), o("CLASS SimpleAssignable INDENT ClassBody OUTDENT", function() {
}), o('CLASS SimpleAssignable\
INDENT ClassBody OUTDENT', function() {
return new Class($2, null, $4);
}), o("CLASS SimpleAssignable EXTENDS Value INDENT ClassBody OUTDENT", function() {
}), o('CLASS SimpleAssignable EXTENDS Value\
INDENT ClassBody OUTDENT', function() {
return new Class($2, $4, $6);
}), o("CLASS INDENT ClassBody OUTDENT", function() {
return new Class('__temp__', null, $3);
}), o("CLASS", function() {
return new Class('__temp__', null, new Expressions);
}), o("CLASS EXTENDS Value", function() {
return new Class('__temp__', $3, new Expressions);
}), o("CLASS EXTENDS Value INDENT ClassBody OUTDENT", function() {
return new Class('__temp__', $3, $5);
}), o('CLASS INDENT ClassBody OUTDENT', function() {
return new Class(null, null, $3);
}), o('CLASS', function() {
return new Class(null, null, new Expressions);
}), o('CLASS EXTENDS Value', function() {
return new Class(null, $3, new Expressions);
}), o('CLASS EXTENDS Value\
INDENT ClassBody OUTDENT', function() {
return new Class(null, $3, $5);
})
],
ClassAssign: [

View File

@ -750,10 +750,10 @@
})();
exports.Class = (function() {
Class = (function() {
function Class(variable, _arg, props) {
this.parent = _arg;
function Class(_arg, _arg2, props) {
this.parent = _arg2;
this.variable = _arg;
Class.__super__.constructor.call(this);
this.variable = variable === '__temp__' ? new Literal(variable) : variable;
this.properties = props || [];
this.returns = false;
return this;
@ -769,10 +769,7 @@
};
Class.prototype.compileNode = function(o) {
var _i, _len, _ref2, _ref3, access, applied, apply, className, constScope, construct, constructor, extension, func, me, pname, prop, props, pvar, ref, val, variable;
variable = this.variable;
if (variable.value === '__temp__') {
variable = new Literal(o.scope.freeVariable('ctor'));
}
variable = this.variable || new Literal(o.scope.freeVariable('ctor'));
extension = this.parent && new Extends(variable, this.parent);
props = new Expressions;
me = null;

View File

@ -205,13 +205,13 @@ case 95:this.$ = new yy.Class($$[$0-5+2-1], null, $$[$0-5+4-1]);
break;
case 96:this.$ = new yy.Class($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]);
break;
case 97:this.$ = new yy.Class('__temp__', null, $$[$0-4+3-1]);
case 97:this.$ = new yy.Class(null, null, $$[$0-4+3-1]);
break;
case 98:this.$ = new yy.Class('__temp__', null, new yy.Expressions);
case 98:this.$ = new yy.Class(null, null, new yy.Expressions);
break;
case 99:this.$ = new yy.Class('__temp__', $$[$0-3+3-1], new yy.Expressions);
case 99:this.$ = new yy.Class(null, $$[$0-3+3-1], new yy.Expressions);
break;
case 100:this.$ = new yy.Class('__temp__', $$[$0-6+3-1], $$[$0-6+5-1]);
case 100:this.$ = new yy.Class(null, $$[$0-6+3-1], $$[$0-6+5-1]);
break;
case 101:this.$ = $$[$0-1+1-1];
break;

View File

@ -272,14 +272,17 @@ grammar =
# Class definitions have optional bodies of prototype property assignments,
# and optional references to the superclass.
Class: [
o "CLASS SimpleAssignable", -> new Class $2
o "CLASS SimpleAssignable EXTENDS Value", -> new Class $2, $4
o "CLASS SimpleAssignable INDENT ClassBody OUTDENT", -> new Class $2, null, $4
o "CLASS SimpleAssignable EXTENDS Value INDENT ClassBody OUTDENT", -> new Class $2, $4, $6
o "CLASS INDENT ClassBody OUTDENT", -> new Class '__temp__', null, $3
o "CLASS", -> new Class '__temp__', null, new Expressions
o "CLASS EXTENDS Value", -> new Class '__temp__', $3, new Expressions
o "CLASS EXTENDS Value INDENT ClassBody OUTDENT", -> new Class '__temp__', $3, $5
o 'CLASS SimpleAssignable', -> new Class $2
o 'CLASS SimpleAssignable EXTENDS Value', -> new Class $2, $4
o 'CLASS SimpleAssignable
INDENT ClassBody OUTDENT', -> new Class $2, null, $4
o 'CLASS SimpleAssignable EXTENDS Value
INDENT ClassBody OUTDENT', -> new Class $2, $4, $6
o 'CLASS INDENT ClassBody OUTDENT', -> new Class null, null, $3
o 'CLASS', -> new Class null, null, new Expressions
o 'CLASS EXTENDS Value', -> new Class null, $3 , new Expressions
o 'CLASS EXTENDS Value
INDENT ClassBody OUTDENT', -> new Class null, $3, $5
]
# Assignments that can happen directly inside a class declaration.

View File

@ -645,9 +645,8 @@ exports.Class = class Class extends Base
# Initialize a **Class** with its name, an optional superclass, and a
# list of prototype property assignments.
constructor: (variable, @parent, props) ->
constructor: (@variable, @parent, props) ->
super()
@variable = if variable is '__temp__' then new Literal variable else variable
@properties = props or []
@returns = false
@ -659,9 +658,8 @@ exports.Class = class Class extends Base
# equivalent syntax tree and compile that, in pieces. You can see the
# constructor, property assignments, and inheritance getting built out below.
compileNode: (o) ->
{variable} = this
variable = new Literal o.scope.freeVariable 'ctor' if variable.value is '__temp__'
extension = @parent and new Extends variable, @parent
variable = @variable or new Literal o.scope.freeVariable 'ctor'
extension = @parent and new Extends variable, @parent
props = new Expressions
me = null
className = variable.compile o