object LinkingInfo
- Alphabetic
- By Inheritance
- LinkingInfo
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
developmentMode: Boolean
Returns true if we are linking for development, false otherwise.
Returns true if we are linking for development, false otherwise.
developmentModeis always equal to!productionMode.This ends up being constant-folded to a constant at link-time. So constant-folding, inlining, and other local optimizations can be leveraged with this "constant" to write code that should only be executed in production mode or development mode.
A typical usage of this method is:
if (developmentMode) { performExpensiveSanityChecks() }At link-time,
developmentModewill either be a constant true, in which case the above snippet folds intoperformExpensiveSanityChecks()
or a constant false, in which case it is dead-code-eliminated away, yielding maximum performance in production.
- Annotations
- @inline()
- See also
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
esVersion: Int
Version (edition) of the ECMAScript Language Specification that is assumed to be supported by the runtime.
Version (edition) of the ECMAScript Language Specification that is assumed to be supported by the runtime.
This is an integer that represents the *edition* of the ECMAScript Language Specification. For example, ECMAScript 2015 is represented with the value
6.As an exception, ECMAScript 5.1 is represented with the value
5.This value can be used to:
- avoid feature tests and dead-code-eliminate polyfills (see below), or
- conditionally offer library features that depend on underlying ECMAScript support.
---
This ends up being constant-folded to a constant at link-time. So constant-folding, inlining, and other local optimizations can be leveraged with this "constant" to write polyfills that can be dead-code-eliminated.
A typical usage of this method is:
if (esVersion >= ESVersion.ES2018 || featureTest()) useES2018Feature() else usePolyfill()
At link-time,
esVersionwill either be a constant less thanESVersion.ES2018, in which case the above snippet folds intoif (featureTest()) useES2018Feature() else usePolyfill()
or a constant greater or equal to
ESVersion.ES2018, in which case it folds intouseES2018Feature()
- Annotations
- @inline() @linkTimeProperty( "core/esVersion" )
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
isWebAssembly: Boolean
Whether we are linking to WebAssembly.
Whether we are linking to WebAssembly.
This property can be used to delegate to different code paths optimized for WebAssembly rather than for JavaScript.
---
This ends up being constant-folded to a constant at link-time. So constant-folding, inlining, and other local optimizations can be leveraged with this "constant" to write alternatives that can be dead-code-eliminated.
A typical usage of this method is:
if (isWebAssembly) implementationOptimizedForWebAssembly() else implementationOptimizedForJavaScript()
At link-time,
isWebAssemblywill either be a constant true, in which case the above snippet folds intoimplementationOptimizedForWebAssembly()
or a constant false, in which case it folds into
implementationOptimizedForJavaScript()
- Annotations
- @inline() @linkTimeProperty( "core/isWebAssembly" )
-
def
linkTimeIf[T](cond: Boolean)(thenp: T)(elsep: T): T
Link-time conditional branching.
Link-time conditional branching.
A
linkTimeIfexpression behaves like anif, but it is guaranteed to be resolved at link-time. This prevents the unused branch to be linked at all. It can therefore reference APIs or language features that would otherwise fail to link.The condition
condcan be constructed using:- Calls to methods annotated with
@linkTimeProperty - Integer or boolean constants
- Binary operators that return a boolean value
A typical use case is to leverage the
**operator on JavaScriptbigints if it is available, and otherwise fall back on using ScalaBigInts. Indeed, the**operator refuses to link when the targetesVersionis too low.// Returns true iff 2^x < 10^y, for x and y positive integers def compareTwoPowTenPow(x: Int, y: Int): Boolean = { import scala.scalajs.LinkingInfo._ linkTimeIf(esVersion >= ESVersion.ES2020) { // JS bigints are available, and a fortiori their ** operator (js.BigInt(2) ** js.BigInt(x)) < (js.BigInt(10) ** js.BigInt(y)) } { // Fall back on Scala's BigInt's, which use a lot more code size BigInt(2).pow(x) < BigInt(10).pow(y) } }
- Calls to methods annotated with
-
def
linkerVersion: String
Version of the linker.
Version of the linker.
- Annotations
- @inline() @linkTimeProperty( "core/linkerVersion" )
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
productionMode: Boolean
Returns true if we are linking for production, false otherwise.
Returns true if we are linking for production, false otherwise.
productionModeis always equal to!developmentMode.This ends up being constant-folded to a constant at link-time. So constant-folding, inlining, and other local optimizations can be leveraged with this "constant" to write code that should only be executed in production mode or development mode.
A typical usage of this method is:
val warningsLogger = if (productionMode) new NullLogger else new ConsoleLogger
At link-time,
productionModewill either be a constant true, in which case the above snippet folds intoval warningsLogger = new NullLogger
or a constant false, in which case it folds into
val warningsLogger = new ConsoleLogger.
- Annotations
- @inline() @linkTimeProperty( "core/productionMode" )
- See also
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
def
useECMAScript2015Semantics: Boolean
Whether Scala.js language features use ECMAScript 2015 (edition 6) semantics or not.
Whether Scala.js language features use ECMAScript 2015 (edition 6) semantics or not.
When
true, the following semantics apply:- JavaScript classes are true
class'es, therefore a) they can extend native JavaScriptclass'es and b) they inherit static members from their parent class. - Lambdas for
js.Functions that are not alsojs.ThisFunctions are JavaScript arrow functions (=>). Lambdas forjs.ThisFunctions arefunctionfunctions. - Throwable classes are proper JavaScript error classes, recognized as such by debuggers.
- In Script (
NoModule) mode, top-level exports are defined aslets.
When
false, the following semantics apply:- All classes defined in Scala.js are
functions instead ofclass'es. Non-native JS classes cannot extend native JSclass'es and they do not inherit static members from their parent class. - All lambdas for
js.Functions arefunctions. - Throwable classes have JavaScript's
Error.prototypein their prototype chain, but they are not considered proper error classes. - In Script (
NoModule) mode, top-level exports are defined asvars.
Prefer reading this value instead of
esVersionto determine which semantics apply.For example, it can be used in tests whose results depend on which semantics are used.
---
This ends up being constant-folded to a constant at link-time. So constant-folding, inlining, and other local optimizations can be leveraged with this "constant" to write alternatives that can be dead-code-eliminated.
A typical usage of this method is:
if (useECMAScript2015Semantics) implementationWithES2015Semantics() else implementationWithoutES2015Semantics()
At link-time,
useECMAScript2015Semanticswill either be a constant true, in which case the above snippet folds intoimplementationWithES2015Semantics()
or a constant false, in which case it folds into
implementationWithoutES2015Semantics()
- Annotations
- @inline() @linkTimeProperty( "core/useECMAScript2015Semantics" )
- JavaScript classes are true
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
object
ESVersion
Constants for the value of
esVersion.
Deprecated Value Members
-
def
assumingES6: Boolean
Returns true if we are assuming that the target platform supports ECMAScript 6, false otherwise.
Returns true if we are assuming that the target platform supports ECMAScript 6, false otherwise.
This is
trueif and only ifesVersion >= ESVersion.ES2015.---
This ends up being constant-folded to a constant at link-time. So constant-folding, inlining, and other local optimizations can be leveraged with this "constant" to write polyfills that can be dead-code-eliminated.
A typical usage of this method is:
if (assumingES6 || featureTest()) useES6Feature() else usePolyfill()
At link-time,
assumingES6will either be a constant false, in which case the above snippet folds intoif (featureTest()) useES6Feature() else usePolyfill()
or a constant true, in which case it folds into
useES6Feature()
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 1.6.0) use esVersion >= ESVersion.ES2015 instead