示例#1
0
		private Node TransformVariableInitializers(VariableDeclaration node)
		{
			IList<VariableInitializer> vars = node.GetVariables();
			int size = vars.Count;
			int i = 0;
			foreach (VariableInitializer var in vars)
			{
				AstNode target = var.GetTarget();
				AstNode init = var.GetInitializer();
				Node left = null;
				if (var.IsDestructuring())
				{
					Decompile(target);
					// decompile but don't transform
					left = target;
				}
				else
				{
					left = Transform(target);
				}
				Node right = null;
				if (init != null)
				{
					decompiler.AddToken(Token.ASSIGN);
					right = Transform(init);
				}
				if (var.IsDestructuring())
				{
					if (right == null)
					{
						// TODO:  should this ever happen?
						node.AddChildToBack(left);
					}
					else
					{
						Node d = CreateDestructuringAssignment(node.GetType(), left, right);
						node.AddChildToBack(d);
					}
				}
				else
				{
					if (right != null)
					{
						left.AddChildToBack(right);
					}
					node.AddChildToBack(left);
				}
				if (i++ < size - 1)
				{
					decompiler.AddToken(Token.COMMA);
				}
			}
			return node;
		}
示例#2
0
		private Node TransformVariables(VariableDeclaration node)
		{
			decompiler.AddToken(node.GetType());
			TransformVariableInitializers(node);
			// Might be most robust to have parser record whether it was
			// a variable declaration statement, possibly as a node property.
			AstNode parent = node.GetParent();
			if (!(parent is Loop) && !(parent is LetNode))
			{
				decompiler.AddEOL(Token.SEMI);
			}
			return node;
		}