diff --git a/.gitignore b/.gitignore
index 13fe958..a8d2bde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,4 @@ Thumbs.db
Desktop.ini
.DS_Store
-output/*.o
-output/out
-output/out.asm
+out
diff --git a/Nub.Lang/Nub.Core/Nub.Core.csproj b/Nub.Lang/Nub.Core/Nub.Core.csproj
deleted file mode 100644
index 3a63532..0000000
--- a/Nub.Lang/Nub.Core/Nub.Core.csproj
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- net8.0
- enable
- enable
-
-
-
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..5aaabed
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+mkdir -p out
+
+dotnet run --project lang/Nub.Lang example out/out.asm
+
+gcc -c -g -fno-stack-protector -fno-builtin std/baseline/gc.c -o out/gc.o
+nasm -g -felf64 std/baseline/str_cmp.asm -o out/str_cmp.o
+
+nasm -g -felf64 std/core/str_len.asm -o out/str_len.o
+nasm -g -felf64 std/core/arr_size.asm -o out/arr_size.o
+nasm -g -felf64 std/core/itoa.asm -o out/itoa.o
+
+nasm -g -felf64 out/out.asm -o out/out.o
+
+gcc -no-pie -nostartfiles -o out/program out/gc.o out/str_cmp.o out/str_len.o out/arr_size.o out/itoa.o out/out.o
diff --git a/clean.sh b/clean.sh
new file mode 100755
index 0000000..5d94bd7
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+rm -rf out
\ No newline at end of file
diff --git a/debug.sh b/debug.sh
new file mode 100755
index 0000000..3a13bf1
--- /dev/null
+++ b/debug.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+./clean.sh
+./build.sh
+gdb -tui ./out/program
diff --git a/input/core/array.nub b/example/core/array.nub
similarity index 100%
rename from input/core/array.nub
rename to example/core/array.nub
diff --git a/input/core/print.nub b/example/core/print.nub
similarity index 100%
rename from input/core/print.nub
rename to example/core/print.nub
diff --git a/input/core/string.nub b/example/core/string.nub
similarity index 100%
rename from input/core/string.nub
rename to example/core/string.nub
diff --git a/input/program.nub b/example/program.nub
similarity index 100%
rename from input/program.nub
rename to example/program.nub
diff --git a/input/util.asm b/input/util.asm
deleted file mode 100644
index fdce707..0000000
--- a/input/util.asm
+++ /dev/null
@@ -1,311 +0,0 @@
-;*********************************************************************
-; util.asm
-; Version: 1.2
-; Author: mjbrusso
-; Contributors: AlessandroFonseca
-; Licensed under the MIT license (see "license.txt").
-;*********************************************************************
-global exit, exit0, strlen, atoi, endl, printstr, printint, readstr, readint
-
-SYS_READ: equ 0
-SYS_WRITE: equ 1
-SYS_EXIT: equ 60
-
-STDIN: equ 0
-STDOUT: equ 1
-
-LINEFEED: equ 0x0A
-
-section .text
-
-;*********************************************************************
-; void exit(int64 code)
-;
-; Description:
-; Quit program
-;
-; Arguments:
-; rdi: int64 code: Exit code (0=Success, >0=Error)
-;
-; Returns:
-; This function does not return
-;
-;*********************************************************************
-exit:
- mov rax, SYS_EXIT ; rax: system call number
- syscall
-;*********************************************************************
-
-;*********************************************************************
-; void exit0()
-;
-; Description:
-; Quit program with status code = 0
-;
-; Arguments:
-; None
-;
-; Returns:
-; This function does not return
-;
-;*********************************************************************
-exit0:
- xor rdi, rdi ; rdi = 0
- jmp exit ; TCO: tail call optimization
-;*********************************************************************
-
-
-;*********************************************************************
-; int64 strlen(char *s)
-;
-; Description:
-; Calculates the length of string ( excluding the terminating null)
-;
-; Arguments:
-; rdi: char *s: address of a null-terminated string (array of chars terminated by 0)
-;
-; Returns:
-; rax: int64: string size
-;
-;*********************************************************************
-strlen:
- xor rax, rax ; rax=0; // reset counter
-.loop: ; do{
- cmp byte [rdi], 0 ; if (*s==0); // If zero, skip loop
- je strlen.end ; break;
- inc rax ; rax++; // increment counter
- inc rdi ; s++; // advance to the next char
- jmp strlen.loop ; }while(true);
-.end:
- ret ; return rax;
-;*********************************************************************
-
-
-;*********************************************************************
-; void itoa(int64 value, char *s)
-;
-; Description:
-; Converts an integer to a null-terminated string.
-;
-; Arguments:
-; rdi: int64 value: Integer value to convert.
-; rsi: char *s: Memory address where to store the resulting string.
-;
-; Returns:
-; rax: int64: string size
-;
-;*********************************************************************
-itoa:
- test rdi, rdi ; value = rdi
- jz itoa.iszero ; value==0 has a direct solution
- jns itoa.notneg ; if(value <0 )
- mov byte [rsi], '-' ; *s = '-'
- neg rdi ; value = -value
- inc rsi ; s++
-.notneg:
- mov r9b, 1 ; bool leftzero=true
- mov r10, 10 ; base = 10
- mov rcx, 1000000000000000000 ; divisor = 1000000000000000000
- mov r8, 19 ; cont = 19 // Will repeat 19 times
-.loop: ; do{
- mov rax, rdi ; dividend[0..31] = value
- xor rdx, rdx ; dividend[32..63] = 0
- idiv rcx ; rax=(rdx:rax)/rcx ; rdx=(rdx:rax)%rcx
- test al, al ; digit = rax[0..7]
- jnz itoa.notdigit0 ; if(digit!=0)
- test r9b, r9b ; if(leftzero)
- jnz itoa.nextdigit ; continue
- jmp itoa.digit0
-.notdigit0:
- xor r9b, r9b ; leftzero = false
-.digit0:
- add eax, 48 ; digit = '0' + digit
- mov rdi, rdx ; value %= divisor
- mov byte [rsi], al ; *p = digit
- inc rsi ; p++
-.nextdigit:
- mov rax, rcx ; dividend[0..31] = value
- xor rdx, rdx ; dividend[32..63] = 0
- idiv r10 ; rax=(rdx:rax)/10 ; rdx=(rdx:rax)%10
- mov rcx, rax ; divisor /= 10
- dec r8 ; cont--
- jne itoa.loop ; }while(cont!=0)
-.end:
- mov byte [rsi], 0 ; *p = '\0'
- ret
-.iszero:
- mov word [rsi], 0x0030 ; *p = "0" (x86 is little endian)
- ret
-;*********************************************************************
-
-
-;*********************************************************************
-; int64 atoi(char *s)
-;
-; Description:
-; Convert string to integer.
-;
-; Arguments:
-; rdi: char *s: Address of a null-terminated string (array of chars terminated by 0)
-;
-; Returns:
-; rax: int64: integer value
-;*********************************************************************
-atoi:
- push r12 ; r12 is callee saved
- mov r12, rdi ; rdi is caller saved
- call strlen
- lea rdi, [r12+rax-1] ; char *p = &s[strlen(string)]; //scans string backward
- xor rax, rax ; result value
- mov rdx, 1 ; multiplier
-.beginloop:
- cmp rdi, r12 ; while(p>=s){
- jl atoi.end ;
- xor rcx, rcx ;
- mov cl, byte [rdi] ; cl = current char
- cmp cl, '-' ; if(cl=='-')
- jne atoi.notneg ;
- neg rax ; rax=-rax
- jmp atoi.end ;
-.notneg:
- cmp cl, '9' ; if(!isdigit(cl)) nextdigit
- jg atoi.endloop ;
- sub cl, '0' ;
- jl atoi.endloop ;
- imul rcx, rdx ; digit_value = current_char * multiplier
- add rax, rcx ; result += digit_value
- imul rdx, 10 ; multiplier *= 10
-.endloop:
- dec rdi ; previous char //scans string backward
- jmp atoi.beginloop ; }
-.end:
- pop r12 ; restore r12
- ret
-;*********************************************************************
-
-
-;*********************************************************************
-; void endl()
-;
-; Description:
-; Prints a newline (line break)
-;
-; Arguments:
-; None
-;
-; Returns:
-; Nothing
-;
-;*********************************************************************
-endl:
- lea rdi, [endl.str] ; print the string
- call printstr
- ret
-
-;*********************************************************************
-
-
-;*********************************************************************
-; void printstr(char *s)
-;
-; Description:
-; Print a string
-;
-; Arguments:
-; rdi: char *s: address of a null-terminated string (array of chars terminated by 0)
-;
-; Returns:
-; Nothing
-;
-;*********************************************************************
-printstr:
- push r15 ; r15 is callee saved
- mov r15, rdi ; save copy (rdi should be caller saved)
- call strlen
- mov rdx, rax ; string size
- mov rsi, r15 ; string
- mov rax, SYS_WRITE ; system call number
- mov rdi, STDOUT ; file descriptor
- syscall ; system call
- pop r15
- ret
-;*********************************************************************
-
-
-;*********************************************************************
-; void printint(int64 n)
-;
-; Description:
-; Print integer number (decimal)
-;
-; Arguments:
-; rdi: int64 n: Value to print
-;
-; Returns:
-; Nothing
-;
-;*********************************************************************
-printint:
- sub rsp, 40 ; stack allocate a temp string
- mov rsi, rsp ; rdi=value, rsi=&str[0]
- call itoa
- mov rdi, rsp ; rdi=&str[0]
- call printstr ; print number
- add rsp, 40 ; deallocate the string
- ret
-;*********************************************************************
-
-
-;*********************************************************************
-; int64 readstr(char *s, int64 maxsize)
-;
-; Description:
-; Read up to *maxsize* chars from standard input into a string.
-;
-; Arguments:
-; rdi: char *s: address of a string (array of chars)
-; rsi: int64 maxsize: input size limit
-;
-; Returns:
-; rax: int64: Number of characters read
-;
-;*********************************************************************
-readstr:
- mov r8, rdi ; copy of buffer address
- mov rax, SYS_READ ; system call number
- mov rdx, rsi ; pointer to buffer
- mov rsi, rdi ; max size
- mov rdi, STDIN ; file descriptor
- syscall ; system call
- dec rax ; removing trailing newline char
- mov byte [r8+rax], 0 ; replace with '\0'
- ret
-;*********************************************************************
-
-
-;*********************************************************************
-; int64 readint()
-;
-; Description:
-; Read int64 from standard input
-;
-; Arguments:
-; None
-;
-; Returns:
-; rax: int64: The value entered
-;
-;*********************************************************************
-readint:
- sub rsp, 40 ; char s[40]
- mov rdi, rsp ; rdi = &s[0]
- mov rsi, 21 ; max input size
- call readstr ; read number as string
- mov rdi, rsp ;
- call atoi ; rax = atoi(s)
- add rsp, 40 ; deallocate s from stack
- ret
-;*********************************************************************
-
-section .data
-endl.str: db LINEFEED, 0
diff --git a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/.gitignore b/lang/.idea/.idea.Nub.Lang/.idea/.gitignore
similarity index 100%
rename from Nub.Lang/.idea/.idea.Nub.Lang/.idea/.gitignore
rename to lang/.idea/.idea.Nub.Lang/.idea/.gitignore
diff --git a/lang/.idea/.idea.Nub.Lang/.idea/.name b/lang/.idea/.idea.Nub.Lang/.idea/.name
new file mode 100644
index 0000000..56aaa3a
--- /dev/null
+++ b/lang/.idea/.idea.Nub.Lang/.idea/.name
@@ -0,0 +1 @@
+Nub.Lang
\ No newline at end of file
diff --git a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/codeStyles/codeStyleConfig.xml b/lang/.idea/.idea.Nub.Lang/.idea/codeStyles/codeStyleConfig.xml
similarity index 100%
rename from Nub.Lang/.idea/.idea.Nub.Lang/.idea/codeStyles/codeStyleConfig.xml
rename to lang/.idea/.idea.Nub.Lang/.idea/codeStyles/codeStyleConfig.xml
diff --git a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/encodings.xml b/lang/.idea/.idea.Nub.Lang/.idea/encodings.xml
similarity index 100%
rename from Nub.Lang/.idea/.idea.Nub.Lang/.idea/encodings.xml
rename to lang/.idea/.idea.Nub.Lang/.idea/encodings.xml
diff --git a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml b/lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml
similarity index 75%
rename from Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml
rename to lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml
index 1b8e138..1479e46 100644
--- a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml
+++ b/lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml
@@ -2,8 +2,7 @@
- ../input
- ../output
+ ../std
diff --git a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/vcs.xml b/lang/.idea/.idea.Nub.Lang/.idea/vcs.xml
similarity index 100%
rename from Nub.Lang/.idea/.idea.Nub.Lang/.idea/vcs.xml
rename to lang/.idea/.idea.Nub.Lang/.idea/vcs.xml
diff --git a/Nub.Lang/Nub.Lang.sln b/lang/Nub.Lang.sln
similarity index 62%
rename from Nub.Lang/Nub.Lang.sln
rename to lang/Nub.Lang.sln
index fb016f5..c5692ff 100644
--- a/Nub.Lang/Nub.Lang.sln
+++ b/lang/Nub.Lang.sln
@@ -2,8 +2,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Lang", "Nub.Lang\Nub.Lang.csproj", "{5047E21F-590D-4CB3-AFF3-064316485009}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nub.Core", "Nub.Core\Nub.Core.csproj", "{903F2D49-4F69-4287-A709-EFC68BDD9654}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -14,9 +12,5 @@ Global
{5047E21F-590D-4CB3-AFF3-064316485009}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5047E21F-590D-4CB3-AFF3-064316485009}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5047E21F-590D-4CB3-AFF3-064316485009}.Release|Any CPU.Build.0 = Release|Any CPU
- {903F2D49-4F69-4287-A709-EFC68BDD9654}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {903F2D49-4F69-4287-A709-EFC68BDD9654}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {903F2D49-4F69-4287-A709-EFC68BDD9654}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {903F2D49-4F69-4287-A709-EFC68BDD9654}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
diff --git a/Nub.Lang/Nub.Lang/Backend/Custom/Generator.cs b/lang/Nub.Lang/Backend/Custom/Generator.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Backend/Custom/Generator.cs
rename to lang/Nub.Lang/Backend/Custom/Generator.cs
diff --git a/Nub.Lang/Nub.Lang/Backend/Custom/LabelFactory.cs b/lang/Nub.Lang/Backend/Custom/LabelFactory.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Backend/Custom/LabelFactory.cs
rename to lang/Nub.Lang/Backend/Custom/LabelFactory.cs
diff --git a/Nub.Lang/Nub.Lang/Backend/Custom/SymbolTable.cs b/lang/Nub.Lang/Backend/Custom/SymbolTable.cs
similarity index 99%
rename from Nub.Lang/Nub.Lang/Backend/Custom/SymbolTable.cs
rename to lang/Nub.Lang/Backend/Custom/SymbolTable.cs
index 3573413..ea0b193 100644
--- a/Nub.Lang/Nub.Lang/Backend/Custom/SymbolTable.cs
+++ b/lang/Nub.Lang/Backend/Custom/SymbolTable.cs
@@ -1,5 +1,4 @@
-using Nub.Core;
-using Nub.Lang.Frontend.Parsing;
+using Nub.Lang.Frontend.Parsing;
namespace Nub.Lang.Backend.Custom;
diff --git a/Nub.Lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs b/lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs
rename to lang/Nub.Lang/Frontend/Lexing/IdentifierToken.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Lexing/Lexer.cs b/lang/Nub.Lang/Frontend/Lexing/Lexer.cs
similarity index 98%
rename from Nub.Lang/Nub.Lang/Frontend/Lexing/Lexer.cs
rename to lang/Nub.Lang/Frontend/Lexing/Lexer.cs
index 3af365d..c87c255 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Lexing/Lexer.cs
+++ b/lang/Nub.Lang/Frontend/Lexing/Lexer.cs
@@ -1,6 +1,4 @@
-using Nub.Core;
-
-namespace Nub.Lang.Frontend.Lexing;
+namespace Nub.Lang.Frontend.Lexing;
public class Lexer
{
diff --git a/Nub.Lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs b/lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs
rename to lang/Nub.Lang/Frontend/Lexing/LiteralToken.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs b/lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs
rename to lang/Nub.Lang/Frontend/Lexing/SymbolToken.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs b/lang/Nub.Lang/Frontend/Lexing/Token.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Lexing/Token.cs
rename to lang/Nub.Lang/Frontend/Lexing/Token.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ArrayIndexAccessNode.cs b/lang/Nub.Lang/Frontend/Parsing/ArrayIndexAccessNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ArrayIndexAccessNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ArrayIndexAccessNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ArrayIndexAssignmentNode.cs b/lang/Nub.Lang/Frontend/Parsing/ArrayIndexAssignmentNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ArrayIndexAssignmentNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ArrayIndexAssignmentNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ArrayInitializerNode.cs b/lang/Nub.Lang/Frontend/Parsing/ArrayInitializerNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ArrayInitializerNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ArrayInitializerNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs b/lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/BinaryExpressionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/BlockNode.cs b/lang/Nub.Lang/Frontend/Parsing/BlockNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/BlockNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/BlockNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/BreakNode.cs b/lang/Nub.Lang/Frontend/Parsing/BreakNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/BreakNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/BreakNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ContinueNode.cs b/lang/Nub.Lang/Frontend/Parsing/ContinueNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ContinueNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ContinueNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs b/lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/DefinitionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs b/lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ExpressionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs b/lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs
similarity index 88%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs
index 3c6455d..466b903 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs
+++ b/lang/Nub.Lang/Frontend/Parsing/ExternFuncDefinitionNode.cs
@@ -1,6 +1,4 @@
-using Nub.Core;
-
-namespace Nub.Lang.Frontend.Parsing;
+namespace Nub.Lang.Frontend.Parsing;
public class ExternFuncDefinitionNode(string name, List parameters, Optional returnType) : DefinitionNode
{
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCall.cs b/lang/Nub.Lang/Frontend/Parsing/FuncCall.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCall.cs
rename to lang/Nub.Lang/Frontend/Parsing/FuncCall.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs b/lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/FuncCallExpressionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs b/lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/FuncCallStatementNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs b/lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/GlobalVariableDefinitionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs b/lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/IdentifierNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/IfNode.cs b/lang/Nub.Lang/Frontend/Parsing/IfNode.cs
similarity index 83%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/IfNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/IfNode.cs
index b777672..ce3f10c 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Parsing/IfNode.cs
+++ b/lang/Nub.Lang/Frontend/Parsing/IfNode.cs
@@ -1,6 +1,4 @@
-using Nub.Core;
-
-namespace Nub.Lang.Frontend.Parsing;
+namespace Nub.Lang.Frontend.Parsing;
public class IfNode(ExpressionNode condition, BlockNode body, Optional> @else) : StatementNode
{
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs b/lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/LiteralNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs b/lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs
similarity index 89%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs
index d508a79..561b40d 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs
+++ b/lang/Nub.Lang/Frontend/Parsing/LocalFuncDefinitionNode.cs
@@ -1,6 +1,4 @@
-using Nub.Core;
-
-namespace Nub.Lang.Frontend.Parsing;
+namespace Nub.Lang.Frontend.Parsing;
public class LocalFuncDefinitionNode(string name, List parameters, BlockNode body, Optional returnType) : DefinitionNode
{
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ModuleNode.cs b/lang/Nub.Lang/Frontend/Parsing/ModuleNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ModuleNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ModuleNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs b/lang/Nub.Lang/Frontend/Parsing/Node.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/Node.cs
rename to lang/Nub.Lang/Frontend/Parsing/Node.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/Parser.cs b/lang/Nub.Lang/Frontend/Parsing/Parser.cs
similarity index 99%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/Parser.cs
rename to lang/Nub.Lang/Frontend/Parsing/Parser.cs
index 1f92875..8a4d508 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Parsing/Parser.cs
+++ b/lang/Nub.Lang/Frontend/Parsing/Parser.cs
@@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis;
-using Nub.Core;
using Nub.Lang.Frontend.Lexing;
namespace Nub.Lang.Frontend.Parsing;
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs b/lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs
similarity index 69%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs
index 44d53e7..3e5d38e 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs
+++ b/lang/Nub.Lang/Frontend/Parsing/ReturnNode.cs
@@ -1,6 +1,4 @@
-using Nub.Core;
-
-namespace Nub.Lang.Frontend.Parsing;
+namespace Nub.Lang.Frontend.Parsing;
public class ReturnNode(Optional value) : StatementNode
{
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs b/lang/Nub.Lang/Frontend/Parsing/StatementNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/StatementNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/StatementNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/StructDefinitionNode.cs b/lang/Nub.Lang/Frontend/Parsing/StructDefinitionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/StructDefinitionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/StructDefinitionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/StructInitializerNode.cs b/lang/Nub.Lang/Frontend/Parsing/StructInitializerNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/StructInitializerNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/StructInitializerNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/StructMemberAccessorNode.cs b/lang/Nub.Lang/Frontend/Parsing/StructMemberAccessorNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/StructMemberAccessorNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/StructMemberAccessorNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/Syscall.cs b/lang/Nub.Lang/Frontend/Parsing/Syscall.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/Syscall.cs
rename to lang/Nub.Lang/Frontend/Parsing/Syscall.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs b/lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/SyscallExpressionNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs b/lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/SyscallStatementNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs b/lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/VariableAssignmentNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs b/lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/VariableReassignmentNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Parsing/WhileNode.cs b/lang/Nub.Lang/Frontend/Parsing/WhileNode.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Frontend/Parsing/WhileNode.cs
rename to lang/Nub.Lang/Frontend/Parsing/WhileNode.cs
diff --git a/Nub.Lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs b/lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs
similarity index 99%
rename from Nub.Lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs
rename to lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs
index 894c117..4bae6cf 100644
--- a/Nub.Lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs
+++ b/lang/Nub.Lang/Frontend/Typing/ExpressionTyper.cs
@@ -1,5 +1,4 @@
-using Nub.Core;
-using Nub.Lang.Frontend.Parsing;
+using Nub.Lang.Frontend.Parsing;
namespace Nub.Lang.Frontend.Typing;
diff --git a/Nub.Lang/Nub.Lang/FuncParameter.cs b/lang/Nub.Lang/FuncParameter.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/FuncParameter.cs
rename to lang/Nub.Lang/FuncParameter.cs
diff --git a/Nub.Lang/Nub.Lang/Nub.Lang.csproj b/lang/Nub.Lang/Nub.Lang.csproj
similarity index 72%
rename from Nub.Lang/Nub.Lang/Nub.Lang.csproj
rename to lang/Nub.Lang/Nub.Lang.csproj
index 51d1bc4..85b4959 100644
--- a/Nub.Lang/Nub.Lang/Nub.Lang.csproj
+++ b/lang/Nub.Lang/Nub.Lang.csproj
@@ -7,8 +7,4 @@
enable
-
-
-
-
diff --git a/Nub.Lang/Nub.Core/Optional.cs b/lang/Nub.Lang/Optional.cs
similarity index 98%
rename from Nub.Lang/Nub.Core/Optional.cs
rename to lang/Nub.Lang/Optional.cs
index 8f7f1c1..439c87d 100644
--- a/Nub.Lang/Nub.Core/Optional.cs
+++ b/lang/Nub.Lang/Optional.cs
@@ -1,6 +1,6 @@
using System.Diagnostics.CodeAnalysis;
-namespace Nub.Core;
+namespace Nub.Lang;
public readonly struct Optional
{
diff --git a/Nub.Lang/Nub.Lang/Program.cs b/lang/Nub.Lang/Program.cs
similarity index 96%
rename from Nub.Lang/Nub.Lang/Program.cs
rename to lang/Nub.Lang/Program.cs
index 2ad2dd0..33da40d 100644
--- a/Nub.Lang/Nub.Lang/Program.cs
+++ b/lang/Nub.Lang/Program.cs
@@ -19,8 +19,8 @@ internal static class Program
return 1;
}
- var input = args[0];
- var output = args[1];
+ var input = Path.GetFullPath(args[0]);
+ var output = Path.GetFullPath(args[1]);
if (!Directory.Exists(input))
{
diff --git a/Nub.Lang/Nub.Lang/StructMember.cs b/lang/Nub.Lang/StructMember.cs
similarity index 82%
rename from Nub.Lang/Nub.Lang/StructMember.cs
rename to lang/Nub.Lang/StructMember.cs
index 61bd9c0..600687c 100644
--- a/Nub.Lang/Nub.Lang/StructMember.cs
+++ b/lang/Nub.Lang/StructMember.cs
@@ -1,5 +1,4 @@
-using Nub.Core;
-using Nub.Lang.Frontend.Parsing;
+using Nub.Lang.Frontend.Parsing;
namespace Nub.Lang;
diff --git a/Nub.Lang/Nub.Lang/Type.cs b/lang/Nub.Lang/Type.cs
similarity index 100%
rename from Nub.Lang/Nub.Lang/Type.cs
rename to lang/Nub.Lang/Type.cs
diff --git a/Nub.Lang/Nub.Core/Variant.cs b/lang/Nub.Lang/Variant.cs
similarity index 97%
rename from Nub.Lang/Nub.Core/Variant.cs
rename to lang/Nub.Lang/Variant.cs
index 8d38f9c..02b7347 100644
--- a/Nub.Lang/Nub.Core/Variant.cs
+++ b/lang/Nub.Lang/Variant.cs
@@ -1,4 +1,4 @@
-namespace Nub.Core;
+namespace Nub.Lang;
public readonly struct Variant where T1 : notnull where T2 : notnull
{
diff --git a/output/build.sh b/output/build.sh
deleted file mode 100755
index 8f84c8d..0000000
--- a/output/build.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-gcc -c -g -O2 -fno-stack-protector -fno-builtin ../input/baseline/gc.c -o gc.o
-nasm -g -felf64 ../input/baseline/str_cmp.asm -o str_cmp.o
-
-nasm -g -felf64 ../input/core/str_len.asm -o str_len.o
-nasm -g -felf64 ../input/core/arr_size.asm -o arr_size.o
-nasm -g -felf64 ../input/core/itoa.asm -o itoa.o
-
-nasm -g -felf64 out.asm -o out.o
-
-gcc -no-pie -nostartfiles -o out gc.o str_cmp.o str_len.o arr_size.o itoa.o out.o
diff --git a/output/clean.sh b/output/clean.sh
deleted file mode 100755
index c81472a..0000000
--- a/output/clean.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-rm ./arr_size.o
-rm ./gc.o
-rm ./itoa.o
-rm ./out.o
-rm ./str_cmp.o
-rm ./str_len.o
-rm out
\ No newline at end of file
diff --git a/output/debug.sh b/output/debug.sh
deleted file mode 100755
index 189ee44..0000000
--- a/output/debug.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-./build.sh
-gdb -tui out
diff --git a/output/profile.sh b/output/profile.sh
deleted file mode 100644
index 3f3bccf..0000000
--- a/output/profile.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-./build.sh
-valgrind -s ./out
diff --git a/output/run.sh b/run.sh
similarity index 71%
rename from output/run.sh
rename to run.sh
index b5a3090..385090b 100755
--- a/output/run.sh
+++ b/run.sh
@@ -1,4 +1,5 @@
#!/bin/sh
+./clean.sh
./build.sh
-./out
+./out/program
echo "Process exited with status code $?"
diff --git a/input/baseline/gc.c b/std/baseline/gc.c
similarity index 100%
rename from input/baseline/gc.c
rename to std/baseline/gc.c
diff --git a/input/baseline/str_cmp.asm b/std/baseline/str_cmp.asm
similarity index 100%
rename from input/baseline/str_cmp.asm
rename to std/baseline/str_cmp.asm
diff --git a/input/core/arr_size.asm b/std/core/arr_size.asm
similarity index 100%
rename from input/core/arr_size.asm
rename to std/core/arr_size.asm
diff --git a/input/core/itoa.asm b/std/core/itoa.asm
similarity index 100%
rename from input/core/itoa.asm
rename to std/core/itoa.asm
diff --git a/input/core/str_len.asm b/std/core/str_len.asm
similarity index 100%
rename from input/core/str_len.asm
rename to std/core/str_len.asm