Browse Source

* don't generate typed constant initialisers for set and enum constants
declared local to functions on the JVM target, because we don't generate
field constants for them (fixes run time error when declaring a symbolic
enum/set constant in a function on the JVM target)

git-svn-id: trunk@25953 -

Jonas Maebe 11 years ago
parent
commit
3ed60082d3
1 changed files with 5 additions and 2 deletions
  1. 5 2
      compiler/pdecl.pas

+ 5 - 2
compiler/pdecl.pas

@@ -226,8 +226,11 @@ implementation
 {$ifdef jvm}
 {$ifdef jvm}
                        { for the JVM target, some constants need to be
                        { for the JVM target, some constants need to be
                          initialized at run time (enums, sets) -> create fake
                          initialized at run time (enums, sets) -> create fake
-                         typed const to do so }
-                       if assigned(tconstsym(sym).constdef) and
+                         typed const to do so (at least if they are visible
+                         outside this routine, since we won't directly access
+                         these symbols in the generated code) }
+                       if (symtablestack.top.symtablelevel<normal_function_level) and
+                          assigned(tconstsym(sym).constdef) and
                           (tconstsym(sym).constdef.typ in [enumdef,setdef]) then
                           (tconstsym(sym).constdef.typ in [enumdef,setdef]) then
                          jvm_add_typed_const_initializer(tconstsym(sym));
                          jvm_add_typed_const_initializer(tconstsym(sym));
 {$endif}
 {$endif}