package IC.Hierarchy; import IC.Error.*; import IC.Semantic.*; import IC.SymbolTable.*; import IC.LowIR.*; /** *
Title:
*Description:
*Copyright: Copyright (c) 2003
*Company:
* @author unascribed * @version 1.0 */ public class LengthExpr extends Expr{ public Expr e; public LengthExpr(Node exp) { e = (Expr) exp; } public Var translate(){ Var v = e.translate(); Var t = new Var(LIR.getNextName(),tableRef); tableRef.put(t.name, new TableEntry(t.name, "temp var", null)); Var arg1[] = {v}; LIR.irList.add(new LibFunCall(new Var(LIR.getNextName()),new Var("_checkNullRef"),arg1)); LIR.irList.add(new lengthOf(t,v)); return t; } public void print(){ fprintln(nodenum+": "+"LengthExpr(N"+getNum(e)+");"); if(String.valueOf(e)!="null") e.print(); } public Object accept(Visitor v, SymTable st) throws SemanticError { return (v.visit(this, st)); } }