From 56c8214f365c4ad72c0de0664cc5dbd4f52b2c5e Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 18 Dec 2025 00:54:16 +0300 Subject: [PATCH] Don't allow recursive structs --- libs/interpreter/source/exec.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libs/interpreter/source/exec.cpp b/libs/interpreter/source/exec.cpp index e00885e..38b28a6 100644 --- a/libs/interpreter/source/exec.cpp +++ b/libs/interpreter/source/exec.cpp @@ -194,8 +194,15 @@ namespace pslang::interpreter if (scope.contains(struct_definition.name)) throw std::runtime_error("Identifier \"" + struct_definition.name + "\" is already defined in this scope"); - auto & result = scope.structs[struct_definition.name]; - result.fields = struct_definition.fields; + struct_data result; + for (auto const & field : struct_definition.fields) + { + result.fields.push_back({ + .name = field.name, + .type = std::make_unique(resolve_type(context, *field.type)), + }); + } + scope.structs[struct_definition.name] = std::move(result); } void exec_impl(context & context, ast::statement_list_ptr const & statements)