better sem analysis
This commit is contained in:
36
index.cm
36
index.cm
@@ -22,6 +22,7 @@ var index_ast = function(ast, tokens, filename) {
|
||||
var references = []
|
||||
var call_sites = []
|
||||
var exports_list = []
|
||||
var intrinsic_refs = []
|
||||
var node_counter = 0
|
||||
var fn_map = {}
|
||||
var _i = 0
|
||||
@@ -147,6 +148,29 @@ var index_ast = function(ast, tokens, filename) {
|
||||
|
||||
nid = next_id()
|
||||
|
||||
// this keyword
|
||||
if (node.kind == "this") {
|
||||
references[] = {
|
||||
node_id: nid,
|
||||
name: "this",
|
||||
symbol_id: null,
|
||||
span: make_span(node),
|
||||
enclosing: enclosing,
|
||||
ref_kind: "read"
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Capture intrinsic refs with positions (intrinsics lack function_nr).
|
||||
if (node.kind == "name" && node.name != null && node.intrinsic == true) {
|
||||
intrinsic_refs[] = {
|
||||
node_id: nid,
|
||||
name: node.name,
|
||||
span: make_span(node),
|
||||
enclosing: enclosing
|
||||
}
|
||||
}
|
||||
|
||||
// Name reference — has function_nr when it's a true variable reference.
|
||||
if (node.kind == "name" && node.name != null && node.function_nr != null) {
|
||||
if (node.intrinsic != true) {
|
||||
@@ -208,6 +232,17 @@ var index_ast = function(ast, tokens, filename) {
|
||||
}
|
||||
}
|
||||
|
||||
// Capture intrinsic callee refs (e.g., print, length).
|
||||
if (node.expression != null && node.expression.kind == "name" &&
|
||||
node.expression.intrinsic == true && node.expression.name != null) {
|
||||
intrinsic_refs[] = {
|
||||
node_id: nid,
|
||||
name: node.expression.name,
|
||||
span: make_span(node.expression),
|
||||
enclosing: enclosing
|
||||
}
|
||||
}
|
||||
|
||||
// Walk callee expression (skip name — already recorded above).
|
||||
if (node.expression != null && node.expression.kind != "name") {
|
||||
walk_expr(node.expression, enclosing, false)
|
||||
@@ -596,6 +631,7 @@ var index_ast = function(ast, tokens, filename) {
|
||||
imports: imports,
|
||||
symbols: symbols,
|
||||
references: references,
|
||||
intrinsic_refs: intrinsic_refs,
|
||||
call_sites: call_sites,
|
||||
exports: exports_list,
|
||||
reverse_refs: reverse
|
||||
|
||||
Reference in New Issue
Block a user