js compiler: Prevent octals in generated code
* src/current/compiler/js.xsl (compiler:js-number): New function to remove leading zeroes. (compile)[lv:const]: Use it. * src/current/compiler/js-calc.xsl (compile-calc)[c:const]: Use it.master
parent
67d0cd69ec
commit
d284d75f39
|
@ -40,6 +40,7 @@
|
||||||
xmlns:c="http://www.lovullo.com/calc"
|
xmlns:c="http://www.lovullo.com/calc"
|
||||||
xmlns:lv="http://www.lovullo.com/rater"
|
xmlns:lv="http://www.lovullo.com/rater"
|
||||||
xmlns:preproc="http://www.lovullo.com/rater/preproc"
|
xmlns:preproc="http://www.lovullo.com/rater/preproc"
|
||||||
|
xmlns:compiler="http://www.lovullo.com/rater/compiler"
|
||||||
xmlns:calc-compiler="http://www.lovullo.com/calc/compiler">
|
xmlns:calc-compiler="http://www.lovullo.com/calc/compiler">
|
||||||
|
|
||||||
|
|
||||||
|
@ -453,7 +454,7 @@
|
||||||
-->
|
-->
|
||||||
<template match="c:const" mode="compile-calc">
|
<template match="c:const" mode="compile-calc">
|
||||||
<!-- assumed to be numeric -->
|
<!-- assumed to be numeric -->
|
||||||
<value-of select="@value" />
|
<sequence select="compiler:js-number( @value )" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -444,7 +444,7 @@
|
||||||
<text>, </text>
|
<text>, </text>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<value-of select="." />
|
<value-of select="compiler:js-number( . )" />
|
||||||
</for-each>
|
</for-each>
|
||||||
<text> ]</text>
|
<text> ]</text>
|
||||||
</for-each>
|
</for-each>
|
||||||
|
@ -455,7 +455,7 @@
|
||||||
<text>, </text>
|
<text>, </text>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<value-of select="." />
|
<value-of select="compiler:js-number( . )" />
|
||||||
</for-each>
|
</for-each>
|
||||||
|
|
||||||
<text> ]; </text>
|
<text> ]; </text>
|
||||||
|
@ -470,7 +470,7 @@
|
||||||
<text>consts['</text>
|
<text>consts['</text>
|
||||||
<value-of select="@name" />
|
<value-of select="@name" />
|
||||||
<text>'] = </text>
|
<text>'] = </text>
|
||||||
<value-of select="@value" />
|
<value-of select="compiler:js-number( @value )" />
|
||||||
<text>;</text>
|
<text>;</text>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -529,6 +529,27 @@
|
||||||
</function>
|
</function>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Format JS numbers such that they won't be misinterpreted as octal (if they
|
||||||
|
have leading zeroes)
|
||||||
|
-->
|
||||||
|
<function name="compiler:js-number" as="xs:string?">
|
||||||
|
<param name="src" as="xs:string?" />
|
||||||
|
|
||||||
|
<variable name="norm" as="xs:string?"
|
||||||
|
select="normalize-space( $src )" />
|
||||||
|
|
||||||
|
<!-- note that this will make 0 into an empty string! -->
|
||||||
|
<variable name="stripped" as="xs:string"
|
||||||
|
select="replace( $norm, '^0+', '' )" />
|
||||||
|
|
||||||
|
<sequence select="if ( $stripped = '' ) then
|
||||||
|
$norm
|
||||||
|
else
|
||||||
|
$stripped" />
|
||||||
|
</function>
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Generate code to perform a classification
|
Generate code to perform a classification
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue