*/
public static IStatement createStatement(Node node, ScriptOrFnNode root,
Scope scope) {
switch (node.getType()) {
case Token.BLOCK: {
BlockStatement blockStatement = new BlockStatement(node, root, scope);
StatementList statements = blockStatement.getStatementList();
for (int i = statements.size() - 1; i >= 0; i--) {
IStatement statement = statements.get(i);
if (statement instanceof EmptyStatement) {
statements.remove(i);
}
}
IStatement statement;
switch (statements.size()) {
case 0:
// 块语句没有内容等同于空语句
statement = new EmptyStatement(node, root, scope);
statement.setNext(blockStatement.getNext());
statement.setParent(blockStatement.getParent());
return statement;
case 1:
// 块语句只有一条语句等同于那一条语句
statement = statements.get(0);
statement.setNext(blockStatement.getNext());
statement.setParent(blockStatement.getParent());
return statement;
default:
return blockStatement;
}
}