Files
Fig-TreeWalker/src/Ast/Statements/InterfaceDefSt.hpp
PuqiAR ca4ae143b4
All checks were successful
Release Build / build-windows-x64 (push) Successful in 43s
Release Build / build-linux-x64 (push) Successful in 50s
v0.4.2-alpha
[Fix][Impl] 为了消除类构造带来的语法歧义,同时保持实现简洁和括号省略的语法,自此版本,引入了 `new` 操作符
            造成歧义的原方法:
                if a == A{}
            条件是 a == A,还是 a == A{} ?

            因此,现在使用 new a_struct{}来构造类
[Opti] 相较于 Fig v0.4.1-alpha版本,release O3同编译条件下
       Fib普通递归法性能提升 ~50%
       具体方式:
            增加了小整数优化,-128~127的整数现在会直接从IntPool获取而不是新构造
            ...忘了
[Fix] 类构造 shorthand模式忘写了,现在补上了
[Feat][Impl] 类型声明现在接受一个表达式,原为Identifier。实现 var start: time.Time = time.now() 的效果
             这是符合语法和语言特性的支持,类型为一等公民。类似Python的 <class 'type'>

[Impl] 修改了部分错误输出的细节
2026-01-22 08:24:14 +08:00

59 lines
1.2 KiB
C++

#pragma once
#include <Ast/functionParameters.hpp>
#include <Ast/astBase.hpp>
namespace Fig::Ast
{
/*
interface Readable
{
read() -> String
{
// default
}
flush() -> Null; // non-default
}
*/
struct InterfaceMethod
{
FString name;
FunctionParameters paras;
Expression returnType;
BlockStatement defaultBody = nullptr; // nullptr is non-default func
bool hasDefaultBody() const
{
return defaultBody != nullptr;
}
};
class InterfaceDefAst final : public StatementAst
{
public:
FString name;
std::vector<InterfaceMethod> methods;
std::vector<FString> parents; // Feature, NOT NOW
bool isPublic;
InterfaceDefAst()
{
type = AstType::InterfaceDefSt;
}
InterfaceDefAst(FString _name, std::vector<InterfaceMethod> _methods, bool _isPublic) :
name(std::move(_name)), methods(std::move(_methods)), isPublic(_isPublic)
{
type = AstType::InterfaceDefSt;
}
};
using InterfaceDef = std::shared_ptr<InterfaceDefAst>;
};