Finished migrating parser to be object orientation free. All tests pass

This commit is contained in:
Stefan Zermatten
2021-10-03 13:54:17 +02:00
parent d30184434c
commit b78517b61f
35 changed files with 589 additions and 654 deletions

View File

@@ -1,10 +1,9 @@
import resolve, {traverse, toString, mergeResolvedNodes} from '../resolve';
import collate from '/imports/api/engine/computation/utility/collate.js';
import resolve, { traverse, toString } from '../resolve';
const ifNode = {
create({condition, consequent, alternative}){
return {
type: 'if',
parseType: 'if',
condition,
consequent,
alternative,
@@ -14,28 +13,14 @@ const ifNode = {
let {condition, consequent, alternative} = node;
return `${toString(condition)} ? ${toString(consequent)} : ${toString(alternative)}`
},
resolve(fn, node, scope){
let rest, condition, consequent, alternative;
let resolved = {};
resolve(fn, node, scope, context){
let {result: condition} = resolve(fn, node.condition, scope, context);
({result: condition, ...rest} = resolve(fn, node.condition, scope));
mergeResolvedNodes(resolved, rest);
if (condition.type === 'constant'){
if (condition.parseType === 'constant'){
if (condition.value){
({result: consequent, ...rest} = resolve(fn, node.consequent, scope));
mergeResolvedNodes(resolved, rest);
return {
result: consequent,
...resolved
};
return resolve(fn, node.consequent, scope, context);
} else {
({result: alternative, ...rest} = resolve(fn, node.alternative, scope));
mergeResolvedNodes(resolved, rest);
return {
result: alternative,
...resolved
};
return resolve(fn, node.alternative, scope, context);
}
} else {
return {
@@ -44,7 +29,7 @@ const ifNode = {
consequent: node.consequent,
alternative: node.alternative,
}),
...resolved
context,
};
}
},