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

http://github.com/nddrylliog/ooc · Java · 52 lines · 38 code · 14 blank · 0 comment · 3 complexity · 9ace946d955bbfe3f5dccd00c545890d 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 MemberAssignArgument extends MemberArgument {
  8. public MemberAssignArgument(String name, Token startToken) {
  9. super(name, startToken);
  10. }
  11. @Override
  12. public boolean hasChildren() {
  13. return false;
  14. }
  15. @Override
  16. public void acceptChildren(Visitor visitor) throws IOException {}
  17. @Override
  18. public void accept(Visitor visitor) throws IOException {
  19. visitor.visit(this);
  20. }
  21. @Override
  22. protected Response doReplace(NodeList<Node> stack, Resolver res, boolean fatal) {
  23. int funcDeclIndex = stack.find(FunctionDecl.class);
  24. if(funcDeclIndex == -1) {
  25. throw new OocCompilationError(this, stack, "Member-assign argument outside a function definition? wtf.");
  26. }
  27. FunctionDecl funcDecl = (FunctionDecl) stack.get(funcDeclIndex);
  28. if(!funcDecl.getName().equals("new")) {
  29. funcDecl.getBody().add(0, new Line(new Assignment(
  30. new MemberAccess(name, startToken),
  31. new VariableAccess(this, startToken),
  32. startToken
  33. )));
  34. }
  35. stack.peek().replace(this, new RegularArgument(ref.getType(), name, startToken));
  36. return Response.OK;
  37. }
  38. }