forked from PuqiAR/Fig-TreeWalker
规范 include
This commit is contained in:
@@ -1,21 +0,0 @@
|
|||||||
#include <Ast/astBase.hpp>
|
|
||||||
#include <Compiler/Compiler.hpp>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace Fig
|
|
||||||
{
|
|
||||||
void Compiler::compile(Ast::Statement stmt)
|
|
||||||
{
|
|
||||||
using enum Ast::AstType;
|
|
||||||
using namespace Ast;
|
|
||||||
Ast::AstType type = stmt->getType();
|
|
||||||
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case VarDefSt: {
|
|
||||||
auto vd = std::static_pointer_cast<VarDefAst>(stmt);
|
|
||||||
const FString name = vd->name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}; // namespace Fig
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Ast/astBase.hpp"
|
|
||||||
#include <Ast/ast.hpp>
|
|
||||||
#include <Bytecode/Bytecode.hpp>
|
|
||||||
#include <VMValue/VMValue.hpp>
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace Fig
|
|
||||||
{
|
|
||||||
class Compiler
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
std::vector<Ast::Statement> source;
|
|
||||||
std::vector<OpCodeType> output; // std::vector<uint8_t>
|
|
||||||
|
|
||||||
std::vector<Value> constants;
|
|
||||||
public:
|
|
||||||
std::vector<OpCodeType> getOutput() const { return output; }
|
|
||||||
std::vector<Value> getConstantPool() const { return constants; }
|
|
||||||
|
|
||||||
Compiler() {}
|
|
||||||
Compiler(std::vector<Ast::Statement> _source) : source(std::move(_source)) {}
|
|
||||||
|
|
||||||
void compile_expr(Ast::Expression);
|
|
||||||
|
|
||||||
void compile(Ast::Statement);
|
|
||||||
|
|
||||||
void CompileAll();
|
|
||||||
};
|
|
||||||
}; // namespace Fig
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "Ast/Expressions/BinaryExpr.hpp"
|
#include <Ast/Expressions/BinaryExpr.hpp>
|
||||||
#include <Evaluator/Value/value.hpp>
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Evaluator/Value/LvObject.hpp>
|
#include <Evaluator/Value/LvObject.hpp>
|
||||||
#include <Evaluator/Value/IntPool.hpp>
|
#include <Evaluator/Value/IntPool.hpp>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "Ast/functionParameters.hpp"
|
#include <Ast/functionParameters.hpp>
|
||||||
#include "Evaluator/Value/value.hpp"
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Ast/Expressions/FunctionCall.hpp>
|
#include <Ast/Expressions/FunctionCall.hpp>
|
||||||
#include <Evaluator/Value/function.hpp>
|
#include <Evaluator/Value/function.hpp>
|
||||||
#include <Evaluator/Value/LvObject.hpp>
|
#include <Evaluator/Value/LvObject.hpp>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "Evaluator/Value/value.hpp"
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Evaluator/Value/LvObject.hpp>
|
#include <Evaluator/Value/LvObject.hpp>
|
||||||
#include <Evaluator/evaluator.hpp>
|
#include <Evaluator/evaluator.hpp>
|
||||||
#include <Evaluator/evaluator_error.hpp>
|
#include <Evaluator/evaluator_error.hpp>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "Evaluator/Value/value.hpp"
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Evaluator/Value/LvObject.hpp>
|
#include <Evaluator/Value/LvObject.hpp>
|
||||||
#include <Evaluator/evaluator.hpp>
|
#include <Evaluator/evaluator.hpp>
|
||||||
#include <Evaluator/evaluator_error.hpp>
|
#include <Evaluator/evaluator_error.hpp>
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
#include "Ast/AccessModifier.hpp"
|
#include <Ast/AccessModifier.hpp>
|
||||||
#include "Ast/Expressions/FunctionCall.hpp"
|
#include <Ast/Expressions/FunctionCall.hpp>
|
||||||
#include "Ast/astBase.hpp"
|
#include <Ast/astBase.hpp>
|
||||||
#include "Ast/functionParameters.hpp"
|
#include <Ast/functionParameters.hpp>
|
||||||
#include "Core/fig_string.hpp"
|
#include <Core/fig_string.hpp>
|
||||||
#include "Evaluator/Core/StatementResult.hpp"
|
#include <Evaluator/Core/StatementResult.hpp>
|
||||||
#include "Evaluator/Value/Type.hpp"
|
#include <Evaluator/Value/Type.hpp>
|
||||||
#include "Evaluator/Value/value.hpp"
|
#include <Evaluator/Value/structType.hpp>
|
||||||
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Evaluator/Value/LvObject.hpp>
|
#include <Evaluator/Value/LvObject.hpp>
|
||||||
#include <Evaluator/evaluator.hpp>
|
#include <Evaluator/evaluator.hpp>
|
||||||
#include <Evaluator/evaluator_error.hpp>
|
#include <Evaluator/evaluator_error.hpp>
|
||||||
@@ -236,6 +237,15 @@ namespace Fig
|
|||||||
add(l, r) {...}
|
add(l, r) {...}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
if (ValueType::isTypeBuiltin(structType))
|
||||||
|
{
|
||||||
|
throw EvaluatorError(
|
||||||
|
u8"BadUserError",
|
||||||
|
std::format("Don't overload built-in type operators plz! `{}`", prettyType(structTypeObj).toBasicString()),
|
||||||
|
ip
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
using enum Ast::Operator;
|
using enum Ast::Operator;
|
||||||
static const std::unordered_map<FString, std::pair<Ast::Operator, size_t>> magic_name_to_op = {
|
static const std::unordered_map<FString, std::pair<Ast::Operator, size_t>> magic_name_to_op = {
|
||||||
// 算术
|
// 算术
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "Evaluator/Value/value.hpp"
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Evaluator/Value/LvObject.hpp>
|
#include <Evaluator/Value/LvObject.hpp>
|
||||||
#include <Evaluator/evaluator.hpp>
|
#include <Evaluator/evaluator.hpp>
|
||||||
#include <Evaluator/evaluator_error.hpp>
|
#include <Evaluator/evaluator_error.hpp>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Core/fig_string.hpp"
|
#include <Core/fig_string.hpp>
|
||||||
#include <Evaluator/Value/function.hpp>
|
#include <Evaluator/Value/function.hpp>
|
||||||
#include <Evaluator/Value/interface.hpp>
|
#include <Evaluator/Value/interface.hpp>
|
||||||
#include <Evaluator/Value/structType.hpp>
|
#include <Evaluator/Value/structType.hpp>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#include "Ast/astBase.hpp"
|
#include <Ast/astBase.hpp>
|
||||||
#include "Core/fig_string.hpp"
|
#include <Core/fig_string.hpp>
|
||||||
#include "Evaluator/Core/StatementResult.hpp"
|
#include <Evaluator/Core/StatementResult.hpp>
|
||||||
#include "Evaluator/Value/value.hpp"
|
#include <Evaluator/Value/value.hpp>
|
||||||
#include <Utils/utils.hpp>
|
#include <Utils/utils.hpp>
|
||||||
#include <Parser/parser.hpp>
|
#include <Parser/parser.hpp>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "Ast/Expressions/VarExpr.hpp"
|
#include <Ast/Expressions/VarExpr.hpp>
|
||||||
#include <Ast/Statements/ErrorFlow.hpp>
|
#include <Ast/Statements/ErrorFlow.hpp>
|
||||||
#include <Ast/Statements/ImplementSt.hpp>
|
#include <Ast/Statements/ImplementSt.hpp>
|
||||||
#include <Ast/astBase.hpp>
|
#include <Ast/astBase.hpp>
|
||||||
@@ -194,7 +194,8 @@ namespace Fig
|
|||||||
else if (isThis(TokenType::Colon)) // :
|
else if (isThis(TokenType::Colon)) // :
|
||||||
{
|
{
|
||||||
next(); // skip `:`
|
next(); // skip `:`
|
||||||
Ast::Expression type_exp = parseExpression(0, TokenType::Comma, TokenType::RightParen, TokenType::Assign);
|
Ast::Expression type_exp =
|
||||||
|
parseExpression(0, TokenType::Comma, TokenType::RightParen, TokenType::Assign);
|
||||||
if (isThis(TokenType::Assign)) // =
|
if (isThis(TokenType::Assign)) // =
|
||||||
{
|
{
|
||||||
next(); // skip `=`
|
next(); // skip `=`
|
||||||
@@ -927,10 +928,7 @@ namespace Fig
|
|||||||
}
|
}
|
||||||
expect(TokenType::RightBrace);
|
expect(TokenType::RightBrace);
|
||||||
next(); // consume `}`
|
next(); // consume `}`
|
||||||
return makeAst<Ast::InitExprAst>(
|
return makeAst<Ast::InitExprAst>(structe, args, static_cast<Ast::InitExprAst::InitMode>(mode));
|
||||||
structe,
|
|
||||||
args,
|
|
||||||
static_cast<Ast::InitExprAst::InitMode>(mode));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ast::Expression Parser::__parseTupleOrParenExpr()
|
Ast::Expression Parser::__parseTupleOrParenExpr()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Token/token.hpp"
|
#include <Token/token.hpp>
|
||||||
#include <Ast/astBase.hpp>
|
#include <Ast/astBase.hpp>
|
||||||
#include <Ast/ast.hpp>
|
#include <Ast/ast.hpp>
|
||||||
#include <Lexer/lexer.hpp>
|
#include <Lexer/lexer.hpp>
|
||||||
@@ -154,10 +154,8 @@ namespace Fig
|
|||||||
tokenPruduced++;
|
tokenPruduced++;
|
||||||
if (tok == IllegalTok) throw lexer.getError();
|
if (tok == IllegalTok) throw lexer.getError();
|
||||||
currentTokenIndex = tokenPruduced - 1;
|
currentTokenIndex = tokenPruduced - 1;
|
||||||
setCurrentAAI(Ast::AstAddressInfo{.line = tok.line,
|
setCurrentAAI(Ast::AstAddressInfo{
|
||||||
.column = tok.column,
|
.line = tok.line, .column = tok.column, .sourcePath = sourcePathPtr, .sourceLines = sourceLinesPtr});
|
||||||
.sourcePath = sourcePathPtr,
|
|
||||||
.sourceLines = sourceLinesPtr});
|
|
||||||
|
|
||||||
previousTokens.push_back(tok);
|
previousTokens.push_back(tok);
|
||||||
}
|
}
|
||||||
@@ -315,7 +313,6 @@ namespace Fig
|
|||||||
|
|
||||||
Ast::InitExpr __parseInitExpr(Ast::Expression); // entry: current is `{`, ahead is struct type exp.
|
Ast::InitExpr __parseInitExpr(Ast::Expression); // entry: current is `{`, ahead is struct type exp.
|
||||||
|
|
||||||
|
|
||||||
Ast::Expression __parseTupleOrParenExpr(); // entry: current is `(`
|
Ast::Expression __parseTupleOrParenExpr(); // entry: current is `(`
|
||||||
|
|
||||||
Ast::FunctionLiteralExpr __parseFunctionLiteralExpr(); // entry: current is Token::LParen after Token::Function
|
Ast::FunctionLiteralExpr __parseFunctionLiteralExpr(); // entry: current is Token::LParen after Token::Function
|
||||||
@@ -323,7 +320,10 @@ namespace Fig
|
|||||||
Ast::Import __parseImport(); // entry: current is Token::Import
|
Ast::Import __parseImport(); // entry: current is Token::Import
|
||||||
|
|
||||||
Ast::Statement __parseStatement(bool = true); // entry: (idk)
|
Ast::Statement __parseStatement(bool = true); // entry: (idk)
|
||||||
Ast::Expression parseExpression(Precedence, TokenType = TokenType::Semicolon, TokenType = TokenType::Semicolon, TokenType = TokenType::Semicolon);
|
Ast::Expression parseExpression(Precedence,
|
||||||
|
TokenType = TokenType::Semicolon,
|
||||||
|
TokenType = TokenType::Semicolon,
|
||||||
|
TokenType = TokenType::Semicolon);
|
||||||
std::vector<Ast::AstBase> parseAll();
|
std::vector<Ast::AstBase> parseAll();
|
||||||
};
|
};
|
||||||
}; // namespace Fig
|
}; // namespace Fig
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "Ast/astBase.hpp"
|
#include <Ast/astBase.hpp>
|
||||||
#include "Error/error.hpp"
|
#include <Error/error.hpp>
|
||||||
#include "Error/errorLog.hpp"
|
#include <Error/errorLog.hpp>
|
||||||
#include <Core/fig_string.hpp>
|
#include <Core/fig_string.hpp>
|
||||||
#include <Repl/Repl.hpp>
|
#include <Repl/Repl.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -31,10 +31,7 @@ namespace Fig
|
|||||||
ostream << Object::getNullInstance()->toString().toBasicString();
|
ostream << Object::getNullInstance()->toString().toBasicString();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (line == u8"!exit")
|
if (line == u8"!exit") { break; }
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Lexer lexer(line, sourcePath, sourceLines);
|
Lexer lexer(line, sourcePath, sourceLines);
|
||||||
Parser parser(lexer, sourcePath, sourceLines);
|
Parser parser(lexer, sourcePath, sourceLines);
|
||||||
|
|||||||
Reference in New Issue
Block a user