InterfaceGenerator().apply(stage);
TypeResolver().apply(stage);
VariableResolver().apply(stage);
+ ExpressionResolver().apply(stage);
FunctionResolver().apply(stage);
ConstantSpecializer().apply(stage, (mode==PROGRAM && specialized ? &spec_values : 0));
TypeValidator().apply(stage);
DeclarationValidator().apply(stage);
ReferenceValidator().apply(stage);
+ ExpressionValidator().apply(stage);
for(vector<Diagnostic>::const_iterator i=stage.diagnostics.begin(); i!=stage.diagnostics.end(); ++i)
if(i->severity==Diagnostic::ERR)
TypeResolver().apply(stage);
VariableResolver().apply(stage);
FunctionResolver().apply(stage);
+ ExpressionResolver().apply(stage);
}
/* Removing variables or functions may cause things from the previous stage