diff options
author | mihaylov <mihaylov@epfl.ch> | 2005-06-09 14:12:18 +0000 |
---|---|---|
committer | mihaylov <mihaylov@epfl.ch> | 2005-06-09 14:12:18 +0000 |
commit | faf9183089b7425e0e86d4d34a807bce238dce86 (patch) | |
tree | 7c005b48deb6099c5d1706ad3ecd5276b59598cf /sources/scalac | |
parent | 537b80d752881575adb55a4c20b8d805051d2cfa (diff) | |
download | scala-faf9183089b7425e0e86d4d34a807bce238dce86.tar.gz scala-faf9183089b7425e0e86d4d34a807bce238dce86.tar.bz2 scala-faf9183089b7425e0e86d4d34a807bce238dce86.zip |
Added support for the transient and volatile at...
Added support for the transient and volatile attributes
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/backend/jvm/GenJVM.java | 23 | ||||
-rw-r--r-- | sources/scalac/symtab/Definitions.java | 3 |
2 files changed, 19 insertions, 7 deletions
diff --git a/sources/scalac/backend/jvm/GenJVM.java b/sources/scalac/backend/jvm/GenJVM.java index 05cd5373c8..b3ec16c879 100644 --- a/sources/scalac/backend/jvm/GenJVM.java +++ b/sources/scalac/backend/jvm/GenJVM.java @@ -86,6 +86,9 @@ public class GenJVM { new JObjectType("java.lang.Throwable"); protected final Symbol JAVA_RMI_REMOTE_CLASS; + protected final Symbol SCALA_SERIAL_VERSION_UID_CONSTR; + protected final Symbol SCALA_TRANSIENT_CONSTR; + protected final Symbol SCALA_VOLATILE_CONSTR; protected final Global global; protected final Definitions defs; @@ -113,6 +116,12 @@ public class GenJVM { initArithPrimMap(); JAVA_RMI_REMOTE_CLASS = defs.getClass(JAVA_RMI_REMOTE); + SCALA_SERIAL_VERSION_UID_CONSTR = + defs.getClass("scala.SerialVersionUID") .primaryConstructor(); + SCALA_TRANSIENT_CONSTR = + defs.getClass("scala.transient").primaryConstructor(); + SCALA_VOLATILE_CONSTR = + defs.getClass("scala.volatile").primaryConstructor(); } /// Code generation @@ -168,7 +177,7 @@ public class GenJVM { addValueClassMembers(ctx1, classDef); gen(ctx1, impl); AConstant[] aargs = global.getAttrArguments - (sym, defs.SCALA_SERIAL_VERSION_UID_CONSTR); + (sym, SCALA_SERIAL_VERSION_UID_CONSTR); if (ctx1.isModuleClass || aargs != null) { JMethod clinit = getClassConstructorMethod(ctx1); if (clinit.getCode().getSize() == 0) { @@ -1777,10 +1786,16 @@ public class GenJVM { cSym.members().iterator(); while (memberIt.hasNext()) { Symbol member = memberIt.next(); - if (member.isTerm() && !member.isMethod()) - ctx.clazz.addNewField(javaModifiers(member), + if (member.isTerm() && !member.isMethod()) { + int flags = javaModifiers(member); + if (global.getAttrArguments(member,SCALA_TRANSIENT_CONSTR)!=null) + flags |= JAccessFlags.ACC_TRANSIENT; + if (global.getAttrArguments(member,SCALA_VOLATILE_CONSTR)!=null) + flags |= JAccessFlags.ACC_VOLATILE; + ctx.clazz.addNewField(flags, member.name.toString(), typeStoJ(member.info())); + } } } @@ -1788,7 +1803,7 @@ public class GenJVM { if (ctx.isModuleClass) addModuleInstanceField(ctx); AConstant[] aargs = - global.getAttrArguments(cSym, defs.SCALA_SERIAL_VERSION_UID_CONSTR); + global.getAttrArguments(cSym, SCALA_SERIAL_VERSION_UID_CONSTR); if (aargs == null) return; assert aargs.length == 1 : "Wrong attribute arguments: "; diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java index a80ceeff52..f09740708a 100644 --- a/sources/scalac/symtab/Definitions.java +++ b/sources/scalac/symtab/Definitions.java @@ -253,7 +253,6 @@ public class Definitions { // attributes public final Symbol SCALA_SERIALIZABLE_CONSTR; - public final Symbol SCALA_SERIAL_VERSION_UID_CONSTR; //######################################################################## // Public Fields & Methods - Scala primitive types @@ -836,8 +835,6 @@ public class Definitions { SCALA_SERIALIZABLE_CONSTR = getClass("scala.serializable") .primaryConstructor(); - SCALA_SERIAL_VERSION_UID_CONSTR = getClass("scala.SerialVersionUID") - .primaryConstructor(); // initialize generated classes and aliases initClass(ANY_CLASS, Type.EMPTY_ARRAY); |