512 clinitCode.append(init); |
512 clinitCode.append(init); |
513 endPosTable.replaceTree(vdef, init); |
513 endPosTable.replaceTree(vdef, init); |
514 clinitTAs.addAll(getAndRemoveNonFieldTAs(sym)); |
514 clinitTAs.addAll(getAndRemoveNonFieldTAs(sym)); |
515 } else { |
515 } else { |
516 checkStringConstant(vdef.init.pos(), sym.getConstValue()); |
516 checkStringConstant(vdef.init.pos(), sym.getConstValue()); |
|
517 /* if the init contains a reference to an external class, add it to the |
|
518 * constant's pool |
|
519 */ |
|
520 vdef.init.accept(classReferenceVisitor); |
517 } |
521 } |
518 } |
522 } |
519 break; |
523 break; |
520 default: |
524 default: |
521 Assert.error(); |
525 Assert.error(); |
2429 if (generateIproxies && |
2433 if (generateIproxies && |
2430 (c.flags() & (INTERFACE|ABSTRACT)) == ABSTRACT |
2434 (c.flags() & (INTERFACE|ABSTRACT)) == ABSTRACT |
2431 && !allowGenerics // no Miranda methods available with generics |
2435 && !allowGenerics // no Miranda methods available with generics |
2432 ) |
2436 ) |
2433 implementInterfaceMethods(c); |
2437 implementInterfaceMethods(c); |
2434 cdef.defs = normalizeDefs(cdef.defs, c); |
|
2435 c.pool = pool; |
2438 c.pool = pool; |
2436 pool.reset(); |
2439 pool.reset(); |
|
2440 /* method normalizeDefs() can add references to external classes into the constant pool |
|
2441 * so it should be called after pool.reset() |
|
2442 */ |
|
2443 cdef.defs = normalizeDefs(cdef.defs, c); |
2437 generateReferencesToPrunedTree(c, pool); |
2444 generateReferencesToPrunedTree(c, pool); |
2438 Env<GenContext> localEnv = |
2445 Env<GenContext> localEnv = |
2439 new Env<GenContext>(cdef, new GenContext()); |
2446 new Env<GenContext>(cdef, new GenContext()); |
2440 localEnv.toplevel = env.toplevel; |
2447 localEnv.toplevel = env.toplevel; |
2441 localEnv.enclClass = cdef; |
2448 localEnv.enclClass = cdef; |