mirror of https://github.com/aamine/cbc
add preproc tags
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3898 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
parent
9c50fd7032
commit
1166d7d0f3
|
|
@ -10,6 +10,7 @@ public class TypeResolver extends Visitor {
|
|||
new TypeResolver(typeTable, errorHandler).resolveProgram(ast);
|
||||
}
|
||||
|
||||
// #@@range/ctor{
|
||||
protected TypeTable typeTable;
|
||||
protected ErrorHandler errorHandler;
|
||||
|
||||
|
|
@ -17,38 +18,52 @@ public class TypeResolver extends Visitor {
|
|||
this.typeTable = typeTable;
|
||||
this.errorHandler = errorHandler;
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/resolveNodeList{
|
||||
protected void resolveNodeList(Iterator nodes) {
|
||||
visitNodeList(nodes);
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/resolveProgram{
|
||||
public void resolveProgram(AST ast) {
|
||||
defineTypes(ast.types());
|
||||
resolveNodeList(ast.types());
|
||||
resolveNodeList(ast.declarations());
|
||||
resolveNodeList(ast.entities());
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/defineTypes{
|
||||
private void defineTypes(Iterator deftypes) {
|
||||
while (deftypes.hasNext()) {
|
||||
TypeDefinition def = (TypeDefinition)deftypes.next();
|
||||
typeTable.put(def.typeRef(), def.definingType());
|
||||
}
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/bindType{
|
||||
private void bindType(TypeNode n) {
|
||||
if (n.isResolved()) return;
|
||||
n.setType(typeTable.get(n.typeRef()));
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/StructNode{
|
||||
public void visit(StructNode struct) {
|
||||
resolveComplexType(struct);
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/UnionNode{
|
||||
public void visit(UnionNode union) {
|
||||
resolveComplexType(union);
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/resolveComplexType{
|
||||
public void resolveComplexType(ComplexTypeDefinition def) {
|
||||
ComplexType ct = (ComplexType)typeTable.get(def.typeNode().typeRef());
|
||||
if (ct == null) {
|
||||
|
|
@ -60,16 +75,21 @@ public class TypeResolver extends Visitor {
|
|||
bindType(slot.typeNode());
|
||||
}
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/TypedefNode{
|
||||
public void visit(TypedefNode typedef) {
|
||||
bindType(typedef.typeNode());
|
||||
bindType(typedef.realTypeNode());
|
||||
}
|
||||
// #@@}
|
||||
|
||||
// #@@range/DefinedVariable{
|
||||
public void visit(DefinedVariable var) {
|
||||
bindType(var.typeNode());
|
||||
super.visit(var); // resolve initializer
|
||||
}
|
||||
// #@@}
|
||||
|
||||
public void visit(UndefinedVariable var) {
|
||||
bindType(var.typeNode());
|
||||
|
|
|
|||
Loading…
Reference in New Issue