Rhino E4X не разрешает xml-литерал в {expression}

#javascript #rhino #e4x

#javascript #rhino #e4x

Вопрос:

Я использую rhino1_7R2. Я обнаружил, что следующая программа вызывает синтаксическую ошибку (незаконно сформированный синтаксис XML):

 function b(node) { 
   return <span>{node}{node}</span>;  
}
a=<span>foo {b(<div>bar</div>)} baz</span>;
alert(a);
  

но это работает:

 function b(node) { 
   return <span>{node}{node}</span>;  
}
var bar=<div>bar</div>;
a=<span>foo {b(bar)} baz</span>;
alert(a);
  

Похоже, что Rhino не допускает литеральный xml в {expression }.
Сначала я подумал, что спецификация ECMAScript запрещает это.
Но в Firefox (3.6.23) разрешен этот синтаксис. Так что это может быть не из-за спецификации ECMA.

Это тестовая страница, запущенная в Firefox (она работает):

 <script>
    function b(node) { 
        return <span>{node}{node}</span>;  
    }
    a=<span>foo {b(<div>bar</div>)} baz</span>;
    alert(a);
</script>
  

Может ли кто-нибудь сказать, что это связано с ошибкой Rhino или спецификациями Rhino или Ecmascript?

Я приложу тестовый код на Java / Rhino. С уважением.

 import org.mozilla.javascript.Context;
import org.mozilla.javascript.ScriptableObject;


public class Main {
    public static void main(String[] args) {
        Context c=Context.enter();
        ScriptableObject scope = c.initStandardObjects();
        String source_OK = 
                "function b(node) { "  
                "   return <span>{node}{node}</span>;"  
                "}"  
                "var bar=<div>bar</div>;"  
                "a=<span>foo {b(bar)} baz</span>;   ";
        Object a=c.evaluateString(scope, source_OK, "TEST", 1, null);
        System.out.println(a);

        String source_NG = 
            "function b(node) { "  
            "   return <span>{node}{node}</span>;"  
            "}"  
            "a=<span>foo {b(<div>bar</div>)} baz</span>;   ";
        a=c.evaluateString(scope, source_NG, "TEST", 1, null); //Error!
        System.out.println(a);
        Context.exit();
    }
}
  

Ответ №1:

Извините, я обнаружил, что это ошибка Rhino самостоятельно:

https://bugzilla.mozilla.org/show_bug.cgi?id=323890

Я также отправил исправление для этой ошибки.