aboutsummaryrefslogtreecommitdiff
path: root/include/cps
diff options
context:
space:
mode:
Diffstat (limited to 'include/cps')
-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 };