@@ -726,10 +726,46 @@ static ecsact_eval_error eval_component_statement(
726726 return err;
727727 }
728728
729- if (auto err = disallow_statement_params (statement, context)) {
729+ constexpr auto allowed_params = std::array{" stream" sv, " transient" sv};
730+ if (auto err = allow_statement_params (statement, context, allowed_params)) {
730731 return *err;
731732 }
732733
734+ auto stream_param =
735+ statement_param<bool , std::string_view>(statement, " stream" sv);
736+ auto transient_param = statement_param<bool >(statement, " transient" sv);
737+ auto component_type = ECSACT_COMPONENT_TYPE_NONE;
738+
739+ if (stream_param) {
740+ auto stream_type = std::get_if<std::string_view>(&stream_param.value ());
741+ if (stream_type) {
742+ if (*stream_type != " lazy" sv) {
743+ return ecsact_eval_error{
744+ .code = ECSACT_EVAL_ERR_INVALID_PARAMETER_VALUE,
745+ .relevant_content = statement.parameters [0 ].name ,
746+ };
747+ }
748+
749+ component_type = ECSACT_COMPONENT_TYPE_LAZY_STREAM;
750+ } else if (std::get<bool >(stream_param.value ())) {
751+ component_type = ECSACT_COMPONENT_TYPE_STREAM;
752+ }
753+ }
754+
755+ if (transient_param) {
756+ if (transient_param.value ()) {
757+ if (component_type != ECSACT_COMPONENT_TYPE_NONE) {
758+ // can't have transient stream
759+ return ecsact_eval_error{
760+ .code = ECSACT_EVAL_ERR_INVALID_PARAMETER_VALUE,
761+ .relevant_content = statement.parameters [0 ].name ,
762+ };
763+ }
764+
765+ component_type = ECSACT_COMPONENT_TYPE_TRANSIENT;
766+ }
767+ }
768+
733769 auto name = std::string (data.component_name .data , data.component_name .length );
734770
735771 auto existing_decl = find_by_name<ecsact_decl_id>(package_id, name);
@@ -740,12 +776,14 @@ static ecsact_eval_error eval_component_statement(
740776 };
741777 }
742778
743- ecsact_create_component (
779+ auto comp_id = ecsact_create_component (
744780 package_id,
745781 data.component_name .data ,
746782 data.component_name .length
747783 );
748784
785+ ecsact_set_component_type (comp_id, component_type);
786+
749787 return {};
750788}
751789
0 commit comments