extends Interp class_name HankInterp var hInterface: HInterface var story: Story func _init(hInterface2: HInterface) -> void: self.hInterface = hInterface2 super() func setStory(story2: Story) -> void: self.story = story2 func expr(e: Variant): if (e._index == 7): var _g: String = e.op var _g1: bool = e.prefix var _g2: Variant = e.e match (_g): "&": if (_g1 == true): var e2: Variant = _g2 if (e2._index == 1): var _g3: String = e2.v if true: var id: String = _g3 return id else: assert(false, str("Addressing complex expressions is not implemented")) else: return super.expr(e) "*": if (_g1 == true): var e2: Variant = _g2 if (e2._index == 1): var _g3: String = e2.v if true: var id: String = _g3 var tempResult if true: var this1: Variant = self.variables var tempMaybeVar if true: var this2: Variant = self.variables tempMaybeVar = this2.__get(id) var key: String = tempMaybeVar tempResult = this1.__get(key) return tempResult else: assert(false, str("Dereferencing complex expressions is not implemented")) else: return super.expr(e) "->": if (_g1 == true): var e2: Variant = _g2 var targetWithDots: String = "" var trailingDot: bool = false while (true): match (e2._index): 1: var _g3: String = e2.v if true: var lastTarget: String = _g3 if true: targetWithDots = lastTarget + "." + targetWithDots if (trailingDot): targetWithDots = targetWithDots.substr(0, targetWithDots.length() - 1) var node: Array[StoryNode] = self.story.resolveNodeInScope(targetWithDots, null) return node 5: var _g3: Variant = e2.e var _g4: String = e2.f if true: var eNested: Variant = _g3 var lastTarget: String = _g4 if true: targetWithDots = lastTarget + "." + targetWithDots trailingDot = true e2 = eNested _: assert(false, str("Divert target variable cannot be specified in form " + str(e2))) else: return super.expr(e) _: return super.expr(e) else: return super.expr(e) func assign(e1: Variant, e2: Variant): var v = self.expr(e2) if (e1._index == 7): var _g: String = e1.op var _g1: bool = e1.prefix var _g2: Variant = e1.e if (_g == "*"): if (_g1 == true): var e: Variant = _g2 if (e._index == 1): var _g3: String = e.v var id: String = _g3 var this1: Variant = self.variables var tempMaybeVar var this2: Variant = self.variables tempMaybeVar = this2.__get(id) var k: String = tempMaybeVar this1.__set(k, v) v else: assert(false, str("Dereferenced assignment of complex expressions is not implemented.")) return v else: return super.assign(e1, e2) else: return super.assign(e1, e2) else: return super.assign(e1, e2)