Compare commits

...

6 Commits

Author SHA1 Message Date
CismonX bbc1f850e5
update ci script
continuous-integration/drone/push Build is passing Details
continuous-integration/drone Build is passing Details
2022-02-14 23:40:11 +08:00
CismonX dbce7a5cfc
update test 2022-02-14 23:39:23 +08:00
CismonX 78497a1b55
update documentation
continuous-integration/drone/push Build is failing Details
2022-02-14 23:23:02 +08:00
CismonX 97168f05f5
Bump version to 0.1.2
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2021-01-26 15:32:41 +08:00
CismonX 97ed3400c3
Compatible to ISO C99.
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2021-01-26 15:21:25 +08:00
CismonX c265de4722
Switch to self-hosted CI (Drone). 2021-01-26 15:07:14 +08:00
12 changed files with 92 additions and 126 deletions

View File

@ -1,15 +0,0 @@
#
# Copyright (C) 2020 CismonX <admin@cismon.net>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty, provided the copyright notice and
# this notice are preserved. This file is offered as-is, without any warranty.
#
ignore:
- "src/logging.c"
- "src/mnemonic.c"
coverage:
range: 50..90
round: down
precision: 2

23
.drone.yml Normal file
View File

@ -0,0 +1,23 @@
#
# Copyright (C) 2021 CismonX <admin@cismon.net>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty, provided the copyright notice and
# this notice are preserved. This file is offered as-is, without any warranty.
#
kind: pipeline
type: docker
name: default
steps:
- name: build
image: pureos/byzantium
commands:
- apt -y update
- apt -y install wget build-essential autoconf automake dejagnu
- autoreconf --install
- ./configure CFLAGS='-O0 -g -std=c99 -Wall -Wextra -Wpedantic --coverage'
- make
- make check
- gcov src/*.c

13
.gitattributes vendored
View File

@ -1,13 +0,0 @@
#
# Copyright (C) 2020 CismonX <admin@cismon.net>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty, provided the copyright notice and
# this notice are preserved. This file is offered as-is, without any warranty.
#
# Attributes for GitHub Linguist
*.h linguist-language=c
tests/* linguist-detectable=false
configure.ac linguist-detectable=false
Makefile.am linguist-detectable=false

View File

@ -1,49 +0,0 @@
#
# Copyright (C) 2020 CismonX <admin@cismon.net>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty, provided the copyright notice and
# this notice are preserved. This file is offered as-is, without any warranty.
#
language: c
os:
- linux
- osx
dist: bionic
compiler:
- gcc
- clang
addons:
apt:
update: true
packages:
- dejagnu
homebrew:
update: true
packages:
- dejagnu
branches:
only:
- master
before_script:
- export GCOV_BIN=`test $TRAVIS_COMPILER = clang && echo 'llvm-cov gcov' || echo gcov`
- test $TRAVIS_OS_NAME = osx && export PATH=$PATH:/Library/Developer/CommandLineTools/usr/bin || true
script:
- autoreconf --install
- ./configure CFLAGS='-O0 -g -Wall -Wextra -Wpedantic -coverage'
- make
- make check
- $GCOV_BIN src/*.c
- sudo make install
- command -v u6a u6ac
after_success:
- test $TRAVIS_OS_NAME = osx && true || bash <(curl -s https://codecov.io/bash)

View File

@ -1,43 +1,54 @@
<!--
Copyright (C) 2020 CismonX <admin@cismon.net>
Copyright (C) 2020,2021 CismonX <admin@cismon.net>
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty, provided the copyright notice and
this notice are preserved. This file is offered as-is, without any warranty.
-->
# U6a
U6a
===
[![Travis CI](https://travis-ci.com/esolangs/u6a.svg)](https://travis-ci.com/esolangs/u6a)
[![Codecov](https://codecov.io/gh/esolangs/u6a/branch/master/graphs/badge.svg)](https://codecov.io/gh/esolangs/u6a)
[![LICENSE](https://img.shields.io/badge/license-GPL--3.0--or--later-blue.svg)](LICENSE)
[![Build Status]](https://drone.cismon.net/esolangs/u6a) [![License]](LICENSE)
Implementation of Unlambda, an esoteric programming language.
## Description
Description
-----------
The U6a project provides a bytecode compiler and a runtime system for the [Unlambda](http://www.madore.org/~david/programs/unlambda/) programming language.
The U6a project provides a bytecode compiler and a runtime system for the
[Unlambda] programming language.
Ideas behind this implementation can be found [here](https://github.com/esolangs/u6a/wiki/Developer's-Notes-on-Implementing-Unlambda).
Ideas behind this implementation can be found [here][U6a wiki].
U6a is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
U6a is free software. You can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
## Getting Started
Getting Started
---------------
To install U6a from source, see [INSTALL](INSTALL).
To install U6a from source, see INSTALL.md.
Usage (See [**u6ac**(1)](man/u6ac.1) and [**u6a**(1)](man/u6a.1) man pages for details):
Usage (See the u6ac(1) and u6a(1) man pages for details):
```bash
# Compile an Unlambda source file into bytecode.
u6ac -o foo.unl.bc foo.unl
# Execute the bytecode file.
u6a foo.unl.bc
```
## Future Plans
Future Plans
------------
* Interactive debugger: `u6adb`
* Interactive debugger: u6adb
* More compile-time optimizations
* More test cases
* LLVM backend for `u6ac`
* LLVM backend for u6ac
<!-- Reference Links -->
[Build Status]: https://drone.cismon.net/api/badges/esolangs/u6a/status.svg
[License]: https://img.shields.io/badge/license-GPL--3.0--or--later-blue.svg
[Unlambda]: http://www.madore.org/~david/programs/unlambda/
[U6a wiki]: https://git.cismon.net/esolangs/u6a/wiki/Implementing-Unlambda

View File

@ -7,7 +7,7 @@ dnl this notice are preserved. This file is offered as-is, without any warranty.
dnl
AC_PREREQ([2.69])
AC_INIT([u6a], [0.01], [bug-report@cismon.net])
AC_INIT([u6a], [0.1.2], [bug-report@cismon.net])
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_SRCDIR([src/u6a.c])
AC_CONFIG_HEADERS([config.h])

View File

@ -1,4 +1,4 @@
.TH "U6A" "1" "Jan 30, 2020" "0.1.1" "U6A User Manual"
.TH "U6A" "1" "Jan 30, 2020" "0.1.1" "U6a User Manual"
.
.SH NAME
u6a - Runtime for the Unlambda programming language
@ -49,8 +49,9 @@ Prints version number, then exit.
.TP
Version compatiblility:
Definition of Unlambda bytecode may differ across multiple versions of u6a.
Execution result is guaranteed to be consistent when both major and minor versions of bytecode file and the interpreter matches.
Otherwise, the code may not work as expected and the interpreter will refuse to execute unless
Execution result is guaranteed to be consistent when both major and minor
versions of bytecode file and the interpreter matches. Otherwise, the code
may not work as expected and the interpreter will refuse to execute unless
.B -f
option is provided.
.TP
@ -72,5 +73,6 @@ they could be read by the current Unlambda program.
.SH COPYRIGHT
Copyright (c) 2020 CismonX <admin@cismon.net>
.PP
Copying and distribution of this file, with or without modification, are permitted in any medium without royalty, provided the copyright notice and this notice are preserved.
This file is offered as-is, without any warranty.
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty, provided the copyright notice and
this notice are preserved. This file is offered as-is, without any warranty.

View File

@ -1,4 +1,4 @@
.TH "U6A" "1" "Jan 30, 2020" "0.1.1" "U6A User Manual"
.TH "U6A" "1" "Jan 30, 2020" "0.1.1" "U6a User Manual"
.
.SH NAME
u6ac - Bytecode compiler for the Unlambda programming language
@ -14,7 +14,8 @@ Read and compile Unlambda code from the given
or
.B STDIN
if "-" is given.
Compilation result is saved in a special bytecode format, which can be executed with
Compilation result is saved in a special bytecode format, which can be executed
with
.BR u6a (1).
.
.SH OPTIONS
@ -38,15 +39,17 @@ to the beginning of
.IR out-file .
Defaults to "#!/usr/bin/env u6a\\n".
.TP
\fB\-O[\fIoptimization-level\fR]
\fB\-O\fR[\fIoptimization-level\fR]
Compile-time optimization level.
.BR \-O0 :
Turn off optimization.
.BR \-O1 (default):
Turn on basic optimizations, including constant folding & propagation, dead code elimination, etc.
Turn on basic optimizations, including constant folding & propagation,
dead code elimination, etc.
.TP
\fB\-\-syntax\-only\fR
Only check for lexical and syntactic correctness of the source file, and skips bytecode generation.
Only check for lexical and syntactic correctness of the source file, and skips
bytecode generation.
.TP
\fB\-S\fR
Produce mnemonic pseudo-instructions instead of bytecode.
@ -69,21 +72,24 @@ Prints version number, then exit.
.SS Unlambda
.TP
Language features:
All features of Unlambda 2.0 are supported, including I/O functions, continuations and promises.
All features of Unlambda 2.0 are supported, including I/O functions,
continuations and promises.
.TP
Comments:
Text in line comments is not restricted to ASCII only. UTF-8 format is also supported.
Text in line comments is not restricted to ASCII only. UTF-8 format is also
supported.
.TP
Function names:
Charactor X in functions
.B .X
and
.B ?X
must be printable ASCII or "\\n" (beware if you are using Windows-style newlines), and are case-sensitive.
Other builtin function names are case-insensitive.
must be printable ASCII or "\\n" (beware if you are using Windows-style
newlines), and are case-sensitive. Other builtin function names are
case-insensitive.
.SS Code Size
Unlambda code size should not be larger than 4MiB (not counting comments and whitespaces).
You may change this limit in
Unlambda code size should not be larger than 4MiB (not counting comments and
whitespaces). You may change this limit in
.B defs.h
and rebuild U6a for larger code to compile.
.
@ -93,5 +99,6 @@ and rebuild U6a for larger code to compile.
.SH COPYRIGHT
Copyright (c) 2020 CismonX <admin@cismon.net>
.PP
Copying and distribution of this file, with or without modification, are permitted in any medium without royalty, provided the copyright notice and this notice are preserved.
This file is offered as-is, without any warranty.
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty, provided the copyright notice and
this notice are preserved. This file is offered as-is, without any warranty.

View File

@ -49,6 +49,6 @@
#define U6A_MAGIC 0xDC /* Latin 'U' with diaeresis */
#define U6A_VER_MAJOR 0x00
#define U6A_VER_MINOR 0x01
#define U6A_VER_PATCH 0x01
#define U6A_VER_PATCH 0x02
#endif

View File

@ -98,6 +98,6 @@ const char*
u6a_logging_get_prog_name_();
#define u6a_info_verbose(stage, info_message, ...) \
u6a_info_verbose_("%s: [%s] " info_message ".\n", u6a_logging_get_prog_name_(), stage, ##__VA_ARGS__)
u6a_info_verbose_("%s: [%s] " info_message ".\n", u6a_logging_get_prog_name_(), stage, __VA_ARGS__)
#endif

View File

@ -75,7 +75,7 @@ u6a_parse(struct u6a_token* token_arr, uint32_t token_len, struct u6a_ast_node**
}
free(pstack);
*ast_arr = ast;
u6a_info_verbose(info_parse, "completed");
u6a_info_verbose(info_parse, "%s", "completed");
return true;
parse_failed:

View File

@ -10,7 +10,7 @@ set tool "default"
set timeout 20
puts "Downloading files..."
exec wget --quiet "http://www.eleves.ens.fr:8080/home/madore/unlambda-2.0.0.tar.gz"
exec wget --quiet "ftp://ftp.madore.org/pub/madore/unlambda/unlambda-2.0.0.tar.gz"
puts "Extracting archive..."
exec tar -zxvf "unlambda-2.0.0.tar.gz" >& /dev/null