[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] 修改了部分错误输出的细节
40 lines
999 B
C++
40 lines
999 B
C++
#pragma once
|
|
|
|
#include "Value/value.hpp"
|
|
#include <Core/fig_string.hpp>
|
|
#include <Value/value_forward.hpp>
|
|
#include <Value/Type.hpp>
|
|
#include <array>
|
|
#include <memory>
|
|
|
|
namespace Fig
|
|
{
|
|
class IntPool
|
|
{
|
|
private:
|
|
static constexpr ValueType::IntClass CACHE_MIN = -128;
|
|
static constexpr ValueType::IntClass CACHE_MAX = 127;
|
|
|
|
std::array<ObjectPtr, CACHE_MAX - CACHE_MIN + 1> cache;
|
|
|
|
public:
|
|
IntPool()
|
|
{
|
|
for (ValueType::IntClass i = CACHE_MIN; i <= CACHE_MAX; ++i)
|
|
{
|
|
cache[i - CACHE_MIN] = std::make_shared<Object>(i);
|
|
}
|
|
}
|
|
ObjectPtr createInt(ValueType::IntClass val) const
|
|
{
|
|
if (val >= CACHE_MIN && val <= CACHE_MAX) { return cache[val - CACHE_MIN]; }
|
|
return std::make_shared<Object>(val);
|
|
}
|
|
|
|
static const IntPool &getInstance()
|
|
{
|
|
static IntPool pool;
|
|
return pool;
|
|
}
|
|
};
|
|
}; // namespace Fig
|