first issue fixed
This commit is contained in:
parent
8f1320eae7
commit
c63cf3777f
3 changed files with 48 additions and 18 deletions
|
|
@ -585,7 +585,7 @@ fn calculate_type(
|
|||
match (declared_type, inferred_type) {
|
||||
(I32, I64) => I32, //need this?
|
||||
(I32, Integer) => I32,
|
||||
(U32, U64) => U32,
|
||||
(U32, I64) => U32,
|
||||
(U32, Integer) => U32,
|
||||
(F32, F64) => F32,
|
||||
(F32, FloatingPoint) => F32,
|
||||
|
|
|
|||
|
|
@ -2,13 +2,7 @@ use crate::ast_compiler::{Expression, Function, Statement};
|
|||
use crate::chunk::Chunk;
|
||||
use crate::tokens::TokenType;
|
||||
use crate::value::Value;
|
||||
use crate::vm::{
|
||||
OP_ADD, OP_AND, OP_BITAND, OP_BITOR, OP_BITXOR, OP_CALL, OP_CONSTANT, OP_DEF_BOOL, OP_DEF_CHAR,
|
||||
OP_DEF_DATE, OP_DEF_F32, OP_DEF_F64, OP_DEF_I32, OP_DEF_I64, OP_DEF_LIST, OP_DEF_MAP,
|
||||
OP_DEF_STRING, OP_DEF_STRUCT, OP_DEFINE, OP_DIVIDE, OP_EQUAL, OP_GET, OP_GREATER,
|
||||
OP_GREATER_EQUAL, OP_LESS, OP_LESS_EQUAL, OP_MULTIPLY, OP_NEGATE, OP_NOT, OP_OR, OP_PRINT,
|
||||
OP_RETURN, OP_SHL, OP_SHR, OP_SUBTRACT,
|
||||
};
|
||||
use crate::vm::{OP_ADD, OP_AND, OP_BITAND, OP_BITOR, OP_BITXOR, OP_CALL, OP_CONSTANT, OP_DEF_BOOL, OP_DEF_CHAR, OP_DEF_DATE, OP_DEF_F32, OP_DEF_F64, OP_DEF_I32, OP_DEF_I64, OP_DEF_LIST, OP_DEF_MAP, OP_DEF_STRING, OP_DEF_STRUCT, OP_DEFINE, OP_DIVIDE, OP_EQUAL, OP_GET, OP_GREATER, OP_GREATER_EQUAL, OP_LESS, OP_LESS_EQUAL, OP_MULTIPLY, OP_NEGATE, OP_NOT, OP_OR, OP_PRINT, OP_RETURN, OP_SHL, OP_SHR, OP_SUBTRACT, OP_DEF_U32};
|
||||
use std::collections::HashMap;
|
||||
use crate::errors::CompilerError;
|
||||
|
||||
|
|
@ -234,7 +228,7 @@ impl Compiler {
|
|||
let def_op = match var_type {
|
||||
TokenType::I32 => OP_DEF_I32,
|
||||
TokenType::I64 => OP_DEF_I64,
|
||||
TokenType::U32 => OP_DEF_I64,
|
||||
TokenType::U32 => OP_DEF_U32,
|
||||
TokenType::U64 => OP_DEF_I64,
|
||||
TokenType::F32 => OP_DEF_F32,
|
||||
TokenType::F64 => OP_DEF_F64,
|
||||
|
|
|
|||
44
src/vm.rs
44
src/vm.rs
|
|
@ -131,11 +131,47 @@ impl <'a> Vm<'a> {
|
|||
let value = self.pop();
|
||||
self.local_vars.insert(name, value);
|
||||
}
|
||||
OP_DEF_I32 => define_var!(self, I32, chunk),
|
||||
OP_DEF_I32 => {
|
||||
let name = self.read_name(chunk);
|
||||
let value = self.pop();
|
||||
let value = match value{
|
||||
Value::I32(v) => Value::I32(v),
|
||||
Value::I64(v) => Value::I32(v as i32),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
self.local_vars.insert(name, value);
|
||||
}
|
||||
OP_DEF_I64 => define_var!(self, I64, chunk),
|
||||
OP_DEF_U32 => define_var!(self, U32, chunk),
|
||||
OP_DEF_U64 => define_var!(self, U64, chunk),
|
||||
OP_DEF_F32 => define_var!(self, F32, chunk),
|
||||
OP_DEF_U32 => {
|
||||
let name = self.read_name(chunk);
|
||||
let value = self.pop();
|
||||
let value = match value{
|
||||
Value::U32(v) => Value::U32(v),
|
||||
Value::I64(v) => Value::U32(v as u32),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
self.local_vars.insert(name, value);
|
||||
}
|
||||
OP_DEF_U64 => {
|
||||
let name = self.read_name(chunk);
|
||||
let value = self.pop();
|
||||
let value = match value{
|
||||
Value::U64(v) => Value::U64(v),
|
||||
Value::I64(v) => Value::U64(v as u64),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
self.local_vars.insert(name, value);
|
||||
}
|
||||
OP_DEF_F32 => {
|
||||
let name = self.read_name(chunk);
|
||||
let value = self.pop();
|
||||
let value = match value{
|
||||
Value::F32(v) => Value::F32(v),
|
||||
Value::F64(v) => Value::F32(v as f32),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
self.local_vars.insert(name, value);
|
||||
}
|
||||
OP_DEF_F64 => define_var!(self, F64, chunk),
|
||||
OP_DEF_STRING => define_var!(self, String, chunk),
|
||||
OP_DEF_CHAR => define_var!(self, Char, chunk),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue