This commit is contained in:
Mikhalkovich Stanislav 2020-03-09 12:57:00 +03:00
parent d7e43e8e7b
commit 39ade48ce6
15 changed files with 67 additions and 24 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3"; public const string Major = "3";
public const string Minor = "6"; public const string Minor = "6";
public const string Build = "2"; public const string Build = "2";
public const string Revision = "2374"; public const string Revision = "2376";
public const string MainVersion = Major + "." + Minor; public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=2 %COREVERSION%=2
%REVISION%=2374 %REVISION%=2376
%MINOR%=6 %MINOR%=6
%MAJOR%=3 %MAJOR%=3

Binary file not shown.

View file

@ -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-G8V08V4 // Machine: DESKTOP-G8V08V4
// DateTime: 07.03.2020 10:31:43 // DateTime: 08.03.2020 11:15:34
// UserName: ????????? // UserName: ?????????
// GPLEX input file <ABCPascal.lex> // GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource> // GPLEX frame file <embedded resource>

View file

@ -1550,15 +1550,6 @@ object_type
{ {
var cd = NewObjectType((class_attribute)$1, $2, $3 as named_type_reference_list, $4 as where_definition_list, $5 as class_body_list, @$); var cd = NewObjectType((class_attribute)$1, $2, $3 as named_type_reference_list, $4 as where_definition_list, $5 as class_body_list, @$);
$$ = cd; $$ = cd;
/*var tt = cd.DescendantNodes().OfType<class_definition>().Where(cld => cld.keyword == class_keyword.Record);
if (tt.Count()>0)
{
foreach (var ttt in tt)
{
var sc = ttt.source_context;
parsertools.AddErrorFromResource("NESTED_RECORD_DEFINITIONS_ARE_FORBIDDEN", new LexLocation(sc.begin_position.line_num, sc.begin_position.column_num-1, sc.end_position.line_num, sc.end_position.column_num, sc.FileName));
}
}*/
} }
; ;

View file

@ -2,7 +2,7 @@
// GPPG version 1.3.6 // GPPG version 1.3.6
// Machine: DESKTOP-G8V08V4 // Machine: DESKTOP-G8V08V4
// DateTime: 07.03.2020 10:31:44 // DateTime: 08.03.2020 11:15:35
// UserName: ????????? // UserName: ?????????
// Input file <ABCPascal.y> // Input file <ABCPascal.y>
@ -3973,15 +3973,6 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
{ {
var cd = NewObjectType((class_attribute)ValueStack[ValueStack.Depth-5].ob, ValueStack[ValueStack.Depth-4].ti, ValueStack[ValueStack.Depth-3].stn as named_type_reference_list, ValueStack[ValueStack.Depth-2].stn as where_definition_list, ValueStack[ValueStack.Depth-1].stn as class_body_list, CurrentLocationSpan); var cd = NewObjectType((class_attribute)ValueStack[ValueStack.Depth-5].ob, ValueStack[ValueStack.Depth-4].ti, ValueStack[ValueStack.Depth-3].stn as named_type_reference_list, ValueStack[ValueStack.Depth-2].stn as where_definition_list, ValueStack[ValueStack.Depth-1].stn as class_body_list, CurrentLocationSpan);
CurrentSemanticValue.td = cd; CurrentSemanticValue.td = cd;
/*var tt = cd.DescendantNodes().OfType<class_definition>().Where(cld => cld.keyword == class_keyword.Record);
if (tt.Count()>0)
{
foreach (var ttt in tt)
{
var sc = ttt.source_context;
parsertools.AddErrorFromResource("NESTED_RECORD_DEFINITIONS_ARE_FORBIDDEN", new LexLocation(sc.begin_position.line_num, sc.begin_position.column_num-1, sc.end_position.line_num, sc.end_position.column_num, sc.FileName));
}
}*/
} }
break; break;
case 284: // record_type -> tkRecord, optional_base_classes, optional_where_section, case 284: // record_type -> tkRecord, optional_base_classes, optional_where_section,

View file

@ -263,5 +263,6 @@ script=

View file

@ -1 +1 @@
3.6.2.2374 3.6.2.2376

View file

@ -1 +1 @@
!define VERSION '3.6.2.2374' !define VERSION '3.6.2.2376'

View file

@ -12,6 +12,27 @@ using PascalABCCompiler.Errors;
namespace SyntaxVisitors namespace SyntaxVisitors
{ {
public class CheckArrayRecordInitializersVisitor : WalkingVisitorNew
{
//procedure_definition PD;
public static CheckArrayRecordInitializersVisitor New
{
get { return new CheckArrayRecordInitializersVisitor(); }
}
public override void visit(function_lambda_definition ld)
{
// пропустить всё
}
public override void visit(var_def_statement vd)
{
if (vd.inital_value is array_const)
throw new SyntaxVisitorError("FUNCTION_WITH_YIELD_CANNOT_CONTAIN_OLDSTYLE_ARRAY_INITIALIZERS", vd.inital_value.source_context);
if (vd.inital_value is record_const)
throw new SyntaxVisitorError("FUNCTION_WITH_YIELD_CANNOT_CONTAIN_OLDSTYLE_RECORD_INITIALIZERS", vd.inital_value.source_context);
}
}
public class MarkMethodHasYieldAndCheckSomeErrorsVisitor : WalkingVisitorNew public class MarkMethodHasYieldAndCheckSomeErrorsVisitor : WalkingVisitorNew
{ {
private bool HasYields = false; private bool HasYields = false;
@ -75,6 +96,8 @@ namespace SyntaxVisitors
throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_INHERITED_CALLS", FirstInheritedIdent.First().source_context); throw new SyntaxVisitorError("FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_INHERITED_CALLS", FirstInheritedIdent.First().source_context);
} }
} }
CheckArrayRecordInitializersVisitor.New.ProcessNode(pd);
} }
/*if (pd.has_yield) /*if (pd.has_yield)

View file

@ -2595,6 +2595,11 @@ type
constructor (c: string; n, w: integer; f: string) := (Comment, Num, Width, Fmt) := (c, n, w, f); constructor (c: string; n, w: integer; f: string) := (Comment, Num, Width, Fmt) := (c, n, w, f);
end; end;
type
[AttributeUsage(AttributeTargets.Class)]
PCUNotRestoreAttribute = class(System.Attribute)
public constructor := exit;
end;
///-- ///--
function InternalRange(l,r: integer): IntRange; function InternalRange(l,r: integer): IntRange;

View file

@ -0,0 +1,14 @@
type Rec = record
i: integer;
end;
function f1: sequence of word;
begin
//var r: Rec := (i: 2);
var a: array of array of integer := ((1,2),(3));
yield 0;
end;
begin
end.

View file

@ -0,0 +1,14 @@
type Rec = record
i: integer;
end;
function f1: sequence of word;
begin
var r: Rec := (i: 2);
//var a: array of array of integer := ((1,2),(3));
yield 0;
end;
begin
end.

View file

@ -12,6 +12,8 @@ FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_TRY_EXCEPT_FINALLY=Functions with yield can
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_NESTED_SUBROUTINES=Functions with yield cannot contain nested subrotines or be nested FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_NESTED_SUBROUTINES=Functions with yield cannot contain nested subrotines or be nested
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_LOCAL_TYPE_DEFINITIONS=Functions with yield cannot contain local type definitions FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_LOCAL_TYPE_DEFINITIONS=Functions with yield cannot contain local type definitions
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_INHERITED_CALLS=Functions with yield cannot contain calls of inherited methods FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_INHERITED_CALLS=Functions with yield cannot contain calls of inherited methods
FUNCTION_WITH_YIELD_CANNOT_CONTAIN_OLDSTYLE_ARRAY_INITIALIZERS=Functions with yield cannot contain Delphi-style array initializers
FUNCTION_WITH_YIELD_CANNOT_CONTAIN_OLDSTYLE_RECORD_INITIALIZERS=Functions with yield cannot contain Delphi-style record initializers
YIELDS_INSIDE_WITH_ARE_ILLEGAL=with statement cannot contain yields YIELDS_INSIDE_WITH_ARE_ILLEGAL=with statement cannot contain yields
YIELDSEQUENCES_INSIDE_WITH_ARE_ILLEGAL=with statement cannot contain yield sequence YIELDSEQUENCES_INSIDE_WITH_ARE_ILLEGAL=with statement cannot contain yield sequence
LAMBDA_EXPRESSIONS_CANNOT_CONTAIN_YIELD=Lambda-expressions cannot contain yields LAMBDA_EXPRESSIONS_CANNOT_CONTAIN_YIELD=Lambda-expressions cannot contain yields

View file

@ -12,6 +12,8 @@ FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_TRY_EXCEPT_FINALLY=Функции с yield
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_NESTED_SUBROUTINES=Функции с yield не могут содержать вложенные подпрограммы и сами быть вложенными FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_NESTED_SUBROUTINES=Функции с yield не могут содержать вложенные подпрограммы и сами быть вложенными
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_LOCAL_TYPE_DEFINITIONS=Функции с yield не могут содержать локальные определения типов FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_LOCAL_TYPE_DEFINITIONS=Функции с yield не могут содержать локальные определения типов
FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_INHERITED_CALLS=Функции с yield не могут содержать вызовы inherited методов FUNCTIONS_WITH_YIELDS_CANNOT_CONTAIN_INHERITED_CALLS=Функции с yield не могут содержать вызовы inherited методов
FUNCTION_WITH_YIELD_CANNOT_CONTAIN_OLDSTYLE_ARRAY_INITIALIZERS=Функции с yield не могут содержать инициализаторы массивов в стиле Delphi
FUNCTION_WITH_YIELD_CANNOT_CONTAIN_OLDSTYLE_RECORD_INITIALIZERS=Функции с yield не могут содержать инициализаторы записей в стиле Delphi
YIELDS_INSIDE_WITH_ARE_ILLEGAL=Оператор yield запрещен внутри with YIELDS_INSIDE_WITH_ARE_ILLEGAL=Оператор yield запрещен внутри with
YIELDSEQUENCES_INSIDE_WITH_ARE_ILLEGAL=Оператор yield sequence запрещен внутри with YIELDSEQUENCES_INSIDE_WITH_ARE_ILLEGAL=Оператор yield sequence запрещен внутри with
LAMBDA_EXPRESSIONS_CANNOT_CONTAIN_YIELD=Лямбда-выражения не могут содержать yield LAMBDA_EXPRESSIONS_CANNOT_CONTAIN_YIELD=Лямбда-выражения не могут содержать yield