This commit is contained in:
parent
88e638308a
commit
f4558af026
|
|
@ -2,7 +2,7 @@
|
||||||
// This CSharp output file generated by Gardens Point LEX
|
// This CSharp output file generated by Gardens Point LEX
|
||||||
// Version: 1.1.3.301
|
// Version: 1.1.3.301
|
||||||
// Machine: DESKTOP-2BJCJ7I
|
// Machine: DESKTOP-2BJCJ7I
|
||||||
// DateTime: 03.04.2021 17:04:09
|
// DateTime: 05.04.2021 11:40:44
|
||||||
// UserName: ibond
|
// UserName: ibond
|
||||||
// GPLEX input file <ABCPascal.lex>
|
// GPLEX input file <ABCPascal.lex>
|
||||||
// GPLEX frame file <embedded resource>
|
// GPLEX frame file <embedded resource>
|
||||||
|
|
|
||||||
|
|
@ -3228,6 +3228,8 @@ expr_with_func_decl_lambda
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
| func_decl_lambda
|
| func_decl_lambda
|
||||||
{ $$ = $1; }
|
{ $$ = $1; }
|
||||||
|
| tkInherited
|
||||||
|
{ $$ = new inherited_ident("", @$); }
|
||||||
;
|
;
|
||||||
|
|
||||||
expr
|
expr
|
||||||
|
|
@ -4175,6 +4177,7 @@ variable
|
||||||
{
|
{
|
||||||
$$ = new inherited_ident($2.name, @$);
|
$$ = new inherited_ident($2.name, @$);
|
||||||
}
|
}
|
||||||
|
|
||||||
| tkRoundOpen expr tkRoundClose
|
| tkRoundOpen expr tkRoundClose
|
||||||
{
|
{
|
||||||
if (!parsertools.build_tree_for_formatter)
|
if (!parsertools.build_tree_for_formatter)
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
16
TestSuite/inherited4.pas
Normal file
16
TestSuite/inherited4.pas
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
type
|
||||||
|
t0 = class
|
||||||
|
function f1(i: integer); virtual := i;
|
||||||
|
end;
|
||||||
|
|
||||||
|
t1 = class(t0)
|
||||||
|
function f1(i: integer): integer; override;
|
||||||
|
begin
|
||||||
|
Result := inherited; // не разрешает
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var a := new t1;
|
||||||
|
assert(a.f1(5) = 5);
|
||||||
|
end.
|
||||||
|
|
@ -2508,7 +2508,17 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
switch (mot)
|
switch (mot)
|
||||||
{
|
{
|
||||||
case motivation.address_receiving: return_addressed_value(inherited_ident_address_reciving(_inherited_ident)); break;
|
case motivation.address_receiving: return_addressed_value(inherited_ident_address_reciving(_inherited_ident)); break;
|
||||||
case motivation.expression_evaluation: return_value(inherited_ident_value_reciving(_inherited_ident)); break;
|
case motivation.expression_evaluation:
|
||||||
|
if (string.IsNullOrEmpty(_inherited_ident.name))
|
||||||
|
{
|
||||||
|
inherited_message msg = new inherited_message();
|
||||||
|
msg.source_context = _inherited_ident.source_context;
|
||||||
|
return_value(inherited_message_value_reciving(new inherited_message()));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return_value(inherited_ident_value_reciving(_inherited_ident));
|
||||||
|
break;
|
||||||
//case motivation.symbol_info_reciving: return_symbol_value(blocks.find(_ident.name));break;
|
//case motivation.symbol_info_reciving: return_symbol_value(blocks.find(_ident.name));break;
|
||||||
case motivation.semantic_node_reciving: return_semantic_value(inherited_ident_semantic_reciving(_inherited_ident)); break;
|
case motivation.semantic_node_reciving: return_semantic_value(inherited_ident_semantic_reciving(_inherited_ident)); break;
|
||||||
}
|
}
|
||||||
|
|
@ -17096,14 +17106,17 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
{
|
{
|
||||||
AddError(get_location(ident), "NO_BASE_CLASS_DEFINED_BUT_INHERITED_MEET");
|
AddError(get_location(ident), "NO_BASE_CLASS_DEFINED_BUT_INHERITED_MEET");
|
||||||
}
|
}
|
||||||
List<SymbolInfo> sil = context.converted_type.base_type.find_in_type(ident.name, context.CurrentScope);
|
string name = ident.name;
|
||||||
|
if (string.IsNullOrEmpty(name))
|
||||||
|
name = context.converted_func_stack.first().name;
|
||||||
|
List<SymbolInfo> sil = context.converted_type.base_type.find_in_type(name, context.CurrentScope);
|
||||||
if (sil == null)
|
if (sil == null)
|
||||||
{
|
{
|
||||||
sil = context.converted_namespace.find(ident.name);
|
sil = context.converted_namespace.find(name);
|
||||||
if (sil != null)
|
if (sil != null)
|
||||||
AddError(get_location(ident), "CLASS_MEMBER_{0}_EXPECTED", ident.name);
|
AddError(get_location(ident), "CLASS_MEMBER_{0}_EXPECTED", name);
|
||||||
else
|
else
|
||||||
AddError(new UndefinedNameReference(ident.name, get_location(ident)));
|
AddError(new UndefinedNameReference(name, get_location(ident)));
|
||||||
}
|
}
|
||||||
return sil;
|
return sil;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue