1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
package tinybasic;
import java.util.Stack;
import java.util.Vector;
import antlr.collections.AST;
public class DTCodeType {
protected Stack callDepthStack;
class SaveEnv{
protected Scope scope;
protected Vector args;
SaveEnv(Scope scope,Vector args){
this.scope=scope;
this.args=args;
}
Scope getScope(){return scope;}
Vector getArgs() { return args;}
}
protected AST entry,cb;
protected Context theContext;
protected Scope scope;
protected Vector args;
String name;
class CodeContext {
protected Context context;
protected Scope scope;
protected Vector args;
CodeContext (Context context,Scope scope,Vector args){
this.context=context;
this.scope=scope;
this.args=args;
}
}
public DTCodeType(AST entry,AST cb,Scope scope,Vector args,String name){
this.entry = entry ;
this.cb = cb ;
this.scope = scope;
this.args = args ;
this.name = name ;
callDepthStack=new Stack();
}
public void newCall(Context context){
CodeContext codeContext=new CodeContext(context,scope,args);
callDepthStack.push(codeContext);
context.pushScope(scope);
}
public void attachArg(int argnum,DTDataType arg){
DTDataType proxy=(DTDataType)args.elementAt(argnum);
proxy.attach(arg);
}
public AST getAST(){
return this.entry;
}
}
|