001 /* 002 * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered 003 * by the modified BSD License. You should have received a copy of the 004 * modified BSD license with this compiler. 005 * 006 * Copyright (c) 2005-2008, Torbjorn Ekman 007 * All rights reserved. 008 */ 009 010 import java.util.*; 011 012 aspect DeclareBeforeUse { 013 public int ASTNode.varChildIndex(Block b) { 014 ASTNode node = this; 015 while(node.getParent().getParent() != b) { 016 node = node.getParent(); 017 } 018 return b.getStmtListNoTransform().getIndexOfChild(node); 019 } 020 021 public boolean Block.declaredBeforeUse(Variable decl, ASTNode use) { 022 int indexDecl = ((ASTNode)decl).varChildIndex(this); 023 int indexUse = use.varChildIndex(this); 024 return indexDecl <= indexUse; 025 } 026 public boolean Block.declaredBeforeUse(Variable decl, int indexUse) { 027 int indexDecl = ((ASTNode)decl).varChildIndex(this); 028 return indexDecl <= indexUse; 029 } 030 031 public int ASTNode.varChildIndex(TypeDecl t) { 032 ASTNode node = this; 033 while(node != null && node.getParent() != null && node.getParent().getParent() != t) { 034 node = node.getParent(); 035 } 036 if(node == null) 037 return -1; 038 return t.getBodyDeclListNoTransform().getIndexOfChild(node); 039 } 040 041 public boolean TypeDecl.declaredBeforeUse(Variable decl, ASTNode use) { 042 int indexDecl = ((ASTNode)decl).varChildIndex(this); 043 int indexUse = use.varChildIndex(this); 044 return indexDecl < indexUse; 045 } 046 public boolean TypeDecl.declaredBeforeUse(Variable decl, int indexUse) { 047 int indexDecl = ((ASTNode)decl).varChildIndex(this); 048 return indexDecl < indexUse; 049 } 050 }