浏览代码

* 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 年之前
父节点
当前提交
3ed60082d3
共有 1 个文件被更改,包括 5 次插入2 次删除
  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}