summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-01-21 10:37:37 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-01-21 10:37:37 +0100
commitcf85412812e3b6107fb13cd8b2f6cceedd421e12 (patch)
tree1dc1707bf6edb192cd90c01780c5dd032684ade2
parentdd67da34d17d54b3e70bd9fe42de19d64960b14f (diff)
chore: wip: More Nectar features and expanding codegen.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--include/CompilerKit/AST.h1
-rw-r--r--include/GenericsLibrary/fstream.nhh14
-rw-r--r--include/GenericsLibrary/iterator.nhh32
-rw-r--r--src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc1
4 files changed, 36 insertions, 12 deletions
diff --git a/include/CompilerKit/AST.h b/include/CompilerKit/AST.h
index 3632ef5..80dd19a 100644
--- a/include/CompilerKit/AST.h
+++ b/include/CompilerKit/AST.h
@@ -36,6 +36,7 @@ enum struct KeywordKind {
kKeywordKindBodyEnd,
kKeywordKindImplInit,
kKeywordKindImpl,
+ kKeywordKindTrait,
kKeywordKindNew,
kKeywordKindDelete,
kKeywordKindAccess,
diff --git a/include/GenericsLibrary/fstream.nhh b/include/GenericsLibrary/fstream.nhh
index 16ac78b..a40a8e7 100644
--- a/include/GenericsLibrary/fstream.nhh
+++ b/include/GenericsLibrary/fstream.nhh
@@ -8,7 +8,17 @@
#include <GenericsLibrary/iterator.nhh>
-impl fstream
+// Rules for fstream implementation:
+// - fd_ is the file descriptor.
+trait fstream_traits
+{
+ let write(let data, let size);
+ let read(let region, let size);
+
+ let fd_ := 0;
+};
+
+impl fstream : fstream_traits
{
let init()
{
@@ -22,7 +32,6 @@ impl fstream
let write(let data, let size)
{
- let fd_ := __traits_current_fd(data, size);
let written := __traits_write(fd_, data, size);
return written;
@@ -30,7 +39,6 @@ impl fstream
let read(let region, let size)
{
- let fd_ := __traits_current_fd(region, size);
let readen := __traits_read(fd_, region, size);
return readen;
diff --git a/include/GenericsLibrary/iterator.nhh b/include/GenericsLibrary/iterator.nhh
index 302734c..3e6c723 100644
--- a/include/GenericsLibrary/iterator.nhh
+++ b/include/GenericsLibrary/iterator.nhh
@@ -6,7 +6,22 @@
#ifndef NECTAR_LIBNECTAR_ITERATOR_NHH
#define NECTAR_LIBNECTAR_ITERATOR_NHH
-impl iterator_traits
+// Rules for iterator implementation:
+// - _begin is the starting point of the iterator.
+// - _end is the number of elements to iterate over.
+// - _size is the total size of the collection.
+trait iterator_traits
+{
+ let _begin := 0;
+ let _end := 0;
+ let _size := 0;
+
+ let begin();
+ let end();
+ let size();
+};
+
+impl iterator : iterator_traits
{
let init()
{
@@ -18,24 +33,23 @@ impl iterator_traits
return;
}
- let begin(let it)
+ let begin()
{
- let end := it._begin;
+ let end := _begin;
return end;
}
- let end(let it)
+ let end()
{
- let end := it._begin;
- end += it._end;
+ let end :=_begin;
+ end += _end;
return end;
}
- let size(let it)
+ let size()
{
- let sz := it._size;
- return sz;
+ return _size;
}
};
diff --git a/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc b/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc
index c8bf13b..557d9f2 100644
--- a/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc
+++ b/src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc
@@ -1428,6 +1428,7 @@ NECTAR_MODULE(CompilerNectarAMD64) {
bool skip = false;
kKeywords.emplace_back("impl", CompilerKit::KeywordKind::kKeywordKindImpl);
+ kKeywords.emplace_back("trait", CompilerKit::KeywordKind::kKeywordKindTrait);
kKeywords.emplace_back("{", CompilerKit::KeywordKind::kKeywordKindBodyStart);
kKeywords.emplace_back("}", CompilerKit::KeywordKind::kKeywordKindBodyEnd);
kKeywords.emplace_back("{}", CompilerKit::KeywordKind::kKeywordKindImplInit);