Start of action system re-write
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -27,9 +27,6 @@ const rollArray = {
|
||||
context,
|
||||
};
|
||||
},
|
||||
traverse(node, fn){
|
||||
return fn(node);
|
||||
}
|
||||
}
|
||||
|
||||
export default rollArray;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user