implemented vector subtraction

This commit is contained in:
Sander Hautvast 2021-03-01 20:29:54 +01:00
parent cf59d18887
commit b1697412a7

View file

@ -136,32 +136,30 @@ const visit_expression = function (expr) {
switch (expr.type) { switch (expr.type) {
case 'declaration': { case 'declaration': {
let value = visit_expression(expr.initializer); let value = visit_expression(expr.initializer);
if (!value.is_object) { if (!value.is_object) { // if it's a primitive value,
value = { value = { // turn it into a object that returns the value
description: value, description: value,
get: function () { get: function () {
return description; // description IS value in this case return this.description; // description IS value in this case
} }
}; };
} }
value.binding = expr.var_name.value; value.binding = expr.var_name.value; // store the variable name with it, to handle reassignment.
if (state[value.binding]) { if (state[value.binding]) { // do reassignment
value.previous = state[value.binding]; value.previous = state[value.binding]; // remember previous value, to remove it from the visualisation
} }
state[value.binding] = value; state[value.binding] = value; // assign new value to binding
let description = state[value.binding].description;
if (!description) { update_lazy_objects(); // reevaluate any lazy expressions
description = value; // primitive value (eg number, string)
} return {description: expr.var_name.value + ':' + value.description, value: value};
update_lazy_objects();
return {description: expr.var_name.value + ':' + description, value: value};
} }
case 'group': case 'group': // expression within parentheses
return visit_expression(expr.expression); return visit_expression(expr.expression);
case 'unary': { case 'unary': {
let right_operand = visit_expression(expr.right); let right_operand = visit_expression(expr.right);
if (expr.operator === token_types.MINUS) { if (expr.operator === token_types.MINUS) {
return -right_operand; return -right_operand; //TODO create negate function (because now it only works for numbers)
} else if (expr.operator === token_types.NOT) { } else if (expr.operator === token_types.NOT) {
return !right_operand; return !right_operand;
} else { } else {
@ -302,10 +300,15 @@ const addition = function (left, right) {
} }
const subtract = function (left, right) { const subtract = function (left, right) {
// if (left && left.type === 'vector' && right.object && right.type === 'vector') { if (left && left.type === 'vector' && right && right.type === 'vector') {
// return left.subtract(right); return create_vector({
// } x0: left.x0 - right.x0,
// return left - right; y0: left.x0 - right.x0,
x: left.x - right.x,
y: left.y - right.y
});
}
return left - right;
} }
export const create_vector = function (vector) { //rename to create_vector export const create_vector = function (vector) { //rename to create_vector