summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2005-06-09 14:12:18 +0000
committermihaylov <mihaylov@epfl.ch>2005-06-09 14:12:18 +0000
commitfaf9183089b7425e0e86d4d34a807bce238dce86 (patch)
tree7c005b48deb6099c5d1706ad3ecd5276b59598cf /sources/scalac
parent537b80d752881575adb55a4c20b8d805051d2cfa (diff)
downloadscala-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.java23
-rw-r--r--sources/scalac/symtab/Definitions.java3
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);