More const qualifiers added
This commit is contained in:
parent
f1fd15171c
commit
a195b8d0e3
3 changed files with 23 additions and 19 deletions
|
@ -156,18 +156,18 @@ Result<void> debug_print(Value& val) {
|
||||||
return debug_print(s);
|
return debug_print(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Value> Array::get(uint64_t idx) {
|
Result<Value> Array::get(uint64_t idx) const {
|
||||||
if (idx >= _value->size) return ERROR(IndexOutOfRange);
|
if (idx >= _value->size) return ERROR(IndexOutOfRange);
|
||||||
auto val = _value->data[idx].get();
|
auto val = _value->data[idx].get();
|
||||||
return Value::create(val);
|
return Value::create(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Value> Array::get(Value& key) {
|
Result<Value> Array::get(const Value& key) const {
|
||||||
if (!key.is<Int64>()) return ERROR(TypeMismatch);
|
if (!key.is<Int64>()) return ERROR(TypeMismatch);
|
||||||
return get(key.to<Int64>()->value());
|
return get(key.to<Int64>()->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Array> Array::append(Value& rhs) {
|
Result<Array> Array::append(const Value& rhs) const {
|
||||||
uint64_t res_size = size() + 1;
|
uint64_t res_size = size() + 1;
|
||||||
|
|
||||||
auto pod = TRY(arena_alloc<PodArray>(res_size * sizeof(OffPtr<PodObject>)));
|
auto pod = TRY(arena_alloc<PodArray>(res_size * sizeof(OffPtr<PodObject>)));
|
||||||
|
@ -187,9 +187,9 @@ short cmp_tag(Tag lhs, Tag rhs) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Value> Dict::get(Value& key) {
|
Result<Value> Dict::get(const Value& key) const {
|
||||||
auto pos = TRY(find(key));
|
auto pos = TRY(find(key));
|
||||||
if (pos > size()) return ERROR(KeyError);
|
if (pos >= size()) return ERROR(KeyError);
|
||||||
auto k = TRY(Value::create(_value->data[pos * 2].get()));
|
auto k = TRY(Value::create(_value->data[pos * 2].get()));
|
||||||
|
|
||||||
if (TRY(k.cmp(key)) != 0) {
|
if (TRY(k.cmp(key)) != 0) {
|
||||||
|
@ -232,7 +232,7 @@ Result<Dict> Dict::insert(const Value& key, const Value& value) {
|
||||||
return Dict(TRY(MkGcRoot(pod)));
|
return Dict(TRY(MkGcRoot(pod)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<uint64_t> Dict::find(const Value& key) {
|
Result<uint64_t> Dict::find(const Value& key) const {
|
||||||
uint64_t left = 0;
|
uint64_t left = 0;
|
||||||
uint64_t right = size();
|
uint64_t right = size();
|
||||||
uint64_t pos = (left + right) / 2;
|
uint64_t pos = (left + right) / 2;
|
||||||
|
@ -284,4 +284,6 @@ Result<short> Dict::cmp(const Dict& rhs) const {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Value> Object::get(Value& key) { return ERROR(TypeMismatch); }
|
Result<Value> Object::get(const Value& key) const {
|
||||||
|
return ERROR(TypeMismatch);
|
||||||
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ class Object {
|
||||||
virtual Result<short> cmp(const ByteArray&) const {
|
virtual Result<short> cmp(const ByteArray&) const {
|
||||||
return cmp_tag(tag(), Tag::ByteArray);
|
return cmp_tag(tag(), Tag::ByteArray);
|
||||||
}
|
}
|
||||||
virtual Result<Value> get(Value& key);
|
virtual Result<Value> get(const Value& key) const;
|
||||||
|
|
||||||
Object() = default;
|
Object() = default;
|
||||||
Object(const Object&) = delete;
|
Object(const Object&) = delete;
|
||||||
|
@ -138,15 +138,15 @@ class Array : public Object {
|
||||||
return Array(TRY(MkGcRoot(pod)));
|
return Array(TRY(MkGcRoot(pod)));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t size() { return _value->size; }
|
uint64_t size() const { return _value->size; }
|
||||||
virtual Result<Value> copy() const final;
|
virtual Result<Value> copy() const final;
|
||||||
|
|
||||||
Result<Value> get(uint64_t idx);
|
Result<Value> get(uint64_t idx) const;
|
||||||
virtual Result<Value> get(Value& key) final;
|
virtual Result<Value> get(const Value& key) const final;
|
||||||
|
|
||||||
Result<Array> append(Value& rhs);
|
Result<Array> append(const Value& rhs) const;
|
||||||
template <class V>
|
template <class V>
|
||||||
Result<Array> append(const V& value);
|
Result<Array> append(const V& value) const;
|
||||||
|
|
||||||
Result<Array> concat(Array& rhs) {
|
Result<Array> concat(Array& rhs) {
|
||||||
uint64_t rhs_size = rhs.size();
|
uint64_t rhs_size = rhs.size();
|
||||||
|
@ -323,7 +323,7 @@ class Dict : public Object {
|
||||||
|
|
||||||
virtual Result<Value> copy() const final;
|
virtual Result<Value> copy() const final;
|
||||||
|
|
||||||
virtual Result<Value> get(Value& key) final;
|
virtual Result<Value> get(const Value& key) const final;
|
||||||
|
|
||||||
Result<Dict> insert(const Value& key, const Value& value);
|
Result<Dict> insert(const Value& key, const Value& value);
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ class Dict : public Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Result<uint64_t> find(const Value& key);
|
Result<uint64_t> find(const Value& key) const;
|
||||||
|
|
||||||
uint64_t size() const { return _value->size; }
|
uint64_t size() const { return _value->size; }
|
||||||
GcRoot<PodDict> _value;
|
GcRoot<PodDict> _value;
|
||||||
|
@ -820,12 +820,12 @@ class Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
bool is() {
|
bool is() const {
|
||||||
return dynamic_cast<T*>((Object*)buf) != nullptr;
|
return dynamic_cast<T*>((Object*)buf) != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
T* to() {
|
T* to() const {
|
||||||
return dynamic_cast<T*>((Object*)buf);
|
return dynamic_cast<T*>((Object*)buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -871,7 +871,7 @@ Result<Dict> Dict::insert(const K& key, const V& value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class V>
|
template <class V>
|
||||||
Result<Array> Array::append(const V& value) {
|
Result<Array> Array::append(const V& value) const {
|
||||||
Value v = TRY(Value::create(value));
|
Value v = TRY(Value::create(value));
|
||||||
return append(v);
|
return append(v);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ struct Context {
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<int64_t> add_const(Value& val) {
|
Result<int64_t> add_const(const Value& val) {
|
||||||
auto idx = constants_dict.get(val);
|
auto idx = constants_dict.get(val);
|
||||||
|
|
||||||
if (idx.has_value()) {
|
if (idx.has_value()) {
|
||||||
|
@ -64,6 +64,7 @@ Result<Value> Compiler::compile(Value& expr) {
|
||||||
TRY(compile_expr(context, expr));
|
TRY(compile_expr(context, expr));
|
||||||
return ERROR(NotImplemented);
|
return ERROR(NotImplemented);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Expression> Compiler::compile_expr(Context& context, Value& expr) {
|
Result<Expression> Compiler::compile_expr(Context& context, Value& expr) {
|
||||||
switch (expr.tag()) {
|
switch (expr.tag()) {
|
||||||
case Tag::Pair:
|
case Tag::Pair:
|
||||||
|
@ -91,6 +92,7 @@ Result<Expression> Compiler::compile_primop(Context& context, Symbol& op,
|
||||||
Array code = TRY(Array::create());
|
Array code = TRY(Array::create());
|
||||||
|
|
||||||
uint64_t reg = context.alloc_reg();
|
uint64_t reg = context.alloc_reg();
|
||||||
|
int64_t zero = TRY(context.add_const(TRY(Value::create((int64_t)0))));
|
||||||
std::cout << "load-immediate r" << reg << ", " << 0 << "\n";
|
std::cout << "load-immediate r" << reg << ", " << 0 << "\n";
|
||||||
code = TRY(add_opcode(code, Oc::LoadImmediate, {0, (int64_t)reg}, {0, 0}));
|
code = TRY(add_opcode(code, Oc::LoadImmediate, {0, (int64_t)reg}, {0, 0}));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue