Сделан стек контекстов
This commit is contained in:
parent
dac8a1a369
commit
05f80f6486
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%MINOR%=2
|
||||
%REVISION%=1019
|
||||
%REVISION%=1022
|
||||
%MAJOR%=2
|
||||
%COREVERSION%=0
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '2.2.0.1019'
|
||||
!define VERSION '2.2.0.1022'
|
||||
|
|
@ -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.
Loading…
Reference in a new issue