При попытке установить smb_empty получаю stack overflow. В таблице ~1200 строк, для пары сотен работает нормально.
И ещё такой момент. Использую tiscript-sqlite.dll, периодически получаю на при попытке спросить у Recordset
var a = myRS[0];
Error: Wrong type — BrokenHeart([object BrokenHeart]), expected instance of symbol, string or integer as index
Проявляется случайно, как-то зависит от кол-ва кода в скрипте.
Здравствуйте, cgibin, Вы писали:
C>Привет.
C>Есть table, для него есть такое правило(root это <widget>)
C>:root[smb_empty] > table > tbody > tr[smb_empty] C>{ C>visibility:collapse; C>}
C>При попытке установить smb_empty получаю stack overflow. В таблице ~1200 строк, для пары сотен работает нормально.
stack overflow в скрипте? Или в native code?
C>И ещё такой момент. Использую tiscript-sqlite.dll, периодически получаю на при попытке спросить у Recordset
C>var a = myRS[0];
C>Error: Wrong type — BrokenHeart([object BrokenHeart]), expected instance of symbol, string or integer as index C>Проявляется случайно, как-то зависит от кол-ва кода в скрипте.
Error message "expected instance of symbol, string or integer as index" у меня генерируется в одном месте.
А именно при попытке установить значение DOM аттрибута:
Element.attributes[nameOrIndex] = ...;
Вот этот самый nameOrIndex у тебя какой-то левый.
К recordset это не имеет прямого отношения. Но если myRS это Recordset то myRS[0] может вызывать GC.
Посмотри вокруг этого места, есть там присвоение DOM атрибута?
Здравствуйте, c-smile, Вы писали:
CS>stack overflow в скрипте? Или в native code?
В нативе:
First-chance exception at 0x7c90eddc in app.exe: 0xC00000FD: Stack overflow.
First-chance exception at 0x7c812a7b in app.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x00033640..
CS>Посмотри вокруг этого места, есть там присвоение DOM атрибута?
Там, действительно, была установка атрибутов рядышком. Но я уже это место переписал через string builder, вроде ушло, посмотрим.
Здравствуйте, cgibin, Вы писали:
C>Есть table, для него есть такое правило(root это <widget>)
C>:root[smb_empty] > table > tbody > tr[smb_empty] C>{ C>visibility:collapse; C>}
C>При попытке установить smb_empty получаю stack overflow. В таблице ~1200 строк, для пары сотен работает нормально.
Установить smb_empty кому? :root[smb_empty] или tr[smb_empty] ?
Здравствуйте, cgibin, Вы писали:
C>Здравствуйте, c-smile, Вы писали:
CS>>stack overflow в скрипте? Или в native code?
C>В нативе:
C>First-chance exception at 0x7c90eddc in app.exe: 0xC00000FD: Stack overflow. C>First-chance exception at 0x7c812a7b in app.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x00033640..
А что stack trace показывает?
Если там только мой код то можно подставить dll с PDB отсюда http://terrainformatica.com/sciter/sciter-dll-pdb.zip
CS>>Посмотри вокруг этого места, есть там присвоение DOM атрибута?
C>Там, действительно, была установка атрибутов рядышком. Но я уже это место переписал через string builder, вроде ушло, посмотрим.
Меня как раз интересует откуда именно то BrokenHeart пришел, что там было в оригинале? Можешь сказать?
Здравствуйте, c-smile, Вы писали:
CS>А что stack trace показывает?
Я немного это поковырял, так тоже падает:
this.tbody.select(:e: e.style#visibility = "collapse", "tr[boo]");
Можно заменить на e.style#display = "none", такой же результат. Причём для одного элемента работает, а для нескольких — нет.
Стек такой:
ntdll.dll!7c90eddc()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7c94a1f5()
ntdll.dll!7c91b5f4()
ntdll.dll!7c91b686()
ntdll.dll!7c90d4ea()
ntdll.dll!7c9105e3()
> sciter-x.dll!malloc(unsigned int size=1524) Line 163 + 0x63 bytes C
sciter-x.dll!operator new(unsigned int size=1524) Line 59 + 0x8 bytes C++
sciter-x.dll!html::style::operator new(unsigned int sz=11211931) Line 1344 + 0xb bytes C++
sciter-x.dll!html::style::create_unique() + 0x10 bytes C++
sciter-x.dll!html::block::_current_style() + 0x12e bytes C++
sciter-x.dll!html::block::positioned() Line 2693 + 0x36 bytes C++
sciter-x.dll!html::block::refresh_positioned() + 0x55 bytes C++
sciter-x.dll!html::view::refresh(html::block * b=0x09936b98) Line 978 C++
sciter-x.dll!html::update_queue::add() + 0x7a bytes C++
sciter-x.dll!html::view::add_to_update(html::block * b=0x09936b98, bool rem=true) Line 840 C++
sciter-x.dll!html::block::on_style_changed() + 0x522 bytes C++
sciter-x.dll!html::block::_current_style() + 0x323 bytes C++
sciter-x.dll!html::block::positioned() Line 2693 + 0x36 bytes C++
sciter-x.dll!html::block::refresh_positioned() + 0x55 bytes C++
sciter-x.dll!html::view::refresh(html::block * b=0x09936b98) Line 978 C++
sciter-x.dll!html::update_queue::add() + 0x7a bytes C++
sciter-x.dll!html::view::add_to_update(html::block * b=0x09936b98, bool rem=true) Line 840 C++
sciter-x.dll!html::block::on_style_changed() + 0x522 bytes C++
sciter-x.dll!html::block::_current_style() + 0x323 bytes C++
sciter-x.dll!html::block::positioned() Line 2693 + 0x36 bytes C++
sciter-x.dll!html::block::refresh_positioned() + 0x55 bytes C++
sciter-x.dll!html::view::refresh(html::block * b=0x09936b98) Line 978 C++
sciter-x.dll!html::update_queue::add() + 0x7a bytes C++
CS>Меня как раз интересует откуда именно то BrokenHeart пришел, что там было в оригинале? Можешь сказать?
Вытащил предыдущую версию, там было так:
...
if(!(rs instanceof Recordset))
return;
...
function addRow(rs, insertAt = Integer.MAX)
{
var tr = new Element("tr");
this.tbody.insert(tr, insertAt);
if(rs["New"])
tr.@["New"] = true;
tr.@["rid"] = rs[0];
var date = new Date(rs[1]);
tr.$append(<td>{date.toLocaleString()}</td><td>{rs[2]}</td><td>{rs[3].htmlUnescape()}</td>);
}
Здравствуйте, cgibin, Вы писали:
C>Здравствуйте, c-smile, Вы писали:
CS>>А что stack trace показывает? C>Я немного это поковырял, так тоже падает: C>this.tbody.select(:e: e.style#visibility = "collapse", "tr[boo]");
C>Можно заменить на e.style#display = "none", такой же результат. Причём для одного элемента работает, а для нескольких — нет.