···103103104104 #region Construction
105105106106- public static readonly MetaEntry DefaultImport = new(new MetaEntry[] { nameof(System) });
106106+ public static readonly MetaEntry DefaultImport = new([nameof(System)]);
107107108108 /// <summary>
109109 /// Creates a new application with a GUID as its Id.
···318318 _InitializationFunction.CreateFunctionContext
319319 (
320320 targetEngine,
321321- Array.Empty<PValue>(), // \init has no arguments
322322- Array.Empty<PVariable>(), // \init is not a closure
321321+ [], // \init has no arguments
322322+ [], // \init is not a closure
323323 true // don't initialize. That's what WE are trying to do here.
324324 );
325325
···2424// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
2525// IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26262727-using System.Diagnostics;
2827using Prexonite.Commands.List;
2928using Prexonite.Compiler.Cil;
3029using Prexonite.Compiler.Macro;
···92919392 var iargs = FlattenArguments(sctx, args, 1);
94939595- return args[0].IndirectCall(sctx, iargs.ToArray());
9494+ return args[0].IndirectCall(sctx, [..iargs.AsReadOnly()]);
9695 }
97969897 /// <summary>
···166165 public static StackContext CreateStackContext(StackContext sctx, PValue callable,
167166 PValue[] args)
168167 {
169169- if (callable.Type is ObjectPType && callable.Value is IStackAware sa)
168168+ if (callable is { Type: ObjectPType, Value: IStackAware sa })
170169 return sa.CreateStackContext(sctx, args);
171170 else
172171 return new IndirectCallContext(sctx, callable, args);
+2-2
Prexonite/Commands/Core/CallSubPerform.cs
···8989 if ((func ?? fpv.Value as PFunction) is { CilImplementation: { } cilImpl} pFunc)
9090 {
9191 cilImpl.Invoke(
9292- pFunc, CilFunctionContext.New(sctx, pFunc), iargs, sharedVars ?? Array.Empty<PVariable>(),
9292+ pFunc, CilFunctionContext.New(sctx, pFunc), iargs, sharedVars ?? [],
9393 out result, out returnMode);
9494 }
9595 else if (fpv.Value is IStackAware f)
···123123 }
124124 else if (useIndirectCallAsFallback)
125125 {
126126- result = fpv.IndirectCall(sctx, iargs);
126126+ result = fpv.IndirectCall(sctx, [..iargs.AsReadOnly()]);
127127 returnMode = ReturnMode.Exit;
128128 }
129129 else
+1-1
Prexonite/Commands/Core/Call_Member.cs
···7676 {
7777 if (sctx == null)
7878 throw new ArgumentNullException(nameof(sctx));
7979- if (args == null || args.Length < 2 || args[0] == null)
7979+ if (args.Length < 2 || args[0] == null)
8080 throw new ArgumentException(
8181 "The command callmember has the signature(obj, [isSet,] id [, arg1, arg2,...,argn]).");
8282
+3-3
Prexonite/Commands/Core/Call_Tail.cs
···5858 if (sctx == null)
5959 throw new ArgumentNullException(nameof(sctx));
60606161- if (args == null || args.Length < 1 || args[0] == null || args[0].IsNull)
6161+ if (args.IsEmpty || (PValue?)args[0] == null || args[0].IsNull)
6262 return PType.Null;
63636464 var iargs = make_tailcall(sctx, args);
65656666- return args[0].IndirectCall(sctx, iargs.ToArray());
6666+ return args[0].IndirectCall(sctx, [..iargs.AsReadOnly()]);
6767 }
68686969 public override StackContext CreateStackContext(StackContext sctx, PValue[]? args)
···7171 if (sctx == null)
7272 throw new ArgumentNullException(nameof(sctx));
73737474- if (args == null || args.Length < 1 || args[0] == null || args[0].IsNull)
7474+ if (args == null || args.Length < 1 || (PValue?)args[0] == null || args[0].IsNull)
7575 return new NullContext(sctx);
76767777 var iargs = make_tailcall(sctx, args);
···127127 state.EmitLoadLocal(state.SctxLocal);
128128 var run =
129129 typeof (Dispose).GetMethod(nameof(RunStatically),
130130- new[] {typeof (PValue), typeof (StackContext)})!;
130130+ [typeof (PValue), typeof (StackContext)])!;
131131 state.Il.EmitCall(OpCodes.Call, run, null);
132132 if (!ins.JustEffect)
133133 state.EmitLoadNullAsPValue();
+1-1
Prexonite/Commands/Core/LoadAssembly.cs
···5656 {
5757 if (sctx == null)
5858 throw new ArgumentNullException(nameof(sctx));
5959- args ??= Array.Empty<PValue>();
5959+ args ??= [];
60606161 var eng = sctx.ParentEngine;
6262 foreach (var arg in args)
+1-1
Prexonite/Commands/Core/Meta.cs
···7272 {
7373 if (sctx == null)
7474 throw new ArgumentNullException(nameof(sctx));
7575- if (args != null && args.Length > 0)
7575+ if (args.Length > 0)
7676 throw new PrexoniteException("The meta command no longer accepts arguments.");
77777878 if (sctx is not FunctionContext fctx)
···6565 {
6666 //Both operands are constants (remember: static args can also be references)
6767 //=> Apply the operator at compile time.
6868- var result = Run(state, new[] {left, right});
6868+ var result = Run(state, left, right);
6969 switch (result.Type.ToBuiltIn())
7070 {
7171 case PType.BuiltIn.Real:
···8686 /// <exception cref = "ArgumentNullException">args is null</exception>
8787 public override PValue Run(StackContext sctx, ReadOnlySpan<PValue> args)
8888 {
8989- if (args == null)
9090- throw new ArgumentNullException(nameof(args));
9189 foreach (var arg in args)
9290 Run(sctx, arg);
9391 return PType.Null.CreatePValue();
-2
Prexonite/Commands/CoroutineCommand.cs
···4040 {
4141 if (sctx == null)
4242 throw new ArgumentNullException(nameof(sctx));
4343- if (args == null)
4444- throw new ArgumentNullException(nameof(args));
45434644 var carrier = new ContextCarrier();
4745 var corctx = new CoroutineContext(sctx, CoroutineRun(carrier, args.ToArray()));
···8585 throw new InvalidOperationException("The enumerator has already been disposed.");
8686 try
8787 {
8888- dispose.IndirectCall(sctx, Array.Empty<PValue>());
8888+ dispose.IndirectCall(sctx);
8989 }
9090 finally
9191 {
···107107 /// <filterpriority>2</filterpriority>
108108 public override bool MoveNext()
109109 {
110110- return Runtime.ExtractBool(moveNext.IndirectCall(sctx, Array.Empty<PValue>()),
110110+ return Runtime.ExtractBool(moveNext.IndirectCall(sctx),
111111 sctx);
112112 }
113113···121121 /// <returns>
122122 /// The element in the collection at the current position of the enumerator.
123123 /// </returns>
124124- public override PValue Current => current.IndirectCall(sctx, Array.Empty<PValue>());
124124+ public override PValue Current => current.IndirectCall(sctx);
125125126126 #endregion
127127 }
-2
Prexonite/Commands/List/Exists.cs
···3232 {
3333 if (sctx == null)
3434 throw new ArgumentNullException(nameof(sctx));
3535- if (args == null)
3636- throw new ArgumentNullException(nameof(args));
37353836 if (args.Length < 1)
3937 throw new PrexoniteException("Exists requires at least two arguments");
+1-4
Prexonite/Commands/List/ForAll.cs
···3232 {
3333 if (sctx == null)
3434 throw new ArgumentNullException(nameof(sctx));
3535- if (args == null)
3636- throw new ArgumentNullException(nameof(args));
3737-3838- if (args.Length < 1)
3535+ if (args.IsEmpty)
3936 throw new PrexoniteException("Exists requires at least two arguments");
4037 var f = args[0];
4138
···26262727using System.Diagnostics;
2828using System.Dynamic;
2929+using System.Runtime.CompilerServices;
2930using System.Text;
30313132namespace Prexonite;
···131132 /// <returns>The value returned by the dynamic (instance) call. In case the call does not have a return value, a PValue containing null is returned.</returns>
132133 /// <exception cref = "InvalidCallException">Thrown if the call is not successful.</exception>
133134 [DebuggerStepThrough]
135135+ [OverloadResolutionPriority(1)]
134136 public PValue DynamicCall(StackContext sctx, ReadOnlySpan<PValue> args, PCall call, string id)
135137 {
136138 return Type.DynamicCall(sctx, this, args, call, id);
···420422 /// <returns>Contains the value returned by the indirect call. In case the call does not have a return value, a PValue containing null is returned.</returns>
421423 /// <exception cref = "InvalidCallException">Thrown if the call is not successful.</exception>
422424 [DebuggerStepThrough]
425425+ [OverloadResolutionPriority(1)]
423426 public PValue IndirectCall(StackContext sctx, params ReadOnlySpan<PValue> args)
424427 {
425428 return Type.IndirectCall(sctx, this, args);
···76767777 if (sctx == null)
7878 throw new ArgumentNullException(nameof(sctx));
7979- if (args == null)
8080- throw new ArgumentNullException(nameof(args));
8181-7979+8280 if (args.Length < 1 || args[0].IsNull)
8381 {
8482 c = '\0';
+4-3
Prexonite/Types/ExtendableObject.cs
···4747 if (_et != null)
4848 throw new InvalidOperationException(
4949 "The extension table for this object has already been created.");
5050- _et = new();
5050+ _et = [];
5151 }
52525353 /// <summary>
···187187 id ??= "";
188188 call ??= PCall.Get;
189189190190- _et ??= new();
190190+ _et ??= [];
191191192192 if (TryDynamicClrCall(sctx, subject, args, call.Value, id, out result) ||
193193 //Try conventional call
···196196 return true;
197197 else if (call == PCall.Set && args.Length > 0) //Add field if it does not exist
198198 result = _dynamicCall(
199199- sctx, new[] {id, args[0]}, PCall.Set, StructurePType.SetId);
199199+ sctx,
200200+ [id, args[0]], PCall.Set, StructurePType.SetId);
200201 else
201202 result = null; //Make sure result is really null.
202203
+2-10
Prexonite/Types/HashPType.cs
···6767 throw new ArgumentNullException(nameof(sctx));
6868 if (subject == null)
6969 throw new ArgumentNullException(nameof(subject));
7070- if(args == null)
7171- throw new ArgumentNullException(nameof(args));
7272-7070+7371 result = null;
74727573 var argc = args.Length;
···108106 throw new ArgumentNullException(nameof(sctx));
109107 if (subject == null)
110108 throw new ArgumentNullException(nameof(subject));
111111- if (args == null)
112112- throw new ArgumentNullException(nameof(args));
113109 if (id == null)
114110 throw new ArgumentNullException(nameof(id));
115111···292288 {
293289 if (sctx == null)
294290 throw new ArgumentNullException(nameof(sctx));
295295- if (args == null)
296296- throw new ArgumentNullException(nameof(args));
297291 if (id == null)
298292 throw new ArgumentNullException(nameof(id));
299293···333327 {
334328 if (sctx == null)
335329 throw new ArgumentNullException(nameof(sctx));
336336- if(args == null)
337337- throw new ArgumentNullException(nameof(args));
338338-330330+339331 result = null;
340332341333 var argc = args.Length;
+3-3
Prexonite/Types/ListPType.cs
···452452 var elementT = clrType.GetGenericArguments()[0];
453453 var listT = typeof (List<>).MakeGenericType(elementT);
454454 // ReSharper disable once PossibleNullReferenceException
455455- var list = (IList) listT.GetConstructor(Array.Empty<Type>())!.Invoke(Array.Empty<object>());
455455+ var list = (IList) listT.GetConstructor([])!.Invoke([]);
456456 var success = true;
457457 foreach (var pv in (List<PValue>)subject.Value!)
458458 {
···475475 var readonlyListT = typeof (ReadOnlyCollection<>).MakeGenericType(elementT);
476476 var readonlyList =
477477 // ReSharper disable once PossibleNullReferenceException
478478- readonlyListT.GetConstructor(new[] {typeof (IList<>).MakeGenericType(elementT)})!
479479- .Invoke(new object[]{list});
478478+ readonlyListT.GetConstructor([typeof (IList<>).MakeGenericType(elementT)])!
479479+ .Invoke([list]);
480480 result = sctx.CreateNativePValue(readonlyList);
481481 }
482482 else
···251251 var cmd = CreateModuleName.Instance;
252252 var eng = new Engine();
253253 var app = new Application("cmnc");
254254- var sctx = new NullContext(eng, app, Enumerable.Empty<string>());
255255- var rawMn = cmd.Run(sctx, new[] {sctx.CreateNativePValue(new MetaEntry(new MetaEntry[]{"sys","1.0"}))});
254254+ var sctx = new NullContext(eng, app, []);
255255+ var rawMn = cmd.Run(sctx, sctx.CreateNativePValue(new MetaEntry(["sys","1.0"])));
256256 Assert.That(rawMn.Value,Is.InstanceOf<ModuleName>());
257257 var mn = (ModuleName) rawMn.Value!;
258258 Assert.That(mn.Id,Is.EqualTo("sys"));
···5555 if(m is PropertyInfo)
5656 {
5757 var p = (PropertyInfo) m;
5858- return p.GetValue(null, new object[0]);
5858+ return p.GetValue(null, []);
5959 }
6060 else if(m is FieldInfo)
6161 {
···303303 var nsa = mlv.CreateLocalNamespace(new EmptySymbolView<Symbol>());
304304 var b = Symbol.CreateReference(EntityRef.Command.Create("c"),NoSourcePosition.Instance);
305305 var d = Symbol.CreateReference(EntityRef.Command.Create("e"),NoSourcePosition.Instance);
306306- nsa.DeclareExports(new[]
307307- {
306306+ nsa.DeclareExports([
308307 new KeyValuePair<string, Symbol>(nameof(b),b),
309308 new KeyValuePair<string, Symbol>(nameof(d),d),
310310- });
309309+ ]);
311310 var a = Symbol.CreateNamespace(nsa, NoSourcePosition.Instance);
312311 globalScope.Declare(nameof(a), a);
313312···320319321320 var ssb = SymbolStoreBuilder.Create(mlv);
322321 ssb.Forward(new SymbolOrigin.NamespaceImport(new(nameof(a)),NoSourcePosition.Instance),nssyma!.Namespace,
323323- new []
324324- {
325325- SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"f"),
322322+ [
323323+ SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"f"),
326324 SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"g"),
327327- });
325325+ ]);
328326 var scope = ssb.ToSymbolStore();
329327330328 _assertNotExists(scope, nameof(d));
···343341 var nsa = mlv.CreateLocalNamespace(new EmptySymbolView<Symbol>());
344342 var b = Symbol.CreateReference(EntityRef.Command.Create("c"), NoSourcePosition.Instance);
345343 var d = Symbol.CreateReference(EntityRef.Command.Create("e"), NoSourcePosition.Instance);
346346- nsa.DeclareExports(new[]
347347- {
344344+ nsa.DeclareExports([
348345 new KeyValuePair<string, Symbol>(nameof(b),b),
349346 new KeyValuePair<string, Symbol>(nameof(d),d),
350350- });
347347+ ]);
351348 var a = Symbol.CreateNamespace(nsa, NoSourcePosition.Instance);
352349 globalScope.Declare(nameof(a), a);
353350···360357361358 var ssb = SymbolStoreBuilder.Create(mlv);
362359 ssb.Forward(new SymbolOrigin.NamespaceImport(new(nameof(a)), NoSourcePosition.Instance), nssyma!.Namespace,
363363- new SymbolTransferDirective[]
364364- {
365365- SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"f"),
360360+ [
361361+ SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"f"),
366362 SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"g"),
367363 SymbolTransferDirective.CreateWildcard(NoSourcePosition.Instance),
368368- });
364364+ ]);
369365 var scope = ssb.ToSymbolStore();
370366371367 _assertNotExists(scope, nameof(b),"import scope");
···385381 var nsa = mlv.CreateLocalNamespace(new EmptySymbolView<Symbol>());
386382 var b = Symbol.CreateReference(EntityRef.Command.Create("c"), NoSourcePosition.Instance);
387383 var d = Symbol.CreateReference(EntityRef.Command.Create("e"), NoSourcePosition.Instance);
388388- nsa.DeclareExports(new[]
389389- {
384384+ nsa.DeclareExports([
390385 new KeyValuePair<string, Symbol>(nameof(b),b),
391386 new KeyValuePair<string, Symbol>(nameof(d),d),
392392- });
387387+ ]);
393388 var a = Symbol.CreateNamespace(nsa, NoSourcePosition.Instance);
394389 globalScope.Declare(nameof(a), a);
395390···402397403398 var ssb = SymbolStoreBuilder.Create(mlv);
404399 ssb.Forward(new SymbolOrigin.NamespaceImport(new(nameof(a)), NoSourcePosition.Instance), nssyma!.Namespace,
405405- new SymbolTransferDirective[]
406406- {
407407- SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"f"),
400400+ [
401401+ SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"f"),
408402 SymbolTransferDirective.CreateRename(NoSourcePosition.Instance, nameof(b),"g"),
409403 SymbolTransferDirective.CreateWildcard(NoSourcePosition.Instance),
410404 SymbolTransferDirective.CreateDrop(NoSourcePosition.Instance, nameof(d)),
411411- });
405405+ ]);
412406 var scope = ssb.ToSymbolStore();
413407414408 _assertNotExists(scope,nameof(d),"import scope");
+7-7
PrexoniteTests/Tests/PartialApplication.cs
···515515");
516516517517 var x = new MemberCallable {Name = "x"};
518518- x.Expect("m", new PValue[] {3, 2}, call: PCall.Get, returns: 11);
518518+ x.Expect("m", [3, 2], call: PCall.Get, returns: 11);
519519520520 Expect(11, sctx.CreateNativePValue(x), 2, 3);
521521 x.AssertCalledAll();
···533533");
534534535535 var x = new MemberCallable {Name = "x"};
536536- x.Expect("", new PValue[] {2, 3}, call: PCall.Get, returns: 11);
536536+ x.Expect("", [2, 3], call: PCall.Get, returns: 11);
537537538538 Expect(11, sctx.CreateNativePValue(x), 2, 3);
539539 x.AssertCalledAll();
···551551");
552552553553 var x = new MemberCallable {Name = "x"};
554554- x.Expect("m", new PValue[] {3, 2}, call: PCall.Get, returns: 11);
554554+ x.Expect("m", [3, 2], call: PCall.Get, returns: 11);
555555556556 Expect(11, sctx.CreateNativePValue(x), 2, 3);
557557 x.AssertCalledAll();
···569569");
570570571571 var x = new MemberCallable {Name = "x"};
572572- x.Expect("m", new PValue[] {3, 2}, call: PCall.Get, returns: 11);
572572+ x.Expect("m", [3, 2], call: PCall.Get, returns: 11);
573573574574 Expect(11, sctx.CreateNativePValue(x), 2, 3);
575575 x.AssertCalledAll();
···587587");
588588589589 var x = new MemberCallable {Name = "x"};
590590- x.Expect("m", new PValue[] {3, 2}, call: PCall.Set, returns: 11);
590590+ x.Expect("m", [3, 2], call: PCall.Set, returns: 11);
591591592592 Expect(2, sctx.CreateNativePValue(x), 2, 3);
593593 x.AssertCalledAll();
···606606");
607607608608 var x = new MemberCallable {Name = "x"};
609609- x.Expect("m", new PValue[] {3, 2}, call: PCall.Set, returns: 11);
609609+ x.Expect("m", [3, 2], call: PCall.Set, returns: 11);
610610611611 Expect(2, sctx.CreateNativePValue(x), 2, 3);
612612 x.AssertCalledAll();
···624624");
625625626626 var x = new MemberCallable {Name = "x"};
627627- x.Expect("", new PValue[] {3, 2}, call: PCall.Set, returns: 11);
627627+ x.Expect("", [3, 2], call: PCall.Set, returns: 11);
628628629629 Expect(2, sctx.CreateNativePValue(x), 2, 3);
630630 x.AssertCalledAll();
+1-1
PrexoniteTests/Tests/SelfAssemblingPlanTests.cs
···477477 // Provide the module lost to the SAM ahead of time, fully resolved
478478 var lostModuleName = new ModuleName("lost", new(0, 0));
479479 Sam.TargetDescriptions.Add(new ManualTargetDescription(lostModuleName, Source.FromString("name: lost;"),
480480- pathLost, Enumerable.Empty<ModuleName>()));
480480+ pathLost, []));
481481482482 // Have module found short-circuit when resolving lost
483483 using (MockFile(pathFound, "name found;references{lost}"))
+3-3
PrexoniteTests/Tests/Translation.cs
···97979898");
9999100100- var entry = new MetaEntry(new MetaEntry[] {"1", "2", "3"});
100100+ var entry = new MetaEntry(["1", "2", "3"]);
101101102102 Assert.That(target, Meta.Contains("glob", entry));
103103 var main = target.Functions["main"];
···13651365 Assert.That(meta, Does.ContainKey("name"));
13661366 Assert.That(meta, Does.ContainKey("references"));
13671367 Assert.That(meta["name"], Is.EqualTo(new MetaEntry("some.module.test")));
13681368- Assert.That(meta["references"], Is.EqualTo(new MetaEntry(new[]{new MetaEntry("some.module")})));
13681368+ Assert.That(meta["references"], Is.EqualTo(new MetaEntry([new MetaEntry("some.module")])));
1369136913701370 var f = target.Functions["main"];
13711371 Assert.That(f!.Meta, Does.ContainKey("key1"));
···13731373 Assert.That(f.Meta, Does.ContainKey("key3"));
13741374 Assert.That(f.Meta["key1"], Is.EqualTo(new MetaEntry("dot.separated.value")));
13751375 Assert.That(f.Meta["key2"], Is.EqualTo(new MetaEntry("value2")));
13761376- Assert.That(f.Meta["key3"], Is.EqualTo(new MetaEntry(new[]{new MetaEntry("a.b"), new MetaEntry("c")})));
13761376+ Assert.That(f.Meta["key3"], Is.EqualTo(new MetaEntry([new MetaEntry("a.b"), new MetaEntry("c")])));
13771377 }
1378137813791379 [Test]