Skip to content

Commit

Permalink
Add "Berry" lang
Browse files Browse the repository at this point in the history
  • Loading branch information
JRaspass committed Oct 8, 2023
1 parent 0f1761e commit b5fc39d
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 4 deletions.
19 changes: 19 additions & 0 deletions config/langs.toml
Expand Up @@ -153,6 +153,25 @@ For i As Integer = 1 To __FB_ARGC__ - 1
Next
'''

[Berry]
size = '923 KiB'
version = '1.1.0'
website = 'https://berry-lang.github.io'
example = '''
# Printing
print('Hello, World!')
# Looping
for i : 0 .. 9
print(i)
end
# Accessing arguments
for a : _argv[1..]
print(a)
end
'''

[brainfuck]
size = '4.47 MiB'
version = '3bdbd20'
Expand Down
1 change: 1 addition & 0 deletions docker/dev.Dockerfile
Expand Up @@ -52,6 +52,7 @@ COPY --from=codegolf/lang-awk ["/", "/langs/awk/rootfs/" ] # 1.72 M
COPY --from=codegolf/lang-c ["/", "/langs/c/rootfs/" ] # 1.63 MiB
COPY --from=codegolf/lang-bash ["/", "/langs/bash/rootfs/" ] # 1.19 MiB
COPY --from=codegolf/lang-sql ["/", "/langs/sql/rootfs/" ] # 1.15 MiB
COPY --from=codegolf/lang-berry ["/", "/langs/berry/rootfs/" ] # 923 KiB
COPY --from=codegolf/lang-janet ["/", "/langs/janet/rootfs/" ] # 815 KiB
COPY --from=codegolf/lang-k ["/", "/langs/k/rootfs/" ] # 526 KiB
COPY --from=codegolf/lang-wren ["/", "/langs/wren/rootfs/" ] # 484 KiB
Expand Down
1 change: 1 addition & 0 deletions docker/live.Dockerfile
Expand Up @@ -65,6 +65,7 @@ COPY --from=codegolf/lang-awk ["/", "/langs/awk/rootfs/" ] # 1.72 M
COPY --from=codegolf/lang-c ["/", "/langs/c/rootfs/" ] # 1.63 MiB
COPY --from=codegolf/lang-bash ["/", "/langs/bash/rootfs/" ] # 1.19 MiB
COPY --from=codegolf/lang-sql ["/", "/langs/sql/rootfs/" ] # 1.15 MiB
COPY --from=codegolf/lang-berry ["/", "/langs/berry/rootfs/" ] # 923 KiB
COPY --from=codegolf/lang-janet ["/", "/langs/janet/rootfs/" ] # 815 KiB
COPY --from=codegolf/lang-k ["/", "/langs/k/rootfs/" ] # 526 KiB
COPY --from=codegolf/lang-wren ["/", "/langs/wren/rootfs/" ] # 484 KiB
Expand Down
19 changes: 19 additions & 0 deletions langs/berry/Dockerfile
@@ -0,0 +1,19 @@
FROM alpine:3.18 AS builder

RUN apk add --no-cache curl gcc make musl-dev python3 readline-dev

RUN curl -L https://github.com/berry-lang/berry/archive/refs/tags/v1.1.0.tar.gz \
| tar xz && mv berry-* berry

COPY berry.c berry/default/

RUN make -C berry

FROM codegolf/lang-base

COPY --from=0 /lib/ld-musl-x86_64.so.1 /lib/
COPY --from=0 /berry/berry /usr/bin/

ENTRYPOINT ["berry"]

CMD ["-v"]
66 changes: 66 additions & 0 deletions langs/berry/berry.c
@@ -0,0 +1,66 @@
#include "berry.h"
#include "be_vm.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int handle_result(bvm *vm, int res) {
switch (res) {
case BE_OK: /* everything is OK */
return be_pcall(vm, 0);
case BE_EXCEPTION: /* uncatched exception */
be_dumpexcept(vm);
return 1;
case BE_EXIT: /* return exit code */
return be_toindex(vm, -1);
case BE_IO_ERROR:
be_writestring("error: ");
be_writestring(be_tostring(vm, -1));
be_writenewline();
return -2;
case BE_MALLOC_FAIL:
be_writestring("error: memory allocation failed.\n");
return -1;
default: /* unkonw result */
return 2;
}
}

static void push_args(bvm *vm, int argc, char *argv[]) {
be_newobject(vm, "list");
while (argc--) {
be_pushstring(vm, *argv++);
be_data_push(vm, -2);
be_pop(vm, 1);
}
be_pop(vm, 1);
be_setglobal(vm, "_argv");
be_pop(vm, 1);
}

int main(int argc, char *argv[]) {
if (argc > 1 && strcmp(argv[1], "-v") == 0) {
be_writestring(BERRY_VERSION "\n");
return 0;
}

int res;
bvm *vm = be_vm_new();
be_module_path_set(vm, "/usr/local/lib/berry/packages");
push_args(vm, argc - 1, argv + 1);

// Slurp stdin.
char *code = 0;
size_t len = 0, size = 128;
while (!feof(stdin)){
code = realloc(code, size *= 2);
len += fread(&code[len], 1, size - len - 1, stdin);
}
code[len] = '\0';

res = be_loadstring(vm, code);
res = handle_result(vm, res);

be_vm_delete(vm);
return res;
}
8 changes: 4 additions & 4 deletions sql/a-schema.sql
Expand Up @@ -56,10 +56,10 @@ CREATE TYPE layout AS ENUM ('default', 'tabs');
CREATE TYPE keymap AS ENUM ('default', 'vim');

CREATE TYPE lang AS ENUM (
'assembly', 'awk', 'bash', 'basic', 'brainfuck', 'c', 'c-sharp', 'cpp',
'cobol', 'crystal', 'd', 'dart', 'elixir', 'f-sharp', 'factor', 'fish',
'forth', 'fortran', 'go', 'golfscript', 'haskell', 'hexagony', 'j',
'janet', 'java', 'javascript', 'julia', 'k', 'lisp', 'lua', 'nim',
'assembly', 'awk', 'bash', 'basic', 'berry', 'brainfuck', 'c', 'c-sharp',
'cpp', 'cobol', 'crystal', 'd', 'dart', 'elixir', 'f-sharp', 'factor',
'fish', 'forth', 'fortran', 'go', 'golfscript', 'haskell', 'hexagony',
'j', 'janet', 'java', 'javascript', 'julia', 'k', 'lisp', 'lua', 'nim',
'ocaml', 'pascal', 'perl', 'php', 'powershell', 'prolog', 'python', 'r',
'raku', 'ruby', 'rust', 'sed', 'sql', 'swift', 'tcl', 'tex', 'v', 'viml',
'wren', 'zig'
Expand Down
1 change: 1 addition & 0 deletions svg/berry.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit b5fc39d

Please sign in to comment.