Skip to content

Commit 59c338d

Browse files
committed
refactor: simplify LVal.stringRep
1 parent afc5232 commit 59c338d

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

rt/src/base/LVal.mts

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,34 +54,30 @@ export class LVal implements RawValue {
5454
}
5555

5656
stringRep(omitLevels?: boolean, taintRef?: any) {
57-
let v = this.val;
58-
let l = this.lev;
59-
let t = "";
60-
if (v.stringRep != undefined) { // 2018-05-17; AA; ugly hack!
61-
t = v.stringRep(omitLevels, taintRef);
62-
} else {
63-
if (typeof v === 'string') {
64-
t = `"${v.toString()}"`;
65-
} else {
66-
t = v.toString();
67-
}
68-
}
69-
70-
if (l.stringRep == undefined) {
71-
console.log("undefined stringrep", l);
72-
}
73-
74-
let s = t;
75-
76-
if (!omitLevels) {
77-
s = s + "@" + l.stringRep() + "%" + this.tlev.stringRep();
78-
}
79-
80-
if (taintRef) {
81-
taintRef.lev = levels.lub(taintRef.lev, l);
82-
}
83-
84-
return s;
57+
let output = "";
58+
59+
// HACK (AA; 2018-05-17): Branch on JavaScript builtins based on the
60+
// existence of `stringRep`.
61+
//
62+
// TODO (SS; 2025-12-05): We can simplify the stuff below to
63+
// `v.toString(omitLevels, taintRef)`; JavaScript
64+
// supports calling functions with more arguments
65+
// than it was defined with.
66+
if (this.val.stringRep != undefined) {
67+
output = this.val.stringRep(omitLevels, taintRef);
68+
} else if (typeof this.val === 'string') {
69+
output = `"${this.val.toString()}"`;
70+
} else {
71+
output = this.val.toString();
72+
}
73+
74+
if (taintRef) {
75+
taintRef.lev = levels.lub(taintRef.lev, this.lev);
76+
}
77+
78+
return omitLevels
79+
? output
80+
: `${output}@${this.lev.stringRep()}%${this.tlev.stringRep()}`;
8581
}
8682
}
8783

0 commit comments

Comments
 (0)