diff options
Diffstat (limited to 'hobgoblin/src/patio.hob')
| -rw-r--r-- | hobgoblin/src/patio.hob | 84 |
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; +} |
