implemented two-pass compiling