Example #1
0
 public override void Visit(RppAssignOp node)
 {
     node.Right.Accept(this);
     node.Left.Accept(this);
 }
Example #2
0
        private RppFunc CreatePrimaryConstructor(IEnumerable<IRppExpr> exprs)
        {
            var p = _classParams.Select(rppVar => new RppParam(MakeConstructorArgName(rppVar.Name), rppVar.Type)).ToList();
            List<IRppNode> assignExprs = new List<IRppNode>();

            foreach (var classParam in _fields)
            {
                IRppExpr initExpr;
                if (classParam.IsClassParam)
                {
                    string argName = MakeConstructorArgName(classParam.Name);
                    initExpr = new RppId(argName);
                }
                else
                {
                    RppField field = classParam;
                    initExpr = field.InitExpr;
                }

                RppAssignOp assign = new RppAssignOp(new RppId(classParam.MangledName), initExpr);
                assignExprs.Add(assign);
            }

            assignExprs.AddRange(exprs);
            assignExprs.Add(CreateParentConstructorCall());

            return new RppFunc("this", p, ResolvableType.UnitTy, new RppBlockExpr(assignExprs));
        }
Example #3
0
 public virtual void Visit(RppAssignOp node)
 {
 }