[Nice-commit] Nice/src/bossa/syntax NiceClass.java,1.57,1.58 ClassDefinition.java,1.93,1.94
Brought to you by:
bonniot
From: <bo...@us...> - 2003-08-25 16:43:12
|
Update of /cvsroot/nice/Nice/src/bossa/syntax In directory sc8-pr-cvs1:/tmp/cvs-serv10232/src/bossa/syntax Modified Files: NiceClass.java ClassDefinition.java Log Message: Make classes that implement Cloneable have a public clone method that call super. Index: NiceClass.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/NiceClass.java,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** NiceClass.java 6 Aug 2003 22:40:31 -0000 1.57 --- NiceClass.java 24 Aug 2003 18:07:28 -0000 1.58 *************** *** 333,336 **** --- 333,337 ---- resolveIntitializers(); createConstructor(); + addPublicCloneMethod(); } *************** *** 516,519 **** --- 517,535 ---- */ classe = createClassExp(); + } + + static gnu.bytecode.Method cloneMethod = + gnu.bytecode.Type.pointer_type.getDeclaredMethod("clone", 0); + + private void addPublicCloneMethod() + { + if (! definition.implementsJavaInterface("java.lang.Cloneable")) + return; + + gnu.expr.Expression[] params = new gnu.expr.Expression[1]; + gnu.expr.LambdaExp lambda = createJavaMethod("clone", cloneMethod, params); + Gen.setMethodBody(lambda, + new gnu.expr.ApplyExp(new gnu.expr.QuoteExp(gnu.expr.PrimProcedure.specialCall(cloneMethod)), params)); + addJavaMethod(lambda); } Index: ClassDefinition.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/ClassDefinition.java,v retrieving revision 1.93 retrieving revision 1.94 diff -C2 -d -r1.93 -r1.94 *** ClassDefinition.java 2 Jun 2003 17:43:12 -0000 1.93 --- ClassDefinition.java 24 Aug 2003 18:07:28 -0000 1.94 *************** *** 60,63 **** --- 60,68 ---- int getBytecodeFlags() { return Access.INTERFACE; } + boolean implementsJavaInterface(String name) + { + return false; + } + public mlsub.typing.TypeSymbol getTypeSymbol() { *************** *** 220,223 **** --- 225,237 ---- } + boolean implementsJavaInterface(String name) + { + if (javaInterfaces != null) + for (int i = 0; i < javaInterfaces.length; i++) + if (javaInterfaces[i].toString().equals(name)) + return true; + return false; + } + public mlsub.typing.TypeSymbol getTypeSymbol() { *************** *** 449,452 **** --- 463,468 ---- abstract int getBytecodeFlags(); + + abstract boolean implementsJavaInterface(String name); /**************************************************************** |