| /******************************************************************************* |
| * Copyright (c) 2005, 2016 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| *******************************************************************************/ |
| package org.eclipse.dltk.ruby.ast; |
| |
| import org.eclipse.dltk.ast.ASTNode; |
| import org.eclipse.dltk.ast.ASTVisitor; |
| import org.eclipse.dltk.utils.CorePrinter; |
| |
| public class RubyCallArgument extends ASTNode { |
| |
| public final static int SIMPLE = 0; |
| |
| public final static int VARARG = 1; |
| |
| public final static int BLOCK = 2; |
| |
| private ASTNode value; |
| |
| private int kind; |
| |
| public ASTNode getValue() { |
| return value; |
| } |
| |
| public void setValue(ASTNode value) { |
| this.value = value; |
| } |
| |
| public RubyCallArgument(ASTNode value) { |
| super(value.sourceStart(), value.sourceEnd()); |
| this.value = value; |
| } |
| |
| public RubyCallArgument(ASTNode value, int kind) { |
| super(value.sourceStart(), value.sourceEnd()); |
| this.value = value; |
| this.kind = kind; |
| } |
| |
| public int getArgumentKind() { |
| return kind; |
| } |
| |
| @Override |
| public void printNode(CorePrinter output) { |
| if (kind == VARARG) { |
| output.append("[VARARG]"); //$NON-NLS-1$ |
| } else if (kind == BLOCK) { |
| output.append("[BLOCK]"); //$NON-NLS-1$ |
| } |
| if (value != null) { |
| value.printNode(output); |
| } |
| } |
| |
| @Override |
| public void traverse(ASTVisitor visitor) throws Exception { |
| if (visitor.visit(this)) { |
| if (getValue() != null) |
| getValue().traverse(visitor); |
| visitor.endvisit(this); |
| } |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (!(obj instanceof RubyCallArgument)) |
| return false; |
| RubyCallArgument arg = (RubyCallArgument) obj; |
| // FIXME WTF? |
| return (arg.kind == kind && arg.value == value); |
| } |
| |
| } |