rm push/pop
This commit is contained in:
98
parse.cm
98
parse.cm
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user