Skip to content
run HolyC on Linux secularly
Python
Branch: master
Clone or download
Latest commit 4019207 Jan 8, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config now can have func params strings + variables Jan 8, 2018
examples now can have func params strings + variables Jan 8, 2018
secularize removed prints Jan 8, 2018
.gitignore removed .eggs Jan 7, 2018
Jenkinsfile added sudo arg Jan 7, 2018
LICENSE.txt setting up pypi Jan 7, 2018
MANIFEST.in setup pypi Jan 7, 2018
README.md fixed syntax color Jan 7, 2018
requirements.txt added 'dump-ast' Jan 7, 2018
setup.cfg setting up pypi Jan 7, 2018
setup.py removed prints Jan 8, 2018

README.md

HolyC-for-Linux

run HolyC on Linux secularly

Build Status 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.

You can’t perform that action at this time.