Index: /CKEditor/branches/prototype/_dev/packager/ckpackager/includes/scriptcompressor.js
===================================================================
--- /CKEditor/branches/prototype/_dev/packager/ckpackager/includes/scriptcompressor.js	(revision 2367)
+++ /CKEditor/branches/prototype/_dev/packager/ckpackager/includes/scriptcompressor.js	(revision 2368)
@@ -55,4 +55,5 @@
 	lang[ Token.OR ] = '||';
 	lang[ Token.COMMA ] = ',';
+	lang[ Token.IN ] = ' in ';
 
 	// From http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Operator_Precedence
@@ -64,5 +65,5 @@
 	precedence[ Token.ADD ] = precedence[ Token.SUB ] = 6;
 	precedence[ Token.RSH ] = precedence[ Token.LSH ] = precedence[ Token.URSH ] = 7;
-	precedence[ Token.LT ] = precedence[ Token.LE ] = precedence[ Token.GT ] = precedence[ Token.GE ] = precedence[ Token.INSTANCEOF ] = 8;
+	precedence[ Token.LT ] = precedence[ Token.LE ] = precedence[ Token.GT ] = precedence[ Token.GE ] = precedence[ Token.INSTANCEOF ] = precedence[ Token.IN ] = 8;
 	precedence[ Token.EQ ] = precedence[ Token.NE ] = precedence[ Token.SHEQ ] = precedence[ Token.SHNE ] = 9;
 	precedence[ Token.BITAND ] = 10;
@@ -119,5 +120,5 @@
 		return !!isReserved.words[ word ];
 	};
-	isReserved.words = { 'break':1,'else':1,'new':1,'var':1,'case':1,'finally':1,'return':1,'void':1,'catch':1,'for':1,'switch':1,'while':1,'continue':1,'function':1,'this':1,'with':1,'default':1,'if':1,'throw':1,'delete':1,'in':1,'try':1,'do':1,'instanceof':1,'typeof':1 };
+	isReserved.words = { 'class':1,'float':1,'break':1,'else':1,'new':1,'var':1,'case':1,'finally':1,'return':1,'void':1,'catch':1,'for':1,'switch':1,'while':1,'continue':1,'function':1,'this':1,'with':1,'default':1,'if':1,'throw':1,'delete':1,'in':1,'try':1,'do':1,'instanceof':1,'typeof':1 };
 
 	var writeNode = function( node, opt )
@@ -383,5 +384,5 @@
 				else if ( child.getType() == Token.ENTERWITH )
 				{
-					out( 'with{' );
+					out( 'with(' );
 					writeNode( child.getFirstChild() );
 					out( '){' );
@@ -558,5 +559,8 @@
 			case Token.EXPR_VOID :
 				writeChildren( node );
-				out( ';' );
+				
+				if ( !opt || !opt.noSemiColon )
+					out( ';' );
+
 				break;
 
@@ -767,7 +771,7 @@
 				while( child )
 				{
-					var id = ids[ counter++ ];
-
-					if ( isNaN( id ) && ( isReserved( id ) || !/^[a-zA-Z$_][\w$_]*$/.test( id ) ) )
+					var id = String( ids[ counter++ ] );
+
+					if ( !id.length || ( isNaN( id ) && ( isReserved( id ) || !/^[a-zA-Z$_][\w$_]*$/.test( id ) ) ) )
 						out( "'", id, "'" );
 					else
@@ -948,4 +952,5 @@
 			case Token.OR :
 			case Token.COMMA :
+			case Token.IN :
 				var left = node.getFirstChild(),
 					right = node.getLastChild(),
Index: /CKEditor/branches/prototype/_dev/packager/ckpackager/test/test.js
===================================================================
--- /CKEditor/branches/prototype/_dev/packager/ckpackager/test/test.js	(revision 2367)
+++ /CKEditor/branches/prototype/_dev/packager/ckpackager/test/test.js	(revision 2368)
@@ -237,5 +237,13 @@
 		[	"a.b+=1;" ],
 
-		[	"(a?b:c).go();" ]
+		[	"(a?b:c).go();" ],
+		
+		[	"for(i=0;i<1;i++){}" ],
+		
+		[	"a in b;" ],
+		
+		[	"o={'':1};" ],
+		
+		[	"with(o){a=b;}" ]
 	];
 
