@@ -52,13 +52,13 @@ public fn void Parser.destroy(Parser* p) {
5252public fn bool Parser.parse(Parser* p, const char* input) {
5353 p.tokenizer.init(input, &p.data, p.message);
5454
55- p.token.kind = TokenKind. None;
55+ p.token.kind = None;
5656
5757 i32 res = setjmp(&p.jmp_err);
5858 if (res == 0) {
5959 p.consumeToken();
6060
61- while (p.token.kind != TokenKind. Eof) p.parse_doc();
61+ while (p.token.kind != Eof) p.parse_doc();
6262 } else {
6363 // got error, error_msg should be set
6464 return false;
@@ -75,18 +75,20 @@ fn void Parser.error(Parser* p, const char* format @(printf_format), ...) {
7575 va_list args;
7676 va_start(args, format);
7777 char* cp = p.message;
78- cp + = vsnprintf(cp, MaxDiag-1 , format, args);
78+ i32 len = vsnprintf(cp, MaxDiag, format, args);
7979 va_end(args);
80- sprintf(cp, " %s", p.token.loc.str());
80+ if ((u32)len < MaxDiag) {
81+ snprintf(cp + len, MaxDiag - len, "at line %d:%d", p.token.loc.line, p.token.loc.column);
82+ }
8183 longjmp(&p.jmp_err, 1);
8284}
8385
8486fn void Parser.consumeToken(Parser* p) {
8587 p.tokenizer.lex(&p.token);
8688#if YamlPrintToken
87- printf("%s %s %d\n", p.token.str(), p.token.loc.str() , p.token.same_line);
89+ printf("%s pos %d:%d %d\n", p.token.str(), p.token.loc.line, p.token.loc.column , p.token.same_line);
8890#endif
89- if (p.token.kind == TokenKind. Error) longjmp(&p.jmp_err, 1);
91+ if (p.token.kind == Error) longjmp(&p.jmp_err, 1);
9092}
9193
9294fn void Parser.expectAndConsume(Parser* p, TokenKind kind) {
@@ -130,16 +132,16 @@ fn void Parser.parse_node(Parser* p) {
130132 case Plain_Scalar:
131133 case Single_Quoted_Scalar:
132134 case Double_Quoted_Scalar:
133- Node* n = p.data.add_node(NodeKind. Unknown, p.token.text_idx);
134- p.push_node(n, NodeKind. Unknown, p.cur_indent);
135+ Node* n = p.data.add_node(Unknown, p.token.text_idx);
136+ p.push_node(n, Unknown, p.cur_indent);
135137 p.consumeToken();
136- p.expectAndConsume(TokenKind. Colon);
138+ p.expectAndConsume(Colon);
137139 p.parse_value();
138140 break;
139141 case Dash:
140142 p.consumeToken();
141- Node* n = p.data.add_node(NodeKind. Unknown, 0);
142- p.push_node(n, NodeKind. Sequence, p.cur_indent + 1);
143+ Node* n = p.data.add_node(Unknown, 0);
144+ p.push_node(n, Sequence, p.cur_indent + 1);
143145 p.parse_node_or_value();
144146 break;
145147 case Indent:
@@ -175,8 +177,8 @@ fn void Parser.parse_value(Parser* p) {
175177 return;
176178 case Dash:
177179 p.consumeToken();
178- Node* n = p.data.add_node(NodeKind. Unknown, 0);
179- p.push_node(n, NodeKind. Sequence, p.cur_indent + 1);
180+ Node* n = p.data.add_node(Unknown, 0);
181+ p.push_node(n, Sequence, p.cur_indent + 1);
180182 p.parse_node_or_value();
181183 return;
182184 case Indent:
@@ -208,7 +210,7 @@ fn void Parser.parse_node_or_value(Parser* p) {
208210 case Single_Quoted_Scalar:
209211 case Double_Quoted_Scalar:
210212 Token* next = p.tokenizer.lex_next();
211- if (next.kind == TokenKind. Colon) {
213+ if (next.kind == Colon) {
212214 // NOTE: this doesn't work, because tokenizer doesn't know (and doesn't give DEDENT)
213215 p.cur_indent += 2; // one for dash, one for node
214216 // TEMP DIRTY HACK, how to do properly?
@@ -231,8 +233,8 @@ fn void Parser.doc_start(Parser* p) {
231233
232234fn void Parser.doc_end(Parser* p) {
233235 p.cur_indent = -1;
234- if (p.stack_size == 1 && p.stack[0].node.kind == NodeKind. Unknown) {
235- p.stack[0].node.kind = NodeKind. Map;
236+ if (p.stack_size == 1 && p.stack[0].node.kind == Unknown) {
237+ p.stack[0].node.kind = Map;
236238 }
237239 p.pop();
238240 p.cur_indent = 0;
@@ -242,11 +244,11 @@ fn void Parser.doc_end(Parser* p) {
242244fn void Parser.add_scalar_value(Parser* p, u32 value_idx) {
243245 StackLevel* top = &p.stack[p.stack_size-1];
244246 Node* n = top.node;
245- if (n.kind != NodeKind. Unknown) {
247+ if (n.kind != Unknown) {
246248 //p.error("%s() cannot add scalar to node", __func__);
247249 p.error("%s() cannot add scalar to node", "add_scalar_value");
248250 }
249- n.kind = NodeKind. Scalar;
251+ n.kind = Scalar;
250252 n.text_idx = value_idx;
251253}
252254
@@ -260,7 +262,7 @@ fn void Parser.pop(Parser* p) {
260262 StackLevel* prev = &p.stack[p.stack_size-2];
261263 prev.last_child = top.node;
262264 }
263- if (top.node.kind == NodeKind. Unknown) top.node.kind = NodeKind. Scalar;
265+ if (top.node.kind == Unknown) top.node.kind = Scalar;
264266
265267 top.indent = 0;
266268 top.node = nil;
@@ -270,7 +272,7 @@ fn void Parser.pop(Parser* p) {
270272}
271273
272274fn void Parser.push_root(Parser* p) {
273- Node* root = p.data.add_node(NodeKind. Unknown, 0);
275+ Node* root = p.data.add_node(Unknown, 0);
274276 StackLevel* top = &p.stack[0];
275277 if (p.stack_size) {
276278 top.node.next_idx = p.data.node2idx(root);
@@ -295,7 +297,7 @@ fn void Parser.push_node(Parser* p, Node* n, NodeKind parent_kind, i32 indent) {
295297 if (top.indent == indent) { // same level
296298 if (top.node) {
297299 // close old node as SCALAR with empty data
298- if (top.node.kind == NodeKind. Unknown) top.node.kind = NodeKind. Scalar;
300+ if (top.node.kind == Unknown) top.node.kind = Scalar;
299301 top.node.next_idx = n_idx;
300302 }
301303 top.last_child = nil;
@@ -304,9 +306,9 @@ fn void Parser.push_node(Parser* p, Node* n, NodeKind parent_kind, i32 indent) {
304306 assert(indent > top.indent);
305307 Node* parent = top.node;
306308
307- if (parent.kind == NodeKind. Unknown) {
309+ if (parent.kind == Unknown) {
308310 // just assign it
309- if (parent_kind == NodeKind. Unknown) parent_kind = NodeKind. Map;
311+ if (parent_kind == Unknown) parent_kind = Map;
310312 parent.kind = parent_kind;
311313 }
312314 if (top.last_child) {
@@ -326,9 +328,8 @@ fn void Parser.push_node(Parser* p, Node* n, NodeKind parent_kind, i32 indent) {
326328 StackLevel* prev = &p.stack[p.stack_size-2];
327329 Node* parent = prev.node;
328330
329- if (parent.kind != parent_kind
330- && !(parent.kind == NodeKind.Map && parent_kind == NodeKind.Unknown)) {
331- if (parent.kind == NodeKind.Sequence) {
331+ if (parent.kind != parent_kind && !(parent.kind == Map && parent_kind == Unknown)) {
332+ if (parent.kind == Sequence) {
332333 p.error("invalid scalar after sequence");
333334 } else {
334335 p.error("invalid scalar after %s", node_names[parent.kind]);
0 commit comments