diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2017-02-15 20:17:13 -0500 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2017-02-15 20:17:13 -0500 |
commit | a9d81338b19f21f7220e340a1c50870b40587120 (patch) | |
tree | 509f8ec05d8b8da88b90630031cff5b52b2e5c54 /tools | |
parent | 249af91ff9d9ffbd8962efcad999de442e609658 (diff) | |
download | roux-a9d81338b19f21f7220e340a1c50870b40587120.tar.gz |
add support for closure calls
Compiling languages with closures often requires passing an extra environment parameter to the called function. One solution is to use a convention, and reserve, say, the first argument for that purpose. However, that makes binding to C a little less smooth. Alternatively, QBE now provides a way to remain fully ABI compatible with C by having a "hidden" environment argument (marked with the keyword 'env'). Calling a function expecting an environment from C will make the contents of the environment undefined, but the normal arguments will be passed without alteration. Conversely, calling a C function like it is a closure by passing it an environemnt will work smoothly.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/lexh.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/tools/lexh.c b/tools/lexh.c index db27f8f..9e8016a 100644 --- a/tools/lexh.c +++ b/tools/lexh.c @@ -22,7 +22,7 @@ char *tok[] = { "ceql", "cnel", "cles", "clts", "cgts", "cges", "cnes", "ceqs", "cos", "cuos", "cled", "cltd", "cgtd", "cged", "cned", "ceqd", "cod", "cuod", - "vaarg", "vastart", "...", + "vaarg", "vastart", "...", "env", "call", "phi", "jmp", "jnz", "ret", "export", "function", "type", "data", "align", "l", "w", |