diff --git a/.gitignore b/.gitignore index 9e2a2ba..4166831 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ init_tests output diagnostic_tests analyzer_tests -decl_tests \ No newline at end of file +decl_tests +jir_tests \ No newline at end of file diff --git a/README.md b/README.md index 02c7981..6d92af7 100644 --- a/README.md +++ b/README.md @@ -24,56 +24,6 @@ brew tap raphamorim/jam https://github.com/raphamorim/jam brew install --HEAD jam ``` -Quick overview: - -```jam -const std = import("std"); -const {Vec} = import("collections"); - -const Histogram = struct { - bins: Vec(u32), - - // `cfn` opts a method into the compiler's synthesized-call set. - // - // cfn default() opt-in constructor - // cfn drop(...) auto-fires at every scope exit - // cfn at(self, i) desugars `obj[i]` (read) - // cfn setAt(...) desugars `obj[i] = x` (write) - cfn default() Self { - var bins: Vec(u32) = Vec(u32).withCapacity(256); - var i: u32 = 0; - while (i < 256) { - bins.push(0); - i = i + 1; - } - return Self { bins: bins }; - } - cfn drop(self: mut Self) { - std.fmt.println("drop has happened"); - } - cfn at(self: Self, i: u32) u32 { - return self.bins[i]; - } - cfn setAt(self: mut Self, i: u32, value: u32) { - self.bins[i] = value; - } - - fn record(self: mut Self, byte: u8) { - const i: u32 = byte as u32; - self[i] = self[i] + 1; - } -}; - -fn main() { - var h: Histogram = Histogram.default(); - h.record(7); - h.record(7); - h.record(42); - std.fmt.println(h[7]); // 2, via h.at(7) - std.fmt.println(h[42]); // 1 -} -``` - ## Contributing 1. [Donate monthly](https://github.com/sponsors/raphamorim). diff --git a/jir_tests b/jir_tests deleted file mode 100755 index 747faf4a7f420617a45ea34f8a63b91d109b9ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42152 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�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