Skip to content

Commit 036959f

Browse files
committed
Refactor: pull v: constants out into a map
1 parent 1698629 commit 036959f

1 file changed

Lines changed: 24 additions & 28 deletions

File tree

src/vimscript/expression/evaluate.ts

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,24 @@ export type VariableStore = Map<string, Variable>;
152152
export class EvaluationContext {
153153
private static globalVariables: VariableStore = new Map();
154154

155+
// Static v: variables whose values never change
156+
private static readonly vConstants: ReadonlyMap<string, Value> = new Map([
157+
['true', bool(true)],
158+
['false', bool(false)],
159+
['t_number', int(0)],
160+
['t_string', int(1)],
161+
['t_func', int(2)],
162+
['t_list', int(3)],
163+
['t_dict', int(4)],
164+
['t_float', int(5)],
165+
['t_bool', int(6)],
166+
['t_blob', int(10)],
167+
['numbermax', int(Number.MAX_SAFE_INTEGER)],
168+
['numbermin', int(Number.MIN_SAFE_INTEGER)],
169+
// NOTE: In VimScript this refers to a 64 bit integer; we have a 64 bit float because JavaScript
170+
['numbersize', int(64)],
171+
]);
172+
155173
private vimState: VimState | undefined;
156174
private localScopes: VariableStore[] = [];
157175
private errors: string[] = [];
@@ -345,35 +363,13 @@ export class EvaluationContext {
345363
// TODO: v:operator
346364
// TODO: v:register
347365
// TODO: v:statusmsg, v:warningmsg, v:errmsg
348-
if (varExpr.name === 'true') {
349-
return bool(true);
350-
} else if (varExpr.name === 'false') {
351-
return bool(false);
352-
} else if (varExpr.name === 'hlsearch') {
366+
const constant = EvaluationContext.vConstants.get(varExpr.name);
367+
if (constant !== undefined) {
368+
return constant;
369+
}
370+
371+
if (varExpr.name === 'hlsearch') {
353372
return bool(globalState.hl);
354-
} else if (varExpr.name === 't_number') {
355-
return int(0);
356-
} else if (varExpr.name === 't_string') {
357-
return int(1);
358-
} else if (varExpr.name === 't_func') {
359-
return int(2);
360-
} else if (varExpr.name === 't_list') {
361-
return int(3);
362-
} else if (varExpr.name === 't_dict') {
363-
return int(4);
364-
} else if (varExpr.name === 't_float') {
365-
return int(5);
366-
} else if (varExpr.name === 't_bool') {
367-
return int(6);
368-
} else if (varExpr.name === 't_blob') {
369-
return int(10);
370-
} else if (varExpr.name === 'numbermax') {
371-
return int(Number.MAX_SAFE_INTEGER);
372-
} else if (varExpr.name === 'numbermin') {
373-
return int(Number.MIN_SAFE_INTEGER);
374-
} else if (varExpr.name === 'numbersize') {
375-
// NOTE: In VimScript this refers to a 64 bit integer; we have a 64 bit float because JavaScript
376-
return int(64);
377373
} else if (varExpr.name === 'errors') {
378374
return list(this.errors.map(str));
379375
} else if (varExpr.name === 'searchforward') {

0 commit comments

Comments
 (0)