mirror of
https://github.com/luau-lang/luau.git
synced 2025-01-09 21:09:10 +00:00
41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
|
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
||
|
#include "IrTranslateBuiltins.h"
|
||
|
|
||
|
#include "Luau/Bytecode.h"
|
||
|
#include "Luau/IrBuilder.h"
|
||
|
|
||
|
#include "lstate.h"
|
||
|
|
||
|
namespace Luau
|
||
|
{
|
||
|
namespace CodeGen
|
||
|
{
|
||
|
|
||
|
BuiltinImplResult translateBuiltinAssert(IrBuilder& build, int nparams, int ra, int arg, IrOp args, int nresults, IrOp fallback)
|
||
|
{
|
||
|
if (nparams < 1 || nresults != 0)
|
||
|
return {BuiltinImplType::None, -1};
|
||
|
|
||
|
IrOp cont = build.block(IrBlockKind::Internal);
|
||
|
|
||
|
// TODO: maybe adding a guard like CHECK_TRUTHY can be useful
|
||
|
build.inst(IrCmd::JUMP_IF_FALSY, build.vmReg(arg), fallback, cont);
|
||
|
build.beginBlock(cont);
|
||
|
|
||
|
return {BuiltinImplType::UsesFallback, 0};
|
||
|
}
|
||
|
|
||
|
BuiltinImplResult translateBuiltin(IrBuilder& build, int bfid, int ra, int arg, IrOp args, int nparams, int nresults, IrOp fallback)
|
||
|
{
|
||
|
switch (bfid)
|
||
|
{
|
||
|
case LBF_ASSERT:
|
||
|
return translateBuiltinAssert(build, nparams, ra, arg, args, nresults, fallback);
|
||
|
default:
|
||
|
return {BuiltinImplType::None, -1};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} // namespace CodeGen
|
||
|
} // namespace Luau
|