コード例 #1
0
ファイル: ExpressionGen.cs プロジェクト: Etny/RedmondCompiler
        public InterOp CompileAssignExpression(SyntaxTreeNode node)
        {
            CodeSymbol symbol = ToIntermediateExpression(node[0]) as CodeSymbol;

            InterCopy copy;

            CodeValue source;

            if (node[2].ValueString == "None")
            {
                source = ToIntermediateExpression(node[1]);
            }
            else
            {
                var i = new InterBinOp(Operator.FromName(node[2].ValueString), symbol, ToIntermediateExpression(node[1]));
                source = new InterOpValue(i, builder.CurrentMethod);
            }
            if (symbol == null)
            {
                copy = new InterCopy(new LateReferenceResolver(node[0], builder.CurrentType.NamespaceContext), source);
            }
            else
            {
                copy = new InterCopy(symbol, source);
            }

            copy.SetOwner(builder.CurrentMethod);
            return(copy);
        }
コード例 #2
0
ファイル: ExpressionGen.cs プロジェクト: Etny/RedmondCompiler
        public InterOp CompilePostIncrementOrDecrementExpression(SyntaxTreeNode node)
        {
            var op1  = ToIntermediateExpression(node[0]);
            var op2  = new CodeValue(CodeType.Int32, 1);
            var op   = new InterBinOp(Operator.FromName(node[1].ValueString), op1, op2);
            var copy = new InterCopy((CodeSymbol)ToIntermediateExpression(node[0]), new InterOpValue(op, builder.CurrentMethod));

            copy.SetOwner(builder.CurrentMethod);
            return(copy);
        }