diff options
| author | _ov4 <ov4@ov4.org> | 2026-10-13 13:45:03 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-10-13 13:45:03 +0000 |
| commit | 05cdcb6a1cc3d4de3a0b3d12d4babcd6438b4754 (patch) | |
| tree | d3e482d215d9d5feba8b40f9de15d6962f1e5bac /include | |
| parent | f5a2541ed3faf9a942b867e2d54577352153afce (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.h | 6 | ||||
| -rw-r--r-- | include/cps/TypeAST.h | 8 |
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 }; |
