|
Revision 4128, 1.2 KB
(checked in by jmaessen, 3 months ago)
|
|
[codegen] Fix two major bugs: first, make sure we name system classes
correctly when constructing jvm-level type descriptors. Second,
distinguish between dotted method calls on trait-typed receivers
(which require INVOKEINTERFACE) from those on object-typed receivers
(which require INVOKEVIRTUAL). This latter requires some tricky
special-case code for builtin types.
Tried to clean up NamingCzar? and CodeGen? a bit along the way, as
messiness in these classes slowed down bug hunting considerably.
|
| Line | |
|---|
| 1 | (******************************************************************************* |
|---|
| 2 | Copyright 2009 Sun Microsystems, Inc., |
|---|
| 3 | 4150 Network Circle, Santa Clara, California 95054, U.S.A. |
|---|
| 4 | All rights reserved. |
|---|
| 5 | |
|---|
| 6 | U.S. Government Rights - Commercial software. |
|---|
| 7 | Government users are subject to the Sun Microsystems, Inc. standard |
|---|
| 8 | license agreement and applicable provisions of the FAR and its supplements. |
|---|
| 9 | |
|---|
| 10 | Use is subject to license terms. |
|---|
| 11 | |
|---|
| 12 | This distribution may include materials developed by third parties. |
|---|
| 13 | |
|---|
| 14 | Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered |
|---|
| 15 | trademarks of Sun Microsystems, Inc. in the U.S. and other countries. |
|---|
| 16 | ******************************************************************************) |
|---|
| 17 | |
|---|
| 18 | component FieldAccess |
|---|
| 19 | |
|---|
| 20 | import java com.sun.fortress.nativeHelpers.{simplePrintln.nativePrintln => jPrintln} |
|---|
| 21 | export Executable |
|---|
| 22 | |
|---|
| 23 | trait Z end |
|---|
| 24 | trait T extends Z end |
|---|
| 25 | trait U extends Z end |
|---|
| 26 | trait S extends {T,U} end |
|---|
| 27 | |
|---|
| 28 | object O(a:String) extends S |
|---|
| 29 | val():String = a |
|---|
| 30 | end; |
|---|
| 31 | |
|---|
| 32 | object Q(b:String, c:String) extends U end; |
|---|
| 33 | |
|---|
| 34 | (* Field ref not yet implemented, sigh. *) |
|---|
| 35 | f(o:O):() = jPrintln(o.a) |
|---|
| 36 | f(o:Z):() = jPrintln("Hi!") |
|---|
| 37 | |
|---|
| 38 | g(x:Z):() = f(x) |
|---|
| 39 | |
|---|
| 40 | run():() = do |
|---|
| 41 | g(O("Ha!")) |
|---|
| 42 | g(Q("Hi!", "c")) |
|---|
| 43 | (* jPrintln("Hi!") *) |
|---|
| 44 | end |
|---|
| 45 | |
|---|
| 46 | end |
|---|