Commit graph

5155 commits

Author SHA1 Message Date
Olivier Goffart
e95d7da888 Parser: typed syntax node accessor 2020-06-11 17:50:28 +02:00
Olivier Goffart
d4594cff97 Introduce a new DeclaredIdentifier syntax kind to disambiguiate identifiers when there are several 2020-06-11 16:55:38 +02:00
Olivier Goffart
788137e3d5 Parser: allow to specify an index token in bracket in the for loop 2020-06-11 16:55:22 +02:00
Simon Hausmann
d0b1f83297 Fix warning in Rust generated code
Allow the property accessors to be unused code
2020-06-11 16:23:53 +02:00
Simon Hausmann
ee1c879071 Extend the conditional expression test case to also test JS/interpreter
The property accessors already work nicely :-)
2020-06-11 15:52:44 +02:00
Simon Hausmann
0cf86dced2 Provide convenience accessors for public properties in C++
See parent commit for the rationale :-)
2020-06-11 15:45:16 +02:00
Simon Hausmann
be3d0ab369 Provide convenience accessors for public properties in C++
While properties declared in the root component are named as-is and
exposed as Property<T>, their get() function in particular is hard to
use because it requires an EvaluationContext as a parameter.

This patch adds get_foo() and set_foo() accessors for each public
property and hides the evaluation context business for the getter.

The added test uses this right away and adds missing test coverage for
the conditional expression.
2020-06-11 15:45:16 +02:00
Olivier Goffart
8b6bb47af8 Create a type alias for Rc<RefCell<Element>> 2020-06-11 15:28:51 +02:00
Olivier Goffart
708e62800d Test that the tree is well formed for what we expect 2020-06-11 15:01:09 +02:00
Simon Hausmann
03bef6dba3 Fix casting with conditional expressions
The following scenario would fail compiling to C++ because we failed to
determine the return type of the conditional expression:

    Test := Rectangle {
        property<bool> condition;
        property<color> extra_color;
        color: condition ? root.extra_color : 4289374890;
    }

The type of the true branch would be color and the false branch would be
a float. Since they "disagree", ty() on the expression would return
Type::Invalid. This was temporarily worked around in the C++ generator
by always returning the type of the true branch, but that's wrong.

Instead this patch changes maybe_convert_to to apply the Cast expression
to the individual branches, placing the cast only to the numberic
literal and correcting the return value of ty() on the conditional
expression.
2020-06-11 13:38:24 +02:00
Olivier Goffart
0d4f370e95 Fix linking error in the tests
We also need to link against corelib
2020-06-10 19:53:06 +02:00
Olivier Goffart
9c23326c60 Layout for the C++ as well 2020-06-10 19:41:24 +02:00
Olivier Goffart
907bea3d3b Layout for rust 2020-06-10 19:41:24 +02:00
Olivier Goffart
96a372e45d Grid layout in the interpreter
current imploementation is just a prototype
2020-06-10 19:40:47 +02:00
Olivier Goffart
ed69f4c432 WIP layouts 2020-06-10 19:40:47 +02:00
Simon Hausmann
26561beea4 Fix wasm build 2020-06-10 19:36:12 +02:00
Simon Hausmann
1a7a95a890 Reformat to pass CI 2020-06-10 18:53:57 +02:00
Simon Hausmann
63f81e1991 Add basic support for conditional expressions
Todo are automated tests and cleaning up the C++ implementation.
2020-06-10 16:04:15 +02:00
Simon Hausmann
fdbef8c3c4 Add support for parsing conditional expression syntax 2020-06-10 15:40:27 +02:00
Olivier Goffart
89968e0722 Add a Slice type which can be used in FFI 2020-06-10 14:23:57 +02:00
Olivier Goffart
7106e354a3 Fix C++ compilation
The generated cbindgen would otherwise not compile
2020-06-10 13:45:01 +02:00
Simon Hausmann
1baab9823a Another small typo fix :) 2020-06-10 12:05:44 +02:00
Simon Hausmann
ea52c7c9c9 Fix typo 2020-06-10 12:03:46 +02:00
Olivier Goffart
bd4bcdfeb3 Even better way to use enums from C++ 2020-06-10 10:18:27 +02:00
Simon Hausmann
0674c4f544 Ignore generated files 2020-06-10 10:10:00 +02:00
Olivier Goffart
4c6205d09b Use the generated internal::types::Resource from the C++ resource header 2020-06-10 10:06:41 +02:00
Simon Hausmann
983c8571e3 Minor cleanup in function naming 2020-06-10 09:27:54 +02:00
Olivier Goffart
58618c0683 Documentation for the interpreter 2020-06-10 09:26:11 +02:00
Olivier Goffart
300cb26208 Rename the interpreter crate to sixtyfps_interpreter 2020-06-10 08:41:49 +02:00
Simon Hausmann
f95b31bca4 Fix build 2020-06-09 23:24:38 +02:00
Simon Hausmann
1404cb73ae Add support for embedding resources in the rust generator
This is relatively straight-forward via a pass in the compiler to
collect the resources to embed and then use include_bytes! (once per
resource).

What's really annoying is that the rust resource enum can't store a
&'static [u8] because cbindgen doesn't represent that, probably because
the slice representation isn't guaranteed to stay as it is. So instead
this, for now, uses raw pointers.
2020-06-09 22:54:29 +02:00
Simon Hausmann
82a7c3e070 Change rust-wasm example to use the separate file compilation
This makes it easier to switch on resource embedding then :-)
2020-06-09 22:54:29 +02:00
Simon Hausmann
5bae6e01a5 Prepare for the ability to embed image data
The Image's source property used to be a string. Now it is a Resource
enum, which can either be None or an absolute file path to the image on
disk. This also replaces the internal Image type.

The compiler internally resolves the img bang expression to a resource
reference, which shall remain just an absolute path. For now the target
generator passes that through, but in the future the target generator
may choose a target specific way of embedding the data and thus
generating a different Resource type in the final code (through
compile_expression in the cpp and rust generator).

The C++ binding is a bit messy as cbindgen doesn't really support
exporting enums that can be constructed on the C++ side. So instead we
use cbindgen to merely export the type internally and only use the tag
from it then. The public API is then a custom Resource type that is
meant to be binary compatible.
2020-06-09 22:54:29 +02:00
Olivier Goffart
a756b7fa0e Keep a reference to the AST node in the Element structure
So we can give error for elements
2020-06-09 18:20:32 +02:00
Simon Hausmann
aa61a9d2b2 Reduce the #[cfg] usage a little in the GL renderer
Collect configuration specific fields in one PlatformData structure.
2020-06-09 14:04:39 +02:00
Simon Hausmann
afd7319ae5 Rename corelib to sixtyfps_corelib
This is consistent with the other packages and since corelib is now also
a cdylib, libsixtyfps_corelib.so looks much better than libcorelib.so
:-)
2020-06-09 13:27:18 +02:00
Simon Hausmann
547a732e33 Fix rebuild issues, part 10523
By setting RUSTFLAGS in the Cargo config we run into the situation that
when doing a host build, all rust files are compiled with the flags,
including build.rs. When cross-compiling, build.rs is not build with the
RUSTFLAGS specified. That makes kind of sense, but it also means that
all the build scripts are always recompiled when switching between a
target and a host build - and that applies to *all* packages, including
dependencies.

So short of a better solution, this patch removes the need to set
RUSTFLAGS. It was used to extract the system library dependencies for
the static library we'd create. Instead we're now building two shared
libraries and are linking against them. They contain the rust library
twice, so that's not really a desirable final state either, but
productivity wins right now :-)

It might make sense to go back to creating *one* shared library through
a dedicated crate and -- since 'pub extern "C"' functions are not
transitively exported, it may require re-exporting them by hand or using
some clever build trick perhaps.
2020-06-09 13:08:59 +02:00
Olivier Goffart
c05da294a1 Add GridLayout and Row
The compiler currently lowers them to nothing
2020-06-09 12:46:16 +02:00
Olivier Goffart
b7bc884447 Run the JS test without using npm install 2020-06-09 10:25:38 +02:00
Olivier Goffart
34931e58c0 Polishing of the documentation 2020-06-08 17:57:18 +02:00
Olivier Goffart
89b77937bb Put some sensible value into the LayoutInfo struct 2020-06-08 17:55:10 +02:00
Simon Hausmann
bf58647ad1 Fix wasm build, part 2
Build only the example for now, explicitly. There are other crates that
don't compile to wasm (notably proc-macro related ones).
2020-06-08 17:48:34 +02:00
Simon Hausmann
a176f08b13 Change rustwasm example to plus-minus, minus the image.
Next step though is to convert to the external .60 file build.
2020-06-08 17:06:53 +02:00
Simon Hausmann
e10cecef14 Re-enable the WASM build
This reverts commit f9cafcdbea.
2020-06-08 17:01:45 +02:00
Simon Hausmann
fb2b12c28a Implement basic text rendering on the wasm port
Based on Olivier's suggestion, the text rendering primitive is created
by painting the text onto a temporary HTML canvas
element and binding that to a texture.
2020-06-08 17:00:59 +02:00
Simon Hausmann
aea81f5202 Upgrade glow to a patched version
The GL bindings were missing one feature on the web side, the ability to
set texture image data from an HTML canvas element.
We're going to need that soon.

The bump to a newer version also came with some odd (but sensible)
source incompatibilities.
2020-06-08 16:57:58 +02:00
Simon Hausmann
2c1ecc7478 Revert attempts to make emscripten build work
This reverts commit aef96cb7d8, commit
1b2d0a309f, and commit
82214dc2d7.

The wasm32-unknown-emscripten target is not very well supported right
now, from build issues in instant/winit to toolchain issues
(https://github.com/rust-lang/rust/issues/66916).

So let's not go down that route for now.
2020-06-08 14:54:24 +02:00
Simon Hausmann
aef96cb7d8 Refine winit stdweb feature selection
Amend commit 1b2d0a309f by restricting the
stdweb choice only when targeting emscripten.
2020-06-08 13:14:32 +02:00
Simon Hausmann
1b2d0a309f Fix wasm32-unknown-emscripten build of corelib
Depend on a version of winit that enables the use within emscripten.
2020-06-08 13:04:48 +02:00
Simon Hausmann
82214dc2d7 Fix wasm32-unknown-emscripten build of corelib
There's an implicit dependency to instant, which in turn requires a patch
to work around https://github.com/rust-lang/rust/issues/67782
2020-06-08 13:03:29 +02:00