private void ResolveExprName(ref int segment, sema.Code.Lvalue destination, syn.Node.Identifier node) { this.code.AddInstruction(segment, new sema.Code.Instruction.CopyLvalue { span = node.span, destination = destination, source = this.ResolveLvalue(ref segment, node) }); }
private sema.Code.Lvalue ResolveLvalueName(ref int segment, syn.Node.Identifier node) { var registerIndex = this.FindRegisterByName(node.token.excerpt); if (registerIndex >= 0) { return new sema.Code.Lvalue.Register { span = node.span, index = registerIndex } } ; else { this.reporter.Error("unknown `" + node.token.excerpt + "`", new diagn.Caret(node.span)); return(new sema.Code.Lvalue.Error { span = node.span }); } }
private static void TryResolveIdentifier(Context ctx, diagn.Reporter reporter, mod.Unit unit, syn.Node.Identifier node) { if (node == null) { return; } if (unit.semanticMap.references.ContainsKey(node)) { return; } var identifier = node.token.excerpt; var hNamespaceNode = ctx.names.Find(identifier); if (hNamespaceNode != null) { unit.semanticMap.references[node] = hNamespaceNode; } }