[Nice-commit] Nice/src/bossa/syntax niceclass.nice,1.22,1.23 niceMethod.nice,1.18,1.19 Module.java,1
Brought to you by:
bonniot
|
From: Daniel B. <bo...@us...> - 2005-02-28 14:01:18
|
Update of /cvsroot/nice/Nice/src/bossa/syntax In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15108/src/bossa/syntax Modified Files: niceclass.nice niceMethod.nice Module.java Log Message: Find compiled version of dispatch methods even when they are members of Nice classes (and not static members of the dispatch class). Index: niceMethod.nice =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/niceMethod.nice,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** niceMethod.nice 16 Jan 2005 00:28:21 -0000 1.18 --- niceMethod.nice 28 Feb 2005 14:01:07 -0000 1.19 *************** *** 326,329 **** --- 326,347 ---- gnu.bytecode.Type retType; + // Try to compile the dispatch method as a member method if possible. + ?NiceClass receiver; + if (def.getArity() == 0) + receiver = null; + else + { + receiver = getNiceClass(def.getArgTypes()[0]); + + // JVM interfaces cannot contain code. + if (receiver != null && receiver.isInterface()) + receiver = null; + + // Special treatment for serialization at the moment. + if (def.getArity() == 2 && + (name.equals("writeObject")||name.equals("readObject"))) + receiver = null; + } + /* If this package is not recompiled, *************** *** 335,339 **** as the precise types are found during typechecking. */ ! ?gnu.bytecode.Method meth = module.lookupDispatchClassMethod(name, "id", def.getFullName()); if (meth != null) // Reuse existing dispatch method header { --- 353,359 ---- as the precise types are found during typechecking. */ ! ?gnu.bytecode.Method meth = module.lookupDispatchClassMethod ! (receiver == null ? null : receiver.getClassType(), ! name, "id", def.getFullName()); if (meth != null) // Reuse existing dispatch method header { *************** *** 342,346 **** --- 362,371 ---- argTypes = notNull(meth.arg_types); + + if (receiver != null) + argTypes = [receiver.getClassType()] + argTypes; + retType = notNull(meth.return_type); + // Make sure we use the same bytecode name, since compiled code // can rely on it. *************** *** 353,374 **** } - // Try to compile the dispatch method as a member method if possible. - ?NiceClass receiver; - if (argTypes.length == 0) - receiver = null; - else - { - receiver = getNiceClass(def.getArgTypes()[0]); - - // JVM interfaces cannot contain code. - if (receiver != null && receiver.isInterface()) - receiver = null; - - // Special treatment for serialization at the moment. - if (def.getArity() == 2 && - (name.equals("writeObject")||name.equals("readObject"))) - receiver = null; - } - res = generateMethod (name, argTypes, retType, def.getSymbols(), toplevel: true, member: receiver != null); --- 378,381 ---- Index: niceclass.nice =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/niceclass.nice,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** niceclass.nice 16 Jan 2005 00:28:21 -0000 1.22 --- niceclass.nice 28 Feb 2005 14:00:58 -0000 1.23 *************** *** 388,391 **** --- 388,393 ---- public gnu.expr.ClassExp getClassExp() = classe; + public gnu.bytecode.ClassType getClassType() = classe.getClassType(); + /** Collect in 'constraints' the constraints set by each class Index: Module.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/Module.java,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** Module.java 14 Jan 2005 11:12:10 -0000 1.23 --- Module.java 28 Feb 2005 14:01:07 -0000 1.24 *************** *** 32,36 **** gnu.bytecode.ClassType createClass(String name); void addGlobalVar(gnu.expr.Declaration declaration, boolean constant); ! gnu.bytecode.Method lookupDispatchClassMethod(String name, String attribute, String value); gnu.expr.ReferenceExp addMethod(gnu.expr.LambdaExp method, boolean packageMethod); --- 32,36 ---- gnu.bytecode.ClassType createClass(String name); void addGlobalVar(gnu.expr.Declaration declaration, boolean constant); ! gnu.bytecode.Method lookupDispatchClassMethod(gnu.bytecode.ClassType clas, String name, String attribute, String value); gnu.expr.ReferenceExp addMethod(gnu.expr.LambdaExp method, boolean packageMethod); |