Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Unified Diff: frog/leg/scanner/listener.dart

Issue 9418045: Support for native in leg, and start moving native tests to a specific test suite. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: frog/leg/scanner/listener.dart
===================================================================
--- frog/leg/scanner/listener.dart (revision 4390)
+++ frog/leg/scanner/listener.dart (working copy)
@@ -423,15 +423,30 @@
}
Token expectedExpression(Token token) {
- error("Expected an expression, but got '$token'", token);
+ error("expected an expression, but got '$token'", token);
return skipToEof(token);
}
Token unexpected(Token token) {
- error("Unexpected token '$token'", token);
+ error("unexpected token '$token'", token);
return skipToEof(token);
}
+ Token expectedBlockToSkip(Token token) {
+ error("expected a block, but got '$token'", token);
+ return skipToEof(token);
+ }
+
+ Token expectedFunctionBody(Token token) {
+ error("expected a function body, but got '$token'", token);
+ return skipToEof(token);
+ }
+
+ Token expectedClassBody(Token token) {
+ error("expected a class body, but got '$token'", token);
+ return skipToEof(token);
+ }
+
skipToEof(Token token) {
while (token.info !== EOF_INFO) {
token = token.next;
@@ -511,12 +526,15 @@
void endClassDeclaration(int interfacesCount, Token beginToken,
Token extendsKeyword, Token implementsKeyword,
Token endToken) {
+ SourceString nativeName = native.checkForNativeClass(this);
NodeList interfaces =
makeNodeList(interfacesCount, implementsKeyword, null, ",");
TypeAnnotation supertype = popNode();
Identifier name = popNode();
- pushElement(new PartialClassElement(
- name.source, beginToken, endToken, compilationUnitElement));
+ ClassElement element = new PartialClassElement(
+ name.source, beginToken, endToken, compilationUnitElement);
+ element.nativeName = nativeName;
+ pushElement(element);
}
void endDefaultClause(Token defaultKeyword) {
@@ -665,16 +683,42 @@
}
Token expectedExpression(Token token) {
- listener.cancel("Expected an expression, but got '$token'", token: token);
+ listener.cancel("expected an expression, but got '$token'", token: token);
pushNode(null);
return skipToEof(token);
}
Token unexpected(Token token) {
- listener.cancel("Unexpected token '$token'", token: token);
+ listener.cancel("unexpected token '$token'", token: token);
return skipToEof(token);
}
+ Token expectedBlockToSkip(Token token) {
+ if (token.stringValue === 'native') {
+ return native.handleNativeBlockToSkip(this, token);
+ } else {
+ return unexpected(token);
+ }
+ }
+
+ Token expectedFunctionBody(Token token) {
+ listener.cancel("expected a function body, but got '$token'", token: token);
+ return skipToEof(token);
+ }
+
+ Token expectedClassBody(Token token) {
+ listener.cancel("expected a class body, but got '$token'", token: token);
+ return skipToEof(token);
+ }
+
+ Token expectedClassBodyToSkip(Token token) {
+ if (token.stringValue === 'native') {
+ return native.handleNativeClassBodyToSkip(this, token);
+ } else {
+ return unexpected(token);
+ }
+ }
+
void recoverableError(String message, [Token token, Node node]) {
listener.cancel(message, token: token, node: node);
}
@@ -834,7 +878,7 @@
kind = ElementKind.GETTER;
} else if (getOrSet.stringValue === 'set') {
kind = ElementKind.SETTER;
- }
+ }
pushElement(new PartialFunctionElement(name.source, beginToken, getOrSet,
endToken, kind,
modifiers, compilationUnitElement));
@@ -882,6 +926,25 @@
listener.cancel("internal error: '${token.value}': ${error}", token: token);
}
+ Token expectedFunctionBody(Token token) {
+ if (token.stringValue === 'native') {
+ return native.handleNativeFunctionBody(this, token);
+ } else {
+ listener.cancel(
+ "expected a function body, but got '$token'", token: token);
+ return skipToEof(token);
+ }
+ }
+
+ Token expectedClassBody(Token token) {
+ if (token.stringValue === 'native') {
+ return native.handleNativeClassBody(this, token);
+ } else {
+ listener.cancel("expected a class body, but got '$token'", token: token);
+ return skipToEof(token);
+ }
+ }
+
void handleLiteralInt(Token token) {
pushNode(new LiteralInt(token, (t, e) => handleOnError(t, e)));
}

Powered by Google App Engine
This is Rietveld 408576698