Skip to content

Repository files navigation

HolyC-for-Linux

run HolyC on Linux secularly

Build Status License PyPI version

Disclaimer

This tool is in super-hella-mega alpha stage. If you use this, you will die. Or worse, your current operating system will be replaced with TempleOS. I've only tested this on 3.7-dev.

Install

pip install secularize

Translate

The primary use is to translate holyc to c. Do this with: secularize examples/test.hc

this turns examples/test.hc

F64 *s = 3;

U0 test(I16 a, U8 b, F64 c) {
  Print("hello");
}

F64 pest(I8 d) {
  Print("nothing");
}

Print("%s %s", "hello", "world");
I64 b = 2.000;

into examples/test.c

void test(short a, unsigned char b, double c)
{
  printf("hello");
}

double pest(char d)
{
  printf("nothing");
}

int main()
{
  double* s = 3;
  printf("%s %s", "hello", "world");
  long b = 2.0;
}

Debugging

To add a feature, it's useful to get the AST of an expected target. To do this, write the C file you're trying to translate to, then run secularize dump-ast name-of-file.c. This will pretty print the AST to json.

$ cat examples/math.c
int main()
{
  long a = 3;
  long b = 2;
}

$ secularize dump-ast examples/math.c
{
  "_nodetype": "FileAST",
  "coord": null,
  "ext": [
    {
      "_nodetype": "FuncDef",
      "coord": "examples/math.c:1:5",
      "decl": {
        "_nodetype": "Decl",
        "name": "main",
        "quals": [],
        "storage": [],
        "funcspec": [],
        "coord": "examples/math.c:1:5",
        "type": {
          "_nodetype": "FuncDecl",
          "coord": "examples/math.c:1:5",
          "type": {
            "_nodetype": "TypeDecl",
            "declname": "main",
            "quals": [],
            "coord": "examples/math.c:1:5",
            "type": {
              "_nodetype": "IdentifierType",
              "names": [
                "int"
              ],
              "coord": "examples/math.c:1:1"
            }
          },
          "args": null
        },
        "init": null,
        "bitsize": null
      },
      "body": {
        "_nodetype": "Compound",
        "coord": "examples/math.c:2:1",
        "block_items": [
          {
            "_nodetype": "Decl",
            "name": "a",
            "quals": [],
            "storage": [],
            "funcspec": [],
            "coord": "examples/math.c:3:8",
            "type": {
              "_nodetype": "TypeDecl",
              "declname": "a",
              "quals": [],
              "coord": "examples/math.c:3:8",
              "type": {
                "_nodetype": "IdentifierType",
                "names": [
                  "long"
                ],
                "coord": "examples/math.c:3:3"
              }
            },
            "init": {
              "_nodetype": "Constant",
              "type": "int",
              "value": "3",
              "coord": "examples/math.c:3:12"
            },
            "bitsize": null
          },
          {
            "_nodetype": "Decl",
            "name": "b",
            "quals": [],
            "storage": [],
            "funcspec": [],
            "coord": "examples/math.c:4:8",
            "type": {
              "_nodetype": "TypeDecl",
              "declname": "b",
              "quals": [],
              "coord": "examples/math.c:4:8",
              "type": {
                "_nodetype": "IdentifierType",
                "names": [
                  "long"
                ],
                "coord": "examples/math.c:4:3"
              }
            },
            "init": {
              "_nodetype": "Constant",
              "type": "int",
              "value": "2",
              "coord": "examples/math.c:4:12"
            },
            "bitsize": null
          }
        ]
      },
      "param_decls": null
    }
  ]
}

What's Supported

  • print statements
  • primitive data types
  • basic functions

What's Not Supported

Everything else. Deal with it.

About

run HolyC on Linux secularly

Topics

Resources

Stars

352 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages