Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
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));
 }
Exemplo n.º 5
0
 /// <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)
 {
 }