Skip to content

Commit

Permalink
cleanup TODO's
Browse files Browse the repository at this point in the history
  • Loading branch information
SunSerega committed Mar 31, 2024
1 parent dad07f6 commit efe51f1
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Fixers.pas
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ interface
var start := true;
var bl_start := true;

//TODO #2683
//TODO #2715
var make_res: function: (array of string,array of string) := ()->
begin
var lc := res.Count;
Expand Down
3 changes: 0 additions & 3 deletions Patterns.pas
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
unit Patterns;
{$zerobasedstrings}

//TODO #2739
{$savepcu false}

interface

uses System;
Expand Down
5 changes: 2 additions & 3 deletions Patterns/MergedStrings.pas
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ implementation
private parts: array of MergedStringPart;
private len_caps: array of MergedStringLength;

private constructor(parts: array of MergedStringPart);
private constructor(params parts: array of MergedStringPart);
begin
self.parts := parts;
SetLength(len_caps, parts.Count);
Expand Down Expand Up @@ -675,8 +675,7 @@ implementation
function MergedStringPointer.IsOut := data.part_i = s.parts.Length;

static function MergedString.Literal(s: string) :=
//TODO #3064: adding params breaks case where array is passed to "new MergedString"
new MergedString(new MergedStringPart[](new MergedStringPartSolid(s)));
new MergedString(new MergedStringPartSolid(s));

static function MergedString.Parse(s: StringSection; escape_sym: char) :=
new MergedString(OptimizeParts(MakeParts(s, escape_sym)).ToArray);
Expand Down
4 changes: 2 additions & 2 deletions Patterns/test.pas
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@

var p: MergedString;
begin
var ps := EnumerateFiles('G:/0Prog/AutoMaximize/Classes/1 What')
var ps := EnumerateFiles('G:\0Prog\AutoMaximize\Classes\1 What')
.Select(System.IO.Path.GetFileName)
.Where(fname->fname.StartsWith('HwndWrapper'))
// .Where(fname->fname.StartsWith('HwndWrapper'))
.Select(MergedString.Literal)
.ToHashSet;
while ps.Count.Println>1 do
Expand Down
2 changes: 0 additions & 2 deletions SubExecuters.pas
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
uses PathUtils;
uses Timers;

uses AQueue; //TODO #2543

{$region Helpers}

type
Expand Down
68 changes: 68 additions & 0 deletions TypeMagic.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
unit TypeMagic;

interface

type

{$region Convert}

ConvertTo<T> = sealed class

private constructor := raise new System.InvalidOperationException;

public static function FromChecked<T2>(o: T2): T;
public static function FromUnchecked<T2>(o: T2): T;
public static function From<T2>(o: T2; checked: boolean := true) :=
if checked then FromChecked(o) else FromUnchecked(o);

end;

{$endregion Convert}

implementation

uses System.Linq.Expressions;

{$region Convert}

type ConvertCache<T1,T2> = sealed class

private constructor := raise new System.InvalidOperationException;

public static checked, unchecked: T2->T1;
private static function MakeFunc(conv: (Expression,System.Type)->Expression): T2->T1;
begin
try
var p := Expression.Parameter(typeof(T2));
var c := conv(p, typeof(T1));
var l := Expression.Lambda&<Func<T2, T1>>(c, p);
Result := l.Compile();
except
on e: Exception do
begin
Result := o->
begin
Result := default(T1);
raise new System.InvalidCastException($'Failed to make [{TypeToTypeName(typeof(T2))}]=>[{TypeToTypeName(typeof(T1))}] conversion', e);
end;
exit;
end;
end;

end;
static constructor;
begin
checked := MakeFunc(Expression.ConvertChecked);
unchecked := MakeFunc(Expression.Convert);
end;

end;

static function ConvertTo<T>.FromChecked<T2>(o: T2) :=
ConvertCache&<T,T2>.checked(o);
static function ConvertTo<T>.FromUnchecked<T2>(o: T2) :=
ConvertCache&<T,T2>.unchecked(o);

{$endregion Convert}

end.

0 comments on commit efe51f1

Please sign in to comment.