Start of action system re-write

This commit is contained in:
Stefan Zermatten
2021-10-09 12:36:06 +02:00
parent 0097696cc8
commit 0cdec4a429
41 changed files with 783 additions and 119 deletions

View File

@@ -1,4 +1,4 @@
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
import constant from './constant.js';
const array = {
@@ -41,6 +41,13 @@ const array = {
fn(node);
node.values.forEach(value => traverse(value, fn));
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.values = node.values.map(value => map(value, fn));
}
return resultingNode;
},
}
export default array;

View File

@@ -1,7 +1,7 @@
import error from './error.js';
import constant from './constant.js';
import functions from '/imports/parser/functions.js';
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
const call = {
create({functionName, args}) {
@@ -104,6 +104,13 @@ const call = {
fn(node);
node.args.forEach(arg => traverse(arg, fn));
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.args = node.args.map(arg => map(arg, fn));
}
return resultingNode;
},
checkArugments({node, fn, argumentsExpected, resolvedArgs, context}){
// Check that the number of arguments matches the number expected
if (

View File

@@ -1,4 +1,4 @@
import resolve, { traverse, toString } from '../resolve';
import resolve, { traverse, toString, map } from '../resolve';
const ifNode = {
create({condition, consequent, alternative}){
@@ -39,6 +39,15 @@ const ifNode = {
traverse(node.consequent, fn);
traverse(node.alternative, fn);
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.condition = map(node.condition, fn);
node.consequent = map(node.consequent, fn);
node.alternative = map(node.alternative, fn);
}
return resultingNode;
},
}
export default ifNode;

View File

@@ -1,4 +1,4 @@
import resolve, { traverse, toString } from '../resolve';
import resolve, { traverse, toString, map } from '../resolve';
import error from './error';
const indexNode = {
@@ -68,6 +68,14 @@ const indexNode = {
traverse(node.array, fn);
traverse(node.index, fn);
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.array = map(node.array, fn);
node.index = map(node.index, fn);
}
return resultingNode;
},
}
export default indexNode;

View File

@@ -1,4 +1,4 @@
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
import constant from './constant.js';
const not = {
@@ -31,7 +31,14 @@ const not = {
traverse(node, fn){
fn(node);
traverse(node.right, fn);
}
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.right = map(node.right, fn);
}
return resultingNode;
},
}
export default not;

View File

@@ -1,4 +1,4 @@
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
import constant from './constant.js';
const operator = {
@@ -71,6 +71,14 @@ const operator = {
traverse(node.left, fn);
traverse(node.right, fn);
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.left = map(node.left, fn);
node.right = map(node.right, fn);
}
return resultingNode;
},
}
export default operator;

View File

@@ -1,4 +1,4 @@
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
const parenthesis = {
create({content}) {
@@ -28,7 +28,14 @@ const parenthesis = {
traverse(node, fn){
fn(node);
traverse(node.content, fn);
}
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.content = map(node.content, fn);
}
return resultingNode;
},
}
export default parenthesis;

View File

@@ -1,7 +1,7 @@
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
import error from './error.js';
import rollArray from './rollArray.js';
import roll from '/imports/parser/roll.js';
import rollDice from '/imports/parser/rollDice.js';
import STORAGE_LIMITS from '/imports/constants/STORAGE_LIMITS.js';
const rollNode = {
@@ -39,7 +39,7 @@ const rollNode = {
return errorResult('Dice size is not an integer', node, context);
}
let number = left.value;
if (context.doubleRolls){
if (context.options.doubleRolls){
number *= 2;
}
if (number > STORAGE_LIMITS.diceRollValuesCount){
@@ -47,7 +47,7 @@ const rollNode = {
return errorResult(message, node, context);
}
let diceSize = right.value;
let values = roll(number, diceSize);
let values = rollDice(number, diceSize);
if (context){
context.storeRoll({number, diceSize, values});
}
@@ -69,6 +69,14 @@ const rollNode = {
traverse(node.left, fn);
traverse(node.right, fn);
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.left = map(node.left, fn);
node.right = map(node.right, fn);
}
return resultingNode;
},
}
function errorResult(message, node, context){

View File

@@ -27,9 +27,6 @@ const rollArray = {
context,
};
},
traverse(node, fn){
return fn(node);
}
}
export default rollArray;

View File

@@ -1,4 +1,4 @@
import resolve, { toString, traverse } from '../resolve.js';
import resolve, { toString, traverse, map } from '../resolve.js';
import constant from './constant.js';
const unaryOperator = {
@@ -41,6 +41,13 @@ const unaryOperator = {
fn(node);
traverse(node.right, fn);
},
map(node, fn){
const resultingNode = fn(node);
if (resultingNode === node){
node.right = map(node.right, fn);
}
return resultingNode;
},
};
export default unaryOperator;