119 lines
3.0 KiB
GDScript
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)
|