public void Visit(Instanceof n) { Helpers.Write("("); n.LeftExpression.Accept(this); Helpers.Write($" instanceof {n.TypeNameToCheck}"); Helpers.Write(")"); }
public SemanticAtom Visit(Instanceof n) { var utilizedType = new UtilizedType(n.TypeNameToCheck, n.Location); AddToGlobalUtilization(utilizedType, s => { n.RealizedTypeToCheck = s; }); n.LeftExpression.Accept(this); return(null); }
public SemanticAtom Visit(Instanceof n) { var left = n.LeftExpression.Accept(this); var leftLocation = n.LeftExpression.Location; if (!(left is Class)) { Globals.Errors.Add($"[{leftLocation.StartLine}, {leftLocation.StartColumn}] Left expression of operator(instanceof) ({left.Name}) is not a class type."); } n.RealizedType = Primitive.Boolean; return(n.RealizedType); }
public void Visit(Instanceof n) { Helpers.WriteLine($"{_tab}{n.Text} [{n.Location.StartLine}, {n.Location.StartColumn}]"); Tab(); Helpers.WriteLine($"{_tab}Left"); Tab(); n.LeftExpression.Accept(this); Untab(); Helpers.WriteLine($"{_tab}Right"); Tab(); Helpers.WriteLine($"{_tab}{n.TypeNameToCheck}"); Untab(); Untab(); }
public void Visit(Instanceof n) { Globals.Builder.Start($"instanceof [{n.Location.StartLine}, {n.Location.StartColumn}]"); var labelFalse = $"instanceofFalse{Globals.Builder.Count()}"; var labelEnd = $"instanceofEnd{Globals.Builder.Count()}"; CanCast(n.LeftExpression, n.RealizedTypeToCheck as Class, false /* check null */); Globals.Builder.WriteBinaryOp("cmp", "rax", 0.ToString()); Globals.Builder.WriteUnaryOp("je", labelFalse); Globals.Builder.WriteBinaryOp("mov", "rax", 1.ToString()); Globals.Builder.WriteUnaryOp("jmp", labelEnd); Globals.Builder.WriteLabel(labelFalse); Globals.Builder.WriteBinaryOp("mov", "rax", 0.ToString()); Globals.Builder.WriteLabel(labelEnd); Globals.Builder.End($"instanceof [{n.Location.EndLine}, {n.Location.EndColumn}]"); }