Separate class expressions from class declarations and their symbols like defuns

This commit is contained in:
Fábio Santos
2015-11-21 09:17:32 +00:00
parent bb6b3a773a
commit 69da8e53e0
2 changed files with 23 additions and 7 deletions

View File

@@ -856,7 +856,7 @@ function parse($TEXT, options) {
return for_();
case "class":
return class_();
return class_(AST_DefClass);
case "function":
return function_(AST_Defun);
@@ -1379,7 +1379,7 @@ function parse($TEXT, options) {
}
if (is("keyword", "class")) {
next();
var cls = class_();
var cls = class_(AST_ClassExpression);
cls.start = start;
cls.end = prev();
return subscripts(cls, allow_calls);
@@ -1497,11 +1497,15 @@ function parse($TEXT, options) {
return new AST_Object({ properties: a })
});
function class_() {
function class_(KindOfClass) {
var start, method, class_name, name, extends_, a = [];
if (S.token.type == "name" && S.token.value != "extends") {
class_name = as_symbol(AST_SymbolClassName)
class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);
}
if (KindOfClass === AST_DefClass && !class_name) {
croak();
}
if (S.token.value == "extends") {
@@ -1523,7 +1527,7 @@ function parse($TEXT, options) {
next();
return new AST_Class({
return new KindOfClass({
start: start,
name: class_name,
extends: extends_,