1.1 --- a/src/Parser.cpp Mon Aug 06 02:03:36 2012 -0700
1.2 +++ b/src/Parser.cpp Sat Aug 11 12:11:39 2012 -0700
1.3 @@ -641,7 +641,7 @@
1.4 if (match(TOK_NEW)) {
1.5 if (!enterScope(Scope::BLOCK))
1.6 return NULL;
1.7 - if ((decl = vars(TOK_NEW)) == NULL)
1.8 + if ((decl = vars(TOK_STOCK, TOK_NEW)) == NULL)
1.9 return NULL;
1.10 } else {
1.11 if ((decl = expressionStatement()) == NULL)
1.12 @@ -709,7 +709,7 @@
1.13 }
1.14
1.15 VariableDeclaration *
1.16 -Parser::var(TokenKind kind)
1.17 +Parser::var(TokenKind scope, TokenKind kind)
1.18 {
1.19 Local<String> tag(zone_);
1.20 if (matchName(tag.ref(), TOK_LABEL) && !tag)
1.21 @@ -732,6 +732,9 @@
1.22 if (!var)
1.23 return NULL;
1.24
1.25 + if (scope == TOK_PUBLIC)
1.26 + var->setPublic();
1.27 +
1.28 ExpressionList *postDimensions = NULL;
1.29 if (peek(TOK_LBRACKET)) {
1.30 if ((postDimensions = dimensions()) == NULL)
1.31 @@ -748,9 +751,9 @@
1.32 }
1.33
1.34 Statement *
1.35 -Parser::vars(TokenKind kind)
1.36 +Parser::vars(TokenKind scope, TokenKind kind)
1.37 {
1.38 - VariableDeclaration *decl = var(kind);
1.39 + VariableDeclaration *decl = var(scope, kind);
1.40 if (!decl)
1.41 return NULL;
1.42
1.43 @@ -762,7 +765,7 @@
1.44 return NULL;
1.45
1.46 while (match(TOK_COMMA)) {
1.47 - Statement *decl = var(kind);
1.48 + Statement *decl = var(scope, kind);
1.49 if (!decl)
1.50 return NULL;
1.51 if (!statements->append(decl))
1.52 @@ -899,7 +902,7 @@
1.53 case TOK_CONST:
1.54 case TOK_NEW:
1.55 scanner_.scan();
1.56 - if ((statement = vars(kind)) == NULL)
1.57 + if ((statement = vars(TOK_STOCK, kind)) == NULL)
1.58 return NULL;
1.59 break;
1.60
1.61 @@ -1296,10 +1299,17 @@
1.62 case TOK_LABEL:
1.63 {
1.64 scanner_.scan();
1.65 - if ((statement = function(kind)) == NULL)
1.66 - return NULL;
1.67 - if ((kind == TOK_FORWARD || kind == TOK_NATIVE) && !matchSemicolon())
1.68 - return NULL;
1.69 + if (kind == TOK_PUBLIC && peek(TOK_CONST)) {
1.70 + if ((statement = var(TOK_PUBLIC, scanner_.scan())) == NULL)
1.71 + return NULL;
1.72 + if (!matchSemicolon())
1.73 + return NULL;
1.74 + } else {
1.75 + if ((statement = function(kind)) == NULL)
1.76 + return NULL;
1.77 + if ((kind == TOK_FORWARD || kind == TOK_NATIVE) && !matchSemicolon())
1.78 + return NULL;
1.79 + }
1.80 break;
1.81 }
1.82
1.83 @@ -1310,8 +1320,8 @@
1.84 // declarations yet, to see if we can get away with forcing
1.85 // a nicer top-level style.
1.86 scanner_.scan();
1.87 - if ((statement = var(kind)) == NULL)
1.88 - return NULL;
1.89 + if ((statement = var(TOK_STOCK, kind)) == NULL)
1.90 + return NULL;
1.91 if (!matchSemicolon())
1.92 return NULL;
1.93 break;