From 256cd021eae5534d50970635abd3b9ec217cbbff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20M=C3=AD=C5=A1ek?= Date: Tue, 27 Aug 2019 17:35:45 +0200 Subject: [PATCH] invalid eval() reports all the diagnostics (not just the first one) solves https://github.com/peachpiecompiler/peachpie/issues/502 --- src/Peachpie.Library.Scripting/Context.Script.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Peachpie.Library.Scripting/Context.Script.cs b/src/Peachpie.Library.Scripting/Context.Script.cs index 572a42320e..da3024ca9c 100644 --- a/src/Peachpie.Library.Scripting/Context.Script.cs +++ b/src/Peachpie.Library.Scripting/Context.Script.cs @@ -193,10 +193,12 @@ public static Script Create(Context.ScriptOptions options, string code, PhpCompi PhpParseOptions.Default, options.Location.Path); - var diagnostics = tree.Diagnostics; if (!HasErrors(diagnostics)) { + // TODO: collect required types from {tree}, remember as a script dependencies + // TODO: perform class autoload (now before compilation, and then always before invocation) + // unique in-memory assembly name var name = builder.GetNewSubmissionName(); @@ -264,16 +266,13 @@ IEnumerable metadatareferences /// /// Initializes an invalid script that throws diagnostics upon invoking. /// - /// - /// - private static Script CreateInvalid(IEnumerable diagnostics) + private static Script CreateInvalid(ImmutableArray diagnostics) { + string errors = string.Join(Environment.NewLine, diagnostics.Select(d => $"{d.Severity} {d.Id}: {d.GetMessage()}")); + return new Script((ctx, locals, @this, self) => { - foreach (var d in diagnostics) - { - PhpException.Throw(PhpError.Error, d.GetMessage()); - } + PhpException.Throw(PhpError.Error, string.Format("The script cannot be compiled due to following errors:\n{0}", errors)); // return PhpValue.Void;