public void Visit(IntrinsicEntry entry) { foreach (var argument in entry.Arguments) { argument.Accept(this); } SetNext(entry); }
public void Visit(IntrinsicEntry entry) { Print($"{entry.TargetMethod}"); _indent++; foreach (var argument in entry.Arguments) { argument.Accept(this); } _indent--; }
public void Visit(IntrinsicEntry entry) { var firstArg = true; foreach (var argument in entry.Arguments) { if (firstArg) { _sb.Append(" "); _sb.Append(firstArg ? "┌──▌" : "├──▌"); _sb.Append(" "); _sb.AppendLine($"t{argument.TreeID}"); } firstArg = false; } // TODO: Consider intrinsics that return data _sb.AppendLine($" {entry.TargetMethod}"); }
private static bool ImportIntrinsicCall(MethodDef methodToCall, IList <StackEntry> arguments, IILImporterProxy importer) { // Not yet implemented methods with non void return type if (methodToCall.HasReturnType) { throw new NotSupportedException(); } // Map method name to string that code generator will understand var targetMethodName = ""; switch (methodToCall.Name) { // TODO: Suspect this won't stay as an intrinsic but at least we have the mechanism for instrincs case "Write": if (IsTypeName(methodToCall, "System", "Console")) { var argtype = methodToCall.Parameters[0].Type; targetMethodName = argtype.FullName switch { "System.String" => "WriteString", "System.Int32" => "WriteInt32", "System.UInt32" => "WriteUInt32", "System.Char" => "WriteChar", _ => throw new NotSupportedException(), }; } break; default: return(false); } var callNode = new IntrinsicEntry(targetMethodName, arguments, StackValueKind.Unknown); importer.ImportAppendTree(callNode); return(true); }
public void Visit(IntrinsicEntry entry) { _genericStackEntryVisitor.Visit <IntrinsicEntry>(entry); }