チェンジセット 482: as2/E3Engine

差分発生行の前後
無視リスト:
コミット日時:
2008/05/22 21:34:57 (4 年前)
コミッタ:
yossy
ログメッセージ:

E3Engine: Parser の CallExpression? 解析がおかしかったの修正

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as2/E3Engine/Parser.as

    r299 r482  
    1 class Parser implements IParser 
     1class Parser implements IParser 
    22{ 
    33        private var scanner:IScanner; 
     
    19871987        // CallExpression ::= MemberExpression 
    19881988        //      ::= CallExpression Arguments 
     1989        //      ::= CallExpression '[' Expression ']' 
     1990        //      ::= CallExpression '.' Identifier 
    19891991        // MemberExpression ::= PrimaryExpression 
    19901992        //      ::= FunctionExpression 
    19911993        //      ::= CoroutineExpression 
    19921994        //      ::= 'new' MemberExpression Arguments? 
    1993         //      ::= MemberExpression '[' Expression ']' 
    1994         //      ::= MemberExpression '.' Identifier 
    19951995        // 
    19961996        // First(LeftHandSideExpression) ::= First(CallExpression) 
     
    20322032                                continue; 
    20332033                        } 
    2034                         break; 
    2035                 } 
    2036         } 
    2037         private function parse_memberExpression (expressionResult:ExpressionResult) : Void 
    2038         { 
    2039                 switch (getToken().type) { 
    2040                         case 'function': { 
    2041                                 parse_functionExpression(expressionResult); 
    2042                         } 
    2043                         break; 
    2044                          
    2045                         case 'coroutine': { 
    2046                                 parse_coroutineExpression(expressionResult); 
    2047                         } 
    2048                         break; 
    2049                          
    2050                         case 'new': { 
    2051                                 nextToken(); 
    2052                                  
    2053                                 parse_memberExpression(expressionResult); 
    2054                                 generator.putExpressionResult(expressionResult); 
    2055                                  
    2056                                 var numOfArguments:Number = 0; 
    2057                                  
    2058                                 if (isToken('(')) { 
    2059                                         numOfArguments += parse_arguments(); 
    2060                                 } 
    2061                                  
    2062                                 generator.putNew(numOfArguments); 
    2063                                  
    2064                                 expressionResult.setType('stack'); 
    2065                         } 
    2066                         break; 
    2067                          
    2068                         default: { 
    2069                                 parse_primaryExpression(expressionResult); 
    2070                         } 
    2071                 } 
    2072                  
    2073                 for (;;) { 
    20742034                        if (isToken('[')) { 
    20752035                                nextToken(); 
     
    21042064                        } 
    21052065                        break; 
     2066                } 
     2067        } 
     2068        private function parse_memberExpression (expressionResult:ExpressionResult) : Void 
     2069        { 
     2070                switch (getToken().type) { 
     2071                        case 'function': { 
     2072                                parse_functionExpression(expressionResult); 
     2073                        } 
     2074                        break; 
     2075                         
     2076                        case 'coroutine': { 
     2077                                parse_coroutineExpression(expressionResult); 
     2078                        } 
     2079                        break; 
     2080                         
     2081                        case 'new': { 
     2082                                nextToken(); 
     2083                                 
     2084                                parse_memberExpression(expressionResult); 
     2085                                generator.putExpressionResult(expressionResult); 
     2086                                 
     2087                                var numOfArguments:Number = 0; 
     2088                                 
     2089                                if (isToken('(')) { 
     2090                                        numOfArguments += parse_arguments(); 
     2091                                } 
     2092                                 
     2093                                generator.putNew(numOfArguments); 
     2094                                 
     2095                                expressionResult.setType('stack'); 
     2096                        } 
     2097                        break; 
     2098                         
     2099                        default: { 
     2100                                parse_primaryExpression(expressionResult); 
     2101                        } 
    21062102                } 
    21072103        }