/src/org/ooc/frontend/model/TypeAccess.java

http://github.com/nddrylliog/ooc · Java · 70 lines · 50 code · 20 blank · 0 comment · 9 complexity · 483328e6d690efe6f2f75d796a3c7a8f MD5 · raw file

  1. package org.ooc.frontend.model;
  2. import java.io.IOException;
  3. import org.ooc.frontend.Visitor;
  4. import org.ooc.frontend.model.tokens.Token;
  5. import org.ooc.middle.OocCompilationError;
  6. import org.ooc.middle.hobgoblins.Resolver;
  7. public class TypeAccess extends VariableAccess {
  8. private Type type;
  9. public TypeAccess(Type type, Token startToken) {
  10. super((String) null, startToken);
  11. this.type = type;
  12. }
  13. @Override
  14. public String getName() {
  15. return type.getName();
  16. }
  17. @Override
  18. public Type getType() {
  19. return type;
  20. }
  21. @Override
  22. public Declaration getRef() {
  23. return type.getRef();
  24. }
  25. @Override
  26. public boolean hasChildren() {
  27. return true;
  28. }
  29. @Override
  30. public void acceptChildren(Visitor visitor) throws IOException {
  31. type.accept(visitor);
  32. }
  33. @Override
  34. public Response resolve(NodeList<Node> stack, Resolver res, boolean fatal) {
  35. if(type.isResolved()) return Response.OK;
  36. type.resolve(stack, res, fatal);
  37. if(type.isFlat() && type.getTypeParams().isEmpty()) {
  38. VariableDecl var = getVariable(type.getName(), stack, null);
  39. if(var != null && var.getType() != null && var.getType().getName().equals("Class")) {
  40. type.setRef(var);
  41. }
  42. }
  43. if(fatal) throw new OocCompilationError(this, stack, "Can't resolve type access to "+type);
  44. return Response.LOOP;
  45. }
  46. @Override
  47. public String toString() {
  48. return type.toString();
  49. }
  50. }