Сделан стек контекстов

This commit is contained in:
miks1965 2015-08-27 21:13:09 +03:00
parent dac8a1a369
commit 05f80f6486
10 changed files with 557 additions and 573 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "2";
public const string Minor = "2";
public const string Build = "0";
public const string Revision = "1019";
public const string Revision = "1022";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=2
%REVISION%=1019
%REVISION%=1022
%MAJOR%=2
%COREVERSION%=0

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: SSM
// DateTime: 25.08.2015 22:41:39
// DateTime: 26.08.2015 21:42:03
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>

View file

@ -2,7 +2,7 @@
// GPPG version 1.3.6
// Machine: SSM
// DateTime: 25.08.2015 22:41:40
// DateTime: 26.08.2015 21:42:04
// UserName: ?????????
// Input file <ABCPascal.y>

View file

@ -1 +1 @@
!define VERSION '2.2.0.1019'
!define VERSION '2.2.0.1022'

View file

@ -48,6 +48,7 @@ namespace PascalABCCompiler.TreeConverter
public class compilation_context
{
private ContextState SavedContext = null; // сохраненный контекст, используется при переходе к другому контексту при компиляции и последующем возврате к первоначальному контексту
public Stack<ContextState> SavedContextStack = new Stack<ContextState>(); // SSM 26/08/15 - пробую сделать стек контекстов. Может, что-то надо удет клонировать?
// Существуют 3 перехода вверх:
// Из блока в раздел описаний до beginа этого блока (если это глобальный блок, то - на глобальный уровень). Обнуляется convertion_data_and_alghoritms.statement_list_stack. Поля func_stack и _ctn остаются нетронутыми
@ -96,6 +97,8 @@ namespace PascalABCCompiler.TreeConverter
SavedContext.member_decls = member_decls;
SavedContext.types_predefined = _types_predefined;
SavedContext.ret_value = syntax_tree_visitor.ret.get_result();
SavedContextStack.Push(SavedContext);
// SavedContext.type_stack = type_stack;
convertion_data_and_alghoritms.statement_list_stack = new statement_list_stack();
@ -127,6 +130,7 @@ namespace PascalABCCompiler.TreeConverter
public void RestoreCurrentContext()
{
SavedContext = SavedContextStack.Pop();
convertion_data_and_alghoritms.statement_list_stack = SavedContext.stlist_stack;
_cmn = SavedContext.cmn;
_ctn = SavedContext.ctn;
@ -151,6 +155,7 @@ namespace PascalABCCompiler.TreeConverter
_types_predefined = SavedContext.types_predefined;
syntax_tree_visitor.ret.return_value(SavedContext.ret_value);
if (SavedContextStack.Count == 0)
SavedContext = null;
// type_stack = cs.type_stack; оно почему-то readonly - ну и ладно
}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.