This commit is contained in:
Бондарев Иван 2020-03-01 17:30:28 +01:00
parent ecdf35ab53
commit 38cc2e026f
4 changed files with 44 additions and 4 deletions

View file

@ -1434,21 +1434,30 @@ namespace PascalABCCompiler.PCU
{
common_namespace_function_node orig = GetNamespaceFunctionByOffset();
List<type_node> parameters = GetTypesList();
return orig.get_instance(parameters, false, null) as generic_namespace_function_instance_node;
int tmp_pos = (int)br.BaseStream.Position;
var instance = orig.get_instance(parameters, false, null) as generic_namespace_function_instance_node;
br.BaseStream.Seek(tmp_pos, SeekOrigin.Begin);
return instance;
}
private function_node GetCompiledGenericMethodInstanceReference()
{
compiled_function_node orig = GetCompiledMethod(br.ReadInt32());
List<type_node> parameters = GetTypesList();
return orig.get_instance(parameters, false, null);
int tmp_pos = (int)br.BaseStream.Position;
var instance = orig.get_instance(parameters, false, null);
br.BaseStream.Seek(tmp_pos, SeekOrigin.Begin);
return instance;
}
private generic_method_instance_node GetCommonGenericMethodInstanceReference()
{
common_method_node orig = GetMethodByOffset();
List<type_node> parameters = GetTypesList();
return orig.get_instance(parameters, false, null) as generic_method_instance_node;
int tmp_pos = (int)br.BaseStream.Position;
var instance = orig.get_instance(parameters, false, null) as generic_method_instance_node;
br.BaseStream.Seek(tmp_pos, SeekOrigin.Begin);
return instance;
}
private common_type_node GetGenericParameterOfType()
@ -4553,6 +4562,16 @@ namespace PascalABCCompiler.PCU
return lab;
}
public int GetStreamPosition()
{
return (int)br.BaseStream.Position;
}
public void SetStreamPosition(int pos)
{
br.BaseStream.Seek(pos, SeekOrigin.Begin);
}
/*private List<label_node> CreateLabels()
{
int count = br.ReadInt32();

View file

@ -0,0 +1,20 @@
unit u_where1;
var i: integer;
type
t1<T> = class end;
procedure p0<T,TEl>(a: T); where T: t1<TEl>;
begin
i := 1;
end;
procedure p1;
begin
p0&<t1<byte>,byte>(new t1<byte>);
end;
begin
p1;
assert(i = 1);
end.

View file

@ -1,4 +1,4 @@
unit u_while1;
unit u_while1;
begin
var i := 1;
var s := 0;

View file

@ -0,0 +1 @@
uses u_where1; begin end.