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); +}