public override int VisitVar_node(BRAQParser.Var_nodeContext context) { if (TryResolve(context.id_name, out var var_definition_point)) { if (!assigned[var_definition_point]) { string msg = $"using unassigned variable {context.id_name.Text}"; Console.WriteLine(msg); throw new TypesolvingError(); } declaration[context.id_name] = var_definition_point; } else if (TryResolveAsArg(context.id_name, out var argumentDefinition)) { token_to_argument[context.id_name] = argumentDefinition; } else if (PredefsHelper.ResolveType(context.id_name.Text, imported_types) != null) { } else { Console.WriteLine($"unknown variable {context.id_name.Text} [Line {context.id_name.Line}]"); throw new UnknownVariableException(); } return(0); }
public override Type VisitVar_node(BRAQParser.Var_nodeContext context) { if (var_to_local_def.ContainsKey(context.id_name)) { var def_point = var_to_local_def[context.id_name]; Type t = locals_type[def_point]; return(type_dict[context] = t); } try { return(type_dict[context] = result_box.argtypes[context.id_name.Text]); } catch (InvalidOperationException) { } catch (KeyNotFoundException) { } try { Type t = PredefsHelper.ResolveType(context.id_name.Text, imported_names); if (t == null) { throw new InvalidOperationException(); } return(type_dict[context] = t); } catch (InvalidOperationException) { Console.WriteLine($"unknown variable {context.id_name.Text} [Line {context.id_name.Line}]"); throw new UnknownVariableException(); } }
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); }
/// <summary> /// Visit a parse tree produced by <see cref="BRAQParser.var_node"/>. /// <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_node([NotNull] BRAQParser.Var_nodeContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="BRAQParser.var_node"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitVar_node([NotNull] BRAQParser.Var_nodeContext context) { }