private void checkArgDecls(AST caller, AST fct) {
        // check number and types of args/formals match
        AST formals = fct.getKid(3);
        Iterator<AST> actualKids = caller.getKids().iterator(),
                    formalKids = formals.getKids().iterator();
        actualKids.next();  // skip past fct name
        for (; actualKids.hasNext();) {
            try {
                AST actualDecl = decoration(actualKids.next()),
                    formalDecl = formalKids.next();
                if (decoration(actualDecl.getKid(2)) != 
                    decoration(formalDecl.getKid(2))) {
                    constraintError(ConstrainerErrors.ActualFormalTypeMismatch);
                }
            } catch (Exception e) {
                constraintError(ConstrainerErrors.NumberActualsFormalsDiffer);
            }
        }
        if (formalKids.hasNext()) {
            constraintError(ConstrainerErrors.NumberActualsFormalsDiffer);
        }
        return;
    }