Skip to content

A compiler for a Visual Basic-like programming language with low-level features

License

Notifications You must be signed in to change notification settings

nokiiaa/firebasic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Firebasic

A compiler for my own peculiar programming language that resembles Visual Basic, but has support for lower-level features such as pointers. It uses another project of mine, NIR, to convert code into an intermediate representation, which is optimized and then dealt with by individual backends.

Requirements:

  • nasm (for assembling x64 code)
  • gcc (for linking the object files together)

Usage:

firebasic <input files | flags> <output file>
Flags: /win (passes -mwindows to linker)

Example program

' Random number generator in Firebasic
' nokiiaa, 2022

Const NULL As Void* = 0

Declare Function Lib "user32.dll" MessageBoxA(hWnd as Void*, lpText as Char*, lpCaption as Char*, uType as UInteger) As Integer

Function Rand(state As UInteger*) As UInteger
    Dim x As UInteger = *state
    x = x Xor (x << 13)
    x = x Xor (x >> 17)
    x = x Xor (x << 5)
    *state = x
    return x
End Function

Sub Itoa(n As Integer, output As Char*)
    Dim digits As Integer = 0
    Dim i As Integer = 0
    Dim number As Integer = n
    
    While number
        digits += 1
        number /= 10
    End While
    
    output(digits) = 0
    
    While n
        i += 1
        output(digits - i) = n Mod 10 + 0x30
        n /= 10
    End While
End Sub

Function Main As Integer
    Dim state As UInteger = 244
    Dim message As Char* = "Your random number: __________."
        
    While True
        Itoa(Rand(&state) Mod 1000, message + 20)
        MessageBoxA(NULL, message, "Here it is! (wow)", 0)
    End While
    
    Return 0
End Function

About

A compiler for a Visual Basic-like programming language with low-level features

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published