diff --git a/README.md b/README.md index 1e2416a..b31f692 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,22 @@ -## Don't Use it (WIP) +## Don't Use it yet (WIP) [![Package Version](https://img.shields.io/hexpm/v/glove)](https://hex.pm/packages/glove) [![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/glove/) -A Gleam library to generate QBE IR code +## About +Glove is a library for working with QBE intermediate representation (IR) in Gleam. Provides utilities and functions to generate QBE code using the Gleam programming language. +## Requirements + +To use Glove, you need to have the following dependencies installed: + +Gleam programming language - Install instructions can be found [here](https://gleam.run/getting-started/installing/) + +QBE Backend can be found [here](https://c9x.me/compile/) ## Quick start diff --git a/src/glove.gleam b/src/glove.gleam index 53422a9..5de02d3 100644 --- a/src/glove.gleam +++ b/src/glove.gleam @@ -211,7 +211,12 @@ pub fn size() -> Int { /// QBE data definition pub type DataDef { - DataDef(linkage: Linkage, name: String, align: Int, items: #(Type, DataItem)) + DataDef( + linkage: Linkage, + name: String, + align: Int, + items: List(#(Type, DataItem)), + ) } pub fn new_datadef() -> DataDef { diff --git a/test/glove_test.gleam b/test/glove_test.gleam index 944c761..4572a56 100644 --- a/test/glove_test.gleam +++ b/test/glove_test.gleam @@ -1,5 +1,4 @@ import gleam/option.{None, Some} -import gleam/list import gleeunit import gleeunit/should import glove @@ -166,3 +165,44 @@ pub fn display_type_def_test() { |> should.equal("type :struct = align 4 { w 2, w, w 3 }") // Add more test cases as needed } + +// Tests for QBE.Types +pub fn display_type_test() { + // Test case 1: Base types + let result1 = glove.Word + result1 + |> glove.display_type + |> should.equal("w") + + let result2 = glove.Long + result2 + |> glove.display_type + |> should.equal("l") + + let result3 = glove.Single + result3 + |> glove.display_type + |> should.equal("s") + + let result4 = glove.Double + result4 + |> glove.display_type + |> should.equal("d") + + let result5 = glove.Byte + result5 + |> glove.display_type + |> should.equal("b") + + let result6 = glove.Halfword + result6 + |> glove.display_type + |> should.equal("h") + + // Test case 2: Extended types + let def1 = glove.TypeDef("myType", None, [#(glove.Word, 1)]) + let result5 = glove.Agreegate(def1) + result5 + |> glove.display_type + |> should.equal("type :myType = { w }") +}