Rhino E4X не допускает XML-литерал в {выражение} - PullRequest
1 голос
/ 29 сентября 2011

Я использую 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 в {выражении} Сначала я подумал, что спецификация 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 Ответ

1 голос
/ 30 сентября 2011

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

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

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

...