Commit Graph

1 Commits

Author SHA1 Message Date
Luca Di Sera bd6df61c81 qmlsc: Support Math static properties
The javascript Math object presents some static properties that allow
access to some general mathematical constants.

Currently, `qmlsc` will refuse to generate optimized code for those
properties when used in a binding, for example given:

```
import QtQuick

Window {
    width: 200 * Math.PI
}

```

`qmlsc` will report a warning and will not generate code for the "width"
binding.

To allow `qmlsc` to generate optimized code for such cases, the handling
of `Math` related properties lookups is now specialized.

`QQmlJSTypePropagator::propagatePropertyLookup`, which is called when
dealing with an access such as `Math.PI`, was modified to consider the
result type a "double" when dealing with properties on the `Math`
object.

`QQmlJSCodeGenerator::generate_GetLookupHelper`, which generates the
code that provides a value for the property access, was modified to
special case lookups on the `Math` object.

If a property is being looked up on the `Math` object, `qmlsc` will now
generate a direct assignment for the output variable to a constant value
that is suitable for the accessed property.

A test was added to ensure that the snippet from the bug-report now
compiles without warnings.

A test was added to ensure that the properties from the Math global
object have an approximately correct value.

Fixes: QTBUG-113150
Change-Id: I8903794fc8ce2b55532a4706e1bda07a7b73f311
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2024-04-18 22:30:24 +02:00