diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-04 17:26:27 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-04 17:26:27 +0100 |
| commit | 87f73abf5e7dcec6a9f5ebd213f4a9eb0a5d45db (patch) | |
| tree | 9bec5d45a55f728d5d32c4c8c26c165f88bf2dee /src/main/java/org/zwobble/couscous/interpreter/StackFrameBuilder.java | |
| parent | 47fad1a4e01422c16c900d38938c210456337dca (diff) | |
Error if trying to assign to variable not in scope
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/StackFrameBuilder.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/StackFrameBuilder.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/StackFrameBuilder.java b/src/main/java/org/zwobble/couscous/interpreter/StackFrameBuilder.java new file mode 100644 index 0000000..ac425cd --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/StackFrameBuilder.java @@ -0,0 +1,29 @@ +package org.zwobble.couscous.interpreter; + +import java.util.Map; + +import org.zwobble.couscous.ast.VariableNode; +import org.zwobble.couscous.values.InterpreterValue; + +import com.google.common.collect.ImmutableMap; + +import java.util.Optional; + +public class StackFrameBuilder { + private final ImmutableMap.Builder<Integer, Optional<InterpreterValue>> variables + = ImmutableMap.builder(); + + public StackFrameBuilder declare(VariableNode variable, InterpreterValue value) { + variables.put(variable.getId(), Optional.of(value)); + return this; + } + + public StackFrameBuilder declare(VariableNode variable) { + variables.put(variable.getId(), Optional.empty()); + return this; + } + + public Map<Integer, Optional<InterpreterValue>> build() { + return variables.build(); + } +} |
