Files
hank/hank-godot/scripts/hank_HInterface_HankInterp.gd
Nat Quayle Nelson b0a3c0b3d9
Some checks failed
/ test (push) Failing after 41s
Make hank work in GDScript
2025-10-30 21:42:19 -05:00

119 lines
3.0 KiB
GDScript

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)