Skip to content

Commit

Permalink
Add "Factor" language
Browse files Browse the repository at this point in the history
Closes #458
  • Loading branch information
JRaspass committed Sep 12, 2023
1 parent 7c3bb96 commit 9a98efe
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 8 deletions.
15 changes: 15 additions & 0 deletions config/langs.toml
Expand Up @@ -380,6 +380,21 @@ let main args =
0
'''

[Factor]
size = '319 MiB'
version = '0.99'
website = 'https://factorcode.org'
example = '''
! Printing
"Hello, World!" print
! Looping
10 [0..b) [ . ] each
! Accessing arguments
command-line get-global [ print ] each
'''

[Forth]
size = '2.83 MiB'
version = 'GNU Forth 0.7.3'
Expand Down
1 change: 1 addition & 0 deletions docker/dev.Dockerfile
Expand Up @@ -10,6 +10,7 @@ COPY --from=codegolf/lang-swift ["/", "/langs/swift/rootfs/" ] # 485 M
COPY --from=codegolf/lang-rust ["/", "/langs/rust/rootfs/" ] # 431 MiB
COPY --from=codegolf/lang-haskell ["/", "/langs/haskell/rootfs/" ] # 405 MiB
COPY --from=codegolf/lang-go ["/", "/langs/go/rootfs/" ] # 335 MiB
COPY --from=codegolf/lang-factor ["/", "/langs/factor/rootfs/" ] # 319 MiB
COPY --from=codegolf/lang-julia ["/", "/langs/julia/rootfs/" ] # 302 MiB
COPY --from=codegolf/lang-d ["/", "/langs/d/rootfs/" ] # 296 MiB
COPY --from=codegolf/lang-zig ["/", "/langs/zig/rootfs/" ] # 279 MiB
Expand Down
1 change: 1 addition & 0 deletions docker/live.Dockerfile
Expand Up @@ -23,6 +23,7 @@ COPY --from=codegolf/lang-swift ["/", "/langs/swift/rootfs/" ] # 485 M
COPY --from=codegolf/lang-rust ["/", "/langs/rust/rootfs/" ] # 431 MiB
COPY --from=codegolf/lang-haskell ["/", "/langs/haskell/rootfs/" ] # 405 MiB
COPY --from=codegolf/lang-go ["/", "/langs/go/rootfs/" ] # 335 MiB
COPY --from=codegolf/lang-factor ["/", "/langs/factor/rootfs/" ] # 319 MiB
COPY --from=codegolf/lang-julia ["/", "/langs/julia/rootfs/" ] # 302 MiB
COPY --from=codegolf/lang-d ["/", "/langs/d/rootfs/" ] # 296 MiB
COPY --from=codegolf/lang-zig ["/", "/langs/zig/rootfs/" ] # 279 MiB
Expand Down
3 changes: 3 additions & 0 deletions hole/play.go
Expand Up @@ -245,6 +245,9 @@ func play(ctx context.Context, holeID, langID, code string, run *Run) error {
case "elixir":
cmd.Args = []string{"/usr/local/bin/elixir", "-e", code, "--"}
cmd.Env = []string{"LANG=C.UTF-8", "PATH=/usr/local/bin:/usr/bin:/bin"}
case "factor":
cmd.Args = []string{"/factor/factor", "/proc/self/fd/0"}
cmd.Env = []string{"XDG_CACHE_HOME=/tmp"}
case "fish":
cmd.Args = []string{"/usr/bin/fish", "--no-prng", "-c", code, "-u"}
case "forth":
Expand Down
2 changes: 2 additions & 0 deletions js/_codemirror.ts
Expand Up @@ -26,6 +26,7 @@ import { cpp } from '@codemirror/lang-cpp';
import { crystal } from '@codemirror/legacy-modes/mode/crystal';
import { d } from '@codemirror/legacy-modes/mode/d';
import { elixir } from 'codemirror-lang-elixir';
import { factor } from '@codemirror/legacy-modes/mode/factor';
import { forth } from '@codemirror/legacy-modes/mode/forth';
import { fortran } from '@codemirror/legacy-modes/mode/fortran';
import { fSharp } from '@codemirror/legacy-modes/mode/mllike';
Expand Down Expand Up @@ -110,6 +111,7 @@ export const extensions = {
'dart': StreamLanguage.define(dart),
'elixir': StreamLanguage.define(elixir),
'f-sharp': StreamLanguage.define(fSharp),
'factor': StreamLanguage.define(factor),
// TODO fish
'forth': StreamLanguage.define({ ...forth, languageData: { commentTokens: { line: '\\' } } }),
'fortran': StreamLanguage.define({ ...fortran, languageData: { commentTokens: { line: '!' } } }),
Expand Down
14 changes: 14 additions & 0 deletions langs/factor/Dockerfile
@@ -0,0 +1,14 @@
FROM debian:bookworm-slim AS builder

RUN apt-get update && apt-get install -y curl

RUN curl https://downloads.factorcode.org/releases/0.99/factor-linux-x86-64-0.99.tar.gz \
| tar xz

FROM codegolf/lang-base

COPY --from=0 / /

ENTRYPOINT ["/factor/factor"]

CMD ["--version"]
7 changes: 5 additions & 2 deletions run-lang.c
Expand Up @@ -53,15 +53,18 @@ int main(__attribute__((unused)) int argc, char *argv[]) {
ERR_AND_EXIT("symlink /dev/fd");

if (mknod("/dev/null", S_IFCHR|0666, makedev(1, 3)) < 0)
ERR_AND_EXIT("mknod");
ERR_AND_EXIT("mknod /dev/null");

// FIXME This shouldn't be needed, 0666 should suffice, but without it Zig
// fails with permission denied when opening /dev/null as O_RDWR.
if (chown("/dev/null", NOBODY, NOBODY) < 0)
ERR_AND_EXIT("chown /dev/null");

if (mknod("/dev/random", S_IFCHR|0444, makedev(1, 8)) < 0)
ERR_AND_EXIT("mknod /dev/random");

if (mknod("/dev/urandom", S_IFCHR|0444, makedev(1, 9)) < 0)
ERR_AND_EXIT("mknod");
ERR_AND_EXIT("mknod /dev/urandom");

if (mount("proc", "/proc", "proc", MS_NODEV|MS_NOEXEC|MS_NOSUID, NULL) < 0)
ERR_AND_EXIT("mount proc");
Expand Down
12 changes: 6 additions & 6 deletions sql/a-schema.sql
Expand Up @@ -56,12 +56,12 @@ 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', 'fish', 'forth',
'fortran', 'go', 'golfscript', 'haskell', 'hexagony', 'j', 'janet',
'java', 'javascript', 'julia', 'k', 'lisp', 'lua', 'nim', 'ocaml',
'pascal', 'perl', 'php', 'php-7', 'powershell', 'prolog', 'python', 'r',
'raku', 'ruby', 'rust', 'sed', 'sql', 'swift', 'tcl', 'tex', 'v', 'viml',
'wren', 'zig'
'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', 'php-7', 'powershell', 'prolog',
'python', 'r', 'raku', 'ruby', 'rust', 'sed', 'sql', 'swift', 'tcl',
'tex', 'v', 'viml', 'wren', 'zig'
);

CREATE TYPE medal AS ENUM ('diamond', 'gold', 'silver', 'bronze');
Expand Down
1 change: 1 addition & 0 deletions svg/factor.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 9a98efe

Please sign in to comment.