1 package polyglot.ext.jl.ast; 2 3 import polyglot.ast.*; 4 import polyglot.types.*; 5 import polyglot.visit.*; 6 import polyglot.util.*; 7 8 12 public class AmbQualifierNode_c extends Node_c implements AmbQualifierNode 13 { 14 protected Qualifier qualifier; 15 protected QualifierNode qual; 16 protected String name; 17 18 public AmbQualifierNode_c(Position pos, QualifierNode qual, String name) { 19 super(pos); 20 21 this.qual = qual; 22 this.name = name; 23 } 24 25 public Qualifier qualifier() { 26 return this.qualifier; 27 } 28 29 public String name() { 30 return this.name; 31 } 32 33 public AmbQualifierNode name(String name) { 34 AmbQualifierNode_c n = (AmbQualifierNode_c) copy(); 35 n.name = name; 36 return n; 37 } 38 39 public QualifierNode qual() { 40 return this.qual; 41 } 42 43 public AmbQualifierNode qual(QualifierNode qual) { 44 AmbQualifierNode_c n = (AmbQualifierNode_c) copy(); 45 n.qual = qual; 46 return n; 47 } 48 49 public AmbQualifierNode qualifier(Qualifier qualifier) { 50 AmbQualifierNode_c n = (AmbQualifierNode_c) copy(); 51 n.qualifier = qualifier; 52 return n; 53 } 54 55 protected AmbQualifierNode_c reconstruct(QualifierNode qual) { 56 if (qual != this.qual) { 57 AmbQualifierNode_c n = (AmbQualifierNode_c) copy(); 58 n.qual = qual; 59 return n; 60 } 61 62 return this; 63 } 64 65 public Node visitChildren(NodeVisitor v) { 66 QualifierNode qual = (QualifierNode) visitChild(this.qual, v); 67 return reconstruct(qual); 68 } 69 70 public Node buildTypes(TypeBuilder tb) throws SemanticException { 71 return qualifier(tb.typeSystem().unknownQualifier(position())); 72 } 73 74 public Node disambiguate(AmbiguityRemover sc) throws SemanticException { 75 Node n = sc.nodeFactory().disamb().disambiguate(this, sc, position(), qual, name); 76 77 if (n instanceof QualifierNode) { 78 return n; 79 } 80 81 throw new SemanticException("Could not find type or package \"" + 82 (qual == null ? name : qual.toString() + "." + name) + 83 "\".", position()); 84 } 85 86 public Node typeCheck(TypeChecker tc) throws SemanticException { 87 throw new InternalCompilerError(position(), 88 "Cannot type check ambiguous node " + this + "."); 89 } 90 91 public Node exceptionCheck(ExceptionChecker ec) throws SemanticException { 92 throw new InternalCompilerError(position(), 93 "Cannot exception check ambiguous node " + this + "."); 94 } 95 96 public void prettyPrint(CodeWriter w, PrettyPrinter tr) { 97 if (qual != null) { 98 print(qual, w, tr); 99 w.write("."); 100 } 101 102 w.write(name); 103 } 104 105 public void translate(CodeWriter w, Translator tr) { 106 throw new InternalCompilerError(position(), 107 "Cannot translate ambiguous node " 108 + this + "."); 109 } 110 111 public String toString() { 112 return (qual == null 113 ? name 114 : qual.toString() + "." + name) + "{amb}"; 115 } 116 117 public void dump(CodeWriter w) { 118 super.dump(w); 119 120 w.allowBreak(4, " "); 121 w.begin(0); 122 w.write("(name \"" + name + "\")"); 123 w.end(); 124 } 125 } 126 | Popular Tags |