2010-10-23 58 views
11

我有这个奇怪的问题,在此代码:错误#1030:堆栈深度不对称

private function initLevel():void { 
    var levelMap:Array = 
    [ 
      [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, 0, 0, 0, 0, 0, 0, 0, 0] 
    ]; 
    for (var y:* in levelMap) { 
     for (var x:* in levelMap[y]) { 
      trace(y, x); 
      trace(levelMap[y, x]); 
     } 
    } 
} 

产生这种丑陋的怪物在Flashdevelop中:

 
typecheck Level/initLevel() 
    outer-scope = [global Object$ flash.events::EventDispatcher$ flash.display::DisplayObject$ flash.display::InteractiveObject$ flash.display::DisplayObjectContainer$ flash.display::Sprite$ flash.display::MovieClip$ Level$] 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {}() 
    0:debugfile "L:\svntest\flashgame\src;com\thom\TD;Level.as" 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {}() 
    2:debugline 66 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {}() 
    4:getlocal0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {} (Level[O]) 
    5:pushscope 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]}() 
    6:pushundefined 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (void[A]) 
    7:coerce_a 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (*[A]) 
    8:setlocal2 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]}() 
    9:pushundefined 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (void[A]) 
    10:coerce_a 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (*[A]) 
    11:setlocal3 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]}() 
    12:debug 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]}() 
    17:debug 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]}() 
    22:debugline 69 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]}() 
    24:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I]) 
    26:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I]) 
    28:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I]) 
    30:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I]) 
    32:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I]) 
    34:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I]) 
    36:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    38:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    40:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    42:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    44:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    46:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    48:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    50:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    52:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    54:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    56:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    58:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    60:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    62:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    64:newarray 20 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O]) 
    66:debugline 70 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O]) 
    68:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I]) 
    70:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I]) 
    72:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I]) 
    74:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I]) 
    76:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I]) 
    78:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I]) 
    80:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    82:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    84:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    86:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    88:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    90:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    92:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    94:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    96:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    98:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    100:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    102:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    104:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    106:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...10: int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    108:newarray 20 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O]) 
    110:debugline 71 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O]) 
    112:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I]) 
    114:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I]) 
    116:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I]) 
    118:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I]) 
    120:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I]) 
    122:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I]) 
    124:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    126:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    128:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    130:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    132:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    134:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    136:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    138:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    140:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    142:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    144:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    146:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    148:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...10: Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    150:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...11: int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    152:newarray 20 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O]) 
    154:debugline 72 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O]) 
    156:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I]) 
    158:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I]) 
    160:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I]) 
    162:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I]) 
    164:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I]) 
    166:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I]) 
    168:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    170:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    172:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    174:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    176:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    178:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    180:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    182:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    184:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    186:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    188:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    190:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...10: Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    192:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...11: Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    194:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...12: int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    196:newarray 20 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O]) 
    198:debugline 73 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O]) 
    200:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I]) 
    202:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I]) 
    204:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I]) 
    206:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I]) 
    208:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I]) 
    210:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I]) 
    212:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    214:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    216:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    218:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    220:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    222:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    224:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    226:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    228:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    230:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (Array[O] Array[O] Array[O] Array[O] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I] int[I]) 
    232:pushbyte 0 
         [Level[O] *[A] *[A] *[A] *[A] *[A] *[A] *[A]] {Level[O]} (...10: Array[O] 
//SIXTY THOUSAND CHAR SNIP 
    804:callproperty trace 1 
         [Level[O] Array[O] *[A] *[A] int[I] *[A] int[I] *[A]] {Level[O]} (global[O] *[A]) 
    807:pop 
         [Level[O] Array[O] *[A] *[A] int[I] *[A] int[I] *[A]] {Level[O]} (global[O]) 
------------------------------------ 
MERGE CURRENT 808:  [Level[O] Array[O] *[A] *[A] int[I] *[A] int[I] *[A]] {Level[O]} (global[O]) 
MERGE TARGET B808:  [Level[O] Array[O] *[A] *[A] int[I] *[A] int[I] *[A]] {Level[O]}() 
[Fault] exception, information=VerifyError: Error #1030: Stack depth is unbalanced. 1 != 0. 

我认为这事做与范围或类似的东西,但我很难过。

感谢所有帮助提前

回答

21

A我在之前的评论中说过,我认为这是一个编译器错误,基于一个简单的事实,即编译器生成非法字节码,并且播放器能够捕捉到这个格式错误的字节码并相应地抛出一个VerifyError

但是,经过一番调查,我发现了一些有趣的事情。

首先,Joony的发现让我走上了正轨。显然,如他的代码所示,你可以欺骗编译器将方括号之间的内容翻译为属性访问。

所以,这样的:

foo[foo,'length'] 

等同于:

foo["length"] 

这里有一个问题,但我会在第二个解释。

您也可以调用方法,像这样:

var foo:Array = []; 
foo[foo,'push'](1); 
trace(foo); 

这将有效地推动1foo

随着一些additionaly挂羊头卖狗肉,你可以链这一切让这个讨厌的野兽:

var inner:Array  = [10]; 
var outter:Array = [1,2,inner]; 
(inner[outter, 'pop']).call(null)[inner,'push'].call(null,20); 

trace(inner); 
trace(outter); 

这相当于:

var inner:Array  = [10]; 
var outter:Array = [1,2,inner]; 
outter.pop().push(20); 

也就是说,我们从outter中弹出inner,然后将20推送给它。

我开始注意到,这里

inner[outter, 'pop'] 

inner不被使用。

事实上,你可以把它改成:

null[outter,'pop'] 

甚至

(void)[outter,'pop'] 

,编译器不会抱怨(既会做播放器)。我怀疑以上是有效的Actionscript(在这种情况下,编译器应拒绝编译它),但我不是100%确定。但是,这个未使用的对象是问题的根源。 (以下需要关于flash程序集或任何其他基于堆栈的程序集的工作原理的一些基本知识,但是我希望我可以解释它,所以可以理解,而不会假设太多。)

我反汇编了此动作代码生成的字节码:

var arr:Array = [10]; 
null[arr,'length']; 

反汇编代码:

function private::initLevel():void /* disp_id 0*/ 
{ 
    // local_count=2 max_scope=1 max_stack=3 code_len=17 
    0  getlocal0  
    1  pushscope  
    2  pushbyte  10 
    4  newarray  [1] 
    6  coerce   Array 
    8  setlocal1  
    9  pushnull   
    10 getlocal1  
    11 pushstring  "length" 
    13 getproperty  null 
    15 pop    
    16 returnvoid  
} 

让我们一步一步来。 instr是指令的偏移量; stack_state显示指令执行后堆栈的当前状态; comments是不言自明)

instr stack_state    comments 
    -------------------------------------------------------------------------------------------  
    0  this     "this" is always passed in local register 0 to instance methods 
    1        "this" is added to the scope chain and popped 
    2  10      now, we have 10 on the stack  
    4  [10]     an array is created and initialized taking 1 element from the stack 
    6  [10]     this is sort of like doing [10] as Array 
    8        the array is assigned to local variable 1 
    9  null     null is pushed. That is the null in this line: 
           null[arr,'length'] 
           HERE BEGINS THE PROBLEM! 
    10 null,local1    local 1 is pushed 
    11 null,local1,"length" the string constant "length" is pushed 
    13 null,local1["length"] getproperty null is used for dynamic lookup (object["prop"]). Both operands are popped from the stack 
    15 null     in the previous step, the result of local1["lengtht"] was pushed. But we dind't use it, so it's discarded 
    16 null     here the method returns. The stack should be empty, but it's not. 
           The generated code should have popped the null pushed at #9, 
           or it shouldn't have pushed it in the first place 

的问题是,在离开方法之后,所有的对象的压入堆栈通过该方法应该已经弹出。情况并非如此,因为方法返回后,常量仍保留在堆栈上。换句话说,我们有一个不平衡堆栈。现在,玩家显然不介意或不检查。我认为它应该,并且不应该运行这个代码,因为如果这个代码变得足够大,这可能(至少潜在地)导致堆栈溢出。现在

,如果我们改变有问题的代码段被包括跳跃块内(例如像一个if一个条件跳转后达到的块)时,播放器将拒绝与该消息的代码:

VerifyError: Error #1030: Stack depth is unbalanced. 1 != 0. 

与OP相同。所以,似乎分支的存在触发了对播放器中堆叠完整性的某种检查。在这一点上,应该注意的是,Actionscript循环(任何类型的循环)在字节码级别作为条件跳转实现,就像ìf一样。所以,即使我们在下面的代码中没有循环(一个if产生的代码更短,分析也更简单),因为它会在播放器中触发此检查,对于我们的目的而言,它与循环相同,正如OP所做的那样。

在AS码:

var dummy:int = 1; 
var arr:Array = [10]; 
if(dummy != 0) { 
    null[arr,'length']; 
} 

拆解:

function private::initLevel():void /* disp_id 0*/ 
{ 
    // local_count=3 max_scope=1 max_stack=3 code_len=27 
    0  getlocal0  
    1  pushscope  
    2  pushbyte  1 
    4  setlocal1  
    5  pushbyte  10 
    7  newarray  [1] 
    9  coerce   Array 
    11 setlocal2  
    12 getlocal1  
    13 pushbyte  0 
    15 ifeq   L1 

    19 pushnull   
    20 getlocal2  
    21 pushstring  "length" 
    23 getproperty  null 
    25 pop    

    L1: 
    26 returnvoid  
} 

一步一步:

instr stack_state    comments 
    -------------------------------------------------------------------------------------------  
    0  this     "this" is always passed in local register 0 to instance methods  
    1        "this" is added to the scope chain and popped 
    2  1      now, we have 1 on the stack  
    4        1 is popped and assigned to the local variable 1 (the dummy var in the code) 
    5  10      10 is pushed 
    7  [10]     an array is created and initialized taking 1 element from the stack 
    9  [10]     this is sort of like doing [10] as Array 
    11       the array is assigned to local variable 2 (the arr var in the code) 
    12 local1     local1 (dummy) is pushed 
    13 local1,0    0 is pushed 
    15       this instruction consumes (pops) both local1 and 0 to compare them 
           If this condition is satisfied, it jumps to the label L1 
           If it is not, it falls-through to the next instruction 
           (the same as a case label in a switch statement that does not have a break, in Actionscript code) 
    19 null     null is pushed. That is the null in this line: 
           null[arr,'length'] 
           Again, HERE BEGINS THE PROBLEM! 
    20 null,local2    local2 is pushed 
    21 null,local2,"length" the string constant "length" is pushed 
    23 null,local2["length"] getproperty null is used for dynamic lookup (object["prop"]). Both operands are popped from the stack 
    25 null     the value returned by local2["length"] is discarded 

    26 null     the method returns, but null is not properly popped from the stack! 

所以,再次,null仍然是该方法返回后在堆栈上;该堆栈是不平衡。但这一次,玩家检查这个,发现问题,抛出一个VerifyError并中止代码。无论如何,为了把它包装起来,我的结论是:编译器在两种情况下都会生成非法字节码。我认为这是一个错误。如果玩家能够检测到该代码,该玩家会拒绝该代码。但是,如果有问题的代码在跳转块内(看起来像一个错误),它似乎只能检测到它。

附录:

Joony提到的评论说,“如果你跳那么没有错误之前立即返回”。这是真的。原因是返回之后但在返回之后的代码是“死代码”,所以编译器将其从字节代码中剥离。

所以,它不是跳跃本身,导致玩家检查堆栈完整性。我GOOGLE了一下,发现this on the haxe site

这是一个堆栈不平衡错误。 这意味着 跳转的两个分支在返回时会导致不同的堆栈大小 。所有跳转或代码 导致给定位置 导致相同的堆栈大小。

这使得它更清晰。

在上面的第二个代码示例中,这就是实际发生的情况。

如果代码在指令15跳转后,它直接在最后一条指令(26)上返回给调用者。 null尚未被推入,堆栈中没有其他东西,所以我们到达这一点时堆栈大小为0。

如果代码没有跳转并且落下,null将被按下(19)并且不会弹出。所以,这条路径将在堆栈上到达最后一条指令(26)null,这意味着堆栈大小为1.这最后一条指令是两个分支都返回的位置,但是在一个分支之后,堆栈大小为0,而跟着另一个,它是1.这就是导致玩家抱怨不平衡堆栈的原因。

+0

非常有趣! – grapefrukt 2010-10-24 00:32:57

+0

优秀的职位。我也热衷于“跳跃”的发展。如果你在跳转之前立即返回,那么没有错误。我喜欢(inner[outter, 'pop']).call(null)[inner,'push'].call(null,20);我想知道这个奇怪的语法是从哪里来的。也许有人可以从Adobe解释它。 – Joony 2010-10-24 08:33:39

+0

@Joony。谢谢。关于即时回报的好处。这说得通。谷歌搜索了一下,我发现这个错误信息真的在haxe网站上意味着什么。这更清楚地解释了这个问题。我已将这添加到我的答案中。 – 2010-10-24 16:42:44

1

卫生署,我解决了它与[y][x]

不知道更换[y,x]为什么它没有给出更清晰的信息我在做什么错。

+0

我说你已经找到了在编译器中的错误,如果这是一个运行时消息。运行时检测到非法字节码。编译器从非有效的动作脚本中产生该字节码。它应该给你一个错误,并拒绝编译你的代码。 – 2010-10-23 14:58:47

+0

可能。我使用FlashDevelop和Flex SDK 4.1.0 build:16076如果我相信flex-sdk-description.xml文件。如果有人想重现这一点,可能会有用。 – 2010-10-23 15:20:01

+0

我有SKD 3.5.0.12683现在可用,但我能够重现错误只是粘贴你的代码,编译和运行。绝对看起来像一个编译器错误。 – 2010-10-23 15:59:01

1

这很时髦,我喜欢它。什么错误!

levelMap[y, x] 

ý是一个对象和Xÿ的性质。

简单的测试:

var levelMap:Array = [[0, 100], 
         [20, 21]]; 
var something:* = levelMap[levelMap[0], 1]; // 100 - The second element of the first array! 
trace(something); 
something = levelMap[levelMap[0], 'length']; // 2 
trace(something); 

一些有趣的行为。任何人都可以解释?

更新:

我想我们只是使用它错了。

var a:Object = {num:0, fun:function(num:uint):void{this.num = num;}}; 
var b:Object = {num:0}; 
b[a, 'fun'](10);                                            
trace(a.num); // 
trace(b.num); // 10 

b是范围,一个是一个对象,'乐趣'一个财产,(10)是参数。这是等于(但仍与堆栈上的额外的对象):

a.fun.call(b, 10); 

b不会被弹出堆栈的原因是因为它的复制和重复被用于函数调用。

90:getscopeobject 1 
    stack: StackTest 
    locals: StackTest StackTest * 
92:getslot 2 
    stack: Object? (b) 
    locals: StackTest StackTest * 
94:dup 
    stack: Object? (b) Object? (Copy of b) 
    locals: StackTest StackTest * 
95:setlocal2 
    stack: Object? (b) 
    locals: StackTest StackTest Object? (Copy of b) 
96:getscopeobject 1 
    stack: Object? (b) StackTest 
    locals: StackTest StackTest Object? (Copy of b) 
98:getslot 1 
    stack: Object? (b) Object? (a) 
    locals: StackTest StackTest Object? (Copy of b) 
100:pushstring "fun" 
    stack: Object? (b) Object? (a) String ("fun") 
    locals: StackTest StackTest Object? (Copy of b) 
102:getproperty {StackTest...Object}::[] 
    stack: Object? (b) * (a.fun) 
    locals: StackTest StackTest Object? (Copy of b) 
104:getlocal2 
    stack: Object? (b) * (a.fun) Object? (Copy of b) 
    locals: StackTest StackTest Object? (Copy of b) 
105:pushbyte 10 
    stack: Object? (b) * (a.fun) Object? (Copy of b) int (10) 
    locals: StackTest StackTest Object? (Copy of b) 
107:call 1 (Call a closure. 1 is the argument count. Stack: function (a.fun), receiver (Copy of b), arg (10). The result (void) is pushed on the stack.) 
    stack: Object? (b) * (void) 
    locals: StackTest StackTest Object? (Copy of b) 
109:pop 
    stack: Object? (b) 
    locals: StackTest StackTest Object? (Copy of b) 
110:kill 2 
    stack: Object? (b) 
    locals: StackTest StackTest * 

此外,一些时髦的行为可以使用此语法可以看出:

b[1, true, a, 'fun'](10); 

看来你可以不断添加未使用的对象堆栈,并且只有最后2进行评估。

+0

我发现了一些关于此的事情。查看我的答案的细节。 – 2010-10-24 00:27:57

+0

优秀的研究成果!我希望我能+3。 – 2010-10-25 21:04:58

+0

嗯。有趣。所以,不知何故,这里'b [a,'有趣'](10); ','b'被用作上下文对象?当我有一点空闲时间的时候,我会仔细研究一下。 – 2010-10-25 22:17:58

0

OMG,你很可能只是解决了几乎杀了我的misterious问题^ _^ 我试图从转储重新创建一个SWF文件:使用

`[SWF] 
    Header: 
    Version: 10 
    FileLength: 623 
    FileLengthCompressed: 454 
    FrameSize: (180,160) 
    FrameRate: 8 
    FrameCount: 10 
    Tags: 
    [69:FileAttributes] AS3: true, HasMetadata: false, UseDirectBlit: false, UseGPU: false, UseNetwork: false 
    [09:SetBackgroundColor] Color: #666666 
    [86:DefineSceneAndFrameLabelData]  Scenes:  [0] Frame: 0, Name: Scene 1 
    [83:DefineShape4] ID: 1, ShapeBounds: (-100,1100,-100,1100), EdgeBounds: (0,1000,0,1000) 
     FillStyles: 
     [1] [SWFFillStyle] Type: 0 (solid), Color: FFFF0000 
     LineStyles:`(and so on) 

as3swf(使用几乎库里面本身只字节码),但今天(用新鲜下载的Flex SDK 4.1)所有我得到的是一个奇怪的痕迹(收到很多次):

[SWF] 
    Version: 10 
    FileLength: 21 
    FileLengthCompressed: 21 
    FrameSize: (14,14) 
    FrameRate: 50 
    FrameCount: 1 
    Tags: 

和我奇怪的事情是,它的踪迹全局存储ByteArray变量很可能是o在运行时唯一一句读,但它存储信息并没有只是一些部分失踪 - 几乎每一个值改变

所以谢谢你的回答,它解释了很多对我来说)

1

对于有人来遇到类似的错误,我接到了一个不寻常的深夜错字此错误:

SomeClass.staticMethod[var1,var2] 

,而不是

SomeClass.staticMethod(var1,var2) 
0

上一个错字错过了=导致这个疯狂的错误。

像:的array.var[x,y];代替array.var = [x,y];