diff options
Diffstat (limited to 'jlox/src/com/craftinginterpreters/lox/LoxInstance.java')
-rw-r--r-- | jlox/src/com/craftinginterpreters/lox/LoxInstance.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/jlox/src/com/craftinginterpreters/lox/LoxInstance.java b/jlox/src/com/craftinginterpreters/lox/LoxInstance.java new file mode 100644 index 0000000..64989e0 --- /dev/null +++ b/jlox/src/com/craftinginterpreters/lox/LoxInstance.java @@ -0,0 +1,34 @@ +package com.craftinginterpreters.lox; + +import java.util.HashMap; +import java.util.Map; + +class LoxInstance { + private LoxClass klass; + private final Map<String, Object> fields = new HashMap<>(); + + LoxInstance(LoxClass klass) { + this.klass = klass; + } + + Object get(Token name) { + if (fields.containsKey(name.lexeme)) { + return fields.get(name.lexeme); + } + + LoxFunction method = klass.findMethod(name.lexeme); + if (method != null) + return method.bind(this); + + throw new RuntimeError(name, "Undefined proprety '" + name.lexeme + "'."); + } + + void set(Token name, Object value) { + fields.put(name.lexeme, value); + } + + @Override + public String toString() { + return klass.name + " instance"; + } +} |