rm push/pop

This commit is contained in:
2026-02-26 08:13:18 -06:00
parent eb19b18594
commit a1b41d5ecf
59 changed files with 19546 additions and 19265 deletions

View File

@@ -90,12 +90,12 @@ var parse = function(tokens, src, filename, tokenizer) {
var parse_error = function(token, msg) {
if (error_count >= 5) return null
error_count = error_count + 1
push(errors, {
errors[] = {
message: msg,
line: token.from_row + 1,
column: token.from_column + 1,
offset: token.at
})
}
}
var _keywords = {
@@ -230,8 +230,8 @@ var parse = function(tokens, src, filename, tokenizer) {
if (tv[tvi] == "\\" && tvi + 1 < tvlen) {
esc_ch = tv[tvi + 1]
esc_val = template_escape_map[esc_ch]
if (esc_val != null) { push(fmt_parts, esc_val) }
else { push(fmt_parts, esc_ch) }
if (esc_val != null) { fmt_parts[] = esc_val }
else { fmt_parts[] = esc_ch }
tvi = tvi + 2
} else if (tv[tvi] == "$" && tvi + 1 < tvlen && tv[tvi + 1] == "{") {
tvi = tvi + 2
@@ -239,27 +239,27 @@ var parse = function(tokens, src, filename, tokenizer) {
expr_parts = []
while (tvi < tvlen && depth > 0) {
tc = tv[tvi]
if (tc == "{") { depth = depth + 1; push(expr_parts, tc); tvi = tvi + 1 }
if (tc == "{") { depth = depth + 1; expr_parts[] = tc; tvi = tvi + 1 }
else if (tc == "}") {
depth = depth - 1
if (depth > 0) { push(expr_parts, tc) }
if (depth > 0) { expr_parts[] = tc }
tvi = tvi + 1
}
else if (tc == "'" || tc == "\"" || tc == "`") {
tq = tc
push(expr_parts, tc)
expr_parts[] = tc
tvi = tvi + 1
while (tvi < tvlen && tv[tvi] != tq) {
if (tv[tvi] == "\\" && tvi + 1 < tvlen) {
push(expr_parts, tv[tvi])
expr_parts[] = tv[tvi]
tvi = tvi + 1
}
push(expr_parts, tv[tvi])
expr_parts[] = tv[tvi]
tvi = tvi + 1
}
if (tvi < tvlen) { push(expr_parts, tv[tvi]); tvi = tvi + 1 }
if (tvi < tvlen) { expr_parts[] = tv[tvi]; tvi = tvi + 1 }
} else {
push(expr_parts, tc)
expr_parts[] = tc
tvi = tvi + 1
}
}
@@ -274,14 +274,14 @@ var parse = function(tokens, src, filename, tokenizer) {
} else {
sub_expr = sub_stmt
}
push(tpl_list, sub_expr)
tpl_list[] = sub_expr
}
push(fmt_parts, "{")
push(fmt_parts, text(idx))
push(fmt_parts, "}")
fmt_parts[] = "{"
fmt_parts[] = text(idx)
fmt_parts[] = "}"
idx = idx + 1
} else {
push(fmt_parts, tv[tvi])
fmt_parts[] = tv[tvi]
tvi = tvi + 1
}
}
@@ -332,7 +332,7 @@ var parse = function(tokens, src, filename, tokenizer) {
advance()
while (tok.kind != "]" && tok.kind != "eof") {
elem = parse_assign_expr()
if (elem != null) push(list, elem)
if (elem != null) list[] = elem
if (tok.kind == ",") advance()
else break
}
@@ -395,7 +395,7 @@ var parse = function(tokens, src, filename, tokenizer) {
advance()
param.expression = parse_assign_expr()
}
push(params, param)
params[] = param
} else {
parse_error(tok, "expected parameter name")
break
@@ -436,7 +436,7 @@ var parse = function(tokens, src, filename, tokenizer) {
} else {
parse_error(tok, "expected ':' after property name")
}
push(list, pair)
list[] = pair
if (tok.kind == ",") advance()
else if (tok.kind == "{") {
if (right && right.kind == "(") {
@@ -473,17 +473,17 @@ var parse = function(tokens, src, filename, tokenizer) {
flags_parts = []
while (rpos < _src_len && src[rpos] != "/") {
if (src[rpos] == "\\" && rpos + 1 < _src_len) {
push(pattern_parts, src[rpos])
push(pattern_parts, src[rpos + 1])
pattern_parts[] = src[rpos]
pattern_parts[] = src[rpos + 1]
rpos = rpos + 2
} else {
push(pattern_parts, src[rpos])
pattern_parts[] = src[rpos]
rpos = rpos + 1
}
}
if (rpos < _src_len) rpos = rpos + 1
while (rpos < _src_len && is_letter(src[rpos])) {
push(flags_parts, src[rpos])
flags_parts[] = src[rpos]
rpos = rpos + 1
}
node.pattern = text(pattern_parts)
@@ -557,7 +557,7 @@ var parse = function(tokens, src, filename, tokenizer) {
new_node.list = args_list
while (tok.kind != ")" && tok.kind != "eof") {
arg = parse_assign_expr()
if (arg != null) push(args_list, arg)
if (arg != null) args_list[] = arg
if (tok.kind == ",") advance()
else break
}
@@ -830,7 +830,7 @@ var parse = function(tokens, src, filename, tokenizer) {
before = cursor
stmt = parse_statement()
if (stmt != null) {
push(stmts, stmt)
stmts[] = stmt
} else if (cursor == before) {
sync_to_statement()
}
@@ -872,14 +872,14 @@ var parse = function(tokens, src, filename, tokenizer) {
param.name = tok.value
pname = tok.value
if (find(prev_names, pname) != null) parse_error(tok, "duplicate parameter name '" + pname + "'")
push(prev_names, pname)
prev_names[] = pname
advance()
ast_node_end(param)
if (tok.kind == "=" || tok.kind == "|") {
advance()
param.expression = parse_assign_expr()
}
push(params, param)
params[] = param
} else {
parse_error(tok, "expected parameter name")
break
@@ -959,7 +959,7 @@ var parse = function(tokens, src, filename, tokenizer) {
param.name = tok.value
advance()
ast_node_end(param)
push(params, param)
params[] = param
} else if (tok.kind == "(") {
advance()
prev_names = []
@@ -969,14 +969,14 @@ var parse = function(tokens, src, filename, tokenizer) {
param.name = tok.value
pname = tok.value
if (find(prev_names, pname) != null) parse_error(tok, "duplicate parameter name '" + pname + "'")
push(prev_names, pname)
prev_names[] = pname
advance()
ast_node_end(param)
if (tok.kind == "=" || tok.kind == "|") {
advance()
param.expression = parse_assign_expr()
}
push(params, param)
params[] = param
} else {
parse_error(tok, "expected parameter name")
break
@@ -1010,7 +1010,7 @@ var parse = function(tokens, src, filename, tokenizer) {
expr = parse_assign_expr()
ret.expression = expr
ast_node_end(ret)
push(stmts, ret)
stmts[] = ret
node.statements = stmts
}
@@ -1110,7 +1110,7 @@ var parse = function(tokens, src, filename, tokenizer) {
parse_error(start, "'var' declarations must be initialized; use 'var " + var_name + " = null' if no value is needed")
}
ast_node_end(node)
push(decls, node)
decls[] = node
decl_count = decl_count + 1
if (tok.kind == ",") advance()
else break
@@ -1142,7 +1142,7 @@ var parse = function(tokens, src, filename, tokenizer) {
_control_depth = _control_depth + 1
_expecting_body = true
body = parse_statement()
if (body != null) push(then_stmts, body)
if (body != null) then_stmts[] = body
else_ifs = []
node.list = else_ifs
if (tok.kind == "else") {
@@ -1151,7 +1151,7 @@ var parse = function(tokens, src, filename, tokenizer) {
_control_depth = saved_cd
_control_type = saved_ct
elif = parse_statement()
if (elif != null) push(else_ifs, elif)
if (elif != null) else_ifs[] = elif
ast_node_end(node)
return node
} else {
@@ -1159,7 +1159,7 @@ var parse = function(tokens, src, filename, tokenizer) {
node.else = else_stmts
_expecting_body = true
body = parse_statement()
if (body != null) push(else_stmts, body)
if (body != null) else_stmts[] = body
}
}
_control_depth = saved_cd
@@ -1185,7 +1185,7 @@ var parse = function(tokens, src, filename, tokenizer) {
_control_depth = _control_depth + 1
_expecting_body = true
body = parse_statement()
if (body != null) push(stmts, body)
if (body != null) stmts[] = body
_control_depth = saved_cd
_control_type = saved_ct
ast_node_end(node)
@@ -1203,7 +1203,7 @@ var parse = function(tokens, src, filename, tokenizer) {
_control_depth = _control_depth + 1
_expecting_body = true
body = parse_statement()
if (body != null) push(stmts, body)
if (body != null) stmts[] = body
_control_depth = saved_cd
_control_type = saved_ct
if (tok.kind == "while") advance()
@@ -1256,7 +1256,7 @@ var parse = function(tokens, src, filename, tokenizer) {
_control_depth = _control_depth + 1
_expecting_body = true
body = parse_statement()
if (body != null) push(stmts, body)
if (body != null) stmts[] = body
_control_depth = saved_cd
_control_type = saved_ct
ast_node_end(node)
@@ -1402,9 +1402,9 @@ var parse = function(tokens, src, filename, tokenizer) {
stmt = parse_statement()
if (stmt != null) {
if (stmt.kind == "function") {
push(functions, stmt)
functions[] = stmt
} else {
push(statements, stmt)
statements[] = stmt
}
} else if (cursor == before) {
sync_to_statement()
@@ -1426,7 +1426,7 @@ var parse = function(tokens, src, filename, tokenizer) {
var err = {message: msg}
if (node.from_row != null) err.line = node.from_row + 1
if (node.from_column != null) err.column = node.from_column + 1
push(sem_errors, err)
sem_errors[] = err
}
var make_scope = function(parent, fn_nr, opts) {
@@ -1452,7 +1452,7 @@ var parse = function(tokens, src, filename, tokenizer) {
}
if (make_opts.reached == false) entry.reached = false
if (make_opts.decl_line != null) entry.decl_line = make_opts.decl_line
push(scope.vars, entry)
scope.vars[] = entry
}
var sem_lookup_var = function(scope, name) {
@@ -1503,7 +1503,7 @@ var parse = function(tokens, src, filename, tokenizer) {
}
var sem_add_intrinsic = function(name) {
if (find(intrinsics, name) == null) push(intrinsics, name)
if (find(intrinsics, name) == null) intrinsics[] = name
}
var functino_names = {
@@ -1828,7 +1828,7 @@ var parse = function(tokens, src, filename, tokenizer) {
}
}
sr = sem_build_scope_record(fn_scope)
push(scopes_array, sr.rec)
scopes_array[] = sr.rec
expr.nr_slots = sr.nr_slots
expr.nr_close_slots = sr.nr_close
return null
@@ -1858,9 +1858,9 @@ var parse = function(tokens, src, filename, tokenizer) {
r.v.nr_uses = r.v.nr_uses + 1
if (r.level > 0) r.v.closure = 1
if (r.v.reached == false && r.v.decl_line != null && expr.from_row != null && expr.from_row + 1 < r.v.decl_line) {
push(hoisted_fn_refs, {name: name, line: expr.from_row + 1,
hoisted_fn_refs[] = {name: name, line: expr.from_row + 1,
col: expr.from_column != null ? expr.from_column + 1 : null,
decl_line: r.v.decl_line})
decl_line: r.v.decl_line}
}
} else {
expr.level = -1
@@ -2110,7 +2110,7 @@ var parse = function(tokens, src, filename, tokenizer) {
}
}
sr = sem_build_scope_record(fn_scope)
push(scopes_array, sr.rec)
scopes_array[] = sr.rec
stmt.nr_slots = sr.nr_slots
stmt.nr_close_slots = sr.nr_close
return null
@@ -2153,7 +2153,7 @@ var parse = function(tokens, src, filename, tokenizer) {
new_scopes = [sr.rec]
i = 0
while (i < length(scopes_array)) {
push(new_scopes, scopes_array[i])
new_scopes[] = scopes_array[i]
i = i + 1
}
scopes_array = new_scopes
@@ -2183,7 +2183,7 @@ var parse = function(tokens, src, filename, tokenizer) {
if (ast.errors != null) {
_mi = 0
while (_mi < length(errors)) {
push(ast.errors, errors[_mi])
ast.errors[] = errors[_mi]
_mi = _mi + 1
}
} else {