aboutsummaryrefslogtreecommitdiff
path: root/hobgoblin/src/patio.hob
diff options
context:
space:
mode:
Diffstat (limited to 'hobgoblin/src/patio.hob')
-rw-r--r--hobgoblin/src/patio.hob84
1 files changed, 84 insertions, 0 deletions
diff --git a/hobgoblin/src/patio.hob b/hobgoblin/src/patio.hob
index e69de29b..5a2d0734 100644
--- a/hobgoblin/src/patio.hob
+++ b/hobgoblin/src/patio.hob
@@ -0,0 +1,84 @@
+import {Source} from ./sources;
+import {PatioInstruction} from ./patio/instructions;
+import {PatioDataLayout, PatioDataValue, PatioType} from ./patio/types;
+
+// == Compilation units ==
+
+struct PatioCompilationUnit {
+ field elements: List[PatioCompilationUnitElement];
+ field source: Source;
+}
+
+// == Compilation unit elements ==
+
+sum PatioCompilationUnitElement {
+ variant PatioDataElementImmutableDefinition;
+ variant PatioDataElementMutableDeclaration;
+ variant PatioDataElementMutableDefinition;
+ variant PatioExceptionTypeDefinition;
+ variant PatioFunctionDeclaration;
+ variant PatioFunctionDefinition;
+}
+
+struct PatioDataElementImmutableDefinition {
+ field name: String;
+ field visibility: PatioVisibility;
+ field value: PatioDataValue;
+ field source: Source;
+}
+
+struct PatioDataElementMutableDeclaration {
+ field name: String;
+ field layout: PatioDataLayout;
+ field source: Source;
+}
+
+struct PatioDataElementMutableDefinition {
+ field name: String;
+ field visibility: PatioVisibility;
+ field initialValue: PatioDataValue;
+ field source: Source;
+}
+
+struct PatioExceptionTypeDefinition {
+ field name: String;
+ field valueType: PatioType;
+ field source: Source;
+}
+
+struct PatioFunctionDeclaration {
+ field name: String;
+ field params: List[PatioLocal];
+ field returnTypes: List[PatioType];
+ field source: Source;
+}
+
+struct PatioFunctionDefinition {
+ field name: String;
+ field visibility: PatioVisibility;
+ field locals: List[PatioLocal];
+ field returnTypes: List[PatioType];
+ field body: List[PatioInstruction];
+ field source: Source;
+}
+
+// == Visibility ==
+
+enum PatioVisibility {
+ variant private;
+ variant public;
+}
+
+// == Locals ==
+
+struct PatioLocal {
+ field name: String;
+ field type: PatioType;
+ field localType: PatioLocalType;
+}
+
+enum PatioLocalType {
+ variant param;
+ variant val;
+ variant var;
+}