public override Type VisitVar_stmt(BRAQParser.Var_stmtContext context) //var a (=...)? { var assigner = this.local_def_to_assignment[context]; result_box.local_defs.Add(context); Type t = assigner.Accept(this); locals_type[context] = t; return(type_dict[context] = typeof(void)); }
public override int VisitVar_node(BRAQParser.Var_nodeContext context) { if (variable_to_declaration.ContainsKey(context.id_name)) { BRAQParser.Var_stmtContext declaration_point = variable_to_declaration[context.id_name]; int var_id = Array.IndexOf(locals, declaration_point); il.Emit(OpCodes.Ldloc, var_id); return(0); } int n = current_method.arguments.IndexOf( current_method.arguments.First(x => x.a == context.id_name.Text) ); il.Emit(OpCodes.Ldarg, n); return(0); }
private bool TryResolve(IToken variable_token, out BRAQParser.Var_stmtContext definition_point) { if (local_scope.ContainsKey(variable_token.Text)) { definition_point = local_scope[variable_token.Text]; return(true); } if (outer_scope.ContainsKey(variable_token.Text)) { definition_point = outer_scope[variable_token.Text]; return(true); } /* * Console.WriteLine($"unknown variable {variable_token.Text} [Line {variable_token.Line}]"); * throw new UnknownVariableException();*/ definition_point = null; return(false); }
public override int VisitVar_stmt(BRAQParser.Var_stmtContext context) { if (context.assignee != null) { context.assignee.Accept(this); var target_token = context.id_name; var assignment_point = variable_to_declaration[target_token]; int var_id = Array.IndexOf(locals, assignment_point); if (var_id == -1) { throw new Exception(); } //Console.WriteLine(var_id); //Console.WriteLine(_varList[0]); il.Emit(OpCodes.Stloc, var_id); } return(0); }
public override int VisitVar_stmt(BRAQParser.Var_stmtContext context) { if (local_scope.ContainsKey(context.id_name.Text)) { Console.WriteLine($"redeclared local variable {context.id_name.Text} [Line {context.id_name.Line}]"); throw new RedeclaredVariableException(); } assigned[context] = false; local_scope[context.id_name.Text] = context; if (context.assignee != null) { context.assignee.Accept(this); assigned[context] = true; assigners[context] = context.assignee; } declaration[context.id_name] = context; return(0); }
/// <summary> /// Visit a parse tree produced by <see cref="BRAQParser.var_stmt"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitVar_stmt([NotNull] BRAQParser.Var_stmtContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="BRAQParser.var_stmt"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitVar_stmt([NotNull] BRAQParser.Var_stmtContext context) { }