aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-13 13:45:03 +0000
committer_ov4 <ov4@ov4.org>2026-10-13 13:45:03 +0000
commit05cdcb6a1cc3d4de3a0b3d12d4babcd6438b4754 (patch)
treed3e482d215d9d5feba8b40f9de15d6962f1e5bac /include
parentf5a2541ed3faf9a942b867e2d54577352153afce (diff)
Add record-derived classes with explicit field visibility
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat (limited to 'include')
-rw-r--r--include/cps/Lexer.h6
-rw-r--r--include/cps/TypeAST.h8
2 files changed, 13 insertions, 1 deletions
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<RecordFieldDecl> &getFields() const { return Fields; }
};
+// CLASS <name> 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<RecordFieldDecl> Fields)
+ : RecordTypeDeclAST(Name, std::move(Fields)) {}
+};
+
// ---- Designators: chained accesses usable as lvalue or rvalue (ยง4.2) ----
enum class AccessKind : uint8_t { Index, Field, Deref };