Mercurial > hg > truffle
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 21716:2f9e4d984d16
Give languages a chance to do implicit exports. Prefer explicit exports over implicit ones.
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Thu, 04 Jun 2015 08:08:05 +0200 |
parents | 1c76a5662753 |
children | 45083be8a812 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Thu Jun 04 01:00:44 2015 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java Thu Jun 04 08:08:05 2015 +0200 @@ -96,14 +96,25 @@ * somebody asks for it (by calling this method). * <p> * The exported object can either be <code>TruffleObject</code> (e.g. a native object from the - * other language) to support interoperability between languages or one of Java primitive - * wrappers ( {@link Integer}, {@link Double}, {@link Short}, etc.). + * other language) to support inter-operability between languages, {@link String} or one of Java + * primitive wrappers ( {@link Integer}, {@link Double}, {@link Short}, {@link Boolean}, etc.). + * <p> + * The way a symbol becomes <em>exported</em> is language dependant. In general it is preferred + * to make the export explicit - e.g. call some function or method to register an object under + * specific name. Some languages may however decide to support implicit export of symbols (for + * example from global scope, if they have one). However explicit exports should always be + * preferred. Implicitly exported object of some name should only be used when there is no + * explicit export under such <code>globalName</code>. To ensure so the infrastructure first + * asks all known languages for <code>onlyExplicit</code> symbols and only when none is found, + * it does one more round with <code>onlyExplicit</code> set to <code>false</code>. * * @param globalName the name of the global symbol to find + * @param onlyExplicit should the language seek for implicitly exported object or only consider + * the explicitly exported ones? * @return an exported object or <code>null</code>, if the symbol does not represent anything * meaningful in this language */ - protected abstract Object findExportedSymbol(String globalName); + protected abstract Object findExportedSymbol(String globalName, boolean onlyExplicit); /** * Returns global object for the language. @@ -210,8 +221,8 @@ } @Override - protected Object findExportedSymbol(TruffleLanguage l, String globalName) { - return l.findExportedSymbol(globalName); + protected Object findExportedSymbol(TruffleLanguage l, String globalName, boolean onlyExplicit) { + return l.findExportedSymbol(globalName, onlyExplicit); } @Override