summaryrefslogtreecommitdiff
path: root/src/tokens/semantic.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tokens/semantic.rs')
-rw-r--r--src/tokens/semantic.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/tokens/semantic.rs b/src/tokens/semantic.rs
new file mode 100644
index 0000000..ed53685
--- /dev/null
+++ b/src/tokens/semantic.rs
@@ -0,0 +1,71 @@
+use crate::*;
+
+
+pub enum SemanticToken {
+ MacroDefinition,
+ Invocation,
+}
+
+pub struct Invocation {
+ pub name: String,
+ pub bytecode: BytecodeSpan,
+ pub arguments: Vec<InvocationArgument>,
+}
+
+pub struct BlockLiteral {
+ pub tokens: Vec<BlockToken>,
+}
+
+pub struct BlockToken {
+ pub source: SourceSpan,
+ pub bytecode: BytecodeSpan,
+ pub variant: BlockTokenVariant,
+}
+
+pub enum BlockTokenVariant {
+ Invocation(Invocation),
+ Word(PackedBinaryLiteral),
+}
+
+pub struct MacroDefinition {
+ pub name: String,
+ pub arguments: Vec<DefinitionArgument>,
+ pub body: BlockLiteral,
+}
+
+// -------------------------------------------------------------------------- //
+
+pub struct SemanticParseError {
+ pub source: SourceSpan,
+ pub variant: SemanticParseErrorVariant,
+}
+
+pub enum SemanticParseErrorVariant {
+
+}
+
+// -------------------------------------------------------------------------- //
+
+pub struct DefinitionArgument {
+ pub name: String,
+ pub source: SourceSpan,
+ pub variant: DefinitionArgumentVariant,
+}
+
+pub enum DefinitionArgumentVariant {
+ Integer,
+ Block,
+}
+
+pub struct InvocationArgument {
+ pub source: SourceSpan,
+ pub variant: InvocationArgumentVariant,
+}
+
+pub enum InvocationArgumentVariant {
+ BlockLiteral(BlockLiteral),
+ IntegerLiteral(usize),
+ ConstantExpression(ConstantExpression),
+ Invocation(Invocation),
+}
+