Skip to content

Commit b5fc39d

Browse files
committed
Add "Berry" lang
1 parent 0f1761e commit b5fc39d

File tree

7 files changed

+111
-4
lines changed

7 files changed

+111
-4
lines changed

config/langs.toml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,25 @@ For i As Integer = 1 To __FB_ARGC__ - 1
153153
Next
154154
'''
155155

156+
[Berry]
157+
size = '923 KiB'
158+
version = '1.1.0'
159+
website = 'https://berry-lang.github.io'
160+
example = '''
161+
# Printing
162+
print('Hello, World!')
163+
164+
# Looping
165+
for i : 0 .. 9
166+
print(i)
167+
end
168+
169+
# Accessing arguments
170+
for a : _argv[1..]
171+
print(a)
172+
end
173+
'''
174+
156175
[brainfuck]
157176
size = '4.47 MiB'
158177
version = '3bdbd20'

docker/dev.Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ COPY --from=codegolf/lang-awk ["/", "/langs/awk/rootfs/" ] # 1.72 M
5252
COPY --from=codegolf/lang-c ["/", "/langs/c/rootfs/" ] # 1.63 MiB
5353
COPY --from=codegolf/lang-bash ["/", "/langs/bash/rootfs/" ] # 1.19 MiB
5454
COPY --from=codegolf/lang-sql ["/", "/langs/sql/rootfs/" ] # 1.15 MiB
55+
COPY --from=codegolf/lang-berry ["/", "/langs/berry/rootfs/" ] # 923 KiB
5556
COPY --from=codegolf/lang-janet ["/", "/langs/janet/rootfs/" ] # 815 KiB
5657
COPY --from=codegolf/lang-k ["/", "/langs/k/rootfs/" ] # 526 KiB
5758
COPY --from=codegolf/lang-wren ["/", "/langs/wren/rootfs/" ] # 484 KiB

docker/live.Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ COPY --from=codegolf/lang-awk ["/", "/langs/awk/rootfs/" ] # 1.72 M
6565
COPY --from=codegolf/lang-c ["/", "/langs/c/rootfs/" ] # 1.63 MiB
6666
COPY --from=codegolf/lang-bash ["/", "/langs/bash/rootfs/" ] # 1.19 MiB
6767
COPY --from=codegolf/lang-sql ["/", "/langs/sql/rootfs/" ] # 1.15 MiB
68+
COPY --from=codegolf/lang-berry ["/", "/langs/berry/rootfs/" ] # 923 KiB
6869
COPY --from=codegolf/lang-janet ["/", "/langs/janet/rootfs/" ] # 815 KiB
6970
COPY --from=codegolf/lang-k ["/", "/langs/k/rootfs/" ] # 526 KiB
7071
COPY --from=codegolf/lang-wren ["/", "/langs/wren/rootfs/" ] # 484 KiB

langs/berry/Dockerfile

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM alpine:3.18 AS builder
2+
3+
RUN apk add --no-cache curl gcc make musl-dev python3 readline-dev
4+
5+
RUN curl -L https://github.com/berry-lang/berry/archive/refs/tags/v1.1.0.tar.gz \
6+
| tar xz && mv berry-* berry
7+
8+
COPY berry.c berry/default/
9+
10+
RUN make -C berry
11+
12+
FROM codegolf/lang-base
13+
14+
COPY --from=0 /lib/ld-musl-x86_64.so.1 /lib/
15+
COPY --from=0 /berry/berry /usr/bin/
16+
17+
ENTRYPOINT ["berry"]
18+
19+
CMD ["-v"]

langs/berry/berry.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include "berry.h"
2+
#include "be_vm.h"
3+
#include <stdio.h>
4+
#include <stdlib.h>
5+
#include <string.h>
6+
7+
static int handle_result(bvm *vm, int res) {
8+
switch (res) {
9+
case BE_OK: /* everything is OK */
10+
return be_pcall(vm, 0);
11+
case BE_EXCEPTION: /* uncatched exception */
12+
be_dumpexcept(vm);
13+
return 1;
14+
case BE_EXIT: /* return exit code */
15+
return be_toindex(vm, -1);
16+
case BE_IO_ERROR:
17+
be_writestring("error: ");
18+
be_writestring(be_tostring(vm, -1));
19+
be_writenewline();
20+
return -2;
21+
case BE_MALLOC_FAIL:
22+
be_writestring("error: memory allocation failed.\n");
23+
return -1;
24+
default: /* unkonw result */
25+
return 2;
26+
}
27+
}
28+
29+
static void push_args(bvm *vm, int argc, char *argv[]) {
30+
be_newobject(vm, "list");
31+
while (argc--) {
32+
be_pushstring(vm, *argv++);
33+
be_data_push(vm, -2);
34+
be_pop(vm, 1);
35+
}
36+
be_pop(vm, 1);
37+
be_setglobal(vm, "_argv");
38+
be_pop(vm, 1);
39+
}
40+
41+
int main(int argc, char *argv[]) {
42+
if (argc > 1 && strcmp(argv[1], "-v") == 0) {
43+
be_writestring(BERRY_VERSION "\n");
44+
return 0;
45+
}
46+
47+
int res;
48+
bvm *vm = be_vm_new();
49+
be_module_path_set(vm, "/usr/local/lib/berry/packages");
50+
push_args(vm, argc - 1, argv + 1);
51+
52+
// Slurp stdin.
53+
char *code = 0;
54+
size_t len = 0, size = 128;
55+
while (!feof(stdin)){
56+
code = realloc(code, size *= 2);
57+
len += fread(&code[len], 1, size - len - 1, stdin);
58+
}
59+
code[len] = '\0';
60+
61+
res = be_loadstring(vm, code);
62+
res = handle_result(vm, res);
63+
64+
be_vm_delete(vm);
65+
return res;
66+
}

sql/a-schema.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ CREATE TYPE layout AS ENUM ('default', 'tabs');
5656
CREATE TYPE keymap AS ENUM ('default', 'vim');
5757

5858
CREATE TYPE lang AS ENUM (
59-
'assembly', 'awk', 'bash', 'basic', 'brainfuck', 'c', 'c-sharp', 'cpp',
60-
'cobol', 'crystal', 'd', 'dart', 'elixir', 'f-sharp', 'factor', 'fish',
61-
'forth', 'fortran', 'go', 'golfscript', 'haskell', 'hexagony', 'j',
62-
'janet', 'java', 'javascript', 'julia', 'k', 'lisp', 'lua', 'nim',
59+
'assembly', 'awk', 'bash', 'basic', 'berry', 'brainfuck', 'c', 'c-sharp',
60+
'cpp', 'cobol', 'crystal', 'd', 'dart', 'elixir', 'f-sharp', 'factor',
61+
'fish', 'forth', 'fortran', 'go', 'golfscript', 'haskell', 'hexagony',
62+
'j', 'janet', 'java', 'javascript', 'julia', 'k', 'lisp', 'lua', 'nim',
6363
'ocaml', 'pascal', 'perl', 'php', 'powershell', 'prolog', 'python', 'r',
6464
'raku', 'ruby', 'rust', 'sed', 'sql', 'swift', 'tcl', 'tex', 'v', 'viml',
6565
'wren', 'zig'

svg/berry.svg

Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)