< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java

Print this page
*** 215,11 ***
          if (lastParam != null && (lastParam.mods.flags & Flags.VARARGS) != 0)
              m.flags_field |= Flags.VARARGS;
  
          localEnv.info.scope.leave();
          if (chk.checkUnique(tree.pos(), m, enclScope)) {
!         enclScope.enter(m);
          }
  
          annotate.annotateLater(tree.mods.annotations, localEnv, m, tree.pos());
          // Visit the signature of the method. Note that
          // TypeAnnotate doesn't descend into the body.
--- 215,11 ---
          if (lastParam != null && (lastParam.mods.flags & Flags.VARARGS) != 0)
              m.flags_field |= Flags.VARARGS;
  
          localEnv.info.scope.leave();
          if (chk.checkUnique(tree.pos(), m, enclScope)) {
!             enclScope.enter(m);
          }
  
          annotate.annotateLater(tree.mods.annotations, localEnv, m, tree.pos());
          // Visit the signature of the method. Note that
          // TypeAnnotate doesn't descend into the body.

*** 285,13 ***
                  ? env.info.scope.owner.kind == MTH ? Type.noType : syms.errType
                  : tree.vartype.type;
          VarSymbol v = new VarSymbol(0, tree.name, vartype, enclScope.owner);
          v.flags_field = chk.checkFlags(tree.pos(), tree.mods.flags, v, tree);
          tree.sym = v;
          if (tree.init != null) {
              v.flags_field |= HASINIT;
!             if ((v.flags_field & FINAL) != 0 &&
                  needsLazyConstValue(tree.init)) {
                  Env<AttrContext> initEnv = getInitEnv(tree, env);
                  initEnv.info.enclVar = v;
                  v.setLazyConstValue(initEnv(tree, initEnv), attr, tree);
              }
--- 285,16 ---
                  ? env.info.scope.owner.kind == MTH ? Type.noType : syms.errType
                  : tree.vartype.type;
          VarSymbol v = new VarSymbol(0, tree.name, vartype, enclScope.owner);
          v.flags_field = chk.checkFlags(tree.pos(), tree.mods.flags, v, tree);
          tree.sym = v;
+         /* Don't want constant propagation/folding for instance fields of primitive classes,
+            as these can undergo updates via copy on write.
+         */
          if (tree.init != null) {
              v.flags_field |= HASINIT;
!             if ((v.flags_field & FINAL) != 0 && ((v.flags_field & STATIC) != 0 || !v.owner.isPrimitiveClass()) &&
                  needsLazyConstValue(tree.init)) {
                  Env<AttrContext> initEnv = getInitEnv(tree, env);
                  initEnv.info.enclVar = v;
                  v.setLazyConstValue(initEnv(tree, initEnv), attr, tree);
              }
< prev index next >