Skip to content

Commit 2981b05

Browse files
committed
[update] the interpreter to properly handle parsing both classes and instances.
1 parent 9c39734 commit 2981b05

File tree

2 files changed

+52
-45
lines changed

2 files changed

+52
-45
lines changed

src/Lamscript/parsing/Parser.cpp

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -140,18 +140,18 @@ Token Parser::Consume(TokenType type, const std::string& message) {
140140
UniqueStatement Parser::ParseDeclaration() {
141141
try {
142142
if (CheckAndConsumeTokens({CLASS})) {
143-
return std::move(ParseClassStatement());
143+
return ParseClassStatement();
144144
}
145145

146146
if (CheckAndConsumeTokens({FUN})) {
147-
return std::move(ParseFunction("function"));
147+
return ParseFunction("function");
148148
}
149149

150150
if (CheckAndConsumeTokens({VAR})) {
151-
return std::move(ParseVariableDeclaration());
151+
return ParseVariableDeclaration();
152152
}
153153

154-
return std::move(ParseStatement());
154+
return ParseStatement();
155155
} catch (const ParseError& error) {
156156
Synchronize();
157157
return nullptr;
@@ -172,7 +172,7 @@ UniqueStatement Parser::ParseVariableDeclaration() {
172172
UniqueStatement statement;
173173
statement.reset(
174174
new parsed::VariableStatement(name, std::move(initializer)));
175-
return std::move(statement);
175+
return statement;
176176
}
177177

178178
std::vector<
@@ -197,32 +197,32 @@ std::vector<
197197
/// * Expression statements.
198198
UniqueStatement Parser::ParseStatement() {
199199
if (CheckAndConsumeTokens({FOR})) {
200-
return std::move(ParseForStatement());
200+
return ParseForStatement();
201201
}
202202

203203
if (CheckAndConsumeTokens({IF})) {
204-
return std::move(ParseIfStatement());
204+
return ParseIfStatement();
205205
}
206206

207207
if (CheckAndConsumeTokens({PRINT})) {
208-
return std::move(ParsePrintStatement());
208+
return ParsePrintStatement();
209209
}
210210

211211
if (CheckAndConsumeTokens({RETURN})) {
212-
return std::move(ParseReturnStatement());
212+
return ParseReturnStatement();
213213
}
214214

215215
if (CheckAndConsumeTokens({WHILE})) {
216-
return std::move(ParseWhileStatement());
216+
return ParseWhileStatement();
217217
}
218218

219219
if (CheckAndConsumeTokens({LEFT_BRACE})) {
220220
UniqueStatement block;
221221
block.reset(new parsed::Block(std::move(ParseBlockStatements())));
222-
return std::move(block);
222+
return block;
223223
}
224224

225-
return std::move(ParseExpressionStatement());
225+
return ParseExpressionStatement();
226226
}
227227

228228
UniqueStatement Parser::ParsePrintStatement() {
@@ -231,7 +231,7 @@ UniqueStatement Parser::ParsePrintStatement() {
231231

232232
UniqueStatement print;
233233
print.reset(new parsed::Print(std::move(value)));
234-
return std::move(print);
234+
return print;
235235
}
236236

237237
UniqueStatement Parser::ParseExpressionStatement() {
@@ -241,7 +241,7 @@ UniqueStatement Parser::ParseExpressionStatement() {
241241

242242
UniqueStatement expr_statement;
243243
expr_statement.reset(new parsed::ExpressionStatement(std::move(value)));
244-
return std::move(expr_statement);
244+
return expr_statement;
245245
}
246246

247247
UniqueStatement Parser::ParseIfStatement() {
@@ -260,7 +260,7 @@ UniqueStatement Parser::ParseIfStatement() {
260260
if_statement.reset(
261261
new parsed::If(
262262
std::move(condition), std::move(then_branch), std::move(else_branch)));
263-
return std::move(if_statement);
263+
return if_statement;
264264
}
265265

266266
UniqueStatement Parser::ParseWhileStatement() {
@@ -274,7 +274,7 @@ UniqueStatement Parser::ParseWhileStatement() {
274274
while_statement.reset(
275275
new parsed::While(std::move(condition), std::move(body)));
276276

277-
return std::move(while_statement);
277+
return while_statement;
278278
}
279279

280280
UniqueStatement Parser::ParseForStatement() {
@@ -331,7 +331,7 @@ UniqueStatement Parser::ParseForStatement() {
331331
body.reset(new parsed::Block(std::move(statements)));
332332
}
333333

334-
return std::move(body);
334+
return body;
335335
}
336336

337337
UniqueStatement Parser::ParseFunction(const std::string& kind) {
@@ -348,7 +348,7 @@ UniqueStatement Parser::ParseFunction(const std::string& kind) {
348348
if (CheckAndConsumeTokens({STATIC})) {
349349
is_static = true;
350350
}
351-
name = Consume(IDENTIFIER, "Expect " + kind + " name.");
351+
name = Consume(IDENTIFIER, "Expect " + kind + " name.");
352352
}
353353

354354
bool is_getter = is_method && CheckToken(LEFT_BRACE);
@@ -383,15 +383,15 @@ UniqueStatement Parser::ParseFunction(const std::string& kind) {
383383
std::move(body),
384384
parsed::FunctionMetadata{is_static, is_method, is_getter}));
385385

386-
return std::move(func_statement);
386+
return func_statement;
387387
}
388388

389389
UniqueStatement Parser::ParseReturnStatement() {
390390
Token keyword = Previous();
391391
UniqueExpression value = nullptr;
392392

393393
if (!CheckToken(SEMICOLON)) {
394-
value = std::move(ParseExpression());
394+
value = ParseExpression();
395395
}
396396

397397
Consume(SEMICOLON, "Expect ';' after return value.");
@@ -427,7 +427,7 @@ UniqueStatement Parser::ParseClassStatement() {
427427

428428
UniqueStatement class_def;
429429
class_def.reset(new parsed::Class(name, std::move(base_class), methods));
430-
return std::move(class_def);
430+
return class_def;
431431
}
432432

433433
// -------------------------------- EXPRESSIONS --------------------------------
@@ -447,7 +447,7 @@ UniqueExpression Parser::ParseEquality() {
447447
std::move(expression), expr_operator, std::move(right_side)));
448448
}
449449

450-
return std::move(expression);
450+
return expression;
451451
}
452452

453453
UniqueExpression Parser::ParseAssignment() {
@@ -460,7 +460,7 @@ UniqueExpression Parser::ParseAssignment() {
460460
if (parsed::Variable* var = dynamic_cast<parsed::Variable*>(
461461
expression.get())) {
462462
expression.reset(new parsed::Assign(var->GetName(), std::move(value)));
463-
return std::move(expression);
463+
return expression;
464464
} else if (
465465
parsed::Get* get = dynamic_cast<parsed::Get*>(expression.get())) {
466466
expression.reset(
@@ -471,11 +471,11 @@ UniqueExpression Parser::ParseAssignment() {
471471
}
472472
}
473473

474-
return std::move(expression);
474+
return expression;
475475
}
476476

477477
UniqueExpression Parser::ParseExpression() {
478-
return std::move(ParseAssignment());
478+
return ParseAssignment();
479479
}
480480

481481
/// @brief Parses primary expressions into literals.
@@ -484,17 +484,17 @@ UniqueExpression Parser::ParsePrimary() {
484484

485485
if (CheckAndConsumeTokens({FALSE})) {
486486
expression.reset(new parsed::Literal(false));
487-
return std::move(expression);
487+
return expression;
488488
}
489489

490490
if (CheckAndConsumeTokens({TRUE})) {
491491
expression.reset(new parsed::Literal(true));
492-
return std::move(expression);
492+
return expression;
493493
}
494494

495495
if (CheckAndConsumeTokens({NIL})) {
496496
expression.reset(new parsed::Literal());
497-
return std::move(expression);
497+
return expression;
498498
}
499499

500500
if (CheckAndConsumeTokens({NUMBER, STRING})) {
@@ -503,12 +503,12 @@ UniqueExpression Parser::ParsePrimary() {
503503
if (token.Literal.type() == typeid(double)) {
504504
expression.reset(new parsed::Literal(
505505
std::any_cast<double>(token.Literal)));
506-
return std::move(expression);
506+
return expression;
507507
}
508508

509509
expression.reset(new parsed::Literal(
510510
std::any_cast<std::string&>(token.Literal)));
511-
return std::move(expression);
511+
return expression;
512512
}
513513

514514
if (CheckAndConsumeTokens({SUPER})) {
@@ -521,26 +521,25 @@ UniqueExpression Parser::ParsePrimary() {
521521

522522
if (CheckAndConsumeTokens({THIS})) {
523523
expression.reset(new parsed::This(Previous()));
524-
return std::move(expression);
524+
return expression;
525525
}
526526

527527
if (CheckAndConsumeTokens({IDENTIFIER})) {
528528
expression.reset(new parsed::Variable(Previous()));
529-
return std::move(expression);
529+
return expression;
530530
}
531531

532532
if (CheckAndConsumeTokens({FUN})) {
533-
UniqueStatement lambda_func = std::move(
534-
ParseFunction("lambda"));
533+
UniqueStatement lambda_func = ParseFunction("lambda");
535534
expression.reset(new parsed::LambdaExpression(std::move(lambda_func)));
536-
return std::move(expression);
535+
return expression;
537536
}
538537

539538
if (CheckAndConsumeTokens({LEFT_PAREN})) {
540539
UniqueExpression grouping = ParseExpression();
541540
Consume(RIGHT_PAREN, "Expect ')' after expression");
542541
grouping.reset(new parsed::Grouping(std::move(grouping)));
543-
return std::move(grouping);
542+
return grouping;
544543
}
545544

546545
throw Error(Peek(), "Expect expression.");
@@ -553,10 +552,10 @@ UniqueExpression Parser::ParseUnary() {
553552
UniqueExpression right_side = ParseUnary();
554553
right_side.reset(
555554
new parsed::Unary(unary_operator, std::move(right_side)));
556-
return std::move(right_side);
555+
return right_side;
557556
}
558557

559-
return std::move(ParseCall());
558+
return ParseCall();
560559
}
561560

562561
/// Checks for subtraction first and then addition after.
@@ -571,7 +570,7 @@ UniqueExpression Parser::ParseTerm() {
571570
std::move(expression), expr_operator, std::move(right_side)));
572571
}
573572

574-
return std::move(expression);
573+
return expression;
575574
}
576575

577576
UniqueExpression Parser::ParseFactor() {
@@ -585,7 +584,7 @@ UniqueExpression Parser::ParseFactor() {
585584
std::move(expression), expr_operator, std::move(right_side)));
586585
}
587586

588-
return std::move(expression);
587+
return expression;
589588
}
590589

591590
/// This matches >, >=, <, <= and creates a Binary expression from the
@@ -601,7 +600,7 @@ UniqueExpression Parser::ParseComparison() {
601600
std::move(expression), expr_operator, std::move(right_side)));
602601
}
603602

604-
return std::move(expression);
603+
return expression;
605604
}
606605

607606
UniqueExpression Parser::ParseOr() {
@@ -615,7 +614,7 @@ UniqueExpression Parser::ParseOr() {
615614
std::move(expression), or_operator, std::move(right_operand)));
616615
}
617616

618-
return std::move(expression);
617+
return expression;
619618
}
620619

621620
UniqueExpression Parser::ParseAnd() {
@@ -629,7 +628,7 @@ UniqueExpression Parser::ParseAnd() {
629628
std::move(expression), and_operator, std::move(right_operand)));
630629
}
631630

632-
return std::move(expression);
631+
return expression;
633632
}
634633

635634
UniqueExpression Parser::ParseCall() {
@@ -646,7 +645,7 @@ UniqueExpression Parser::ParseCall() {
646645
}
647646
}
648647

649-
return std::move(expression);
648+
return expression;
650649
}
651650

652651
UniqueExpression Parser::FinishCall(UniqueExpression callee) {
@@ -658,7 +657,7 @@ UniqueExpression Parser::FinishCall(UniqueExpression callee) {
658657
Error(Peek(), "Can't have more than 255 arguments.");
659658
}
660659

661-
arguments.emplace_back(std::move(ParseExpression()));
660+
arguments.emplace_back(ParseExpression());
662661
} while (CheckAndConsumeTokens({COMMA}));
663662
}
664663

src/Lamscript/runtime/Interpreter.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,14 @@ std::string Interpreter::Stringify(std::any object) {
574574
return AnyAs<SharedLamscriptCallable>(object)->ToString();
575575
}
576576

577+
if (type == LS_TYPE_CLASS) {
578+
return AnyAs<SharedLamscriptClass>(object)->ToString();
579+
}
580+
581+
if (type == LS_TYPE_INSTANCE) {
582+
return AnyAs<SharedLamscriptInstance>(object)->ToString();
583+
}
584+
577585
return AnyAs<std::string>(object);
578586
}
579587

0 commit comments

Comments
 (0)