From 63821755e64fa48bb0ec07b41043663c76dc7dfb Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Mon, 7 Jun 2021 04:02:00 +0100 Subject: [PATCH] [compiler] add `psize-of` (#564) --- goalc/compiler/Compiler.h | 1 + goalc/compiler/compilation/Atoms.cpp | 1 + goalc/compiler/compilation/Type.cpp | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/goalc/compiler/Compiler.h b/goalc/compiler/Compiler.h index bc661f0f71..d95faf7e93 100644 --- a/goalc/compiler/Compiler.h +++ b/goalc/compiler/Compiler.h @@ -557,6 +557,7 @@ class Compiler { Val* compile_none(const goos::Object& form, const goos::Object& rest, Env* env); Val* compile_defenum(const goos::Object& form, const goos::Object& rest, Env* env); Val* compile_size_of(const goos::Object& form, const goos::Object& rest, Env* env); + Val* compile_psize_of(const goos::Object& form, const goos::Object& rest, Env* env); }; extern const std::unordered_map< diff --git a/goalc/compiler/compilation/Atoms.cpp b/goalc/compiler/compilation/Atoms.cpp index 95393fc1d8..f1b03485ea 100644 --- a/goalc/compiler/compilation/Atoms.cpp +++ b/goalc/compiler/compilation/Atoms.cpp @@ -174,6 +174,7 @@ const std::unordered_map< {"declare-type", &Compiler::compile_declare_type}, {"none", &Compiler::compile_none}, {"size-of", &Compiler::compile_size_of}, + {"psize-of", &Compiler::compile_psize_of}, // LAMBDA {"lambda", &Compiler::compile_lambda}, diff --git a/goalc/compiler/compilation/Type.cpp b/goalc/compiler/compilation/Type.cpp index b3000dd2b2..f0e63ebc3b 100644 --- a/goalc/compiler/compilation/Type.cpp +++ b/goalc/compiler/compilation/Type.cpp @@ -1260,3 +1260,7 @@ int Compiler::get_size_for_size_of(const goos::Object& form, const goos::Object& Val* Compiler::compile_size_of(const goos::Object& form, const goos::Object& rest, Env* env) { return compile_integer(get_size_for_size_of(form, rest), env); } + +Val* Compiler::compile_psize_of(const goos::Object& form, const goos::Object& rest, Env* env) { + return compile_integer((get_size_for_size_of(form, rest) + 0xf) & ~0xf, env); +}