diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-01-21 10:37:37 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2026-01-21 10:37:37 +0100 |
| commit | cf85412812e3b6107fb13cd8b2f6cceedd421e12 (patch) | |
| tree | 1dc1707bf6edb192cd90c01780c5dd032684ade2 | |
| parent | dd67da34d17d54b3e70bd9fe42de19d64960b14f (diff) | |
chore: wip: More Nectar features and expanding codegen.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
| -rw-r--r-- | include/CompilerKit/AST.h | 1 | ||||
| -rw-r--r-- | include/GenericsLibrary/fstream.nhh | 14 | ||||
| -rw-r--r-- | include/GenericsLibrary/iterator.nhh | 32 | ||||
| -rw-r--r-- | src/CompilerKit/src/Compilers/NectarCompiler+AMD64.cc | 1 |
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); |
