1*0c56280aSSorin Basca /* 2*0c56280aSSorin Basca * Licensed to the Apache Software Foundation (ASF) under one or more 3*0c56280aSSorin Basca * contributor license agreements. See the NOTICE file distributed with 4*0c56280aSSorin Basca * this work for additional information regarding copyright ownership. 5*0c56280aSSorin Basca * The ASF licenses this file to You under the Apache License, Version 2.0 6*0c56280aSSorin Basca * (the "License"); you may not use this file except in compliance with 7*0c56280aSSorin Basca * the License. You may obtain a copy of the License at 8*0c56280aSSorin Basca * 9*0c56280aSSorin Basca * http://www.apache.org/licenses/LICENSE-2.0 10*0c56280aSSorin Basca * 11*0c56280aSSorin Basca * Unless required by applicable law or agreed to in writing, software 12*0c56280aSSorin Basca * distributed under the License is distributed on an "AS IS" BASIS, 13*0c56280aSSorin Basca * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*0c56280aSSorin Basca * See the License for the specific language governing permissions and 15*0c56280aSSorin Basca * limitations under the License. 16*0c56280aSSorin Basca * 17*0c56280aSSorin Basca */ 18*0c56280aSSorin Basca package Mini; 19*0c56280aSSorin Basca 20*0c56280aSSorin Basca /** 21*0c56280aSSorin Basca * Represents a function declaration and its arguments. Type information is contained 22*0c56280aSSorin Basca * in the ASTIdent fields. 23*0c56280aSSorin Basca * 24*0c56280aSSorin Basca * @version $Id$ 25*0c56280aSSorin Basca */ 26*0c56280aSSorin Basca public class Function implements org.apache.bcel.Constants, EnvEntry { 27*0c56280aSSorin Basca private ASTIdent name; // Reference to the original declaration 28*0c56280aSSorin Basca private ASTIdent[] args; // Reference to argument identifiers 29*0c56280aSSorin Basca // private ASTExpr body; // Reference to function expression body 30*0c56280aSSorin Basca private boolean reserved; // Is a key word? 31*0c56280aSSorin Basca private int line, column; // Short for name.getToken() 32*0c56280aSSorin Basca private String fun_name; // Short for name.getName() 33*0c56280aSSorin Basca private int no_args; 34*0c56280aSSorin Basca Function(ASTIdent name, ASTIdent[] args)35*0c56280aSSorin Basca public Function(ASTIdent name, ASTIdent[] args) { 36*0c56280aSSorin Basca this(name, args, false); 37*0c56280aSSorin Basca } 38*0c56280aSSorin Basca Function(ASTIdent name, ASTIdent[] args, boolean reserved)39*0c56280aSSorin Basca public Function(ASTIdent name, ASTIdent[] args, boolean reserved) { 40*0c56280aSSorin Basca this.name = name; 41*0c56280aSSorin Basca this.args = args; 42*0c56280aSSorin Basca this.reserved = reserved; 43*0c56280aSSorin Basca 44*0c56280aSSorin Basca fun_name = name.getName(); 45*0c56280aSSorin Basca line = name.getLine(); 46*0c56280aSSorin Basca column = name.getColumn(); 47*0c56280aSSorin Basca setArgs(args); 48*0c56280aSSorin Basca } 49*0c56280aSSorin Basca 50*0c56280aSSorin Basca @Override toString()51*0c56280aSSorin Basca public String toString() { 52*0c56280aSSorin Basca StringBuffer buf = new StringBuffer(); 53*0c56280aSSorin Basca 54*0c56280aSSorin Basca for(int i=0; i < no_args; i++) { 55*0c56280aSSorin Basca buf.append(args[i].getName()); 56*0c56280aSSorin Basca 57*0c56280aSSorin Basca if(i < no_args - 1) { 58*0c56280aSSorin Basca buf.append(", "); 59*0c56280aSSorin Basca } 60*0c56280aSSorin Basca } 61*0c56280aSSorin Basca 62*0c56280aSSorin Basca String prefix = "Function " + fun_name + "(" + buf.toString() + ")"; 63*0c56280aSSorin Basca 64*0c56280aSSorin Basca if(!reserved) { 65*0c56280aSSorin Basca return prefix + " declared at line " + line + ", column " + column; 66*0c56280aSSorin Basca } else { 67*0c56280aSSorin Basca return prefix + " <predefined function>"; 68*0c56280aSSorin Basca } 69*0c56280aSSorin Basca } 70*0c56280aSSorin Basca getNoArgs()71*0c56280aSSorin Basca public int getNoArgs() { return no_args; } getName()72*0c56280aSSorin Basca public ASTIdent getName() { return name; } getHashKey()73*0c56280aSSorin Basca public String getHashKey() { return fun_name; } getLine()74*0c56280aSSorin Basca public int getLine() { return line; } getColumn()75*0c56280aSSorin Basca public int getColumn() { return column; } getArg(int i)76*0c56280aSSorin Basca public ASTIdent getArg(int i) { return args[i]; } getArgs()77*0c56280aSSorin Basca public ASTIdent[] getArgs() { return args; } setArgs(ASTIdent[] args)78*0c56280aSSorin Basca public void setArgs(ASTIdent[] args) { 79*0c56280aSSorin Basca this.args = args; 80*0c56280aSSorin Basca no_args = (args == null)? 0 : args.length; 81*0c56280aSSorin Basca } 82*0c56280aSSorin Basca } 83