ide: PDB debugger now can use Esc scripts for pretty printing

This commit is contained in:
Mirek Fidler 2025-01-09 17:47:11 +01:00
parent 33431e0b32
commit fa58d0c40a
39 changed files with 1118 additions and 630 deletions

View file

@ -167,9 +167,11 @@ CONSOLE_APP_MAIN
Execute(global, "main", INT_MAX); Execute(global, "main", INT_MAX);
} }
catch(CParser::Error e) { catch(CParser::Error e) {
DDUMP(e);
Cout() << "ERROR: " << e << "\n"; Cout() << "ERROR: " << e << "\n";
} }
DDUMP(global);
DDUMP(global.Get("out")); DDUMP(global.Get("out"));
DDUMP(global.Get("out2")); DDUMP(global.Get("out2"));
DDUMP(global.Get("out3")); DDUMP(global.Get("out3"));

View file

@ -3,6 +3,7 @@ uses
Esc; Esc;
file file
test2.esc,
test.esc, test.esc,
Esc.cpp; Esc.cpp;

View file

@ -25,14 +25,22 @@ CONSOLE_APP_MAIN
RLOG(e); RLOG(e);
} }
code = LoadFile(GetDataFile("test2.esc"));
try {
Scan(global, code);
EscValue data_ptr;
for(int i = 0; i < 100; i++)
{
RTIMING("run test 2");
data_ptr = Execute(global, "test", INT_MAX);
}
RDUMP(data_ptr);
}
catch(CParser::Error e) {
RLOG(e);
}
RLOG(""); RLOG("");
RLOG("-----------------------"); RLOG("-----------------------");
DUMP(global.GetAdd("result"));
// EscValue v;
// v.SetArray().Add(123);
// EscValue v2 = v;
// v.SetArray().Add(v);
// DUMP(v);
} }

View file

@ -3,11 +3,14 @@ sieve()
N = 2000; N = 2000;
sieve = N * [1]; sieve = N * [1];
prime = []; prime = [];
:ii = 0;
for(i = 2; i < N; i++) { for(i = 2; i < N; i++) {
if(sieve[i]) { if(sieve[i]) {
prime[] = i; prime[] = i;
for(j = i; j < N; j += i) for(j = i; j < N; j += i) {
sieve[j] = 0; sieve[j] = 0;
:ii++;
}
} }
} }
return prime; return prime;

View file

@ -0,0 +1,10 @@
test()
{
item.address = 1;
from = 100;
sz = 16;
data_ptr = [];
for(ii = 0; ii < 20000; ii++)
data_ptr[] = item.address + (ii + from) * sz;
return data_ptr;
}

View file

@ -32,7 +32,7 @@ CONSOLE_APP_MAIN
Escape(global, "InputNumber()", SIC_InputNumber); Escape(global, "InputNumber()", SIC_InputNumber);
StdLib(global); StdLib(global);
try { try {
Scan(global, LoadFile(GetDataFile("script.esc"))); Scan(global, LoadDataFile("script.esc"));
Execute(global, "main", INT_MAX); Execute(global, "main", INT_MAX);
} }
catch(CParser::Error e) { catch(CParser::Error e) {

View file

@ -105,6 +105,28 @@ void CSyntax::InitKeywords()
"GetMinSize", "GetStdSize", "GetMinSize", "GetStdSize",
NULL NULL
}; };
static const char *dbg[] = {
"void", "self", "if", "else", "while", "do", "case",
"default", "break", "return", "switch", "operator", "for",
"fn", "typename",
"value", "from", "items", "template_param",
"TEXT", "HAS_DATA", "ITEM_COUNT", "ITEM_TYPE", "STRING",
"ITEM_PTR", "ITEM_PTRS", "ITEM_DEREF_PTRS", "CHUNK",
NULL
};
static const char *dbglib[] = {
"is_number", "is_array", "is_map", "is_void", "int", "to_string", "to_number",
"count", "keys", "values", "rand", "reverse", "sort", "order", "replace",
"ToUpper", "ToLower", "len", "mid", "exists",
"SizeOf", "TypeName", "DeRef", "Field",
"PeekPtr", "Peek8", "Peek16", "Peek32", "Peek64", "Peek32f", "Peek64f",
"SizeOfPtr",
"LOG",
NULL
};
static const char *java[] = { static const char *java[] = {
"abstract", "assert", "boolean", "byte", "case", "abstract", "assert", "boolean", "byte", "case",
"catch", "char", "class", "const", "catch", "char", "class", "const",
@ -337,6 +359,7 @@ void CSyntax::InitKeywords()
LoadSyntax(css, cssn); LoadSyntax(css, cssn);
LoadSyntax(empty, empty); // This is JSON - no keywords to highlights LoadSyntax(empty, empty); // This is JSON - no keywords to highlights
LoadSyntax(php, php2); LoadSyntax(php, php2);
LoadSyntax(dbg, dbglib);
kw_macros = InitUpp(upp_macros); kw_macros = InitUpp(upp_macros);
kw_logs = InitUpp(upp_logs); kw_logs = InitUpp(upp_logs);

View file

@ -80,7 +80,7 @@ public:
enum HighlightType { enum HighlightType {
HIGHLIGHT_NONE = -1, HIGHLIGHT_CPP = 0, HIGHLIGHT_USC, HIGHLIGHT_JAVA, HIGHLIGHT_T, HIGHLIGHT_NONE = -1, HIGHLIGHT_CPP = 0, HIGHLIGHT_USC, HIGHLIGHT_JAVA, HIGHLIGHT_T,
HIGHLIGHT_CALC, HIGHLIGHT_LAY, HIGHLIGHT_SCH, HIGHLIGHT_SQL, HIGHLIGHT_CS, HIGHLIGHT_CALC, HIGHLIGHT_LAY, HIGHLIGHT_SCH, HIGHLIGHT_SQL, HIGHLIGHT_CS,
HIGHLIGHT_JAVASCRIPT, HIGHLIGHT_CSS, HIGHLIGHT_JSON, HIGHLIGHT_PHP, HIGHLIGHT_JAVASCRIPT, HIGHLIGHT_CSS, HIGHLIGHT_JSON, HIGHLIGHT_PHP, HIGHLIGHT_DBG,
HIGHLIGHT_COUNT HIGHLIGHT_COUNT
}; };

View file

@ -50,6 +50,7 @@ void RegisterSyntaxModules()
RegisterCSyntax("usc", CSyntax::HIGHLIGHT_USC, "*.usc", "U++ widget definitions"); RegisterCSyntax("usc", CSyntax::HIGHLIGHT_USC, "*.usc", "U++ widget definitions");
RegisterCSyntax("calc", CSyntax::HIGHLIGHT_CALC, "", ""); RegisterCSyntax("calc", CSyntax::HIGHLIGHT_CALC, "", "");
RegisterCSyntax("php", CSyntax::HIGHLIGHT_PHP, "*.php", "PHP"); RegisterCSyntax("php", CSyntax::HIGHLIGHT_PHP, "*.php", "PHP");
RegisterCSyntax("usc", CSyntax::HIGHLIGHT_DBG, "*.dbg", "Debugger pretty printing scripts");
EditorSyntax::Register("diff", callback(CreateDiffSyntax), "*.diff *.patch", "Diff"); EditorSyntax::Register("diff", callback(CreateDiffSyntax), "*.diff *.patch", "Diff");

View file

@ -9,6 +9,24 @@ namespace Upp {
#define IMAGEFILE <CtrlLib/Ctrls.iml> #define IMAGEFILE <CtrlLib/Ctrls.iml>
#include <Draw/iml_source.h> #include <Draw/iml_source.h>
void NewStyleArrows()
{
return;
// TODO
CtrlImg::Set(CtrlImg::I_smallup, CtrlImg::smallup_n());
CtrlImg::Set(CtrlImg::I_smalldown, MirrorVert(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlImg::I_smallleft, RotateAntiClockwise(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlImg::I_smallright, RotateClockwise(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlsImg::I_UA, CtrlImg::smallup_n());
CtrlImg::Set(CtrlsImg::I_DA, MirrorVert(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlsImg::I_LA, RotateAntiClockwise(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlsImg::I_RA, RotateClockwise(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlsImg::I_kUA, CtrlImg::smallup_n());
CtrlImg::Set(CtrlsImg::I_kDA, MirrorVert(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlsImg::I_kLA, RotateAntiClockwise(CtrlImg::smallup_n()));
CtrlImg::Set(CtrlsImg::I_kRA, RotateClockwise(CtrlImg::smallup_n()));
}
Color AdjustColor(Color c, int adj) Color AdjustColor(Color c, int adj)
{ {
return Color(clamp(c.GetR() + adj, 0, 255), return Color(clamp(c.GetR() + adj, 0, 255),

View file

@ -50,6 +50,8 @@ Color FaceColor(int adj);
// Creates synthetic style based on SColors and basic button face // Creates synthetic style based on SColors and basic button face
void ChSynthetic(Image *button100x100, Color *text, bool macos = false, int dpi = DPI(1)); void ChSynthetic(Image *button100x100, Color *text, bool macos = false, int dpi = DPI(1));
void NewStyleArrows();
// for diagnostics purposes // for diagnostics purposes
#ifdef _DEBUG #ifdef _DEBUG
void SetChameleonSample(const Value& m, bool once = true); void SetChameleonSample(const Value& m, bool once = true);

View file

@ -426,8 +426,14 @@ void ChHostSkin0()
else for(sysColor *s = sSysColor; s < sSysColor + __countof(sSysColor); s++) // this also resets all imls via SColorPaper_Write!!! else for(sysColor *s = sSysColor; s < sSysColor + __countof(sSysColor); s++) // this also resets all imls via SColorPaper_Write!!!
(*s->set)(sAdjust(Color::FromCR(GetSysColor(s->syscolor)))); (*s->set)(sAdjust(Color::FromCR(GetSysColor(s->syscolor))));
if(IsWin11())
NewStyleArrows();
ChBaseSkin(); ChBaseSkin();
if(IsWin11())
NewStyleArrows();
GUI_GlobalStyle_Write(GUISTYLE_XP); GUI_GlobalStyle_Write(GUISTYLE_XP);
#ifndef PLATFORM_WINCE #ifndef PLATFORM_WINCE
GUI_DragFullWindow_Write(IsSysFlag(SPI_GETDRAGFULLWINDOWS)); GUI_DragFullWindow_Write(IsSysFlag(SPI_GETDRAGFULLWINDOWS));
@ -736,6 +742,9 @@ void ChHostSkin0()
14, 26); 14, 26);
} }
// if(IsWin11())
// NewStyleArrows();
// LabelBoxTextColor_Write(XpColor(XP_BUTTON, BP_GROUPBOX, GBS_NORMAL, 3803/*TMT_TEXTCOLOR*/)); // LabelBoxTextColor_Write(XpColor(XP_BUTTON, BP_GROUPBOX, GBS_NORMAL, 3803/*TMT_TEXTCOLOR*/));
// LabelBoxColor_Write(XpColor(XP_BUTTON, BP_GROUPBOX, GBS_NORMAL, 3822/*TMT_BORDERCOLORHINT*/)); // LabelBoxColor_Write(XpColor(XP_BUTTON, BP_GROUPBOX, GBS_NORMAL, 3822/*TMT_BORDERCOLORHINT*/));
} }

View file

@ -7,6 +7,8 @@ IMAGE_ID(information)
IMAGE_ID(question) IMAGE_ID(question)
IMAGE_ID(error) IMAGE_ID(error)
IMAGE_ID(smallcheck) IMAGE_ID(smallcheck)
IMAGE_ID(smallup_n)
IMAGE_ID(spinup_n)
IMAGE_ID(smallup) IMAGE_ID(smallup)
IMAGE_ID(smalldown) IMAGE_ID(smalldown)
IMAGE_ID(smallleft) IMAGE_ID(smallleft)
@ -280,67 +282,77 @@ IMAGE_DATA(162,147,171,48,87,85,85,85,253,54,125,0,228,251,70,233,0,0,0,0,0,0,0,
IMAGE_END_DATA(832, 2) IMAGE_END_DATA(832, 2)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,219,205,113,35,55,16,134,225,182,93,150,125,244,69,119,95,173,124,152,131,179,208,198,195,40,20,4,147,112) IMAGE_DATA(120,156,237,154,81,110,227,32,16,134,81,87,155,237,227,190,68,170,20,105,149,183,149,242,216,158,197,231,113,206,227,83)
IMAGE_DATA(20,180,70,18,181,67,16,191,131,198,255,251,108,77,21,181,36,209,24,244,55,4,201,213,202,159,242,167,68,186,6,238) IMAGE_DATA(228,16,190,196,158,130,53,105,72,8,12,204,48,128,33,22,83,33,217,49,230,255,254,25,140,237,202,226,93,188,11,98)
IMAGE_DATA(187,58,30,119,181,220,111,222,190,58,30,111,222,231,26,51,117,190,118,127,200,83,242,115,60,133,92,147,116,157,160,237) IMAGE_DATA(72,228,152,244,244,147,192,113,123,91,122,250,219,199,124,99,198,242,130,113,252,18,127,196,231,178,241,25,123,102,143,205)
IMAGE_DATA(239,67,39,153,52,233,80,129,80,225,208,132,226,87,252,233,125,218,129,137,218,254,46,102,66,71,79,32,124,98,150,73) IMAGE_DATA(196,225,112,144,186,213,102,225,134,233,193,110,181,217,98,34,228,227,149,252,80,124,188,130,159,24,31,45,251,225,248,104)
IMAGE_DATA(135,90,239,250,251,80,36,98,31,31,158,207,239,242,155,107,130,190,137,61,70,225,201,62,144,189,106,236,149,157,57,187) IMAGE_DATA(209,79,138,143,150,252,228,240,209,130,159,88,190,86,253,112,185,90,243,147,202,211,138,159,92,28,181,253,228,214,175,229)
IMAGE_DATA(159,183,141,129,98,18,110,47,104,57,77,223,101,17,74,212,39,199,236,92,183,221,179,251,251,253,207,65,39,177,159,201) IMAGE_DATA(167,148,238,218,126,74,235,173,229,103,43,58,91,169,255,86,174,203,173,172,151,181,125,228,226,104,197,71,42,79,107,62)
IMAGE_DATA(254,56,29,29,60,92,243,244,126,92,222,143,171,227,184,124,61,70,101,46,167,184,154,81,115,73,157,199,233,120,93,231) IMAGE_DATA(184,92,173,250,224,240,181,236,67,71,14,47,53,249,237,72,241,82,147,219,23,156,107,166,22,43,37,94,137,149,27,199)
IMAGE_DATA(60,98,231,240,85,251,172,80,251,118,156,99,231,80,160,118,244,28,188,181,79,167,243,245,114,121,185,190,255,228,61,46) IMAGE_DATA(191,226,163,54,67,143,91,180,56,217,90,93,76,91,189,249,82,184,90,125,88,171,193,199,225,90,131,47,133,171,36,95)
IMAGE_DATA(23,185,158,207,242,241,248,196,57,120,251,253,242,114,249,24,243,199,143,159,181,182,219,230,28,183,218,219,28,182,251,95) IMAGE_DATA(14,174,18,124,177,122,107,241,113,117,74,243,165,142,95,138,47,215,184,185,249,90,29,175,213,58,180,58,127,91,190,238)
IMAGE_DATA(95,95,28,121,120,120,113,248,58,247,240,58,110,227,255,172,255,195,250,152,215,215,215,239,199,108,183,31,31,243,176,6) IMAGE_DATA(215,224,226,106,173,197,197,209,91,147,139,163,185,38,87,77,205,205,199,47,177,227,156,230,75,190,239,51,58,223,39,120)
IMAGE_DATA(209,89,223,175,181,125,141,31,31,23,177,6,81,181,183,122,254,113,99,235,95,247,245,163,215,126,91,239,219,152,91,31) IMAGE_DATA(208,239,216,103,120,81,208,152,0,38,140,1,209,103,225,110,193,70,64,161,223,40,64,92,3,184,49,0,26,43,189,239)
IMAGE_DATA(242,230,249,221,131,232,181,143,233,253,243,243,229,238,113,246,12,222,245,32,170,118,76,239,205,252,135,122,148,82,223,183) IMAGE_DATA(119,108,74,80,251,227,60,63,197,15,31,96,8,204,157,10,59,120,32,88,149,250,237,105,34,221,99,219,26,136,50,195)
IMAGE_DATA(166,183,186,251,251,63,123,20,234,107,124,253,125,239,125,199,182,222,190,235,226,104,253,253,249,237,199,223,94,151,246,245) IMAGE_DATA(97,65,192,102,232,178,192,102,212,119,120,232,124,219,126,186,227,242,199,140,65,192,78,204,54,112,7,199,53,135,165,205)
IMAGE_DATA(183,121,62,63,255,167,94,223,181,246,177,185,204,169,191,239,189,237,186,11,221,31,174,239,191,254,246,189,119,157,223,126) IMAGE_DATA(75,147,158,54,223,250,100,97,25,104,154,36,150,88,142,129,175,235,229,160,50,220,180,167,12,218,186,77,84,134,2,218)
IMAGE_DATA(125,226,250,255,125,253,5,95,127,92,189,207,235,193,221,30,112,184,247,199,123,96,190,254,63,246,96,203,246,126,47,11) IMAGE_DATA(100,134,160,246,48,76,114,158,79,114,217,11,182,121,22,114,154,196,181,127,36,67,176,222,167,211,124,29,243,124,126,104)
IMAGE_DATA(141,107,246,96,123,126,96,237,189,251,239,86,219,124,207,97,223,79,31,123,224,127,29,176,190,7,121,88,131,125,221,251) IMAGE_DATA(169,109,155,81,105,43,6,117,124,28,79,158,249,224,44,14,55,239,120,30,213,248,15,253,51,216,103,28,199,123,31,181)
IMAGE_DATA(115,179,231,197,246,26,245,248,88,235,251,143,221,26,148,120,239,119,59,242,222,3,22,174,93,112,14,209,181,141,57,52) IMAGE_DATA(237,246,113,114,64,158,235,102,174,225,28,187,253,8,57,32,105,43,189,240,184,84,125,105,234,147,115,175,242,173,199,84)
IMAGE_DATA(249,252,177,155,67,179,207,95,150,121,84,255,252,25,152,139,210,231,239,191,222,255,20,16,154,164,121,60,60,63,150,239) IMAGE_DATA(117,72,227,188,215,128,156,123,74,237,247,251,249,169,31,60,7,159,106,64,210,166,212,222,158,255,88,141,98,244,67,57)
IMAGE_DATA(249,219,11,210,237,56,242,124,205,250,182,35,230,249,111,111,111,31,199,254,246,237,231,217,235,231,174,255,205,209,250,251) IMAGE_DATA(213,186,230,241,239,26,97,117,165,235,155,181,15,53,149,239,208,117,193,213,55,253,153,227,171,117,201,212,87,156,251,253)
IMAGE_DATA(243,53,143,148,250,71,230,159,120,168,248,53,227,155,193,146,110,11,229,250,185,230,28,90,212,54,231,208,10,245,169,79) IMAGE_DATA(191,236,250,190,220,83,231,101,138,190,89,123,232,186,195,142,227,250,225,235,207,172,189,207,159,153,31,90,253,239,215,31)
IMAGE_DATA(125,234,83,191,93,237,150,123,159,235,103,0,0,48,139,237,203,128,39,249,197,247,144,253,215,145,218,95,117,198,184,94) IMAGE_DATA(186,254,248,106,159,86,131,167,123,0,187,246,252,26,216,235,191,91,3,53,183,205,123,25,54,174,93,3,117,62,146,251)
IMAGE_DATA(46,151,143,67,20,191,5,73,169,31,248,22,135,250,107,213,175,125,45,220,213,223,236,174,5,237,185,216,198,124,168,95) IMAGE_DATA(224,253,87,105,219,207,28,240,253,212,173,65,120,29,0,159,65,156,28,152,186,207,222,224,249,2,173,81,110,95,240,249)
IMAGE_DATA(112,46,223,99,126,254,147,226,231,107,143,175,190,99,46,135,235,111,99,152,231,21,91,95,33,163,167,237,188,111,94,94) IMAGE_DATA(195,200,65,137,103,63,221,210,158,1,11,107,23,100,32,107,91,12,85,222,63,12,134,106,239,95,0,199,234,239,159,8)
IMAGE_DATA(94,106,215,223,124,175,193,249,124,190,238,231,227,162,92,255,20,83,211,55,151,204,250,155,239,53,104,84,255,240,26,40) IMAGE_DATA(75,166,247,239,223,203,95,129,192,32,237,230,156,79,141,208,249,106,65,210,141,115,126,78,125,168,81,206,191,92,46,215)
IMAGE_DATA(213,223,36,175,129,242,30,157,188,6,187,215,12,45,73,107,32,250,251,83,244,26,20,124,127,20,92,131,219,235,132,148) IMAGE_DATA(102,110,235,253,173,235,167,230,95,7,87,223,244,107,183,24,125,14,127,100,203,18,111,9,255,25,44,25,58,81,190,253)
IMAGE_DATA(217,19,63,214,192,53,7,99,175,40,37,244,79,242,45,222,23,3,128,154,127,223,228,77,254,57,246,63,27,107,170,242) IMAGE_DATA(53,25,106,104,219,12,181,162,235,119,253,174,223,245,187,126,61,237,154,247,62,223,126,143,30,61,122,244,232,209,99,35)
IMAGE_DATA(107,18,64,103,170,255,170,16,208,137,212,95,149,227,58,192,76,30,190,140,244,124,1,193,53,128,217,68,229,223,113,13) IMAGE_DATA(241,31,111,170,218,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_DATA(0,35,139,206,190,227,26,0,70,117,151,229,20,194,53,128,241,145,127,172,236,80,246,201,63,38,65,254,177,50,242,143) IMAGE_END_DATA(864, 16)
IMAGE_DATA(149,145,127,172,140,252,99,101,228,31,43,35,255,88,25,249,199,202,200,63,86,70,254,177,50,242,143,149,145,127,172,140)
IMAGE_DATA(252,99,101,228,31,43,35,255,88,25,249,199,202,200,63,86,70,254,177,50,242,143,149,145,127,172,140,252,99,101,228,31) IMAGE_BEGIN_DATA
IMAGE_DATA(43,35,255,88,25,249,199,202,200,63,86,70,254,177,50,242,143,149,145,127,172,172,100,254,175,102,13,199,1,180,82,34) IMAGE_DATA(120,156,237,216,203,113,219,72,20,64,209,55,27,199,225,237,40,31,230,224,216,20,133,131,80,62,154,161,45,170,40,136)
IMAGE_DATA(255,161,188,147,127,244,66,59,255,169,217,231,26,64,75,154,249,247,102,60,97,255,0,106,209,202,191,55,235,145,207,7) IMAGE_DATA(4,1,162,255,125,78,21,119,102,3,232,190,208,179,20,63,227,103,252,136,127,98,197,233,255,207,251,199,231,180,246,15)
IMAGE_DATA(106,83,207,127,230,24,64,77,170,249,87,24,195,58,55,207,1,228,80,201,110,14,177,231,153,207,207,168,161,183,252,231) IMAGE_DATA(51,121,127,123,123,251,243,249,184,135,226,215,191,112,125,215,143,242,239,194,151,235,159,93,189,11,169,239,229,214,154,223)
IMAGE_DATA(28,64,170,110,243,127,240,121,64,138,238,242,159,249,124,32,69,87,249,207,125,126,163,53,196,184,134,207,191,57,70,202) IMAGE_DATA(174,159,241,94,62,215,60,157,78,151,181,86,175,127,231,94,158,190,254,121,141,229,115,109,189,126,130,70,79,231,231,190)
IMAGE_DATA(57,39,62,15,229,180,234,197,10,249,231,51,116,223,90,126,207,49,115,254,249,30,105,12,71,251,164,209,179,25,243,239) IMAGE_DATA(120,121,121,41,125,253,179,207,61,120,125,125,125,191,190,159,123,18,95,255,180,229,154,107,247,114,240,250,103,159,123,80)
IMAGE_DATA(61,34,198,64,93,15,189,145,132,126,74,94,223,150,200,255,129,49,80,79,78,159,114,251,54,117,254,51,199,65,29,154) IMAGE_DATA(233,250,79,239,65,162,235,159,237,222,131,196,51,122,247,30,92,253,204,72,101,215,30,68,250,249,180,121,15,50,254,255)
IMAGE_DATA(253,175,86,91,99,222,90,227,136,66,246,29,99,161,188,150,61,155,50,255,90,243,201,238,44,98,180,236,219,116,249,207) IMAGE_DATA(232,225,30,92,126,78,68,158,153,248,103,15,238,221,195,98,86,228,114,253,127,224,91,159,26,255,47,6,72,230,215,239)
IMAGE_DATA(117,112,29,113,92,203,222,145,127,207,88,122,45,134,135,90,239,140,254,21,173,173,53,111,141,113,52,215,80,200,127,109) IMAGE_DATA(248,29,255,198,143,218,247,241,200,218,15,226,26,191,32,66,9,143,186,247,14,48,170,61,237,123,15,24,205,183,63,70)
IMAGE_DATA(165,242,31,211,63,242,239,25,75,183,205,112,80,205,127,98,15,201,191,103,44,253,86,195,66,61,255,9,125,36,255,158) IMAGE_DATA(174,252,1,194,59,192,104,54,245,127,231,29,128,158,109,110,255,206,59,0,189,250,210,242,30,225,29,160,127,250,103,102)
IMAGE_DATA(177,202,180,27,134,34,249,143,236,37,249,247,140,85,174,229,216,81,237,159,167,159,222,218,57,57,81,154,95,211,49,108) IMAGE_DATA(79,181,175,127,6,161,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102)
IMAGE_DATA(99,149,107,57,12,173,246,0,242,239,25,171,108,203,177,83,107,15,48,123,58,69,254,75,141,83,188,235,216,43,150,127) IMAGE_DATA(166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127)
IMAGE_DATA(79,95,201,191,103,156,58,109,199,151,162,123,128,209,219,135,154,25,99,105,205,169,187,113,234,180,29,59,53,247,128,172) IMAGE_DATA(102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,166,127,102,150,179,255,247,229,53,238,124,160,150)
IMAGE_DATA(204,104,205,181,231,113,170,118,30,155,154,123,0,249,15,140,83,181,243,184,41,154,127,75,143,201,191,99,156,202,125,199) IMAGE_DATA(28,253,63,234,93,255,180,34,117,255,123,219,247,14,80,83,202,254,87,27,223,49,63,160,148,84,253,175,182,190,241,251)
IMAGE_DATA(167,226,123,128,217,235,156,231,230,206,177,231,113,170,119,30,55,85,242,63,19,173,53,19,242,223,131,106,123,192,44,180) IMAGE_DATA(80,90,242,254,15,174,1,37,37,237,63,193,26,55,239,109,229,3,71,36,105,247,136,184,221,179,223,159,41,161,181,254)
IMAGE_DATA(214,75,200,127,47,200,127,2,173,245,18,242,223,11,246,128,4,90,107,37,228,191,39,228,63,146,214,90,9,249,239,9) IMAGE_DATA(143,124,96,175,102,251,127,242,123,176,71,115,253,31,252,62,236,209,84,255,71,191,95,105,15,233,87,247,253,47,215,216)
IMAGE_DATA(123,64,36,173,117,18,242,223,27,242,95,145,144,255,222,176,7,84,36,228,191,71,228,191,18,33,255,61,98,15,168,68) IMAGE_DATA(243,204,59,191,71,62,181,206,98,134,254,253,14,221,182,154,127,231,24,185,127,127,71,234,195,179,231,148,226,204,70,236)
IMAGE_DATA(200,127,175,200,127,5,66,254,123,197,30,80,129,144,255,158,145,255,194,132,252,247,140,61,160,48,33,255,189,35,255,5) IMAGE_DATA(127,245,179,97,13,202,250,118,54,177,227,60,227,216,185,77,209,255,19,107,80,206,145,115,58,122,110,67,247,127,112,29)
IMAGE_DATA(9,249,239,29,123,64,65,66,254,71,64,254,11,17,242,63,2,246,128,66,132,252,143,130,252,23,32,228,127,20,236,1) IMAGE_DATA(202,72,121,254,197,174,157,226,190,83,173,19,9,218,191,179,22,249,213,60,179,33,251,79,117,63,135,79,150,45,106,158)
IMAGE_DATA(5,8,249,31,9,249,87,38,228,127,36,236,1,202,132,252,143,134,252,43,18,242,63,26,246,0,69,66,254,71,68,254) IMAGE_DATA(219,112,253,31,245,228,62,242,188,154,103,167,255,149,181,210,29,49,43,146,157,221,226,252,178,94,59,213,125,167,88,39)
IMAGE_DATA(149,8,249,31,17,123,128,18,33,255,163,34,255,153,132,236,143,140,61,32,147,144,255,209,145,255,12,66,254,71,199,30) IMAGE_DATA(229,30,134,254,75,203,213,255,150,243,211,255,202,90,105,143,153,59,146,246,191,243,12,245,191,178,86,250,163,230,134,228)
IMAGE_DATA(112,144,144,253,89,144,255,3,132,252,207,130,61,224,0,33,255,51,33,255,137,132,252,207,132,61,32,129,144,253,25,145) IMAGE_DATA(253,239,56,71,253,175,172,149,231,184,89,200,210,255,198,179,212,255,202,90,249,142,156,43,73,207,111,229,60,87,175,125)
IMAGE_DATA(255,72,66,254,103,196,30,16,73,200,255,172,200,127,128,144,253,153,177,7,4,8,249,159,29,249,119,16,178,191,2,246) IMAGE_DATA(164,147,68,247,87,117,141,91,107,229,59,114,22,106,205,0,253,175,172,149,247,200,185,82,106,6,44,207,116,136,254,115)
IMAGE_DATA(0,7,33,255,171,32,255,6,33,251,43,97,15,48,8,249,95,13,249,255,34,100,127,69,236,1,95,132,252,175,138,252) IMAGE_DATA(173,147,253,212,185,150,173,255,149,115,213,255,202,58,101,142,157,15,89,103,192,226,108,191,93,243,192,90,169,238,169,185)
IMAGE_DATA(95,201,255,194,150,223,3,132,236,175,142,252,147,255,149,45,187,7,8,217,199,39,242,143,149,45,183,7,8,217,199,61) IMAGE_DATA(117,202,28,59,87,74,206,128,67,205,164,186,215,150,215,41,122,242,156,149,156,1,250,127,176,78,209,147,231,34,107,255)
IMAGE_DATA(242,143,149,45,179,7,152,231,218,112,205,209,151,21,243,15,220,76,191,7,152,231,216,112,173,209,167,105,175,1,243,220) IMAGE_DATA(55,206,88,255,119,214,41,124,238,252,149,125,6,44,207,250,200,119,143,222,99,203,235,20,63,121,46,138,244,63,146,84)
IMAGE_DATA(26,174,49,250,54,221,53,96,158,83,195,181,197,24,102,206,63,16,50,205,30,96,158,75,195,53,197,88,134,191,6,204) IMAGE_DATA(123,22,250,111,65,177,25,48,138,84,251,21,250,111,133,254,119,72,181,95,161,255,86,152,1,59,164,218,171,208,127,75)
IMAGE_DATA(115,104,184,150,24,211,176,249,23,178,143,124,195,238,1,66,246,161,99,184,107,192,156,115,195,181,195,28,134,185,6,204) IMAGE_DATA(244,191,81,170,189,10,253,183,196,12,216,40,213,62,133,254,91,163,255,130,66,255,173,49,3,10,10,253,183,72,255,133)
IMAGE_DATA(185,54,92,51,204,197,150,173,222,15,64,75,235,44,147,125,180,214,58,211,228,31,240,35,251,0,0,0,0,0,0,0) IMAGE_DATA(132,254,91,100,6,20,18,250,111,149,254,11,8,253,183,202,12,40,32,244,223,50,253,103,22,250,111,153,25,144,89,232)
IMAGE_DATA(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) IMAGE_DATA(191,117,250,207,40,244,223,58,51,32,163,208,127,15,244,159,73,232,191,7,102,64,38,161,255,94,232,63,131,208,127,47)
IMAGE_DATA(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,240,63,118,192,5,115,0,0,0,0,0) IMAGE_DATA(204,128,12,66,255,61,209,127,98,161,255,158,152,1,137,133,254,123,163,255,132,66,255,189,49,3,18,10,253,247,72,255)
IMAGE_END_DATA(1920, 16) IMAGE_DATA(137,132,254,123,100,6,36,18,250,239,149,254,15,10,237,247,204,12,56,40,244,223,59,253,31,16,250,239,157,25,240,164)
IMAGE_DATA(208,254,40,244,255,132,208,255,40,204,128,39,132,254,71,162,255,157,66,255,35,49,3,118,8,237,143,72,255,27,133,254)
IMAGE_DATA(71,100,6,108,20,250,31,149,254,31,8,237,143,204,12,120,32,244,63,58,253,223,17,218,159,129,25,112,71,232,127,22)
IMAGE_DATA(250,95,8,237,207,196,12,88,8,253,207,70,255,31,66,251,51,50,3,62,132,254,103,165,255,119,253,79,108,250,25,16)
IMAGE_DATA(218,159,157,254,245,63,179,105,103,64,104,159,191,244,207,204,166,155,1,161,125,190,210,63,51,155,102,6,44,159,181,226)
IMAGE_DATA(158,211,150,25,251,135,139,225,103,192,242,25,43,238,53,109,26,246,29,88,62,91,197,61,166,109,195,189,3,203,103,170)
IMAGE_DATA(184,183,244,97,228,254,225,145,97,102,192,242,89,42,238,41,125,233,254,29,88,62,67,197,189,164,79,221,246,31,218,231)
IMAGE_DATA(184,110,103,64,104,159,52,186,123,7,150,247,92,113,239,24,67,55,239,192,242,94,43,238,25,99,185,213,86,235,31,72)
IMAGE_DATA(165,118,203,218,167,182,218,77,235,31,214,105,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_DATA(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,248,15,147,49,197,194,0,0,0,0,0)
IMAGE_END_DATA(1280, 2)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,156,237,109,27,49,12,134,53,66,71,200,111,183,67,120,9,21,253,153,159,69,10,116,133,56,65,167,241,20) IMAGE_DATA(120,156,237,156,237,109,27,49,12,134,53,66,71,200,111,183,67,120,9,21,253,153,159,69,10,116,133,56,65,167,241,20)

View file

@ -1,5 +1,4 @@
namespace Upp; namespace Upp;
namespace Upp;
enum_property Frame { enum_property Frame {
"NullFrame()", "NullFrame()",

View file

@ -10,19 +10,12 @@ namespace Upp {
#define LTIMING(x) // RTIMING(x) #define LTIMING(x) // RTIMING(x)
void Esc::OutOfMemory() force_inline void Esc::Limit(int64 count)
{ {
ThrowError("Out of memory"); LTIMING("Limit");
} if(count > op_limit)
ThrowError("out of operations limit");
void Esc::TestLimit() op_limit -= count;
{
LTIMING("TestLimit");
if(!IsNull(op_limit))
if(op_limit < 0)
ThrowError("out of operations limit - considered frozen");
if(EscValue::GetTotalCount() >= EscValue::GetMaxTotalCount())
OutOfMemory();
} }
EscValue Esc::Get(const SRVal& val) EscValue Esc::Get(const SRVal& val)
@ -31,99 +24,92 @@ EscValue Esc::Get(const SRVal& val)
if(skipexp) if(skipexp)
return (int64)1; return (int64)1;
EscValue v = val.lval ? *val.lval : val.rval; EscValue v = val.lval ? *val.lval : val.rval;
if(val.sbs.IsArray()) { for(const auto& ss : val.subscript) {
const Vector<EscValue>& sbs = val.sbs.GetArray(); if(v.IsMap() && ss.slice == 0)
for(int i = 0; i < sbs.GetCount(); i++) { v = v.MapGet(ss.i1);
const EscValue& ss = sbs[i]; else
if(v.IsMap()) //!!!! (problem with a[1, 2] if(v.IsArray()) {
v = v.MapGet(ss); int count = v.GetCount();
else if(ss.slice) {
if(v.IsArray()) { int i = ss.i1.GetInt();
int count = v.GetCount(); int n = count - i;
if(ss.IsArray() && ss.GetArray().GetCount() >= 2) { if(ss.slice == 1)
EscValue v1 = ss.ArrayGet(0); n = ss.i2.IsInt() ? ss.i2.GetInt() : n;
EscValue v2 = ss.ArrayGet(1);
int i = v1.GetInt();
int n = count - i;
if(ss.GetCount() == 2)
n = v2.IsInt() ? v2.GetInt() : n;
else {
if(v2.IsInt()) {
n = v2.GetInt();
if(n < 0)
n += count;
n -= i;
}
}
if(i >= 0 && n >= 0 && i + n <= count)
v = v.ArrayGet(i, n);
else
ThrowError("slice out of range");
}
else { else {
int64 i = Int(ss, "index"); if(ss.i2.IsInt()) {
if(i < 0) n = ss.i2.GetInt();
i += count; if(n < 0)
if(i >= 0 && i < count) n += count;
v = v.ArrayGet((int)i); n -= i;
else }
ThrowError("index out of range");
} }
if(i >= 0 && n >= 0 && i + n <= count)
v = v.ArrayGet(i, n);
else
ThrowError("slice out of range");
}
else {
int64 i = Int(ss.i1, "index");
if(i < 0)
i += count;
if(i >= 0 && i < count)
v = v.ArrayGet((int)i);
else
ThrowError("index out of range");
} }
else
ThrowError("invalid indirection");
TestLimit();
} }
else
ThrowError("invalid indirection");
} }
return v; return v;
} }
void Esc::Assign(EscValue& val, const Vector<EscValue>& sbs, int si, const EscValue& src) void Esc::Assign(EscValue& val, const Vector<SRVal::Subscript>& subscript, int si, const EscValue& src)
{ {
LTIMING("Assign"); LTIMING("Assign with subscript");
const EscValue& ss = sbs[si++]; const auto& ss = subscript[si++];
if(val.IsVoid()) if(val.IsVoid())
val.SetEmptyMap(); val.SetEmptyMap();
if(val.IsMap()) { if(val.IsMap()) {
if(si < sbs.GetCount()) { if(ss.slice)
EscValue x = val.MapGet(ss); ThrowError("invalid indirection");
val.MapSet(ss, 0.0); if(si < subscript.GetCount()) {
Assign(x, sbs, si, src); EscValue x = val.MapGet(ss.i1);
val.MapSet(ss, x); val.MapSet(ss.i1, 0.0);
Assign(x, subscript, si, src);
val.MapSet(ss.i1, x);
} }
else else
val.MapSet(ss, src); val.MapSet(ss.i1, src);
return; return;
} }
else else
if(val.IsArray()) { if(val.IsArray()) {
if(si < sbs.GetCount()) { if(si < subscript.GetCount()) {
if(ss.IsArray()) if(ss.slice)
ThrowError("slice must be last subscript"); ThrowError("slice must be the last subscript");
int64 i = Int(ss, "index"); int64 i = Int(ss.i1, "index");
if(i >= 0 && i < val.GetCount()) { if(i >= 0 && i < val.GetCount()) {
EscValue x = val.ArrayGet((int)i); EscValue x = val.ArrayGet((int)i);
val.ArraySet((int)i, 0.0); val.ArraySet((int)i, 0.0);
Assign(x, sbs, si, src); Assign(x, subscript, si, src);
if(!val.ArraySet((int)i, x)) val.ArraySet((int)i, x);
OutOfMemory();
return; return;
} }
} }
else { else {
int count = val.GetCount(); int count = val.GetCount();
if(ss.IsArray()) { if(ss.slice) {
if(!src.IsArray() || ss.GetArray().GetCount() < 2) if(!src.IsArray())
ThrowError("only array can be assigned to the slice"); ThrowError("only array can be assigned to the slice");
EscValue v1 = ss.ArrayGet(0); Limit(src.GetCount());
EscValue v2 = ss.ArrayGet(1); int i = ss.i1.IsInt() ? ss.i1.GetInt() : 0;
int i = v1.IsInt() ? v1.GetInt() : 0;
int n = count - i; int n = count - i;
if(ss.GetCount() == 2) if(ss.slice == 1)
n = v2.IsInt() ? v2.GetInt() : n; n = ss.i2.IsInt() ? ss.i2.GetInt() : n;
else { else {
if(v2.IsInt()) { if(ss.i2.IsInt()) {
n = v2.GetInt(); n = ss.i2.GetInt();
if(n < 0) if(n < 0)
n += count; n += count;
n -= i; n -= i;
@ -137,12 +123,12 @@ void Esc::Assign(EscValue& val, const Vector<EscValue>& sbs, int si, const EscVa
ThrowError("slice out of range"); ThrowError("slice out of range");
} }
else { else {
int64 i = ss.IsVoid() ? val.GetCount() : Int(ss, "index"); int64 i = ss.i1.IsVoid() ? val.GetCount() : Int(ss.i1, "index");
if(i < 0) if(i < 0)
i = count + i; i = count + i;
if(i >= 0 && i < INT_MAX) { if(i >= 0 && i < INT_MAX) {
if(!val.ArraySet((int)i, src)) Limit(max(i - val.GetCount(), (int64)0));
ThrowError("out of memory"); val.ArraySet((int)i, src);
return; return;
} }
} }
@ -157,8 +143,8 @@ void Esc::Assign(const SRVal& val, const EscValue& src)
return; return;
if(!val.lval) if(!val.lval)
ThrowError("l-value required"); ThrowError("l-value required");
if(val.sbs.IsArray() && val.sbs.GetCount()) if(val.subscript.GetCount())
Assign(*val.lval, val.sbs.GetArray(), 0, src); Assign(*val.lval, val.subscript, 0, src);
else else
*val.lval = src; *val.lval = src;
} }
@ -177,11 +163,11 @@ EscValue Esc::ExecuteLambda(const String& id, EscValue lambda, SRVal self, Vecto
for(int i = 0; i < l.arg.GetCount(); i++) { for(int i = 0; i < l.arg.GetCount(); i++) {
sub.var.GetAdd(l.arg[i]) = sub.var.GetAdd(l.arg[i]) =
i < arg.GetCount() ? Get(arg[i]) i < arg.GetCount() ? Get(arg[i])
: Evaluatex(l.def[i - (l.arg.GetCount() - l.def.GetCount())], global, op_limit); : Evaluatexl(l.def[i - (l.arg.GetCount() - l.def.GetCount())], global, op_limit);
TestLimit(); Limit();
} }
EscValue retval; EscValue retval;
Array<EscValue> argvar; Vector<EscValue> argvar;
if(l.escape) { if(l.escape) {
argvar = sub.var.PickValues(); argvar = sub.var.PickValues();
for(int i = l.arg.GetCount(); i < arg.GetCount(); i++) { for(int i = l.arg.GetCount(); i < arg.GetCount(); i++) {
@ -217,40 +203,28 @@ void Esc::Subscript(Esc::SRVal& r, Esc::SRVal _self, String id)
{ {
LTIMING("Subscript"); LTIMING("Subscript");
for(;;) { for(;;) {
TestLimit(); if(Char('[')) {
if(Char('[')) auto& ss = r.subscript.Add();
if(Char(']')) if(!IsChar(',') && !IsChar(':') && !IsChar(']'))
r.sbs.ArrayAdd(EscValue()); ss.i1 = GetExp(); // otherwise void EscValue
else { if(Char(',')) {
EscValue v1, v2; ss.slice = 1;
if(!IsChar(',') && !IsChar(':')) if(!IsChar(']'))
v1 = GetExp(); ss.i2 = GetExp(); // otherwise void EscValue
if(Char(',')) {
if(!IsChar(']'))
v2 = GetExp();
EscValue x;
x.ArrayAdd(v1);
x.ArrayAdd(v2);
r.sbs.ArrayAdd(x);
}
else
if(Char(':')) {
if(!IsChar(']'))
v2 = GetExp();
EscValue x;
x.ArrayAdd(v1);
x.ArrayAdd(v2);
x.ArrayAdd(EscValue());
r.sbs.ArrayAdd(x);
}
else
r.sbs.ArrayAdd(v1);
PassChar(']');
} }
else
if(Char(':')) {
ss.slice = 2;
if(!IsChar(']'))
ss.i2 = GetExp(); // otherwise void EscValue
}
PassChar(']');
}
else else
if(Char('.')) { if(Char('.')) {
LTIMING("ID");
_self = r; _self = r;
r.sbs.ArrayAdd(id = ReadId()); r.subscript.Add().i1 = id = ReadId();
} }
else else
if(Char('(')) { if(Char('(')) {
@ -294,10 +268,8 @@ void Esc::Subscript(Esc::SRVal& r)
void Esc::Term(SRVal& r) void Esc::Term(SRVal& r)
{ {
r.sbs = EscValue(); r.subscript.Clear();
op_limit--;
TestLimit();
if(Char2('0', 'x') || Char2('0', 'X')) { if(Char2('0', 'x') || Char2('0', 'X')) {
r = ReadNumber64(16); r = ReadNumber64(16);
return; return;
@ -354,7 +326,6 @@ void Esc::Term(SRVal& r)
if(Char('}')) if(Char('}'))
break; break;
PassChar(','); PassChar(',');
TestLimit();
} }
r = map; r = map;
Subscript(r); Subscript(r);
@ -369,7 +340,6 @@ void Esc::Term(SRVal& r)
if(Char(']')) if(Char(']'))
break; break;
PassChar(','); PassChar(',');
TestLimit();
} }
r = array; r = array;
Subscript(r); Subscript(r);
@ -418,7 +388,7 @@ void Esc::Term(SRVal& r)
else else
if(_self.lval) { if(_self.lval) {
r = _self; r = _self;
r.sbs.ArrayAdd(id); r.subscript.Add().i1 = id;
} }
else else
if(_global) if(_global)
@ -538,13 +508,12 @@ EscValue Esc::MulArray(EscValue array, EscValue times)
{ {
EscValue r; EscValue r;
r.SetEmptyArray(); r.SetEmptyArray();
for(int n = times.GetInt(); n > 0; n >>= 1) { int n = times.GetInt();
Limit(n);
for(; n > 0; n >>= 1) {
if(n & 1) if(n & 1)
if(!r.Append(array)) r.Append(array);
OutOfMemory(); array.Append(array);
if(!array.Append(array))
OutOfMemory();
TestLimit();
} }
return r; return r;
} }
@ -603,8 +572,8 @@ void Esc::Add(Esc::SRVal& r)
Mul(w); Mul(w);
EscValue b = Get(w); EscValue b = Get(w);
if(v.IsArray() && b.IsArray()) { if(v.IsArray() && b.IsArray()) {
if(!v.Replace(v.GetCount(), 0, b)) Limit(b.GetCount());
OutOfMemory(); v.Replace(v.GetCount(), 0, b);
r = v; r = v;
} }
else else
@ -640,8 +609,8 @@ void Esc::Shift(Esc::SRVal& r)
Add(w); Add(w);
EscValue b = Get(w); EscValue b = Get(w);
if(v.IsArray() && b.IsArray()) { if(v.IsArray() && b.IsArray()) {
if(!v.Replace(v.GetCount(), 0, b)) Limit(b.GetCount());
OutOfMemory(); v.Replace(v.GetCount(), 0, b);
Assign(r, v); Assign(r, v);
} }
else else
@ -844,8 +813,8 @@ void Esc::Assign(Esc::SRVal& r)
Cond(w); Cond(w);
EscValue b = Get(w); EscValue b = Get(w);
if(v.IsArray() && b.IsArray()) { if(v.IsArray() && b.IsArray()) {
if(!v.Replace(v.GetCount(), 0, b)) Limit(b.GetCount());
OutOfMemory(); v.Replace(v.GetCount(), 0, b);
Assign(r, v); Assign(r, v);
} }
else else
@ -1043,8 +1012,7 @@ void Esc::FinishSwitch()
void Esc::DoStatement() void Esc::DoStatement()
{ {
op_limit--; Limit();
TestLimit();
if(Id("if")) if(Id("if"))
if(PCond()) { if(PCond()) {
DoStatement(); DoStatement();

View file

@ -21,9 +21,6 @@ class EscValue : Moveable<EscValue> {
RefCount() { refcount = 1; } RefCount() { refcount = 1; }
}; };
int type;
mutable hash_t hash;
struct EscMap; struct EscMap;
struct EscArray; struct EscArray;
@ -35,6 +32,8 @@ class EscValue : Moveable<EscValue> {
EscLambda *lambda; EscLambda *lambda;
}; };
int type;
void Free(); void Free();
void Assign(const EscValue& s); void Assign(const EscValue& s);
@ -43,16 +42,9 @@ class EscValue : Moveable<EscValue> {
VectorMap<EscValue, EscValue>& CloneMap(); VectorMap<EscValue, EscValue>& CloneMap();
static int total;
static int max_total;
public: public:
static int GetTotalCount();
static void SetMaxTotalCount(int n);
static int GetMaxTotalCount();
bool IsVoid() const { return type == ESC_VOID; } bool IsVoid() const { return type == ESC_VOID; }
EscValue(); EscValue() { type = ESC_VOID; }
bool IsNumber() const { return findarg(type, ESC_DOUBLE, ESC_INT64) >= 0; } bool IsNumber() const { return findarg(type, ESC_DOUBLE, ESC_INT64) >= 0; }
double GetNumber() const; double GetNumber() const;
@ -60,19 +52,19 @@ public:
int64 GetInt64() const; int64 GetInt64() const;
bool IsInt() const; bool IsInt() const;
int GetInt() const; int GetInt() const;
EscValue(double n); EscValue(double n) { number = n; type = ESC_DOUBLE; }
EscValue(int64 n); EscValue(int64 n) { i64 = n; type = ESC_INT64; }
EscValue(int n); EscValue(int n) { i64 = n; type = ESC_INT64; }
bool IsArray() const { return type == ESC_ARRAY; } bool IsArray() const { return type == ESC_ARRAY; }
const Vector<EscValue>& GetArray() const; const Vector<EscValue>& GetArray() const;
EscValue ArrayGet(int i) const; EscValue ArrayGet(int i) const;
EscValue ArrayGet(int i, int n) const; EscValue ArrayGet(int i, int n) const;
bool ArraySet(int i, EscValue val); void ArraySet(int i, EscValue val);
bool Replace(int i, int n, EscValue a); void Replace(int i, int n, EscValue a);
void SetEmptyArray(); void SetEmptyArray();
void ArrayAdd(EscValue val); void ArrayAdd(EscValue val);
bool Append(EscValue a); void Append(EscValue a);
operator WString() const; operator WString() const;
operator String() const { return operator WString().ToString(); } operator String() const { return operator WString().ToString(); }
@ -116,14 +108,29 @@ public:
struct EscValue::EscArray : EscValue::RefCount { struct EscValue::EscArray : EscValue::RefCount {
Vector<EscValue> array; Vector<EscValue> array;
mutable hash_t cached_hash = 0;
void Retain() { AtomicInc(refcount); } void Retain() { AtomicInc(refcount); }
void Release() { if(AtomicDec(refcount) == 0) delete this; } void Release() { if(AtomicDec(refcount) == 0) delete this; }
}; };
inline
const Vector<EscValue>& EscValue::GetArray() const
{
ASSERT(IsArray());
return array->array;
}
inline
EscValue EscValue::ArrayGet(int i) const
{
return GetArray()[i];
}
struct EscValue::EscMap : EscValue::RefCount { struct EscValue::EscMap : EscValue::RefCount {
VectorMap<EscValue, EscValue> map; VectorMap<EscValue, EscValue> map;
int count; int count;
mutable hash_t cached_hash = 0;
void Retain() { AtomicInc(refcount); } void Retain() { AtomicInc(refcount); }
void Release() { if(AtomicDec(refcount) == 0) delete this; } void Release() { if(AtomicDec(refcount) == 0) delete this; }
@ -131,6 +138,19 @@ struct EscValue::EscMap : EscValue::RefCount {
EscMap() { count = 0; } EscMap() { count = 0; }
}; };
inline
const VectorMap<EscValue, EscValue>& EscValue::GetMap() const
{
ASSERT(IsMap());
return map->map;
}
inline
EscValue EscValue::MapGet(EscValue key) const
{
return GetMap().Get(key, EscValue());
}
struct EscHandle { struct EscHandle {
Atomic refcount; Atomic refcount;
@ -177,14 +197,20 @@ inline hash_t GetHashValue(const EscValue& v)
bool IsTrue(const EscValue& a); bool IsTrue(const EscValue& a);
void SkipBlock(CParser& p); void SkipBlock(CParser& p);
EscValue ReadLambda(CParser& p); EscValue ReadLambda(CParser& p, bool args = true, const char *alt_args = nullptr);
EscValue ReadLambda(const char *s); EscValue ReadLambda(const char *s);
struct Esc : public CParser { struct Esc : public CParser {
struct SRVal : Moveable<SRVal> { struct SRVal : Moveable<SRVal> {
EscValue *lval; EscValue *lval;
EscValue rval; EscValue rval;
EscValue sbs; struct Subscript : Moveable<Subscript> {
EscValue i1;
EscValue i2;
int slice = 0; // 0 - simple index, 1 - ',' slice, 2 - ':' slice
};
WithDeepCopy<Vector<Subscript>> subscript;
// EscValue sbs;
SRVal() { lval = NULL; } SRVal() { lval = NULL; }
SRVal(const EscValue& v) { lval = NULL; rval = v; } SRVal(const EscValue& v) { lval = NULL; rval = v; }
@ -196,26 +222,24 @@ struct Esc : public CParser {
ArrayMap<String, EscValue>& global; ArrayMap<String, EscValue>& global;
EscValue self; EscValue self;
ArrayMap<String, EscValue> var; VectorMap<String, EscValue> var;
int skipexp; int skipexp;
int loop; int loop;
bool no_break, no_return, no_continue; bool no_break, no_return, no_continue;
int& op_limit; int64& op_limit;
int r_stack_level; int r_stack_level;
EscValue return_value; EscValue return_value;
static int stack_level; static int stack_level;
void OutOfMemory(); void Limit(int64 count = 1);
void TestLimit();
double DoCompare(const EscValue& a, const EscValue& b, const char *op); double DoCompare(const EscValue& a, const EscValue& b, const char *op);
double DoCompare(const SRVal& a, const char *op); double DoCompare(const SRVal& a, const char *op);
String ReadName(); String ReadName();
EscValue ExecuteLambda(const String& id, EscValue lambda, SRVal self, Vector<SRVal>& arg); EscValue ExecuteLambda(const String& id, EscValue lambda, SRVal self, Vector<SRVal>& arg);
void Assign(EscValue& val, const Vector<EscValue>& sbs, int si, const EscValue& src); void Assign(EscValue& val, const Vector<SRVal::Subscript>& sbs, int si, const EscValue& src);
EscValue Get(const SRVal& val); EscValue Get(const SRVal& val);
void Assign(const SRVal& val, const EscValue& src); void Assign(const SRVal& val, const EscValue& src);
@ -256,7 +280,7 @@ struct Esc : public CParser {
void Run(); void Run();
Esc(ArrayMap<String, EscValue>& global, const char *s, int& oplimit, Esc(ArrayMap<String, EscValue>& global, const char *s, int64& oplimit,
const String& fn, int line = 1) const String& fn, int line = 1)
: CParser(s, fn, line), global(global), op_limit(oplimit) : CParser(s, fn, line), global(global), op_limit(oplimit)
{ r_stack_level = stack_level; skipexp = false; } { r_stack_level = stack_level; skipexp = false; }
@ -264,11 +288,11 @@ struct Esc : public CParser {
}; };
struct EscEscape { struct EscEscape {
Esc& esc; Esc& esc;
EscValue self; EscValue self;
Array<EscValue>& arg; Vector<EscValue>& arg;
EscValue ret_val; EscValue ret_val;
String id; String id;
EscValue& operator[](int i) { return arg[i]; } EscValue& operator[](int i) { return arg[i]; }
int GetCount() const { return arg.GetCount(); } int GetCount() const { return arg.GetCount(); }
@ -286,7 +310,7 @@ struct EscEscape {
double Number(int i); double Number(int i);
int Int(int i); int Int(int i);
EscEscape(Esc& esc, EscValue self, Array<EscValue>& arg) EscEscape(Esc& esc, EscValue self, Vector<EscValue>& arg)
: esc(esc), self(self), arg(arg) {} : esc(esc), self(self), arg(arg) {}
}; };
@ -307,13 +331,14 @@ void StdLib(ArrayMap<String, EscValue>& global);
void LambdaArgs(CParser& p, EscLambda& l); void LambdaArgs(CParser& p, EscLambda& l);
EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self, EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self,
const EscValue& lambda, Vector<EscValue>& arg, int oplimit = 50000); const EscValue& lambda, Vector<EscValue>& arg, int64 oplimit = 50000);
EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self, EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self,
const char *name, Vector<EscValue>& arg, int oplimit = 50000); const char *name, Vector<EscValue>& arg, int64 oplimit = 50000);
EscValue Execute(ArrayMap<String, EscValue>& global, const char *name, int oplimit = 50000); EscValue Execute(ArrayMap<String, EscValue>& global, const char *name, int64 oplimit = 50000);
EscValue Evaluatex(const char *expression, ArrayMap<String, EscValue>& global, int oplimit = 50000); EscValue Evaluatexl(const char *expression, ArrayMap<String, EscValue>& global, int64& oplimit);
EscValue Evaluate(const char *expression, ArrayMap<String, EscValue>& global, int oplimit = 50000); EscValue Evaluatex(const char *expression, ArrayMap<String, EscValue>& global, int64 oplimit = 50000);
EscValue Evaluate(const char *expression, ArrayMap<String, EscValue>& global, int64 oplimit = 50000);
EscValue EscFromStdValue(const Value& v); EscValue EscFromStdValue(const Value& v);
Value StdValueFromEsc(const EscValue& v); Value StdValueFromEsc(const EscValue& v);
@ -323,7 +348,7 @@ bool IsDate(const EscValue& v);
bool IsTime(const EscValue& v); bool IsTime(const EscValue& v);
String Expand(const String& doc, ArrayMap<String, EscValue>& global, String Expand(const String& doc, ArrayMap<String, EscValue>& global,
int oplimit = 50000, String (*format)(const Value& v) = StdFormat); int64 oplimit64 = 50000, String (*format)(const Value& v) = StdFormat);
} }

View file

@ -14,21 +14,10 @@ Vector<EscValue>& EscValue::CloneArray()
array->Release(); array->Release();
array = c; array = c;
} }
hash = 0; array->cached_hash = 0;
return array->array; return array->array;
} }
const Vector<EscValue>& EscValue::GetArray() const
{
ASSERT(IsArray());
return array->array;
}
EscValue EscValue::ArrayGet(int i) const
{
return GetArray()[i];
}
EscValue EscValue::ArrayGet(int i, int n) const EscValue EscValue::ArrayGet(int i, int n) const
{ {
LTIMING("ArrayGet"); LTIMING("ArrayGet");
@ -44,18 +33,13 @@ void EscValue::SetEmptyArray()
{ {
Free(); Free();
type = ESC_ARRAY; type = ESC_ARRAY;
hash = 0;
array = new EscArray; array = new EscArray;
} }
bool EscValue::ArraySet(int i, EscValue val) void EscValue::ArraySet(int i, EscValue val)
{ {
LTIMING("ArraySet"); LTIMING("ArraySet");
Vector<EscValue>& ta = CloneArray();
if(i > max_total || i - ta.GetCount() + total > max_total)
return false;
CloneArray().At(i) = val; CloneArray().At(i) = val;
return true;
} }
void EscValue::ArrayAdd(EscValue val) void EscValue::ArrayAdd(EscValue val)
@ -66,13 +50,11 @@ void EscValue::ArrayAdd(EscValue val)
CloneArray().Add(val); CloneArray().Add(val);
} }
bool EscValue::Replace(int i, int n, EscValue a) void EscValue::Replace(int i, int n, EscValue a)
{ {
LTIMING("Array Replace"); LTIMING("Array Replace");
ASSERT(i >= 0); ASSERT(i >= 0);
Vector<EscValue>& ta = CloneArray(); Vector<EscValue>& ta = CloneArray();
if(i > max_total || i + n > max_total || i + n - ta.GetCount() + total > max_total)
return false;
if(i > 0) if(i > 0)
ta.At(i - 1); ta.At(i - 1);
const Vector<EscValue>& sa = a.GetArray(); const Vector<EscValue>& sa = a.GetArray();
@ -83,14 +65,13 @@ bool EscValue::Replace(int i, int n, EscValue a)
ta.Remove(i, -q); ta.Remove(i, -q);
for(q = 0; q < sa.GetCount(); q++) for(q = 0; q < sa.GetCount(); q++)
ta[q + i] = sa[q]; ta[q + i] = sa[q];
return true;
} }
bool EscValue::Append(EscValue a) void EscValue::Append(EscValue a)
{ {
if(IsVoid()) if(IsVoid())
SetEmptyArray(); SetEmptyArray();
return Replace(GetCount(), 0, a); Replace(GetCount(), 0, a);
} }
EscValue::operator WString() const EscValue::operator WString() const
@ -112,57 +93,11 @@ EscValue::operator WString() const
void EscValue::InitString(const WString& s) void EscValue::InitString(const WString& s)
{ {
type = ESC_ARRAY; type = ESC_ARRAY;
array = new EscArray(); array = new EscArray;
hash = 0;
Vector<EscValue>& a = array->array; Vector<EscValue>& a = array->array;
a.SetCount(s.GetCount()); a.SetCount(s.GetCount());
for(int i = 0; i < s.GetCount(); i++) for(int i = 0; i < s.GetCount(); i++)
a[i] = (int64)s[i]; a[i] = (int64)s[i];
total++;
}
int EscValue::GetTotalCount()
{
return total;
}
void EscValue::SetMaxTotalCount(int n)
{
max_total = n;
}
int EscValue::GetMaxTotalCount()
{
return max_total;
}
EscValue::EscValue()
{
type = ESC_VOID; hash = 0; total++;
}
EscValue::EscValue(double n)
{
number = n;
type = ESC_DOUBLE;
hash = 0;
total++;
}
EscValue::EscValue(int64 n)
{
i64 = n;
type = ESC_INT64;
hash = 0;
total++;
}
EscValue::EscValue(int n)
{
i64 = n;
type = ESC_INT64;
hash = 0;
total++;
} }
} }

View file

@ -14,13 +14,7 @@ VectorMap<EscValue, EscValue>& EscValue::CloneMap()
map->Release(); map->Release();
map = c; map = c;
} }
hash = 0; map->cached_hash = 0;
return map->map;
}
const VectorMap<EscValue, EscValue>& EscValue::GetMap() const
{
ASSERT(IsMap());
return map->map; return map->map;
} }
@ -28,16 +22,9 @@ void EscValue::SetEmptyMap()
{ {
Free(); Free();
type = ESC_MAP; type = ESC_MAP;
hash = 0;
map = new EscMap; map = new EscMap;
} }
EscValue EscValue::MapGet(EscValue key) const
{
LTIMING("MapGet");
return GetMap().Get(key, EscValue());
}
void EscValue::MapSet(EscValue key, EscValue value) void EscValue::MapSet(EscValue key, EscValue value)
{ {
LTIMING("MapSet"); LTIMING("MapSet");

View file

@ -47,11 +47,17 @@ void LambdaArgs(CParser& p, EscLambda& l)
l.arg.Shrink(); l.arg.Shrink();
} }
EscValue ReadLambda(CParser& p) EscValue ReadLambda(CParser& p, bool args, const char *alt_args)
{ {
EscValue lambda; EscValue lambda;
EscLambda& l = lambda.CreateLambda(); EscLambda& l = lambda.CreateLambda();
LambdaArgs(p, l); if(args)
LambdaArgs(p, l);
else
if(alt_args) {
CParser p(alt_args);
LambdaArgs(p, l);
}
const char *t = p.GetPtr(); const char *t = p.GetPtr();
l.filename = p.GetFileName(); l.filename = p.GetFileName();
l.line = p.GetLine(); l.line = p.GetLine();
@ -169,7 +175,7 @@ void Scan(ArrayMap<String, EscValue>& global, const char *file, const char *file
} }
EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self, EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self,
const EscValue& lambda, Vector<EscValue>& arg, int op_limit) const EscValue& lambda, Vector<EscValue>& arg, int64 op_limit)
{ {
const EscLambda& l = lambda.GetLambda(); const EscLambda& l = lambda.GetLambda();
if(arg.GetCount() != l.arg.GetCount()) { if(arg.GetCount() != l.arg.GetCount()) {
@ -194,7 +200,7 @@ EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self,
} }
EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self, EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self,
const char *name, Vector<EscValue>& arg, int op_limit) const char *name, Vector<EscValue>& arg, int64 op_limit)
{ {
if(!self->IsMap()) if(!self->IsMap())
return EscValue(); return EscValue();
@ -205,7 +211,7 @@ EscValue Execute(ArrayMap<String, EscValue>& global, EscValue *self,
return EscValue(); return EscValue();
} }
EscValue Execute(ArrayMap<String, EscValue>& global, const char *name, int op_limit) EscValue Execute(ArrayMap<String, EscValue>& global, const char *name, int64 op_limit)
{ {
int ii = global.Find(String(name)); int ii = global.Find(String(name));
Vector<EscValue> arg; Vector<EscValue> arg;
@ -214,7 +220,7 @@ EscValue Execute(ArrayMap<String, EscValue>& global, const char *name, int op_li
return EscValue(); return EscValue();
} }
EscValue Evaluatex(const char *expression, ArrayMap<String, EscValue>& global, int oplimit) EscValue Evaluatexl(const char *expression, ArrayMap<String, EscValue>& global, int64& oplimit)
{ {
Esc sub(global, expression, oplimit, "", 0); Esc sub(global, expression, oplimit, "", 0);
for(int i = 0; i < global.GetCount(); i++) for(int i = 0; i < global.GetCount(); i++)
@ -226,7 +232,12 @@ EscValue Evaluatex(const char *expression, ArrayMap<String, EscValue>& global, i
return v; return v;
} }
EscValue Evaluate(const char *expression, ArrayMap<String, EscValue>& global, int oplimit) EscValue Evaluatex(const char *expression, ArrayMap<String, EscValue>& global, int64 oplimit)
{
return Evaluatexl(expression, global, oplimit);
}
EscValue Evaluate(const char *expression, ArrayMap<String, EscValue>& global, int64 oplimit)
{ {
try { try {
return Evaluatex(expression, global, oplimit); return Evaluatex(expression, global, oplimit);
@ -236,7 +247,7 @@ EscValue Evaluate(const char *expression, ArrayMap<String, EscValue>& global, in
} }
String Expand(const String& doc, ArrayMap<String, EscValue>& global, String Expand(const String& doc, ArrayMap<String, EscValue>& global,
int oplimit, String (*format)(const Value& v)) int64 oplimit, String (*format)(const Value& v))
{ {
String out; String out;
const char *term = doc; const char *term = doc;

View file

@ -1,6 +1,5 @@
#include <Esc/Esc.h> #include <Esc/Esc.h>
namespace Upp { namespace Upp {
#define LTIMING(x) // RTIMING(x) #define LTIMING(x) // RTIMING(x)
@ -19,9 +18,6 @@ String EscTypeName(int sv_type)
} }
} }
int EscValue::total;
int EscValue::max_total = 1000000;
void EscValue::Free() void EscValue::Free()
{ {
LTIMING("Free"); LTIMING("Free");
@ -32,13 +28,11 @@ void EscValue::Free()
if(type == ESC_LAMBDA) if(type == ESC_LAMBDA)
lambda->Release(); lambda->Release();
type = ESC_VOID; type = ESC_VOID;
hash = 0;
} }
EscValue::~EscValue() EscValue::~EscValue()
{ {
LTIMING("~EscValue"); LTIMING("~EscValue");
total--;
Free(); Free();
} }
@ -46,7 +40,6 @@ void EscValue::Assign(const EscValue& s)
{ {
LTIMING("Assign"); LTIMING("Assign");
type = s.type; type = s.type;
hash = s.hash;
switch(type) { switch(type) {
case ESC_ARRAY: case ESC_ARRAY:
array = s.array; array = s.array;
@ -81,7 +74,6 @@ EscValue::EscValue(const EscValue& s)
{ {
LTIMING("Sval(Sval)"); LTIMING("Sval(Sval)");
Assign(s); Assign(s);
total++;
} }
EscLambda& EscValue::CreateLambda() EscLambda& EscValue::CreateLambda()
@ -89,7 +81,6 @@ EscLambda& EscValue::CreateLambda()
Free(); Free();
lambda = new EscLambda; lambda = new EscLambda;
type = ESC_LAMBDA; type = ESC_LAMBDA;
hash = 0;
return *lambda; return *lambda;
} }
@ -115,34 +106,33 @@ int EscValue::GetCount() const
hash_t EscValue::GetHashValue() const hash_t EscValue::GetHashValue() const
{ {
LTIMING("GetHashValue"); LTIMING("GetHashValue");
if(hash == 0) { switch(type) {
switch(type) { case ESC_VOID:
case ESC_VOID: return 1;
hash = 1; case ESC_DOUBLE:
break; return Upp::GetHashValue(number);
case ESC_DOUBLE: case ESC_INT64:
hash = UPP::GetHashValue(number) | 0x80000; return Upp::GetHashValue(i64);
break; case ESC_ARRAY:
case ESC_INT64: if(!array->cached_hash) {
hash = UPP::GetHashValue(i64) | 0x80000; CombineHash h;
break;
case ESC_ARRAY:
for(int i = 0; i < array->array.GetCount(); i++) for(int i = 0; i < array->array.GetCount(); i++)
hash = hash ^ array->array[i].GetHashValue(); h << array->array[i].GetHashValue();
hash |= 0x40000; array->cached_hash = h | 0x4000000;
break;
case ESC_MAP:
for(int i = 0; i < map->map.GetCount(); i++)
if(!map->map[i].IsVoid())
hash ^= map->map.GetKey(i).GetHashValue() ^ map->map[i].GetHashValue();
hash |= 0x8000000;
break;
case ESC_LAMBDA:
hash = UPP::GetHashValue(lambda->code) | 0x4000000;
break;
} }
return array->cached_hash;
case ESC_MAP:
if(!map->cached_hash) {
CombineHash h;
for(int i = 0; i < map->map.GetCount(); i++)
h << map->map.GetKey(i).GetHashValue() << map->map[i].GetHashValue();
map->cached_hash = h | 0x4000000;
}
return map->cached_hash;
case ESC_LAMBDA:
return Upp::GetHashValue(lambda->code);
} }
return hash; return 0;
} }
template <class T> template <class T>

View file

@ -173,7 +173,7 @@ void Ide::BTabs()
btabs.Add(IdeImg::errors, "Errors"); btabs.Add(IdeImg::errors, "Errors");
btabs.Add(IdeImg::calc, "Calculator"); btabs.Add(IdeImg::calc, "Calculator");
if(bottomctrl) if(bottomctrl)
btabs.Add(IdeImg::debug, "Debug"); btabs.Add(IdeCommonImg::Debugger, "Debug");
for(int i = 0; i < __countof(ffound); i++) { for(int i = 0; i < __countof(ffound); i++) {
if(!ffound[i]) if(!ffound[i])
break; break;

View file

@ -104,6 +104,9 @@ void IdeFileIcon0(bool dir, const String& filename, Image& img)
if(ext == ".usc") if(ext == ".usc")
img = IdeCommonImg::Script(); img = IdeCommonImg::Script();
else else
if(ext == ".dbg")
img = IdeCommonImg::Debugger();
else
if(ext == ".lng" || ext == ".lngj" || ext == ".t" || ext == ".jt") if(ext == ".lng" || ext == ".lngj" || ext == ".t" || ext == ".jt")
img = IdeCommonImg::Language(); img = IdeCommonImg::Language();
else else
@ -208,8 +211,8 @@ void SourceFs(FileSel& fs)
fs.Type("Python files (*.py *.pyc *.pyd *.pyo)", "*.py *.pyc *.pyd *.pyo"); fs.Type("Python files (*.py *.pyc *.pyd *.pyo)", "*.py *.pyc *.pyd *.pyo");
fs.Type("Web development files (*.html *.js *.css *.witz)", "*.html *.js *.css *.witz"); fs.Type("Web development files (*.html *.js *.css *.witz)", "*.html *.js *.css *.witz");
fs.Type("Xml files (*.xml *.xsd)", "*.xml *.xsd"); fs.Type("Xml files (*.xml *.xsd)", "*.xml *.xsd");
fs.Type("Other special files (*.sch *.usc *.rc *.brc *.upt)", "*.sch *.usc *.rc *.brc *.upt"); fs.Type("Other special files (*.sch *.usc *.dbg *.rc *.brc *.upt)", "*.sch *.usc *.dbg *.rc *.brc *.upt");
String mask = "*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.py *.pyc *.pyd *.pyo *.iml *.java *.json *.lng *.sch *.usc *.rc *.brc *.upt *.html *.js *.css *.witz *.xml *.xsd *.qtf"; String mask = "*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.py *.pyc *.pyd *.pyo *.iml *.java *.json *.lng *.sch *.usc *.dbg *.rc *.brc *.upt *.html *.js *.css *.witz *.xml *.xsd *.qtf";
fs.Type("All source files (" + mask + ")", mask); fs.Type("All source files (" + mask + ")", mask);
IdeFs(fs); IdeFs(fs);
} }

View file

@ -51,6 +51,7 @@ IMAGE_ID(Log__DARK)
IMAGE_ID(adsfa) IMAGE_ID(adsfa)
IMAGE_ID(Python__UHD) IMAGE_ID(Python__UHD)
IMAGE_ID(Python) IMAGE_ID(Python)
IMAGE_ID(Debugger__UHD)
IMAGE_ID(Script__UHD) IMAGE_ID(Script__UHD)
IMAGE_ID(Script) IMAGE_ID(Script)
IMAGE_ID(Language__UHD) IMAGE_ID(Language__UHD)
@ -83,6 +84,7 @@ IMAGE_ID(JsonString)
IMAGE_ID(JsonString__UHD) IMAGE_ID(JsonString__UHD)
IMAGE_ID(JsonStruct) IMAGE_ID(JsonStruct)
IMAGE_ID(JsonStruct__UHD) IMAGE_ID(JsonStruct__UHD)
IMAGE_ID(Debugger)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,150,59,142,226,64,16,64,45,16,100,72,67,66,140,136,54,65,226,20,136,24,105,242,185,8,23,33,134,136) IMAGE_DATA(120,156,237,150,59,142,226,64,16,64,45,16,100,72,67,66,140,136,54,65,226,20,136,24,105,242,185,8,23,33,134,136)
@ -1847,110 +1849,192 @@ IMAGE_DATA(164,213,20,61,189,44,33,120,159,3,188,115,225,246,164,15,251,171,189,
IMAGE_END_DATA(1856, 1) IMAGE_END_DATA(1856, 1)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,154,61,104,20,65,20,199,135,20,54,54,86,86,65,3,105,44,180,177,10,136,228,42,9,6,84,208,69,131) IMAGE_DATA(120,156,237,156,121,108,29,87,21,198,143,248,151,127,138,0,177,168,32,64,128,68,89,196,90,54,177,137,2,2,33,144)
IMAGE_DATA(205,33,10,166,17,82,37,160,112,1,139,32,146,64,180,16,11,57,193,15,112,209,194,82,44,78,20,67,108,195,89,216) IMAGE_DATA(64,160,128,160,68,162,69,32,42,4,72,32,80,11,4,4,20,74,23,74,105,129,148,38,77,155,165,169,147,56,142,155)
IMAGE_DATA(94,33,8,218,88,4,162,144,113,222,236,205,222,236,236,155,157,79,207,83,247,29,127,46,217,221,247,126,111,222,188,157) IMAGE_DATA(180,73,92,147,164,89,234,102,105,147,184,78,154,205,77,98,187,100,169,179,212,100,105,4,135,251,189,57,199,62,190,153)
IMAGE_DATA(157,220,101,108,31,217,71,170,108,188,69,169,170,74,7,197,87,152,79,140,24,254,58,217,142,65,23,203,151,43,251,211) IMAGE_DATA(247,60,219,243,27,79,239,39,125,210,120,230,222,185,115,127,231,204,185,119,158,148,188,232,18,186,132,26,233,210,95,49)
IMAGE_DATA(93,66,65,46,190,242,181,194,95,142,225,234,103,242,55,249,85,249,219,248,85,213,192,199,87,53,151,107,109,252,93,99) IMAGE_DATA(251,110,216,193,235,171,202,114,143,34,250,215,115,210,57,212,187,87,214,113,109,127,254,31,49,156,166,175,109,171,253,237)
IMAGE_DATA(149,252,132,13,201,95,55,6,236,186,153,9,50,97,27,179,182,209,52,88,205,207,51,173,51,61,235,43,149,126,94,99) IMAGE_DATA(61,210,246,155,168,255,68,253,26,245,79,210,175,17,131,44,125,125,165,105,155,164,127,218,123,93,212,79,53,73,253,235)
IMAGE_DATA(154,99,58,24,153,123,128,233,49,211,15,146,144,93,70,204,212,35,208,106,148,191,139,99,112,126,156,137,144,79,76,55) IMAGE_DATA(205,33,174,221,101,211,105,122,210,123,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,77,138,102,79)
IMAGE_DATA(35,176,103,152,190,147,133,62,203,246,213,227,57,252,100,58,18,192,62,202,180,205,199,229,194,30,240,65,135,3,248,91) IMAGE_DATA(155,198,112,81,237,130,146,73,121,166,229,31,226,144,79,62,199,172,252,67,28,210,171,30,195,60,252,67,12,146,169,17)
IMAGE_DATA(100,213,131,13,175,148,179,183,3,216,199,200,148,39,27,94,11,156,255,58,128,191,82,57,246,148,47,114,192,248,200,180) IMAGE_DATA(191,188,252,67,12,38,86,224,223,58,77,196,174,8,254,33,6,245,21,248,183,86,129,127,107,149,144,93,67,7,254,217)
IMAGE_DATA(201,122,110,135,247,222,70,223,39,225,231,87,3,248,143,42,231,61,235,241,21,197,231,4,211,75,94,183,44,183,243,1) IMAGE_DATA(149,132,249,250,131,196,221,7,136,87,236,37,94,210,71,60,111,7,241,157,91,137,111,125,148,248,250,71,146,197,162,149)
IMAGE_DATA(252,167,149,252,172,190,31,152,38,17,223,9,166,227,132,24,118,127,213,118,215,216,247,11,121,143,221,14,100,97,118,206) IMAGE_DATA(115,44,179,234,113,239,59,22,121,231,17,226,109,67,196,27,15,71,49,88,190,135,184,237,73,226,57,79,16,223,177,153)
IMAGE_DATA(170,247,123,253,53,135,144,47,76,167,35,242,247,176,57,254,234,116,191,101,61,177,28,49,135,121,62,54,219,28,122,121) IMAGE_DATA(248,198,13,196,191,94,67,252,211,213,196,223,95,94,63,14,173,157,101,121,21,199,125,255,48,241,161,147,145,113,140,115)
IMAGE_DATA(14,23,35,230,176,206,115,232,89,230,177,193,249,159,9,212,47,158,93,98,227,250,102,189,22,78,69,175,1,24,244,247) IMAGE_DATA(136,1,222,131,85,251,136,151,238,138,222,129,153,91,136,111,217,68,252,219,117,196,63,239,34,254,193,10,226,111,119,16)
IMAGE_DATA(13,171,60,178,126,188,23,192,186,197,244,138,192,61,128,231,241,220,98,109,76,3,248,219,82,63,191,97,154,85,206,95) IMAGE_DATA(79,107,187,56,14,173,157,101,121,165,236,123,6,162,92,7,239,161,231,136,159,61,19,25,199,56,135,107,104,131,119,160)
IMAGE_DATA(175,236,203,108,93,120,230,201,62,90,120,238,172,230,247,247,14,129,117,30,214,251,113,222,143,166,250,63,244,228,95,113) IMAGE_DATA(243,41,226,251,118,18,223,181,45,170,65,191,119,53,232,218,135,137,127,248,32,241,85,203,136,191,182,136,248,11,11,136)
IMAGE_DATA(186,231,176,123,48,91,251,47,121,242,31,120,237,55,138,181,135,181,112,175,39,255,173,245,189,142,247,29,232,172,39,27) IMAGE_DATA(63,57,103,44,6,173,158,103,137,197,107,250,137,55,15,70,121,142,156,7,247,179,23,34,227,24,231,112,13,109,208,22)
IMAGE_DATA(236,30,159,115,151,28,6,207,128,31,76,87,3,216,96,80,183,37,2,123,47,232,195,85,105,111,43,120,27,253,223,225) IMAGE_DATA(53,104,97,47,241,44,199,255,182,158,104,13,184,206,241,255,209,67,196,87,59,254,95,95,76,252,69,225,255,129,127,142)
IMAGE_DATA(220,84,206,125,65,194,246,122,152,193,62,30,214,177,59,68,191,223,191,192,180,63,50,183,182,127,220,198,76,159,12,142) IMAGE_DATA(190,11,83,94,51,102,204,96,184,192,91,214,88,54,155,255,219,239,40,54,6,77,224,144,104,60,235,130,110,93,171,37)
IMAGE_DATA(128,37,132,228,11,138,78,122,95,248,3,160,91,177,104,84,251,23,125,221,249,234,3,137,246,199,99,107,229,133,213,45) IMAGE_DATA(168,41,205,170,63,239,191,147,248,109,5,242,111,34,139,84,99,22,52,110,109,45,197,154,138,181,21,107,108,81,235,239)
IMAGE_DATA(70,121,236,110,49,178,250,165,74,140,174,113,220,230,24,246,254,131,24,46,243,134,201,62,127,125,191,116,173,234,103,234) IMAGE_DATA(231,231,19,127,226,110,226,203,29,255,183,222,94,12,255,38,114,104,197,184,181,61,36,246,146,168,39,200,107,236,49,193)
IMAGE_DATA(87,151,30,24,154,157,172,63,25,28,61,107,183,155,180,211,105,68,17,196,114,229,131,31,165,36,138,32,86,205,255,187) IMAGE_DATA(25,185,158,117,255,57,125,41,241,87,238,39,254,220,60,226,143,205,38,126,239,76,226,183,252,149,248,181,183,228,143,65)
IMAGE_DATA(249,205,229,38,109,44,55,80,117,58,29,92,173,22,237,52,26,37,181,155,230,126,84,249,192,33,203,4,149,214,90,252) IMAGE_DATA(213,248,227,27,10,121,140,111,42,124,91,129,47,114,28,117,6,181,30,198,241,68,223,95,191,232,38,254,241,74,226,239)
IMAGE_DATA(123,166,146,32,7,19,191,197,124,101,13,155,223,104,116,10,110,53,191,200,111,54,219,250,190,115,84,187,221,46,229,99) IMAGE_DATA(118,18,127,115,9,241,151,22,18,127,230,94,226,143,204,34,126,247,223,137,223,124,27,241,165,55,5,254,158,248,246,199)
IMAGE_DATA(226,195,249,233,105,253,208,93,12,114,240,225,195,241,24,57,132,240,99,228,16,202,15,205,1,227,67,127,1,35,151,129) IMAGE_DATA(162,53,116,254,206,136,43,114,27,245,5,172,177,206,194,56,198,57,92,67,27,180,69,31,244,69,238,255,102,45,241,207)
IMAGE_DATA(31,146,3,198,47,213,195,130,239,155,67,76,190,79,14,209,249,164,131,159,208,200,106,61,178,173,191,35,219,150,95,122) IMAGE_DATA(164,246,92,213,17,213,126,172,189,87,220,67,252,65,183,246,190,227,111,196,111,188,149,248,85,55,6,254,158,248,230,141)
IMAGE_DATA(254,98,253,231,193,182,229,151,234,161,222,127,158,236,24,252,16,118,40,63,148,29,194,143,193,246,229,243,231,47,178,183) IMAGE_DATA(81,13,1,79,228,52,234,10,106,59,214,87,240,134,113,140,115,184,134,54,104,139,62,232,251,187,117,209,190,7,185,255)
IMAGE_DATA(243,145,205,126,176,182,225,152,250,201,32,181,148,206,232,187,173,132,206,46,209,252,93,109,62,147,63,248,204,46,210,236) IMAGE_DATA(189,7,136,191,213,62,86,123,62,238,106,255,251,102,70,181,255,117,127,38,126,249,13,213,227,159,115,252,218,190,5,28)
IMAGE_DATA(125,169,252,240,248,221,124,229,58,215,90,20,242,4,254,202,147,180,144,19,252,46,198,134,250,75,124,184,118,243,227,169) IMAGE_DATA(145,203,168,39,168,233,96,140,189,13,246,151,48,142,113,14,215,208,6,109,209,7,125,127,233,234,206,79,86,17,95,35)
IMAGE_DATA(204,103,145,22,127,215,248,203,2,222,252,90,55,231,169,249,152,106,161,228,233,92,11,49,94,17,235,221,150,126,83,128) IMAGE_DATA(235,174,230,254,167,92,238,127,248,46,226,119,105,237,185,153,248,37,127,200,206,191,73,243,47,108,252,76,207,112,58,226)
IMAGE_DATA(249,139,92,7,181,212,199,48,213,66,140,101,126,205,218,31,173,197,252,229,46,186,168,218,248,175,156,97,227,57,148,120) IMAGE_DATA(129,28,70,29,65,45,71,94,99,79,131,125,229,44,49,142,113,14,215,208,6,109,209,7,236,177,230,162,238,96,207,255)
IMAGE_DATA(251,235,124,109,252,173,52,162,95,19,136,175,6,124,62,78,77,146,132,208,52,37,52,113,255,88,62,247,101,21,246,137) IMAGE_DATA(13,87,247,191,236,234,254,103,231,70,185,127,185,236,59,223,224,106,207,43,255,36,236,79,167,231,223,148,185,103,80,146)
IMAGE_DATA(145,251,10,165,169,113,162,98,242,11,49,60,124,243,24,196,191,254,181,253,165,86,255,3,177,100,115,115,115,244,79,171) IMAGE_DATA(231,72,245,44,35,17,19,212,15,212,112,172,163,96,139,253,36,56,227,187,10,198,49,206,225,26,218,160,45,250,32,239)
IMAGE_DATA(184,148,12,79,53,191,230,215,252,154,95,56,62,57,9,255,8,149,109,102,170,252,175,93,27,92,247,254,125,118,172,106) IMAGE_DATA(193,254,59,110,205,189,82,234,14,246,156,216,243,127,200,229,254,59,37,247,95,227,114,255,165,127,20,254,35,201,249,23)
IMAGE_DATA(7,10,113,197,117,166,241,223,191,95,140,171,10,142,139,152,234,185,153,153,93,46,245,122,49,46,41,166,150,47,198,6) IMAGE_DATA(62,223,2,84,232,51,157,141,152,160,118,99,253,196,30,6,251,72,236,229,81,91,174,23,227,24,231,112,13,109,208,22)
IMAGE_DATA(239,24,31,226,195,57,149,35,234,167,243,131,152,146,143,150,47,226,99,227,131,218,128,176,113,10,6,156,215,229,45,197) IMAGE_DATA(125,174,145,188,7,251,175,182,69,223,91,168,59,216,243,188,231,31,196,151,185,186,255,122,87,247,95,225,114,255,197,215)
IMAGE_DATA(172,228,139,26,99,231,228,28,177,121,209,245,140,13,31,98,136,184,112,173,60,22,56,46,230,15,227,235,106,166,233,13) IMAGE_DATA(210,49,140,37,99,78,238,60,155,160,220,207,119,222,113,128,207,69,49,64,30,131,41,234,9,190,163,240,45,123,157,24)
IMAGE_DATA(148,175,50,196,245,114,94,88,110,186,156,212,185,145,206,163,124,121,78,197,125,32,120,106,159,169,124,236,24,22,75,199) IMAGE_DATA(199,56,135,107,104,131,182,88,107,81,239,81,115,144,247,96,255,105,183,223,252,232,236,104,205,197,239,13,216,243,188,250)
IMAGE_DATA(135,49,170,61,37,122,214,196,18,115,175,187,103,145,190,44,241,161,54,106,253,128,131,205,169,26,79,220,179,42,31,174) IMAGE_DATA(38,83,247,207,201,152,231,235,199,160,236,220,173,50,63,235,243,110,254,23,196,207,143,197,0,123,119,124,63,129,47,126)
IMAGE_DATA(209,212,165,192,135,49,202,107,149,28,23,227,8,137,218,232,214,61,113,47,33,53,25,201,245,191,230,215,252,33,243,255) IMAGE_DATA(71,192,111,57,48,142,113,14,215,208,6,123,76,236,115,176,214,162,222,163,230,32,239,193,30,53,31,251,205,55,253,37)
IMAGE_DATA(232,223,94,255,185,253,2,17,199,118,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) IMAGE_DATA(170,59,47,187,193,176,247,199,45,106,62,45,84,210,103,30,125,238,243,50,255,255,138,47,72,62,158,29,251,189,30,121)
IMAGE_END_DATA(1280, 7) IMAGE_DATA(141,223,112,174,22,227,24,231,240,93,139,111,43,112,71,206,99,159,131,181,22,245,30,53,7,121,15,246,168,249,230,91)
IMAGE_DATA(55,186,119,189,113,179,204,161,132,42,132,255,200,232,254,164,102,252,134,9,131,55,126,207,1,115,124,215,130,59,246,247)
IMAGE_DATA(200,121,236,115,176,214,162,222,163,230,32,239,181,127,237,94,35,141,249,79,117,238,86,19,206,225,76,157,58,128,115,103)
IMAGE_DATA(12,255,19,206,207,26,142,20,213,24,48,199,111,10,87,8,119,236,239,81,111,176,207,177,109,107,125,79,24,254,19,140)
IMAGE_DATA(91,5,246,86,117,231,241,31,201,69,187,14,158,147,115,184,246,156,243,41,195,255,152,243,191,157,135,60,190,113,30,146)
IMAGE_DATA(182,199,12,255,83,114,207,9,198,173,10,119,171,139,230,114,218,176,56,35,115,63,43,199,202,30,109,78,58,15,59,31)
IMAGE_DATA(119,62,106,248,31,118,62,232,220,239,188,95,220,47,231,14,27,254,71,165,239,176,220,43,225,184,85,98,111,85,155,203)
IMAGE_DATA(9,143,197,136,103,203,222,230,254,17,231,103,156,7,13,255,3,206,251,196,7,12,255,65,105,123,196,123,7,82,140,91)
IMAGE_DATA(37,238,227,100,89,156,146,57,91,159,138,97,111,115,127,192,249,144,243,211,49,252,159,150,107,3,222,59,224,199,32,201)
IMAGE_DATA(184,85,148,101,49,44,115,85,38,39,205,223,195,117,216,219,220,215,218,179,87,236,215,160,193,58,49,72,51,110,213,100)
IMAGE_DATA(89,28,151,185,42,147,97,243,247,113,143,189,95,119,108,238,239,17,219,119,192,175,67,89,199,173,154,52,31,143,24,30)
IMAGE_DATA(113,62,42,109,252,188,183,117,71,115,255,41,177,190,3,182,14,249,239,65,218,113,171,36,203,66,115,82,153,88,235,249)
IMAGE_DATA(103,234,176,183,117,7,220,119,137,109,12,250,235,196,32,203,184,85,145,214,132,1,195,67,153,88,15,153,249,15,208,248)
IMAGE_DATA(154,99,217,163,230,236,118,238,19,239,150,115,126,12,242,142,91,21,41,11,205,73,101,162,92,6,205,223,122,253,16,141)
IMAGE_DATA(175,247,62,123,228,253,147,226,93,49,49,176,235,65,214,113,171,162,3,94,78,42,147,56,31,164,241,57,223,136,253,78)
IMAGE_DATA(113,163,24,228,25,183,68,74,243,219,224,69,223,144,251,12,15,203,36,206,253,166,29,250,236,163,177,122,111,217,247,58)
IMAGE_DATA(239,16,247,122,49,208,245,32,231,184,185,230,92,18,246,181,103,217,99,120,40,19,203,197,206,123,191,105,167,57,175,107)
IMAGE_DATA(109,159,201,123,112,127,66,188,195,188,7,125,52,182,38,231,28,55,247,188,203,194,127,183,225,161,76,246,122,108,236,57)
IMAGE_DATA(109,103,115,190,79,242,220,178,127,92,108,99,208,107,98,144,115,220,202,240,87,30,150,73,35,239,54,237,53,231,149,253)
IMAGE_DATA(118,195,126,171,88,99,176,221,196,192,190,11,25,199,173,12,255,94,143,137,229,226,91,175,43,115,155,243,219,133,245,54)
IMAGE_DATA(225,190,89,188,85,206,61,46,109,236,187,144,99,220,178,240,207,27,131,209,117,210,50,81,46,214,246,154,50,87,238,54)
IMAGE_DATA(231,183,8,247,199,196,155,229,156,255,46,228,28,183,44,236,115,203,50,241,185,88,91,222,150,185,205,249,45,194,188,199)
IMAGE_DATA(249,81,113,143,156,211,24,108,163,241,107,67,214,113,171,162,56,38,141,236,51,247,115,30,204,55,57,111,20,111,146,115)
IMAGE_DATA(254,187,144,119,220,170,200,103,162,92,226,108,219,248,117,70,115,30,188,55,56,175,23,111,48,49,232,161,248,186,148,101)
IMAGE_DATA(220,42,201,50,81,46,113,214,235,62,115,155,243,224,141,127,107,189,78,252,136,156,179,239,66,92,44,210,140,91,53,89)
IMAGE_DATA(38,61,30,27,203,90,29,199,92,115,94,217,175,17,107,12,214,155,118,113,177,72,51,110,213,164,76,148,75,35,107,59)
IMAGE_DATA(159,185,114,95,43,220,187,197,107,228,220,58,211,206,143,69,218,113,171,38,101,98,185,212,179,182,139,99,14,255,75,184)
IMAGE_DATA(119,137,187,229,156,94,143,139,69,218,113,43,164,209,61,177,214,107,203,198,183,109,179,214,112,87,230,15,139,193,125,181)
IMAGE_DATA(184,203,156,183,177,208,254,41,199,45,229,30,62,131,98,191,75,52,71,45,31,203,217,230,184,50,87,238,150,249,42,231)
IMAGE_DATA(149,226,85,49,177,208,126,122,159,132,227,150,254,91,42,161,234,126,23,118,83,50,219,60,87,238,202,252,33,241,131,98)
IMAGE_DATA(253,219,198,66,251,217,247,34,129,167,196,247,108,3,37,250,54,239,162,198,94,77,241,121,174,204,87,56,227,255,151,121)
IMAGE_DATA(64,188,92,206,105,44,226,222,139,213,19,140,217,149,236,247,134,86,243,109,164,196,191,141,40,155,56,175,164,241,188,109)
IMAGE_DATA(158,91,238,157,206,203,196,157,49,113,240,223,11,27,147,58,227,78,201,223,118,68,169,159,221,242,241,57,91,222,126,174)
IMAGE_DATA(43,247,14,231,165,226,14,47,14,54,22,43,98,238,27,55,110,214,121,180,88,185,158,119,185,112,138,179,229,109,115,93)
IMAGE_DATA(185,183,59,47,17,183,123,113,88,102,250,217,120,212,115,209,243,154,36,21,242,140,157,134,149,207,90,121,91,230,202,125)
IMAGE_DATA(177,243,34,241,98,19,7,27,139,14,239,94,113,99,53,123,126,77,80,210,231,74,252,108,29,30,231,165,30,111,203,92)
IMAGE_DATA(185,227,255,21,187,95,220,102,226,224,199,162,221,187,167,29,171,21,115,205,169,166,61,139,173,39,75,98,120,251,204,23)
IMAGE_DATA(58,223,39,94,24,19,11,63,30,214,237,201,216,79,202,188,11,126,142,92,55,95,228,177,110,107,192,124,129,243,124,241)
IMAGE_DATA(130,6,177,80,219,123,151,117,254,57,199,47,108,16,101,237,243,182,204,231,57,207,21,207,243,98,225,199,67,99,82,144)
IMAGE_DATA(202,200,191,41,131,249,188,149,249,189,226,123,196,250,247,92,211,206,198,163,9,122,65,240,183,178,188,231,136,239,22,235)
IMAGE_DATA(223,54,30,77,214,11,142,127,201,20,248,183,86,101,226,223,236,49,203,170,178,124,3,76,198,152,101,84,224,16,20,20)
IMAGE_DATA(20,20,20,20,20,20,20,20,20,20,20,20,52,21,244,127,221,54,129,82,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(2624, 2)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,156,223,79,20,87,20,199,111,72,223,124,177,255,129,137,79,246,149,196,248,104,124,48,182,137,198,23,99,124) IMAGE_DATA(120,156,237,154,65,136,20,71,20,134,31,57,228,146,139,167,156,36,89,216,75,14,201,69,47,3,33,56,167,101,200,98)
IMAGE_DATA(170,70,45,173,77,120,32,169,38,109,76,73,139,73,211,16,105,181,22,49,22,234,34,20,197,130,184,8,138,84,145,117) IMAGE_DATA(18,72,6,179,120,25,53,139,89,15,194,94,220,133,4,118,33,135,37,132,29,209,28,86,15,113,196,77,22,109,54,72)
IMAGE_DATA(253,177,174,20,144,159,242,91,36,88,169,104,74,106,141,161,247,116,239,216,139,151,241,206,143,221,157,157,123,103,247,124) IMAGE_DATA(244,20,115,152,160,184,152,235,48,30,130,138,48,104,32,152,120,136,176,160,129,170,212,235,158,234,233,174,126,53,93,93)
IMAGE_DATA(147,147,97,102,238,185,223,123,207,103,230,206,238,32,118,174,36,43,137,87,218,177,99,7,164,27,4,32,165,208,38,191) IMAGE_DATA(85,153,157,77,250,13,63,227,116,247,123,223,171,87,175,171,107,102,173,77,192,4,148,182,171,109,143,208,33,161,51,66)
IMAGE_DATA(183,151,146,93,187,40,25,25,161,75,231,39,38,40,217,183,15,200,133,11,148,236,221,75,73,117,53,144,178,50,74,170) IMAGE_DATA(87,250,10,18,255,110,10,205,8,189,238,153,251,154,208,183,66,47,160,14,76,16,35,245,132,184,120,245,18,199,240,252)
IMAGE_DATA(170,168,212,191,160,128,146,221,187,223,228,31,63,78,201,206,157,175,247,55,111,126,115,124,255,126,74,14,31,166,111,229) IMAGE_DATA(94,33,128,95,133,190,240,192,174,9,253,5,243,125,150,233,171,23,230,240,183,208,91,14,236,125,66,219,225,184,138,176)
IMAGE_DATA(135,66,148,108,220,72,201,163,71,148,204,207,83,99,95,150,63,54,70,73,126,190,60,63,28,166,228,192,1,74,234,234) IMAGE_DATA(7,124,212,155,14,252,14,172,90,176,241,21,132,236,109,7,246,219,80,177,100,227,107,62,228,255,228,192,95,25,58,246)
IMAGE_DATA(40,153,153,129,164,242,43,43,95,183,89,183,142,146,115,231,40,153,155,147,231,179,241,151,151,211,183,234,199,124,71,71) IMAGE_DATA(64,40,170,239,93,161,59,162,231,158,135,189,183,213,247,169,135,231,87,29,248,235,67,231,61,234,241,21,197,103,74,232)
IMAGE_DATA(129,180,181,81,178,176,0,164,182,86,94,191,198,70,253,248,167,153,159,214,189,147,166,62,88,69,86,121,176,12,100,135) IMAGE_DATA(135,176,110,81,110,135,28,248,27,67,249,81,125,127,17,154,36,124,39,132,222,129,104,189,176,181,175,115,251,126,62,238)
IMAGE_DATA(188,0,146,110,168,18,250,163,191,95,254,21,21,21,108,225,50,162,176,176,144,186,245,143,70,163,176,105,211,38,202,115) IMAGE_DATA(177,175,28,89,148,125,100,212,251,189,254,154,3,240,187,208,251,30,249,47,139,57,254,163,208,253,22,245,196,178,199,28)
IMAGE_DATA(89,172,94,189,154,178,254,100,226,125,139,98,249,44,135,245,197,206,179,159,221,248,115,95,115,159,86,199,217,152,204,227) IMAGE_DATA(230,194,177,153,230,208,139,115,56,236,49,135,51,97,14,61,195,60,182,66,254,111,128,245,243,103,71,197,184,254,52,94)
IMAGE_DATA(226,243,150,201,206,159,141,145,229,177,49,219,157,231,98,237,204,237,249,49,89,77,236,252,157,188,153,88,159,172,13,155) IMAGE_DATA(11,43,222,107,128,134,253,253,185,81,30,81,63,174,57,176,190,20,250,17,240,30,160,243,216,52,88,27,3,7,254,118)
IMAGE_DATA(159,153,15,219,231,231,197,99,110,252,121,158,213,152,185,184,39,175,55,107,111,246,176,171,189,149,63,31,175,147,204,53) IMAGE_DATA(162,159,127,22,154,86,206,127,54,180,47,163,117,225,138,37,123,95,234,185,179,26,223,223,207,1,215,121,92,239,247,134)
IMAGE_DATA(98,251,230,49,139,215,154,27,127,62,94,89,173,68,113,174,98,223,50,94,172,31,187,190,204,254,169,214,222,170,206,78) IMAGE_DATA(253,152,87,255,139,150,252,217,66,247,28,117,15,70,107,255,81,75,254,55,86,251,141,116,237,113,45,124,197,146,127,211)
IMAGE_DATA(125,165,226,47,171,145,140,61,175,145,213,58,33,243,231,57,86,53,227,222,102,166,50,246,78,215,158,204,159,73,182,182) IMAGE_DATA(248,94,167,251,14,245,161,37,27,109,45,156,243,34,57,12,158,1,47,132,62,117,96,163,97,221,22,1,247,94,216,135)
IMAGE_DATA(136,107,160,108,108,124,158,98,142,19,123,43,127,113,12,226,122,203,142,89,173,7,124,92,226,121,89,77,220,250,243,49) IMAGE_DATA(171,137,189,173,228,109,245,63,227,185,74,204,253,30,220,246,122,148,225,62,30,215,177,179,160,223,239,127,44,244,170,103)
IMAGE_DATA(216,177,115,146,155,123,216,110,254,118,107,31,147,211,53,234,52,119,153,63,191,254,204,235,166,121,77,183,122,198,177,227) IMAGE_DATA(110,105,255,113,123,105,143,247,253,154,119,171,3,196,11,138,78,122,95,252,2,208,29,178,104,12,247,79,251,22,231,171)
IMAGE_DATA(252,90,113,242,150,249,139,18,159,149,110,159,187,110,214,46,183,254,126,8,253,245,240,87,25,94,126,151,12,162,242,116) IMAGE_DATA(15,36,222,31,143,169,101,23,214,98,49,178,99,47,22,35,170,95,160,196,232,230,142,59,63,134,185,255,32,70,145,121)
IMAGE_DATA(123,51,152,238,197,228,85,190,248,133,197,238,67,28,95,32,197,124,150,43,230,136,31,80,196,5,92,92,172,197,124,153) IMAGE_DATA(163,100,158,191,190,95,186,70,245,203,235,215,34,61,48,50,123,183,252,101,112,252,172,213,106,240,118,187,234,69,24,171)
IMAGE_DATA(31,255,2,67,132,7,3,255,153,249,185,201,103,91,241,129,194,31,24,102,127,217,7,105,126,76,60,39,250,152,253,197) IMAGE_DATA(40,31,253,184,104,124,31,194,88,37,127,119,243,27,203,13,94,93,174,146,106,183,219,180,150,150,120,187,90,205,168,213)
IMAGE_DATA(135,22,17,62,156,186,201,231,57,60,204,125,241,57,136,125,201,248,219,61,136,205,95,214,236,190,12,201,30,122,98,237) IMAGE_DATA(200,239,71,149,143,28,88,6,82,90,19,124,1,202,8,115,200,227,47,9,223,164,70,205,175,86,219,41,183,146,159,230)
IMAGE_DATA(236,242,221,74,135,197,44,167,222,12,126,118,170,23,88,160,63,250,163,191,92,39,218,167,65,69,136,254,126,75,230,95) IMAGE_DATA(55,26,45,125,223,21,84,171,213,202,228,147,199,199,243,7,14,232,135,94,196,48,7,27,62,30,247,145,131,11,223,71)
IMAGE_DATA(84,84,100,132,31,63,235,232,239,167,116,156,191,106,255,76,203,237,252,51,57,119,157,253,253,148,155,249,123,61,239,100) IMAGE_DATA(14,174,124,215,28,40,62,246,23,50,98,229,240,93,114,160,248,153,122,24,240,109,115,240,201,183,201,193,59,31,218,244)
IMAGE_DATA(235,239,183,191,159,74,229,254,79,53,204,125,232,234,239,167,204,254,42,63,127,160,80,185,42,79,223,12,122,165,237,219) IMAGE_DATA(9,141,140,214,35,211,250,23,100,155,242,51,207,95,170,255,44,216,166,252,76,61,212,251,207,146,237,131,239,194,118,229)
IMAGE_DATA(183,23,196,227,241,23,157,157,157,207,194,225,240,76,40,20,26,42,45,45,141,236,217,179,231,232,214,173,91,15,110,216) IMAGE_DATA(187,178,93,248,62,216,182,252,240,249,75,236,237,108,100,178,31,44,109,52,166,254,50,200,13,165,51,126,171,83,231,211)
IMAGE_DATA(176,161,112,205,154,53,239,231,229,229,189,35,203,143,197,98,47,35,145,200,203,45,91,182,20,164,226,159,240,253,183,164) IMAGE_DATA(139,60,126,87,155,47,207,31,125,166,23,120,244,190,152,125,120,252,219,124,229,186,162,181,72,229,137,252,149,239,130,84)
IMAGE_DATA(164,164,121,197,138,21,73,21,167,62,58,57,125,125,124,17,90,46,95,129,134,166,48,92,29,121,5,87,134,94,66,107) IMAGE_DATA(78,248,89,142,141,244,79,240,241,218,59,119,223,139,124,22,120,250,179,198,63,41,228,205,53,187,49,79,205,39,175,22)
IMAGE_DATA(255,11,8,247,46,64,67,215,115,56,123,231,41,156,142,62,129,170,142,89,99,17,58,214,58,9,101,23,198,224,243,19) IMAGE_DATA(74,158,133,107,33,199,43,99,221,234,232,55,5,148,191,204,117,80,75,125,140,188,90,200,177,204,53,141,253,201,90,204)
IMAGE_DATA(215,141,220,161,135,207,150,98,112,106,30,6,38,231,161,111,98,30,122,199,158,66,207,232,159,208,245,96,14,226,67,79) IMAGE_DATA(125,210,37,23,85,19,255,149,15,196,120,222,168,91,251,235,124,77,252,141,52,166,127,38,144,127,26,176,249,57,181,94)
IMAGE_DATA(32,54,248,4,110,245,63,134,232,253,89,232,236,153,133,175,235,250,129,231,47,46,46,66,123,252,145,177,109,189,51,101) IMAGE_DATA(175,3,15,2,224,245,226,63,203,199,190,162,194,54,49,98,95,169,32,200,157,40,159,252,84,12,11,223,56,6,216,215)
IMAGE_DATA(108,207,71,38,140,237,153,171,163,198,246,212,165,97,99,251,124,225,31,184,218,53,3,7,67,61,112,109,244,149,225,215) IMAGE_DATA(191,180,93,106,181,242,207,4,3,155,153,153,225,59,173,244,82,50,58,149,252,146,95,242,75,126,234,248,228,36,254,71)
IMAGE_DATA(118,119,26,46,221,121,8,205,55,39,161,233,198,4,252,218,57,14,103,175,141,66,109,251,3,8,93,30,134,202,150,65) IMAGE_DATA(168,104,51,51,204,255,228,201,193,117,183,111,71,199,134,237,64,49,174,188,46,111,252,231,207,167,227,170,194,227,50,166)
IMAGE_DATA(56,17,30,128,216,192,31,70,31,172,253,129,159,186,140,185,246,141,63,53,142,177,104,72,228,177,109,109,251,136,177,173) IMAGE_DATA(122,174,86,99,161,212,235,229,184,18,49,181,124,57,54,124,167,248,24,31,207,169,28,89,63,157,31,198,76,248,104,249)
IMAGE_DATA(108,25,50,182,229,231,251,151,218,176,104,185,61,5,69,21,49,104,233,251,27,186,19,115,108,140,140,67,253,181,49,248) IMAGE_DATA(50,62,53,62,172,13,138,26,167,100,224,121,93,222,137,152,67,249,178,198,212,185,100,142,212,188,232,122,198,132,143,49)
IMAGE_DATA(229,183,17,168,110,27,134,170,214,33,56,217,60,0,229,77,253,240,67,195,125,40,171,239,129,210,186,110,248,166,246,119) IMAGE_DATA(100,92,188,54,57,22,60,46,231,143,226,235,106,166,233,13,146,175,50,228,245,201,188,168,220,116,57,169,115,147,56,79)
IMAGE_DATA(56,84,125,15,194,209,73,40,60,118,11,154,186,255,50,106,195,250,60,221,246,96,153,135,44,190,58,21,95,170,205,190) IMAGE_DATA(242,147,115,42,239,3,201,83,251,76,229,83,199,168,88,58,62,142,81,237,41,217,179,121,44,57,247,186,123,150,232,203)
IMAGE_DATA(35,81,168,191,59,15,183,89,77,251,30,67,164,119,22,174,119,207,24,181,105,143,79,195,229,216,116,162,150,15,225,226) IMAGE_DATA(12,31,107,163,214,15,57,212,156,170,241,228,61,171,242,241,26,77,93,82,124,28,99,114,173,74,198,165,56,82,178,54)
IMAGE_DATA(173,41,195,143,213,229,124,34,26,19,115,100,243,252,248,187,27,80,126,113,112,206,204,245,219,134,97,56,116,102,0,190) IMAGE_DATA(186,117,79,222,75,68,77,198,114,253,47,249,37,127,196,252,29,253,238,245,63,183,155,62,127,25,220,201,47,195,99,227)
IMAGE_DATA(172,185,15,95,252,220,13,251,79,222,51,230,90,248,227,109,248,244,232,77,248,36,145,199,114,63,44,105,158,75,229,90) IMAGE_DATA(223,233,48,56,114,132,193,189,123,131,135,200,195,135,12,78,156,224,112,237,26,131,217,89,6,235,235,28,78,159,102,208)
IMAGE_DATA(245,84,58,46,6,130,160,184,184,24,108,246,117,205,95,122,197,253,127,123,171,125,169,88,27,55,145,193,241,167,155,159) IMAGE_DATA(106,209,155,129,227,199,25,28,59,54,240,63,119,142,65,163,17,125,62,120,112,112,252,212,41,6,205,38,203,248,95,186)
IMAGE_DATA(235,243,247,42,223,87,229,189,171,247,98,224,165,182,57,252,190,101,155,83,238,250,245,235,161,166,166,6,58,58,58,222) IMAGE_DATA(196,96,106,138,193,163,71,12,158,62,101,225,103,202,255,193,3,6,251,247,211,254,215,175,51,88,88,96,112,249,50,131)
IMAGE_DATA(10,118,156,157,183,232,107,155,93,174,85,95,66,63,70,62,187,144,204,109,19,183,142,229,62,107,207,251,97,227,146,249) IMAGE_DATA(199,143,121,33,255,11,23,162,107,42,21,6,155,155,12,158,60,161,253,49,255,181,53,150,169,31,114,239,223,231,112,227)
IMAGE_DATA(215,212,180,194,218,181,71,44,247,249,120,120,157,204,249,197,197,103,33,63,255,123,99,43,219,23,131,247,97,30,7,243) IMAGE_DATA(6,131,103,207,56,108,108,208,245,187,122,117,252,230,127,7,23,67,215,251,247,31,131,116,68,22,0,0,0,0,0,0)
IMAGE_DATA(99,190,86,251,230,113,200,234,97,87,7,89,61,60,226,226,213,245,225,213,117,170,84,239,125,68,118,170,30,3,10,133) IMAGE_END_DATA(1376, 7)
IMAGE_DATA(66,161,80,40,20,10,133,66,161,80,40,20,10,133,66,161,80,40,20,10,133,66,5,70,248,215,242,106,133,255,187,129)
IMAGE_DATA(30,82,197,1,57,45,151,234,122,35,167,55,82,93,83,100,180,92,170,235,135,124,150,43,19,53,112,243,15,7,221,68) IMAGE_BEGIN_DATA
IMAGE_DATA(46,242,209,169,254,42,120,169,174,191,89,65,228,144,73,78,65,229,161,186,230,126,49,10,2,19,213,181,85,197,8,121) IMAGE_DATA(120,156,237,156,219,79,28,85,28,199,55,196,55,94,234,127,208,132,39,124,109,210,103,194,83,237,3,225,133,16,158,244)
IMAGE_DATA(228,46,31,228,145,30,31,149,76,84,215,73,119,62,126,51,81,93,23,93,194,47,54,200,68,63,54,200,35,179,124,178) IMAGE_DATA(129,88,47,201,62,144,168,137,166,145,40,77,140,33,169,182,86,2,169,173,208,46,182,16,41,184,20,10,69,110,219,45)
IMAGE_DATA(145,9,251,3,80,115,120,217,94,71,54,186,51,9,18,23,175,216,32,19,61,217,232,206,36,168,92,156,216,4,157,73) IMAGE_DATA(176,221,34,119,150,251,77,66,5,161,141,141,149,52,200,207,61,163,7,15,199,51,183,221,217,57,103,118,126,223,228,151)
IMAGE_DATA(144,185,164,202,6,185,232,199,37,200,76,236,234,156,108,123,221,216,4,129,137,85,157,189,108,175,154,77,16,239,149,92) IMAGE_DATA(97,102,207,239,124,207,249,125,102,206,236,12,165,103,79,6,78,6,80,255,168,172,172,12,100,135,44,161,63,250,187,229)
IMAGE_DATA(224,34,178,9,10,147,108,226,98,199,6,185,232,203,5,215,48,253,184,4,137,73,54,114,73,133,141,234,241,34,23,228) IMAGE_DATA(95,91,91,11,201,203,77,139,96,48,120,104,213,63,26,141,194,153,51,103,14,105,46,137,188,188,188,67,210,159,72,180)
IMAGE_DATA(130,92,188,101,18,180,239,147,185,194,197,203,246,200,5,185,32,23,228,130,92,252,225,162,19,155,92,100,18,132,247,48) IMAGE_DATA(111,86,36,159,228,144,190,200,231,228,103,43,254,212,151,239,83,239,56,25,19,63,46,58,111,145,140,252,201,24,73,30)
IMAGE_DATA(185,198,37,40,239,199,144,139,158,108,178,145,139,211,26,166,251,61,147,141,76,236,184,4,229,247,200,217,200,197,237,189) IMAGE_DATA(25,179,209,231,84,164,29,223,158,30,19,213,196,200,223,204,155,136,244,73,218,144,249,241,124,200,62,253,156,61,102,197)
IMAGE_DATA(162,51,155,108,227,146,44,19,228,162,47,23,221,216,36,251,238,49,217,246,65,97,226,196,197,111,54,217,116,175,56,213) IMAGE_DATA(159,230,233,141,153,138,122,210,122,147,246,188,135,81,237,245,252,233,120,205,196,215,136,236,243,99,102,207,53,43,254,116)
IMAGE_DATA(213,137,139,78,108,178,133,139,23,76,116,99,19,244,240,146,9,178,209,151,137,91,54,200,39,121,30,233,50,65,54,250) IMAGE_DATA(188,162,90,177,162,92,217,190,69,188,72,63,70,125,241,254,169,214,94,175,206,102,125,165,226,47,170,145,136,61,173,145)
IMAGE_DATA(50,73,134,77,46,243,113,91,31,47,153,36,203,38,151,248,36,83,147,76,48,73,133,77,54,243,73,182,14,153,100,130) IMAGE_DATA(222,58,33,242,167,57,122,53,163,222,60,83,17,123,179,115,79,228,79,36,90,91,216,53,80,52,54,58,79,54,199,140)
IMAGE_DATA(124,244,229,145,14,155,160,50,74,117,158,42,152,120,193,71,103,70,233,204,73,53,15,179,210,153,139,106,78,94,140,93) IMAGE_DATA(189,158,63,59,6,118,189,37,199,244,214,3,58,46,246,115,81,77,172,250,211,49,24,177,51,147,149,107,216,104,254,70)
IMAGE_DATA(117,253,157,228,197,28,51,197,43,19,99,83,93,239,100,149,137,26,232,20,170,235,155,174,84,215,15,121,56,75,117,77) IMAGE_DATA(107,31,145,217,57,106,54,119,145,63,61,255,248,117,147,95,211,245,238,113,228,56,61,87,204,188,69,254,172,216,123,165)
IMAGE_DATA(145,133,59,169,174,55,114,112,39,228,16,44,97,253,81,40,20,10,133,66,161,80,40,20,10,133,66,161,80,168,220,209) IMAGE_DATA(213,251,174,149,181,203,170,191,27,66,127,53,252,101,134,147,207,146,94,84,206,137,192,9,199,58,147,249,48,236,116,62)
IMAGE_DATA(127,183,7,174,190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) IMAGE_DATA(251,192,98,244,37,142,46,144,108,62,201,101,115,216,47,40,236,2,206,46,214,108,190,200,143,62,192,4,152,27,3,253)
IMAGE_END_DATA(1920, 8) IMAGE_DATA(153,248,89,201,39,91,246,134,66,111,24,188,191,232,139,52,61,198,126,198,250,240,254,236,77,43,192,124,57,181,146,79)
IMAGE_DATA(115,104,240,125,209,57,176,125,137,248,27,221,136,249,135,53,163,135,33,209,77,143,173,157,81,190,85,169,176,152,157,245)
IMAGE_DATA(211,155,193,247,235,39,128,4,250,163,63,250,139,85,215,179,1,50,130,245,119,91,34,255,138,138,10,45,220,248,89,69)
IMAGE_DATA(127,55,165,226,252,101,251,103,90,86,231,159,201,185,171,236,239,166,172,204,223,233,121,219,173,191,219,254,110,42,149,235)
IMAGE_DATA(63,213,224,251,80,213,223,77,241,254,50,191,127,160,80,126,149,163,111,6,157,82,105,105,233,185,120,60,254,98,112,112)
IMAGE_DATA(240,105,56,28,222,108,104,104,72,84,87,87,71,202,203,203,47,23,23,23,159,47,44,44,12,230,231,231,191,158,147,147)
IMAGE_DATA(243,138,40,63,22,139,237,71,34,145,253,162,162,162,115,169,248,39,125,255,170,170,170,106,207,205,205,181,85,156,230,232)
IMAGE_DATA(234,198,192,242,1,116,116,221,135,150,182,48,244,46,188,132,251,137,125,232,156,126,1,225,137,231,208,50,250,12,154,70)
IMAGE_DATA(118,225,102,116,27,174,247,111,105,139,208,149,206,85,184,248,227,18,124,84,55,160,229,38,214,159,30,197,236,218,30,204)
IMAGE_DATA(172,238,193,212,202,30,76,44,237,194,248,226,111,48,58,191,3,241,196,54,196,102,183,97,104,250,9,68,39,183,96,112)
IMAGE_DATA(124,11,62,187,53,13,52,255,224,224,0,122,226,191,104,219,206,145,53,109,219,26,89,209,182,183,123,23,181,109,253,189)
IMAGE_DATA(57,109,251,236,249,159,208,59,186,9,231,27,198,161,111,241,165,230,215,253,104,3,238,141,172,67,251,195,85,104,123,176)
IMAGE_DATA(2,63,12,46,67,83,223,34,52,246,204,67,67,215,28,92,235,152,133,186,240,12,196,102,126,213,250,32,237,63,252,118)
IMAGE_DATA(84,155,235,212,242,174,118,140,68,75,50,143,108,27,123,22,180,237,181,142,132,182,173,105,157,62,106,67,162,99,120,13)
IMAGE_DATA(42,106,99,208,49,245,7,140,37,231,120,39,178,12,205,125,75,240,253,79,11,112,163,123,14,174,119,38,224,106,251,12)
IMAGE_DATA(212,180,77,195,215,45,147,112,177,121,28,170,111,141,193,231,141,63,195,133,27,143,33,28,93,133,224,149,33,104,27,251)
IMAGE_DATA(93,171,13,233,243,102,247,252,49,15,81,124,90,31,63,170,205,187,151,162,208,252,104,15,134,73,77,167,158,64,100,98)
IMAGE_DATA(11,6,198,54,181,218,244,196,55,160,43,182,145,172,229,58,220,29,90,211,252,72,93,90,147,113,39,57,71,50,207,183)
IMAGE_DATA(191,124,0,53,119,103,119,120,174,95,180,204,193,133,219,51,240,73,104,18,62,254,110,12,62,184,250,88,155,107,240,155)
IMAGE_DATA(97,120,239,242,67,120,39,153,71,114,223,168,106,223,73,229,92,117,84,42,46,6,140,160,178,178,18,12,246,85,205,63)
IMAGE_DATA(122,197,253,111,123,189,125,161,72,27,43,145,193,241,167,155,239,247,249,59,149,239,170,114,94,85,123,49,112,82,37,38)
IMAGE_DATA(191,111,41,49,203,45,40,40,128,80,40,4,253,253,253,255,11,114,156,124,174,211,87,137,81,174,94,95,76,63,90,62)
IMAGE_DATA(57,145,248,182,201,75,71,119,159,180,167,253,144,113,137,252,67,161,78,56,125,250,146,238,62,29,15,173,19,159,95,89)
IMAGE_DATA(217,4,167,78,125,165,109,69,251,108,208,62,248,113,16,63,226,171,183,207,143,67,84,15,163,58,136,234,225,16,23,167)
IMAGE_DATA(206,15,167,206,83,169,122,237,173,192,155,178,199,128,66,161,80,40,20,10,133,66,161,80,40,20,10,133,66,161,80,40)
IMAGE_DATA(20,10,133,66,161,80,158,17,254,181,188,92,225,255,110,160,134,100,113,64,78,199,37,187,222,200,233,63,201,174,41,50)
IMAGE_DATA(58,46,217,245,67,62,199,149,137,26,88,249,135,131,86,194,143,124,84,170,191,12,94,178,235,207,203,139,28,50,201,201)
IMAGE_DATA(171,60,100,215,220,45,70,94,96,34,187,182,178,24,33,15,255,242,65,30,233,241,145,201,68,118,157,84,231,227,54,19)
IMAGE_DATA(217,117,81,37,220,98,131,76,212,99,131,60,50,203,39,27,153,144,63,0,229,195,201,246,42,178,81,157,137,151,184,56)
IMAGE_DATA(197,6,153,168,201,70,117,38,94,229,98,198,198,235,76,188,204,37,85,54,200,69,61,46,94,102,98,84,103,187,237,85)
IMAGE_DATA(99,227,5,38,122,117,118,178,189,108,54,94,188,86,252,192,133,101,227,21,38,217,196,197,136,13,114,81,151,11,174,97)
IMAGE_DATA(234,113,241,18,147,108,228,146,10,27,217,227,69,46,200,5,185,56,203,196,107,207,147,126,225,226,100,123,228,130,92,144)
IMAGE_DATA(11,114,65,46,238,112,81,137,141,31,153,120,225,61,140,223,184,120,229,253,24,114,81,147,77,54,114,49,91,195,84,191)
IMAGE_DATA(102,178,145,137,17,23,175,252,30,57,27,185,88,189,86,84,102,147,109,92,236,50,65,46,234,114,81,141,141,221,119,143)
IMAGE_DATA(118,219,123,133,137,25,23,183,217,100,211,181,98,86,87,51,46,42,177,201,22,46,78,48,81,141,141,215,195,73,38,200)
IMAGE_DATA(70,93,38,86,217,32,31,251,60,210,101,130,108,212,101,98,135,141,159,249,88,173,143,147,76,236,178,241,19,31,59,53)
IMAGE_DATA(201,4,147,84,216,100,51,31,187,117,200,36,19,228,163,46,143,116,216,120,149,81,170,243,148,193,196,9,62,42,51,74)
IMAGE_DATA(103,78,178,121,240,74,103,46,178,57,57,49,118,217,245,55,147,19,115,204,20,175,76,140,77,118,189,237,42,19,53,80)
IMAGE_DATA(41,100,215,55,93,201,174,31,242,48,151,236,154,34,11,107,146,93,111,228,96,77,200,193,91,194,250,163,80,40,20,10)
IMAGE_DATA(133,66,161,80,40,20,10,133,66,161,80,254,209,223,58,209,116,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1728, 7)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,219,49,78,195,48,24,134,97,139,169,35,92,131,169,87,97,200,144,141,137,27,176,115,171,30,166,119,33,200) IMAGE_DATA(120,156,237,219,49,78,195,48,24,134,97,139,169,35,92,131,169,87,97,200,144,141,137,27,176,115,171,30,166,119,33,200)

View file

@ -240,6 +240,51 @@ void Pdb::CopyMenu(ArrayCtrl& array, Bar& bar)
bar.Separator(); bar.Separator();
bar.Add("Show type", [=] { show_type = !show_type; Data(); }).Check(show_type); bar.Add("Show type", [=] { show_type = !show_type; Data(); }).Check(show_type);
bar.Add("No pretty-printing", [=] { raw = !raw; Data(); }).Check(raw); bar.Add("No pretty-printing", [=] { raw = !raw; Data(); }).Check(raw);
bar.Add("Copy type script (for .dbg file)", [&] { CopyTypeScript(array); });
}
void Pdb::CopyTypeScriptType(String& text, int type, const String& tabs, const String& id)
{
if(type <= 0)
return;
const Type& t = GetType(type);
for(int i = 0; i < t.member.GetCount(); i++) {
String nid = t.member.GetKey(i);
text << tabs << nid << " = ";
int ref = clamp(t.member[i].ref, 0, 8);
for(int j = 0; j < ref; j++)
text << "DeRef(";
text << "Field(" << id << ", " << AsCString(nid) << ")";
for(int j = 0; j < ref; j++)
text << ")";
text << ";\n";
CopyTypeScriptType(text, t.member[i].type, tabs + '\t', nid);
}
for(int i = 0; i < t.base.GetCount(); i++)
CopyTypeScriptType(text, t.base[i].type, tabs, id);
}
void Pdb::CopyTypeScript(ArrayCtrl& array)
{
if(array.IsCursor()) {
Value q = array.Get(1);
if(IsType<Visual>(q))
try {
int type = ValueTo<Visual>(q).type;
const Type& t = GetType(type);
String tname = t.name;
tname.Replace("::__1", ""); // CLANG has some weird stuff in names...
int q = tname.Find('<');
if(q >= 0)
tname.Trim(q);
String text;
text << "typename " << tname << " {\n";
CopyTypeScriptType(text, type, "\t", "value");
text << "}\n";
WriteClipboardText(text);
}
catch(CParser::Error) {}
}
} }
void Pdb::MemMenu(ArrayCtrl& array, Bar& bar, const String& exp) void Pdb::MemMenu(ArrayCtrl& array, Bar& bar, const String& exp)

View file

@ -35,6 +35,7 @@ file
Exp.cpp, Exp.cpp,
PrettyUpp.cpp, PrettyUpp.cpp,
PrettyStd.cpp, PrettyStd.cpp,
Scripts.cpp,
Pretty.cpp, Pretty.cpp,
Visualise.cpp, Visualise.cpp,
Data.cpp, Data.cpp,

View file

@ -106,6 +106,14 @@ dword Pdb::PeekDword(adr_t address)
return w; return w;
} }
dword Pdb::Peek64(adr_t address)
{
dword w;
if(!Copy(address, &w, 8))
ThrowError("??");
return w;
}
Pdb::Val Pdb::GetRVal(Pdb::Val v) Pdb::Val Pdb::GetRVal(Pdb::Val v)
{ // read data from debugee { // read data from debugee
if(v.rvalue) if(v.rvalue)

View file

@ -370,6 +370,8 @@ Pdb::Pdb()
} }
StringStream ss(WorkspaceConfigData("pdb-debugger")); StringStream ss(WorkspaceConfigData("pdb-debugger"));
Load(callback(this, &Pdb::SerializeSession), ss); Load(callback(this, &Pdb::SerializeSession), ss);
LoadPrettyScripts();
} }
void Pdb::CopyStack() void Pdb::CopyStack()

View file

@ -116,6 +116,7 @@ struct Pdb : Debugger, ParentCtrl {
Val val; Val val;
Val key; Val key;
int64 from = 0; int64 from = 0;
int64 chunk = 10000;
bool exp = false; bool exp = false;
}; };
@ -154,6 +155,7 @@ struct Pdb : Debugger, ParentCtrl {
struct Visual { struct Visual {
int length; int length;
Vector<VisualPart> part; Vector<VisualPart> part;
int type = 0; // only need for Copy type for .dbg
void Cat(const String& text, Color ink = SColorText); void Cat(const String& text, Color ink = SColorText);
void Cat(const char *text, Color ink = SColorText); void Cat(const char *text, Color ink = SColorText);
@ -269,12 +271,14 @@ struct Pdb : Debugger, ParentCtrl {
struct LengthLimit {}; struct LengthLimit {};
struct Pretty { struct Pretty {
int kind; // VARIABLE, TEXT or CONTAINER int kind; // SINGLE_VALUE, TEXT or CONTAINER
int64 data_count = 0; // number of entries int64 data_count = 0; // number of entries
Vector<String> data_type; // type of data items (usually type_param) Vector<String> data_type; // type of data items (usually type_param), >1 - display as tuples, usually key : value
Vector<adr_t> data_ptr; // pointer to items (data_count.GetCount() * data_type.GetCount() items) Vector<adr_t> data_ptr; // pointer to items (data_count.GetCount() * data_type.GetCount() items)
Visual text; Visual text;
bool has_data = true; // do display the data for SINGLE_VALUE (false for e.g. void Value) bool has_data = true; // do display the data for SINGLE_VALUE (false for e.g. void Value)
bool separated_types = false; // item tuples are in consequent arrays
int chunk = 10000; // maximum number of items to be displayed in treeview in single node
void Text(const char *s, Color color = SRed) { text.Cat(s, color); has_data = false; } void Text(const char *s, Color color = SRed) { text.Cat(s, color); has_data = false; }
void Text(const String& s, Color color = SRed) { text.Cat(s, color); has_data = false; } void Text(const String& s, Color color = SRed) { text.Cat(s, color); has_data = false; }
@ -289,6 +293,9 @@ struct Pdb : Debugger, ParentCtrl {
bool raw = false; bool raw = false;
int bc_lvl = 0; // For coloring { } in pretty container display int bc_lvl = 0; // For coloring { } in pretty container display
ArrayMap<String, EscValue> pretty_globals;
ArrayMap<String, EscValue> pretty_scripts;
void Error(const char *s = NULL); void Error(const char *s = NULL);
@ -372,6 +379,7 @@ struct Pdb : Debugger, ParentCtrl {
byte PeekByte(adr_t address); byte PeekByte(adr_t address);
word PeekWord(adr_t address); word PeekWord(adr_t address);
dword PeekDword(adr_t address); dword PeekDword(adr_t address);
dword Peek64(adr_t address);
Val GetRVal(Val v); Val GetRVal(Val v);
Val DeRef(Val v); Val DeRef(Val v);
Val Ref(Val v); Val Ref(Val v);
@ -416,6 +424,7 @@ struct Pdb : Debugger, ParentCtrl {
bool VisualisePretty(Visual& result, Pdb::Val val, dword flags); bool VisualisePretty(Visual& result, Pdb::Val val, dword flags);
bool PrettyVal(Pdb::Val val, int64 from, int count, Pretty& p); bool PrettyVal(Pdb::Val val, int64 from, int count, Pretty& p);
void PrettyString(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p); void PrettyString(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
void PrettyWString(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p); void PrettyWString(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
void PrettyVector(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p); void PrettyVector(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
@ -450,6 +459,10 @@ struct Pdb : Debugger, ParentCtrl {
void PrettyStdDeque(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p); void PrettyStdDeque(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p);
void PrettyStdUnordered(Pdb::Val val, bool set, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p); void PrettyStdUnordered(Pdb::Val val, bool set, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p);
void LoadPrettyScripts();
void SetVal(EscValue& v, Pdb::Val val);
bool PrettyScript(const String& type, Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
// code // code
Thread& Current(); Thread& Current();
Array<Frame> Backtrace(Thread& ctx, bool single_frame = false, bool thread_info = false); Array<Frame> Backtrace(Thread& ctx, bool single_frame = false, bool thread_info = false);
@ -523,6 +536,9 @@ struct Pdb : Debugger, ParentCtrl {
void WatchMenu(Bar& bar, const String& exp); void WatchMenu(Bar& bar, const String& exp);
void WatchesMenu(Bar& bar); void WatchesMenu(Bar& bar);
void CopyTypeScript(ArrayCtrl& array);
void CopyTypeScriptType(String& text, int type, const String& tabs, const String& id);
void SyncTreeDisas(); void SyncTreeDisas();
void Tab(); void Tab();
@ -530,7 +546,7 @@ struct Pdb : Debugger, ParentCtrl {
bool Create(Host& local, const String& exefile, const String& cmdline, bool clang_); bool Create(Host& local, const String& exefile, const String& cmdline, bool clang_);
void SerializeSession(Stream& s); void SerializeSession(Stream& s);
typedef Pdb CLASSNAME; typedef Pdb CLASSNAME;
Pdb(); Pdb();

View file

@ -94,6 +94,8 @@ bool Pdb::PrettyVal(Pdb::Val val, int64 from, int count, Pretty& p)
type = Filter(type, [](int c) { return c != ' ' ? c : 0; }); type = Filter(type, [](int c) { return c != ' ' ? c : 0; });
type.Replace("::__1", ""); // CLANG has some weird stuff in names... type.Replace("::__1", ""); // CLANG has some weird stuff in names...
if(PrettyScript(type, val, type_param, from, count, p))
return true;
int ii = pretty.Find(type); int ii = pretty.Find(type);
if(ii >= 0) { if(ii >= 0) {
@ -122,6 +124,10 @@ bool Pdb::VisualisePretty(Visual& result, Pdb::Val val, dword flags)
int count = (int)min(p.data_count, (int64)200); int count = (int)min(p.data_count, (int64)200);
Pretty p; Pretty p;
PrettyVal(val, 0, count, p); PrettyVal(val, 0, count, p);
if(p.kind == SINGLE_VALUE) // support script errors
for(const VisualPart& vp : p.text.part)
result.Cat(vp.text, vp.ink);
else
if(p.data_type.GetCount()) { if(p.data_type.GetCount()) {
String s; String s;
WString ws; WString ws;
@ -159,31 +165,36 @@ bool Pdb::VisualisePretty(Visual& result, Pdb::Val val, dword flags)
int count = (int)min(p.data_count, (int64)40); int count = (int)min(p.data_count, (int64)40);
Pretty p; Pretty p;
PrettyVal(val, 0, count, p); PrettyVal(val, 0, count, p);
ResultCount(p.data_count); if(p.kind == SINGLE_VALUE) // support script errors
if(p.data_type.GetCount()) { for(const VisualPart& vp : p.text.part)
Buffer<Val> item(p.data_type.GetCount()); result.Cat(vp.text, vp.ink);
for(int i = 0; i < p.data_type.GetCount(); i++) { else {
(TypeInfo &)item[i] = GetTypeInfo(p.data_type[i]); ResultCount(p.data_count);
item[i].context = val.context; if(p.data_type.GetCount()) {
} Buffer<Val> item(p.data_type.GetCount());
int ii = 0; for(int i = 0; i < p.data_type.GetCount(); i++) {
int n = p.data_ptr.GetCount() / p.data_type.GetCount(); (TypeInfo &)item[i] = GetTypeInfo(p.data_type[i]);
Color bc = decode(bc_lvl++ & 3, 0, SGray(), 1, SCyan(), 2, SBrown(), SGreen()); item[i].context = val.context;
result.Cat("{", bc);
for(int i = 0; i < n; i++) {
if(i)
result.Cat(", ", SGray);
for(int j = 0; j < p.data_type.GetCount(); j++) {
if(j)
result.Cat(": ", SBlue);
item[j].address = p.data_ptr[ii++];
if(item[j].type != UNKNOWN)
Visualise(result, item[j], flags | MEMBER);
} }
int ii = 0;
int n = p.data_ptr.GetCount() / p.data_type.GetCount();
Color bc = decode(bc_lvl++ & 3, 0, SGray(), 1, SCyan(), 2, SBrown(), SGreen());
result.Cat("{", bc);
for(int i = 0; i < n; i++) {
if(i)
result.Cat(", ", SGray);
for(int j = 0; j < p.data_type.GetCount(); j++) {
if(j)
result.Cat(": ", SBlue);
item[j].address = p.data_ptr[p.separated_types ? n * j + i : ii++];
if(item[j].type != UNKNOWN)
Visualise(result, item[j], flags | MEMBER);
}
}
result.Cat("}", bc);
bc_lvl--;
} }
result.Cat("}", bc);
bc_lvl--;
} }
if(p.data_count > count) if(p.data_count > count)

View file

@ -0,0 +1,222 @@
#include "Debuggers.h"
#ifdef PLATFORM_WIN32
#define LTIMESTOP(x)
#define LLOG(x)
void Pdb::LoadPrettyScripts()
{
const Workspace& wspc = GetIdeWorkspace();
for(int i = 0; i < wspc.GetCount(); i++) {
const Package& pk = wspc.GetPackage(i);
String n = wspc[i];
for(int i = 0; i < pk.file.GetCount(); i++) {
String filename = SourcePath(n, pk.file[i]);
if(ToLower(GetFileExt(filename)) == ".dbg") {
try {
String d = LoadFile(filename);
CParser p(d, filename);
while(!p.IsEof()) {
if(p.Id("fn")) {
String id = p.ReadId();
pretty_globals.GetAdd(id) = ReadLambda(p);
}
else
if(p.Id("typename")) {
String type;
for(;;) {
if(p.Char2(':', ':'))
type << "::";
else
if(p.IsId())
type << p.ReadId();
else
break;
}
pretty_scripts.GetAdd(type) = ReadLambda(p, false, "(value, template_param, from, items)");
}
else
if(!p.Char(';'))
p.ThrowError();
}
}
catch(CParser::Error) {}
}
}
}
StdLib(pretty_globals);
auto ValGet = [](EscEscape& e, const char *what) -> int64 {
if(e[0].IsMap())
return e[0].MapGet(what).GetInt64();
else
if(e[0].IsInt64())
return e[0].GetInt64();
else
e.ThrowError("parameter can be either :value structure or integer");
return 0;
};
auto Type = [=](EscEscape& e) { return ValGet(e, "type"); };
auto Adr = [=](EscEscape& e) { return ValGet(e, "address"); };
Escape(pretty_globals, "SizeOf(x)", [=](EscEscape& e) {
if(e[0].IsArray())
e = SizeOfType((String)e[0]);
else
e = SizeOfType(Type(e));
});
Escape(pretty_globals, "TypeName(x)", [=](EscEscape& e) {
e = GetType(Type(e)).name;
});
Escape(pretty_globals, "PeekPtr(x)", [=](EscEscape& e) {
e = (int64)PeekPtr(Adr(e));
});
Escape(pretty_globals, "Peek8(x)", [=](EscEscape& e) {
e = (int64)PeekByte(Adr(e));
});
Escape(pretty_globals, "Peek16(x)", [=](EscEscape& e) {
e = (int64)PeekWord(Adr(e));
});
Escape(pretty_globals, "Peek32(x)", [=](EscEscape& e) {
e = (int64)PeekDword(Adr(e));
});
Escape(pretty_globals, "Peek64(x)", [=](EscEscape& e) {
e = (int64)Peek64(Adr(e));
});
Escape(pretty_globals, "Peek32f(x)", [=](EscEscape& e) {
e = (float)PeekDword(Adr(e));
});
Escape(pretty_globals, "Peek64f(x)", [=](EscEscape& e) {
e = (double)Peek64(Adr(e));
});
Escape(pretty_globals, "SizeOfPtr()", [=](EscEscape& e) {
e = win64 ? 8 : 4;
});
Escape(pretty_globals, "LOG(x)", [=](EscEscape& e) {
String txt;
if(e[0].IsArray())
txt = (String)e[0];
else
txt = e[0].ToString();
PutConsole("dbg! " + txt);
});
Escape(pretty_globals, "DeRef(x)", [=](EscEscape& e) {
EscValue v = e[0];
if(!v.IsMap())
e.ThrowError("paramater must be :value structure");
v.MapSet("address", (int64)PeekPtr(v.MapGet("address").GetInt64()));
e = v;
});
Escape(pretty_globals, "Field(x, id)", [=](EscEscape& e) {
EscValue v = e[0];
if(!v.IsMap())
e.ThrowError("paramater must be :value structure");
Pdb::Val val;
val.type = v.MapGet("type").GetInt();
val.address = v.MapGet("address").GetInt64();
val = GetAttr(val, e[1]);
SetVal(v, val);
e = v;
});
}
void Pdb::SetVal(EscValue& v, Pdb::Val val)
{
v.MapSet("address", (int64)val.address);
v.MapSet("type", val.type);
}
bool Pdb::PrettyScript(const String& type, Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p)
{
int ii = pretty_scripts.Find(type);
if(ii < 0)
return false;
LTIMESTOP("PrettyScript duration");
LLOG("PrettyScript " << type << ", from: " << from << ", count: " << count);
ArrayMap<String, EscValue> g = clone(pretty_globals);
Vector<EscValue> args;
SetVal(args.Add(), val);
EscValue& v = args.Add();
v.SetEmptyArray();
for(int i = 0; i < tparam.GetCount(); i++)
v.ArrayAdd(tparam[i]);
args.Add(from);
args.Add(count);
bool ret = false;
p.kind = CONTAINER;
p.separated_types = true;
Escape(g, "TEXT(x)", [&](EscEscape& e) {
ret = true;
p.kind = SINGLE_VALUE;
if(e[0].IsArray())
p.Text((String) e[0]);
else
if(e[0].IsNumber())
p.Text(AsString(e[0].GetNumber()));
else
e.ThrowError("invalid argument to 'Text'");
});
Escape(g, "ITEM_PTR(adr)", [&](EscEscape& e) {
ret = true;
p.data_ptr << e[0].GetInt64();
});
Escape(g, "ITEM_PTRS(adr, sz, from, items)", [&](EscEscape& e) {
ret = true;
adr_t adr = e[0].GetInt64();
int64 sz = e[1].GetInt();
int64 from = e[2].GetInt();
int64 items = e[3].GetInt();
for(int64 i = 0; i < items; i++)
p.data_ptr << adr + (i + from) * sz;
});
Escape(g, "ITEM_DEREF_PTRS(adr, from, items)", [&](EscEscape& e) {
ret = true;
adr_t adr = e[0].GetInt64();
int64 sz = win64 ? 8 : 4;
int64 from = e[1].GetInt();
int64 items = e[2].GetInt();
for(int64 i = 0; i < items; i++)
p.data_ptr << PeekPtr(adr + (i + from) * sz);
});
Escape(g, "ITEM_COUNT(x)", [&](EscEscape& e) {
ret = true;
p.data_count = e[0].GetInt64();
});
Escape(g, "ITEM_TYPE(x)", [&](EscEscape& e) {
ret = true;
p.data_type << (String)e[0];
});
Escape(g, "STRING()", [&](EscEscape& e) {
p.kind = TEXT;
ret = true;
});
Escape(g, "HAS_DATA()", [&](EscEscape& e) {
p.has_data = true;
ret = true;
});
Escape(g, "CHUNK(x)", [&](EscEscape& e) {
p.chunk = clamp(e[0].GetInt(), 1, 10000);
ret = true;
});
try {
Execute(g, NULL, pretty_scripts[ii], args, 2000);
}
catch(CParser::Error e) {
p.kind = SINGLE_VALUE;
p.text.Clear();
p.Text("ERR: ");
p.Text(e);
return true;
}
return ret;
}
#endif

View file

@ -26,7 +26,8 @@ void Pdb::PrettyTreeNode(int parent, Pdb::Val val, int64 from)
PrettyTreeNode(parent, MakeVal(p.data_type[0], p.data_ptr[0]), from); PrettyTreeNode(parent, MakeVal(p.data_type[0], p.data_ptr[0]), from);
} }
if(pp.kind == CONTAINER) { if(pp.kind == CONTAINER) {
int n = int(min(pp.data_count, from + 10000) - from); int chunk = pp.chunk;
int n = int(min(pp.data_count, from + chunk) - from);
Pretty p; Pretty p;
PrettyVal(val, from, n, p); PrettyVal(val, from, n, p);
@ -49,7 +50,7 @@ void Pdb::PrettyTreeNode(int parent, Pdb::Val val, int64 from)
for(int j = 0; j < p.data_type.GetCount(); j++) { for(int j = 0; j < p.data_type.GetCount(); j++) {
if(j) if(j)
result.Cat(": "); result.Cat(": ");
item[j].address = p.data_ptr[ii++]; item[j].address = p.data_ptr[p.separated_types ? j * n + i : ii++];
nv.val = item[j]; nv.val = item[j];
if(p.data_type.GetCount() > 1 && j == 0) if(p.data_type.GetCount() > 1 && j == 0)
nv.key = item[0]; nv.key = item[0];
@ -70,10 +71,11 @@ void Pdb::PrettyTreeNode(int parent, Pdb::Val val, int64 from)
int64 ii = n; int64 ii = n;
while(ii < pp.data_count) { while(ii < pp.data_count) {
nv.from = ii; nv.from = ii;
nv.chunk = chunk;
Visual v; Visual v;
v.Cat(String() << "[" << ii << ".." << min(pp.data_count - 1, ii + 9999) << "]", SGray); v.Cat(String() << "[" << ii << ".." << min(pp.data_count - 1, ii + chunk - 1) << "]", SGray);
tree.Add(parent, Null, RawToValue(nv), RawPickToValue(pick(v)), true); tree.Add(parent, Null, RawToValue(nv), RawPickToValue(pick(v)), true);
ii += 10000; ii += chunk;
} }
} }
} }
@ -136,14 +138,14 @@ void Pdb::TreeExpand(int node)
if(val.type < 0 || val.ref > 0) { if(val.type < 0 || val.ref > 0) {
int sz = SizeOfType(val.type); int sz = SizeOfType(val.type);
val.address += sz * nv.from; val.address += sz * nv.from;
for(int i = 0; i < (nv.from ? 10000 : 40); i++) { for(int i = 0; i < (nv.from ? nv.chunk : 40); i++) {
if(!TreeNodeExp(node, String() << "[" << i + nv.from << "]" , val, 0, SLtMagenta())) { if(!TreeNodeExp(node, String() << "[" << i + nv.from << "]" , val, 0, SLtMagenta())) {
SaveTree(); SaveTree();
return; return;
} }
val.address += sz; val.address += sz;
} }
TreeNode(node, "[more]", val0, nv.from ? nv.from + 10000 : 40); TreeNode(node, "[more]", val0, nv.from ? nv.from + nv.chunk : 40);
SaveTree(); SaveTree();
return; return;
} }

View file

@ -117,6 +117,8 @@ void Pdb::CatInt(Visual& result, int64 val, dword flags)
void Pdb::Visualise(Visual& result, Pdb::Val val, dword flags) void Pdb::Visualise(Visual& result, Pdb::Val val, dword flags)
{ {
DR_LOG("Visualise"); DR_LOG("Visualise");
if(!result.type)
result.type = val.type;
const int maxlen = 300; const int maxlen = 300;
if(result.length > maxlen) if(result.length > maxlen)
return; return;

View file

@ -153,8 +153,8 @@ String SelectInsertFile()
return SelectFileOpen( return SelectFileOpen(
"All files (*.*)\t*.*\n" "All files (*.*)\t*.*\n"
"Graphics files (*.png *.bmp *.jpg *.jpeg *.gif *.ico *.svg)\t*.png *.bmp *.jpg *.jpeg *.gif *.ico *.svg\n" "Graphics files (*.png *.bmp *.jpg *.jpeg *.gif *.ico *.svg)\t*.png *.bmp *.jpg *.jpeg *.gif *.ico *.svg\n"
"Source files (*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.py *.pyc *.pyd *.pyo *.iml *.java *.lng *.sch *.usc *.rc *.brc *.upt *.witz *.js)\t" "Source files (*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.py *.pyc *.pyd *.pyo *.iml *.java *.lng *.sch *.usc *.dbg *.rc *.brc *.upt *.witz *.js)\t"
"*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.py *.pyc *.pyd *.pyo *.iml *.java *.lng *.sch *.usc *.rc *.brc *.upt *.witz *.js\n" "*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.py *.pyc *.pyd *.pyo *.iml *.java *.lng *.sch *.usc *.dbg *.rc *.brc *.upt *.witz *.js\n"
"Web files (*.js *.css *.html *.htm *.htmls)\t*.js *.css *.html *.htm *.htmls\n" "Web files (*.js *.css *.html *.htm *.htmls)\t*.js *.css *.html *.htm *.htmls\n"
"Data files (*.csv *.xml *.json)\t*.csv *.xml *.json\n" "Data files (*.csv *.xml *.json)\t*.csv *.xml *.json\n"
"Text files (*.txt *.log *.info)\t*.txt *.log *.info\n" "Text files (*.txt *.log *.info)\t*.txt *.log *.info\n"

View file

@ -23,6 +23,7 @@ NewPackageFileWindow::NewPackageFileWindow()
Type("iml", "Image file (icons)"); Type("iml", "Image file (icons)");
Type("icpp", "Initialization C++ source file"); Type("icpp", "Initialization C++ source file");
Type("usc", "Escape script file (scripting TheIDE)"); Type("usc", "Escape script file (scripting TheIDE)");
Type("dbg", "Debugger pretty printing script file");
Type("witz", "Skylark template file (web framework files)"); Type("witz", "Skylark template file (web framework files)");
Type("qtf", "U++ rich text file"); Type("qtf", "U++ rich text file");
Type("t", "Translation file"); Type("t", "Translation file");

View file

@ -94,7 +94,6 @@ IMAGE_ID(console__DARK)
IMAGE_ID(browser) IMAGE_ID(browser)
IMAGE_ID(errors__UHD) IMAGE_ID(errors__UHD)
IMAGE_ID(errors) IMAGE_ID(errors)
IMAGE_ID(debug)
IMAGE_ID(miniclose) IMAGE_ID(miniclose)
IMAGE_ID(miniclose1) IMAGE_ID(miniclose1)
IMAGE_ID(GUI) IMAGE_ID(GUI)
@ -3899,123 +3898,103 @@ IMAGE_DATA(81,212,200,5,0,0,0,0,0,0,0,0,15,204,31,139,70,252,87,0,0,0,0,0,0,0,0,
IMAGE_END_DATA(864, 5) IMAGE_END_DATA(864, 5)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,90,11,124,76,87,26,191,9,214,99,73,226,81,143,54,36,36,13,34,82,33,37,73,181,136,118,187,75,19) IMAGE_DATA(120,156,237,90,11,80,21,215,25,62,160,54,209,170,224,179,117,138,202,68,163,17,173,141,19,91,193,166,19,171,237,116)
IMAGE_DATA(149,205,8,54,132,40,245,106,9,37,165,69,164,82,180,9,219,54,4,75,144,138,199,160,20,89,213,118,189,242,107,66) IMAGE_DATA(170,149,68,135,43,212,18,241,81,77,212,76,19,116,212,154,70,69,27,170,49,98,38,9,226,163,209,88,27,163,94,51)
IMAGE_DATA(169,118,9,9,65,73,74,74,101,37,49,121,200,99,190,189,223,185,185,147,155,201,60,238,204,220,153,9,115,254,243,251) IMAGE_DATA(198,168,52,49,182,17,101,2,26,31,73,5,5,68,124,128,138,47,42,194,229,13,247,239,254,255,178,151,189,239,189,123)
IMAGE_DATA(255,230,220,115,207,119,191,115,254,223,249,206,61,51,247,58,57,49,78,140,84,136,143,143,7,83,105,44,132,246,39,79) IMAGE_DATA(247,62,116,207,183,243,205,61,247,236,249,247,63,231,251,207,127,246,236,221,27,30,206,194,153,86,88,183,110,29,120,75)
IMAGE_DATA(158,36,20,150,133,212,103,47,149,127,125,253,16,246,197,18,227,215,214,55,169,253,203,100,50,144,203,229,58,251,34,172) IMAGE_DATA(181,144,219,103,101,101,17,229,101,57,221,217,107,229,223,93,63,228,125,241,199,248,157,245,77,107,255,6,131,1,140,70)
IMAGE_DATA(83,183,71,219,224,224,96,73,253,171,247,65,189,44,213,248,77,161,100,137,104,44,112,49,128,101,245,170,100,44,65,64) IMAGE_DATA(163,203,190,200,235,108,237,209,54,54,54,86,83,255,182,125,176,45,107,53,126,111,168,89,34,170,5,46,6,176,194,170)
IMAGE_DATA(153,154,9,232,160,12,3,145,149,149,69,4,194,111,60,86,187,6,123,166,33,249,107,240,182,60,240,184,246,156,40,123) IMAGE_DATA(202,32,16,100,52,216,152,128,11,26,48,16,249,249,249,36,16,126,226,119,155,107,8,103,236,41,93,67,178,149,128,223)
IMAGE_DATA(77,48,196,222,68,255,166,142,95,155,254,50,65,89,151,254,218,0,49,49,49,218,226,169,15,178,161,67,135,146,164,193) IMAGE_DATA(91,207,41,178,119,4,79,236,189,244,239,237,248,157,233,111,144,149,93,233,239,12,144,146,146,226,44,158,238,96,24,51)
IMAGE_DATA(111,35,236,97,219,182,109,196,30,191,245,244,83,171,111,158,6,246,65,229,155,167,1,125,104,224,219,192,62,16,205,53) IMAGE_DATA(102,12,37,13,126,170,176,135,237,219,183,147,61,126,186,233,167,83,223,18,61,236,131,197,183,68,15,250,96,231,219,195)
IMAGE_DATA(217,11,98,161,211,94,4,37,197,8,87,198,85,234,107,218,36,22,4,59,38,120,118,98,252,172,225,187,115,187,102,206) IMAGE_DATA(62,144,230,142,236,101,177,112,105,175,128,154,98,124,36,139,212,250,154,186,196,162,216,176,180,168,31,176,232,64,248,254)
IMAGE_DATA(183,118,245,133,245,111,218,103,88,195,255,186,57,221,228,249,7,3,225,220,50,23,24,218,195,206,208,197,194,36,248,60) IMAGE_DATA(97,247,14,17,87,119,253,24,50,94,8,205,9,132,255,13,175,246,51,150,237,31,11,167,86,244,135,49,79,132,120,186)
IMAGE_DATA(223,202,15,199,94,148,149,4,119,142,77,133,189,225,246,121,150,244,255,213,114,183,12,28,123,77,101,49,84,62,188,12) IMAGE_DATA(88,120,133,17,79,118,138,198,177,87,230,111,132,27,135,103,195,222,196,208,82,127,250,223,183,114,64,14,142,189,165,241)
IMAGE_DATA(89,235,254,6,179,252,237,18,44,225,123,196,32,71,25,142,189,172,224,7,149,255,71,183,254,3,167,166,55,129,103,254) IMAGE_DATA(1,52,222,63,15,249,27,126,11,243,99,66,210,252,225,123,252,168,48,3,142,189,182,252,107,139,255,234,171,255,129,99)
IMAGE_DATA(204,56,155,219,127,102,98,175,188,187,199,194,64,89,253,136,99,101,1,97,222,55,113,16,243,154,189,220,156,190,167,140) IMAGE_DATA(47,183,131,94,223,103,17,190,246,159,155,254,84,233,205,195,241,96,110,174,22,217,88,78,44,253,34,21,82,126,29,106)
IMAGE_DATA(232,16,69,198,126,247,52,241,93,83,145,15,53,229,57,196,127,205,227,66,200,124,191,43,152,43,31,249,124,43,252,105) IMAGE_DATA(244,165,239,89,227,123,38,211,216,111,30,39,223,45,245,101,208,82,87,72,254,91,26,42,32,247,207,125,193,87,249,40)
IMAGE_DATA(37,176,206,136,191,199,247,183,65,197,221,85,164,172,172,124,0,247,206,38,155,45,31,63,12,239,146,128,254,171,30,229) IMAGE_DATA(229,91,197,153,213,32,56,35,127,13,119,182,67,253,205,53,84,54,55,222,131,219,39,183,249,44,31,223,72,236,147,134)
IMAGE_DATA(17,255,213,101,55,160,60,127,17,84,20,124,2,149,69,39,136,127,100,230,194,214,74,153,183,93,148,148,190,249,124,123) IMAGE_DATA(254,155,170,75,201,127,115,109,9,212,149,45,133,250,242,181,208,88,121,148,252,35,115,23,119,54,27,134,135,36,107,233)
IMAGE_DATA(112,46,150,140,21,89,246,235,91,245,88,85,242,19,87,255,251,37,146,143,82,206,69,85,190,213,250,126,92,120,16,114) IMAGE_DATA(91,202,183,123,167,86,209,88,145,181,87,254,104,197,166,170,51,98,253,173,60,202,71,45,231,162,37,223,90,125,55,84)
IMAGE_DATA(15,142,82,94,72,12,4,228,47,91,95,87,150,231,199,168,206,231,238,158,37,89,62,242,249,86,156,157,12,202,154,114) IMAGE_DATA(236,135,226,253,207,155,207,166,143,5,228,119,31,254,198,92,87,150,98,57,95,188,123,190,102,249,40,229,219,131,130,109)
IMAGE_DATA(162,123,217,173,40,216,21,234,161,140,193,155,63,203,143,93,29,148,138,220,8,54,54,23,64,89,85,8,229,247,47,193) IMAGE_DATA(96,110,169,35,221,107,175,38,195,174,184,65,230,20,188,249,11,252,91,100,87,179,169,56,73,136,205,89,48,55,85,64)
IMAGE_DATA(15,81,14,146,228,35,230,219,109,185,47,128,242,49,33,206,57,197,245,137,13,253,95,13,39,253,66,255,200,203,235,95) IMAGE_DATA(221,157,60,248,58,185,171,38,249,136,249,118,205,56,18,192,220,64,196,57,103,186,52,205,222,127,81,34,245,11,253,35)
IMAGE_DATA(50,121,46,242,249,86,156,155,202,174,53,119,161,74,113,150,245,61,9,20,215,38,128,60,194,83,229,63,193,171,131,178) IMAGE_DATA(207,103,252,220,235,185,40,229,219,131,226,157,194,90,115,19,154,76,39,5,223,211,193,116,241,69,48,38,69,89,252,167)
IMAGE_DATA(36,59,12,74,114,198,145,216,240,113,48,37,31,49,223,112,236,119,210,70,177,122,158,33,254,203,110,205,37,190,145,223) IMAGE_DATA(13,235,105,174,42,136,135,170,194,223,83,108,164,56,120,147,143,152,111,56,246,27,153,207,11,122,158,32,255,181,87,95)
IMAGE_DATA(46,243,7,222,255,174,209,238,156,127,150,165,55,38,145,24,161,255,135,57,199,140,190,55,240,249,86,254,251,73,86,207) IMAGE_DATA(35,223,200,47,87,196,128,228,127,215,164,129,162,127,129,53,37,211,41,70,232,255,126,225,97,213,247,6,41,223,234,110)
IMAGE_DATA(251,100,92,138,220,137,172,239,112,194,159,217,57,199,251,255,106,230,11,172,255,49,128,44,205,13,103,251,48,89,165,193) IMAGE_DATA(101,9,122,222,161,113,153,138,167,9,190,19,137,223,10,115,78,242,191,111,222,79,4,255,83,0,89,83,156,40,244,97)
IMAGE_DATA(229,13,163,193,208,124,228,215,154,130,111,195,136,239,154,242,92,40,173,213,157,247,159,253,77,136,202,127,250,234,151,161) IMAGE_DATA(134,69,131,243,155,38,129,167,249,40,173,53,229,95,198,147,239,150,186,98,168,105,213,93,242,95,240,197,100,139,255,236)
IMAGE_DATA(158,127,118,126,224,154,96,108,62,98,190,161,255,202,98,78,199,242,223,150,67,217,245,112,66,222,127,209,213,201,16,211) IMAGE_DATA(183,126,1,86,254,133,249,129,107,130,218,124,196,124,67,255,141,15,68,29,235,174,175,132,218,75,137,68,201,127,101,209)
IMAGE_DATA(196,142,244,225,236,166,64,101,201,21,25,32,75,175,134,18,98,172,48,14,85,138,124,184,182,115,154,232,124,228,215,154) IMAGE_DATA(12,72,105,23,66,125,56,185,101,172,185,234,130,1,144,53,69,113,68,140,21,198,161,201,84,6,23,63,158,163,56,31)
IMAGE_DATA(194,243,113,236,216,31,145,113,96,110,169,251,191,245,125,40,201,253,204,149,1,240,211,134,97,160,238,31,181,194,92,65) IMAGE_DATA(165,181,166,226,116,170,48,246,106,26,7,230,150,173,255,171,255,142,163,220,207,93,61,26,206,108,250,37,216,250,71,173)
IMAGE_DATA(255,200,211,179,154,41,197,204,69,156,115,220,90,83,64,88,122,115,26,185,86,89,238,120,66,197,181,127,16,30,137,126) IMAGE_DATA(48,87,208,63,242,248,252,14,102,37,115,17,231,156,184,214,148,19,107,46,207,161,107,213,22,79,37,154,46,254,129,120)
IMAGE_DATA(81,53,255,214,251,119,97,125,135,18,150,230,132,16,42,174,188,201,182,27,203,246,255,56,171,67,14,220,59,179,85,111) IMAGE_DATA(104,201,79,45,243,47,35,166,143,224,59,142,88,83,56,153,104,186,240,130,208,46,65,232,255,87,130,14,133,112,251,196)
IMAGE_DATA(62,242,249,134,251,26,244,253,248,126,178,106,190,27,229,255,74,8,27,135,57,196,63,198,241,194,170,65,90,247,106,124) IMAGE_DATA(135,110,243,81,202,55,220,215,160,239,134,59,219,44,243,93,149,255,11,147,133,56,188,74,254,49,142,103,215,140,114,186)
IMAGE_DATA(190,229,31,28,206,222,91,21,100,45,195,92,47,101,199,32,228,163,156,48,194,67,243,188,85,254,215,13,234,8,138,171) IMAGE_DATA(87,147,242,173,108,255,56,225,222,106,162,181,12,115,189,70,24,131,156,213,133,241,196,3,11,134,91,252,111,24,213,27)
IMAGE_DATA(97,132,165,57,163,9,21,217,193,132,101,185,145,36,119,112,30,23,93,251,183,214,124,84,229,219,189,76,226,191,236,246) IMAGE_DATA(76,69,241,196,154,194,73,68,83,65,44,177,182,120,38,229,14,206,227,202,139,255,114,154,143,150,124,187,157,75,254,107)
IMAGE_DATA(124,146,71,152,207,245,120,61,130,144,172,67,2,150,222,136,224,120,125,66,45,195,9,203,110,76,129,178,155,83,160,90) IMAGE_DATA(175,45,164,60,194,124,182,226,165,36,34,173,67,50,214,148,36,137,188,244,98,43,19,137,181,37,179,160,246,242,44,104)
IMAGE_DATA(113,158,244,225,204,7,46,13,242,145,207,183,223,142,4,17,223,132,85,15,107,249,191,250,172,126,88,159,13,218,21,170) IMAGE_DATA(54,157,166,62,156,248,75,127,187,124,148,242,237,250,161,137,228,155,216,116,191,149,255,179,102,243,125,107,218,181,171,176)
IMAGE_DATA(241,1,199,234,18,66,204,71,92,23,133,249,136,123,105,18,247,203,91,204,238,31,231,129,112,175,198,231,27,207,95,119) IMAGE_DATA(225,61,145,205,85,68,204,71,92,23,229,249,136,123,105,138,251,249,173,62,247,143,243,64,190,87,147,242,77,226,149,143)
IMAGE_DATA(244,33,188,177,189,55,225,245,228,158,132,215,254,245,60,225,213,13,110,132,87,190,112,37,188,20,255,28,225,207,113,29) IMAGE_DATA(134,18,75,254,49,132,120,105,219,96,226,197,191,63,73,44,218,52,128,120,225,253,72,98,222,186,31,17,191,77,237,77)
IMAGE_DATA(9,207,47,109,75,120,54,186,13,97,70,84,75,194,244,217,127,34,196,125,42,79,204,71,126,173,177,134,127,107,253,118) IMAGE_DATA(60,189,188,27,241,228,146,46,196,156,228,142,196,236,87,190,71,196,125,170,68,204,71,105,173,9,132,255,64,61,59,5)
IMAGE_DATA(106,76,176,151,242,49,129,86,39,246,76,147,244,205,62,89,135,215,120,165,99,217,80,251,213,239,186,173,43,206,138,131) IMAGE_DATA(19,66,181,124,77,224,212,73,40,107,151,253,193,136,252,131,235,135,101,99,217,83,251,183,254,52,96,195,131,252,84,168)
IMAGE_DATA(162,255,198,194,196,17,29,103,24,98,235,212,166,105,187,27,7,7,149,240,63,150,46,167,250,20,58,181,110,210,78,172) IMAGE_DATA(252,239,42,152,54,190,247,92,79,108,195,187,180,239,94,178,127,84,149,244,176,116,126,231,136,138,240,206,237,186,43,181)
IMAGE_DATA(253,142,216,222,71,74,114,18,85,63,118,138,46,173,133,184,169,206,235,197,216,246,233,209,170,223,221,180,65,53,184,97) IMAGE_DATA(255,104,213,144,67,85,133,233,150,135,157,202,188,119,32,117,118,68,134,18,219,161,79,116,122,250,102,230,168,22,220,176)
IMAGE_DATA(127,124,47,17,42,255,72,38,155,244,155,187,188,171,61,93,90,244,211,103,127,106,131,119,150,226,215,61,36,105,115,54) IMAGE_DATA(55,220,78,135,198,187,219,104,147,126,121,215,240,230,168,254,143,63,237,206,254,216,166,225,249,166,43,123,40,105,11,63)
IMAGE_DATA(119,35,172,46,205,98,55,163,41,176,231,67,215,116,93,182,163,135,180,31,95,120,38,138,108,26,113,195,200,219,227,70) IMAGE_DATA(232,71,108,174,201,23,54,163,59,96,207,27,145,217,174,108,39,61,215,99,106,197,137,100,218,52,226,134,81,178,199,141)
IMAGE_DATA(17,23,134,59,223,77,135,55,6,182,25,175,201,182,85,11,251,214,89,59,125,30,240,27,47,188,1,241,246,184,201,170) IMAGE_DATA(34,46,12,55,142,188,12,191,251,89,151,169,142,108,59,61,30,218,57,255,227,17,247,164,141,23,222,128,36,123,220,100)
IMAGE_DATA(126,148,9,138,252,147,112,122,149,235,111,173,154,219,181,86,183,223,24,237,46,47,186,24,79,22,220,138,187,137,228,134) IMAGE_DATA(53,87,231,130,169,44,11,142,175,137,188,222,233,177,144,206,182,246,155,151,12,52,86,158,91,71,11,110,253,205,116,186)
IMAGE_DATA(93,103,207,109,82,106,42,110,66,193,201,37,48,119,164,227,74,161,173,107,151,230,238,183,191,26,80,133,55,255,170,146) IMAGE_DATA(97,183,217,139,155,148,150,250,203,80,158,181,12,94,155,16,182,90,110,27,217,231,177,129,215,246,61,211,132,55,255,166)
IMAGE_DATA(116,213,77,31,127,100,252,113,46,76,117,147,175,40,72,36,55,246,115,31,117,124,236,220,206,222,157,183,79,251,180,247) IMAGE_DATA(170,108,203,77,31,31,50,238,158,138,183,220,228,235,203,211,233,198,126,234,175,189,27,34,186,135,14,148,236,51,223,30)
IMAGE_DATA(143,197,217,91,200,13,180,226,206,167,170,155,166,202,127,237,77,18,111,144,120,99,188,115,98,21,172,145,181,60,130,182) IMAGE_DATA(242,205,131,130,173,116,3,173,191,241,182,229,166,105,241,223,122,147,196,27,36,222,24,111,28,93,3,235,13,29,15,161)
IMAGE_DATA(195,7,56,142,252,253,68,36,89,128,43,31,166,213,187,233,149,100,143,101,109,199,170,110,114,228,230,118,45,146,140,241) IMAGE_DATA(237,184,103,194,38,220,58,58,147,22,224,198,251,153,86,55,189,170,130,4,193,54,193,114,147,163,155,219,197,153,52,198)
IMAGE_DATA(226,23,175,130,191,139,221,200,31,55,245,201,47,205,63,46,88,192,213,22,109,85,157,96,113,102,23,229,63,46,236,133) IMAGE_DATA(115,239,255,10,98,250,135,76,248,102,203,208,178,154,178,175,100,11,184,205,162,109,169,147,45,206,194,162,124,247,236,94)
IMAGE_DATA(47,199,218,231,172,157,221,53,133,95,4,249,197,143,95,244,248,197,142,95,228,248,197,141,95,212,22,13,97,82,244,205) IMAGE_DATA(248,103,66,104,225,59,175,244,221,33,45,130,210,226,39,45,122,210,98,39,45,114,210,226,38,45,106,75,159,99,59,220)
IMAGE_DATA(39,125,16,189,24,12,57,26,0,142,125,29,134,97,185,253,160,182,33,1,59,125,203,117,181,111,209,165,133,155,240,248) IMAGE_DATA(205,39,183,232,40,28,32,251,193,113,227,198,141,128,148,183,145,215,201,207,57,171,115,100,239,232,187,109,189,187,246,74)
IMAGE_DATA(149,67,126,224,185,216,227,144,67,187,86,61,58,5,118,152,58,104,139,79,137,46,251,161,172,63,231,144,46,239,241,199) IMAGE_DATA(191,187,243,227,106,124,174,198,229,106,124,150,58,91,65,153,227,223,116,229,117,150,223,143,93,212,89,253,206,236,232,187)
IMAGE_DATA(1,187,95,172,24,152,220,191,48,48,164,111,106,208,114,191,114,255,205,253,149,47,12,118,89,173,205,62,96,183,111,209) IMAGE_DATA(173,157,147,243,204,81,59,119,231,221,249,113,114,61,37,227,114,175,79,103,225,144,189,200,82,242,227,185,13,83,20,82)
IMAGE_DATA(75,251,6,86,96,217,63,197,183,152,181,7,255,84,95,240,223,238,11,75,79,207,131,211,249,7,224,253,248,8,112,243) IMAGE_DATA(93,123,165,144,183,119,247,6,217,182,125,176,93,31,129,47,59,36,58,250,238,109,123,165,253,241,136,222,79,38,207,136)
IMAGE_DATA(238,184,64,147,189,163,87,155,97,131,247,14,132,128,173,190,69,35,247,189,6,251,179,146,225,155,236,29,176,38,61,14) IMAGE_DATA(175,174,101,111,11,221,82,122,203,232,15,27,4,246,79,203,235,123,218,23,71,250,120,26,108,205,38,135,151,147,73,45)
IMAGE_DATA(250,174,237,5,17,71,71,129,252,76,18,248,36,120,65,191,213,125,192,59,206,19,2,118,249,22,183,232,212,92,53,110) IMAGE_DATA(128,127,15,216,119,121,64,149,124,87,227,79,25,20,63,149,117,232,96,96,33,33,234,95,121,244,234,149,198,134,13,83)
IMAGE_DATA(255,212,1,202,33,169,254,176,251,194,63,97,197,177,72,248,224,208,88,88,120,104,18,188,146,228,7,125,87,247,134,200) IMAGE_DATA(246,218,38,44,44,217,206,215,196,137,165,44,54,214,246,39,157,8,234,151,45,208,118,213,42,96,35,71,230,80,185,125)
IMAGE_DATA(29,97,16,240,170,107,174,170,207,123,94,172,124,73,62,16,220,103,118,79,241,75,26,112,127,204,254,55,33,245,124,2) IMAGE_DATA(123,3,91,180,8,216,194,133,64,101,180,235,219,215,72,109,156,141,41,38,38,135,101,100,0,75,76,4,54,99,6,48)
IMAGE_DATA(196,164,77,132,249,251,71,193,132,47,3,97,156,124,52,236,57,183,9,214,157,88,3,222,31,245,134,94,47,119,57,32) IMAGE_DATA(124,199,142,156,51,71,172,195,115,163,71,59,127,172,199,235,38,37,1,59,120,80,180,193,63,231,32,177,140,117,211,166)
IMAGE_DATA(236,183,87,76,175,76,191,237,3,192,47,121,0,236,251,57,17,150,30,9,135,121,251,130,97,194,246,97,16,182,51,24) IMAGE_DATA(57,247,141,192,126,38,36,0,155,59,23,216,241,227,192,118,239,22,137,101,172,155,58,21,88,215,174,214,63,247,226,245)
IMAGE_DATA(54,156,138,131,249,187,195,96,227,241,143,161,239,82,79,232,53,223,93,209,182,191,227,59,194,107,12,76,242,169,24,183) IMAGE_DATA(122,244,72,99,175,191,14,108,201,18,96,169,169,192,222,123,79,180,43,40,16,137,101,172,195,115,139,23,3,181,141,138)
IMAGE_DATA(39,4,226,191,127,7,230,202,131,32,124,107,32,132,166,188,1,235,79,124,4,239,124,57,26,166,108,121,157,181,95,13) IMAGE_DATA(50,146,45,106,57,120,176,145,77,153,82,202,150,46,5,246,230,155,192,222,125,23,216,158,61,109,246,88,198,58,60,135)
IMAGE_DATA(158,209,30,208,115,158,155,178,231,92,55,240,152,221,67,245,183,181,239,218,126,165,211,247,71,194,103,199,163,97,194,182) IMAGE_DATA(109,176,45,218,216,198,1,251,143,186,225,120,143,28,1,182,115,167,72,44,99,221,232,209,24,75,231,227,199,254,196,197)
IMAGE_DATA(87,225,239,91,71,66,252,145,247,97,102,74,48,68,110,126,29,226,190,142,130,57,219,102,66,207,40,119,176,111,110,79) IMAGE_DATA(1,251,252,115,113,188,105,105,34,177,140,117,120,206,149,126,24,191,45,91,128,52,156,53,11,216,202,149,34,177,140,117)
IMAGE_DATA(22,102,39,31,199,15,121,251,110,65,206,43,251,199,247,133,216,180,104,8,77,14,130,248,195,139,96,230,246,32,152,180) IMAGE_DATA(120,174,95,63,199,243,17,175,139,177,198,107,72,243,103,193,2,32,98,25,235,240,28,182,113,220,135,136,86,182,97,217)
IMAGE_DATA(233,47,176,226,96,20,248,47,25,8,30,239,186,129,67,239,54,111,105,139,191,199,52,183,83,110,239,185,194,150,147,137) IMAGE_DATA(50,32,218,250,81,154,83,61,123,166,17,213,66,244,227,242,167,249,239,20,47,6,161,161,24,108,245,139,65,183,110,202)
IMAGE_DATA(16,123,96,54,188,205,94,103,197,193,185,176,120,231,2,120,126,86,15,112,159,222,29,122,68,186,84,56,122,57,188,167) IMAGE_DATA(23,131,142,29,147,237,124,205,158,93,202,94,122,201,126,49,16,251,101,139,104,150,157,13,236,217,103,115,168,28,18,98)
IMAGE_DATA(237,26,61,38,184,156,242,94,228,9,115,182,79,135,249,41,179,192,59,202,147,216,57,244,108,253,86,139,206,205,135,185) IMAGE_DATA(96,159,126,10,236,147,79,128,202,104,23,17,97,164,54,206,198,52,118,108,14,187,118,13,216,218,181,226,228,199,7,9)
IMAGE_DATA(140,115,46,114,13,239,10,77,91,55,113,211,118,141,231,254,218,121,187,199,172,238,213,238,51,186,131,219,52,87,120,246) IMAGE_DATA(228,230,205,98,29,158,27,55,206,213,111,124,209,108,253,122,241,175,89,104,115,238,156,72,44,99,29,78,108,215,201,96)
IMAGE_DATA(141,78,63,104,107,171,15,207,142,236,156,217,125,98,55,157,254,244,161,91,216,115,149,206,33,207,22,107,60,217,146,253) IMAGE_DATA(160,132,219,186,85,108,223,220,44,18,203,88,183,122,53,180,234,100,237,51,44,44,141,146,229,192,1,96,185,185,192,138)
IMAGE_DATA(128,224,233,67,82,82,18,32,133,109,132,117,194,115,218,234,52,217,107,58,86,175,215,215,94,236,177,62,63,186,198,167) IMAGE_DATA(139,219,236,164,235,96,29,158,251,236,51,49,177,112,49,64,91,212,114,208,32,163,48,233,75,89,102,38,176,156,28,96)
IMAGE_DATA(107,92,186,198,167,170,83,23,148,209,252,128,71,88,167,122,152,164,163,174,222,67,39,77,199,234,118,90,206,51,154,218) IMAGE_DATA(69,69,192,90,90,218,236,177,140,117,120,14,219,96,91,180,177,141,3,246,31,117,147,198,91,87,39,82,210,3,23,119)
IMAGE_DATA(233,59,175,207,143,150,235,137,25,151,126,125,90,179,31,193,83,109,49,79,210,212,24,35,146,198,181,23,11,97,123,125) IMAGE_DATA(215,243,41,154,45,95,222,54,222,188,60,145,146,30,120,206,149,61,198,175,188,92,92,180,210,211,129,29,59,38,18,203)
IMAGE_DATA(175,147,168,183,111,108,215,71,224,147,79,158,154,142,77,109,47,182,63,6,209,244,201,100,24,241,61,22,193,171,3,122) IMAGE_DATA(88,135,231,156,45,6,120,93,140,53,94,67,154,63,123,247,2,81,156,63,209,116,78,124,184,84,182,24,224,34,136,180)
IMAGE_DATA(201,191,114,96,9,27,4,246,79,202,235,27,218,23,77,250,24,26,108,201,38,135,137,147,201,88,0,61,182,218,177,48) IMAGE_DATA(245,163,52,167,194,195,211,136,234,225,118,49,112,244,79,78,95,194,221,191,68,221,65,110,99,251,239,70,111,251,163,166)
IMAGE_DATA(160,98,142,141,241,39,14,162,255,162,105,214,76,198,216,217,25,255,252,243,153,103,18,24,47,47,113,207,112,29,29,163) IMAGE_DATA(127,246,91,186,124,6,116,224,167,193,229,30,223,241,245,148,28,254,178,55,186,29,131,253,248,229,182,207,9,156,39,112)
IMAGE_DATA(26,248,10,10,202,99,130,131,213,255,223,117,38,253,82,7,218,198,198,2,227,235,155,65,202,77,155,202,152,5,11,128) IMAGE_DATA(133,11,26,28,216,59,179,77,145,81,178,141,178,138,83,155,173,161,181,141,212,63,247,182,109,241,52,56,240,41,239,199)
IMAGE_DATA(153,63,31,72,25,237,186,118,149,147,54,218,198,228,239,159,193,172,95,15,76,120,56,48,147,39,3,131,47,220,32,167) IMAGE_DATA(60,135,182,109,246,202,232,215,63,185,41,193,83,211,25,30,28,28,28,28,28,28,186,132,187,77,26,135,182,240,100,211)
IMAGE_DATA(77,227,234,240,92,64,128,246,255,248,240,186,17,17,192,28,62,204,217,224,155,122,72,44,99,221,196,137,218,125,35,176) IMAGE_DATA(196,161,13,188,127,65,193,161,22,158,232,202,227,160,45,188,213,143,199,64,61,180,212,203,219,56,232,45,118,190,26,175)
IMAGE_DATA(159,99,199,2,51,99,6,48,167,79,3,179,123,55,71,44,99,221,248,241,192,56,56,212,127,246,131,215,107,223,62,129) IMAGE_DATA(218,24,232,73,127,95,143,85,77,46,232,69,127,127,142,83,105,12,244,114,239,8,196,24,213,236,167,30,69,4,122,124)
IMAGE_DATA(89,188,24,152,232,104,96,226,226,128,249,252,115,206,46,59,155,35,150,177,14,207,45,92,8,164,173,167,167,156,216,162) IMAGE_DATA(142,252,235,101,239,20,12,99,211,251,115,92,48,140,75,207,250,7,3,184,254,129,131,222,215,159,64,194,19,237,185,254)
IMAGE_DATA(150,61,123,202,153,49,99,242,152,69,139,128,89,177,2,152,207,62,3,102,207,158,58,123,44,99,29,158,195,54,216,22) IMAGE_DATA(218,194,83,237,185,254,218,65,141,246,92,127,109,160,86,123,174,191,247,240,70,123,53,250,123,235,239,81,137,191,191,199)
IMAGE_DATA(109,212,227,128,253,71,221,112,188,223,125,7,76,106,42,71,44,99,93,64,0,198,82,251,248,177,63,161,161,192,28,61) IMAGE_DATA(175,181,238,15,123,44,252,57,102,127,104,255,176,197,192,95,227,181,110,175,245,241,112,199,192,215,240,173,246,206,227,192)
IMAGE_DATA(202,141,55,33,129,35,150,177,14,207,233,210,15,227,183,105,19,16,13,167,76,1,102,249,114,142,88,198,58,60,215,173) IMAGE_DATA(33,194,63,218,59,206,3,189,195,127,218,59,143,65,48,48,80,224,250,235,77,255,224,140,65,160,16,24,253,131,225,224)
IMAGE_DATA(155,230,249,136,215,197,88,227,53,248,249,51,111,30,16,98,25,235,240,28,182,209,220,7,231,90,214,97,201,18,32,84) IMAGE_DATA(250,115,253,185,254,92,127,174,63,215,159,235,207,245,215,219,193,245,231,250,115,253,185,254,92,127,174,63,215,159,235,175)
IMAGE_DATA(247,35,54,167,58,116,72,32,52,22,156,31,157,207,233,126,17,189,24,216,219,99,176,141,95,12,218,182,21,191,24,180) IMAGE_DATA(183,131,235,207,245,231,250,115,253,93,235,242,176,51,248,245,15,188,70,129,140,65,224,244,15,188,46,250,213,95,238,55)
IMAGE_DATA(108,25,213,192,215,212,169,121,204,219,111,55,92,12,184,126,169,195,143,73,79,7,102,240,224,12,82,182,179,147,49,7) IMAGE_DATA(229,17,164,242,24,248,95,255,71,93,251,96,214,95,15,218,59,142,65,224,245,215,147,246,193,166,191,222,180,15,38,253)
IMAGE_DATA(14,0,179,111,31,144,50,218,57,59,203,73,27,109,99,10,12,204,96,110,223,6,230,147,79,184,201,143,63,36,144,27) IMAGE_DATA(245,168,125,176,232,207,181,15,220,254,147,107,239,78,123,223,233,207,181,87,162,189,111,244,231,218,43,213,94,123,253,185)
IMAGE_DATA(55,114,117,120,110,248,112,93,127,248,251,49,107,214,112,239,105,162,205,197,139,28,177,140,117,56,177,117,39,131,140,36) IMAGE_DATA(246,158,104,175,173,254,92,123,79,181,215,78,127,174,189,26,237,181,209,159,107,175,86,123,239,245,231,218,123,163,189,119)
IMAGE_DATA(220,150,45,92,251,234,106,142,88,198,186,149,43,161,86,167,250,62,29,29,19,72,178,28,58,4,76,102,38,48,185,185) IMAGE_DATA(250,115,237,189,213,94,189,254,92,123,45,180,87,167,191,30,181,103,118,212,10,158,233,207,181,215,82,123,207,244,231,218)
IMAGE_DATA(117,118,252,117,176,14,207,125,253,53,151,88,184,24,160,45,106,233,225,33,103,39,125,30,147,150,6,76,70,6,48,87) IMAGE_DATA(251,2,202,244,231,218,251,10,238,245,231,218,251,18,174,245,231,218,251,26,206,245,231,218,251,3,142,245,231,218,251,11)
IMAGE_DATA(175,2,83,83,83,103,143,101,172,195,115,216,6,219,162,141,122,28,176,255,168,27,63,222,242,114,142,188,30,184,184,235) IMAGE_DATA(246,250,115,237,253,9,107,253,185,246,254,134,163,231,139,192,107,162,15,237,29,235,31,104,77,244,163,189,189,254,129,214)
IMAGE_DATA(158,79,126,204,210,165,117,227,189,116,137,35,175,7,158,211,101,143,241,43,40,224,22,173,196,68,96,78,157,226,136,101) IMAGE_DATA(68,95,218,51,155,126,232,145,129,70,160,199,175,103,237,17,129,214,64,175,186,115,112,112,112,112,112,112,112,112,112,112)
IMAGE_DATA(172,195,115,218,22,3,188,46,198,26,175,193,207,159,189,123,129,144,155,63,126,228,28,247,227,82,220,98,128,139,32,82) IMAGE_DATA(112,112,112,112,112,112,232,0,255,7,184,11,129,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_DATA(221,143,216,156,114,114,74,32,52,30,122,23,3,77,175,117,155,19,250,94,25,215,7,161,141,250,171,206,166,246,199,152) IMAGE_END_DATA(3072, 13)
IMAGE_DATA(254,53,220,210,101,49,64,62,248,45,211,185,199,215,124,61,49,31,75,217,203,245,142,161,225,248,133,182,67,88,206,100)
IMAGE_DATA(185,76,7,101,26,236,181,217,198,8,200,219,122,214,139,83,157,173,172,182,13,223,63,253,182,117,241,148,105,240,41,236)
IMAGE_DATA(199,76,141,182,117,246,226,104,209,55,94,197,160,215,36,6,63,20,20,20,20,20,20,54,9,125,155,52,10,105,97,200)
IMAGE_DATA(166,137,66,26,152,254,128,130,194,88,24,162,43,141,131,180,48,85,63,26,3,227,33,165,94,166,198,193,214,98,103,174)
IMAGE_DATA(241,26,27,3,91,210,223,220,99,53,38,23,108,69,127,75,142,83,108,12,108,229,222,97,141,49,26,179,159,122,26,97)
IMAGE_DATA(237,241,105,242,111,43,123,167,198,48,54,91,255,29,215,24,198,101,203,250,55,6,80,253,173,7,91,95,127,172,9,67)
IMAGE_DATA(180,167,250,75,11,67,181,167,250,75,7,99,180,167,250,75,3,99,181,167,250,155,14,83,180,55,70,127,83,253,61,45)
IMAGE_DATA(241,183,244,248,165,214,253,73,143,133,37,199,108,9,237,159,180,24,88,106,188,245,219,75,253,121,178,99,96,110,152,87)
IMAGE_DATA(123,237,113,160,224,96,25,237,53,231,129,173,195,114,218,107,143,65,99,160,181,64,245,183,53,253,27,103,12,172,5,235)
IMAGE_DATA(232,223,24,62,84,127,170,63,213,159,234,79,245,167,250,83,253,169,254,182,246,161,250,83,253,169,254,84,127,170,63,213)
IMAGE_DATA(159,234,79,245,183,181,15,213,159,234,79,245,167,250,235,214,229,73,103,227,215,223,250,26,89,51,6,214,211,223,250,186)
IMAGE_DATA(216,174,254,66,191,49,79,33,197,199,192,242,250,63,237,218,55,102,253,109,65,123,205,49,176,190,254,182,164,125,99,211)
IMAGE_DATA(223,214,180,111,76,250,219,162,246,141,69,127,170,189,245,246,159,84,123,125,218,155,79,127,170,189,24,237,205,163,63,213)
IMAGE_DATA(94,172,246,210,235,79,181,55,68,123,105,245,167,218,27,170,189,116,250,83,237,141,209,94,26,253,169,246,198,106,111,186)
IMAGE_DATA(254,84,123,83,180,55,77,127,170,189,169,218,27,175,63,213,94,10,237,141,211,223,22,181,103,26,80,42,24,166,63,213)
IMAGE_DATA(94,74,237,13,211,159,106,111,14,136,211,159,106,111,46,232,215,159,106,111,78,232,214,159,106,111,110,104,215,159,106,111)
IMAGE_DATA(9,104,214,159,106,111,41,52,212,159,106,111,73,212,215,159,106,111,105,104,250,125,97,125,77,108,67,123,205,250,91,91)
IMAGE_DATA(19,219,209,190,161,254,214,214,196,182,180,103,212,250,97,139,180,54,172,61,126,91,214,30,97,109,13,108,85,119,10,10)
IMAGE_DATA(10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,27,192,255,1,87,220,168,34,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(3712, 14)
IMAGE_BEGIN_DATA IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,90,79,104,84,71,28,254,220,144,118,99,106,217,53,116,161,69,237,122,81,186,149,20,154,28,162,82,119,173) IMAGE_DATA(120,156,237,90,79,104,84,71,28,254,220,144,118,99,106,217,53,116,161,69,237,122,81,186,149,20,154,28,162,82,119,173)

View file

@ -70,7 +70,7 @@ void Ide::SetupEditor(int f, String hl, String path)
editor.Highlight(hl); editor.Highlight(hl);
editor.WarnWhiteSpace(warnwhitespace && editor.WarnWhiteSpace(warnwhitespace &&
findarg(hl, "cpp", "java", "js", "cs", "json", "css", "lay", "sch", "t", "usc") >= 0); findarg(hl, "cpp", "java", "js", "cs", "json", "css", "lay", "sch", "t", "usc", "dbg") >= 0);
editor.WordwrapComments(wordwrap_comments); editor.WordwrapComments(wordwrap_comments);
editor.WordWrap(wordwrap); editor.WordWrap(wordwrap);

View file

@ -0,0 +1,39 @@
#include <Core/Core.h>
using namespace Upp;
struct MyStruct {
int first[10];
int second = 123456;
};
template <class T>
struct MyVector : Vector<T> {};
template <class T>
struct MyArray : Array<T> {};
template <class K, class V>
struct MyVectorMap : VectorMap<K, V> {};
struct MyWString : WString {};
CONSOLE_APP_MAIN
{
MyWString ws;
ws.Cat("Hello world!");
DLOG("BREAKPOINT HERE");
MyVector<String> hv;
MyArray<String> ha;
MyVectorMap<int, String> vm;
MyStruct ms;
for(int i = 0; i < 10000; i++) {
hv << FormatIntRoman(i, true);
ha << FormatIntRoman(i, false);
vm.Add(i, FormatIntRoman(i, true));
}
DLOG("BREAKPOINT HERE");
}

View file

@ -0,0 +1,10 @@
uses
Core;
file
pretty.dbg,
ScriptDbgPretty.cpp;
mainconfig
"" = "";

View file

@ -0,0 +1,59 @@
typename MyStruct {
TEXT("My struct: ");
TEXT(Peek32(Field(value, "second").address));
}
typename MyWString {
STRING();
ITEM_COUNT(Peek32(Field(value, "length")));
ITEM_TYPE("int");
ITEM_PTRS(DeRef(Field(value, "ptr")).address, 4, from, items);
}
typename MyVector {
ITEM_COUNT(Peek32(Field(value, "items")));
ITEM_TYPE(template_param[0]);
adr = DeRef(Field(value, "vector")).address;
sz = SizeOf(template_param[0]);
LOG(SizeOfPtr());
LOG("Just a test");
ITEM_PTRS(adr, sz, from, items);
// for(i = 0; i < items; i++)
// ITEM_PTR(adr + (i + from) * sz);
}
typename MyArray {
value = Field(value, "vector");
ITEM_COUNT(Peek32(Field(value, "items")));
ITEM_TYPE(template_param[0]);
adr = DeRef(Field(value, "vector")).address;
sz = SizeOf(template_param[0]);
ITEM_DEREF_PTRS(adr, from, items);
// for(i = 0; i < items; i++)
// ITEM_PTR(PeekPtr(adr + (i + from) * SizeOfPtr()));
CHUNK(10);
}
typename MyVectorMap {
key = Field(value, "key");
key = Field(key, "key");
ITEM_COUNT(Peek32(Field(key, "items")));
ITEM_TYPE(template_param[0]);
ITEM_PTRS(DeRef(Field(key, "vector")).address, SizeOf(template_param[0]), from, items);
value = Field(value, "value");
ITEM_TYPE(template_param[1]);
ITEM_PTRS(DeRef(Field(value, "vector")).address, SizeOf(template_param[1]), from, items);
}