first pass compile