first pass compile time type check