Files
hank/hank-godot/scripts/Parser.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

2853 lines
72 KiB
GDScript

class_name Parser
var line: int
var opChars: String
var identChars: String
var opPriority: Variant
var opRightAssoc: Variant
var preprocesorValues: Variant = haxe_ds_StringMap.new()
var allowJSON: bool
var allowTypes: bool
var allowMetadata: bool
var resumeErrors: bool
var input: String
var readPos: int
var char: int
var ops: Array[bool]
var idents: Array[bool]
var uid: int = 0
var tokens: haxe_ds_GenericStack
var preprocStack: Array[Variant]
func _init() -> void:
self.line = 1
self.opChars = "+*/-=!><&|^%~"
self.identChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"
var priorities: Array[Variant] = ([(["%"] as Array[Variant]), (["*", "/"] as Array[Variant]), (["+", "-"] as Array[Variant]), (["<<", ">>", ">>>"] as Array[Variant]), (["|", "&", "^"] as Array[Variant]), (["==", "!=", ">", "<", ">=", "<="] as Array[Variant]), (["..."] as Array[Variant]), (["&&"] as Array[Variant]), (["||"] as Array[Variant]), (["=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "&=", "^=", "=>"] as Array[Variant]), (["->"] as Array[Variant])] as Array[Variant])
self.opPriority = haxe_ds_StringMap.new()
self.opRightAssoc = haxe_ds_StringMap.new()
var _g: int = 0
var _g1: int = priorities.size()
while (_g < _g1):
var tempNumber
_g += 1
tempNumber = _g - 1
var i: int = tempNumber
var p: Array[Variant] = (priorities[i] as Array[Variant])
var _g2: int = 0
while (_g2 < p.size()):
var x = p[_g2]
_g2 += 1
self.opPriority.__set(x, i)
if (i == 9):
self.opRightAssoc.__set(x, true)
if true:
var x: String = "!"
var tempNumber1
if (x == "++" || x == "--"):
tempNumber1 = -1
else:
tempNumber1 = -2
self.opPriority.__set(x, tempNumber1)
if true:
var x: String = "++"
var tempNumber2
if (x == "++" || x == "--"):
tempNumber2 = -1
else:
tempNumber2 = -2
self.opPriority.__set(x, tempNumber2)
if true:
var x: String = "--"
var tempNumber3
if (x == "++" || x == "--"):
tempNumber3 = -1
else:
tempNumber3 = -2
self.opPriority.__set(x, tempNumber3)
if true:
var x: String = "~"
var tempNumber4
if (x == "++" || x == "--"):
tempNumber4 = -1
else:
tempNumber4 = -2
self.opPriority.__set(x, tempNumber4)
func error(err: Variant, pmin: int, pmax: int) -> void:
if (!self.resumeErrors):
assert(false, str(err))
func invalidChar(c: int) -> void:
if (!self.resumeErrors):
assert(false, str({ "_index": 0, "c": c }))
func initParser(origin) -> void:
self.preprocStack = ([] as Array[Variant])
self.tokens = haxe_ds_GenericStack.new()
self.char = -1
self.ops = []
self.idents = []
self.uid = 0
if true:
var _g: int = 0
var _g1: int = self.opChars.length()
while (_g < _g1):
var tempNumber
if true:
_g += 1
tempNumber = _g - 1
var i: int = tempNumber
var tempIndex
if true:
var _this: String = self.opChars
if (i >= 0 && i < _this.length()):
tempIndex = _this.unicode_at(i)
else:
tempIndex = null
self.ops[tempIndex] = true
if true:
var _g: int = 0
var _g1: int = self.identChars.length()
while (_g < _g1):
var tempNumber1
if true:
_g += 1
tempNumber1 = _g - 1
var i: int = tempNumber1
var tempIndex1
if true:
var _this: String = self.identChars
if (i >= 0 && i < _this.length()):
tempIndex1 = _this.unicode_at(i)
else:
tempIndex1 = null
self.idents[tempIndex1] = true
func parseString(s: String, origin = "hscript") -> Variant:
self.initParser(origin)
self.input = s
self.readPos = 0
var a: Array[Variant] = []
while (true):
var tk = self.token()
if (tk == { "_index": 0 }):
break
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
self.parseFullExpr(a)
var tempResult
if (a.size() == 1):
tempResult = a[0]
else:
tempResult = { "_index": 4, "e": a }
return tempResult
func unexpected(tk: Variant):
var err: Variant = { "_index": 1, "s": self.tokenString(tk) }
if (!self.resumeErrors):
assert(false, str(err))
return null
func push(tk: Variant) -> void:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
func ensure(tk) -> void:
var t = self.token()
if (t != tk):
self.unexpected(t)
func ensureToken(tk: Variant) -> void:
var t = self.token()
if (!Type.enumEq(t, tk)):
self.unexpected(t)
func maybe(tk: Variant) -> bool:
var t = self.token()
if (Type.enumEq(t, tk)):
return true
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
return false
func getIdent() -> String:
var tk = self.token()
if (tk == null):
self.unexpected(tk)
return ""
else:
if (tk._index == 2):
var _g: String = tk.s
var id: String = _g
return id
else:
self.unexpected(tk)
return ""
func expr(e: Variant) -> Variant:
return e
func pmin(e: Variant) -> int:
return 0
func pmax(e: Variant) -> int:
return 0
func mk(e: Variant, pmin = null, pmax = null) -> Variant:
return e
func isBlock(e) -> bool:
if (e == null):
return false
var tempResult
if true:
var _g: Variant = e
match (_g._index):
2:
var _g1: String = _g.n
var _g2 = _g.t
var _g3 = _g.e
if true:
var t = _g2
var e2 = _g3
if (e2 != null):
tempResult = self.isBlock(e2)
else:
if (t != null):
if (t == null):
tempResult = false
else:
if (t._index == 2):
var _g4: Array[Variant] = t.fields
tempResult = true
else:
tempResult = false
else:
tempResult = false
4:
var _g2: Array[Variant] = _g.e
tempResult = true
6:
var _g1: String = _g.op
var _g2: Variant = _g.e1
var _g3: Variant = _g.e2
if true:
var e2: Variant = _g3
tempResult = self.isBlock(e2)
7:
var _g1: String = _g.op
var _g2: bool = _g.prefix
var _g3: Variant = _g.e
if true:
var prefix: bool = _g2
var e2: Variant = _g3
tempResult = !prefix && self.isBlock(e2)
9:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e1
var _g3 = _g.e2
if true:
var e1: Variant = _g2
var e2 = _g3
if (e2 != null):
tempResult = self.isBlock(e2)
else:
tempResult = self.isBlock(e1)
10:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e
if true:
var e2: Variant = _g2
tempResult = self.isBlock(e2)
11:
var _g1: String = _g.v
var _g2: Variant = _g.it
var _g3: Variant = _g.e
if true:
var e2: Variant = _g3
tempResult = self.isBlock(e2)
14:
var _g1: Array[Variant] = _g.args
var _g2: Variant = _g.e
var _g3 = _g.name
var _g4 = _g.ret
if true:
var e2: Variant = _g2
tempResult = self.isBlock(e2)
15:
var _g2 = _g.e
if true:
var e2 = _g2
tempResult = e2 != null && self.isBlock(e2)
20:
var _g1: Variant = _g.e
var _g2: String = _g.v
var _g3 = _g.t
var _g4: Variant = _g.ecatch
if true:
var e2: Variant = _g4
tempResult = self.isBlock(e2)
21:
var _g2: Array[Variant] = _g.fl
tempResult = true
23:
var _g1: Variant = _g.e
var _g2: Array[Variant] = _g.cases
var _g3 = _g.defaultExpr
tempResult = true
24:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e
if true:
var e2: Variant = _g2
tempResult = self.isBlock(e2)
25:
var _g1: String = _g.name
var _g2: Array[Variant] = _g.args
var _g3: Variant = _g.e
if true:
var e2: Variant = _g3
tempResult = self.isBlock(e2)
_:
tempResult = false
return tempResult
func parseFullExpr(exprs: Array[Variant]) -> void:
var e = self.parseExpr()
exprs.push_back(e)
var tk = self.token()
while true:
var tempRight
var _g: Variant = e
if (_g._index == 2):
var _g1: String = _g.n
var _g2 = _g.t
var _g3 = _g.e
tempRight = true
else:
tempRight = false
if !(tk == { "_index": 9 } && e != null && tempRight):
break
e = self.parseStructure("var")
exprs.push_back(e)
tk = self.token()
if (tk != { "_index": 10 } && tk != { "_index": 0 }):
if (self.isBlock(e)):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
self.unexpected(tk)
func parseObject(p1) -> Variant:
var fl: Array[Variant] = []
while (true):
var tk = self.token()
var id = null
if (tk == null):
self.unexpected(tk)
break
else:
match (tk._index):
1:
var _g: Variant = tk.c
var c: Variant = _g
if (!self.allowJSON):
self.unexpected(tk)
if (c._index == 2):
var _g2: String = c.s
var s: String = _g2
id = s
else:
self.unexpected(tk)
2:
var _g: String = tk.s
var i: String = _g
id = i
7:
break
_:
self.unexpected(tk)
break
var t = self.token()
if (t != { "_index": 14 }):
self.unexpected(t)
fl.push_back({
"name": id,
"e": self.parseExpr()
})
tk = self.token()
if (tk == null):
self.unexpected(tk)
else:
match (tk._index):
7:
break
9:
pass
_:
self.unexpected(tk)
return self.parseExprNext({ "_index": 21, "fl": fl })
func parseExpr():
var tk = self.token()
if (tk == null):
return self.unexpected(tk)
else:
match (tk._index):
1:
var _g: Variant = tk.c
if true:
var c: Variant = _g
return self.parseExprNext({ "_index": 0, "c": c })
2:
var _g: String = tk.s
if true:
var id: String = _g
if true:
var e = self.parseStructure(id)
if (e == null):
e = { "_index": 1, "v": id }
return self.parseExprNext(e)
3:
var _g: String = tk.s
var op: String = _g
if (op == "-"):
var start: int = 0
var e = self.parseExpr()
if (e == null):
return self.makeUnop(op, e)
if true:
var _g2: Variant = e
if (_g2._index == 0):
var _g3: Variant = _g2.c
match (_g3._index):
0:
var _g4: int = _g3.v
var i: int = _g4
return { "_index": 0, "c": { "_index": 0, "v": -i } }
1:
var _g4: float = _g3.f
var f: float = _g4
return { "_index": 0, "c": { "_index": 1, "f": -f } }
_:
return self.makeUnop(op, e)
else:
return self.makeUnop(op, e)
var tempLeft
var this1: Variant = self.opPriority
tempLeft = this1.__get(op)
if (tempLeft < 0):
return self.makeUnop(op, self.parseExpr())
return self.unexpected(tk)
4:
tk = self.token()
if (tk == { "_index": 5 }):
if true:
var tk2: Variant = { "_index": 3, "s": "->" }
var t = self.token()
if (!Type.enumEq(t, tk2)):
self.unexpected(t)
var eret = self.parseExpr()
return { "_index": 14, "args": ([] as Array[Variant]), "e": { "_index": 15, "e": eret } }
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
var e = self.parseExpr()
tk = self.token()
if (tk == null):
pass
else:
match (tk._index):
5:
return self.parseExprNext({ "_index": 3, "e": e })
9:
if true:
var _g: Variant = e
if (_g._index == 1):
var _g2: String = _g.v
if true:
var v: String = _g2
return self.parseLambda(([{
"name": v
}] as Array[Variant]), 0)
else:
pass
14:
var t: Variant = self.parseType()
tk = self.token()
if (tk == null):
pass
else:
match (tk._index):
5:
return self.parseExprNext({ "_index": 26, "e": e, "t": t })
9:
if true:
var _g: Variant = e
if (_g._index == 1):
var _g2: String = _g.v
if true:
var v: String = _g2
return self.parseLambda(([{
"name": v,
"t": t
}] as Array[Variant]), 0)
else:
pass
_:
pass
_:
pass
return self.unexpected(tk)
6:
tk = self.token()
if (tk == null):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
match (tk._index):
1:
var _g: Variant = tk.c
if true:
var c: Variant = _g
if (self.allowJSON):
if (c._index == 2):
var _g2: String = c.s
if true:
var tk2 = self.token()
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk2, _this.head)
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
if (tk2 == null):
pass
else:
if (tk2._index == 14):
return self.parseExprNext(self.parseObject(0))
else:
pass
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
2:
var _g: String = tk.s
if true:
var tk2 = self.token()
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk2, _this.head)
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
if (tk2 == null):
pass
else:
if (tk2._index == 14):
return self.parseExprNext(self.parseObject(0))
else:
pass
7:
return self.parseExprNext({ "_index": 21, "fl": ([] as Array[Variant]) })
_:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
var a: Array[Variant] = []
while (true):
self.parseFullExpr(a)
tk = self.token()
if (tk == { "_index": 7 } || self.resumeErrors && tk == { "_index": 0 }):
break
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return { "_index": 4, "e": a }
11:
var a: Array[Variant] = []
tk = self.token()
while (tk != { "_index": 12 } && (!self.resumeErrors || tk != { "_index": 0 })):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
a.push_back(self.parseExpr())
tk = self.token()
if (tk == { "_index": 9 }):
tk = self.token()
if (a.size() == 1 && a[0] != null):
if true:
var _g: Variant = a[0]
match (_g._index):
10:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e
if true:
var tempRight
if true:
self.uid += 1
tempRight = self.uid - 1
var tmp: String = "__a_" + str(tempRight)
var tempExpr
if true:
var e: Variant = { "_index": 4, "e": ([{ "_index": 2, "n": tmp, "t": null, "e": { "_index": 17, "e": ([] as Array[Variant]) } }, self.mapCompr(tmp, a[0]), { "_index": 1, "v": tmp }] as Array[Variant]) }
tempExpr = e
var e: Variant = tempExpr
return self.parseExprNext(e)
11:
var _g1: String = _g.v
var _g2: Variant = _g.it
var _g3: Variant = _g.e
if true:
var tempRight1
if true:
self.uid += 1
tempRight1 = self.uid - 1
var tmp: String = "__a_" + str(tempRight1)
var tempExpr1
if true:
var e: Variant = { "_index": 4, "e": ([{ "_index": 2, "n": tmp, "t": null, "e": { "_index": 17, "e": ([] as Array[Variant]) } }, self.mapCompr(tmp, a[0]), { "_index": 1, "v": tmp }] as Array[Variant]) }
tempExpr1 = e
var e: Variant = tempExpr1
return self.parseExprNext(e)
24:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e
if true:
var tempRight2
if true:
self.uid += 1
tempRight2 = self.uid - 1
var tmp: String = "__a_" + str(tempRight2)
var tempExpr2
if true:
var e: Variant = { "_index": 4, "e": ([{ "_index": 2, "n": tmp, "t": null, "e": { "_index": 17, "e": ([] as Array[Variant]) } }, self.mapCompr(tmp, a[0]), { "_index": 1, "v": tmp }] as Array[Variant]) }
tempExpr2 = e
var e: Variant = tempExpr2
return self.parseExprNext(e)
_:
pass
return self.parseExprNext({ "_index": 17, "e": a })
15:
var _g: String = tk.s
if true:
var id: String = _g
if (self.allowMetadata):
var args = self.parseMetaArgs()
var tempResult
if true:
var e: Variant = { "_index": 25, "name": id, "args": args, "e": self.parseExpr() }
tempResult = e
return tempResult
else:
return self.unexpected(tk)
_:
return self.unexpected(tk)
func parseLambda(args: Array[Variant], pmin) -> Variant:
while (true):
var id: String = self.getIdent()
var tempMaybeCType
if (self.maybe({ "_index": 14 })):
tempMaybeCType = self.parseType()
else:
tempMaybeCType = null
var t = tempMaybeCType
args.push_back({
"name": id,
"t": t
})
var tk = self.token()
if (tk == null):
self.unexpected(tk)
break
else:
match (tk._index):
5:
break
9:
pass
_:
self.unexpected(tk)
break
if true:
var tk: Variant = { "_index": 3, "s": "->" }
var t = self.token()
if (!Type.enumEq(t, tk)):
self.unexpected(t)
var eret = self.parseExpr()
return { "_index": 14, "args": args, "e": { "_index": 15, "e": eret } }
func parseMetaArgs():
var tk = self.token()
if (tk != { "_index": 4 }):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return null
var args: Array[Variant] = ([] as Array[Variant])
tk = self.token()
if (tk != { "_index": 5 }):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
while (true):
args.push_back(self.parseExpr())
if true:
var _g = self.token()
if (_g == null):
var tk2 = _g
self.unexpected(tk2)
else:
match (_g._index):
5:
break
9:
pass
_:
var tk2 = _g
self.unexpected(tk2)
return args
func mapCompr(tmp: String, e: Variant):
if (e == null):
return null
var tempExpr
match (e._index):
3:
var _g: Variant = e.e
if true:
var e2: Variant = _g
tempExpr = { "_index": 3, "e": self.mapCompr(tmp, e2) }
4:
var _g: Array[Variant] = e.e
if (_g.size() == 1):
var _g2: Variant = _g[0]
if true:
var e2: Variant = _g2
tempExpr = { "_index": 4, "e": ([self.mapCompr(tmp, e2)] as Array[Variant]) }
else:
tempExpr = { "_index": 8, "e": { "_index": 5, "e": { "_index": 1, "v": tmp }, "f": "push" }, "params": ([e] as Array[Variant]) }
9:
var _g: Variant = e.cond
var _g1: Variant = e.e1
var _g2 = e.e2
if true:
var cond: Variant = _g
var e1: Variant = _g1
var e2 = _g2
if (e2 == null):
tempExpr = { "_index": 9, "cond": cond, "e1": self.mapCompr(tmp, e1), "e2": null }
else:
tempExpr = { "_index": 8, "e": { "_index": 5, "e": { "_index": 1, "v": tmp }, "f": "push" }, "params": ([e] as Array[Variant]) }
10:
var _g: Variant = e.cond
var _g1: Variant = e.e
if true:
var cond: Variant = _g
var e2: Variant = _g1
tempExpr = { "_index": 10, "cond": cond, "e": self.mapCompr(tmp, e2) }
11:
var _g: String = e.v
var _g1: Variant = e.it
var _g2: Variant = e.e
if true:
var v: String = _g
var it: Variant = _g1
var e2: Variant = _g2
tempExpr = { "_index": 11, "v": v, "it": it, "e": self.mapCompr(tmp, e2) }
24:
var _g: Variant = e.cond
var _g1: Variant = e.e
if true:
var cond: Variant = _g
var e2: Variant = _g1
tempExpr = { "_index": 24, "cond": cond, "e": self.mapCompr(tmp, e2) }
_:
tempExpr = { "_index": 8, "e": { "_index": 5, "e": { "_index": 1, "v": tmp }, "f": "push" }, "params": ([e] as Array[Variant]) }
return tempExpr
func makeUnop(op: String, e):
if (e == null && self.resumeErrors):
return null
var tempResult
if true:
var _g: Variant = e
match (_g._index):
6:
var _g1: String = _g.op
var _g2: Variant = _g.e1
var _g3: Variant = _g.e2
if true:
var bop: String = _g1
var e1: Variant = _g2
var e2: Variant = _g3
if true:
var e3: Variant = { "_index": 6, "op": bop, "e1": self.makeUnop(op, e1), "e2": e2 }
tempResult = e3
22:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e1
var _g3: Variant = _g.e2
if true:
var e1: Variant = _g1
var e2: Variant = _g2
var e3: Variant = _g3
if true:
var e4: Variant = { "_index": 22, "cond": self.makeUnop(op, e1), "e1": e2, "e2": e3 }
tempResult = e4
_:
tempResult = { "_index": 7, "op": op, "prefix": true, "e": e }
return tempResult
func makeBinop(op: String, e1: Variant, e) -> Variant:
if (e == null && self.resumeErrors):
return { "_index": 6, "op": op, "e1": e1, "e2": e }
var tempResult
if true:
var _g: Variant = e
match (_g._index):
6:
var _g1: String = _g.op
var _g2: Variant = _g.e1
var _g3: Variant = _g.e2
if true:
var op2: String = _g1
var e2: Variant = _g2
var e3: Variant = _g3
var tempLeft
if true:
var this1: Variant = self.opPriority
tempLeft = this1.__get(op)
var tempRight
if true:
var this1: Variant = self.opPriority
tempRight = this1.__get(op2)
var tempBool
if true:
var this1: Variant = self.opRightAssoc
tempBool = this1.exists(op)
if (tempLeft <= tempRight && !tempBool):
var e4: Variant = { "_index": 6, "op": op2, "e1": self.makeBinop(op, e1, e2), "e2": e3 }
tempResult = e4
else:
tempResult = { "_index": 6, "op": op, "e1": e1, "e2": e }
22:
var _g1: Variant = _g.cond
var _g2: Variant = _g.e1
var _g3: Variant = _g.e2
if true:
var e2: Variant = _g1
var e3: Variant = _g2
var e4: Variant = _g3
var tempBool1
if true:
var this1: Variant = self.opRightAssoc
tempBool1 = this1.exists(op)
if (tempBool1):
tempResult = { "_index": 6, "op": op, "e1": e1, "e2": e }
else:
var e5: Variant = { "_index": 22, "cond": self.makeBinop(op, e1, e2), "e1": e3, "e2": e4 }
tempResult = e5
_:
tempResult = { "_index": 6, "op": op, "e1": e1, "e2": e }
return tempResult
func parseStructure(id: String):
var tempResult
match (id):
"break":
tempResult = { "_index": 12 }
"continue":
tempResult = { "_index": 13 }
"do":
var e = self.parseExpr()
var tk = self.token()
if (tk == null):
self.unexpected(tk)
else:
if (tk._index == 2):
var _g: String = tk.s
if (_g == "while"):
pass
else:
self.unexpected(tk)
else:
self.unexpected(tk)
var econd = self.parseExpr()
tempResult = { "_index": 24, "cond": econd, "e": e }
"else":
tempResult = self.unexpected({ "_index": 2, "s": id })
"for":
if true:
var t = self.token()
if (t != { "_index": 4 }):
self.unexpected(t)
var vname: String = self.getIdent()
if true:
var tk: Variant = { "_index": 2, "s": "in" }
var t = self.token()
if (!Type.enumEq(t, tk)):
self.unexpected(t)
var eiter = self.parseExpr()
if true:
var t = self.token()
if (t != { "_index": 5 }):
self.unexpected(t)
var e = self.parseExpr()
tempResult = { "_index": 11, "v": vname, "it": eiter, "e": e }
"function":
var tk = self.token()
var name = null
if (tk == null):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
if (tk._index == 2):
var _g: String = tk.s
var id2: String = _g
name = id2
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
var inf: Variant = self.parseFunctionDecl()
tempResult = { "_index": 14, "args": inf.get("args"), "e": inf.get("body"), "name": name, "ret": inf.get("ret") }
"if":
if true:
var t = self.token()
if (t != { "_index": 4 }):
self.unexpected(t)
var cond = self.parseExpr()
if true:
var t = self.token()
if (t != { "_index": 5 }):
self.unexpected(t)
var e1 = self.parseExpr()
var e2 = null
var semic: bool = false
var tk = self.token()
if (tk == { "_index": 10 }):
semic = true
tk = self.token()
if (Type.enumEq(tk, { "_index": 2, "s": "else" })):
e2 = self.parseExpr()
else:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
if (semic):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new({ "_index": 10 }, _this.head)
tempResult = { "_index": 9, "cond": cond, "e1": e1, "e2": e2 }
"inline":
if (!self.maybe({ "_index": 2, "s": "function" })):
self.unexpected({ "_index": 2, "s": "inline" })
return self.parseStructure("function")
"new":
var a: Array[String] = []
a.push_back(self.getIdent())
while (true):
var tk = self.token()
if (tk == null):
self.unexpected(tk)
break
else:
match (tk._index):
4:
break
8:
a.push_back(self.getIdent())
_:
self.unexpected(tk)
break
var args: Array[Variant] = self.parseExprList({ "_index": 5 })
if true:
var tempString
if true:
var result: String = ""
var len: int = a.size()
if true:
var _g: int = 0
var _g1: int = len
while (_g < _g1):
var tempNumber
if true:
_g += 1
tempNumber = _g - 1
var i: int = tempNumber
var tempString1
if (i == len - 1):
tempString1 = ""
else:
tempString1 = "."
result += str(a[i]) + (tempString1)
tempString = result
var e: Variant = { "_index": 18, "cl": tempString, "params": args }
tempResult = e
"return":
var tk = self.token()
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
var tempMaybeExpr
if (tk == { "_index": 10 }):
tempMaybeExpr = null
else:
tempMaybeExpr = self.parseExpr()
var e = tempMaybeExpr
tempResult = { "_index": 15, "e": e }
"switch":
var e = self.parseExpr()
var def = null
var cases: Array[Variant] = ([] as Array[Variant])
if true:
var t = self.token()
if (t != { "_index": 6 }):
self.unexpected(t)
while (true):
var tk = self.token()
if (tk == null):
self.unexpected(tk)
break
else:
match (tk._index):
2:
var _g: String = tk.s
match (_g):
"case":
var c: Variant = {
"values": ([] as Array[Variant]),
"expr": null
}
cases.push_back(c)
while (true):
var e2 = self.parseExpr()
c.get("values").push_back(e2)
tk = self.token()
if (tk == null):
self.unexpected(tk)
break
else:
match (tk._index):
9:
pass
14:
break
_:
self.unexpected(tk)
break
var exprs: Array[Variant] = ([] as Array[Variant])
while (true):
tk = self.token()
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
if (tk == null):
self.parseFullExpr(exprs)
else:
match (tk._index):
0:
if (self.resumeErrors):
break
else:
self.parseFullExpr(exprs)
2:
var _g2: String = tk.s
match (_g2):
"case", "default":
break
_:
self.parseFullExpr(exprs)
7:
break
_:
self.parseFullExpr(exprs)
var tempRight
if (exprs.size() == 1):
tempRight = exprs[0]
else:
if (exprs.size() == 0):
tempRight = { "_index": 4, "e": ([] as Array[Variant]) }
else:
tempRight = { "_index": 4, "e": exprs }
c.set("expr", tempRight)
"default":
if (def != null):
self.unexpected(tk)
if true:
var t = self.token()
if (t != { "_index": 14 }):
self.unexpected(t)
var exprs: Array[Variant] = ([] as Array[Variant])
while (true):
tk = self.token()
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
if (tk == null):
self.parseFullExpr(exprs)
else:
match (tk._index):
0:
if (self.resumeErrors):
break
else:
self.parseFullExpr(exprs)
2:
var _g2: String = tk.s
match (_g2):
"case", "default":
break
_:
self.parseFullExpr(exprs)
7:
break
_:
self.parseFullExpr(exprs)
var tempRight1
if (exprs.size() == 1):
tempRight1 = exprs[0]
else:
if (exprs.size() == 0):
tempRight1 = { "_index": 4, "e": ([] as Array[Variant]) }
else:
tempRight1 = { "_index": 4, "e": exprs }
def = tempRight1
_:
self.unexpected(tk)
break
7:
break
_:
self.unexpected(tk)
break
tempResult = { "_index": 23, "e": e, "cases": cases, "defaultExpr": def }
"throw":
var e = self.parseExpr()
tempResult = { "_index": 19, "e": e }
"try":
var e = self.parseExpr()
if true:
var tk: Variant = { "_index": 2, "s": "catch" }
var t = self.token()
if (!Type.enumEq(t, tk)):
self.unexpected(t)
if true:
var t = self.token()
if (t != { "_index": 4 }):
self.unexpected(t)
var vname: String = self.getIdent()
if true:
var t = self.token()
if (t != { "_index": 14 }):
self.unexpected(t)
var t = null
if (self.allowTypes):
t = self.parseType()
else:
var tk: Variant = { "_index": 2, "s": "Dynamic" }
var t2 = self.token()
if (!Type.enumEq(t2, tk)):
self.unexpected(t2)
var t1 = self.token()
if (t1 != { "_index": 5 }):
self.unexpected(t1)
var ec = self.parseExpr()
tempResult = { "_index": 20, "e": e, "v": vname, "t": t, "ecatch": ec }
"var":
var ident: String = self.getIdent()
var tk = self.token()
var t = null
if (tk == { "_index": 14 } && self.allowTypes):
t = self.parseType()
tk = self.token()
var e = null
if (Type.enumEq(tk, { "_index": 3, "s": "=" })):
e = self.parseExpr()
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
tempResult = { "_index": 2, "n": ident, "t": t, "e": e }
"while":
var econd = self.parseExpr()
var e = self.parseExpr()
tempResult = { "_index": 10, "cond": econd, "e": e }
_:
tempResult = null
return tempResult
func parseExprNext(e1: Variant) -> Variant:
var tk = self.token()
if (tk == null):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return e1
else:
match (tk._index):
3:
var _g: String = tk.s
var op: String = _g
if (op == "->"):
match (e1._index):
1:
var _g2: String = e1.v
if true:
var i: String = _g2
if true:
var eret = self.parseExpr()
return { "_index": 14, "args": ([{
"name": i
}] as Array[Variant]), "e": { "_index": 15, "e": eret } }
3:
var _g2: Variant = e1.e
if true:
var _hx_tmp
_hx_tmp = _g2
if ((_hx_tmp)._index == 1):
var _g3: String = _hx_tmp.v
if true:
var i: String = _g3
if true:
var eret = self.parseExpr()
return { "_index": 14, "args": ([{
"name": i
}] as Array[Variant]), "e": { "_index": 15, "e": eret } }
else:
pass
26:
var _g2: Variant = e1.e
var _g1: Variant = e1.t
if true:
var _hx_tmp
_hx_tmp = _g2
if ((_hx_tmp)._index == 1):
var _g3: String = _hx_tmp.v
if true:
var i: String = _g3
var t: Variant = _g1
if true:
var eret = self.parseExpr()
return { "_index": 14, "args": ([{
"name": i,
"t": t
}] as Array[Variant]), "e": { "_index": 15, "e": eret } }
else:
pass
_:
pass
self.unexpected(tk)
var tempLeft
var this1: Variant = self.opPriority
tempLeft = this1.__get(op)
if (tempLeft == -1):
var tempBool
if (e1._index == 3):
var _g2: Variant = e1.e
tempBool = true
else:
tempBool = false
if (self.isBlock(e1) || (tempBool)):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return e1
return self.parseExprNext({ "_index": 7, "op": op, "prefix": false, "e": e1 })
return self.makeBinop(op, e1, self.parseExpr())
4:
var tempExpr
var e: Variant = { "_index": 8, "e": e1, "params": self.parseExprList({ "_index": 5 }) }
tempExpr = e
return self.parseExprNext(tempExpr)
8:
var field: String = self.getIdent()
return self.parseExprNext({ "_index": 5, "e": e1, "f": field })
11:
var e2 = self.parseExpr()
if true:
var t = self.token()
if (t != { "_index": 12 }):
self.unexpected(t)
return self.parseExprNext({ "_index": 16, "e": e1, "index": e2 })
13:
var e2 = self.parseExpr()
if true:
var t = self.token()
if (t != { "_index": 14 }):
self.unexpected(t)
var e3 = self.parseExpr()
return { "_index": 22, "cond": e1, "e1": e2, "e2": e3 }
_:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return e1
func parseFunctionArgs() -> Array[Variant]:
var args: Array[Variant] = []
var tk = self.token()
if (tk != { "_index": 5 }):
var done: bool = false
while (!done):
var name = null
var opt: bool = false
if (tk == null):
pass
else:
if (tk._index == 13):
opt = true
tk = self.token()
else:
pass
if (tk == null):
self.unexpected(tk)
break
else:
if (tk._index == 2):
var _g: String = tk.s
var id: String = _g
name = id
else:
self.unexpected(tk)
break
var arg: Variant = {
"name": name
}
args.push_back(arg)
if (opt):
arg.set("opt", true)
if (self.allowTypes):
if (self.maybe({ "_index": 14 })):
arg.set("t", self.parseType())
if (self.maybe({ "_index": 3, "s": "=" })):
arg.set("value", self.parseExpr())
tk = self.token()
if (tk == null):
self.unexpected(tk)
else:
match (tk._index):
5:
done = true
9:
tk = self.token()
_:
self.unexpected(tk)
return args
func parseFunctionDecl() -> Variant:
var t = self.token()
if (t != { "_index": 4 }):
self.unexpected(t)
var args: Array[Variant] = self.parseFunctionArgs()
var ret = null
if (self.allowTypes):
var tk = self.token()
if (tk != { "_index": 14 }):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
ret = self.parseType()
return {
"args": args,
"ret": ret,
"body": self.parseExpr()
}
func parsePath() -> Array[String]:
var path: Array[String] = ([self.getIdent()] as Array[String])
while (true):
var t = self.token()
if (t != { "_index": 8 }):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
break
path.push_back(self.getIdent())
return path
func parseType() -> Variant:
var _gthis: Parser = self
var t = self.token()
if (t == null):
return self.unexpected(t)
else:
match (t._index):
2:
var _g: String = t.s
if true:
var v: String = _g
if true:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
var path: Array[String] = self.parsePath()
var params = null
t = self.token()
if (t == null):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
else:
if (t._index == 3):
var _g2: String = t.s
if true:
var op: String = _g2
if (op == "<"):
params = ([] as Array[Variant])
while (true):
params.push_back(self.parseType())
t = self.token()
if (t == null):
pass
else:
match (t._index):
3:
var _g3: String = t.s
if true:
var op2: String = _g3
if true:
if (op2 == ">"):
break
var tempMaybeNumber
if (0 < op2.length()):
tempMaybeNumber = op2.unicode_at(0)
else:
tempMaybeNumber = null
if ((tempMaybeNumber) == 62):
if true:
var _this: haxe_ds_GenericStack = self.tokens
var item: Variant = { "_index": 3, "s": op2.substr(1) }
_this.head = haxe_ds_GenericCell.new(item, _this.head)
break
9:
continue
_:
pass
self.unexpected(t)
break
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
return self.parseTypeNext({ "_index": 0, "path": path, "params": params })
4:
var a = self.token()
var b = self.token()
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(b, _this.head)
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(a, _this.head)
var withReturn = func(args: Array[Variant]) -> Variant:
if true:
var _g = _gthis.token()
if (_g == null):
var t2 = _g
_gthis.unexpected(t2)
else:
if (_g._index == 3):
var _g1: String = _g.s
if (_g1 == "->"):
pass
else:
var t2 = _g
_gthis.unexpected(t2)
else:
var t2 = _g
_gthis.unexpected(t2)
return { "_index": 1, "args": args, "ret": _gthis.parseType() }
if (a == null):
var t2: Variant = self.parseType()
var tempResult
if true:
var _g = self.token()
if (_g == null):
var t3 = _g
tempResult = self.unexpected(t3)
else:
match (_g._index):
5:
tempResult = self.parseTypeNext({ "_index": 3, "t": t2 })
9:
var args: Array[Variant] = ([t2] as Array[Variant])
while (true):
args.push_back(self.parseType())
if (!self.maybe({ "_index": 9 })):
break
if true:
var t3 = self.token()
if (t3 != { "_index": 5 }):
self.unexpected(t3)
tempResult = withReturn.call(args)
_:
var t3 = _g
tempResult = self.unexpected(t3)
return tempResult
else:
match (a._index):
2:
var _g: String = a.s
if (b == null):
var t2: Variant = self.parseType()
var tempResult1
if true:
var _g2 = self.token()
if (_g2 == null):
var t3 = _g2
tempResult1 = self.unexpected(t3)
else:
match (_g2._index):
5:
tempResult1 = self.parseTypeNext({ "_index": 3, "t": t2 })
9:
var args: Array[Variant] = ([t2] as Array[Variant])
while (true):
args.push_back(self.parseType())
if (!self.maybe({ "_index": 9 })):
break
if true:
var t3 = self.token()
if (t3 != { "_index": 5 }):
self.unexpected(t3)
tempResult1 = withReturn.call(args)
_:
var t3 = _g2
tempResult1 = self.unexpected(t3)
return tempResult1
else:
if (b._index == 14):
var tempArray
if true:
var _g2: Array[Variant] = ([] as Array[Variant])
if true:
var _g1: int = 0
var _g3: Array[Variant] = self.parseFunctionArgs()
while (_g1 < _g3.size()):
var arg: Variant = _g3[_g1]
_g1 += 1
if true:
var _g4 = arg.get("value")
if (_g4 == null):
pass
else:
var v = _g4
if (!self.resumeErrors):
assert(false, str({ "_index": 9, "msg": "Default values not allowed in function types" }))
var tempCType
if (arg.get("opt")):
tempCType = { "_index": 4, "t": arg.get("t") }
else:
tempCType = arg.get("t")
_g2.push_back({ "_index": 5, "n": arg.get("name"), "t": tempCType })
tempArray = _g2
var args: Array[Variant] = tempArray
return withReturn.call(args)
else:
var t2: Variant = self.parseType()
var tempResult2
if true:
var _g2 = self.token()
if (_g2 == null):
var t3 = _g2
tempResult2 = self.unexpected(t3)
else:
match (_g2._index):
5:
tempResult2 = self.parseTypeNext({ "_index": 3, "t": t2 })
9:
var args: Array[Variant] = ([t2] as Array[Variant])
while (true):
args.push_back(self.parseType())
if (!self.maybe({ "_index": 9 })):
break
if true:
var t3 = self.token()
if (t3 != { "_index": 5 }):
self.unexpected(t3)
tempResult2 = withReturn.call(args)
_:
var t3 = _g2
tempResult2 = self.unexpected(t3)
return tempResult2
5:
var tempArray1
if true:
var _g: Array[Variant] = ([] as Array[Variant])
if true:
var _g1: int = 0
var _g2: Array[Variant] = self.parseFunctionArgs()
while (_g1 < _g2.size()):
var arg: Variant = _g2[_g1]
_g1 += 1
if true:
var _g3 = arg.get("value")
if (_g3 == null):
pass
else:
var v = _g3
if (!self.resumeErrors):
assert(false, str({ "_index": 9, "msg": "Default values not allowed in function types" }))
var tempCType1
if (arg.get("opt")):
tempCType1 = { "_index": 4, "t": arg.get("t") }
else:
tempCType1 = arg.get("t")
_g.push_back({ "_index": 5, "n": arg.get("name"), "t": tempCType1 })
tempArray1 = _g
var args: Array[Variant] = tempArray1
return withReturn.call(args)
_:
var t2: Variant = self.parseType()
var tempResult3
if true:
var _g = self.token()
if (_g == null):
var t3 = _g
tempResult3 = self.unexpected(t3)
else:
match (_g._index):
5:
tempResult3 = self.parseTypeNext({ "_index": 3, "t": t2 })
9:
var args: Array[Variant] = ([t2] as Array[Variant])
while (true):
args.push_back(self.parseType())
if (!self.maybe({ "_index": 9 })):
break
if true:
var t3 = self.token()
if (t3 != { "_index": 5 }):
self.unexpected(t3)
tempResult3 = withReturn.call(args)
_:
var t3 = _g
tempResult3 = self.unexpected(t3)
return tempResult3
6:
var fields: Array[Variant] = ([] as Array[Variant])
var meta = null
while (true):
t = self.token()
if (t == null):
self.unexpected(t)
break
else:
match (t._index):
2:
var _g: String = t.s
if (_g == "var"):
var name: String = self.getIdent()
if true:
var t2 = self.token()
if (t2 != { "_index": 14 }):
self.unexpected(t2)
fields.push_back({
"name": name,
"t": self.parseType(),
"meta": meta
})
meta = null
if true:
var t2 = self.token()
if (t2 != { "_index": 10 }):
self.unexpected(t2)
else:
var name: String = _g
var t1 = self.token()
if (t1 != { "_index": 14 }):
self.unexpected(t1)
fields.push_back({
"name": name,
"t": self.parseType(),
"meta": meta
})
t = self.token()
if (t == null):
self.unexpected(t)
else:
match (t._index):
7:
break
9:
pass
_:
self.unexpected(t)
7:
break
15:
var _g: String = t.s
if true:
var name: String = _g
if true:
if (meta == null):
meta = ([] as Array[Variant])
meta.push_back({
"name": name,
"params": self.parseMetaArgs()
})
_:
self.unexpected(t)
break
return self.parseTypeNext({ "_index": 2, "fields": fields })
_:
return self.unexpected(t)
return null
func parseTypeNext(t: Variant) -> Variant:
var tk = self.token()
if (tk == null):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return t
else:
if (tk._index == 3):
var _g: String = tk.s
var op: String = _g
if (op != "->"):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return t
else:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
return t
var t2: Variant = self.parseType()
if (t2._index == 1):
var _g: Array[Variant] = t2.args
var _g1: Variant = t2.ret
var args: Array[Variant] = _g
args.push_front(t)
return t2
else:
return { "_index": 1, "args": ([t] as Array[Variant]), "ret": t2 }
func parseExprList(etk) -> Array[Variant]:
var args: Array[Variant] = []
var tk = self.token()
if (tk == etk):
return args
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
while (true):
args.push_back(self.parseExpr())
tk = self.token()
if (tk == null):
if (tk == etk):
break
self.unexpected(tk)
break
else:
if (tk._index == 9):
pass
else:
if (tk == etk):
break
self.unexpected(tk)
break
return args
func parseModule(content: String, origin = "hscript") -> Array[Variant]:
self.initParser(origin)
self.input = content
self.readPos = 0
self.allowTypes = true
self.allowMetadata = true
var decls: Array[Variant] = ([] as Array[Variant])
while (true):
var tk = self.token()
if (tk == { "_index": 0 }):
break
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
decls.push_back(self.parseModuleDecl())
return decls
func parseMetadata() -> Array[Variant]:
var meta: Array[Variant] = ([] as Array[Variant])
while (true):
var tk = self.token()
if (tk == null):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
break
else:
if (tk._index == 15):
var _g: String = tk.s
var name: String = _g
meta.push_back({
"name": name,
"params": self.parseMetaArgs()
})
else:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
break
return meta
func parseParams() -> Variant:
if (self.maybe({ "_index": 3, "s": "<" })):
if (!self.resumeErrors):
assert(false, str({ "_index": 7, "op": "Unsupported class type parameters" }))
return {
}
func parseModuleDecl() -> Variant:
var meta: Array[Variant] = self.parseMetadata()
var ident: String = self.getIdent()
var isPrivate: bool = false
var isExtern: bool = false
while (true):
match (ident):
"extern":
isExtern = true
"private":
isPrivate = true
_:
break
ident = self.getIdent()
match (ident):
"class":
var name: String = self.getIdent()
var params: Variant = self.parseParams()
var extend = null
var implement: Array[Variant] = ([] as Array[Variant])
while (true):
var t = self.token()
if (t == null):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
break
else:
if (t._index == 2):
var _g: String = t.s
match (_g):
"extends":
extend = self.parseType()
"implements":
implement.push_back(self.parseType())
_:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
break
else:
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
break
var fields: Array[Variant] = ([] as Array[Variant])
if true:
var t = self.token()
if (t != { "_index": 6 }):
self.unexpected(t)
while (!self.maybe({ "_index": 7 })):
fields.push_back(self.parseField())
return { "_index": 2, "c": {
"name": name,
"meta": meta,
"params": params,
"extend": extend,
"implement": implement,
"fields": fields,
"isPrivate": isPrivate,
"isExtern": isExtern
} }
"import":
var path: Array[String] = ([self.getIdent()] as Array[String])
var star: bool = false
while (true):
var t = self.token()
if (t != { "_index": 8 }):
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(t, _this.head)
break
t = self.token()
if (t == null):
self.unexpected(t)
else:
match (t._index):
2:
var _g: String = t.s
var id: String = _g
path.push_back(id)
3:
var _g: String = t.s
if (_g == "*"):
star = true
else:
self.unexpected(t)
_:
self.unexpected(t)
if true:
var t = self.token()
if (t != { "_index": 10 }):
self.unexpected(t)
return { "_index": 1, "path": path, "everything": star }
"package":
var path: Array[String] = self.parsePath()
if true:
var t = self.token()
if (t != { "_index": 10 }):
self.unexpected(t)
return { "_index": 0, "path": path }
"typedef":
var name: String = self.getIdent()
var params: Variant = self.parseParams()
if true:
var tk: Variant = { "_index": 3, "s": "=" }
var t = self.token()
if (!Type.enumEq(t, tk)):
self.unexpected(t)
var t: Variant = self.parseType()
return { "_index": 3, "c": {
"name": name,
"meta": meta,
"params": params,
"isPrivate": isPrivate,
"t": t
} }
_:
self.unexpected({ "_index": 2, "s": ident })
return null
func parseField() -> Variant:
var meta: Array[Variant] = self.parseMetadata()
var access: Array[FieldAccess.FieldAccess] = ([] as Array[FieldAccess.FieldAccess])
while (true):
var id: String = self.getIdent()
match (id):
"function":
var name: String = self.getIdent()
var inf: Variant = self.parseFunctionDecl()
return {
"name": name,
"meta": meta,
"access": access,
"kind": { "_index": 0, "f": {
"args": inf.get("args"),
"expr": inf.get("body"),
"ret": inf.get("ret")
} }
}
"inline":
access.push_back(FieldAccess.FieldAccess.AInline)
"macro":
access.push_back(FieldAccess.FieldAccess.AMacro)
"override":
access.push_back(FieldAccess.FieldAccess.AOverride)
"private":
access.push_back(FieldAccess.FieldAccess.APrivate)
"public":
access.push_back(FieldAccess.FieldAccess.APublic)
"static":
access.push_back(FieldAccess.FieldAccess.AStatic)
"var":
var name: String = self.getIdent()
var __get = null
var __set = null
if (self.maybe({ "_index": 4 })):
__get = self.getIdent()
if true:
var t = self.token()
if (t != { "_index": 9 }):
self.unexpected(t)
__set = self.getIdent()
if true:
var t = self.token()
if (t != { "_index": 5 }):
self.unexpected(t)
var tempMaybeCType
if (self.maybe({ "_index": 14 })):
tempMaybeCType = self.parseType()
else:
tempMaybeCType = null
var type = tempMaybeCType
var tempMaybeExpr
if (self.maybe({ "_index": 3, "s": "=" })):
tempMaybeExpr = self.parseExpr()
else:
tempMaybeExpr = null
var expr = tempMaybeExpr
if (expr != null):
if (self.isBlock(expr)):
self.maybe({ "_index": 10 })
else:
var t = self.token()
if (t != { "_index": 10 }):
self.unexpected(t)
else:
var tempBool
if (type == null):
tempBool = false
else:
if (type._index == 2):
var _g: Array[Variant] = type.fields
tempBool = true
else:
tempBool = false
if (type != null && (tempBool)):
self.maybe({ "_index": 10 })
else:
var t = self.token()
if (t != { "_index": 10 }):
self.unexpected(t)
return {
"name": name,
"meta": meta,
"access": access,
"kind": { "_index": 1, "v": {
"get": __get,
"set": __set,
"type": type,
"expr": expr
} }
}
_:
self.unexpected({ "_index": 2, "s": id })
break
return null
func readChar() -> int:
var s: String = self.input
self.readPos += 1
var tempNumber: int = self.readPos - 1
var index: int = tempNumber
var tempResult: int = s.unicode_at.call(index)
return tempResult
func readString(until: int) -> String:
var c: int = 0
var b_b: String = ""
var esc: bool = false
var old: int = self.line
var s: String = self.input
while (true):
var tempNumber
if true:
var s2: String = self.input
var tempNumber1
if true:
self.readPos += 1
tempNumber1 = self.readPos - 1
var index: int = tempNumber1
tempNumber = s2.unicode_at.call(index)
var c2: int = tempNumber
if (esc):
esc = false
match (c2):
47:
if (self.allowJSON):
b_b += char(c2)
else:
self.invalidChar(c2)
34, 39, 92:
b_b += char(c2)
110:
b_b += "\n"
114:
b_b += "\r"
116:
b_b += "\t"
117:
if (!self.allowJSON):
self.invalidChar(c2)
var k: int = 0
var _g: int = 0
while (_g < 4):
var tempNumber2
_g += 1
tempNumber2 = _g - 1
var i: int = tempNumber2
k <<= 4
var tempNumber3
if true:
var s2: String = self.input
var tempNumber4
if true:
self.readPos += 1
tempNumber4 = self.readPos - 1
var index: int = tempNumber4
tempNumber3 = s2.unicode_at.call(index)
var char2: int = tempNumber3
match (char2):
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
k += char2 - 48
65, 66, 67, 68, 69, 70:
k += char2 - 55
97, 98, 99, 100, 101, 102:
k += char2 - 87
_:
self.invalidChar(char2)
b_b += char(k)
_:
self.invalidChar(c2)
else:
if (c2 == 92):
esc = true
else:
if (c2 == until):
break
else:
if (c2 == 10):
self.line += 1
b_b += char(c2)
return b_b
func token():
if (self.tokens.head != null):
var tempResult
if true:
var _this: haxe_ds_GenericStack = self.tokens
var k: haxe_ds_GenericCell = _this.head
if (k == null):
tempResult = null
else:
_this.head = k.next
tempResult = k.elt
return tempResult
var char2
if (self.char < 0):
var tempRight
if true:
var s: String = self.input
var tempNumber
if true:
self.readPos += 1
tempNumber = self.readPos - 1
var index: int = tempNumber
tempRight = s.unicode_at.call(index)
char2 = tempRight
else:
char2 = self.char
self.char = -1
while (true):
match (char2):
0:
return { "_index": 0 }
10:
self.line += 1
9, 13, 32:
pass
34, 39:
return { "_index": 1, "c": { "_index": 2, "s": self.readString(char2) } }
35:
var tempRight1
if true:
var s: String = self.input
var tempNumber1
if true:
self.readPos += 1
tempNumber1 = self.readPos - 1
var index: int = tempNumber1
tempRight1 = s.unicode_at.call(index)
char2 = tempRight1
if (self.idents[char2]):
var id: String = char(char2)
while (true):
var tempRight2
if true:
var s: String = self.input
var tempNumber2
if true:
self.readPos += 1
tempNumber2 = self.readPos - 1
var index: int = tempNumber2
tempRight2 = s.unicode_at.call(index)
char2 = tempRight2
if (!self.idents[char2]):
self.char = char2
return self.preprocess(id)
id += char(char2)
self.invalidChar(char2)
40:
return { "_index": 4 }
41:
return { "_index": 5 }
44:
return { "_index": 9 }
46:
var tempRight3
if true:
var s: String = self.input
var tempNumber3
if true:
self.readPos += 1
tempNumber3 = self.readPos - 1
var index: int = tempNumber3
tempRight3 = s.unicode_at.call(index)
char2 = tempRight3
match (char2):
46:
var tempRight4
if true:
var s: String = self.input
var tempNumber4
if true:
self.readPos += 1
tempNumber4 = self.readPos - 1
var index: int = tempNumber4
tempRight4 = s.unicode_at.call(index)
char2 = tempRight4
if (char2 != 46):
self.invalidChar(char2)
return { "_index": 3, "s": "..." }
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
var n: int = char2 - 48
var _exp: int = 1
while (true):
var tempRight5
if true:
var s: String = self.input
var tempNumber5
if true:
self.readPos += 1
tempNumber5 = self.readPos - 1
var index: int = tempNumber5
tempRight5 = s.unicode_at.call(index)
char2 = tempRight5
_exp *= 10
match (char2):
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
n = n * 10 + (char2 - 48)
_:
self.char = char2
return { "_index": 1, "c": { "_index": 1, "f": n / _exp } }
_:
self.char = char2
return { "_index": 8 }
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
var n: float = (char2 - 48) * 1.0
var _exp: float = 0.
while (true):
var tempRight6
if true:
var s: String = self.input
var tempNumber6
if true:
self.readPos += 1
tempNumber6 = self.readPos - 1
var index: int = tempNumber6
tempRight6 = s.unicode_at.call(index)
char2 = tempRight6
_exp *= 10
match (char2):
46:
if (_exp > 0):
var tempLeft
if true:
var s: String = self.input
var tempNumber7
if true:
self.readPos += 1
tempNumber7 = self.readPos - 1
var index: int = tempNumber7
tempLeft = s.unicode_at.call(index)
if (_exp == 10 && tempLeft == 46):
if true:
var tk: Variant = { "_index": 3, "s": "..." }
if true:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
var i: int = int(n)
var tempConst
if (i == n):
tempConst = { "_index": 0, "v": i }
else:
tempConst = { "_index": 1, "f": n }
return { "_index": 1, "c": tempConst }
self.invalidChar(char2)
_exp = 1.
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
n = n * 10 + (char2 - 48)
69, 101:
var tk = self.token()
var _pow = null
if (tk == null):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
match (tk._index):
1:
var _g: Variant = tk.c
if (_g._index == 0):
var _g2: int = _g.v
if true:
var e: int = _g2
_pow = e
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
3:
var _g: String = tk.s
if (_g == "-"):
tk = self.token()
if (tk == null):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
if (tk._index == 1):
var _g2: Variant = tk.c
if (_g2._index == 0):
var _g3: int = _g2.v
if true:
var e: int = _g3
_pow = -e
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
else:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
_:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
if (_pow == null):
self.invalidChar(char2)
return { "_index": 1, "c": { "_index": 1, "f": pow(10, _pow) / _exp * n * 10 } }
120:
if (n > 0 || _exp > 0):
self.invalidChar(char2)
var n2: int = 0
while (true):
var tempRight7
if true:
var s: String = self.input
var tempNumber8
if true:
self.readPos += 1
tempNumber8 = self.readPos - 1
var index: int = tempNumber8
tempRight7 = s.unicode_at.call(index)
char2 = tempRight7
match (char2):
48, 49, 50, 51, 52, 53, 54, 55, 56, 57:
n2 = (n2 << 4) + char2 - 48
65, 66, 67, 68, 69, 70:
n2 = (n2 << 4) + (char2 - 55)
97, 98, 99, 100, 101, 102:
n2 = (n2 << 4) + (char2 - 87)
_:
self.char = char2
return { "_index": 1, "c": { "_index": 0, "v": n2 } }
_:
self.char = char2
var i: int = int(n)
var tempConst1
if (_exp > 0):
tempConst1 = { "_index": 1, "f": n * 10 / _exp }
else:
if (i == n):
tempConst1 = { "_index": 0, "v": i }
else:
tempConst1 = { "_index": 1, "f": n }
return { "_index": 1, "c": tempConst1 }
58:
return { "_index": 14 }
59:
return { "_index": 10 }
61:
var tempRight8
if true:
var s: String = self.input
var tempNumber9
if true:
self.readPos += 1
tempNumber9 = self.readPos - 1
var index: int = tempNumber9
tempRight8 = s.unicode_at.call(index)
char2 = tempRight8
if (char2 == 61):
return { "_index": 3, "s": "==" }
else:
if (char2 == 62):
return { "_index": 3, "s": "=>" }
self.char = char2
return { "_index": 3, "s": "=" }
63:
return { "_index": 13 }
64:
var tempRight9
if true:
var s: String = self.input
var tempNumber10
if true:
self.readPos += 1
tempNumber10 = self.readPos - 1
var index: int = tempNumber10
tempRight9 = s.unicode_at.call(index)
char2 = tempRight9
if (self.idents[char2] || char2 == 58):
var id: String = char(char2)
while (true):
var tempRight10
if true:
var s: String = self.input
var tempNumber11
if true:
self.readPos += 1
tempNumber11 = self.readPos - 1
var index: int = tempNumber11
tempRight10 = s.unicode_at.call(index)
char2 = tempRight10
if (!self.idents[char2]):
self.char = char2
return { "_index": 15, "s": id }
id += char(char2)
self.invalidChar(char2)
91:
return { "_index": 11 }
93:
return { "_index": 12 }
123:
return { "_index": 6 }
125:
return { "_index": 7 }
_:
if (self.ops[char2]):
var op: String = char(char2)
while (true):
var tempRight11
if true:
var s: String = self.input
var tempNumber12
if true:
self.readPos += 1
tempNumber12 = self.readPos - 1
var index: int = tempNumber12
tempRight11 = s.unicode_at.call(index)
char2 = tempRight11
if (!self.ops[char2]):
self.char = char2
return { "_index": 3, "s": op }
var pop: String = op
op += char(char2)
var tempBool
if true:
var this1: Variant = self.opPriority
tempBool = this1.exists(op)
var tempRight12
if true:
var this1: Variant = self.opPriority
tempRight12 = this1.exists(pop)
if (!tempBool && tempRight12):
if (op == "//" || op == "/*"):
return self.tokenComment(op, char2)
self.char = char2
return { "_index": 3, "s": pop }
if (self.idents[char2]):
var id: String = char(char2)
while (true):
var tempRight13
if true:
var s: String = self.input
var tempNumber13
if true:
self.readPos += 1
tempNumber13 = self.readPos - 1
var index: int = tempNumber13
tempRight13 = s.unicode_at.call(index)
char2 = tempRight13
if (!self.idents[char2]):
self.char = char2
return { "_index": 2, "s": id }
id += char(char2)
self.invalidChar(char2)
var tempRight14
if true:
var s: String = self.input
var tempNumber14
if true:
self.readPos += 1
tempNumber14 = self.readPos - 1
var index: int = tempNumber14
tempRight14 = s.unicode_at.call(index)
char2 = tempRight14
return null
func preprocValue(id: String):
var this1: Variant = self.preprocesorValues
var tempResult = this1.__get(id)
return tempResult
func parsePreproCond() -> Variant:
var tk = self.token()
var tempResult
if (tk == null):
tempResult = self.unexpected(tk)
else:
match (tk._index):
2:
var _g: String = tk.s
var id: String = _g
tempResult = { "_index": 1, "v": id }
3:
var _g: String = tk.s
if (_g == "!"):
var e: Variant = { "_index": 7, "op": "!", "prefix": true, "e": self.parsePreproCond() }
tempResult = e
else:
tempResult = self.unexpected(tk)
4:
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new({ "_index": 4 }, _this.head)
tempResult = self.parseExpr()
_:
tempResult = self.unexpected(tk)
return tempResult
func evalPreproCond(e: Variant) -> bool:
match (e._index):
1:
var _g: String = e.v
var id: String = _g
return self.preprocValue(id) != null
3:
var _g: Variant = e.e
if true:
var e2: Variant = _g
return self.evalPreproCond(e2)
6:
var _g: String = e.op
var _g1: Variant = e.e1
var _g2: Variant = e.e2
match (_g):
"&&":
var e1: Variant = _g1
var e2: Variant = _g2
return self.evalPreproCond(e1) && self.evalPreproCond(e2)
"||":
var e1: Variant = _g1
var e2: Variant = _g2
return self.evalPreproCond(e1) || self.evalPreproCond(e2)
_:
if true:
var err: Variant = { "_index": 4, "msg": "Can't eval " + Type.enumConstructor(e) }
var pmin: int = self.readPos
var pmax: int = self.readPos
if (!self.resumeErrors):
assert(false, str(err))
return false
7:
var _g: String = e.op
var _g1: bool = e.prefix
var _g2: Variant = e.e
if (_g == "!"):
var e2: Variant = _g2
return !self.evalPreproCond(e2)
else:
if true:
var err: Variant = { "_index": 4, "msg": "Can't eval " + Type.enumConstructor(e) }
var pmin: int = self.readPos
var pmax: int = self.readPos
if (!self.resumeErrors):
assert(false, str(err))
return false
_:
if true:
var err: Variant = { "_index": 4, "msg": "Can't eval " + Type.enumConstructor(e) }
var pmin: int = self.readPos
var pmax: int = self.readPos
if (!self.resumeErrors):
assert(false, str(err))
return false
return false
func preprocess(id: String) -> Variant:
match (id):
"else", "elseif":
if (self.preprocStack.size() > 0):
if (self.preprocStack[self.preprocStack.size() - 1].get("r")):
self.preprocStack[self.preprocStack.size() - 1].set("r", false)
self.skipTokens()
return self.token()
else:
if (id == "else"):
self.preprocStack.pop_back()
self.preprocStack.push_back({
"r": true
})
return self.token()
else:
self.preprocStack.pop_back()
return self.preprocess("if")
else:
return { "_index": 16, "s": id }
"end":
if (self.preprocStack.size() > 0):
self.preprocStack.pop_back()
return self.token()
else:
return { "_index": 16, "s": id }
"if":
var e: Variant = self.parsePreproCond()
if (self.evalPreproCond(e)):
self.preprocStack.push_back({
"r": true
})
return self.token()
self.preprocStack.push_back({
"r": false
})
self.skipTokens()
return self.token()
_:
return { "_index": 16, "s": id }
func skipTokens() -> void:
var spos: int = self.preprocStack.size() - 1
var obj: Variant = self.preprocStack[spos]
var pos: int = self.readPos
while (true):
var tk = self.token()
if (tk == { "_index": 0 }):
if (!self.resumeErrors):
assert(false, str({ "_index": 4, "msg": "Unclosed" }))
if (self.preprocStack[spos] != obj):
var _this: haxe_ds_GenericStack = self.tokens
_this.head = haxe_ds_GenericCell.new(tk, _this.head)
break
func tokenComment(op: String, char2: int):
var tempMaybeNumber
if (1 < op.length()):
tempMaybeNumber = op.unicode_at(1)
else:
tempMaybeNumber = null
var c = tempMaybeNumber
var s: String = self.input
if (c == 47):
while (char2 != 13 && char2 != 10):
var tempRight
if true:
var s2: String = self.input
var tempNumber
if true:
self.readPos += 1
tempNumber = self.readPos - 1
var index: int = tempNumber
tempRight = s2.unicode_at.call(index)
char2 = tempRight
self.char = char2
return self.token()
if (c == 42):
var old: int = self.line
if (op == "/**/"):
self.char = char2
return self.token()
while (true):
while (char2 != 42):
if (char2 == 10):
self.line += 1
var tempRight1
if true:
var s2: String = self.input
var tempNumber1
if true:
self.readPos += 1
tempNumber1 = self.readPos - 1
var index: int = tempNumber1
tempRight1 = s2.unicode_at.call(index)
char2 = tempRight1
var tempRight2
if true:
var s2: String = self.input
var tempNumber2
if true:
self.readPos += 1
tempNumber2 = self.readPos - 1
var index: int = tempNumber2
tempRight2 = s2.unicode_at.call(index)
char2 = tempRight2
if (char2 == 47):
break
return self.token()
self.char = char2
return { "_index": 3, "s": op }
func constString(c: Variant) -> String:
var tempResult
match (c._index):
0:
var _g: int = c.v
var v: int = _g
tempResult = str(v)
1:
var _g: float = c.f
var f: float = _g
tempResult = str(f)
2:
var _g: String = c.s
var s: String = _g
tempResult = s
return tempResult
func tokenString(t: Variant) -> String:
var tempResult
match (t._index):
0:
tempResult = "<eof>"
1:
var _g: Variant = t.c
var c: Variant = _g
tempResult = self.constString(c)
2:
var _g: String = t.s
if true:
var s: String = _g
tempResult = s
3:
var _g: String = t.s
if true:
var s: String = _g
tempResult = s
4:
tempResult = "("
5:
tempResult = ")"
6:
tempResult = "{"
7:
tempResult = "}"
8:
tempResult = "."
9:
tempResult = ","
10:
tempResult = ";"
11:
tempResult = "["
12:
tempResult = "]"
13:
tempResult = "?"
14:
tempResult = ":"
15:
var _g: String = t.s
if true:
var id: String = _g
tempResult = "@" + id
16:
var _g: String = t.s
if true:
var id: String = _g
tempResult = "#" + id
return tempResult