aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-07-24 18:11:43 +0200
committerEugen Wissner <belka@caraus.de>2026-07-24 18:11:43 +0200
commit5dc1e4c991efae2e0dd96b59bc57b2cd81a8c5fb (patch)
treef18cee693c72e6d7bfa2684bb522e52cd1a08033 /include
parentbb4f474cb2247e0e314beab5d7d72e673ff4e8b6 (diff)
downloadelna-5dc1e4c991efae2e0dd96b59bc57b2cd81a8c5fb.tar.gz
Check the compound statement condition is a boolean
Diffstat (limited to 'include')
-rw-r--r--include/elna/boot/type_check.h8
-rw-r--r--include/elna/gcc/elna1.h5
2 files changed, 10 insertions, 3 deletions
diff --git a/include/elna/boot/type_check.h b/include/elna/boot/type_check.h
index e500007..f95c72b 100644
--- a/include/elna/boot/type_check.h
+++ b/include/elna/boot/type_check.h
@@ -96,7 +96,8 @@ namespace elna::boot
enum class kind
{
record_base,
- for_loop
+ for_loop,
+ condition
};
type_kind_error(const source_position position, kind type_kind, const type& actual);
@@ -227,6 +228,8 @@ namespace elna::boot
static bool check_unresolved_symbol(const std::shared_ptr<alias_type>& alias,
std::vector<std::string>& path);
+ void visit_and_validate_condition(expression& condition);
+
public:
explicit type_analysis_visitor(symbol_bag bag, const target_info& target);
@@ -239,6 +242,9 @@ namespace elna::boot
void visit(procedure_call *call) override;
void visit(case_statement *statement) override;
void visit(for_statement *statement) override;
+ void visit(repeat_statement *statement) override;
+ void visit(while_statement *statement) override;
+ void visit(if_statement *statement) override;
void visit(record_constructor_expression *expression) override;
void visit(array_constructor_expression *expression) override;
void visit(slicing_expression *expression) override;
diff --git a/include/elna/gcc/elna1.h b/include/elna/gcc/elna1.h
index 34cf091..580526a 100644
--- a/include/elna/gcc/elna1.h
+++ b/include/elna/gcc/elna1.h
@@ -27,7 +27,7 @@ enum elna_tree_index
ELNA_TI_FLOAT_TYPE,
ELNA_TI_BOOL_TRUE,
ELNA_TI_BOOL_FALSE,
- ELNA_TI_POINTER_NIL,
+ ELNA_TI_WORD_ONE,
ELNA_TI_MAX
};
@@ -43,7 +43,8 @@ extern std::vector<std::string> elna_include_dirs;
#define elna_float_type_node elna_global_trees[ELNA_TI_FLOAT_TYPE]
#define elna_bool_true_node elna_global_trees[ELNA_TI_BOOL_TRUE]
#define elna_bool_false_node elna_global_trees[ELNA_TI_BOOL_FALSE]
-#define elna_pointer_nil_node elna_global_trees[ELNA_TI_POINTER_NIL]
+#define elna_word_one_node elna_global_trees[ELNA_TI_WORD_ONE]
+
/* Language-dependent contents of a type. */
struct GTY (()) lang_type
{