private Syntax.Expression ParseInitializer() { Syntax.Expression res = null; if (scan.Peek().type == Token.Type.LBRACE) { scan.Read(); res = new Syntax.Initializer(); Syntax.InitializerList init_list = null; while (true) { if ((init_list = ParseInitializerList()) != null) { ((Syntax.Initializer)res).AddInitializer(init_list); } if (scan.Peek().type != Token.Type.COMMA) { break; } scan.Read(); } CheckToken(scan.Peek(), Token.Type.RBRACE, true); } else { res = ParseAssignmentExpression(); } return(res); }
private Syntax.InitializerList ParseInitializerList() { Syntax.InitializerList res = null; while (true) { Syntax.InitializerList.Designation designation = ParseDesignation(); Syntax.Expression const_val = null; if (designation != null) { CheckToken(scan.Peek(), Token.Type.OP_ASSIGN, true); const_val = ParseInitializer(); Syntax.Object.CheckObject(const_val); } else { const_val = ParseConstExpr(); } if (const_val != null) { if (res == null) { res = new Syntax.InitializerList(); } res.AddInitializer(const_val, designation); } if (scan.Peek().type != Token.Type.COMMA || const_val == null) { break; } scan.Read(); } return(res); }
private Syntax.InitializerList ParseInitializerList() { Syntax.InitializerList res = null; while (true) { Syntax.InitializerList.Designation designation = ParseDesignation(); Syntax.Expression const_val = null; if (designation != null) { CheckToken(scan.Peek(), Token.Type.OP_ASSIGN, true); const_val = ParseInitializer(); Syntax.Object.CheckObject(const_val); } else { const_val = ParseConstExpr(); } if (const_val != null) { if (res == null) { res = new Syntax.InitializerList(); } res.AddInitializer(const_val, designation); } if (scan.Peek().type != Token.Type.COMMA || const_val == null) { break; } scan.Read(); } return res; }