#!/bin/bash # If this file has already been sourced, just return test $(TEST_SH+true)TODO && return declare -g TEST_SH = 'true' source ${BASH_SOURCE%/*}/common.sh source ${BASH_SOURCE%/*}/variables.sh source ${BASH_SOURCE%/*}/variables.linkedlist.sh source ${BASH_SOURCE%/*}/evaluator.sh # # Functions to help with testing # Only sourced for test # proc createTestEnv { environment::new evaluator::setup_builtins $(RESULT) } proc setInEnvTODO { declare env = $(1)TODO declare name = $(2)TODO declare type = $(3)TODO declare value = $(4) variable::new Identifier $(name)TODO ; declare nameToken = $(RESULT) variable::new $(type) $(value)TODO ; declare valueToken = $(RESULT) environment::setVariable $(env) $(nameToken) $(valueToken) variable::new Identifier $(name) } proc appendToListTODO { declare listToken = $(1)TODO declare -a items = '('TODO "${@:2}") declare -i size = ''TODO declare -i max_index = ''TODO declare currentType = ''TODO declare currentValue = '' sh-expr ' size=${#items[@]}, max_index=size-1 ' if sh-expr 'size % 2 != 0' { stderr "appendToList: number of items to add to list not even" exit 1 } for ((i=0; i<=max_index; i=i+2)); do currentType="${items[${i}]}" currentValue="${items[((i+1))]}" variable::new "${currentType}" "${currentValue}" variable::LinkedList::append "${listToken}" "${RESULT}" done }