diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2012-12-26 21:34:55 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2012-12-26 21:34:55 +0200 |
commit | 6cfd7d65d96ec3c5d6b85fd579240333ad343fc0 (patch) | |
tree | c986693d4c9d4a574e540a17b51c8140c58c330f /parser.py | |
parent | cfad3eb37147c3cbe36f53bca54ebb6f10b4c1ce (diff) | |
download | meson-6cfd7d65d96ec3c5d6b85fd579240333ad343fc0.zip meson-6cfd7d65d96ec3c5d6b85fd579240333ad343fc0.tar.gz meson-6cfd7d65d96ec3c5d6b85fd579240333ad343fc0.tar.bz2 |
Track line numbers in AST nodes.
Diffstat (limited to 'parser.py')
-rwxr-xr-x | parser.py | 19 |
1 files changed, 9 insertions, 10 deletions
@@ -76,29 +76,29 @@ def p_codeblock(t): def p_codeblock_last(t): 'codeblock : statement EOL' - cb = nodes.CodeBlock() + cb = nodes.CodeBlock(t.lineno(1)) cb.prepend(t[1]) t[0] = cb def p_expression_atom(t): 'expression : ATOM' - t[0] = nodes.AtomExpression(t[1]) + t[0] = nodes.AtomExpression(t[1], t.lineno(1)) def p_expression_string(t): 'expression : STRING' - t[0] = nodes.StringExpression(t[1]) + t[0] = nodes.StringExpression(t[1], t.lineno(1)) def p_statement_assign(t): 'statement : expression EQUALS statement' - t[0] = nodes.Assignment(t[1], t[3]) + t[0] = nodes.Assignment(t[1], t[3], t.lineno(1)) def p_statement_func_call(t): 'statement : expression LPAREN args RPAREN' - t[0] = nodes.FunctionCall(t[1], t[3]) + t[0] = nodes.FunctionCall(t[1], t[3], t.lineno(1)) def p_statement_method_call(t): 'statement : expression DOT expression LPAREN args RPAREN' - t[0] = nodes.MethodCall(t[1], t[3], t[5]) + t[0] = nodes.MethodCall(t[1], t[3], t[5], t.lineno(1)) def p_statement_expression(t): 'statement : expression' @@ -112,13 +112,13 @@ def p_args_multiple(t): def p_args_single(t): 'args : statement' - args = nodes.Arguments() + args = nodes.Arguments(t.lineno(1)) args.prepend(t[1]) t[0] = args def p_args_none(t): 'args :' - t[0] = nodes.Arguments() + t[0] = nodes.Arguments(t.lineno(0)) def p_error(t): print('Parser errored out at: ' + t.value) @@ -141,8 +141,7 @@ def test_lexer(): def test_parser(): code = """func_call('something', 'or else') objectname.methodname(abc) - emptycall() - """ + emptycall()""" print(build_ast(code)) def build_ast(code): |