Пример #1
0
        public override Expression Compile()
        {
            var instance   = Operand.Accept(Compiler);
            var visibility = Operand.GetVisibility();

            return(CompilerUtils.Call(instance, Symbol.NOT_OP, visibility));
        }
        public override Expression Compile()
        {
            var operand    = Operand.Accept(Compiler);
            var visibility = Operand.GetVisibility();

            return(CompilerUtils.Call(operand, Operator, visibility));
        }
Пример #3
0
        public Expression Compile(AssignCompiler component)
        {
            var instance   = component.Getter;
            var methodName = component.Operator;
            var argument   = new InvocationArgument(ArgumentKind.Simple, component.Right);
            var call       = CompilerUtils.Call(instance, methodName, component.Visibility, argument);

            return(component.Setter(call));
        }
Пример #4
0
        public override Expression Compile()
        {
            var left      = LeftNode.Accept(Compiler);
            var arguments = CompileArguments();

            var visibility = LeftNode.GetVisibility();

            return(CompilerUtils.Call(left, Symbol.AREF, visibility, arguments));
        }
        public override Expression Compile()
        {
            var left  = LeftNode.Accept(Compiler);
            var right = RightNode.Accept(Compiler);

            var visibility = LeftNode.GetVisibility();
            var argument   = new InvocationArgument(ArgumentKind.Simple, right);

            return(CompilerUtils.Call(left, Operator, visibility, argument));
        }
Пример #6
0
        public override Expression Compile()
        {
            var operand     = Operand.Accept(Compiler);
            var convertCall = CompilerUtils.Call(operand, MethodName, Visibility.Private);

            return(Condition(
                       TypeIs(operand, ElementType),
                       operand,
                       convertCall,
                       typeof(iObject)
                       ));
        }
Пример #7
0
        public override Expression Setter(Expression rightHandSide)
        {
            var rightVar      = Variable(typeof(iObject), "right");
            var rightArgument = new InvocationArgument(ArgumentKind.Simple, rightVar);

            return(Block(
                       typeof(iObject),
                       new[] { rightVar },
                       Assign(rightVar, rightHandSide),
                       CompilerUtils.Call(instance, SetterMethodName, Visibility, rightArgument),
                       rightVar
                       ));
        }
Пример #8
0
        public override Expression Compile()
        {
            var name     = new Symbol(Identifier);
            var variable = Compiler.CurrentScope.FindVariable(name);

            if (variable != null)
            {
                return(variable.ValueExpression());
            }

            var instance  = Compiler.CurrentScope.Instance;
            var arguments = System.Array.Empty <InvocationArgument>();

            return(CompilerUtils.Call(instance, name, Visibility.Private, arguments));
        }
        public override Expression Compile()
        {
            var blockNode = ArgumentsNode.FirstOrDefault(_ => _.Token.Type == kDO || _.Token.Type == kLBRACE2);

            if (blockNode != null && ArgumentsNode.Any(_ => _.Token.Type == kAMPER))
            {
                var line = blockNode.Token.Location.StartLine;
                throw new SyntaxError(Compiler.Filename, line, "both block arg and actual block given");
            }

            var instance   = GetLeftExpression();
            var arguments  = CompileArguments();
            var methodName = new Symbol(MethodName);
            var visibility = GetVisibility();

            return(CompilerUtils.Call(instance, methodName, visibility, arguments));
        }
        public override Expression Compile()
        {
            var left       = GetLeftExpression();
            var arguments  = CompileArguments();
            var methodName = new Symbol(MethodName);
            var visibility = GetVisibility();

            var instance         = Variable(typeof(iObject), "instance");
            var checkNilInstance = NilClass.Expressions.IsNil(instance.Cast <object>());
            var call             = CompilerUtils.Call(instance, methodName, visibility, arguments);
            var conditionalCall  = Condition(checkNilInstance, NilClass.Expressions.Instance, call, typeof(iObject));

            return(Block(
                       typeof(iObject),
                       new[] { instance },
                       Assign(instance, left),
                       conditionalCall
                       ));
        }