delete is expression
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
index 696ada5..233f8ef 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
@@ -17,11 +17,10 @@
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.javascript.formatter.internal.nodes.JSLiterals;
 
-public class DeleteStatement extends Statement implements ISemicolonStatement {
+public class DeleteStatement extends Expression {
 
 	private Keyword deleteKeyword;
 	private Expression expression;
-	private int semic = -1;
 
 	public DeleteStatement(ASTNode parent) {
 		super(parent);
@@ -31,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (deleteKeyword != null) deleteKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (deleteKeyword != null)
+				deleteKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -58,14 +57,6 @@
 		this.deleteKeyword = keyword;
 	}
 
-	public int getSemicolonPosition() {
-		return this.semic;
-	}
-
-	public void setSemicolonPosition(int semic) {
-		this.semic = semic;
-	}
-
 	@Override
 	public String toSourceString(String indentationString) {
 
@@ -78,8 +69,6 @@
 		buffer.append(Keywords.DELETE);
 		buffer.append(JSLiterals.SPACE);
 		buffer.append(expression.toSourceString(indentationString));
-		if (semic > 0)
-			buffer.append(JSLiterals.SEMICOLON);
 		buffer.append(JSLiterals.EOL);
 
 		return buffer.toString();
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/formatter/internal/FormatterNodeBuilder.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/formatter/internal/FormatterNodeBuilder.java
index bc6b408..3077613 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/formatter/internal/FormatterNodeBuilder.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/formatter/internal/FormatterNodeBuilder.java
@@ -502,7 +502,7 @@
 
 				visit(node.getExpression());
 
-				processOptionalSemicolon(formatterNode, node);
+				checkedPop(formatterNode, node.getExpression().sourceEnd());
 				return true;
 			}
 
@@ -921,12 +921,9 @@
 
 			public boolean visitIfStatement(IfStatement node) {
 				FormatterBlockNode formatterNode = null;
-				if (node.getParent() instanceof IfStatement)
-				{
+				if (node.getParent() instanceof IfStatement) {
 					formatterNode = new FormatterBlockNode(document);
-				}
-				else
-				{
+				} else {
 					formatterNode = new LineBreakFormatterNode(document);
 				}
 
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/parser/JSTransformer.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
index 1517085..b3a51d1 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
@@ -1642,9 +1642,6 @@
 		statement.setExpression((Expression) transformNode(node.getChild(0),
 				statement));
 
-		statement.setSemicolonPosition(getTokenOffset(JSParser.SEMIC, node
-				.getTokenStopIndex(), node.getTokenStopIndex()));
-
 		statement.setStart(getTokenOffset(node.getTokenStartIndex()));
 		statement.setEnd(getTokenOffset(node.getTokenStopIndex() + 1));
 
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
index 696ada5..233f8ef 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
@@ -17,11 +17,10 @@
 import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.javascript.formatter.internal.nodes.JSLiterals;
 
-public class DeleteStatement extends Statement implements ISemicolonStatement {
+public class DeleteStatement extends Expression {
 
 	private Keyword deleteKeyword;
 	private Expression expression;
-	private int semic = -1;
 
 	public DeleteStatement(ASTNode parent) {
 		super(parent);
@@ -31,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (deleteKeyword != null) deleteKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (deleteKeyword != null)
+				deleteKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -58,14 +57,6 @@
 		this.deleteKeyword = keyword;
 	}
 
-	public int getSemicolonPosition() {
-		return this.semic;
-	}
-
-	public void setSemicolonPosition(int semic) {
-		this.semic = semic;
-	}
-
 	@Override
 	public String toSourceString(String indentationString) {
 
@@ -78,8 +69,6 @@
 		buffer.append(Keywords.DELETE);
 		buffer.append(JSLiterals.SPACE);
 		buffer.append(expression.toSourceString(indentationString));
-		if (semic > 0)
-			buffer.append(JSLiterals.SEMICOLON);
 		buffer.append(JSLiterals.EOL);
 
 		return buffer.toString();
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
index 1517085..b3a51d1 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSTransformer.java
@@ -1642,9 +1642,6 @@
 		statement.setExpression((Expression) transformNode(node.getChild(0),
 				statement));
 
-		statement.setSemicolonPosition(getTokenOffset(JSParser.SEMIC, node
-				.getTokenStopIndex(), node.getTokenStopIndex()));
-
 		statement.setStart(getTokenOffset(node.getTokenStartIndex()));
 		statement.setEnd(getTokenOffset(node.getTokenStopIndex() + 1));