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)); }
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)); }
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)); }
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) )); }
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 )); }
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 )); }