Пример #1
0
 public virtual void InASAssignmentExp(ASAssignmentExp node)
 {
     DefaultIn(node);
 }
Пример #2
0
 public virtual void OutASAssignmentExp(ASAssignmentExp node)
 {
     DefaultOut(node);
 }
Пример #3
0
 public override void CaseASAssignmentExp(ASAssignmentExp node)
 {
     InASAssignmentExp(node);
     if (node.GetExp() != null)
     {
         node.GetExp().Apply(this);
     }
     if (node.GetLvalue() != null)
     {
         node.GetLvalue().Apply(this);
     }
     if (node.GetAssignop() != null)
     {
         node.GetAssignop().Apply(this);
     }
     OutASAssignmentExp(node);
 }
Пример #4
0
 public virtual void CaseASAssignmentExp(ASAssignmentExp node)
 {
     DefaultCase(node);
 }
Пример #5
0
        public override void OutAShadySAssignmentExp(AShadySAssignmentExp node)
        {
            if (node.GetLocalDeclRight().Count == 1 &&
                ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetName() == null)
            {
                //Assignment expression
                //Cant have any [] or * after first lvalue
                if (node.GetPostPointers().Count > 0)
                {
                    Token token;
                    PShadyDynamicOps op = (PShadyDynamicOps)node.GetPostPointers()[0];
                    if (op is APointerShadyDynamicOps)
                        token = ((APointerShadyDynamicOps) op).GetToken();
                    else
                        token = ((AArrayShadyDynamicOps)op).GetToken();
                    errors.Add(new ErrorCollection.Error(token, currentSourceFile, "Didn't expect " + token.Text + " there. Im very confused."));
                }
                if (node.GetGenericToken() != null)
                    errors.Add(new ErrorCollection.Error(node.GetGenericToken(),
                                                         "What the hell is this? I didn't see that coming. Or maybe I did.. But I don't like it!"));

                //an assignment can't be const);
                if (node.GetConst() != null)
                    errors.Add(new ErrorCollection.Error(node.GetConst(), currentSourceFile, "Unexpected const", false));
                //An assignment must have a right side
                if (((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetInit() == null ||
                    ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetAssignop() == null)
                {
                    Token token = GetToken(node.GetLvalue());
                    errors.Add(new ErrorCollection.Error(token, currentSourceFile, "Expected assignment", false));
                    node.Parent().RemoveChild(node);
                    return;
                }
                ASAssignmentExp exp = new ASAssignmentExp(
                    ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetAssignop(), node.GetLvalue(),
                    ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetInit());
                node.ReplaceBy(exp);
                exp.Apply(this);
            }
            else
            {
                //Local decl
                AMultiLocalDecl localDecl = new AMultiLocalDecl(node.GetConst(), LvalueToType(node.GetLvalue(), node.GetPostPointers(), node.GetGenericToken(), node.GetGenericTypes()),
                                                                new ArrayList());
                while (node.GetLocalDeclRight().Count > 0)
                {
                    localDecl.GetLocalDeclRight().Add(node.GetLocalDeclRight()[0]);
                }

                AExpStm expStm = Util.GetAncestor<AExpStm>(node);
                ALocalDeclStm localDeclStm = new ALocalDeclStm(expStm.GetToken(), localDecl);
                expStm.ReplaceBy(localDeclStm);
                localDeclStm.Apply(this);
            }
        }
Пример #6
0
 public override void OutASAssignmentExp(ASAssignmentExp node)
 {
     AAssignmentExp replacer = null;
     PAssignop assignop = node.GetAssignop();
     Token token = null;
     PBinop binop = null;
     if (assignop is AAddAssignop)
     {
         token = ((AAddAssignop)assignop).GetToken();
         binop = new APlusBinop(new TPlus("+", token.Line, token.Pos));
     }
     else if (assignop is ASubAssignop)
     {
         token = ((ASubAssignop)assignop).GetToken();
         binop = new AMinusBinop(new TMinus("-", token.Line, token.Pos));
     }
     else if (assignop is AMulAssignop)
     {
         token = ((AMulAssignop)assignop).GetToken();
         binop = new ATimesBinop(new TStar("*", token.Line, token.Pos));
     }
     else if (assignop is ADivAssignop)
     {
         token = ((ADivAssignop)assignop).GetToken();
         binop = new ADivideBinop(new TDiv("/", token.Line, token.Pos));
     }
     else if (assignop is AModAssignop)
     {
         token = ((AModAssignop)assignop).GetToken();
         binop = new AModuloBinop(new TMod("%", token.Line, token.Pos));
     }
     else// if (assignop is AAssignAssignop)
     {
         token = ((AAssignAssignop)assignop).GetToken();
     }
     PExp rightSide;
     if (binop != null)
         rightSide = new ABinopExp(new ALvalueExp((PLvalue)node.GetLvalue().Clone()),
                                             binop,
                                             (PExp)node.GetExp().Clone());
     else
         rightSide = (PExp)node.GetExp().Clone();
     replacer = new AAssignmentExp(new TAssign("=", token.Line, token.Pos), (PLvalue)node.GetLvalue().Clone(), rightSide);
     node.ReplaceBy(replacer);
     replacer.Apply(this);
 }
        public override void OutAShadySAssignmentExp(AShadySAssignmentExp node)
        {
            if (node.GetLocalDeclRight().Count == 1 &&
                ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetName() == null)
            {
                //Assignment expression

                //an assignment can't be const);
                //An assignment must have a right side
                if (((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetInit() == null ||
                    ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetAssignop() == null)
                {
                    node.Parent().RemoveChild(node);
                    return;
                }
                ASAssignmentExp exp = new ASAssignmentExp(
                    ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetAssignop(), node.GetLvalue(),
                    ((AALocalDeclRight) node.GetLocalDeclRight()[0]).GetInit());
                node.ReplaceBy(exp);
                exp.Apply(this);
            }
            else
            {

                //Local decl
                AMultiLocalDecl localDecl = new AMultiLocalDecl(node.GetConst(), LvalueToType(node.GetLvalue(), node.GetPostPointers(), node.GetGenericToken(), node.GetGenericTypes()),
                                                                new ArrayList());
                while (node.GetLocalDeclRight().Count > 0)
                {
                    localDecl.GetLocalDeclRight().Add(node.GetLocalDeclRight()[0]);
                }

                AExpStm expStm = Util.GetAncestor<AExpStm>(node);
                ALocalDeclStm localDeclStm = new ALocalDeclStm(expStm.GetToken(), localDecl);
                expStm.ReplaceBy(localDeclStm);
                localDeclStm.Apply(this);
            }
        }