<!--                                                                        -->
<!-- Copyright 2009 Google Inc.                                             -->
<!-- Licensed under the Apache License, Version 2.0 (the "License"); you    -->
<!-- may not use this file except in compliance with the License. You may   -->
<!-- may obtain a copy of the License at                                    -->
<!--                                                                        -->
<!-- http://www.apache.org/licenses/LICENSE-2.0                             -->
<!--                                                                        -->
<!-- Unless required by applicable law or agreed to in writing, software    -->
<!-- distributed under the License is distributed on an "AS IS" BASIS,      -->
<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        -->
<!-- implied. License for the specific language governing permissions and   -->
<!-- limitations under the License.                                         -->

<!-- Compiler parameters that can be overridden .    -->
<!--                                                                        -->
<module>
  <!--
    A user-specified initial load sequence for the runAsync calls. Each entry should specify the
    surrounding method immediately enclosing the call, using a full JSNI reference.
  -->
  <define-configuration-property name='compiler.splitpoint.initial.sequence'
    is-multi-valued='true' />

  <!--
    Whether or not the compiler should predeclare variables that are defined
    outside the initial download and are referenced from a different code
    fragment than the one defining them. This is usually determined by which
    linker is used and is not directly meaningful to users.
  -->
  <define-property name="compiler.predeclare.cross.fragment.references"
    values="true,false" />
  <set-property name="compiler.predeclare.cross.fragment.references"
    value="false" />

  <!--
    Whether or not the compiler should alter Enum.name() to return
    ordinal() as a way of obfuscating Enum field identifiers.
  -->
   <define-configuration-property name="compiler.enum.obfuscate.names"
      is-multi-valued='false' />
   <set-configuration-property name="compiler.enum.obfuscate.names"
      value="false" />
    
  <!-- From here down, the properties are unsupported and are only available for test cases -->

  <!--
    This is the maximum number of variables in any var statement GWT
    will emit. This avoids a bug in some browsers including
    the initial beta of Safari 4. See Issue 3455. If it is set to -1,
    then there is no limit.
  -->
  <define-configuration-property name='compiler.max.vars.per.var'
    is-multi-valued='false' />
  <set-configuration-property name='compiler.max.vars.per.var' value='2400' />

  <!--
    The iframe linker chunks its output into multiple <script> tags. The default size is fine for
    production use; it is overridable mainly for test cases. This size must be small enough that
    block-size restrictions in IE are satisfied, because the script tag chunking undoes
    JsIEBlockSizeVisitor.  If it's set to -1, then no chunking is performed and
    JsIEBlockSizeVisitor has its usual effect.
  -->
  <define-configuration-property name="iframe.linker.script.chunk.size"
    is-multi-valued="false" />
  <set-configuration-property name="iframe.linker.script.chunk.size"
    value="30000" />

  <!--
    The compiler emits deferred code into a deferredjs subdirectory of the
    output. This property allows test cases to have the iframe linker
    load the deferred code from a different subdirectory.
  -->
  <define-configuration-property name="iframe.linker.deferredjs.subdir"
    is-multi-valued="false" />
  <set-configuration-property name="iframe.linker.deferredjs.subdir"
    value="deferredjs" />
</module>
