Skip to content

OpenEPL 0.10.1

Choose a tag to compare

@AxDSan AxDSan released this 05 Sep 02:06
· 208 commits to main since this release

A patch release with one crash fix that affects every previous version.

A loop that calls a command no longer exhausts the stack

Every command call reserves a return slot and an argument array on the stack.
Those were reserved where the call stood rather than in the function's
prologue, and stack space reserved that way is not given back until the
function returns — so a loop calling a command took another bite on every
turn.

for i in 1..300000
  call print_int(i)
end

faulted. The threshold on an 8 MiB stack was around 262 000 iterations: close
enough to reach by counting a file's lines or a table's rows, and it died with
a segmentation fault that pointed at nothing. Six emission sites are fixed,
held by four IR tests and a runtime test that runs a million command calls in
a loop.

Studio keeps its build output inside your project

Run built to a fixed name in the system's temporary directory, so two
projects open at once fought over one path and the binary you had just run was
somewhere you would never look. Run now builds to .openepl/run/ inside the
project. Build Binary goes to the project's build/ unless the Build
setting names somewhere else, and clears the throwaway away. openepl new
writes a .gitignore covering both, so a first commit cannot contain a binary.

The compiler stops leaving its intermediate IR behind

openepl build wrote the .ll it handed clang beside every binary it
produced. It is removed after the link now; --emit-ir keeps it, and
openepl emit still prints the IR without building.