mirror of
https://github.com/bearlanguageorg/bear.git
synced 2026-08-26 14:17:18 +00:00
Adds floats, bitwise ops, UTF-8 strings with methods, try/catch, closures, generics validation, a compile-time type checker, a mark-and-sweep GC, source-level debug info, constant folding, and the repl/fmt/package-manager commands. 🤖 Generated with Codebuff Co-Authored-By: Codebuff <noreply@codebuff.com>
35 lines
965 B
V
35 lines
965 B
V
// compiler.v — public API for the VuurRaaf compiler.
|
|
module compiler
|
|
|
|
import os
|
|
import obj
|
|
|
|
// compile parses and compiles VuurRaaf source into an object file.
|
|
pub fn compile(src string) !obj.Obj {
|
|
toks := tokenize(src)!
|
|
prog := parse(toks)!
|
|
// conservative compile-time type check; catches provable errors early
|
|
check(prog)!
|
|
return gen(prog)
|
|
}
|
|
|
|
pub fn compile_file(path string) !obj.Obj {
|
|
src := os.read_file(path)!
|
|
return compile(src)!
|
|
}
|
|
|
|
// resolve_import turns an import path into a readable source file. It tries
|
|
// the path as given first, then falls back to the package-manager layout so
|
|
// `import "pkg/file.vr"` finds vendor/pkg/file.vr.
|
|
pub fn resolve_import(path string) !string {
|
|
if os.exists(path) {
|
|
return path
|
|
}
|
|
for cand in ['vendor/${path}', 'vendor/${path}.vr', 'vendor/${path}/main.vr', 'vendor/${path}/src/main.vr'] {
|
|
if os.exists(cand) {
|
|
return cand
|
|
}
|
|
}
|
|
return error('cannot resolve import "${path}" (tried vendor/)"')
|
|
}
|