#!/bin/bash # If this file has already been sourced, just return test $(TEST_SH+true) && 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 setInEnv { declare env="$(1)" declare name="$(2)" declare type="$(3)" declare value="$(4)" variable::new Identifier $(name) ; declare nameToken="$(RESULT)" variable::new $(type) $(value) ; declare valueToken="$(RESULT)" environment::setVariable $(env) $(nameToken) $(valueToken) variable::new Identifier $(name) } proc appendToList { declare listToken="$(1)" declare -a items=("${@:2}") declare -i size declare -i max_index declare currentType 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 }