/******************************************************************************* * Copyright (c) 2013 Bruno Medeiros and other Contributors. * 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 * * Contributors: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package dtool.ast.declarations; import melnorme.lang.tooling.ast.CommonASTNode; import melnorme.lang.tooling.ast.IASTVisitor; import melnorme.lang.tooling.ast.util.ASTCodePrinter; import melnorme.lang.tooling.ast.util.NodeVector; import melnorme.lang.tooling.ast_actual.ASTNode; import melnorme.lang.tooling.ast_actual.ASTNodeTypes; import melnorme.utilbox.collections.ArrayView; import melnorme.utilbox.core.CoreUtil; import dtool.ast.definitions.IFunctionParameter; import dtool.ast.statements.IFunctionBody; /** * Declaration of special function like elements, like allocator/deallocator: * http://dlang.org/class.html#ClassAllocator * http://dlang.org/class.html#ClassDeallocator */ public class DeclarationAllocatorFunction extends ASTNode implements IDeclaration { public final boolean isNew; public final NodeVector<IFunctionParameter> params; public final IFunctionBody fnBody; public DeclarationAllocatorFunction(boolean isNew, NodeVector<IFunctionParameter> params, IFunctionBody fnBody) { this.isNew = isNew; this.params = parentize(params); this.fnBody = parentize(fnBody); } public final ArrayView<ASTNode> getParams_asNodes() { return CoreUtil.blindCast(params); } @Override public ASTNodeTypes getNodeType() { return ASTNodeTypes.DECLARATION_ALLOCATOR_FUNCTION; } @Override public void visitChildren(IASTVisitor visitor) { acceptVisitor(visitor, params); acceptVisitor(visitor, fnBody); } @Override protected CommonASTNode doCloneTree() { return new DeclarationAllocatorFunction(isNew, clone(params), clone(fnBody)); } @Override public void toStringAsCode(ASTCodePrinter cp) { cp.append(isNew ? "new" : "delete"); cp.appendList("(", getParams_asNodes(), ",", ") "); cp.append(fnBody); } }