so
От: cgibin  
Дата: 31.08.10 16:26
Оценка:
Привет.

Есть table, для него есть такое правило(root это <widget>)

:root[smb_empty] > table > tbody > tr[smb_empty]
{
visibility:collapse;
}

При попытке установить 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
Проявляется случайно, как-то зависит от кол-ва кода в скрипте.
Re: so
От: c-smile Канада http://terrainformatica.com
Дата: 31.08.10 17:27
Оценка:
Здравствуйте, 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 атрибута?
Re[2]: so
От: cgibin  
Дата: 31.08.10 17:43
Оценка:
Здравствуйте, 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, вроде ушло, посмотрим.
Re: so
От: c-smile Канада http://terrainformatica.com
Дата: 31.08.10 18:23
Оценка:
Здравствуйте, 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] ?
Re[3]: so
От: c-smile Канада http://terrainformatica.com
Дата: 31.08.10 18:28
Оценка:
Здравствуйте, 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 пришел, что там было в оригинале? Можешь сказать?
Re[4]: so
От: cgibin  
Дата: 31.08.10 21:23
Оценка: 40 (1)
Здравствуйте, 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>);
    }


Исключение указывало на tr.@["rid"] = rs[0];
Re[5]: so
От: c-smile Канада http://terrainformatica.com
Дата: 01.09.10 02:52
Оценка:
Здравствуйте, cgibin, Вы писали:

C>Здравствуйте, c-smile, Вы писали:


CS>>А что stack trace показывает?

C>Я немного это поковырял, так тоже падает:
C>this.tbody.select(:e: e.style#visibility = "collapse", "tr[boo]");

C>Можно заменить на e.style#display = "none", такой же результат. Причём для одного элемента работает, а для нескольких — нет.


Я обновил http://terrainformatica.com/sciter/sciter-dll-pdb.zip , попробуй.
Re[5]: so
От: c-smile Канада http://terrainformatica.com
Дата: 01.09.10 03:02
Оценка:
Здравствуйте, cgibin, Вы писали:

C>Вытащил предыдущую версию, там было так:


C>
C>...
C>    if(!(rs instanceof Recordset))
C>        return;
C>...
C>    function addRow(rs, insertAt = Integer.MAX)
C>    {
C>        var tr = new Element("tr");
C>        this.tbody.insert(tr, insertAt);
C>        if(rs["New"])
C>            tr.@["New"] = true;
C>        tr.@["rid"] = rs[0];
C>        var date = new Date(rs[1]);
C>        tr.$append(<td>{date.toLocaleString()}</td><td>{rs[2]}</td><td>{rs[3].htmlUnescape()}</td>);
C>    }
C>


Смотрю.

C>Исключение указывало на tr.@["rid"] = rs[0];


Кстати это вот:

if(!(rs instanceof Recordset))
        return;


можно писать так:

if( rs !instanceof Recordset )
       return;


Точно также как и

if( s like "*.htm" )
       return;

if( s !like "*.htm" )
       return;
Re[6]: so
От: cgibin  
Дата: 01.09.10 14:51
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Я обновил http://terrainformatica.com/sciter/sciter-dll-pdb.zip , попробуй.


Неа, всё по-прежнему. Я вот набросал привер, который падает, особенно не причёсывал:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style>

#tbl
{
width:400px; height:400px;
    border:solid gray 1px;
    background-color:window;
    border-spacing:0;
    flow: table-fixed;    
}

#tbl tr[boo]
{
background:blue;
color:red;
}
#wt[boo] > table > tbody > tr[boo]
{
visibility:collapse;
}

  #tbl > tbody > tr > td
  {
    height: 1.4em; 
    white-space:nowrap;
    overflow-x:hidden; text-overflow:ellipsis; 
    border-right: 1px solid threedlight;
    padding-left:3px;
    font-size: 10pt;
  }
  #tbl > tbody
  { 
    width:*;
    height:*;
    overflow:hidden;
    overflow-y:scroll;
    border-spacing:0px;
    font-family:'Arial';
    font-size:7pt;
  }

  #tbl > thead
  {
    border-spacing:0;
    behavior:column-resizer;    
  }
  
  #tbl > thead > tr > th
  {
    width:*;
    min-width:1em;
    font:system;
    line-height: 1.6em;
    white-space:nowrap; overflow-x:hidden; text-overflow:ellipsis; 
    background: url(theme:column-header-normal) stretch;
    text-align:left;
    padding-left:3px;
  }
  :root > table > tbody > tr > td
  {
    height: 1.4em; 
    white-space:nowrap;
    overflow-x:hidden; text-overflow:ellipsis; 
    border-right: 1px solid threedlight;
    padding-left:3px;
    font-size: 10pt;
  }
    
  :root > table > tbody > tr
  {
    border-bottom:1px solid threedface;
  }
</style>
</head>
<script type=text/tiscript>
self#test2.onClick = function()
{
    self#wt.@["boo"] = true;
}
self#test.onClick = function()
{

    var table = self#tbl;
    var ss = Stream.openString()
    for(var i in 2000)
    {
        var boo = (i % 2) ? "boo" : "";
        ss.$(<tr {boo}><td>Some data 0</td><td>Some data 1</td><td>Some data 2</td></tr>);
    }
    table.$(tbody).insert(ss.toString());

    return;
}
</script>
<body #body>
<frameset>
<widget #wt>
<table fixedrows=1 #tbl>
<thead>
    <tr><th>First</th><th>Second</th><th>Third</th></tr>
</thead>
<tbody></tbody>
</table>
</widget>
</frameset>
<button #test>Fill</button>
<button #test2>Hide</button>

</body>
</html>
Re: so
От: cgibin  
Дата: 30.09.10 09:49
Оценка:
Привет.

в 8.42 случилась regression of stack overflow in fixed tables
Re[2]: so
От: c-smile Канада http://terrainformatica.com
Дата: 30.09.10 17:19
Оценка:
Здравствуйте, cgibin, Вы писали:

C>Привет.


C>в 8.42 случилась regression of stack overflow in fixed tables


Скачай еще раз.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.