Skip to content

Commit 7875165

Browse files
feat: Turtle.js.parse ( Fixes #327 )
1 parent d7281b1 commit 7875165

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

Types/Turtle.js/parse.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
function parse() {
2+
let _ = this
3+
var memberNames = []
4+
var objectPrototype = Object.getPrototypeOf(this)
5+
var propertyNames = Object.getOwnPropertyNames(this)
6+
var memberNameLookup = {}
7+
for (let memberName of propertyNames) {
8+
if (memberName == "constructor") { continue }
9+
memberNameLookup[memberName.toUpperCase(memberName)] = memberName
10+
}
11+
12+
const parsed = []
13+
14+
const unbound = []
15+
16+
nextArgument: for (let argNumber = 0 ; argNumber < arguments.length; argNumber++) {
17+
let arg = arguments[argNumber]
18+
19+
if (typeof(arg) == "string" && ! memberNameLookup[arg.toUpperCase()]) {
20+
unbound.push(arg)
21+
continue nextArgument
22+
}
23+
24+
if (typeof(arg) != "string") {
25+
unbound.push(arg)
26+
continue nextArgument
27+
}
28+
29+
let memberName = arg.toUpperCase()
30+
let memberInfo = memberNameLookup[arg.toUpperCase()]
31+
let memberArgs = []
32+
lookingForParameters: for (
33+
let memberArgIndex = argNumber + 1;
34+
memberArgIndex < arguments.length;
35+
memberArgIndex++
36+
) {
37+
let memberArg = arguments[memberArgIndex]
38+
if (typeof(memberArg) == "string" && memberNameLookup[memberArg.toUpperCase()]) {
39+
argNumber = memberArgIndex - 1
40+
break lookingForParameters
41+
}
42+
memberArgs.push(memberArg)
43+
}
44+
45+
parsed.push({
46+
method: memberNameLookup[memberName],
47+
arguments: memberArgs
48+
})
49+
}
50+
51+
return parsed
52+
}

0 commit comments

Comments
 (0)