Skip to content

Commit 49763f6

Browse files
committed
OperatorBlocks: Add compile functions
1 parent 297e841 commit 49763f6

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

src/blocks/operatorblocks.cpp

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
// SPDX-License-Identifier: Apache-2.0
22

33
#include "operatorblocks.h"
4+
#include "../engine/compiler.h"
45

56
using namespace libscratchcpp;
67

78
OperatorBlocks::OperatorBlocks()
89
{
910
// Blocks
11+
addCompileFunction("operator_add", &OperatorBlocks::compileAdd);
12+
addCompileFunction("operator_subtract", &OperatorBlocks::compileSubtract);
13+
addCompileFunction("operator_multiply", &OperatorBlocks::compileMultiply);
14+
addCompileFunction("operator_divide", &OperatorBlocks::compileDivide);
15+
addCompileFunction("operator_random", &OperatorBlocks::compilePickRandom);
16+
addCompileFunction("operator_lt", &OperatorBlocks::compileLessThan);
17+
addCompileFunction("operator_equals", &OperatorBlocks::compileEquals);
18+
addCompileFunction("operator_gt", &OperatorBlocks::compileGreaterThan);
19+
addCompileFunction("operator_and", &OperatorBlocks::compileAnd);
20+
addCompileFunction("operator_or", &OperatorBlocks::compileOr);
21+
addCompileFunction("operator_not", &OperatorBlocks::compileNot);
1022
addBlock("operator_add", &OperatorBlocks::add);
1123
addBlock("operator_subtract", &OperatorBlocks::subtract);
1224
addBlock("operator_multiply", &OperatorBlocks::multiply);
@@ -34,6 +46,82 @@ std::string OperatorBlocks::name() const
3446
return "Operators";
3547
}
3648

49+
void OperatorBlocks::compileAdd(Compiler *compiler)
50+
{
51+
compiler->addInput(NUM1);
52+
compiler->addInput(NUM2);
53+
compiler->addInstruction(vm::OP_ADD);
54+
}
55+
56+
void OperatorBlocks::compileSubtract(Compiler *compiler)
57+
{
58+
compiler->addInput(NUM1);
59+
compiler->addInput(NUM2);
60+
compiler->addInstruction(vm::OP_SUBTRACT);
61+
}
62+
63+
void OperatorBlocks::compileMultiply(Compiler *compiler)
64+
{
65+
compiler->addInput(NUM1);
66+
compiler->addInput(NUM2);
67+
compiler->addInstruction(vm::OP_MULTIPLY);
68+
}
69+
70+
void OperatorBlocks::compileDivide(Compiler *compiler)
71+
{
72+
compiler->addInput(NUM1);
73+
compiler->addInput(NUM2);
74+
compiler->addInstruction(vm::OP_DIVIDE);
75+
}
76+
77+
void OperatorBlocks::compilePickRandom(Compiler *compiler)
78+
{
79+
compiler->addInput(FROM);
80+
compiler->addInput(TO);
81+
compiler->addInstruction(vm::OP_RANDOM);
82+
}
83+
84+
void OperatorBlocks::compileLessThan(Compiler *compiler)
85+
{
86+
compiler->addInput(OPERAND1);
87+
compiler->addInput(OPERAND2);
88+
compiler->addInstruction(vm::OP_LESS_THAN);
89+
}
90+
91+
void OperatorBlocks::compileEquals(Compiler *compiler)
92+
{
93+
compiler->addInput(OPERAND1);
94+
compiler->addInput(OPERAND2);
95+
compiler->addInstruction(vm::OP_EQUALS);
96+
}
97+
98+
void OperatorBlocks::compileGreaterThan(Compiler *compiler)
99+
{
100+
compiler->addInput(OPERAND1);
101+
compiler->addInput(OPERAND2);
102+
compiler->addInstruction(vm::OP_GREATER_THAN);
103+
}
104+
105+
void OperatorBlocks::compileAnd(Compiler *compiler)
106+
{
107+
compiler->addInput(OPERAND1);
108+
compiler->addInput(OPERAND2);
109+
compiler->addInstruction(vm::OP_AND);
110+
}
111+
112+
void OperatorBlocks::compileOr(Compiler *compiler)
113+
{
114+
compiler->addInput(OPERAND1);
115+
compiler->addInput(OPERAND2);
116+
compiler->addInstruction(vm::OP_OR);
117+
}
118+
119+
void OperatorBlocks::compileNot(Compiler *compiler)
120+
{
121+
compiler->addInput(OPERAND);
122+
compiler->addInstruction(vm::OP_NOT);
123+
}
124+
37125
Value OperatorBlocks::add(const BlockArgs &args)
38126
{
39127
return args.input(NUM1)->value() + args.input(NUM2)->value();

src/blocks/operatorblocks.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ class LIBSCRATCHCPP_EXPORT OperatorBlocks : public IBlockSection
2626

2727
std::string name() const override;
2828

29+
static void compileAdd(Compiler *compiler);
30+
static void compileSubtract(Compiler *compiler);
31+
static void compileMultiply(Compiler *compiler);
32+
static void compileDivide(Compiler *compiler);
33+
static void compilePickRandom(Compiler *compiler);
34+
static void compileLessThan(Compiler *compiler);
35+
static void compileEquals(Compiler *compiler);
36+
static void compileGreaterThan(Compiler *compiler);
37+
static void compileAnd(Compiler *compiler);
38+
static void compileOr(Compiler *compiler);
39+
static void compileNot(Compiler *compiler);
2940
static Value add(const BlockArgs &args);
3041
static Value subtract(const BlockArgs &args);
3142
static Value multiply(const BlockArgs &args);

0 commit comments

Comments
 (0)