From 05cdcb6a1cc3d4de3a0b3d12d4babcd6438b4754 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 13 Oct 2026 13:45:03 +0000 Subject: Add record-derived classes with explicit field visibility Co-Authored-By: Claude Fable 5.1 --- include/cps/Lexer.h | 6 +++++- include/cps/TypeAST.h | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/cps/Lexer.h b/include/cps/Lexer.h index d83e808..3652df0 100644 --- a/include/cps/Lexer.h +++ b/include/cps/Lexer.h @@ -84,7 +84,11 @@ enum Token { tok_type = -600, tok_endtype = -601, tok_set = -602, // reserved: SET types are recognised but not implemented - tok_define = -603 // reserved: DEFINE (set literals) likewise + tok_define = -603, // reserved: DEFINE (set literals) likewise + tok_class = -604, + tok_endclass = -605, + tok_public = -606, + tok_private = -607 }; class Lexer { diff --git a/include/cps/TypeAST.h b/include/cps/TypeAST.h index 601b49b..a23f836 100644 --- a/include/cps/TypeAST.h +++ b/include/cps/TypeAST.h @@ -60,6 +60,14 @@ public: const std::vector &getFields() const { return Fields; } }; +// CLASS with explicitly PUBLIC/PRIVATE fields, ending in ENDCLASS. +// Storage and value semantics are inherited from record declarations. +class ClassTypeDeclAST : public RecordTypeDeclAST { +public: + ClassTypeDeclAST(const std::string &Name, std::vector Fields) + : RecordTypeDeclAST(Name, std::move(Fields)) {} +}; + // ---- Designators: chained accesses usable as lvalue or rvalue (ยง4.2) ---- enum class AccessKind : uint8_t { Index, Field, Deref }; -- cgit v1.3.1-4-g156e